Repository navigation
v2026.11.3-2
·
1843 commits
to main
since this release
senpi 2026.11.3-2
The main change: a thinking-signature 400 no longer ends Anthropic sessions.
Fixes you'll notice
- Anthropic sessions whose replayed thinking is bound to a different conversation recover instead of failing every turn. Claude requests that replay signed thinking ask the API to drop a mismatched block, and the 400 is retried once on the same model without the replayed thinking. Anthropic Subscription reports that refusal as an invalid-request failure instead of an unknown one (#5589, fixes #5587).
- Anthropic Subscription sessions keep their running Claude Code process across a config hot-reload. Before, the next turn in the same chat paid a fresh Claude Code spawn and transcript resume (#5578).
- Compaction,
/btw, look-at and cache keepalive on a multi-account provider authenticate as the account the session uses, so compaction on a pooled ChatGPT subscription no longer fails with a 401. A managed account-pool placeholder is never sent to a token endpoint (#4426; approach from #2049 by @youngminsw). - After a sign-in, a session pinned to a fallback by a billing failure tries the original model again on its next turn instead of staying on the fallback until restart. A token refresh doesn't count as a sign-in; a Cursor CLI account import does. Stored credentials carry an optional
loginIdfor this (#4430).
New
- The execution ledger gains a
blockevent, so a re-sent prepare after a restart gets the stored reply. An internal prepared tool executor builds on it; nothing calls it yet (#5428). createLooplessRuntimeFactory()builds a runtime with the built-in and extension tools and no agent loop, model binding or transcript. Nothing selects it yet (#5436).
Fixes
- An
auth.jsonthat exists but can't be read is no longer treated as empty.get_auth_providersreportsstoreError, sign-ins aren't silently shown as "Not connected", and a login can't overwrite the file until it's repaired (#4431, fixes #4413). - Sign-in result pages show the running product's name (and logo, when
SENPI_BRANDcarries one) instead of the pi logo. MCP server sign-in pages and consent screens show that brand too (#4434, fixes #4432). - Anthropic Subscription: when one account fails while the others are already blocked, the turn reports that account's own failure, each account block is logged, and the blocked-pool message names the account that needs
/login(#4674). - Anthropic Subscription: a turn the account pool refuses locally, or a classified Claude Code failure, reports its category (
auth,rate_limit, ...) and the soonest retry instead of an unclassified error (#4676). - A session given its own fallback policy by its opener (
open_session.retryFallback,set_retry_fallback, orSettingsManager.applyOverrides) uses only that policy; the built-in default chains aren't merged back under it (#4678). - A user
bashrun over RPC is published to every observer connection asentry_appended, so amirror: "all"observer sees the command and its output (#5579, fixes #5576).