@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 +3 -3
- package/package.json +1 -1
- package/release-notes/jaypie/1.2.111.md +9 -0
- package/release-notes/jaypie/1.2.112.md +9 -0
- package/release-notes/llm/1.3.52.md +15 -0
- package/release-notes/llm/1.3.53.md +18 -0
- package/release-notes/mcp/0.8.175.md +9 -0
- package/release-notes/mcp/0.8.176.md +9 -0
- package/release-notes/testkit/1.2.78.md +9 -0
- package/skills/llm.md +24 -0
package/dist/assets.js
CHANGED
|
@@ -55,11 +55,11 @@ function getMcpAssetPaths() {
|
|
|
55
55
|
*/
|
|
56
56
|
function getMcpBuildInfo() {
|
|
57
57
|
return {
|
|
58
|
-
commit: "
|
|
58
|
+
commit: "92677918"
|
|
59
59
|
,
|
|
60
|
-
version: "0.8.
|
|
60
|
+
version: "0.8.176"
|
|
61
61
|
,
|
|
62
|
-
versionString: "@jaypie/mcp@0.8.
|
|
62
|
+
versionString: "@jaypie/mcp@0.8.176#92677918"
|
|
63
63
|
,
|
|
64
64
|
};
|
|
65
65
|
}
|
package/package.json
CHANGED
|
@@ -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.
|
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
|