Repository navigation
v2026.10.11
@code-yeongyu/senpi
Breaking Changes
Added
-
Host adapters can render Native prompt content through the public
@code-yeongyu/senpi/prompt-presetssubpath usingresolvePreset,buildPreset, andbuildDynamicSystemPrompt, withBuildDynamicSystemPromptOptions,ResolvedPromptPreset,PromptPresetSettings,PromptPresetName,ModelWithPromptPresetMetadata, andPromptSurfacetypes. The builders accept an explicit application name while preserving Native's existing default branding; preset selection and content remain single-source (#3104). -
senpi host session open|close|model|prompt|steer|abort|read|state|list|waitdrives a session over the shared host from the command line: one JSON line of output per call and typed exit codes, so an orchestrating agent no longer has to write its own RPC client or scrape a terminal pane (#3073). -
RPC refusals of
promptwhile a turn runs,set_modelwith an unknown model, andget_entrieswith an unknownsincecursor now carryerrorCode(streaming,model_not_found,not_found), so clients no longer match message text (#3073). -
The footer shows a reasoning model's level as
effort <level>with the key bound toapp.thinking.cyclebeside it (shift+tabby default, your own key when rebound, nothing when unbound) whenever the whole footer fits; on a narrower terminal the key drops first, then the label falls back to the compactmodel:<level>the footer always showed, so no stat or path character is lost to the hint. A one-time tip,Shift+Tab changes the reasoning level, is shown once per agent directory for reasoning models (#3090, requested by @devxoul). -
Exported a shared prompt-preset resolution contract on the public
@code-yeongyu/senpi/prompt-presetssubpath: a pure, settings-freeresolvePresetName({ providerID, modelID, name? })plusPROMPT_PRESET_MODEL_CASESandAUTO_RESOLVED_PRESET_NAMES, so downstream harnesses can pin model-id-to-preset parity against a single source of truth. The model-id matchers moved into an exportedmatchers.tsthatpresets.tsre-imports;gpt-5is a manual-only preset and is intentionally excluded from the auto-resolvable set (#3074).
Changed
-
The runtime snapshot a first launch builds copies the package as npm ships it (the
filesentries ofpackage.json, pluspackage.json, README and LICENSE) instead of the whole package directory. Running from a repository checkout no longer copies its sources, tests and scripts: about 1,800 files instead of 11,000 for this package (#3083). -
Runtime snapshots omit dependency development trees, root documentation notes and redundant TypeScript sources while retaining manifest entrypoints, source-only extensions, skills, native binaries and the complete dependency graph needed after an install update. A real Node/Bun CLI inventory covers help, external extension loading, a faux turn and codemode bootstrap (#3083).
Fixed
-
Context reduction no longer rewrites the prompt cache every turn on long sessions. Reduction stays engaged and holds a stable prefix between large frontier steps, survives restarts, and advances early near the context limit (#900, building on #901 by @codeg-dev; thanks to @daehwanahn and @ddotz for the reports and measurements).
-
Reloading a session releases the previous extension runner and reuses unchanged module graphs instead of retaining another generation. Edited lazy dependencies now invalidate the graph using the bytes actually compiled, including equal-size edits with preserved timestamps (#3066 by @jc01rho, #3068).
-
Boundary handlers no longer run after their extension runner retires during awaited context previews or handlers, and retired boundary drafts and continuation are discarded. A handler or boundary rebuild that was already in flight and then fails on the retired runner stands down instead of reporting an extension error (#3071 by @MoerAI).
Removed
@code-yeongyu/senpi-ai
Breaking Changes
Added
Changed
- The bundled model catalog is refreshed from models.dev and the providers' model listings (
openrouter).
Fixed
- OpenAI models served through a Responses-compatible gateway (an
openaiprovider whosebaseUrlis notapi.openai.com) no longer fail every turn withInvalid value: 'allowed_tools'.tool_choice: allowed_toolsis sent only to the native endpoint; elsewhere requests carry only the active tools. If an endpoint still rejects the choice, the request is retried once with only the active tools and later requests to that model use that shape directly (#3080).
Removed
@code-yeongyu/senpi-agent-core
Breaking Changes
Added
Changed
Fixed
Removed
@code-yeongyu/senpi-codemode
Breaking Changes
Added
Changed
Fixed
- Julia loads handle helpers at first use and installs globals sizing declarations only when a globals diagnostic is requested, reducing fresh-kernel CPU work. This is a partial fix; the remaining startup regression is tracked separately (Refs #3048).