@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.145#b191a934"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.145",
3
+ "version": "0.8.146",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,10 @@
1
+ ---
2
+ version: 1.2.97
3
+ date: 2026-09-05
4
+ summary: Pick up @jaypie/llm 1.3.39
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `@jaypie/llm` 1.3.39: Meta Model API provider with `MODEL.MUSE_SPARK` and
10
+ `MODEL.MUSE_SPARK_CONTRIBUTOR`
@@ -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
@@ -0,0 +1,10 @@
1
+ ---
2
+ version: 1.2.68
3
+ date: 2026-09-05
4
+ summary: Mock MetaProvider from @jaypie/llm
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `@jaypie/testkit/mock` wraps `MetaProvider` alongside the other `@jaypie/llm`
10
+ providers, matching `@jaypie/llm` 1.3.39.
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 xAI leave the limit unset (their defaults do not truncate early).
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