@code-yeongyu/senpi 2026.8.28 → 2026.8.30-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 +196 -0
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +50 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +330 -29
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -0
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +155 -37
- package/dist/core/bash-executor.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/credential-accounts.d.ts.map +1 -1
- package/dist/core/credential-accounts.js +45 -21
- package/dist/core/credential-accounts.js.map +1 -1
- package/dist/core/credential-pool/classify.d.ts +6 -1
- package/dist/core/credential-pool/classify.d.ts.map +1 -1
- package/dist/core/credential-pool/classify.js +22 -5
- package/dist/core/credential-pool/classify.js.map +1 -1
- package/dist/core/credential-pool/env-slots.d.ts.map +1 -1
- package/dist/core/credential-pool/env-slots.js +2 -0
- package/dist/core/credential-pool/env-slots.js.map +1 -1
- package/dist/core/credential-pool/failover.d.ts +8 -0
- package/dist/core/credential-pool/failover.d.ts.map +1 -1
- package/dist/core/credential-pool/failover.js +24 -6
- package/dist/core/credential-pool/failover.js.map +1 -1
- package/dist/core/credential-pool/rotation-stream.d.ts +13 -2
- package/dist/core/credential-pool/rotation-stream.d.ts.map +1 -1
- package/dist/core/credential-pool/rotation-stream.js +97 -10
- package/dist/core/credential-pool/rotation-stream.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts +17 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js +28 -0
- package/dist/core/extensions/builtin/compaction/context-pipeline.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +8 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +163 -48
- 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.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 +121 -147
- 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/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 +56 -0
- package/dist/core/extensions/builtin/compaction/orchestration.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js +136 -0
- package/dist/core/extensions/builtin/compaction/orchestration.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/policy.d.ts +5 -2
- package/dist/core/extensions/builtin/compaction/policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/policy.js +43 -26
- package/dist/core/extensions/builtin/compaction/policy.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/retained-message-safety.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/retained-message-safety.js +31 -8
- package/dist/core/extensions/builtin/compaction/retained-message-safety.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 +22 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +131 -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 +7 -196
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.d.ts +18 -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 +18 -0
- package/dist/core/extensions/builtin/compaction/token-budget-reminder.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts +36 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js +92 -0
- package/dist/core/extensions/builtin/compaction/tool-admission.js.map +1 -0
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js +8 -28
- package/dist/core/extensions/builtin/cursor-cli-oauth/stream.js.map +1 -1
- package/dist/core/extensions/builtin/goal/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/index.js +7 -0
- package/dist/core/extensions/builtin/goal/index.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.js +15 -5
- package/dist/core/extensions/builtin/permission-system/external-dir.js.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js +16 -1
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +13 -0
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +4 -2
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.d.ts +5 -0
- package/dist/core/extensions/builtin/terminal/manager.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/manager.js +31 -3
- package/dist/core/extensions/builtin/terminal/manager.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts +8 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.d.ts.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.js +16 -0
- package/dist/core/extensions/builtin/terminal/monitor-permission.js.map +1 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +13 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +403 -3
- package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.js +1 -0
- package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.js +5 -2
- package/dist/core/extensions/builtin/terminal/tools/kill-bash.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts +4 -0
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +40 -2
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
- package/dist/core/model-config-schema.d.ts +4 -4
- package/dist/core/model-resolver.js +2 -2
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +74 -37
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/retry-fallback/chains.d.ts +23 -1
- package/dist/core/retry-fallback/chains.d.ts.map +1 -1
- package/dist/core/retry-fallback/chains.js +59 -3
- package/dist/core/retry-fallback/chains.js.map +1 -1
- package/dist/core/retry-fallback/controller.d.ts.map +1 -1
- package/dist/core/retry-fallback/controller.js +9 -2
- package/dist/core/retry-fallback/controller.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js +9 -0
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/retry-fallback/validate.js +1 -1
- package/dist/core/retry-fallback/validate.js.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +9 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +40 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +15 -85
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +15 -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/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +97 -15
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +8 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +76 -34
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +27 -6
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/favorite-models-selector.js +2 -2
- package/dist/modes/interactive/components/favorite-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +7 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +34 -8
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/grok/chrome.d.ts +2 -0
- package/dist/modes/interactive/grok/chrome.d.ts.map +1 -1
- package/dist/modes/interactive/grok/chrome.js.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts +121 -1
- package/dist/modes/interactive/interactive-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-host-runtime.js +606 -45
- package/dist/modes/interactive/interactive-host-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +7 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +390 -239
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/connection-handler.d.ts +8 -1
- package/dist/modes/rpc/connection-handler.d.ts.map +1 -1
- package/dist/modes/rpc/connection-handler.js +268 -63
- package/dist/modes/rpc/connection-handler.js.map +1 -1
- package/dist/modes/rpc/host-ensure.d.ts +19 -0
- package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
- package/dist/modes/rpc/host-ensure.js +79 -15
- package/dist/modes/rpc/host-ensure.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts +29 -0
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +96 -25
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +2 -0
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +23 -12
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +20 -8
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +91 -16
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +131 -37
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-input-validation.d.ts +1 -0
- package/dist/modes/rpc/rpc-input-validation.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-validation.js +66 -0
- package/dist/modes/rpc/rpc-input-validation.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +3 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +3 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +248 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/rpc/session-binding.d.ts +1 -0
- package/dist/modes/rpc/session-binding.d.ts.map +1 -1
- package/dist/modes/rpc/session-binding.js +21 -1
- package/dist/modes/rpc/session-binding.js.map +1 -1
- package/dist/modes/rpc/session-command-router.d.ts +22 -0
- package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
- package/dist/modes/rpc/session-command-router.js +148 -16
- package/dist/modes/rpc/session-command-router.js.map +1 -1
- package/dist/modes/rpc/session-event-writer.d.ts +4 -0
- package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
- package/dist/modes/rpc/session-event-writer.js +58 -7
- package/dist/modes/rpc/session-event-writer.js.map +1 -1
- package/dist/modes/rpc/session-extension-ui-requests.d.ts +1 -0
- package/dist/modes/rpc/session-extension-ui-requests.d.ts.map +1 -1
- package/dist/modes/rpc/session-extension-ui-requests.js +5 -0
- package/dist/modes/rpc/session-extension-ui-requests.js.map +1 -1
- package/dist/modes/rpc/session-registry.d.ts +17 -2
- package/dist/modes/rpc/session-registry.d.ts.map +1 -1
- package/dist/modes/rpc/session-registry.js +67 -4
- package/dist/modes/rpc/session-registry.js.map +1 -1
- package/dist/modes/rpc/socket-event-fanout.d.ts +22 -0
- package/dist/modes/rpc/socket-event-fanout.d.ts.map +1 -0
- package/dist/modes/rpc/socket-event-fanout.js +84 -0
- package/dist/modes/rpc/socket-event-fanout.js.map +1 -0
- package/docs/rpc.md +55 -2
- package/docs/settings.md +34 -0
- package/docs/windows.md +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +74 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +139 -90
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +4 -4
- 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 +6 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +40 -20
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts +3 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +28 -9
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -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 +67 -38
- 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/measure.d.ts +20 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js +443 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent/measure.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.d.ts +2 -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 +2 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/cursor-agent.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.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/baseten.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-ai-gateway.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/cloudflare-workers-ai.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/huggingface.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-go.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/openrouter.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/together.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/providers/data/zai-coding-cn.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/zai.json +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/package.json +1 -1
- package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +7 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +5 -0
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/mux.js +2 -2
- package/node_modules/@earendil-works/pi-tui/dist/mux.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +1 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +19 -0
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-tui/package.json +1 -1
- package/package.json +7 -7
|
@@ -1,112 +1,34 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
1
|
import { createWarmAnchorSnapshot, isWarmSummaryAnchorValid } from "../../../compaction/warm-anchor.js";
|
|
3
|
-
import { convertToLlm } from "../../../messages.js";
|
|
4
2
|
import * as checkpointState from "./checkpoint-state.js";
|
|
5
3
|
import * as breaker from "./circuit-breaker.js";
|
|
6
|
-
import {
|
|
4
|
+
import { buildCompactionContext } from "./context-pipeline.js";
|
|
7
5
|
import { createDegradationMonitorState, handleMessageEnd, handleTurnEnd, RECOVERY_INSTRUCTIONS, resetOnSessionCompact, } from "./degradation-monitor.js";
|
|
8
6
|
import { classifyRequiredCompactionFallbackFailure, createRequiredCompactionFallback, } from "./deterministic-fallback.js";
|
|
9
7
|
import * as idle from "./idle.js";
|
|
10
8
|
import * as idleRetry from "./idle-retry.js";
|
|
11
9
|
import { CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE, collectCompactBoundaryEntries, createCompactionLanePolicy, SDK_NATIVE_LANE_REJECTION_REASON, } from "./lane-policy.js";
|
|
12
10
|
import { createCompactionLogger } from "./log.js";
|
|
13
|
-
import {
|
|
11
|
+
import { handleCompactionModelSelect } from "./model-selection.js";
|
|
12
|
+
import { rewriteOpenAiPayloadWithRemoteCompaction, runOpenAiRemoteCompaction, SENPI_COMPACTION_EVENT, } from "./openai-remote.js";
|
|
14
13
|
import { createOpenAiRemoteCompactionHeaders, isOpenAiRemoteCompactionModel, openAiRemoteCompactionOrigin, } from "./openai-remote-model.js";
|
|
14
|
+
import { resolveBeforeAgentStartMessage, resolveCompactionGeometry, resolveIdleWarmAction, resolveReminderSystemPrompt, shouldDeferGraceBand, } from "./orchestration.js";
|
|
15
15
|
import * as cap from "./per-turn-cap.js";
|
|
16
16
|
import * as policy from "./policy.js";
|
|
17
|
-
import { repairOrphanedToolResults } from "./repair-tool-pairs.js";
|
|
18
17
|
import * as restoration from "./restoration-tracker.js";
|
|
19
|
-
import { applyGeneratedCompaction, createEmergencyPruneLatch, createSpeculativeCompactionSnapshot, getPromptVariant,
|
|
18
|
+
import { applyGeneratedCompaction, createEmergencyPruneLatch, createSpeculativeCompactionSnapshot, getPromptVariant, runExtensionCompaction, SummaryGenerationError, } from "./speculative.js";
|
|
19
|
+
import { trackSpeculativeJob } from "./speculative-job.js";
|
|
20
20
|
import { createInitialState, resetTurnCounter } from "./state.js";
|
|
21
21
|
import { resolveInheritedTaskIntent } from "./task-intent.js";
|
|
22
22
|
import * as todoBridge from "./todo-bridge.js";
|
|
23
|
+
import { computeTokenBudgetReminder, createInitialReminderState, } from "./token-budget-reminder.js";
|
|
23
24
|
import { isTransientSummarizationFailure } from "./transient-failure.js";
|
|
25
|
+
export { getPromptContextWindow } from "./extension-wiring.js";
|
|
26
|
+
import { createBlockingRemoteCompactionEvent, endCompactionFeedback, estimatePendingPromptTokens, isAbortedAssistantMessage, isMonitorableMessageEvent, isRequiredCompactionFallbackReason, linkAbortSignal, recentCheckpoint, withAdditionalTokens, } from "./extension-wiring.js";
|
|
24
27
|
import { isIneffectiveCompaction } from "./yield.js";
|
|
25
28
|
const DEFAULT_CONTEXT_WINDOW = 200_000;
|
|
26
29
|
const EMERGENCY_COMPACTION_INSTRUCTIONS = "EMERGENCY: hard context limit reached. Produce an aggressive recovery summary that preserves current goal, constraints, files touched, tool outcomes, and exact next steps. Prefer concise factual state over transcript detail.";
|
|
27
30
|
const PROACTIVE_COMPACTION_INSTRUCTIONS = "Proactively compact before the next agent turn.";
|
|
28
31
|
const MAX_PENDING_METADATA = 8;
|
|
29
|
-
const IMAGE_PROMPT_TOKEN_ESTIMATE = 1_200;
|
|
30
|
-
const MAX_OUTPUT_RESERVE_RATIO = 0.5;
|
|
31
|
-
function approxTokens(text) {
|
|
32
|
-
return Math.ceil(text.length / 4);
|
|
33
|
-
}
|
|
34
|
-
function estimatePendingPromptTokens(event) {
|
|
35
|
-
return approxTokens(event.prompt ?? "") + (event.images?.length ?? 0) * IMAGE_PROMPT_TOKEN_ESTIMATE;
|
|
36
|
-
}
|
|
37
|
-
export function getPromptContextWindow(contextWindow, maxTokens) {
|
|
38
|
-
if (typeof maxTokens !== "number" || !Number.isFinite(maxTokens) || maxTokens <= 0 || contextWindow <= 0) {
|
|
39
|
-
return contextWindow;
|
|
40
|
-
}
|
|
41
|
-
const outputReserve = Math.min(maxTokens, Math.floor(contextWindow * MAX_OUTPUT_RESERVE_RATIO));
|
|
42
|
-
return contextWindow - outputReserve;
|
|
43
|
-
}
|
|
44
|
-
function withAdditionalTokens(usage, additionalTokens) {
|
|
45
|
-
if (usage.tokens === null || additionalTokens <= 0)
|
|
46
|
-
return usage;
|
|
47
|
-
const tokens = usage.tokens + additionalTokens;
|
|
48
|
-
return {
|
|
49
|
-
...usage,
|
|
50
|
-
tokens,
|
|
51
|
-
percent: usage.contextWindow > 0 ? (tokens / usage.contextWindow) * 100 : usage.percent,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function isMonitorableMessageEvent(event) {
|
|
55
|
-
return "content" in event.message && Array.isArray(event.message.content);
|
|
56
|
-
}
|
|
57
|
-
function isAbortedAssistantMessage(event) {
|
|
58
|
-
return event.message.role === "assistant" && "stopReason" in event.message && event.message.stopReason === "aborted";
|
|
59
|
-
}
|
|
60
|
-
function isRequiredCompactionFallbackReason(reason) {
|
|
61
|
-
return reason === "threshold" || reason === "overflow";
|
|
62
|
-
}
|
|
63
|
-
function recentCheckpoint(ctx) {
|
|
64
|
-
const checkpoint = checkpointState.getLatestCheckpoint(ctx);
|
|
65
|
-
if (!checkpoint?.timestamp)
|
|
66
|
-
return null;
|
|
67
|
-
return Date.now() - checkpoint.timestamp <= 60_000 ? checkpoint : null;
|
|
68
|
-
}
|
|
69
|
-
function shouldEndFeedback(result) {
|
|
70
|
-
return !result.applied && result.reason !== "rejected";
|
|
71
|
-
}
|
|
72
|
-
function endCompactionFeedback(ctx, signal, result, remoteFallbackReason) {
|
|
73
|
-
if (shouldEndFeedback(result)) {
|
|
74
|
-
// Surface the concrete failure instead of the generic "Compaction did not
|
|
75
|
-
// apply": the remote stage's reason (e.g. remote-compaction-timeout) and the
|
|
76
|
-
// terminal local reason (unavailable / stale), so the decision log and TUI
|
|
77
|
-
// show what actually happened. An aborted compaction renders "Compaction
|
|
78
|
-
// cancelled" downstream and must not carry a failure message.
|
|
79
|
-
const localReason = result.applied ? undefined : result.reason;
|
|
80
|
-
const parts = [remoteFallbackReason, localReason].filter((part) => Boolean(part));
|
|
81
|
-
const errorMessage = signal?.aborted || parts.length === 0
|
|
82
|
-
? undefined
|
|
83
|
-
: `Compaction did not apply: ${parts.join("; local fallback ")}`;
|
|
84
|
-
ctx.endCompaction?.({ reason: "extension", signal, aborted: signal?.aborted, errorMessage });
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
function linkAbortSignal(source, target) {
|
|
88
|
-
if (!source)
|
|
89
|
-
return () => { };
|
|
90
|
-
if (source.aborted) {
|
|
91
|
-
target.abort();
|
|
92
|
-
return () => { };
|
|
93
|
-
}
|
|
94
|
-
const abort = () => target.abort();
|
|
95
|
-
source.addEventListener("abort", abort, { once: true });
|
|
96
|
-
return () => source.removeEventListener("abort", abort);
|
|
97
|
-
}
|
|
98
|
-
function createBlockingRemoteCompactionEvent(ctx, snapshot, customInstructions, signal) {
|
|
99
|
-
return {
|
|
100
|
-
type: "session_before_compact",
|
|
101
|
-
reason: "extension",
|
|
102
|
-
willRetry: false,
|
|
103
|
-
requestId: randomUUID(),
|
|
104
|
-
preparation: snapshot.preparation,
|
|
105
|
-
branchEntries: ctx.sessionManager.getBranch(),
|
|
106
|
-
customInstructions,
|
|
107
|
-
signal,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
32
|
export default function compactionExtension(pi, remoteCompactionDependencies = {}) {
|
|
111
33
|
let state = createInitialState();
|
|
112
34
|
const lanePolicy = createCompactionLanePolicy();
|
|
@@ -116,6 +38,7 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
116
38
|
const restorationState = state.restoration ?? restoration.createRestorationTrackerState();
|
|
117
39
|
state = { ...state, restoration: restorationState };
|
|
118
40
|
let speculativeGeneration = 0;
|
|
41
|
+
let reminderState = createInitialReminderState();
|
|
119
42
|
let speculativeJob;
|
|
120
43
|
const pendingMetadata = new Map();
|
|
121
44
|
let logger;
|
|
@@ -333,9 +256,14 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
333
256
|
getLogger(ctx).debug("speculative_started", { generation, origin: "speculative" });
|
|
334
257
|
const controller = new AbortController();
|
|
335
258
|
const settled = runExtensionCompaction(ctx, snapshot, controller.signal).then((result) => ({ result, error: undefined }), (error) => ({ result: undefined, error: error instanceof Error ? error : new Error(String(error)) }));
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
259
|
+
speculativeJob = trackSpeculativeJob({
|
|
260
|
+
generation,
|
|
261
|
+
snapshot,
|
|
262
|
+
controller,
|
|
263
|
+
settled,
|
|
264
|
+
armedAtTokens: ctx.getContextUsage()?.tokens ?? 0,
|
|
265
|
+
});
|
|
266
|
+
void settled.then(() => remoteCompactionDependencies.onSpeculativeJobSettled?.());
|
|
339
267
|
}
|
|
340
268
|
function capturePendingMetadata(requestId, ctx) {
|
|
341
269
|
pendingMetadata.set(requestId, {
|
|
@@ -638,37 +566,16 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
638
566
|
claimedWarmJob?.controller.abort();
|
|
639
567
|
}
|
|
640
568
|
});
|
|
641
|
-
pi.on("model_select", (event, ctx) => {
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
jobModel.provider === selectedModel.provider &&
|
|
652
|
-
jobModel.id === selectedModel.id &&
|
|
653
|
-
jobModel.baseUrl === selectedModel.baseUrl &&
|
|
654
|
-
jobModel.contextWindow === selectedModel.contextWindow;
|
|
655
|
-
if (!alreadySpeculatingForSelectedModel) {
|
|
656
|
-
invalidateSpeculativeCompaction(ctx);
|
|
657
|
-
}
|
|
658
|
-
const previousWindow = event.previousModel?.contextWindow ?? 0;
|
|
659
|
-
const contextWindow = ctx.model?.contextWindow ?? 0;
|
|
660
|
-
if (previousWindow <= contextWindow)
|
|
661
|
-
return;
|
|
662
|
-
const usage = ctx.getContextUsage();
|
|
663
|
-
if (!usage)
|
|
664
|
-
return;
|
|
665
|
-
if (breaker.isTripped(state, Date.now()))
|
|
666
|
-
return;
|
|
667
|
-
const settings = ctx.getCompactionSettings();
|
|
668
|
-
if (policy.shouldStartSpeculativeCompaction(usage, contextWindow, settings, state.lastYield ?? undefined)) {
|
|
669
|
-
startSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);
|
|
670
|
-
}
|
|
671
|
-
});
|
|
569
|
+
pi.on("model_select", (event, ctx) => handleCompactionModelSelect({
|
|
570
|
+
event,
|
|
571
|
+
ctx,
|
|
572
|
+
state,
|
|
573
|
+
speculativeSnapshot: speculativeJob?.snapshot,
|
|
574
|
+
laneOwnsCompaction: lanePolicy.disablesSenpiCompaction(ctx),
|
|
575
|
+
breakerTripped: breaker.isTripped(state, Date.now()),
|
|
576
|
+
invalidate: () => invalidateSpeculativeCompaction(ctx),
|
|
577
|
+
start: () => startSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS),
|
|
578
|
+
}));
|
|
672
579
|
pi.on("session_compact", async (event, ctx) => {
|
|
673
580
|
const compactEvent = event;
|
|
674
581
|
invalidateSpeculativeCompaction(ctx);
|
|
@@ -679,6 +586,7 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
679
586
|
const keptEntries = firstKeptIndex === -1 ? [] : branchEntries.slice(firstKeptIndex);
|
|
680
587
|
state = cap.incrementAccepted(state);
|
|
681
588
|
state = breaker.recordSuccess(state);
|
|
589
|
+
reminderState = createInitialReminderState();
|
|
682
590
|
const details = compactEvent.compactionEntry.details;
|
|
683
591
|
const sy = details?.structuralYield;
|
|
684
592
|
if (sy && typeof sy.savedTokens === "number" && typeof sy.savingsRatio === "number") {
|
|
@@ -710,7 +618,9 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
710
618
|
compactionEntryId: compactEvent.compactionEntry.id,
|
|
711
619
|
contextWindow: usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,
|
|
712
620
|
usageTokens: usage?.tokens ?? null,
|
|
713
|
-
reserveTokens: settings.
|
|
621
|
+
reserveTokens: settings.reserveScalingEnabled === false
|
|
622
|
+
? settings.reserveTokens
|
|
623
|
+
: policy.resolveReserveTokens(usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW, settings.reserveTokens),
|
|
714
624
|
settings,
|
|
715
625
|
keptMessages: keptEntries.flatMap((entry) => {
|
|
716
626
|
if (entry.type !== "message")
|
|
@@ -721,7 +631,9 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
721
631
|
}
|
|
722
632
|
return;
|
|
723
633
|
}
|
|
724
|
-
|
|
634
|
+
if (!lanePolicy.disablesSenpiCompaction(ctx)) {
|
|
635
|
+
state = breaker.recordFailure(state, Date.now(), { route: compactEvent.reason });
|
|
636
|
+
}
|
|
725
637
|
});
|
|
726
638
|
pi.on("before_agent_start", async (event, ctx) => {
|
|
727
639
|
sessionIdleSinceAgentEnd = false;
|
|
@@ -736,9 +648,14 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
736
648
|
// the circuit breaker never blocks that valve for senpi-owned lanes.
|
|
737
649
|
const laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);
|
|
738
650
|
const breakerCoolingDown = breaker.isTripped(state, Date.now()) || laneOwnsCompaction;
|
|
651
|
+
const { reserveTokens, thresholdTokens, leadTokens } = resolveCompactionGeometry({
|
|
652
|
+
contextWindow,
|
|
653
|
+
settings,
|
|
654
|
+
lastYield: state.lastYield ?? undefined,
|
|
655
|
+
});
|
|
739
656
|
if (!laneOwnsCompaction &&
|
|
740
657
|
usage &&
|
|
741
|
-
policy.isAtHardLimit(usage, contextWindow,
|
|
658
|
+
policy.isAtHardLimit(usage, contextWindow, reserveTokens, pendingPromptTokens)) {
|
|
742
659
|
getLogger(ctx).debug("hard_limit_trigger", {
|
|
743
660
|
contextWindow,
|
|
744
661
|
tokens: usage.tokens ?? 0,
|
|
@@ -754,42 +671,83 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
754
671
|
tokens: usageWithPendingPrompt.tokens ?? 0,
|
|
755
672
|
threshold: settings.reserveTokens,
|
|
756
673
|
});
|
|
757
|
-
|
|
674
|
+
if (!shouldDeferGraceBand({
|
|
675
|
+
tokens: usageWithPendingPrompt.tokens ?? 0,
|
|
676
|
+
thresholdTokens,
|
|
677
|
+
leadTokens,
|
|
678
|
+
contextWindow,
|
|
679
|
+
reserveTokens,
|
|
680
|
+
compactionInFlight: speculativeJob !== undefined && !speculativeJob.completed,
|
|
681
|
+
graceBandEnabled: settings.graceBandEnabled,
|
|
682
|
+
})) {
|
|
683
|
+
await applyBlockingCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
getLogger(ctx).debug("grace_deferred", {
|
|
687
|
+
tokens: usageWithPendingPrompt.tokens ?? 0,
|
|
688
|
+
threshold: thresholdTokens,
|
|
689
|
+
});
|
|
690
|
+
}
|
|
758
691
|
}
|
|
759
692
|
else if (!breakerCoolingDown &&
|
|
760
693
|
usageWithPendingPrompt &&
|
|
761
|
-
policy.shouldStartSpeculativeCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined)) {
|
|
694
|
+
policy.shouldStartSpeculativeCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined, leadTokens)) {
|
|
762
695
|
getLogger(ctx).debug("emergency_prune", {
|
|
763
696
|
route: "context-event",
|
|
764
697
|
tokens: usageWithPendingPrompt.tokens ?? 0,
|
|
765
698
|
});
|
|
766
699
|
startSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);
|
|
767
700
|
}
|
|
768
|
-
|
|
701
|
+
const reminder = computeTokenBudgetReminder({
|
|
702
|
+
contextTokens: usageWithPendingPrompt?.tokens ?? 0,
|
|
703
|
+
contextWindow,
|
|
704
|
+
thresholdTokens,
|
|
705
|
+
leadTokens,
|
|
706
|
+
compactionGeneration: speculativeGeneration,
|
|
707
|
+
state: reminderState,
|
|
708
|
+
});
|
|
709
|
+
reminderState = reminder.nextState;
|
|
710
|
+
const deliveredMessage = resolveBeforeAgentStartMessage({
|
|
711
|
+
message,
|
|
712
|
+
reminder: reminder.message,
|
|
713
|
+
reminderEnabled: settings.reminderEnabled,
|
|
714
|
+
});
|
|
715
|
+
const reminderSystemPrompt = resolveReminderSystemPrompt({
|
|
716
|
+
systemPrompt: event.systemPrompt,
|
|
717
|
+
reminder: !message ? reminder.message : undefined,
|
|
718
|
+
reminderEnabled: settings.reminderEnabled,
|
|
719
|
+
});
|
|
720
|
+
if (!deliveredMessage && !reminderSystemPrompt)
|
|
721
|
+
return undefined;
|
|
722
|
+
return {
|
|
723
|
+
...(deliveredMessage ? { message: deliveredMessage } : {}),
|
|
724
|
+
...(reminderSystemPrompt ? { systemPrompt: reminderSystemPrompt } : {}),
|
|
725
|
+
};
|
|
769
726
|
});
|
|
770
727
|
pi.on("context", (event, ctx) => {
|
|
771
728
|
const usage = ctx.getContextUsage();
|
|
729
|
+
const settings = ctx.getCompactionSettings();
|
|
772
730
|
const contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;
|
|
773
|
-
const
|
|
774
|
-
const
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
: event.
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
731
|
+
const laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);
|
|
732
|
+
const breakerFallback = !laneOwnsCompaction &&
|
|
733
|
+
breaker.isTripped(state, Date.now()) &&
|
|
734
|
+
usage?.tokens !== null &&
|
|
735
|
+
usage !== undefined &&
|
|
736
|
+
usage.tokens >= contextWindow * policy.computeEffectiveThreshold(contextWindow, state.lastYield ?? undefined);
|
|
737
|
+
if (breakerFallback)
|
|
738
|
+
getLogger(ctx).debug("breaker_deterministic_fallback", { route: "context-event", tokens: usage.tokens ?? 0 });
|
|
739
|
+
return {
|
|
740
|
+
messages: buildCompactionContext({
|
|
741
|
+
event,
|
|
742
|
+
ctx,
|
|
743
|
+
contextWindow,
|
|
744
|
+
promptContextWindow: contextWindow,
|
|
745
|
+
toolAdmissionEnabled: settings.toolAdmissionEnabled !== false,
|
|
746
|
+
breakerFallback,
|
|
747
|
+
laneOwnsCompaction,
|
|
748
|
+
emergencyPruneLatch,
|
|
749
|
+
}),
|
|
750
|
+
};
|
|
793
751
|
});
|
|
794
752
|
pi.on("before_provider_request", async (event, ctx) => {
|
|
795
753
|
const model = event.model ?? ctx.model;
|
|
@@ -850,6 +808,22 @@ export default function compactionExtension(pi, remoteCompactionDependencies = {
|
|
|
850
808
|
armIdleWarmupRetry(ctx);
|
|
851
809
|
armIdleApply(ctx);
|
|
852
810
|
}
|
|
811
|
+
else {
|
|
812
|
+
const warmAction = resolveIdleWarmAction({
|
|
813
|
+
willRetry: event.willRetry ?? false,
|
|
814
|
+
aborted: event.aborted === true,
|
|
815
|
+
settings,
|
|
816
|
+
usage,
|
|
817
|
+
contextWindow,
|
|
818
|
+
breakerTripped: breaker.isTripped(state, Date.now()),
|
|
819
|
+
lastYield: state.lastYield ?? undefined,
|
|
820
|
+
mode: ctx.mode,
|
|
821
|
+
}, speculativeJob);
|
|
822
|
+
if (warmAction === "replace")
|
|
823
|
+
invalidateSpeculativeCompaction(ctx);
|
|
824
|
+
if (warmAction !== "none")
|
|
825
|
+
startSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);
|
|
826
|
+
}
|
|
853
827
|
});
|
|
854
828
|
pi.on("message_end", async (event, ctx) => {
|
|
855
829
|
for (const entry of collectCompactBoundaryEntries(event.message)) {
|