@code-yeongyu/senpi 2026.8.30 → 2026.9.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 +174 -2
- package/README.md +3 -0
- package/dist/core/agent-session.d.ts +28 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +161 -14
- 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/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/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 +108 -0
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -0
- package/dist/core/extensions/builtin/prompt-preset/presets.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/presets.js +11 -0
- 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/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 +8 -85
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +9 -17
- 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 +4 -4
- 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 +52 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +2 -2
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/skill-contribution.ts +71 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +3 -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/@earendil-works/pi-agent-core/README.md +3 -0
- 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/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/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";
|
|
@@ -488,6 +492,13 @@ export class AgentSession {
|
|
|
488
492
|
this._pendingCompactionAdmission = undefined;
|
|
489
493
|
this._compactionLifecycle = new CompactionLifecycleCoordinator();
|
|
490
494
|
this._sessionWorkBarrier = new SessionWorkBarrier();
|
|
495
|
+
/**
|
|
496
|
+
* Extension-published activity that outlives a turn (background terminal
|
|
497
|
+
* jobs, terminal monitors, loop-guard holds). Counts persist across extension
|
|
498
|
+
* reloads on purpose: a stale "busy" only delays reclamation, while a lost
|
|
499
|
+
* one would let the host evict a session still doing work.
|
|
500
|
+
*/
|
|
501
|
+
this._wakeSources = new WakeSourceTracker();
|
|
491
502
|
this._overflowRecoveryAttempted = false;
|
|
492
503
|
this._compactionSkippedTooSmall = false;
|
|
493
504
|
// A retry continuation immediately follows an accepted compaction. Its first
|
|
@@ -2014,9 +2025,31 @@ export class AgentSession {
|
|
|
2014
2025
|
this._disconnectFromAgent();
|
|
2015
2026
|
this._unsubscribeSettingsSource?.();
|
|
2016
2027
|
this._unsubscribeSettingsSource = undefined;
|
|
2028
|
+
this._unsubscribeWakeSources?.();
|
|
2029
|
+
this._unsubscribeWakeSources = undefined;
|
|
2017
2030
|
this._eventListeners = [];
|
|
2018
2031
|
cleanupSessionResources(this.sessionId);
|
|
2019
2032
|
}
|
|
2033
|
+
/** Live in-session activity signals; see `session-activity.ts` for the contract. */
|
|
2034
|
+
get activitySnapshot() {
|
|
2035
|
+
return {
|
|
2036
|
+
isStreaming: this._isAgentRunActive,
|
|
2037
|
+
isBashRunning: this.isBashRunning,
|
|
2038
|
+
isCompacting: this.isCompacting,
|
|
2039
|
+
hasSessionWork: this._sessionWorkBarrier.hasActiveWork,
|
|
2040
|
+
hasActiveWakeSource: this._wakeSources.hasActive,
|
|
2041
|
+
};
|
|
2042
|
+
}
|
|
2043
|
+
/**
|
|
2044
|
+
* Whether this session owns work that must outlive a teardown decision: an
|
|
2045
|
+
* agent run, bash, compaction, barrier-held session work, or an
|
|
2046
|
+
* extension-published wake source. Occupancy sweeps (the shared RPC host's
|
|
2047
|
+
* idle eviction) MUST consult this rather than individual flags, so a new
|
|
2048
|
+
* activity source is picked up by every call site at once.
|
|
2049
|
+
*/
|
|
2050
|
+
get isSessionBusy() {
|
|
2051
|
+
return isSessionBusySnapshot(this.activitySnapshot);
|
|
2052
|
+
}
|
|
2020
2053
|
// =========================================================================
|
|
2021
2054
|
// Read-only State Access
|
|
2022
2055
|
// =========================================================================
|
|
@@ -2331,8 +2364,14 @@ export class AgentSession {
|
|
|
2331
2364
|
this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
|
|
2332
2365
|
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
2333
2366
|
if (activeToolNamesChanged) {
|
|
2334
|
-
|
|
2335
|
-
|
|
2367
|
+
// A tool change emitted while extensions are still binding belongs to the
|
|
2368
|
+
// binding itself, not to a mid-session change. The session was already
|
|
2369
|
+
// committed to the client, so cancelling or invalidating work it started
|
|
2370
|
+
// against that session would be spurious.
|
|
2371
|
+
if (this._extensionBindingPromptReadiness === undefined) {
|
|
2372
|
+
this.abortCompaction();
|
|
2373
|
+
this._incrementMessageRevision();
|
|
2374
|
+
}
|
|
2336
2375
|
}
|
|
2337
2376
|
}
|
|
2338
2377
|
/** Whether compaction or branch summarization is currently running */
|
|
@@ -3530,6 +3569,43 @@ export class AgentSession {
|
|
|
3530
3569
|
async setModel(model) {
|
|
3531
3570
|
return this._setModel(model, true);
|
|
3532
3571
|
}
|
|
3572
|
+
assertModelUsable(model = this.model, liveContextTokens = 0) {
|
|
3573
|
+
if (!model || model.contextWindow <= 0)
|
|
3574
|
+
return;
|
|
3575
|
+
const projection = projectModelUsabilityBudget({
|
|
3576
|
+
model,
|
|
3577
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3578
|
+
tools: this.agent.state.tools,
|
|
3579
|
+
liveContextTokens,
|
|
3580
|
+
compaction: this.settingsManager.getCompactionSettings(),
|
|
3581
|
+
});
|
|
3582
|
+
if (!projection.usable)
|
|
3583
|
+
throw new ModelUsabilityBudgetError(projection);
|
|
3584
|
+
}
|
|
3585
|
+
_getDownswitchLiveContextTokens(model) {
|
|
3586
|
+
const currentModel = this.model;
|
|
3587
|
+
if (!currentModel)
|
|
3588
|
+
return 0;
|
|
3589
|
+
const compaction = this.settingsManager.getCompactionSettings();
|
|
3590
|
+
const currentBudget = projectModelUsabilityBudget({
|
|
3591
|
+
model: currentModel,
|
|
3592
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3593
|
+
tools: this.agent.state.tools,
|
|
3594
|
+
compaction,
|
|
3595
|
+
});
|
|
3596
|
+
const targetBudget = projectModelUsabilityBudget({
|
|
3597
|
+
model,
|
|
3598
|
+
systemPrompt: this.agent.state.systemPrompt,
|
|
3599
|
+
tools: this.agent.state.tools,
|
|
3600
|
+
compaction,
|
|
3601
|
+
});
|
|
3602
|
+
const currentUsableContext = currentBudget.contextWindow - currentBudget.requiredTokens;
|
|
3603
|
+
const targetUsableContext = targetBudget.contextWindow - targetBudget.requiredTokens;
|
|
3604
|
+
if (targetUsableContext >= currentUsableContext)
|
|
3605
|
+
return 0;
|
|
3606
|
+
const fixedPrefixTokens = currentBudget.systemPromptTokens + currentBudget.activeToolSchemaTokens;
|
|
3607
|
+
return Math.max(0, (this.getContextUsage()?.tokens ?? 0) - fixedPrefixTokens);
|
|
3608
|
+
}
|
|
3533
3609
|
/**
|
|
3534
3610
|
* Set the model for this session without changing the global model defaults.
|
|
3535
3611
|
* The selection is still persisted in this session's history.
|
|
@@ -3538,6 +3614,7 @@ export class AgentSession {
|
|
|
3538
3614
|
return this._setModel(model, false);
|
|
3539
3615
|
}
|
|
3540
3616
|
async _setModel(model, updateGlobalDefaults) {
|
|
3617
|
+
this.assertModelUsable(model, this._getDownswitchLiveContextTokens(model));
|
|
3541
3618
|
if (!(await this._modelRuntime.checkAuth(model.provider))) {
|
|
3542
3619
|
throw new Error(`No API key for ${model.provider}/${model.id}`);
|
|
3543
3620
|
}
|
|
@@ -3566,6 +3643,17 @@ export class AgentSession {
|
|
|
3566
3643
|
console.error("fallback revert failed; cleared fallback state", error);
|
|
3567
3644
|
}
|
|
3568
3645
|
}
|
|
3646
|
+
/**
|
|
3647
|
+
* A senpi-owned compaction just rewrote the conversation context: release any
|
|
3648
|
+
* refusal-caused fallback pin (the "same context refuses again" assumption no
|
|
3649
|
+
* longer holds) and, while no run is active, eagerly re-attempt the original
|
|
3650
|
+
* model through the existing revert gate. Billing-caused pins never release.
|
|
3651
|
+
*/
|
|
3652
|
+
async _onCompactionContextChanged() {
|
|
3653
|
+
const released = this._retryFallback.notifyCompactionApplied();
|
|
3654
|
+
if (released && !this.isStreaming)
|
|
3655
|
+
await this._maybeRestoreFallbackPrimary();
|
|
3656
|
+
}
|
|
3569
3657
|
async _switchActiveModel(model, opts) {
|
|
3570
3658
|
const previousModel = this.model;
|
|
3571
3659
|
if (opts.invalidateCompaction &&
|
|
@@ -3575,6 +3663,7 @@ export class AgentSession {
|
|
|
3575
3663
|
this._invalidateCompactionForModelSelection();
|
|
3576
3664
|
}
|
|
3577
3665
|
const thinking = this._getThinkingForModelSwitch(model, opts.ephemeralThinkingLevel);
|
|
3666
|
+
const liveContextTokens = this._getDownswitchLiveContextTokens(model);
|
|
3578
3667
|
this.agent.state.model = model;
|
|
3579
3668
|
this.agent.abortServerSideFallback =
|
|
3580
3669
|
this.settingsManager.getAbortServerSideFallback() && this._retryFallback.hasConfiguredChain();
|
|
@@ -3606,7 +3695,20 @@ export class AgentSession {
|
|
|
3606
3695
|
this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
|
|
3607
3696
|
if (!opts.emitModelSelect)
|
|
3608
3697
|
return undefined;
|
|
3609
|
-
|
|
3698
|
+
const previousSystemPrompt = this.agent.state.systemPrompt;
|
|
3699
|
+
try {
|
|
3700
|
+
const systemPromptChange = await this._emitModelSelect(model, previousModel, opts.modelSelectSource);
|
|
3701
|
+
this.assertModelUsable(model, liveContextTokens);
|
|
3702
|
+
return systemPromptChange;
|
|
3703
|
+
}
|
|
3704
|
+
catch (error) {
|
|
3705
|
+
if (previousModel)
|
|
3706
|
+
this.agent.state.model = previousModel;
|
|
3707
|
+
else
|
|
3708
|
+
delete this.agent.state.model;
|
|
3709
|
+
this.agent.state.systemPrompt = previousSystemPrompt;
|
|
3710
|
+
throw error;
|
|
3711
|
+
}
|
|
3610
3712
|
}
|
|
3611
3713
|
_applyEphemeralThinkingLevel(level) {
|
|
3612
3714
|
const previousLevel = this.agent.state.thinkingLevel;
|
|
@@ -3643,6 +3745,8 @@ export class AgentSession {
|
|
|
3643
3745
|
nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
3644
3746
|
}
|
|
3645
3747
|
const next = favoriteModels[nextIndex];
|
|
3748
|
+
const liveContextTokens = this._getDownswitchLiveContextTokens(next.model);
|
|
3749
|
+
this.assertModelUsable(next.model, liveContextTokens);
|
|
3646
3750
|
const invalidatesCompaction = this._modelSelectionChangesContext(currentModel, next.model) ||
|
|
3647
3751
|
currentModel?.provider !== next.model.provider ||
|
|
3648
3752
|
currentModel?.id !== next.model.id;
|
|
@@ -3668,16 +3772,28 @@ export class AgentSession {
|
|
|
3668
3772
|
source: "cycle",
|
|
3669
3773
|
});
|
|
3670
3774
|
this._emitServiceTierChangeIfNeeded(previousTier, previousFastMode);
|
|
3671
|
-
const
|
|
3672
|
-
|
|
3673
|
-
|
|
3674
|
-
|
|
3675
|
-
|
|
3676
|
-
|
|
3677
|
-
|
|
3678
|
-
|
|
3775
|
+
const previousSystemPrompt = this.agent.state.systemPrompt;
|
|
3776
|
+
try {
|
|
3777
|
+
const systemPromptChange = await this._emitModelSelect(next.model, currentModel, "cycle");
|
|
3778
|
+
this.assertModelUsable(next.model, liveContextTokens);
|
|
3779
|
+
const cycleResult = {
|
|
3780
|
+
model: next.model,
|
|
3781
|
+
thinkingLevel: this.thinkingLevel,
|
|
3782
|
+
isScoped: true,
|
|
3783
|
+
};
|
|
3784
|
+
if (systemPromptChange) {
|
|
3785
|
+
cycleResult.systemPromptChange = systemPromptChange;
|
|
3786
|
+
}
|
|
3787
|
+
return cycleResult;
|
|
3788
|
+
}
|
|
3789
|
+
catch (error) {
|
|
3790
|
+
if (currentModel)
|
|
3791
|
+
this.agent.state.model = currentModel;
|
|
3792
|
+
else
|
|
3793
|
+
delete this.agent.state.model;
|
|
3794
|
+
this.agent.state.systemPrompt = previousSystemPrompt;
|
|
3795
|
+
throw error;
|
|
3679
3796
|
}
|
|
3680
|
-
return cycleResult;
|
|
3681
3797
|
}
|
|
3682
3798
|
// =========================================================================
|
|
3683
3799
|
// Thinking Level Management
|
|
@@ -4402,6 +4518,10 @@ export class AgentSession {
|
|
|
4402
4518
|
fromExtension,
|
|
4403
4519
|
willRetry: request.willRetry,
|
|
4404
4520
|
});
|
|
4521
|
+
// Shared success seam: every senpi-owned compaction apply (manual /compact,
|
|
4522
|
+
// extension applyCompaction, pre-prompt and auto compaction) funnels through
|
|
4523
|
+
// here after the compaction entry is appended and the success event emitted.
|
|
4524
|
+
await this._onCompactionContextChanged();
|
|
4405
4525
|
return {
|
|
4406
4526
|
accepted: true,
|
|
4407
4527
|
requestId,
|
|
@@ -4454,7 +4574,10 @@ export class AgentSession {
|
|
|
4454
4574
|
}
|
|
4455
4575
|
const contextTokens = estimateMessagesTokens(filterContextExcludedMessages(simulatedMessages));
|
|
4456
4576
|
const settings = this.settingsManager.getCompactionSettings();
|
|
4457
|
-
|
|
4577
|
+
const reserveTokens = settings.reserveScalingEnabled === false
|
|
4578
|
+
? settings.reserveTokens
|
|
4579
|
+
: resolveReserveTokens(model.contextWindow, settings.reserveTokens);
|
|
4580
|
+
return contextTokens > model.contextWindow - reserveTokens;
|
|
4458
4581
|
}
|
|
4459
4582
|
/**
|
|
4460
4583
|
* Replaces agent state with the canonical session context while keeping exact
|
|
@@ -4618,6 +4741,9 @@ export class AgentSession {
|
|
|
4618
4741
|
if (!model)
|
|
4619
4742
|
return;
|
|
4620
4743
|
const settings = this.settingsManager.getCompactionSettings();
|
|
4744
|
+
const reserveTokens = settings.reserveScalingEnabled === false
|
|
4745
|
+
? settings.reserveTokens
|
|
4746
|
+
: resolveReserveTokens(model.contextWindow, settings.reserveTokens);
|
|
4621
4747
|
const isOversized = () => {
|
|
4622
4748
|
const providerMessages = filterContextExcludedMessages([...this.agent.state.messages, ...messages]);
|
|
4623
4749
|
const estimate = estimateContextTokens(providerMessages);
|
|
@@ -4628,7 +4754,7 @@ export class AgentSession {
|
|
|
4628
4754
|
const contextTokens = usageMessage?.role === "assistant" && this._isAssistantFromBeforeLatestCompaction(usageMessage)
|
|
4629
4755
|
? estimateMessagesTokens(providerMessages)
|
|
4630
4756
|
: estimate.tokens;
|
|
4631
|
-
return contextTokens > model.contextWindow -
|
|
4757
|
+
return contextTokens > model.contextWindow - reserveTokens;
|
|
4632
4758
|
};
|
|
4633
4759
|
if (!settings.enabled || !isOversized())
|
|
4634
4760
|
return;
|
|
@@ -4906,6 +5032,21 @@ export class AgentSession {
|
|
|
4906
5032
|
try {
|
|
4907
5033
|
if (this.agent.state.isStreaming)
|
|
4908
5034
|
return "taken-over";
|
|
5035
|
+
// Pre-admission restore point. A senpi-owned compaction that succeeds
|
|
5036
|
+
// while a run is still active releases its refusal pin through
|
|
5037
|
+
// _onCompactionContextChanged() but cannot restore there: model-select
|
|
5038
|
+
// work must stay ordered behind the session-work barrier while the run
|
|
5039
|
+
// owns it. Every post-compaction continuation admission - auto/overflow
|
|
5040
|
+
// compaction recovery, _resumeQueuedMessagesAfterCompaction(), the
|
|
5041
|
+
// agent_end queued continuation and the retry continuation - is scheduled
|
|
5042
|
+
// through _scheduleContinuationAfterCurrentEvent() and funnels here, so
|
|
5043
|
+
// this is the single choke point every such request passes before
|
|
5044
|
+
// reaching the provider. Restoring here (a no-op when nothing is pending)
|
|
5045
|
+
// keeps the guarantee that the very next request after a compaction runs
|
|
5046
|
+
// on the primary, and precedes the admission revalidation below so that
|
|
5047
|
+
// check samples the restored model's context window - the same ordering
|
|
5048
|
+
// the retry-continuation restore uses.
|
|
5049
|
+
await this._maybeRestoreFallbackPrimary();
|
|
4909
5050
|
await this._revalidateScheduledContinuationAdmission();
|
|
4910
5051
|
if (this.agent.state.isStreaming)
|
|
4911
5052
|
return "taken-over";
|
|
@@ -5255,6 +5396,12 @@ export class AgentSession {
|
|
|
5255
5396
|
this.agent.state.model = refreshedModel;
|
|
5256
5397
|
}
|
|
5257
5398
|
_bindExtensionCore(runner) {
|
|
5399
|
+
// Activity extensions publish about work outliving a turn (background
|
|
5400
|
+
// terminal jobs, monitors, holds) feeds the session-busy contract. Re-bound
|
|
5401
|
+
// per runner; counts survive the swap so a reload cannot make live work
|
|
5402
|
+
// look idle to an occupancy sweep.
|
|
5403
|
+
this._unsubscribeWakeSources?.();
|
|
5404
|
+
this._unsubscribeWakeSources = runner.onBusEvent(WAKE_SOURCE_STATE_EVENT, (data) => this._wakeSources.observe(data));
|
|
5258
5405
|
const getCommands = () => {
|
|
5259
5406
|
const extensionCommands = runner.getRegisteredCommands().map((command) => ({
|
|
5260
5407
|
name: command.invocationName,
|