@jaypie/mcp 0.8.145 → 0.8.146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -10,7 +10,7 @@ import { gt } from 'semver';
|
|
|
10
10
|
/**
|
|
11
11
|
* Docs Suite - Documentation services (skill, version, release_notes)
|
|
12
12
|
*/
|
|
13
|
-
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.
|
|
13
|
+
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.146#5d742935"
|
|
14
14
|
;
|
|
15
15
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
16
16
|
const __dirname$1 = path.dirname(__filename$1);
|
package/package.json
CHANGED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.3.39
|
|
3
|
+
date: 2026-09-05
|
|
4
|
+
summary: Meta Model API provider with MODEL.MUSE_SPARK and MODEL.MUSE_SPARK_CONTRIBUTOR
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `MetaProvider` (`PROVIDER.META`, name `meta`) calls Meta's Model API at
|
|
10
|
+
`https://api.meta.ai/v1`. The API serves the OpenAI Responses protocol, so
|
|
11
|
+
`MetaAdapter` extends `OpenAiAdapter` the way `XaiAdapter` does and inherits
|
|
12
|
+
request building, tool handling, structured output, streaming, and `input_file`
|
|
13
|
+
data URIs. `Llm` resolves the provider from the model id, the bare name
|
|
14
|
+
`meta`, or a `meta:` prefix.
|
|
15
|
+
- `MODEL.MUSE_SPARK` is `muse-spark-1.3` and `PROVIDER.META.DEFAULT`.
|
|
16
|
+
`MODEL.MUSE_SPARK_CONTRIBUTOR` is `muse-spark-1.3-contributor`: the same
|
|
17
|
+
model at roughly a tenth of the price in exchange for data use (prompts and
|
|
18
|
+
completions may train Meta models), limited to 100 RPM. The contributor tier
|
|
19
|
+
is an explicit opt-in and is never the default.
|
|
20
|
+
- `COST` prices all five Muse Spark ids: `muse-spark-1.3` and `muse-spark-1.2`
|
|
21
|
+
at $1.25 input / $4.25 output with $0.15 cache reads, the `-contributor` ids
|
|
22
|
+
at $0.10 / $0.20 with $0.002 cache reads, and `muse-spark-1.1` at the
|
|
23
|
+
standard rate. Reasoning bills as output; no write premium is published.
|
|
24
|
+
- The API key is read from `META_API_KEY`, then from `MODEL_API_KEY` (the name
|
|
25
|
+
Meta's own docs and SDK examples use), then an explicit `apiKey` option wins
|
|
26
|
+
over both. `ConfigurationError` when none resolves.
|
|
27
|
+
- `reasoning.effort` walks Meta's `minimal | low | medium | high | xhigh | max`
|
|
28
|
+
ladder. `max` is limited to the Standard-tier `muse-spark-1.3`, so `highest`
|
|
29
|
+
on the contributor id or an older release clamps to `xhigh` and logs at
|
|
30
|
+
debug. Muse Spark always reasons: `none` is rejected and never emitted.
|
|
31
|
+
`reasoning.summary: "auto"` is requested on every Muse Spark id.
|
|
32
|
+
- The `user` option is sent as `safety_identifier`, the field Meta names as the
|
|
33
|
+
successor to the deprecated `user`.
|
|
34
|
+
- A 402 from Meta is classified as a terminal billing failure (`LlmQuotaError`,
|
|
35
|
+
`reason: "billing"`) rather than retried.
|
|
36
|
+
- `PROVIDER.META.MODEL_MATCH_WORDS` is `["muse"]`. `meta` is deliberately not a
|
|
37
|
+
match word: `meta.llama-*` stays on Bedrock and `meta-llama/*` on OpenRouter.
|
|
38
|
+
- `OpenAiAdapter` gains a `protected supportsReasoningSummary(model)` hook so
|
|
39
|
+
OpenAI-compatible subclasses can request reasoning summaries for models
|
|
40
|
+
outside OpenAI's `gpt-5+` / o-series naming.
|
|
41
|
+
|
|
42
|
+
## Testing
|
|
43
|
+
|
|
44
|
+
- Unit coverage for the adapter (field renaming, reasoning summary, effort
|
|
45
|
+
ladder and the `max` gate, `prompt_cache_key`, usage with `cached_tokens` and
|
|
46
|
+
`reasoning_tokens`, 402 classification), the provider (key resolution order),
|
|
47
|
+
routing (every cataloged and priced id, the `meta:` prefix, Bedrock and
|
|
48
|
+
OpenRouter ids left alone), and constants (default never the contributor
|
|
49
|
+
tier, every Muse Spark price within the `COST` invariants).
|
|
50
|
+
- A `meta` group joins the CI capability matrix in `npm-check.yml` and
|
|
51
|
+
`npm-deploy.yml`, keyed on `CICD_META_API_KEY`.
|
|
52
|
+
- Live verification on 2026-09-05: the capability matrix passed on both
|
|
53
|
+
cataloged models. The `pdf` cell on `muse-spark-1.3` overran the 180 second
|
|
54
|
+
cell deadline on the first run and passed on a rerun, so no `MATRIX_EXPECT`
|
|
55
|
+
entry is pinned for it. Live probes confirmed `max` is accepted on
|
|
56
|
+
`muse-spark-1.3` and rejected with a 400 on the contributor tier, the
|
|
57
|
+
response echoes the literal model id, a repeat call reports `cached_tokens`,
|
|
58
|
+
and a two-turn tool call replays the reasoning item without error. Before
|
|
59
|
+
billing was configured every call returned 402 `billing_not_configured`,
|
|
60
|
+
which exercised the billing classification.
|
|
61
|
+
- `test/matrix.ts` now exits the process explicitly after a passing run. An
|
|
62
|
+
abandoned cell keeps retrying in the background, and its backoff timers and
|
|
63
|
+
open socket held the event loop open after the verdict printed.
|
|
64
|
+
- `test/matrix.ts` treats a provider refusal (`stopReason: "refusal"`) as an
|
|
65
|
+
inconclusive cell, alongside the cell deadline and an exhausted turn budget.
|
|
66
|
+
The `claude-opus-5` pdf cell refused on five of seven CI runs across two
|
|
67
|
+
branches and answered on every local run, so failing on it reported a
|
|
68
|
+
classifier flake as a missing capability. Every cell now requests the
|
|
69
|
+
exchange envelope so the stop reason is observable; the refusal still prints
|
|
70
|
+
in ISSUES.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.146
|
|
3
|
+
date: 2026-09-05
|
|
4
|
+
summary: Release notes for @jaypie/llm 1.3.39, @jaypie/testkit 1.2.68, and jaypie 1.2.97
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Added release notes for `@jaypie/llm` 1.3.39, `@jaypie/testkit` 1.2.68, and
|
|
10
|
+
`jaypie` 1.2.97
|
|
11
|
+
- `skills/llm.md` documents the Meta provider: the `muse` match word and
|
|
12
|
+
`meta:` prefix, `MODEL.MUSE_SPARK` and `MODEL.MUSE_SPARK_CONTRIBUTOR` with the
|
|
13
|
+
contributor tier's data-use terms, `META_API_KEY` with the `MODEL_API_KEY`
|
|
14
|
+
fallback, the Meta column of the reasoning effort table, and prompt caching
|
package/skills/llm.md
CHANGED
|
@@ -39,16 +39,20 @@ the alias rather than the id it currently resolves to. Read the id off
|
|
|
39
39
|
| Mistral | "mistral", "ministral", "codestral", "devstral", "magistral", "pixtral", "voxtral" | `MODEL.MISTRAL.LARGE` |
|
|
40
40
|
| OpenRouter | "openrouter" | `MODEL.OPENROUTER.SONNET` |
|
|
41
41
|
| xAI | "xai", "grok" | `MODEL.GROK` |
|
|
42
|
+
| Meta | "muse" (plus the exact name `meta` and a `meta:` prefix) | `MODEL.MUSE_SPARK` |
|
|
42
43
|
| Bedrock | "amazon.nova", "anthropic.claude", "meta.llama", "deepseek.", "google.gemma", "moonshotai.", "openai.gpt-oss", … | `MODEL.NOVA_PRO` |
|
|
43
44
|
|
|
44
45
|
The provider name for Gemini models is `"google"` — `"gemini"` is accepted as a deprecated alias.
|
|
45
46
|
|
|
46
47
|
Mistral's family names mostly do not contain the substring "mistral" (`ministral` is m-i-n-i-s-t-r-a-l; `codestral`/`devstral`/`pixtral`/`voxtral` share only the `-tral` suffix), so each family carries its own match word. Bedrock-hosted `mistral.mistral-*` ids still resolve to `bedrock`, and `mistralai/*` routes still resolve to `openrouter`; use the `mistral:` prefix to force the direct API.
|
|
47
48
|
|
|
49
|
+
"meta" is deliberately not a Meta match word: `meta.llama-*` is a Bedrock id and `meta-llama/*` an OpenRouter route. Muse Spark ids resolve on "muse"; use the `meta:` prefix to force the Meta Model API for any other id.
|
|
50
|
+
|
|
48
51
|
### Model Constants
|
|
49
52
|
|
|
50
53
|
- **`PROVIDER.<name>.DEFAULT`** — the single default model per provider (above), used when no `model` is given.
|
|
51
|
-
- **`LLM.MODEL.*`** — the named model catalog (e.g. `MODEL.SONNET`, `MODEL.ASTRA`, `MODEL.SOL`, `MODEL.GEMINI_FLASH`, `MODEL.GROK`, `MODEL.NOVA_PRO`, `MODEL.NOVA_LITE`), plus three nested subtrees: `MODEL.FIREWORKS.*` for Fireworks serverless models (`DEEPSEEK`, `GLM`, `GPT_OSS`, `INKLING`, `KIMI`, `MINIMAX`, `NEMOTRON`, `QWEN`), `MODEL.MISTRAL.*` (`LARGE`, `OCR`, `SMALL`), and `MODEL.OPENROUTER.*` for provider-prefixed routes (`GLM`, `LUNA`, `SONNET`). Pick specific models from here. `MODEL.MISTRAL.OCR` serves `POST /v1/ocr` rather than chat completions: it is priced per page, carries no `COST` entry, and is reached through `MistralProvider.ocr()`. Amazon's Nova models are first-class ids served over Bedrock; Bedrock's third-party routes are not catalogued — pass the literal id (e.g. `us.anthropic.claude-sonnet-4-6`) and `determineModelProvider` resolves it to `bedrock`.
|
|
54
|
+
- **`LLM.MODEL.*`** — the named model catalog (e.g. `MODEL.SONNET`, `MODEL.ASTRA`, `MODEL.SOL`, `MODEL.GEMINI_FLASH`, `MODEL.GROK`, `MODEL.MUSE_SPARK`, `MODEL.MUSE_SPARK_CONTRIBUTOR`, `MODEL.NOVA_PRO`, `MODEL.NOVA_LITE`), plus three nested subtrees: `MODEL.FIREWORKS.*` for Fireworks serverless models (`DEEPSEEK`, `GLM`, `GPT_OSS`, `INKLING`, `KIMI`, `MINIMAX`, `NEMOTRON`, `QWEN`), `MODEL.MISTRAL.*` (`LARGE`, `OCR`, `SMALL`), and `MODEL.OPENROUTER.*` for provider-prefixed routes (`GLM`, `LUNA`, `SONNET`). Pick specific models from here. `MODEL.MISTRAL.OCR` serves `POST /v1/ocr` rather than chat completions: it is priced per page, carries no `COST` entry, and is reached through `MistralProvider.ocr()`. Amazon's Nova models are first-class ids served over Bedrock; Bedrock's third-party routes are not catalogued — pass the literal id (e.g. `us.anthropic.claude-sonnet-4-6`) and `determineModelProvider` resolves it to `bedrock`.
|
|
55
|
+
- `MODEL.MUSE_SPARK` and `MODEL.MUSE_SPARK_CONTRIBUTOR` are the same Meta model at two tiers. The contributor tier is roughly a tenth of the price because prompts and completions may train Meta models; it is limited to 100 RPM and does not accept `reasoning.effort: "max"`. It is an explicit opt-in: `PROVIDER.META.DEFAULT` is `MODEL.MUSE_SPARK`.
|
|
52
56
|
- The catalog is the **single source of truth for CI coverage**: `packages/llm/test/models.ts` derives the live capability matrix from `MODEL.*` plus each `PROVIDER.*.DEFAULT`, and the workflow shards it by provider. Adding a model to `MODEL.*` puts it under test; no id list exists anywhere else.
|
|
53
57
|
- **Deprecated:** the size-tier map `PROVIDER.<name>.MODEL.{DEFAULT,LARGE,SMALL,TINY}`, the `DEFAULT.MODEL` bundle, and `ALL` are `@deprecated` and retired in 2.0 — use `PROVIDER.*.DEFAULT` for defaults and `MODEL.*` for named models.
|
|
54
58
|
|
|
@@ -644,6 +648,7 @@ MISTRAL_API_KEY # Required for Mistral
|
|
|
644
648
|
OPENAI_API_KEY # Required for OpenAI
|
|
645
649
|
OPENROUTER_API_KEY # Required for OpenRouter
|
|
646
650
|
XAI_API_KEY # Required for xAI (Grok)
|
|
651
|
+
META_API_KEY # Required for Meta (Muse Spark); MODEL_API_KEY is read as a fallback
|
|
647
652
|
```
|
|
648
653
|
|
|
649
654
|
Keys are resolved via `getEnvSecret()` which supports AWS Secrets Manager.
|
|
@@ -858,13 +863,13 @@ await Llm.operate("Solve this step by step", {
|
|
|
858
863
|
Per-provider translation (`medium`/`high` stay aligned across providers; ends
|
|
859
864
|
collapse where a provider has fewer rungs):
|
|
860
865
|
|
|
861
|
-
| `effort` | OpenAI `reasoning.effort` | Anthropic `output_config.effort` | Gemini 3 `thinkingLevel` | Gemini 2.5 `thinkingBudget` | Grok `reasoning_effort` | OpenRouter `reasoning.effort` | Fireworks `reasoning_effort` | Mistral `reasoning_effort` |
|
|
862
|
-
|
|
863
|
-
| `lowest` | minimal | low | MINIMAL | 512 | low | minimal | low | none |
|
|
864
|
-
| `low` | low | low | LOW | 4096 | low | low | low | high |
|
|
865
|
-
| `medium` | medium | medium | MEDIUM | 8192 | medium | medium | medium | high |
|
|
866
|
-
| `high` | high | high | HIGH | 16384 | high | high | high | high |
|
|
867
|
-
| `highest` | xhigh | max | HIGH | 24576 | high | xhigh | high | high |
|
|
866
|
+
| `effort` | OpenAI `reasoning.effort` | Anthropic `output_config.effort` | Gemini 3 `thinkingLevel` | Gemini 2.5 `thinkingBudget` | Grok `reasoning_effort` | Meta `reasoning.effort` | OpenRouter `reasoning.effort` | Fireworks `reasoning_effort` | Mistral `reasoning_effort` |
|
|
867
|
+
|-----------|---------------------------|----------------------------------|--------------------------|-----------------------------|-------------------------|-------------------------|-------------------------------|------------------------------|----------------------------|
|
|
868
|
+
| `lowest` | minimal | low | MINIMAL | 512 | low | minimal | minimal | low | none |
|
|
869
|
+
| `low` | low | low | LOW | 4096 | low | low | low | low | high |
|
|
870
|
+
| `medium` | medium | medium | MEDIUM | 8192 | medium | medium | medium | medium | high |
|
|
871
|
+
| `high` | high | high | HIGH | 16384 | high | high | high | high | high |
|
|
872
|
+
| `highest` | xhigh | max | HIGH | 24576 | high | max | xhigh | high | high |
|
|
868
873
|
|
|
869
874
|
When a neutral level has no distinct native rung and collapses onto a neighbor
|
|
870
875
|
it is "papered over." Papering that follows from the provider's native scale
|
|
@@ -890,6 +895,10 @@ erroring):
|
|
|
890
895
|
other models get nothing.
|
|
891
896
|
- **xAI** — only models whose name advertises reasoning (a `*-reasoning`
|
|
892
897
|
suffix); a bare version name and `*-non-reasoning` are skipped.
|
|
898
|
+
- **Meta** — every `muse-spark` id; merges with the auto `reasoning.summary`.
|
|
899
|
+
`max` is limited to the Standard-tier `muse-spark-1.3`, so `highest` on the
|
|
900
|
+
contributor id or an older release clamps to `xhigh` (logged at debug).
|
|
901
|
+
Muse Spark always reasons: `none` is rejected by the API and never emitted.
|
|
893
902
|
- **OpenRouter** — always forwarded; OpenRouter maps to the routed model's
|
|
894
903
|
nearest supported level.
|
|
895
904
|
- **Fireworks** — always forwarded (`reasoning_effort`); the API accepts it on
|
|
@@ -927,7 +936,7 @@ elsewhere); `false`/`0` = disabled; `"5m"`/`"1h"` = that TTL.
|
|
|
927
936
|
|
|
928
937
|
Per provider: Anthropic `cache_control` on system + last tool; Bedrock
|
|
929
938
|
`cachePoint` blocks (model-gated, auto-denylisted and retried without on a 400;
|
|
930
|
-
5m only); OpenAI/xAI automatic caching + a stable `prompt_cache_key`; OpenRouter
|
|
939
|
+
5m only); OpenAI/xAI/Meta automatic caching + a stable `prompt_cache_key`; OpenRouter
|
|
931
940
|
`cache_control` on the system message (forwarded to Anthropic/Gemini backends);
|
|
932
941
|
Google implicit caching only (Gemini 2.5+). TTL applies to Anthropic/OpenRouter;
|
|
933
942
|
others use provider defaults. Sub-threshold prefixes silently no-op. Cache
|
|
@@ -967,7 +976,7 @@ await Llm.operate(input, {
|
|
|
967
976
|
});
|
|
968
977
|
```
|
|
969
978
|
|
|
970
|
-
OpenAI and
|
|
979
|
+
OpenAI, xAI, and Meta leave the limit unset (their defaults do not truncate early).
|
|
971
980
|
Mistral is capped (32,768 streaming / 16,384 non-streaming) despite publishing
|
|
972
981
|
no low ceiling: a Mistral model can degenerate into restating its answer when
|
|
973
982
|
`format` and tools are combined, and an uncapped completion turns that into a
|