pi-quiver 3.3.1 → 3.3.2

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/CHANGELOG.md CHANGED
@@ -8,6 +8,10 @@ Published to npm as `pi-quiver` (`pi install npm:pi-quiver`). Pushing a
8
8
  via OIDC trusted publishing. The release helper at
9
9
  `.agents/skills/release/scripts/release.sh` cuts the tag; CI publishes.
10
10
 
11
+ ## v3.3.2 - 2026-07-30
12
+
13
+ - **`fast-mode` supports Claude Opus 5.** Added `claude-opus-5` to the model prefix allowlist (fast mode API mechanics are identical to Opus 4.8: `speed: "fast"` + `fast-mode-2026-02-01` beta; compat verified identical in pi-ai 0.82.1, so `buildBetaHeader`'s OAuth-only preservation still holds).
14
+
11
15
  ## v3.3.1 - 2026-07-19
12
16
 
13
17
  - **`provider-stall-watchdog`: bounded multi-stall retry via `maxStallRetries`.** Each semantic stall converts to a retryable error until the budget is exhausted; previously only the first stall retried, so a longer provider outage forced manual resubmission (observed stuck streams recover in seconds on a fresh request). Default = layered `retry.maxRetries` (Pi default 3); explicit config wins; positive integer, fails closed. A successful assistant turn resets the counter, mirroring Pi's retry loop.
package/README.md CHANGED
@@ -66,7 +66,7 @@ A 300 KB changelog page never touches your context window - you get a preview an
66
66
  | `doc_to_md.ts` | `doc_to_md` | Convert a local PDF/DOCX/PPTX to Markdown. High-fidelity via `pymupdf4llm` (run through `uv`); degraded pure-JS fallback (`unpdf`) when `uv`/Python is unavailable or conversion times out. DOCX/PPTX convert via LibreOffice first. |
67
67
  | `session-name.ts` | `/session-name` | Manual + opt-in automatic session naming, with Ghostty tab rename. OFF by default. |
68
68
  | `sword-header.ts` | `/builtin-header` | Themed ASCII startup header replacing pi's default logo. OFF by default. |
69
- | `fast-mode.ts` | `/fast` | Inject Anthropic fast-mode (`speed: "fast"` + `anthropic-beta: fast-mode-2026-02-01`) into every Claude Opus 4.8 request, any thinking level. `--fast` flag + `/fast [on\|off\|status]`. OFF by default. |
69
+ | `fast-mode.ts` | `/fast` | Inject Anthropic fast-mode (`speed: "fast"` + `anthropic-beta: fast-mode-2026-02-01`) into every Claude Opus 4.8 / Opus 5 request, any thinking level. `--fast` flag + `/fast [on\|off\|status]`. OFF by default. |
70
70
  | `provider-stall-watchdog.ts` | - | Opt-in semantic-silence watchdog for human interactive TUI runs. Warns after 2 minutes and recovers after 4 minutes; policy D offers each stall to Pi's retry loop until the stall retry budget (`maxStallRetries`, default = `retry.maxRetries`) is exhausted. OFF by default. |
71
71
 
72
72
  Full routing rules, size-gate mechanics, and config: [doc/fetch.md](doc/fetch.md), [doc/doc-to-md.md](doc/doc-to-md.md).
@@ -148,7 +148,7 @@ These extensions are opt-in via `settings.json` (project `.pi/settings.json` ove
148
148
  }
149
149
  ```
150
150
 
151
- `sessionAutoName.enabled` makes one extra short LLM call per session (once, after the first turn) to title it; `false` (default) makes no model calls. `fastMode` only affects `claude-opus-4-8` requests on Anthropic's `anthropic-messages` API; enabling it opts into premium fast-mode pricing. `--fast` forces it on for one launch; `/fast on|off` toggles live. Proxy providers (opencode, cloudflare-ai-gateway) are excluded. `fastMode`'s header injection needs the `before_provider_headers` hook (pi bundling `@earendil-works/pi-coding-agent` >= 0.80.5); on older pi the beta header is silently not sent. See [doc/fetch.md](doc/fetch.md) and [doc/doc-to-md.md](doc/doc-to-md.md) for the ingestion tools' full reference; session-name/sword-header behavior above is complete.
151
+ `sessionAutoName.enabled` makes one extra short LLM call per session (once, after the first turn) to title it; `false` (default) makes no model calls. `fastMode` only affects `claude-opus-4-8` and `claude-opus-5` requests on Anthropic's `anthropic-messages` API; enabling it opts into premium fast-mode pricing. `--fast` forces it on for one launch; `/fast on|off` toggles live. Proxy providers (opencode, cloudflare-ai-gateway) are excluded. `fastMode`'s header injection needs the `before_provider_headers` hook (pi bundling `@earendil-works/pi-coding-agent` >= 0.80.5); on older pi the beta header is silently not sent. See [doc/fetch.md](doc/fetch.md) and [doc/doc-to-md.md](doc/doc-to-md.md) for the ingestion tools' full reference; session-name/sword-header behavior above is complete.
152
152
 
153
153
  Recommended explicit retry and watchdog settings:
154
154
 
package/fast-mode.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Fast mode for Claude Opus 4.8.
2
+ * Fast mode for Claude Opus 4.8 / Opus 5.
3
3
  *
4
4
  * When enabled, injects Anthropic's fast-mode signals into every qualifying
5
- * Opus 4.8 request on the anthropic-messages API, regardless of thinking level:
5
+ * Opus 4.8 / Opus 5 request on the anthropic-messages API, regardless of thinking level:
6
6
  * - payload: { ...payload, speed: "fast" } (before_provider_request)
7
7
  * - header: anthropic-beta: ...,fast-mode-2026-02-01 (before_provider_headers)
8
8
  *
@@ -13,11 +13,12 @@
13
13
  *
14
14
  * Header coupling to pi-ai internals: pi assembles `anthropic-beta` AFTER this
15
15
  * hook and merges the hook's headers LAST, so setting the header here REPLACES
16
- * pi's list. For opus-4-8 pi's conditional betas (fine-grained tool streaming,
17
- * interleaved thinking) are never applied (eager tool streaming defaults on +
18
- * forceAdaptiveThinking), so the only betas to preserve are the OAuth identity
19
- * betas. We detect OAuth via the same token marker pi uses and rebuild the
20
- * exact list. If pi later adds betas for opus-4-8, revisit buildBetaHeader.
16
+ * pi's list. For opus-4-8 and opus-5 pi's conditional betas (fine-grained tool
17
+ * streaming, interleaved thinking) are never applied (eager tool streaming
18
+ * defaults on + forceAdaptiveThinking; verified identical compat in pi-ai
19
+ * 0.82.1), so the only betas to preserve are the OAuth identity betas. We
20
+ * detect OAuth via the same token marker pi uses and rebuild the exact list.
21
+ * If pi later adds betas for these models, revisit buildBetaHeader.
21
22
  */
22
23
 
23
24
  import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
@@ -25,9 +26,9 @@ import { resolveConfig } from "./extension-config.ts";
25
26
 
26
27
  export const FAST_MODE_BETA = "fast-mode-2026-02-01";
27
28
  export const FAST_SPEED = "fast";
28
- // Loose prefix: matches dated snapshots (claude-opus-4-8-*). Opus 4.7 is out of
29
- // scope (D1); a future 4.9 needs a one-line addition here.
30
- export const FAST_MODE_MODEL_PREFIXES = ["claude-opus-4-8"];
29
+ // Loose prefixes: match dated snapshots (claude-opus-4-8-*, claude-opus-5-*).
30
+ // Opus 4.7 is out of scope (D1); a future model needs a one-line addition here.
31
+ export const FAST_MODE_MODEL_PREFIXES = ["claude-opus-4-8", "claude-opus-5"];
31
32
  export const OAUTH_IDENTITY_BETAS = ["claude-code-20250219", "oauth-2025-04-20"];
32
33
  const STATUS_KEY = "fast-mode";
33
34
  const BETA_HEADER = "anthropic-beta";
@@ -121,7 +122,7 @@ export default function (pi: ExtensionAPI) {
121
122
 
122
123
  pi.registerFlag("fast", {
123
124
  type: "boolean",
124
- description: "Enable Anthropic fast mode for Opus 4.8 requests this launch",
125
+ description: "Enable Anthropic fast mode for Opus 4.8/5 requests this launch",
125
126
  });
126
127
 
127
128
  pi.on("session_start", async (_event, ctx) => {
@@ -147,7 +148,7 @@ export default function (pi: ExtensionAPI) {
147
148
  });
148
149
 
149
150
  pi.registerCommand("fast", {
150
- description: "Manage Opus 4.8 fast mode: /fast [on|off|status]",
151
+ description: "Manage Opus 4.8/5 fast mode: /fast [on|off|status]",
151
152
  getArgumentCompletions: (prefix) => {
152
153
  const p = prefix.trim().toLowerCase();
153
154
  if (p.includes(" ")) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-quiver",
3
- "version": "3.3.1",
3
+ "version": "3.3.2",
4
4
  "description": "Personal pack of Pi coding-agent extensions: context-safe fetch, doc_to_md PDF/DOCX/PPTX-to-Markdown conversion, session naming, a themed ASCII startup header, Opus 4.8 fast mode, and a provider-stall watchdog.",
5
5
  "author": "Jacek Juraszek",
6
6
  "license": "MIT",