@jaypie/mcp 0.8.144 → 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.144#c397172d"
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.144",
3
+ "version": "0.8.146",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.96
3
+ date: 2026-09-04
4
+ summary: Pick up @jaypie/llm 1.3.38
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `@jaypie/llm` 1.3.38: catalog `MODEL.ASTRA` as `gpt-6-astra`
@@ -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,43 @@
1
+ ---
2
+ version: 1.3.38
3
+ date: 2026-09-04
4
+ summary: Catalog MODEL.ASTRA as gpt-6-astra
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `MODEL.ASTRA` is `gpt-6-astra`, added alongside `MODEL.SOL` rather than
10
+ replacing it. Astra is a new-generation flagship at twice Sol's rate, so the
11
+ two coexist as distinct offerings and `PROVIDER.OPENAI.DEFAULT` stays on
12
+ `MODEL.SOL`. The catalog addition puts Astra in the live capability matrix and
13
+ the OpenAI hot tests.
14
+ - `COST` gains `gpt-6-astra` at $10.00 input / $50.00 output per million tokens
15
+ with $1.00 cache reads.
16
+ - `reasoning.effort` follows the gpt-6 ladder: `highest` reaches `max`, the rung
17
+ above `xhigh`, and `lowest` clamps to `low` because gpt-6 drops `minimal`. The
18
+ gpt-5 line is unchanged.
19
+ - `PROVIDER.OPENAI.MODEL_MATCH_WORDS` gains `astra`, matching how `sol`, `terra`,
20
+ and `luna` are carried.
21
+
22
+ - CI no longer shards Mistral. The provider's availability does not survive a
23
+ per-push run — a `Rate limit exceeded` 429 across all seven cells, and an
24
+ entitlement refusal before that — so `npm-check.yml` and `npm-deploy.yml` drop
25
+ the `mistral` group. Mistral models stay cataloged, priced, and adapter-tested;
26
+ `APP_GROUP=mistral npm run test:llm:matrix` still reaches the live cells.
27
+
28
+ - `AnthropicAdapter` now logs a warning when a response carries no text block,
29
+ naming the `stop_reason` and the block types actually returned. The call still
30
+ settles with `undefined` content, but a refusal, a thinking-only turn, and a
31
+ truncated one are no longer indistinguishable from each other. Tool-use turns
32
+ are unaffected: they legitimately carry no text.
33
+
34
+ ## Testing
35
+
36
+ - `determineModelProvider` resolves the id on the existing `gpt` match word;
37
+ `astra` is added for the bare name.
38
+ - `maxOutputTokens` leaves OpenAI unset by policy: Astra's 128K ceiling is not a
39
+ low ceiling, and streaming requests carry no limit.
40
+ - The matrix takes no `MATRIX_EXPECT` entry. Astra advertises the same input
41
+ modalities as Sol (text and image), and Sol passes every capability cell.
42
+ - Deprecated `PROVIDER.OPENAI.MODEL` size tiers and the `MODEL.GPT*` aliases are
43
+ unchanged by policy.
@@ -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,10 @@
1
+ ---
2
+ version: 0.8.145
3
+ date: 2026-09-04
4
+ summary: Release notes for @jaypie/llm 1.3.38 and jaypie 1.2.96
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added release notes for `@jaypie/llm` 1.3.38 and `jaypie` 1.2.96
10
+ - `skills/llm.md` documents `MODEL.ASTRA` and the gpt-6 reasoning effort ladder
@@ -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
@@ -32,23 +32,27 @@ the alias rather than the id it currently resolves to. Read the id off
32
32
 
33
33
  | Provider | Match Keywords | Default Model (`PROVIDER.*.DEFAULT`) |
34
34
  |----------|----------------|---------------|
35
- | OpenAI | "openai", "gpt", "sol", "terra", "luna", /^o\d/ | `MODEL.SOL` |
35
+ | OpenAI | "openai", "gpt", "astra", "sol", "terra", "luna", /^o\d/ | `MODEL.SOL` |
36
36
  | Anthropic | "anthropic", "claude", "fable", "haiku", "mythos", "opus", "sonnet" | `MODEL.SONNET` |
37
37
  | Google | "google", "gemini" | `MODEL.GEMINI_FLASH` |
38
38
  | Fireworks | "fireworks" (also matched inside ids like `accounts/fireworks/models/...`) | `MODEL.FIREWORKS.GLM` |
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.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
@@ -873,21 +878,27 @@ Anthropic `lowest`) is the only possible outcome for that provider and is not
873
878
  logged. Papering that depends on the specific model, such as OpenAI clamping
874
879
  `highest` on a model predating `xhigh`, logs at `log.debug`. OpenAI's extremes
875
880
  are also version-gated: `xhigh` (`highest`) applies
876
- only to gpt-5.2+ and `minimal` (`lowest`) only to gpt-5.4+ (its history is
877
- non-monotonic); older gpt-5 / o-series clamp the end to `high`/`low`.
881
+ only to gpt-5.2+ and `minimal` (`lowest`) only to gpt-5.4 through gpt-5 (its
882
+ history is non-monotonic and gpt-6 drops it again); older gpt-5 / o-series
883
+ clamp the end to `high`/`low`. From gpt-6 onward `highest` reaches `max`, the
884
+ rung above `xhigh`, and `lowest` clamps to `low`.
878
885
 
879
886
  Gating (effort is silently ignored where reasoning is unavailable, never
880
887
  erroring):
881
888
 
882
889
  - **OpenAI** — only reasoning models (`gpt-5+`, `o`-series); merges with the
883
890
  auto `reasoning.summary`. `xhigh` requires gpt-5.2+, `minimal` requires
884
- gpt-5.4+ (else clamped).
891
+ gpt-5.4 through gpt-5, and gpt-6+ takes `max` for `highest` (else clamped).
885
892
  - **Anthropic** — only Claude 4.5+ / 5 models (`output_config.effort`); merges
886
893
  alongside a structured-output `format` config.
887
894
  - **Google** — `thinkingLevel` for Gemini 3.x, `thinkingBudget` for Gemini 2.5;
888
895
  other models get nothing.
889
896
  - **xAI** — only models whose name advertises reasoning (a `*-reasoning`
890
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.
891
902
  - **OpenRouter** — always forwarded; OpenRouter maps to the routed model's
892
903
  nearest supported level.
893
904
  - **Fireworks** — always forwarded (`reasoning_effort`); the API accepts it on
@@ -925,7 +936,7 @@ elsewhere); `false`/`0` = disabled; `"5m"`/`"1h"` = that TTL.
925
936
 
926
937
  Per provider: Anthropic `cache_control` on system + last tool; Bedrock
927
938
  `cachePoint` blocks (model-gated, auto-denylisted and retried without on a 400;
928
- 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
929
940
  `cache_control` on the system message (forwarded to Anthropic/Gemini backends);
930
941
  Google implicit caching only (Gemini 2.5+). TTL applies to Anthropic/OpenRouter;
931
942
  others use provider defaults. Sub-threshold prefixes silently no-op. Cache
@@ -965,7 +976,7 @@ await Llm.operate(input, {
965
976
  });
966
977
  ```
967
978
 
968
- 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).
969
980
  Mistral is capped (32,768 streaming / 16,384 non-streaming) despite publishing
970
981
  no low ceiling: a Mistral model can degenerate into restating its answer when
971
982
  `format` and tools are combined, and an uncapped completion turns that into a