@jaypie/mcp 0.8.175 → 0.8.177

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: "a3ee062e"
58
+ commit: "962b054a"
59
59
  ,
60
- version: "0.8.175"
60
+ version: "0.8.177"
61
61
  ,
62
- versionString: "@jaypie/mcp@0.8.175#a3ee062e"
62
+ versionString: "@jaypie/mcp@0.8.177#962b054a"
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.175",
3
+ "version": "0.8.177",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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,9 @@
1
+ ---
2
+ version: 1.2.113
3
+ date: 2026-09-27
4
+ summary: Pulls @jaypie/llm 1.3.54
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **`@jaypie/llm` 1.3.54**: stale rejection guards share one `unhandledRejection` listener, ending `MaxListenersExceededWarning` under concurrent retries (#597).
@@ -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,15 @@
1
+ ---
2
+ version: 1.3.54
3
+ date: 2026-09-27
4
+ summary: Stale rejection guards share one unhandledRejection listener, ending MaxListenersExceededWarning under concurrent retries
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - The stale rejection guard no longer adds one `process` `unhandledRejection` listener per retrying request (#597). All active guards share a single listener, installed with the first guard and removed with the last, so the listener count stays constant under concurrency
10
+ - Each guard keeps its own caught errors; the shared listener suppresses a transient network error or a rejection matching any active guard's caught errors
11
+ - A redundant `remove()` no longer affects other active guards
12
+
13
+ ## Testing
14
+
15
+ - `npm run test -w packages/llm`: new specs cover a constant listener count across 12 concurrent guards, redundant `remove()`, and cross-guard sibling suppression
@@ -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: 0.8.177
3
+ date: 2026-09-27
4
+ summary: Release notes for @jaypie/llm 1.3.54 and jaypie 1.2.113
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - **Release notes**: `@jaypie/llm` 1.3.54 and `jaypie` 1.2.113.
@@ -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
@@ -779,6 +779,7 @@ for await (const chunk of Llm.stream(input, {
779
779
 
780
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.
781
781
  - An already-aborted signal fails before the first request goes out.
782
+ - Every provider forwards the signal to its request, Google included.
782
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`.
783
784
  - The exchange envelope still settles on an abort, carrying the partial usage and history with `status: "incomplete"`.
784
785
 
@@ -828,6 +829,27 @@ const response = await llm.operate(input, {
828
829
  });
829
830
  ```
830
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
+
831
853
  ### Fallback Response Metadata
832
854
 
833
855
  ```typescript