@code-yeongyu/senpi 2026.8.30 → 2026.9.2-3
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 +234 -4
- package/README.md +3 -0
- package/dist/core/agent-session.d.ts +29 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +168 -18
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction-execution.d.ts +14 -0
- package/dist/core/compaction/compaction-execution.d.ts.map +1 -0
- package/dist/core/compaction/compaction-execution.js +121 -0
- package/dist/core/compaction/compaction-execution.js.map +1 -0
- package/dist/core/compaction/compaction-settings.d.ts +17 -0
- package/dist/core/compaction/compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/compaction-settings.js +17 -0
- package/dist/core/compaction/compaction-settings.js.map +1 -0
- package/dist/core/compaction/compaction.d.ts +13 -26
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +7 -136
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/ideal-compaction-settings.d.ts +9 -0
- package/dist/core/compaction/ideal-compaction-settings.d.ts.map +1 -0
- package/dist/core/compaction/ideal-compaction-settings.js +7 -0
- package/dist/core/compaction/ideal-compaction-settings.js.map +1 -0
- package/dist/core/compaction-settings-access.d.ts +19 -0
- package/dist/core/compaction-settings-access.d.ts.map +1 -0
- package/dist/core/compaction-settings-access.js +10 -0
- package/dist/core/compaction-settings-access.js.map +1 -0
- package/dist/core/compaction-settings-resolver.d.ts +22 -0
- package/dist/core/compaction-settings-resolver.d.ts.map +1 -0
- package/dist/core/compaction-settings-resolver.js +46 -0
- package/dist/core/compaction-settings-resolver.js.map +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.js +6 -2
- package/dist/core/extensions/builtin/claude-sdk-oauth/options.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts +9 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js +10 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js +2 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/stream.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +43 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +8 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts +17 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js +64 -0
- package/dist/core/extensions/builtin/compaction/emergency-prune.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js +84 -0
- package/dist/core/extensions/builtin/compaction/extension-wiring.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js +1 -1
- package/dist/core/extensions/builtin/compaction/idle-retry.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.d.ts +1 -0
- package/dist/core/extensions/builtin/compaction/idle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/idle.js +13 -2
- package/dist/core/extensions/builtin/compaction/idle.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +152 -154
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts +1 -1
- package/dist/core/extensions/builtin/compaction/log.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/log.js +2 -0
- package/dist/core/extensions/builtin/compaction/log.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts +14 -0
- package/dist/core/extensions/builtin/compaction/model-selection.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js +37 -0
- package/dist/core/extensions/builtin/compaction/model-selection.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts +30 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js +74 -0
- package/dist/core/extensions/builtin/compaction/model-usability-budget.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts +9 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js +2 -0
- package/dist/core/extensions/builtin/compaction/openai-remote-dependencies.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts +3 -6
- package/dist/core/extensions/builtin/compaction/openai-remote.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/openai-remote.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts +46 -0
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js +103 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/policy.d.ts +12 -2
- package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.js +52 -26
- package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts +8 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js +17 -0
- package/dist/core/extensions/builtin/compaction/speculation-lead.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts +22 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js +16 -0
- package/dist/core/extensions/builtin/compaction/speculative-job.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts +23 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +132 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -13
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +21 -197
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +24 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js +25 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +27 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js +56 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts +5 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.d.ts.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js +76 -0
- package/dist/core/extensions/builtin/hooks/trust-state-json.js.map +1 -0
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts +7 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust-storage.js +60 -8
- package/dist/core/extensions/builtin/hooks/trust-storage.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.d.ts +1 -2
- package/dist/core/extensions/builtin/hooks/trust.d.ts.map +1 -1
- package/dist/core/extensions/builtin/hooks/trust.js +1 -72
- package/dist/core/extensions/builtin/hooks/trust.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts +3 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +110 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +2 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js +7 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js +7 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js +7 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-7.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js +7 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-4-8.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js +2 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-opus-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts +50 -0
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js +66 -0
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +5 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js +6 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js +11 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js +11 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k2-7.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +2 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +18 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/settings.js +1 -0
- package/dist/core/extensions/builtin/prompt-preset/settings.js.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js +1 -1
- package/dist/core/extensions/builtin/recommended-models/index.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts +11 -0
- package/dist/core/extensions/builtin/terminal/runtime-session.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/runtime-session.js +18 -2
- package/dist/core/extensions/builtin/terminal/runtime-session.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/index.js +4 -0
- package/dist/core/extensions/builtin/ttsr/index.js.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.d.ts +2 -0
- package/dist/core/extensions/builtin/ttsr/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/ttsr/manager.js +28 -1
- package/dist/core/extensions/builtin/ttsr/manager.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +17 -8
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts +14 -0
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +33 -3
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/log.js +1 -1
- package/dist/core/retry-fallback/log.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +1 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +5 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-activity.d.ts +47 -0
- package/dist/core/session-activity.d.ts.map +1 -0
- package/dist/core/session-activity.js +58 -0
- package/dist/core/session-activity.js.map +1 -0
- package/dist/core/session-manager.d.ts +8 -12
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +118 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +8 -1
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-resident-store.js +12 -5
- package/dist/core/session-resident-store.js.map +1 -1
- package/dist/core/settings-manager.d.ts +10 -87
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +14 -20
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-public-types.d.ts +11 -0
- package/dist/core/settings-public-types.d.ts.map +1 -0
- package/dist/core/settings-public-types.js +2 -0
- package/dist/core/settings-public-types.js.map +1 -0
- package/dist/core/settings-shapes.d.ts +36 -0
- package/dist/core/settings-shapes.d.ts.map +1 -0
- package/dist/core/settings-shapes.js +2 -0
- package/dist/core/settings-shapes.js.map +1 -0
- package/dist/core/shared-host-policy.d.ts +6 -0
- package/dist/core/shared-host-policy.d.ts.map +1 -0
- package/dist/core/shared-host-policy.js +7 -0
- package/dist/core/shared-host-policy.js.map +1 -0
- package/dist/core/terminal-settings.d.ts +22 -0
- package/dist/core/terminal-settings.d.ts.map +1 -0
- package/dist/core/terminal-settings.js +2 -0
- package/dist/core/terminal-settings.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -4
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +27 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/app-server/daemon/process.d.ts +13 -2
- package/dist/modes/app-server/daemon/process.d.ts.map +1 -1
- package/dist/modes/app-server/daemon/process.js +58 -12
- package/dist/modes/app-server/daemon/process.js.map +1 -1
- package/dist/modes/app-server/daemon.js +65 -7
- package/dist/modes/app-server/daemon.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +84 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +435 -112
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +59 -6
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/ethos-tips.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +12 -5
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +180 -25
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/custom-capability.d.ts +2 -0
- package/dist/modes/rpc/custom-capability.d.ts.map +1 -1
- package/dist/modes/rpc/custom-capability.js +2 -0
- package/dist/modes/rpc/custom-capability.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +17 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +150 -23
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +54 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +259 -69
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -2
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +89 -21
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts +38 -0
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +149 -61
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/ownership-safe-lock.d.ts +14 -0
- package/dist/modes/rpc/ownership-safe-lock.d.ts.map +1 -0
- package/dist/modes/rpc/ownership-safe-lock.js +87 -0
- package/dist/modes/rpc/ownership-safe-lock.js.map +1 -0
- package/dist/modes/rpc/rpc-client.d.ts +13 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +46 -12
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +21 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +1 -0
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +2 -1
- package/dist/modes/rpc/session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/session-binding.js +1 -0
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +54 -1
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +180 -3
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +18 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +88 -8
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +11 -1
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +25 -0
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/socket-transport.d.ts +13 -0
- package/dist/modes/rpc/socket-transport.d.ts.map +1 -0
- package/dist/modes/rpc/socket-transport.js +92 -0
- package/dist/modes/rpc/socket-transport.js.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts +17 -0
- package/dist/modes/rpc/widget-line-renderer.d.ts.map +1 -0
- package/dist/modes/rpc/widget-line-renderer.js +73 -0
- package/dist/modes/rpc/widget-line-renderer.js.map +1 -0
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +11 -2
- package/dist/utils/fs-watch.js.map +1 -1
- package/docs/app-server.md +2 -2
- package/docs/containerization.md +2 -2
- package/docs/development.md +7 -7
- package/docs/extensions.md +5 -5
- package/docs/grok-neo.md +1 -1
- package/docs/index.md +1 -1
- package/docs/packages.md +2 -2
- package/docs/quickstart.md +4 -4
- package/docs/release-guide.md +21 -21
- package/docs/rpc.md +83 -6
- package/docs/sdk.md +1 -1
- package/docs/settings.md +8 -8
- package/docs/skills.md +2 -2
- package/docs/terminal-tools.md +1 -1
- package/docs/termux.md +1 -1
- package/docs/tui.md +1 -1
- package/examples/AGENTS.md +1 -1
- package/examples/sdk/README.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +85 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +6 -4
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/skill-contribution.ts +105 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +10 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/SKILL.md +44 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/breaking-changes.md +75 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/build.md +114 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/dev-tooling.md +34 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/http-networking.md +113 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/install.md +93 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/node-compat-platforms.md +36 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/performance.md +33 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/runtime-apis.md +156 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/security.md +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/skill/bun-1-4/references/test.md +103 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool-options.ts +3 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/eval-tool.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/README.md +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +2 -2
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/README.md +6 -3
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js +24 -7
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js +316 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts +4 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js +23 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-conversation-rotation.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js +20 -2
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/amazon-bedrock.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/anthropic.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/groq.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/nvidia.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/opengateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js +3 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry-profile/profiles.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts +42 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js +34 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-operations.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts +8 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js +51 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen-text.js.map +1 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts +45 -0
- package/node_modules/@earendil-works/pi-pty/dist/screen.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-pty/dist/screen.js +178 -55
- package/node_modules/@earendil-works/pi-pty/dist/screen.js.map +1 -1
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/README.md +6 -3
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/README.md +5 -4
- package/node_modules/@earendil-works/pi-tui/native/darwin/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/native/win32/README.md +2 -2
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -41,6 +41,9 @@ import { buildDynamicSystemPrompt } from "./dynamic-prompt/index.js";
|
|
|
41
41
|
import { areExperimentalFeaturesEnabled } from "./experimental.js";
|
|
42
42
|
import { exportSessionToHtml } from "./export-html/index.js";
|
|
43
43
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
44
|
+
import { ModelUsabilityBudgetError, projectModelUsabilityBudget, } from "./extensions/builtin/compaction/model-usability-budget.js";
|
|
45
|
+
import { resolveReserveTokens } from "./extensions/builtin/compaction/policy.js";
|
|
46
|
+
import { WAKE_SOURCE_STATE_EVENT } from "./extensions/builtin/monitor-state-event.js";
|
|
44
47
|
import { CODEX_RESPONSES_API } from "./extensions/builtin/service-tier.js";
|
|
45
48
|
import { deriveExtensionRegistrationId } from "./extensions/builtin/tool-search/engine/marker.js";
|
|
46
49
|
import { getToolSearchService } from "./extensions/builtin/tool-search/service.js";
|
|
@@ -62,6 +65,7 @@ import { classifyRateLimitedWait, degradeWithoutFallback, nextInTurnDelayMs, pro
|
|
|
62
65
|
import { createFallbackLogger } from "./retry-fallback/log.js";
|
|
63
66
|
import { ProbeBackScheduler } from "./retry-fallback/probe-scheduler.js";
|
|
64
67
|
import { validateFallbackChains } from "./retry-fallback/validate.js";
|
|
68
|
+
import { isSessionBusySnapshot, WakeSourceTracker } from "./session-activity.js";
|
|
65
69
|
import { createSessionLogger } from "./session-log.js";
|
|
66
70
|
import { buildSessionContext, CURRENT_SESSION_VERSION, getLatestCompactionEntry, } from "./session-manager.js";
|
|
67
71
|
import { generateSessionTitle, sessionTitleRetryPolicy, shouldSkipSessionTitle } from "./session-title-generator.js";
|
|
@@ -441,6 +445,12 @@ export function truncateToolResultBodies(messages, maxChars = CURSOR_TOOL_RESULT
|
|
|
441
445
|
// ============================================================================
|
|
442
446
|
// AgentSession Class
|
|
443
447
|
// ============================================================================
|
|
448
|
+
export function providerRetryWatchdogAbortMessage(retryTimeoutMs, streamStartTimeoutMs) {
|
|
449
|
+
return (`Provider retry continuation watchdog timed out after ${retryTimeoutMs}ms` +
|
|
450
|
+
(streamStartTimeoutMs === undefined
|
|
451
|
+
? " (stream-start guard disabled; raise retry.provider.streamStartTimeoutMs, 0 disables)"
|
|
452
|
+
: ` (stream-start guard: ${streamStartTimeoutMs}ms; raise retry.provider.streamStartTimeoutMs, 0 disables)`));
|
|
453
|
+
}
|
|
444
454
|
export class AgentSession {
|
|
445
455
|
/**
|
|
446
456
|
* Resolve the effective retry profile for the current model's provider.
|
|
@@ -488,6 +498,13 @@ export class AgentSession {
|
|
|
488
498
|
this._pendingCompactionAdmission = undefined;
|
|
489
499
|
this._compactionLifecycle = new CompactionLifecycleCoordinator();
|
|
490
500
|
this._sessionWorkBarrier = new SessionWorkBarrier();
|
|
501
|
+
/**
|
|
502
|
+
* Extension-published activity that outlives a turn (background terminal
|
|
503
|
+
* jobs, terminal monitors, loop-guard holds). Counts persist across extension
|
|
504
|
+
* reloads on purpose: a stale "busy" only delays reclamation, while a lost
|
|
505
|
+
* one would let the host evict a session still doing work.
|
|
506
|
+
*/
|
|
507
|
+
this._wakeSources = new WakeSourceTracker();
|
|
491
508
|
this._overflowRecoveryAttempted = false;
|
|
492
509
|
this._compactionSkippedTooSmall = false;
|
|
493
510
|
// A retry continuation immediately follows an accepted compaction. Its first
|
|
@@ -2014,9 +2031,31 @@ export class AgentSession {
|
|
|
2014
2031
|
this._disconnectFromAgent();
|
|
2015
2032
|
this._unsubscribeSettingsSource?.();
|
|
2016
2033
|
this._unsubscribeSettingsSource = undefined;
|
|
2034
|
+
this._unsubscribeWakeSources?.();
|
|
2035
|
+
this._unsubscribeWakeSources = undefined;
|
|
2017
2036
|
this._eventListeners = [];
|
|
2018
2037
|
cleanupSessionResources(this.sessionId);
|
|
2019
2038
|
}
|
|
2039
|
+
/** Live in-session activity signals; see `session-activity.ts` for the contract. */
|
|
2040
|
+
get activitySnapshot() {
|
|
2041
|
+
return {
|
|
2042
|
+
isStreaming: this._isAgentRunActive,
|
|
2043
|
+
isBashRunning: this.isBashRunning,
|
|
2044
|
+
isCompacting: this.isCompacting,
|
|
2045
|
+
hasSessionWork: this._sessionWorkBarrier.hasActiveWork,
|
|
2046
|
+
hasActiveWakeSource: this._wakeSources.hasActive,
|
|
2047
|
+
};
|
|
2048
|
+
}
|
|
2049
|
+
/**
|
|
2050
|
+
* Whether this session owns work that must outlive a teardown decision: an
|
|
2051
|
+
* agent run, bash, compaction, barrier-held session work, or an
|
|
2052
|
+
* extension-published wake source. Occupancy sweeps (the shared RPC host's
|
|
2053
|
+
* idle eviction) MUST consult this rather than individual flags, so a new
|
|
2054
|
+
* activity source is picked up by every call site at once.
|
|
2055
|
+
*/
|
|
2056
|
+
get isSessionBusy() {
|
|
2057
|
+
return isSessionBusySnapshot(this.activitySnapshot);
|
|
2058
|
+
}
|
|
2020
2059
|
// =========================================================================
|
|
2021
2060
|
// Read-only State Access
|
|
2022
2061
|
// =========================================================================
|
|
@@ -2331,8 +2370,14 @@ export class AgentSession {
|
|
|
2331
2370
|
this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
|
|
2332
2371
|
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
2333
2372
|
if (activeToolNamesChanged) {
|
|
2334
|
-
|
|
2335
|
-
|
|
2373
|
+
// A tool change emitted while extensions are still binding belongs to the
|
|
2374
|
+
// binding itself, not to a mid-session change. The session was already
|
|
2375
|
+
// committed to the client, so cancelling or invalidating work it started
|
|
2376
|
+
// against that session would be spurious.
|
|
2377
|
+
if (this._extensionBindingPromptReadiness === undefined) {
|
|
2378
|
+
this.abortCompaction();
|
|
2379
|
+
this._incrementMessageRevision();
|
|
2380
|
+
}
|
|
2336
2381
|
}
|
|
2337
2382
|
}
|
|
2338
2383
|
/** Whether compaction or branch summarization is currently running */
|
|
@@ -3530,6 +3575,43 @@ export class AgentSession {
|
|
|
3530
3575
|
async setModel(model) {
|
|
3531
3576
|
return this._setModel(model, true);
|
|
3532
3577
|
}
|
|
3578
|
+
assertModelUsable(model = this.model, liveContextTokens = 0) {
|
|
3579
|
+
if (!model || model.contextWindow <= 0)
|
|
3580
|
+
return;
|
|
3581
|
+
const projection = projectModelUsabilityBudget({
|
|
3582
|
+
model,
|
|
3583
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3584
|
+
tools: this.agent.state.tools,
|
|
3585
|
+
liveContextTokens,
|
|
3586
|
+
compaction: this.settingsManager.getCompactionSettings(),
|
|
3587
|
+
});
|
|
3588
|
+
if (!projection.usable)
|
|
3589
|
+
throw new ModelUsabilityBudgetError(projection);
|
|
3590
|
+
}
|
|
3591
|
+
_getDownswitchLiveContextTokens(model) {
|
|
3592
|
+
const currentModel = this.model;
|
|
3593
|
+
if (!currentModel)
|
|
3594
|
+
return 0;
|
|
3595
|
+
const compaction = this.settingsManager.getCompactionSettings();
|
|
3596
|
+
const currentBudget = projectModelUsabilityBudget({
|
|
3597
|
+
model: currentModel,
|
|
3598
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3599
|
+
tools: this.agent.state.tools,
|
|
3600
|
+
compaction,
|
|
3601
|
+
});
|
|
3602
|
+
const targetBudget = projectModelUsabilityBudget({
|
|
3603
|
+
model,
|
|
3604
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3605
|
+
tools: this.agent.state.tools,
|
|
3606
|
+
compaction,
|
|
3607
|
+
});
|
|
3608
|
+
const currentUsableContext = currentBudget.contextWindow - currentBudget.requiredTokens;
|
|
3609
|
+
const targetUsableContext = targetBudget.contextWindow - targetBudget.requiredTokens;
|
|
3610
|
+
if (targetUsableContext >= currentUsableContext)
|
|
3611
|
+
return 0;
|
|
3612
|
+
const fixedPrefixTokens = currentBudget.systemPromptTokens + currentBudget.activeToolSchemaTokens;
|
|
3613
|
+
return Math.max(0, (this.getContextUsage()?.tokens ?? 0) - fixedPrefixTokens);
|
|
3614
|
+
}
|
|
3533
3615
|
/**
|
|
3534
3616
|
* Set the model for this session without changing the global model defaults.
|
|
3535
3617
|
* The selection is still persisted in this session's history.
|
|
@@ -3538,6 +3620,7 @@ export class AgentSession {
|
|
|
3538
3620
|
return this._setModel(model, false);
|
|
3539
3621
|
}
|
|
3540
3622
|
async _setModel(model, updateGlobalDefaults) {
|
|
3623
|
+
this.assertModelUsable(model, this._getDownswitchLiveContextTokens(model));
|
|
3541
3624
|
if (!(await this._modelRuntime.checkAuth(model.provider))) {
|
|
3542
3625
|
throw new Error(`No API key for ${model.provider}/${model.id}`);
|
|
3543
3626
|
}
|
|
@@ -3566,6 +3649,17 @@ export class AgentSession {
|
|
|
3566
3649
|
console.error("fallback revert failed; cleared fallback state", error);
|
|
3567
3650
|
}
|
|
3568
3651
|
}
|
|
3652
|
+
/**
|
|
3653
|
+
* A senpi-owned compaction just rewrote the conversation context: release any
|
|
3654
|
+
* refusal-caused fallback pin (the "same context refuses again" assumption no
|
|
3655
|
+
* longer holds) and, while no run is active, eagerly re-attempt the original
|
|
3656
|
+
* model through the existing revert gate. Billing-caused pins never release.
|
|
3657
|
+
*/
|
|
3658
|
+
async _onCompactionContextChanged() {
|
|
3659
|
+
const released = this._retryFallback.notifyCompactionApplied();
|
|
3660
|
+
if (released && !this.isStreaming)
|
|
3661
|
+
await this._maybeRestoreFallbackPrimary();
|
|
3662
|
+
}
|
|
3569
3663
|
async _switchActiveModel(model, opts) {
|
|
3570
3664
|
const previousModel = this.model;
|
|
3571
3665
|
if (opts.invalidateCompaction &&
|
|
@@ -3575,6 +3669,7 @@ export class AgentSession {
|
|
|
3575
3669
|
this._invalidateCompactionForModelSelection();
|
|
3576
3670
|
}
|
|
3577
3671
|
const thinking = this._getThinkingForModelSwitch(model, opts.ephemeralThinkingLevel);
|
|
3672
|
+
const liveContextTokens = this._getDownswitchLiveContextTokens(model);
|
|
3578
3673
|
this.agent.state.model = model;
|
|
3579
3674
|
this.agent.abortServerSideFallback =
|
|
3580
3675
|
this.settingsManager.getAbortServerSideFallback() && this._retryFallback.hasConfiguredChain();
|
|
@@ -3606,7 +3701,20 @@ export class AgentSession {
|
|
|
3606
3701
|
this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
|
|
3607
3702
|
if (!opts.emitModelSelect)
|
|
3608
3703
|
return undefined;
|
|
3609
|
-
|
|
3704
|
+
const previousSystemPrompt = this.agent.state.systemPrompt;
|
|
3705
|
+
try {
|
|
3706
|
+
const systemPromptChange = await this._emitModelSelect(model, previousModel, opts.modelSelectSource);
|
|
3707
|
+
this.assertModelUsable(model, liveContextTokens);
|
|
3708
|
+
return systemPromptChange;
|
|
3709
|
+
}
|
|
3710
|
+
catch (error) {
|
|
3711
|
+
if (previousModel)
|
|
3712
|
+
this.agent.state.model = previousModel;
|
|
3713
|
+
else
|
|
3714
|
+
delete this.agent.state.model;
|
|
3715
|
+
this.agent.state.systemPrompt = previousSystemPrompt;
|
|
3716
|
+
throw error;
|
|
3717
|
+
}
|
|
3610
3718
|
}
|
|
3611
3719
|
_applyEphemeralThinkingLevel(level) {
|
|
3612
3720
|
const previousLevel = this.agent.state.thinkingLevel;
|
|
@@ -3643,6 +3751,8 @@ export class AgentSession {
|
|
|
3643
3751
|
nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
3644
3752
|
}
|
|
3645
3753
|
const next = favoriteModels[nextIndex];
|
|
3754
|
+
const liveContextTokens = this._getDownswitchLiveContextTokens(next.model);
|
|
3755
|
+
this.assertModelUsable(next.model, liveContextTokens);
|
|
3646
3756
|
const invalidatesCompaction = this._modelSelectionChangesContext(currentModel, next.model) ||
|
|
3647
3757
|
currentModel?.provider !== next.model.provider ||
|
|
3648
3758
|
currentModel?.id !== next.model.id;
|
|
@@ -3668,16 +3778,28 @@ export class AgentSession {
|
|
|
3668
3778
|
source: "cycle",
|
|
3669
3779
|
});
|
|
3670
3780
|
this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
|
|
3671
|
-
const
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3781
|
+
const previousSystemPrompt = this.agent.state.systemPrompt;
|
|
3782
|
+
try {
|
|
3783
|
+
const systemPromptChange = await this._emitModelSelect(next.model, currentModel, "cycle");
|
|
3784
|
+
this.assertModelUsable(next.model, liveContextTokens);
|
|
3785
|
+
const cycleResult = {
|
|
3786
|
+
model: next.model,
|
|
3787
|
+
thinkingLevel: this.thinkingLevel,
|
|
3788
|
+
isScoped: true,
|
|
3789
|
+
};
|
|
3790
|
+
if (systemPromptChange) {
|
|
3791
|
+
cycleResult.systemPromptChange = systemPromptChange;
|
|
3792
|
+
}
|
|
3793
|
+
return cycleResult;
|
|
3794
|
+
}
|
|
3795
|
+
catch (error) {
|
|
3796
|
+
if (currentModel)
|
|
3797
|
+
this.agent.state.model = currentModel;
|
|
3798
|
+
else
|
|
3799
|
+
delete this.agent.state.model;
|
|
3800
|
+
this.agent.state.systemPrompt = previousSystemPrompt;
|
|
3801
|
+
throw error;
|
|
3679
3802
|
}
|
|
3680
|
-
return cycleResult;
|
|
3681
3803
|
}
|
|
3682
3804
|
// =========================================================================
|
|
3683
3805
|
// Thinking Level Management
|
|
@@ -4402,6 +4524,10 @@ export class AgentSession {
|
|
|
4402
4524
|
fromExtension,
|
|
4403
4525
|
willRetry: request.willRetry,
|
|
4404
4526
|
});
|
|
4527
|
+
// Shared success seam: every senpi-owned compaction apply (manual /compact,
|
|
4528
|
+
// extension applyCompaction, pre-prompt and auto compaction) funnels through
|
|
4529
|
+
// here after the compaction entry is appended and the success event emitted.
|
|
4530
|
+
await this._onCompactionContextChanged();
|
|
4405
4531
|
return {
|
|
4406
4532
|
accepted: true,
|
|
4407
4533
|
requestId,
|
|
@@ -4454,7 +4580,10 @@ export class AgentSession {
|
|
|
4454
4580
|
}
|
|
4455
4581
|
const contextTokens = estimateMessagesTokens(filterContextExcludedMessages(simulatedMessages));
|
|
4456
4582
|
const settings = this.settingsManager.getCompactionSettings();
|
|
4457
|
-
|
|
4583
|
+
const reserveTokens = settings.reserveScalingEnabled === false
|
|
4584
|
+
? settings.reserveTokens
|
|
4585
|
+
: resolveReserveTokens(model.contextWindow, settings.reserveTokens);
|
|
4586
|
+
return contextTokens > model.contextWindow - reserveTokens;
|
|
4458
4587
|
}
|
|
4459
4588
|
/**
|
|
4460
4589
|
* Replaces agent state with the canonical session context while keeping exact
|
|
@@ -4618,6 +4747,9 @@ export class AgentSession {
|
|
|
4618
4747
|
if (!model)
|
|
4619
4748
|
return;
|
|
4620
4749
|
const settings = this.settingsManager.getCompactionSettings();
|
|
4750
|
+
const reserveTokens = settings.reserveScalingEnabled === false
|
|
4751
|
+
? settings.reserveTokens
|
|
4752
|
+
: resolveReserveTokens(model.contextWindow, settings.reserveTokens);
|
|
4621
4753
|
const isOversized = () => {
|
|
4622
4754
|
const providerMessages = filterContextExcludedMessages([...this.agent.state.messages, ...messages]);
|
|
4623
4755
|
const estimate = estimateContextTokens(providerMessages);
|
|
@@ -4628,7 +4760,7 @@ export class AgentSession {
|
|
|
4628
4760
|
const contextTokens = usageMessage?.role === "assistant" && this._isAssistantFromBeforeLatestCompaction(usageMessage)
|
|
4629
4761
|
? estimateMessagesTokens(providerMessages)
|
|
4630
4762
|
: estimate.tokens;
|
|
4631
|
-
return contextTokens > model.contextWindow -
|
|
4763
|
+
return contextTokens > model.contextWindow - reserveTokens;
|
|
4632
4764
|
};
|
|
4633
4765
|
if (!settings.enabled || !isOversized())
|
|
4634
4766
|
return;
|
|
@@ -4906,6 +5038,21 @@ export class AgentSession {
|
|
|
4906
5038
|
try {
|
|
4907
5039
|
if (this.agent.state.isStreaming)
|
|
4908
5040
|
return "taken-over";
|
|
5041
|
+
// Pre-admission restore point. A senpi-owned compaction that succeeds
|
|
5042
|
+
// while a run is still active releases its refusal pin through
|
|
5043
|
+
// _onCompactionContextChanged() but cannot restore there: model-select
|
|
5044
|
+
// work must stay ordered behind the session-work barrier while the run
|
|
5045
|
+
// owns it. Every post-compaction continuation admission - auto/overflow
|
|
5046
|
+
// compaction recovery, _resumeQueuedMessagesAfterCompaction(), the
|
|
5047
|
+
// agent_end queued continuation and the retry continuation - is scheduled
|
|
5048
|
+
// through _scheduleContinuationAfterCurrentEvent() and funnels here, so
|
|
5049
|
+
// this is the single choke point every such request passes before
|
|
5050
|
+
// reaching the provider. Restoring here (a no-op when nothing is pending)
|
|
5051
|
+
// keeps the guarantee that the very next request after a compaction runs
|
|
5052
|
+
// on the primary, and precedes the admission revalidation below so that
|
|
5053
|
+
// check samples the restored model's context window - the same ordering
|
|
5054
|
+
// the retry-continuation restore uses.
|
|
5055
|
+
await this._maybeRestoreFallbackPrimary();
|
|
4909
5056
|
await this._revalidateScheduledContinuationAdmission();
|
|
4910
5057
|
if (this.agent.state.isStreaming)
|
|
4911
5058
|
return "taken-over";
|
|
@@ -4927,10 +5074,7 @@ export class AgentSession {
|
|
|
4927
5074
|
}
|
|
4928
5075
|
},
|
|
4929
5076
|
getActiveSignal: () => this.agent.signal,
|
|
4930
|
-
abortActive: () => this.agent.abort(new ProviderRetryWatchdogAbortError(
|
|
4931
|
-
(this.agent.streamStartTimeoutMs === undefined
|
|
4932
|
-
? " (stream-start guard disabled)"
|
|
4933
|
-
: ` (stream-start guard: ${this.agent.streamStartTimeoutMs}ms)`))),
|
|
5077
|
+
abortActive: () => this.agent.abort(new ProviderRetryWatchdogAbortError(providerRetryWatchdogAbortMessage(retryTimeoutMs, this.agent.streamStartTimeoutMs))),
|
|
4934
5078
|
timeoutMs: retryTimeoutMs,
|
|
4935
5079
|
});
|
|
4936
5080
|
return "continued";
|
|
@@ -5255,6 +5399,12 @@ export class AgentSession {
|
|
|
5255
5399
|
this.agent.state.model = refreshedModel;
|
|
5256
5400
|
}
|
|
5257
5401
|
_bindExtensionCore(runner) {
|
|
5402
|
+
// Activity extensions publish about work outliving a turn (background
|
|
5403
|
+
// terminal jobs, monitors, holds) feeds the session-busy contract. Re-bound
|
|
5404
|
+
// per runner; counts survive the swap so a reload cannot make live work
|
|
5405
|
+
// look idle to an occupancy sweep.
|
|
5406
|
+
this._unsubscribeWakeSources?.();
|
|
5407
|
+
this._unsubscribeWakeSources = runner.onBusEvent(WAKE_SOURCE_STATE_EVENT, (data) => this._wakeSources.observe(data));
|
|
5258
5408
|
const getCommands = () => {
|
|
5259
5409
|
const extensionCommands = runner.getRegisteredCommands().map((command) => ({
|
|
5260
5410
|
name: command.invocationName,
|