@jaypie/mcp 0.8.174 → 0.8.176

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.
package/dist/assets.js CHANGED
@@ -55,11 +55,11 @@ function getMcpAssetPaths() {
55
55
  */
56
56
  function getMcpBuildInfo() {
57
57
  return {
58
- commit: "6d3baca1"
58
+ commit: "92677918"
59
59
  ,
60
- version: "0.8.174"
60
+ version: "0.8.176"
61
61
  ,
62
- versionString: "@jaypie/mcp@0.8.174#6d3baca1"
62
+ versionString: "@jaypie/mcp@0.8.176#92677918"
63
63
  ,
64
64
  };
65
65
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.174",
3
+ "version": "0.8.176",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.111
3
+ date: 2026-09-27
4
+ summary: Pulls @jaypie/llm 1.3.52
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`@jaypie/llm` 1.3.52**: Gemini tool declarations no longer send `additionalProperties` and other unsupported JSON Schema keywords (#593).
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.112
3
+ date: 2026-09-27
4
+ summary: Pulls @jaypie/llm 1.3.53
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`@jaypie/llm` 1.3.53**: per-attempt `timeout` aborts a stalled provider request and falls back, instead of waiting out undici's 300 s headers timeout (#595).
@@ -0,0 +1,15 @@
1
+ ---
2
+ version: 1.3.52
3
+ date: 2026-09-27
4
+ summary: Gemini tool declarations convert parameters to the OpenAPI 3.0 subset, so Zod-derived tool schemas no longer fail with a 400
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - The Google adapter passes every tool's `parameters` through `jsonSchemaToOpenApi3`, the same conversion `responseSchema` uses. Previously Gemini received the schema verbatim and rejected keywords outside its subset (`additionalProperties`, which `z.toJSONSchema` always emits), failing the request and pushing every call to the fallback provider (#593)
10
+ - Covers user tools, the legacy `structured_output` tool, and the Gemini 3 runtime fallback that rebuilds the request after the native `responseJsonSchema` + tools combo is rejected
11
+ - `const` and `$ref` are stripped, as in `responseSchema`; literal and referenced constraints do not reach Gemini
12
+
13
+ ## Testing
14
+
15
+ - `npm run test -w packages/llm`: new GoogleAdapter specs assert no `$schema`, `$defs`, `$ref`, `additionalProperties`, or `const` reaches any function declaration, across nested `properties`, `items`, and `anyOf`, and that caller schemas are not mutated
@@ -0,0 +1,18 @@
1
+ ---
2
+ version: 1.3.53
3
+ date: 2026-09-27
4
+ summary: Per-attempt timeout aborts a stalled provider request and falls back instead of waiting out undici's 300 s headers timeout
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - New `timeout` option on `operate()`/`stream()` and on each fallback entry: a per-attempt deadline in milliseconds (#595). A stalled attempt is aborted and throws `LlmTimeoutError`, which extends `LlmTransientError` (status 504, `timeoutMs`)
10
+ - Down a fallback chain, a timeout moves to the next entry at once; on a single model or the linger pass it retries on the transient budget with the same deadline. It never surfaces as `LlmAbortError`, so the chain does not stop
11
+ - `stream()` applies `timeout` as an idle timeout, restarted by every chunk and paused while the consumer holds one
12
+ - A fallback entry's `timeout` replaces the call's for that entry; `false` disables it. No default applies
13
+ - The Google adapter now forwards the attempt signal to its requests. Previously it dropped the signal, so neither a caller abort nor a retry teardown cancelled an in-flight Gemini call
14
+ - `LlmTimeoutError` is exported from `@jaypie/llm`
15
+
16
+ ## Testing
17
+
18
+ - `npm run test -w packages/llm`: new specs cover the RetryExecutor deadline, OperateLoop and StreamLoop timeouts (including an adapter that swallows the abort), chain fall-over on a timeout, entry-level overrides, and Google signal forwarding
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 0.8.175
3
+ date: 2026-09-27
4
+ summary: llm skill documents tool schema conversion for Gemini
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`llm` skill**: "Define Tools with Toolkit" notes that `z.toJSONSchema` output works as `parameters` and that Google converts tool schemas to Gemini's OpenAPI 3.0 subset.
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 0.8.176
3
+ date: 2026-09-27
4
+ summary: llm skill documents the per-attempt timeout
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`llm` skill**: new "Attempt Timeout" section under Fallback Providers; Cancellation notes Google now honors the signal.
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.78
3
+ date: 2026-09-27
4
+ summary: Re-exports LlmTimeoutError from the llm mock
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `LlmTimeoutError` re-exported from `@jaypie/llm` alongside the other `LlmError` classes.
package/skills/llm.md CHANGED
@@ -182,6 +182,8 @@ const response = await Llm.operate("What's the weather in NYC?", {
182
182
  });
183
183
  ```
184
184
 
185
+ `parameters` is JSON Schema; `z.toJSONSchema(...)` output works directly. Each provider receives a schema it accepts: Google converts tool parameters (and the `structured_output` tool) to Gemini's OpenAPI 3.0 subset, stripping `$schema`, `$defs`, `$ref`, `additionalProperties`, and `const` at every depth. Literal (`const`) and `$ref` constraints do not reach Gemini; spell them out in `description` or `enum` when they matter.
186
+
185
187
  ### Built-in Tools
186
188
 
187
189
  ```typescript
@@ -777,6 +779,7 @@ for await (const chunk of Llm.stream(input, {
777
779
 
778
780
  - A caller abort is terminal and is never retried. `operate()` rejects with `LlmAbortError` (`category: "aborted"`, status 499); `stream()` yields an error chunk with the same status, then its final `done` chunk.
779
781
  - An already-aborted signal fails before the first request goes out.
782
+ - Every provider forwards the signal to its request, Google included.
780
783
  - Abandoning a `stream()` generator (`break`, `return`, or a thrown error in the consumer) aborts the upstream request on teardown, with or without a `signal`.
781
784
  - The exchange envelope still settles on an abort, carrying the partial usage and history with `status: "incomplete"`.
782
785
 
@@ -826,6 +829,27 @@ const response = await llm.operate(input, {
826
829
  });
827
830
  ```
828
831
 
832
+ ### Attempt Timeout
833
+
834
+ `timeout` sets a per-attempt deadline in milliseconds. Without it, a provider that accepts the connection but never answers holds the chain until the runtime gives up (undici waits 300 s for response headers). A stalled attempt is aborted and throws `LlmTimeoutError` (a `LlmTransientError`, status 504, with `timeoutMs`):
835
+
836
+ ```typescript
837
+ const response = await llm.operate(input, {
838
+ fallback: [
839
+ { provider: "openai", model: LLM.MODEL.SOL },
840
+ { provider: "anthropic", model: LLM.MODEL.OPUS, timeout: 180_000 },
841
+ ],
842
+ timeout: 60_000,
843
+ });
844
+ ```
845
+
846
+ - Down a chain, a timeout moves to the next entry at once. On a single model or the linger pass it retries on the transient budget, each retry with the same deadline.
847
+ - A timeout is never an `LlmAbortError`: the caller's `signal` still owns cancellation.
848
+ - An entry's own `timeout` replaces the call's for that entry; `false` disables it.
849
+ - `stream()` treats `timeout` as an idle timeout: it restarts with every chunk and pauses while the consumer holds one. A stall after partial output yields an error chunk.
850
+ - No default applies; unset means no deadline. Size it above the slowest legitimate non-streaming response (long reasoning runs take minutes).
851
+ - `Llm.ocr` keeps `timeout` as the LlamaParse job deadline.
852
+
829
853
  ### Fallback Response Metadata
830
854
 
831
855
  ```typescript