@code-yeongyu/senpi
Breaking Changes
Added
- A single-session
--mode rpcprocess acceptsset_retry_fallbackbefore its first turn is asked for (capabilityretry_fallback_command): theopen_session.retryFallbackprofile for a caller that spawns one process per session, applied in memory only and kept by the process's later sessions. omo's task children that run as their own process (every Windows child, andtask.process_runner: "child-process") can now carry their category's fallback chain past a tool call without touching the user's settings file (omo#9582).
Changed
- A terminal that registers a control endpoint becomes reachable sooner and admits a message sooner after it is reachable. The endpoint binds its socket while the session header is written and looks up the process start time in parallel. It no longer reaps other terminals' dead records or prunes generations before it binds, and it no longer waits for its inbox watch to arm before registration returns. That wait added 200 ms to admission whenever the watch's first sentinel event was missed. A message that reaches the inbox before the watch is armed is still picked up by one more pass once arming settles (#2756).
Fixed
- An explicitly requested thinking level that the model cannot use is no longer dropped silently. When
--thinking,/thinking, RPC, or an extension asks for a level the model does not offer (every level exceptoffon a model not markedreasoning: true), the session records the requested level and the reason beside the applied one (thinkingSelection.requestedandthinkingSelection.clampReason), and shows one warning: on stderr for print, JSON, and RPC runs, and in the TUI. A level that only comes from the globaldefaultThinkingLevelsetting is not treated as a request and does not warn. (#2395) Thanks to @MoerAI (#2435). - Project rule discovery no longer escapes the project root on Windows. A
read/edit/writetarget on a different drive, or one whose drive-letter case differs from the project root, made the rules finder walk the unrelated location and inject anyAGENTS.md,CLAUDE.md,.claude/rules,.cursor/rules, or.github/instructionsit found there as project rules (#568 by @MoerAI). POSIX behavior is unchanged. - With a
compaction.modeloverride onanthropic-subscription, senpi no longer rewrites older messages before each turn, so the resident Claude session keeps receiving only the new messages instead of re-sending the whole history every turn (#2746). Thanks to @trac3r00 (#2748).
Removed
@code-yeongyu/senpi-ai
Breaking Changes
Added
Changed
Fixed
Removed
@code-yeongyu/senpi-agent-core
Breaking Changes
Added
Changed
Fixed
Removed
@code-yeongyu/senpi-codemode
Breaking Changes
Added
- Isolated eval cells: with
sandbox.enabled,isolate: trueruns a JavaScript cell in a fresh QuickJS VM with no persistence and no ambient host (onlytools.*,print,display), streaming output under a credit window. Off by default; the eval schema is unchanged until the setting is on (#2694, #2705). - A JavaScript cell that is only
%bun add <package ...>or%npm add <package ...>installs packages into a per-session managed environment without restarting the kernel; the next cell imports them by bare name, the project'spackage.jsonandnode_modulesare untouched, lifecycle scripts never run, and a failed or cancelled install leaves the previous packages active, from registry names, local directories, .tgz/.tar archives or URLs; each install is published as a new revision (#2452; #2692, #2761).
Changed
Fixed
-
An isolated (
isolate: true) cell whose QuickJS runtime is missing now fails witheval_isolate_unavailablebefore any of its code runs, instead of a module-resolution error that named a host path (#2452). -
%bun addover a package first installed from a local directory now works when the new archive's top directory is notpackage/(a GitHub-style<repo>-<sha>.tgz, or a plain.tar): its name is read from the archive's own top-level directory, so the old directory's links are removed before bun installs (#2452). -
A nested tool call that is denied inside an
evalcell (a permission denial or another hook's block) now reaches the cell as the plain denial, without theExpected parameters:schema hint that made it read like an argument error; argument failures still get the hint (#2700). Thanks to @MoerAI (#2755). -
An
evalrun with an invalidlanguagevalue (for example"python",""ornull) now gets its own error listing the enabled languages, instead of the "run requires language" message meant for an omitted one;peekandstopstill need no language (#1395). Thanks to @MoerAI.