@code-yeongyu/senpi 2026.9.7 → 2026.9.8
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 +79 -0
- package/dist/core/agent-session.d.ts +40 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +159 -40
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +2 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/dynamic-prompt/working-task.js +1 -1
- package/dist/core/dynamic-prompt/working-task.js.map +1 -1
- package/dist/core/extensions/builtin/cache-keepalive/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/cache-keepalive/index.js +4 -21
- package/dist/core/extensions/builtin/cache-keepalive/index.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts +2 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js +10 -25
- package/dist/core/extensions/builtin/claude-sdk-oauth/account-command.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js +36 -19
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js +21 -10
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-commit-boundary.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +4 -17
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js +23 -33
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js +1 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js +5 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-sync.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js +8 -3
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-turn-attempt.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts +6 -5
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js +6 -5
- package/dist/core/extensions/builtin/claude-sdk-oauth/tools.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts +8 -0
- package/dist/core/extensions/builtin/compaction/circuit-breaker.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/circuit-breaker.js +8 -0
- package/dist/core/extensions/builtin/compaction/circuit-breaker.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +8 -0
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +125 -20
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.d.ts +18 -0
- package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.d.ts.map +1 -0
- package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.js +20 -0
- package/dist/core/extensions/builtin/compaction/fallback-failed-turn-normalization.js.map +1 -0
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +54 -11
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/lane-policy.d.ts +3 -0
- package/dist/core/extensions/builtin/compaction/lane-policy.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/lane-policy.js +47 -23
- package/dist/core/extensions/builtin/compaction/lane-policy.js.map +1 -1
- package/dist/core/extensions/builtin/goal/agent-end-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/agent-end-continuation.js +11 -0
- package/dist/core/extensions/builtin/goal/agent-end-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js +6 -4
- package/dist/core/extensions/builtin/goal/cache-warm-renderer.js.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts +25 -1
- package/dist/core/extensions/builtin/goal/cache-warm.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/cache-warm.js +29 -10
- package/dist/core/extensions/builtin/goal/cache-warm.js.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts +3 -1
- package/dist/core/extensions/builtin/goal/continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/continuation.js +17 -2
- package/dist/core/extensions/builtin/goal/continuation.js.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js +1 -0
- package/dist/core/extensions/builtin/goal/lifecycle-helpers.js.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.d.ts.map +1 -1
- package/dist/core/extensions/builtin/goal/monitor-continuation.js +8 -3
- package/dist/core/extensions/builtin/goal/monitor-continuation.js.map +1 -1
- package/dist/core/extensions/builtin/gpt-account.d.ts +5 -1
- package/dist/core/extensions/builtin/gpt-account.d.ts.map +1 -1
- package/dist/core/extensions/builtin/gpt-account.js +9 -26
- package/dist/core/extensions/builtin/gpt-account.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/plugin-manifest.js +2 -2
- package/dist/core/extensions/builtin/hooks/plugin-manifest.js.map +1 -1
- package/dist/core/extensions/builtin/hooks/safety.js +2 -2
- package/dist/core/extensions/builtin/hooks/safety.js.map +1 -1
- package/dist/core/extensions/builtin/monitor-state-event.d.ts +18 -0
- package/dist/core/extensions/builtin/monitor-state-event.d.ts.map +1 -1
- package/dist/core/extensions/builtin/monitor-state-event.js +23 -0
- package/dist/core/extensions/builtin/monitor-state-event.js.map +1 -1
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts +24 -0
- package/dist/core/extensions/builtin/oauth-login-interaction.d.ts.map +1 -0
- package/dist/core/extensions/builtin/oauth-login-interaction.js +77 -0
- package/dist/core/extensions/builtin/oauth-login-interaction.js.map +1 -0
- package/dist/core/extensions/builtin/permission-system/external-dir.d.ts.map +1 -1
- package/dist/core/extensions/builtin/permission-system/external-dir.js +5 -51
- 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 +5 -7
- package/dist/core/extensions/builtin/permission-system/parsers.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5-1.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/claude-fable-5.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts +14 -7
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js +34 -13
- package/dist/core/extensions/builtin/prompt-preset/execution-tooling.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.d.ts +6 -10
- 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 +14 -9
- package/dist/core/extensions/builtin/prompt-preset/gpt-5.6.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts +15 -15
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.d.ts.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js +49 -21
- package/dist/core/extensions/builtin/prompt-preset/gpt-6-astra.js.map +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js +1 -1
- package/dist/core/extensions/builtin/prompt-preset/kimi-k3.js.map +1 -1
- package/dist/core/extensions/builtin/service-tier.d.ts +2 -0
- package/dist/core/extensions/builtin/service-tier.d.ts.map +1 -1
- package/dist/core/extensions/builtin/service-tier.js +17 -1
- package/dist/core/extensions/builtin/service-tier.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/durable-command.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/durable-command.js +3 -0
- package/dist/core/extensions/builtin/terminal/durable-command.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/durable-file.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/durable-file.js +2 -0
- package/dist/core/extensions/builtin/terminal/durable-file.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/extension.js +14 -2
- package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-notify.js +27 -5
- package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +17 -0
- package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/monitor-registry.js +76 -14
- package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.d.ts +2 -0
- package/dist/core/extensions/builtin/terminal/notify.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/notify.js +6 -1
- package/dist/core/extensions/builtin/terminal/notify.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts +3 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/session-bundle.js +13 -0
- package/dist/core/extensions/builtin/terminal/session-bundle.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/shared.d.ts +13 -2
- package/dist/core/extensions/builtin/terminal/shared.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/shared.js +15 -2
- package/dist/core/extensions/builtin/terminal/shared.js.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js +8 -1
- package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
- package/dist/core/extensions/builtin/tool-search/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-search/index.js +1 -0
- package/dist/core/extensions/builtin/tool-search/index.js.map +1 -1
- package/dist/core/extensions/builtin/tool-search/service.d.ts +4 -0
- package/dist/core/extensions/builtin/tool-search/service.d.ts.map +1 -1
- package/dist/core/extensions/builtin/tool-search/service.js +11 -0
- package/dist/core/extensions/builtin/tool-search/service.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +8 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +9 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/high-reasoning-warning.d.ts.map +1 -1
- package/dist/core/high-reasoning-warning.js +4 -6
- package/dist/core/high-reasoning-warning.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +25 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.js +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-shapes.js.map +1 -1
- package/dist/core/tools/bounded-realpath.d.ts +28 -0
- package/dist/core/tools/bounded-realpath.d.ts.map +1 -0
- package/dist/core/tools/bounded-realpath.js +53 -0
- package/dist/core/tools/bounded-realpath.js.map +1 -0
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +15 -13
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/filesystem-policy.d.ts +7 -0
- package/dist/core/tools/filesystem-policy.d.ts.map +1 -1
- package/dist/core/tools/filesystem-policy.js +25 -15
- package/dist/core/tools/filesystem-policy.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +13 -2
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/memory-tips.d.ts.map +1 -1
- package/dist/modes/interactive/tips/catalog/memory-tips.js +6 -0
- package/dist/modes/interactive/tips/catalog/memory-tips.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/subagent-tips.d.ts.map +1 -1
- package/dist/modes/interactive/tips/catalog/subagent-tips.js +6 -0
- package/dist/modes/interactive/tips/catalog/subagent-tips.js.map +1 -1
- package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
- package/dist/modes/rpc/host-lifecycle.js +31 -5
- package/dist/modes/rpc/host-lifecycle.js.map +1 -1
- package/dist/modes/rpc/host-watchdog.d.ts +11 -0
- package/dist/modes/rpc/host-watchdog.d.ts.map +1 -1
- package/dist/modes/rpc/host-watchdog.js +16 -2
- package/dist/modes/rpc/host-watchdog.js.map +1 -1
- package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
- package/dist/modes/rpc/multi-session-host.js +54 -16
- package/dist/modes/rpc/multi-session-host.js.map +1 -1
- package/dist/modes/rpc/socket-ownership.d.ts +46 -0
- package/dist/modes/rpc/socket-ownership.d.ts.map +1 -0
- package/dist/modes/rpc/socket-ownership.js +178 -0
- package/dist/modes/rpc/socket-ownership.js.map +1 -0
- package/dist/utils/fs-watch.d.ts +17 -0
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js +38 -10
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/paths.d.ts +33 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +109 -3
- package/dist/utils/paths.js.map +1 -1
- package/docs/development.md +3 -2
- package/docs/providers.md +5 -1
- package/docs/settings.md +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +31 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +14 -1
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/runtime-factory.ts +3 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/AGENTS.md +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/kernel.ts +4 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +3 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +29 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-indirect-eval.js +10 -6
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.d.ts +16 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-shell-capture.js +44 -8
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +1 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel-contract.ts +3 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/transport.ts +9 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/kernel.ts +4 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/session-env.ts +56 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-contract.ts +3 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +9 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/output/output-meta.ts +26 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt.ts +17 -24
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/image.ts +12 -3
- 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/dist/assistant-terminal-state.d.ts +7 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js +19 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/assistant-terminal-state.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js +24 -16
- package/node_modules/@earendil-works/pi-agent-core/dist/empty-assistant-recovery.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/index.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 +47 -178
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js +260 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/anthropic-tool-references.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.js.map +1 -1
- 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 +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.d.ts +40 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.js +138 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic-callback-listener.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.d.ts +2 -3
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.js +42 -139
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/anthropic.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.d.ts +6 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.js +29 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/authorization-input.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.d.ts +3 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.js +20 -0
- package/node_modules/@earendil-works/pi-ai/dist/auth/oauth/error-details.js.map +1 -0
- 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/azure-openai-responses.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/github-copilot.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai-codex.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/openai.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/tool-call-middleware/recovery-stream-terminal.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.js +16 -1
- package/node_modules/@earendil-works/pi-ai/dist/tool-call-middleware/recovery-stream-terminal.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts +7 -0
- package/node_modules/@earendil-works/pi-ai/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js +14 -3
- package/node_modules/@earendil-works/pi-ai/dist/utils/overflow.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts +2 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js +16 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/server-fallback-receipt.js.map +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/package.json +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAExG,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACN,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,yCAAyC,EACzC,gCAAgC,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACN,mCAAmC,EACnC,6BAA6B,EAC7B,0BAA0B,EAC1B,gCAAgC,GAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAyB,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAEN,wCAAwC,EACxC,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,mCAAmC,EACnC,6BAA6B,EAC7B,4BAA4B,GAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,8BAA8B,EAC9B,yBAAyB,EACzB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AACxD,OAAO,EACN,wBAAwB,EACxB,yBAAyB,EACzB,mCAAmC,EACnC,gBAAgB,EAChB,sBAAsB,EAGtB,sBAAsB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAuB,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAiC,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,GAE1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EACN,mCAAmC,EACnC,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,EAClC,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,sBAAsB,GAAG,OAAO,CAAC;AACvC,MAAM,iCAAiC,GACtC,kOAAkO,CAAC;AACpO,MAAM,iCAAiC,GAAG,iDAAiD,CAAC;AAC5F,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAO/B,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAC1C,EAAgB,EAChB,+BAAmE,EAAE;IAErE,IAAI,KAAK,GAA6B,kBAAkB,EAAE,CAAC;IAC3D,MAAM,UAAU,GAAG,0BAA0B,EAAE,CAAC;IAChD,MAAM,yBAAyB,GAAG,eAAe,CAAC,+BAA+B,EAAE,CAAC;IACpF,MAAM,mBAAmB,GAAG,yBAAyB,EAAE,CAAC;IACxD,MAAM,gBAAgB,GAAG,6BAA6B,EAAE,CAAC;IACzD,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC,6BAA6B,EAAE,CAAC;IAC1F,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;IACpD,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,aAAa,GAA6B,0BAA0B,EAAE,CAAC;IAC3E,IAAI,cAA0C,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAqC,CAAC;IACrE,IAAI,MAAoC,CAAC;IACzC,MAAM,SAAS,GAAG,CAAC,GAAqB,EAAoB,EAAE,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjH,SAAS,qBAAqB;QAC7B,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,IAAI,OAAO,EAAE,CAAC,cAAc,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAC/F,IAAI,CAAC;YACJ,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3C,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,CAAC,CAAC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAED,IAAI,eAA0D,CAAC;IAC/D,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACrE,wDAAwD;IACxD,IAAI,wBAAwB,GAAG,KAAK,CAAC;IAErC,SAAS,qBAAqB;QAC7B,IAAI,eAAe,KAAK,SAAS;YAAE,OAAO;QAC1C,YAAY,CAAC,eAAe,CAAC,CAAC;QAC9B,eAAe,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,uEAAuE;IACvE,4EAA4E;IAC5E,6DAA6D;IAC7D,uEAAuE;IACvE,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,sEAAsE;IACtE,4EAA4E;IAC5E,kEAAkE;IAClE,SAAS,gBAAgB,CAAC,GAAqB;QAC9C,IAAI,CAAC;YACJ,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,2EAA2E;IAC3E,mEAAmE;IACnE,iBAAiB;IACjB,SAAS,kBAAkB,CAAC,GAAqB;QAChD,MAAM,GAAG,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YACjC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,iBAAiB,GAAG,CAAC,CAAC;gBACtB,OAAO;YACR,CAAC;YACD,IAAI,cAAc,KAAK,GAAG;gBAAE,OAAO;YACnC,qEAAqE;YACrE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,qBAAqB,EAAE,CAAC;gBACxB,OAAO;YACR,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,CAAC;YACjG,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,MAAM,aAAa,GAAsC;gBACxD,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,+BAA+B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;gBACpE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;gBACpB,cAAc;gBACd,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC;oBACxC,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,KAAK;oBACd,QAAQ;oBACR,KAAK;oBACL,aAAa;oBACb,cAAc;oBACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;oBACvC,IAAI,EAAE,GAAG,CAAC,IAAI;iBACd,CAAC;aACF,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC;gBAAE,OAAO;YAC5D,qBAAqB,EAAE,CAAC;YACxB,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,eAAe,GAAG,SAAS,CAAC;gBAC5B,IAAI,cAAc,KAAK,GAAG;oBAAE,OAAO;gBACnC,oEAAoE;gBACpE,uDAAuD;gBACvD,IAAI,gBAAgB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAClC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;oBAAE,OAAO;gBAC1B,iBAAiB,IAAI,CAAC,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE;oBACpC,aAAa;oBACb,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;oBAC1B,KAAK,EAAE,iBAAiB;iBACxB,CAAC,CAAC;gBACH,+BAA+B,CAAC,GAAG,CAAC,CAAC;gBACrC,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACnE,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,SAAS,YAAY,CAAC,GAAqB;QAC1C,MAAM,GAAG,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,4EAA4E;QAC5E,8DAA8D;QAC9D,KAAK,GAAG,CAAC,OAAO;aACd,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC1B,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,IAAI,cAAc,KAAK,GAAG;gBAAE,OAAO;YACnC,IAAI,CAAC,wBAAwB;gBAAE,OAAO;YACtC,IAAI,gBAAgB,CAAC,GAAG,CAAC;gBAAE,OAAO;YAClC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBAAE,OAAO;YAC1B,IAAI,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAAE,OAAO;YACpD,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBAAE,OAAO;YACjD,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO;YAChD,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,CAAC;YACjG,IACC,CAAC,KAAK;gBACN,CAAC,MAAM,CAAC,uBAAuB,CAC9B,KAAK,EACL,aAAa,EACb,GAAG,CAAC,qBAAqB,EAAE,EAC3B,KAAK,CAAC,SAAS,IAAI,SAAS,CAC5B,EACA,CAAC;gBACF,OAAO;YACR,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;YAC1G,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAO;YAC5B,qEAAqE;YACrE,0CAA0C;YAC1C,IAAI,cAAc,KAAK,GAAG;gBAAE,cAAc,GAAG,SAAS,CAAC;YACvD,qBAAqB,EAAE,CAAC;YACxB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7F,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,SAAS,mBAAmB,CAC3B,IAA4C,EAC5C,KAAgC;QAEhC,OAAO,CACN,KAAK,KAAK,SAAS;YACnB,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;YACtB,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAChC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;YACpB,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;YAC9B,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,CAC1C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,SAAS,4BAA4B,CACpC,KAAgC,EAChC,GAAqB;QAErB,MAAM,GAAG,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QAC5D,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,KAAK,KAAK,CAAC,WAAW,CAAC,gBAAgB;YAAE,OAAO,SAAS,CAAC;QACvG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1E,MAAM,MAAM,GAAG,wBAAwB,CACtC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EACzC,GAAG,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAChC,CAAC;QACF,IAAI,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;YACzG,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,cAAc,GAAG,SAAS,CAAC;QAC3B,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,SAAS,+BAA+B,CAAC,GAAqB;QAC7D,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;QACjD,qBAAqB,EAAE,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpF,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnC,cAAc,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,SAAS,0BAA0B,CAAC,GAAqB,EAAE,kBAA0B;QACpF,IAAI,cAAc;YAAE,OAAO;QAC3B,MAAM,UAAU,GAAG,EAAE,qBAAqB,CAAC;QAC3C,MAAM,QAAQ,GAAG,mCAAmC,CAAC,GAAG,EAAE;YACzD,UAAU;YACV,kBAAkB;YAClB,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,qBAAqB,EAAE;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5E,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAC1C,CAAC,KAAc,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAC7G,CAAC;QACF,cAAc,GAAG,mBAAmB,CAAC;YACpC,UAAU;YACV,QAAQ;YACR,UAAU;YACV,OAAO;YACP,aAAa,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,IAAI,CAAC;SACjD,CAAC,CAAC;QACH,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,SAAS,sBAAsB,CAAC,SAAiB,EAAE,GAAqB;QACvE,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE;YAC9B,UAAU,EAAE,eAAe,CAAC,sBAAsB,CAAC,EAAE,EAAE,GAAG,CAAC;YAC3D,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAAG,CAAC;SAChD,CAAC,CAAC;QACH,OAAO,eAAe,CAAC,IAAI,GAAG,oBAAoB,EAAE,CAAC;YACpD,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC5D,IAAI,eAAe,KAAK,SAAS;gBAAE,MAAM;YACzC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAED,SAAS,uBAAuB,CAAC,SAAiB;QACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,eAAe,CAAC,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3D,UAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,UAAU,uBAAuB,CACrC,GAAqB,EACrB,kBAA0B;QAE1B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;QACrC,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;YACjF,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC1C,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACzC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,cAAc,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC;YACJ,IAAI,oBAAwC,CAAC;YAC7C,IAAI,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,gBAAgB,GAAG,qBAAqB,GAAG,CAAC,CAAC;gBACnD,MAAM,cAAc,GAAG,mCAAmC,CAAC,GAAG,EAAE;oBAC/D,UAAU,EAAE,gBAAgB;oBAC5B,kBAAkB;oBAClB,MAAM,EAAE,UAAU;iBAClB,CAAC,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC/F,IAAI,cAAc,EAAE,CAAC;oBACpB,MAAM,YAAY,GAAG,cAAc,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;oBACpE,MAAM,gBAAgB,GAAG,MAAM,yBAAyB,CACvD,GAAG,EACH,mCAAmC,CAAC,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAC1F,CAAC,IAAI,EAAE,EAAE;wBACR,IAAI,IAAI,EAAE,MAAM,KAAK,iBAAiB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;4BAC3E,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC;wBACpC,CAAC;wBACD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;oBAC9C,CAAC,EACD,4BAA4B,CAC5B,CAAC;oBACF,IAAI,gBAAgB,EAAE,CAAC;wBACtB,IAAI,qBAAqB,KAAK,gBAAgB,GAAG,CAAC,EAAE,CAAC;4BACpD,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAW,CAAC;4BAC5D,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;4BAC5E,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;4BACnD,OAAO,MAAM,CAAC;wBACf,CAAC;wBACD,qBAAqB,GAAG,gBAAgB,CAAC;wBACzC,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;wBACnC,cAAc,GAAG,SAAS,CAAC;wBAC3B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC5C,GAAG,EACH,cAAc,EACd,GAAG,EAAE,CAAC,qBAAqB,EAC3B,gBAAgB,EAChB,cAAc,CACd,CAAC;wBACF,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;wBAClG,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;wBACnD,OAAO,MAAM,CAAC;oBACf,CAAC;gBACF,CAAC;YACF,CAAC;YAED,MAAM,UAAU,GAAG,cAAc,CAAC;YAClC,IAAI,UAAU,EAAE,CAAC;gBAChB,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC3E,IAAI,UAAwC,CAAC;gBAC7C,IAAI,gBAAmC,CAAC;gBACxC,IAAI,CAAC;oBACJ,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;oBACtC,gBAAgB,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC;oBAC5C,IAAI,UAAU;wBACb,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;gBACrG,CAAC;wBAAS,CAAC;oBACV,WAAW,EAAE,CAAC;gBACf,CAAC;gBACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACpC,cAAc,GAAG,SAAS,CAAC;oBAC3B,IAAI,+BAA+B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;wBACjF,GAAG,CAAC,aAAa,EAAE,CAAC;4BACnB,MAAM,EAAE,WAAW;4BACnB,MAAM,EAAE,cAAc;4BACtB,OAAO,EAAE,cAAc,EAAE,OAAO;4BAChC,YAAY,EAAE,sBAAsB,gBAAgB,CAAC,OAAO,EAAE;yBAC9D,CAAC,CAAC;wBACH,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;wBACzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;oBAC7C,CAAC;gBACF,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC5C,GAAG,EACH,UAAU,CAAC,QAAQ,EACnB,GAAG,EAAE,CAAC,qBAAqB,EAC3B,UAAU,EACV,cAAc,CACd,CAAC;gBACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,cAAc,GAAG,SAAS,CAAC;oBAC3B,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE;wBAC3C,UAAU,EAAE,UAAU,CAAC,UAAU;wBACjC,MAAM,EAAE,aAAa;qBACrB,CAAC,CAAC;oBACH,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;oBACnD,OAAO,MAAM,CAAC;gBACf,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;gBAClF,CAAC;qBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACzC,cAAc,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,cAAc,GAAG,SAAS,CAAC;YAC5B,CAAC;YAED,MAAM,UAAU,GAAG,EAAE,qBAAqB,CAAC;YAC3C,MAAM,QAAQ,GAAG,mCAAmC,CAAC,GAAG,EAAE;gBACzD,UAAU;gBACV,kBAAkB;gBAClB,MAAM,EAAE,YAAY;gBACpB,KAAK,EAAE,qBAAqB,EAAE;aAC9B,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAW,CAAC;gBAClE,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;gBAClE,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;gBACzE,OAAO,MAAM,CAAC;YACf,CAAC;YACD,IAAI,UAAwC,CAAC;YAC7C,IAAI,CAAC;gBACJ,UAAU,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAClF,GAAG,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,EAAE,WAAW;oBACnB,MAAM,EAAE,cAAc;oBACtB,KAAK;iBACL,CAAC,CACF,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,CAAC,KAAK,YAAY,sBAAsB,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAC5D,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAC5C,GAAG,EACH,QAAQ,EACR,GAAG,EAAE,CAAC,qBAAqB,EAC3B,UAAU,EACV,cAAc,CACd,CAAC;YACF,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;YACzE,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,cAAc,EAAE,OAAO,EAAE,CAAC;gBAC7B,sEAAsE;gBACtE,qEAAqE;gBACrE,qEAAqE;gBACrE,sEAAsE;gBACtE,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBAChE,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC/C,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,GAAG,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,cAAc,EAAE,OAAO;gBAChC,YAAY,EAAE,sBAAsB,OAAO,EAAE;aAC7C,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,+BAA+B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAClE,IAAI,SAAS,EAAE,CAAC;gBACf,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBACzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC7C,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED,EAAE,CAAC,EAAE,CAAC,wBAAwB,EAAE,KAAK,EAAE,KAAgC,EAAE,GAAG,EAAE,EAAE;QAC/E,yEAAyE;QACzE,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,cAAc,GAAG,4BAA4B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChE,kFAAkF;QAClF,kFAAkF;QAClF,iDAAiD;QACjD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,+BAA+B,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC;YACJ,IAAI,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,OAAO;oBACN,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,gBAAgB;oBAChC,MAAM,EAAE,gCAAgC;iBACxC,CAAC;YACH,CAAC;YACD,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAC1F,OAAO;oBACN,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,cAAc;oBAC9B,MAAM,EAAE,kDAAkD;iBAC1D,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBAC7F,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5G,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5G,OAAO;oBACN,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,iBAAiB;oBACjC,MAAM,EAAE,4CAA4C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS;iBAC1F,CAAC;YACH,CAAC;YAED,sBAAsB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAE7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,IAAI,gBAAuE,CAAC;YAC5E,IAAI,CAAC;gBACJ,gBAAgB,GAAG,MAAM,yBAAyB,CACjD,GAAG,EACH,KAAK,EACL,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,EACtD,4BAA4B,CAC5B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,qEAAqE;gBACrE,qEAAqE;gBACrE,4DAA4D;gBAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;oBAAE,MAAM,KAAK,CAAC;gBACvC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC5F,OAAO,SAAS,CAAC;YAClB,CAAC;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACtB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;YACzC,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC7E,IAAI,cAA4C,CAAC;gBACjD,IAAI,WAA8B,CAAC;gBACnC,IAAI,CAAC;oBACJ,cAAc,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;oBAC9C,WAAW,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC;gBAC5C,CAAC;wBAAS,CAAC;oBACV,WAAW,EAAE,CAAC;gBACf,CAAC;gBACD,IAAI,WAAW,KAAK,SAAS,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC1E,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;oBACtG,eAAe,GAAG,IAAI,CAAC;oBACvB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;gBACvC,CAAC;YACF,CAAC;YAED,MAAM,QAAQ,GAAG;gBAChB,UAAU,EAAE,EAAE,qBAAqB;gBACnC,gBAAgB,EAAE,GAAG,CAAC,kBAAkB,EAAE;gBAC1C,KAAK;gBACL,aAAa,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,aAAa,IAAI,KAAK,CAAC,aAAa,IAAI,sBAAsB;gBACpG,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC;gBACtC,MAAM,EAAE,YAAqB;gBAC7B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;gBAC5C,YAAY,EAAE,GAAG,CAAC,eAAe,EAAE;gBACnC,KAAK,EAAE,qBAAqB,EAAE;aAC9B,CAAC;YACF,IAAI,UAAwC,CAAC;YAC7C,IAAI,CAAC;gBACJ,UAAU,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAChF,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAC7E,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,MAAM,WAAW,GAAG,yCAAyC,CAAC,KAAK,CAAC,CAAC;gBACrE,IACC,kCAAkC,CAAC,KAAK,CAAC,MAAM,CAAC;oBAChD,WAAW,KAAK,SAAS;oBACzB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EACpB,CAAC;oBACF,MAAM,QAAQ,GAAG,gCAAgC,CAChD,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,aAAa,EACtB,WAAW,EACX,EAAE,UAAU,EAAE,0BAA0B,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAC/D,KAAK,CAAC,aAAa,CACnB,CAAC;oBACF,IAAI,QAAQ;wBAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;oBAC9C,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACxC,OAAO;wBACN,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,qEAAqE;qBAC7E,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;oBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChD,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;YAC7E,CAAC;YAED,OAAO;gBACN,UAAU;aACV,CAAC;QACH,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,eAAe;gBAAE,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACpC,2BAA2B,CAAC;QAC3B,KAAK;QACL,GAAG;QACH,KAAK;QACL,mBAAmB,EAAE,cAAc,EAAE,QAAQ;QAC7C,kBAAkB,EAAE,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAC3D,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,UAAU,EAAE,GAAG,EAAE,CAAC,+BAA+B,CAAC,GAAG,CAAC;QACtD,KAAK,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,GAAG,EAAE,iCAAiC,CAAC;KAC/E,CAAC,CACF,CAAC;IAEF,EAAE,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,KAA0B,EAAE,GAAG,EAAE,EAAE;QAClE,MAAM,YAAY,GAAG,KAAK,CAAC;QAC3B,+BAA+B,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,uBAAuB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YACrD,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,YAAY,CAAC,eAAe,CAAC,gBAAgB,CACrE,CAAC;YACF,MAAM,WAAW,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACrF,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACrC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrC,aAAa,GAAG,0BAA0B,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,CAAC,OAEjC,CAAC;YACb,MAAM,EAAE,GAAG,OAAO,EAAE,eAAe,CAAC;YACpC,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACrF,KAAK,GAAG;oBACP,GAAG,KAAK;oBACR,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,eAAe,CAAC,YAAY,EAAE;iBACnG,CAAC;gBACF,IACC,uBAAuB,CAAC;oBACvB,YAAY,EAAE,YAAY,CAAC,eAAe,CAAC,YAAY;oBACvD,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;iBAC7B,CAAC,EACD,CAAC;oBACF,KAAK,GAAG,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBACxC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,EAAE;wBAC3C,YAAY,EAAE,YAAY,CAAC,eAAe,CAAC,YAAY;wBACvD,WAAW,EAAE,EAAE,CAAC,WAAW;wBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;qBAC7B,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YACD,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;YACxC,UAAU,CAAC,qBAAqB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBACzC,WAAW,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;oBACnD,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,iBAAiB,EAAE,YAAY,CAAC,eAAe,CAAC,EAAE;oBAClD,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB;oBACzF,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI;oBAClC,aAAa,EAAE,MAAM,CAAC,6BAA6B,CAClD,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,EAC1E,QAAQ,CACR;oBACD,QAAQ;oBACR,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;4BAAE,OAAO,EAAE,CAAC;wBACxC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC,CAAC;iBACF,CAAC,CAAC;YACJ,CAAC;YACD,OAAO;QACR,CAAC;QACD,IAAI,YAAY,CAAC,cAAc,KAAK,gBAAgB;YAAE,OAAO;QAC7D,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAChD,wBAAwB,GAAG,KAAK,CAAC;QACjC,qBAAqB,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,eAAe,CAAC,0BAA0B,CACzD,yBAAyB,EACzB,gBAAgB,CAAC,GAAG,CAAC,EACrB,WAAW,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CACnD,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,CAAC;QACjG,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,uFAAuF;QACvF,qEAAqE;QACrE,MAAM,kBAAkB,GAAG,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC;QACtF,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,yBAAyB,CAAC;YAChF,aAAa;YACb,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;SACvC,CAAC,CAAC;QACH,IACC,CAAC,kBAAkB;YACnB,KAAK;YACL,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAC7E,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBAC1C,aAAa;gBACb,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;gBACzB,SAAS,EAAE,QAAQ,CAAC,aAAa;aACjC,CAAC,CAAC;YACH,MAAM,uBAAuB,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;QACvE,CAAC;aAAM,IACN,CAAC,kBAAkB;YACnB,sBAAsB;YACtB,MAAM,CAAC,uBAAuB,CAAC,sBAAsB,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,EAC5G,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE;gBACzC,aAAa;gBACb,MAAM,EAAE,sBAAsB,CAAC,MAAM,IAAI,CAAC;gBAC1C,SAAS,EAAE,QAAQ,CAAC,aAAa;aACjC,CAAC,CAAC;YACH,IACC,CAAC,oBAAoB,CAAC;gBACrB,MAAM,EAAE,sBAAsB,CAAC,MAAM,IAAI,CAAC;gBAC1C,eAAe;gBACf,UAAU;gBACV,aAAa;gBACb,aAAa;gBACb,kBAAkB,EAAE,cAAc,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,SAAS;gBAC7E,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;aAC3C,CAAC,EACD,CAAC;gBACF,MAAM,uBAAuB,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE;oBACtC,MAAM,EAAE,sBAAsB,CAAC,MAAM,IAAI,CAAC;oBAC1C,SAAS,EAAE,eAAe;iBAC1B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;aAAM,IACN,CAAC,kBAAkB;YACnB,CAAC,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC;YACzC,sBAAsB;YACtB,MAAM,CAAC,gCAAgC,CACtC,sBAAsB,EACtB,aAAa,EACb,QAAQ,EACR,KAAK,CAAC,SAAS,IAAI,SAAS,EAC5B,UAAU,CACV,EACA,CAAC;YACF,yEAAyE;YACzE,yEAAyE;YACzE,yDAAyD;YACzD,0BAA0B,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,QAAQ,GAAG,0BAA0B,CAAC;YAC3C,aAAa,EAAE,sBAAsB,EAAE,MAAM,IAAI,CAAC;YAClD,aAAa;YACb,eAAe;YACf,UAAU;YACV,eAAe,EAAE,qBAAqB;YACtC,KAAK,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC;QACnC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;YACvD,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,OAAO;YAC1B,eAAe,EAAE,QAAQ,CAAC,eAAe;SACzC,CAAC,CAAC;QACH,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;YACxD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACjD,eAAe,EAAE,QAAQ,CAAC,eAAe;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,IAAI,CAAC,oBAAoB;YAAE,OAAO,SAAS,CAAC;QACjE,OAAO;YACN,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,CAAC;QACjG,MAAM,kBAAkB,GAAG,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QACnE,MAAM,eAAe,GACpB,CAAC,kBAAkB;YACnB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACpC,KAAK,EAAE,MAAM,KAAK,IAAI;YACtB,KAAK,KAAK,SAAS;YACnB,KAAK,CAAC,MAAM,IAAI,aAAa,GAAG,MAAM,CAAC,yBAAyB,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;QAC/G,IAAI,eAAe;YAClB,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,OAAO;YACN,QAAQ,EAAE,sBAAsB,CAAC;gBAChC,KAAK;gBACL,GAAG;gBACH,aAAa;gBACb,mBAAmB,EAAE,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;gBAChF,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,KAAK,KAAK;gBAC7D,eAAe;gBACf,kBAAkB;gBAClB,mBAAmB;gBACnB,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC;aAC9E,CAAC;SACF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,cAAc,GACnB,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO;YACnC,CAAC,CAAC;gBACA,GAAG,KAAK;gBACR,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClD;YACF,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,OAAO,GAAG,mCAAmC,CAClD,cAAc,EACd,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EACnD,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CACjC,CAAC;QACF,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,wCAAwC,CAC9C,KAAK,CAAC,OAAO,EACb,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAChF,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,CAAC;YACJ,IAAI,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAAE,OAAO;YACpD,aAAa,CAAC,gBAAgB,CAAC,CAAC;YAChC,IAAI,gBAAgB,CAAC,0BAA0B;gBAAE,OAAO;YACxD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;gBACzD,KAAK,uBAAuB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,OAAO;QACpD,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,sBAAsB,CAAC;QACjG,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC7C,IACC,IAAI,CAAC,uBAAuB,CAAC;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;YAC/B,QAAQ;YACR,KAAK;YACL,aAAa;YACb,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACpD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;YACvC,IAAI,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,EACD,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACpF,iBAAiB,GAAG,CAAC,CAAC;YACtB,wBAAwB,GAAG,IAAI,CAAC;YAChC,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACnE,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxB,YAAY,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,kEAAkE;YAClE,yEAAyE;YACzE,0EAA0E;YAC1E,0EAA0E;YAC1E,2EAA2E;YAC3E,aAAa;YACb,IAAI,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO;YACrD,MAAM,UAAU,GAAG,qBAAqB,CACvC;gBACC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;gBACnC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;gBAC/B,QAAQ;gBACR,KAAK;gBACL,aAAa;gBACb,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACpD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;gBACvC,IAAI,EAAE,GAAG,CAAC,IAAI;aACd,EACD,cAAc,CACd,CAAC;YACF,IAAI,UAAU,KAAK,SAAS;gBAAE,+BAA+B,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC3B,iBAAiB,GAAG,CAAC,CAAC;gBACtB,wBAAwB,GAAG,IAAI,CAAC;gBAChC,0BAA0B,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACnE,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,KAAK,MAAM,KAAK,IAAI,6BAA6B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,EAAE,CAAC,WAAW,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,+BAA+B,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;YAClF,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE;gBAC/C,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAClC,OAAO,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACvE,CAAC;gBACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;aACtD,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;QAC5B,WAAW,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,yDAAyD;IACzD,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC9B,wBAAwB,GAAG,KAAK,CAAC;QACjC,qBAAqB,EAAE,CAAC;QACxB,iBAAiB,GAAG,CAAC,CAAC;QACtB,cAAc,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnC,cAAc,GAAG,SAAS,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { Tool } from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { createWarmAnchorSnapshot, isWarmSummaryAnchorValid } from \"../../../compaction/warm-anchor.ts\";\nimport type { ExtensionAPI, ExtensionContext, SessionBeforeCompactEvent, SessionCompactEvent } from \"../../types.ts\";\nimport * as checkpointState from \"./checkpoint-state.ts\";\nimport * as breaker from \"./circuit-breaker.ts\";\nimport { buildCompactionContext } from \"./context-pipeline.ts\";\nimport {\n\tcreateDegradationMonitorState,\n\thandleMessageEnd,\n\thandleTurnEnd,\n\tRECOVERY_INSTRUCTIONS,\n\tresetOnSessionCompact,\n} from \"./degradation-monitor.ts\";\nimport {\n\tclassifyRequiredCompactionFallbackFailure,\n\tcreateRequiredCompactionFallback,\n} from \"./deterministic-fallback.ts\";\nimport * as idle from \"./idle.ts\";\nimport * as idleRetry from \"./idle-retry.ts\";\nimport {\n\tCLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE,\n\tcollectCompactBoundaryEntries,\n\tcreateCompactionLanePolicy,\n\tSDK_NATIVE_LANE_REJECTION_REASON,\n} from \"./lane-policy.ts\";\nimport { type CompactionLogger, createCompactionLogger } from \"./log.ts\";\nimport { handleCompactionModelSelect } from \"./model-selection.ts\";\nimport {\n\ttype OpenAiRemoteCompactionDependencies,\n\trewriteOpenAiPayloadWithRemoteCompaction,\n\trunOpenAiRemoteCompaction,\n\tSENPI_COMPACTION_EVENT,\n} from \"./openai-remote.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport {\n\tresolveBeforeAgentStartMessage,\n\tresolveCompactionGeometry,\n\tresolveIdleWarmAction,\n\tresolveReminderSystemPrompt,\n\tshouldDeferGraceBand,\n} from \"./orchestration.ts\";\nimport * as cap from \"./per-turn-cap.ts\";\nimport * as policy from \"./policy.ts\";\nimport * as restoration from \"./restoration-tracker.ts\";\nimport {\n\tapplyGeneratedCompaction,\n\tcreateEmergencyPruneLatch,\n\tcreateSpeculativeCompactionSnapshot,\n\tgetPromptVariant,\n\trunExtensionCompaction,\n\ttype SpeculativeCompactionResult,\n\ttype SpeculativeCompactionSnapshot,\n\tSummaryGenerationError,\n} from \"./speculative.ts\";\nimport { type SpeculativeJob, trackSpeculativeJob } from \"./speculative-job.ts\";\nimport { type CompactionExtensionState, createInitialState, resetTurnCounter } from \"./state.ts\";\nimport { resolveInheritedTaskIntent } from \"./task-intent.ts\";\nimport * as todoBridge from \"./todo-bridge.ts\";\nimport {\n\tcomputeTokenBudgetReminder,\n\tcreateInitialReminderState,\n\ttype TokenBudgetReminderState,\n} from \"./token-budget-reminder.ts\";\nimport { isTransientSummarizationFailure } from \"./transient-failure.ts\";\n\nexport { getPromptContextWindow } from \"./extension-wiring.ts\";\n\nimport {\n\tcreateBlockingRemoteCompactionEvent,\n\tendCompactionFeedback,\n\testimatePendingPromptTokens,\n\tgetPromptContextWindow,\n\tisAbortedAssistantMessage,\n\tisMonitorableMessageEvent,\n\tisRequiredCompactionFallbackReason,\n\tlinkAbortSignal,\n\trecentCheckpoint,\n\twithAdditionalTokens,\n} from \"./extension-wiring.ts\";\nimport { isIneffectiveCompaction } from \"./yield.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 200_000;\nconst EMERGENCY_COMPACTION_INSTRUCTIONS =\n\t\"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.\";\nconst PROACTIVE_COMPACTION_INSTRUCTIONS = \"Proactively compact before the next agent turn.\";\nconst MAX_PENDING_METADATA = 8;\n\ninterface PendingCompactionMetadata {\n\tcheckpoint: checkpointState.AgentCheckpoint;\n\ttodoSnapshot: todoBridge.TodoSnapshotPayload;\n}\n\nexport default function compactionExtension(\n\tpi: ExtensionAPI,\n\tremoteCompactionDependencies: OpenAiRemoteCompactionDependencies = {},\n): void {\n\tlet state: CompactionExtensionState = createInitialState();\n\tconst lanePolicy = createCompactionLanePolicy();\n\tconst restorationDirectiveState = checkpointState.createRestorationDirectiveState();\n\tconst emergencyPruneLatch = createEmergencyPruneLatch();\n\tconst degradationState = createDegradationMonitorState();\n\tconst restorationState = state.restoration ?? restoration.createRestorationTrackerState();\n\tstate = { ...state, restoration: restorationState };\n\tlet speculativeGeneration = 0;\n\tlet reminderState: TokenBudgetReminderState = createInitialReminderState();\n\tlet speculativeJob: SpeculativeJob | undefined;\n\tconst pendingMetadata = new Map<string, PendingCompactionMetadata>();\n\tlet logger: CompactionLogger | undefined;\n\tconst getLogger = (ctx: ExtensionContext): CompactionLogger => (logger ??= createCompactionLogger(ctx.agentDir));\n\n\tfunction getSummarizationTools(): Tool[] {\n\t\tif (typeof pi.getAllTools !== \"function\" || typeof pi.getActiveTools !== \"function\") return [];\n\t\ttry {\n\t\t\tconst definitionsByName = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));\n\t\t\treturn pi.getActiveTools().flatMap((name) => {\n\t\t\t\tconst tool = definitionsByName.get(name);\n\t\t\t\treturn tool ? [{ name: tool.name, description: tool.description, parameters: tool.parameters }] : [];\n\t\t\t});\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tlet idleWarmupTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet idleWarmupAttempt = 0;\n\t// True from the `agent_end` idle trigger until the next turn starts (or the\n\t// session shuts down). The idle-apply watcher below is fenced on it so a\n\t// summary that lands after the user has already prompted is never applied\n\t// out from under the turn that is starting; the warm-consume path in\n\t// `before_agent_start` owns the job from that point on.\n\tlet sessionIdleSinceAgentEnd = false;\n\n\tfunction cancelIdleWarmupRetry(): void {\n\t\tif (idleWarmupTimer === undefined) return;\n\t\tclearTimeout(idleWarmupTimer);\n\t\tidleWarmupTimer = undefined;\n\t}\n\n\t// A session reload retires this extension generation while the warm-up\n\t// watcher below is still armed: `AgentSession.reload()` invalidates the old\n\t// runner, after which every `ExtensionContext` getter throws\n\t// \"stale extension generation after reload\". The watcher outlives that\n\t// invalidation in two places — the `job.failure` continuation and the armed\n\t// retry timer — and neither had a caller left to receive the throw: the\n\t// continuation is spawned with `void` (unhandled rejection) and the timer\n\t// callback throws straight into the timer queue, which terminates the\n\t// process. The context carries no liveness flag, so a retired generation is\n\t// only observable by reading a getter and catching the assertion.\n\tfunction isContextRetired(ctx: ExtensionContext): boolean {\n\t\ttry {\n\t\t\tctx.isIdle();\n\t\t\treturn false;\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Fenced on the observed job: a prompt, invalidation, a reload, or a newer\n\t// warm-up stands this watcher down before it can start a duplicate\n\t// summarization.\n\tfunction armIdleWarmupRetry(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\tvoid job.failure.then((failure) => {\n\t\t\tif (failure === undefined) {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (speculativeJob !== job) return;\n\t\t\t// A reload between arming and this continuation retires the context.\n\t\t\tif (isContextRetired(ctx)) {\n\t\t\t\tcancelIdleWarmupRetry();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tconst breakerTripped = breaker.isTripped(state, Date.now());\n\t\t\tconst retryDecision: idleRetry.IdleWarmupRetryDecision = {\n\t\t\t\tattempt: idleWarmupAttempt,\n\t\t\t\ttransient: isTransientSummarizationFailure(failure, failure.message),\n\t\t\t\tisIdle: ctx.isIdle(),\n\t\t\t\tbreakerTripped,\n\t\t\t\tstillWarmEligible: idle.shouldWarmAtIdle({\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\taborted: false,\n\t\t\t\t\tsettings,\n\t\t\t\t\tusage,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\tbreakerTripped,\n\t\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t}),\n\t\t\t};\n\t\t\tif (!idleRetry.shouldRetryIdleWarmup(retryDecision)) return;\n\t\t\tcancelIdleWarmupRetry();\n\t\t\tidleWarmupTimer = setTimeout(() => {\n\t\t\t\tidleWarmupTimer = undefined;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\t// The reload may land after the timer was armed; a throw here would\n\t\t\t\t// escape into the timer queue as an uncaughtException.\n\t\t\t\tif (isContextRetired(ctx)) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tidleWarmupAttempt += 1;\n\t\t\t\tgetLogger(ctx).debug(\"idle_trigger\", {\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\ttokens: usage?.tokens ?? 0,\n\t\t\t\t\tcount: idleWarmupAttempt,\n\t\t\t\t});\n\t\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t\tarmIdleApply(ctx);\n\t\t\t}, idleRetry.IDLE_WARMUP_RETRY_DELAY_MS);\n\t\t});\n\t}\n\n\t/**\n\t * Apply the idle warm summary as soon as it finishes generating, while the\n\t * session is still idle. Holding it warm until the next `before_agent_start`\n\t * makes the user watch their own prompt wait behind a compaction they could\n\t * not see coming; applying during the idle gap renders the [compaction] block\n\t * first and lets the next message stack below it.\n\t *\n\t * Every guard is re-read at continuation time, because generation takes long\n\t * enough for all of them to change: the session may no longer be idle, the\n\t * job may have been invalidated or claimed, the context may have dropped\n\t * below the threshold, the lane may have been handed to the SDK, or the\n\t * breaker may have tripped. A refused apply (stale anchor/revision) silently\n\t * keeps the warm hold, so the next prompt consumes it exactly as before.\n\t */\n\tfunction armIdleApply(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\t// Never throws out of the continuation: a retired context, a refused apply,\n\t\t// or a provider failure all resolve into a silent stand-down.\n\t\tvoid job.promise\n\t\t\t.then(async (compaction) => {\n\t\t\t\tif (!compaction) return;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\tif (!sessionIdleSinceAgentEnd) return;\n\t\t\t\tif (isContextRetired(ctx)) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\t\tif (breaker.isTripped(state, Date.now())) return;\n\t\t\t\tif (cap.shouldRejectByCap(state).cancel) return;\n\t\t\t\tconst usage = ctx.getContextUsage();\n\t\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\t\tif (\n\t\t\t\t\t!usage ||\n\t\t\t\t\t!policy.shouldTriggerCompaction(\n\t\t\t\t\t\tusage,\n\t\t\t\t\t\tcontextWindow,\n\t\t\t\t\t\tctx.getCompactionSettings(),\n\t\t\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(ctx, job.snapshot, () => speculativeGeneration, compaction);\n\t\t\t\tif (!result.applied) return;\n\t\t\t\t// The job is consumed: clearing it here is also what stands the idle\n\t\t\t\t// retry watcher down for this generation.\n\t\t\t\tif (speculativeJob === job) speculativeJob = undefined;\n\t\t\t\tcancelIdleWarmupRetry();\n\t\t\t\tgetLogger(ctx).debug(\"idle_applied\", { generation: job.generation, origin: \"speculative\" });\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n\n\tfunction isSameModelIdentity(\n\t\tleft: SpeculativeCompactionSnapshot[\"model\"],\n\t\tright: ExtensionContext[\"model\"],\n\t): boolean {\n\t\treturn (\n\t\t\tright !== undefined &&\n\t\t\tleft.api === right.api &&\n\t\t\tleft.provider === right.provider &&\n\t\t\tleft.id === right.id &&\n\t\t\tleft.baseUrl === right.baseUrl &&\n\t\t\tleft.contextWindow === right.contextWindow\n\t\t);\n\t}\n\n\t/**\n\t * Detach the warm job for the core route before any `await`, so exactly one\n\t * claimant can own it. The controller is deliberately NOT aborted: the whole\n\t * point is to keep the already-paid summarization alive and hand its result to\n\t * core, and clearing the reference is what stands the idle-retry watcher down.\n\t */\n\tfunction claimWarmSummaryForCoreRoute(\n\t\tevent: SessionBeforeCompactEvent,\n\t\tctx: ExtensionContext,\n\t): typeof speculativeJob {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return undefined;\n\t\tif (event.customInstructions !== undefined) return undefined;\n\t\tif (job.snapshot.origin !== \"speculative\") return undefined;\n\t\tif (job.snapshot.preparation.firstKeptEntryId !== event.preparation.firstKeptEntryId) return undefined;\n\t\tif (!isSameModelIdentity(job.snapshot.model, ctx.model)) return undefined;\n\t\tconst anchor = createWarmAnchorSnapshot(\n\t\t\tjob.snapshot.preparation.firstKeptEntryId,\n\t\t\tjob.snapshot.branchEntries ?? [],\n\t\t);\n\t\tif (!anchor || !isWarmSummaryAnchorValid(anchor, event.branchEntries ?? ctx.sessionManager.getBranch())) {\n\t\t\treturn undefined;\n\t\t}\n\t\tspeculativeJob = undefined;\n\t\treturn job;\n\t}\n\n\tfunction invalidateSpeculativeCompaction(ctx: ExtensionContext): void {\n\t\tconst previousGeneration = speculativeGeneration;\n\t\tspeculativeGeneration++;\n\t\tgetLogger(ctx).debug(\"speculative_invalidated\", { generation: previousGeneration });\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t}\n\n\tfunction startSpeculativeCompaction(ctx: ExtensionContext, customInstructions: string): void {\n\t\tif (speculativeJob) return;\n\t\tconst generation = ++speculativeGeneration;\n\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\tgeneration,\n\t\t\tcustomInstructions,\n\t\t\torigin: \"speculative\",\n\t\t\ttools: getSummarizationTools(),\n\t\t});\n\t\tif (!snapshot) return;\n\t\tgetLogger(ctx).debug(\"speculative_started\", { generation, origin: \"speculative\" });\n\t\tconst controller = new AbortController();\n\t\tconst settled = runExtensionCompaction(ctx, snapshot, controller.signal).then(\n\t\t\t(result) => ({ result, error: undefined }),\n\t\t\t(error: unknown) => ({ result: undefined, error: error instanceof Error ? error : new Error(String(error)) }),\n\t\t);\n\t\tspeculativeJob = trackSpeculativeJob({\n\t\t\tgeneration,\n\t\t\tsnapshot,\n\t\t\tcontroller,\n\t\t\tsettled,\n\t\t\tarmedAtTokens: ctx.getContextUsage()?.tokens ?? 0,\n\t\t});\n\t\tvoid settled.then(() => remoteCompactionDependencies.onSpeculativeJobSettled?.());\n\t}\n\n\tfunction capturePendingMetadata(requestId: string, ctx: ExtensionContext): void {\n\t\tpendingMetadata.set(requestId, {\n\t\t\tcheckpoint: checkpointState.captureAgentCheckpoint(pi, ctx),\n\t\t\ttodoSnapshot: todoBridge.createTodoSnapshot(ctx),\n\t\t});\n\t\twhile (pendingMetadata.size > MAX_PENDING_METADATA) {\n\t\t\tconst oldestRequestId = pendingMetadata.keys().next().value;\n\t\t\tif (oldestRequestId === undefined) break;\n\t\t\tpendingMetadata.delete(oldestRequestId);\n\t\t}\n\t}\n\n\tfunction persistAcceptedMetadata(requestId: string): void {\n\t\tconst metadata = pendingMetadata.get(requestId);\n\t\tif (!metadata) return;\n\t\tpendingMetadata.delete(requestId);\n\t\tcheckpointState.persistCheckpoint(pi, metadata.checkpoint);\n\t\ttodoBridge.persistTodoSnapshot(pi, metadata.todoSnapshot);\n\t}\n\n\tasync function applyBlockingCompaction(\n\t\tctx: ExtensionContext,\n\t\tcustomInstructions: string,\n\t): Promise<SpeculativeCompactionResult> {\n\t\tconst provider = ctx.model?.provider;\n\t\tif ((provider === \"cursor\" || provider === \"cursor-cli-oauth\") && !ctx.isIdle()) {\n\t\t\tgetLogger(ctx).debug(\"skip_cursor_mid_turn\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (breaker.isTripped(state, Date.now())) {\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tlet feedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\ttry {\n\t\t\tlet remoteFallbackReason: string | undefined;\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) {\n\t\t\t\tconst remoteGeneration = speculativeGeneration + 1;\n\t\t\t\tconst remoteSnapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\t\tgeneration: remoteGeneration,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\torigin: \"blocking\",\n\t\t\t\t});\n\t\t\t\tgetLogger(ctx).debug(\"blocking_started\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\tif (remoteSnapshot) {\n\t\t\t\t\tconst remoteSignal = feedbackSignal ?? new AbortController().signal;\n\t\t\t\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tcreateBlockingRemoteCompactionEvent(ctx, remoteSnapshot, customInstructions, remoteSignal),\n\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\tif (data?.action === \"remote_fallback\" && typeof data.reason === \"string\") {\n\t\t\t\t\t\t\t\tremoteFallbackReason = data.reason;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpi.events.emit(SENPI_COMPACTION_EVENT, data);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t\t);\n\t\t\t\t\tif (remoteCompaction) {\n\t\t\t\t\t\tif (speculativeGeneration !== remoteGeneration - 1) {\n\t\t\t\t\t\t\tconst result = { applied: false, reason: \"stale\" } as const;\n\t\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: remoteGeneration });\n\t\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspeculativeGeneration = remoteGeneration;\n\t\t\t\t\t\tspeculativeJob?.controller.abort();\n\t\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tremoteSnapshot,\n\t\t\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\t\t\tremoteCompaction,\n\t\t\t\t\t\t\tfeedbackSignal,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pendingJob = speculativeJob;\n\t\t\tif (pendingJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(feedbackSignal, pendingJob.controller);\n\t\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\t\tlet inheritedFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcompaction = await pendingJob.promise;\n\t\t\t\t\tinheritedFailure = await pendingJob.failure;\n\t\t\t\t\tif (compaction)\n\t\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: pendingJob.generation, route: \"speculative\" });\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (inheritedFailure !== undefined) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tif (isTransientSummarizationFailure(inheritedFailure, inheritedFailure.message)) {\n\t\t\t\t\t\tctx.endCompaction?.({\n\t\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\t\t\t\terrorMessage: `Compaction failed: ${inheritedFailure.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tpendingJob.snapshot,\n\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\tcompaction,\n\t\t\t\t\tfeedbackSignal,\n\t\t\t\t);\n\t\t\t\tif (result.applied) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", {\n\t\t\t\t\t\tgeneration: pendingJob.generation,\n\t\t\t\t\t\torigin: \"speculative\",\n\t\t\t\t\t});\n\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (result.reason === \"stale\") {\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: pendingJob.generation });\n\t\t\t\t} else if (result.reason === \"rejected\") {\n\t\t\t\t\tfeedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\t\t\t}\n\t\t\t\tspeculativeJob = undefined;\n\t\t\t}\n\n\t\t\tconst generation = ++speculativeGeneration;\n\t\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\tgeneration,\n\t\t\t\tcustomInstructions,\n\t\t\t\torigin: \"core-route\",\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t});\n\t\t\tif (!snapshot) {\n\t\t\t\tconst result = { applied: false, reason: \"unavailable\" } as const;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: \"unavailable\" });\n\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, remoteFallbackReason);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, feedbackSignal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({\n\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof SummaryGenerationError)) throw error;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: error.kind });\n\t\t\t}\n\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\tctx,\n\t\t\t\tsnapshot,\n\t\t\t\t() => speculativeGeneration,\n\t\t\t\tcompaction,\n\t\t\t\tfeedbackSignal,\n\t\t\t);\n\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, remoteFallbackReason);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (feedbackSignal?.aborted) {\n\t\t\t\t// An aborted blocking compaction is a cancellation, not a failure: no\n\t\t\t\t// red \"Compaction failed\" line, no breaker debit, no rethrow through\n\t\t\t\t// the before_agent_start handler (issue #886). The faux-route flavor\n\t\t\t\t// of this contract is pinned by blocking-compaction-review-hardening.\n\t\t\t\tgetLogger(ctx).debug(\"blocking_aborted\", { route: \"blocking\" });\n\t\t\t\tctx.endCompaction?.({ reason: \"extension\", signal: feedbackSignal, aborted: true });\n\t\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tctx.endCompaction?.({\n\t\t\t\treason: \"extension\",\n\t\t\t\tsignal: feedbackSignal,\n\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\terrorMessage: `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tconst transient = isTransientSummarizationFailure(error, message);\n\t\t\tif (transient) {\n\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpi.on(\"session_before_compact\", async (event: SessionBeforeCompactEvent, ctx) => {\n\t\t// A pre-aborted request (superseded admission or user cancel) must stand\n\t\t// down before touching warm-job ownership: core's own post-emit abort\n\t\t// checks turn it into a clean cancellation (issue #886).\n\t\tif (event.signal.aborted) return undefined;\n\t\tconst claimedWarmJob = claimWarmSummaryForCoreRoute(event, ctx);\n\t\t// The claim detaches the job without aborting it, so ownership must survive every\n\t\t// exit from this handler - including a throw - or the request it already paid for\n\t\t// keeps streaming for a result nobody will read.\n\t\tlet warmJobConsumed = false;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\ttry {\n\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"external-owner\",\n\t\t\t\t\treason: SDK_NATIVE_LANE_REJECTION_REASON,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\t\tgetLogger(ctx).debug(\"skip_cap\", { reason: event.reason, count: state.acceptedAbsolute });\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"per-turn-cap\",\n\t\t\t\t\treason: \"absolute compaction cap reached for this session\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (breaker.isTripped(state, now) && !breaker.shouldBypass(state, { reason: event.reason })) {\n\t\t\t\tconst remainingMs = state.trippedAt !== null ? Math.max(0, state.trippedAt + breaker.COOLDOWN_MS - now) : 0;\n\t\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { reason: event.reason, remainingSec: Math.ceil(remainingMs / 1000) });\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"circuit-breaker\",\n\t\t\t\t\treason: `compaction circuit breaker cooling down (${Math.ceil(remainingMs / 1000)}s left)`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcapturePendingMetadata(event.requestId, ctx);\n\n\t\t\tconst model = ctx.model;\n\t\t\tif (!model) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet remoteCompaction: Awaited<ReturnType<typeof runOpenAiRemoteCompaction>>;\n\t\t\ttry {\n\t\t\t\tremoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tevent,\n\t\t\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\t// The remote route deliberately rethrows once its signal aborts; the\n\t\t\t\t// handler converts that into a silent stand-down so the abort is not\n\t\t\t\t// reported as an extension error with a stack (issue #886).\n\t\t\t\tif (!event.signal.aborted) throw error;\n\t\t\t\tgetLogger(ctx).debug(\"remote_aborted\", { route: \"core-route\", requestId: event.requestId });\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (remoteCompaction) {\n\t\t\t\tgetLogger(ctx).debug(\"core_route_generated\", { route: \"core-route\", requestId: event.requestId });\n\t\t\t\treturn { compaction: remoteCompaction };\n\t\t\t}\n\n\t\t\tif (claimedWarmJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(event.signal, claimedWarmJob.controller);\n\t\t\t\tlet warmCompaction: CompactionResult | undefined;\n\t\t\t\tlet warmFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twarmCompaction = await claimedWarmJob.promise;\n\t\t\t\t\twarmFailure = await claimedWarmJob.failure;\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (warmFailure === undefined && warmCompaction && !event.signal.aborted) {\n\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: claimedWarmJob.generation, route: \"core-route\" });\n\t\t\t\t\twarmJobConsumed = true;\n\t\t\t\t\treturn { compaction: warmCompaction };\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snapshot = {\n\t\t\t\tgeneration: ++speculativeGeneration,\n\t\t\t\texpectedRevision: ctx.getMessageRevision(),\n\t\t\t\tmodel,\n\t\t\t\tcontextWindow: ctx.getContextUsage()?.contextWindow ?? model.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\tpreparation: event.preparation,\n\t\t\t\tbranchEntries: event.branchEntries,\n\t\t\t\tpromptVariant: getPromptVariant(event),\n\t\t\t\torigin: \"core-route\" as const,\n\t\t\t\tcustomInstructions: event.customInstructions,\n\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t};\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, event.signal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({ reason: event.reason, signal: event.signal, delta }),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(error);\n\t\t\t\tif (\n\t\t\t\t\tisRequiredCompactionFallbackReason(event.reason) &&\n\t\t\t\t\tfailureKind !== undefined &&\n\t\t\t\t\t!event.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\tconst fallback = createRequiredCompactionFallback(\n\t\t\t\t\t\tsnapshot.preparation,\n\t\t\t\t\t\tsnapshot.contextWindow,\n\t\t\t\t\t\tfailureKind,\n\t\t\t\t\t\t{ taskIntent: resolveInheritedTaskIntent(event.branchEntries) },\n\t\t\t\t\t\tevent.branchEntries,\n\t\t\t\t\t);\n\t\t\t\t\tif (fallback) return { compaction: fallback };\n\t\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcancel: true,\n\t\t\t\t\t\treason: \"deterministic compaction fallback cannot retain the prepared suffix\",\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\tif (error instanceof SummaryGenerationError) {\n\t\t\t\t\treturn { cancel: true, reason: error.message };\n\t\t\t\t}\n\t\t\t\treturn { cancel: true, reason: `compaction generator failed: ${message}` };\n\t\t\t}\n\t\t\tif (!compaction) {\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\tif (event.signal.aborted) {\n\t\t\t\t\treturn { cancel: true };\n\t\t\t\t}\n\t\t\t\treturn { cancel: true, reason: \"compaction generator returned no summary\" };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcompaction,\n\t\t\t};\n\t\t} finally {\n\t\t\tif (!warmJobConsumed) claimedWarmJob?.controller.abort();\n\t\t}\n\t});\n\n\tpi.on(\"model_select\", (event, ctx) =>\n\t\thandleCompactionModelSelect({\n\t\t\tevent,\n\t\t\tctx,\n\t\t\tstate,\n\t\t\tspeculativeSnapshot: speculativeJob?.snapshot,\n\t\t\tlaneOwnsCompaction: lanePolicy.disablesSenpiCompaction(ctx),\n\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\tinvalidate: () => invalidateSpeculativeCompaction(ctx),\n\t\t\tstart: () => startSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS),\n\t\t}),\n\t);\n\n\tpi.on(\"session_compact\", async (event: SessionCompactEvent, ctx) => {\n\t\tconst compactEvent = event;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (compactEvent.accepted) {\n\t\t\tpersistAcceptedMetadata(compactEvent.requestId);\n\t\t\tconst branchEntries = ctx.sessionManager.getBranch();\n\t\t\tconst firstKeptIndex = branchEntries.findIndex(\n\t\t\t\t(entry) => entry.id === compactEvent.compactionEntry.firstKeptEntryId,\n\t\t\t);\n\t\t\tconst keptEntries = firstKeptIndex === -1 ? [] : branchEntries.slice(firstKeptIndex);\n\t\t\tstate = cap.incrementAccepted(state);\n\t\t\tstate = breaker.recordSuccess(state);\n\t\t\treminderState = createInitialReminderState();\n\t\t\tconst details = compactEvent.compactionEntry.details as\n\t\t\t\t| { structuralYield?: { savedTokens: number; savingsRatio: number } }\n\t\t\t\t| undefined;\n\t\t\tconst sy = details?.structuralYield;\n\t\t\tif (sy && typeof sy.savedTokens === \"number\" && typeof sy.savingsRatio === \"number\") {\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tlastYield: { savedTokens: sy.savedTokens, tokensBefore: compactEvent.compactionEntry.tokensBefore },\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\tisIneffectiveCompaction({\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstate = cap.incrementIneffective(state);\n\t\t\t\t\tgetLogger(ctx).debug(\"ineffective_counted\", {\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tresetOnSessionCompact(degradationState);\n\t\t\ttodoBridge.restoreTodosIfMissing(pi, ctx);\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tif (settings.restorationEnabled ?? true) {\n\t\t\t\trestoration.preparePendingPayload(restorationState, {\n\t\t\t\t\taccepted: true,\n\t\t\t\t\treason: compactEvent.reason,\n\t\t\t\t\tcompactionEntryId: compactEvent.compactionEntry.id,\n\t\t\t\t\tcontextWindow: usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\t\t\treserveTokens: policy.resolveEffectiveReserveTokens(\n\t\t\t\t\t\tusage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\t\tsettings,\n\t\t\t\t\t),\n\t\t\t\t\tsettings,\n\t\t\t\t\tkeptMessages: keptEntries.flatMap((entry) => {\n\t\t\t\t\t\tif (entry.type !== \"message\") return [];\n\t\t\t\t\t\treturn [entry.message];\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (compactEvent.rejectionCause === \"external-owner\") return;\n\t\tif (!lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: compactEvent.reason });\n\t\t}\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tsessionIdleSinceAgentEnd = false;\n\t\tcancelIdleWarmupRetry();\n\t\tconst message = checkpointState.attachRestorationDirective(\n\t\t\trestorationDirectiveState,\n\t\t\trecentCheckpoint(ctx),\n\t\t\trestoration.consumePendingPayload(restorationState),\n\t\t);\n\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst pendingPromptTokens = estimatePendingPromptTokens(event);\n\t\tconst usageWithPendingPrompt = usage ? withAdditionalTokens(usage, pendingPromptTokens) : undefined;\n\t\t// The SDK owns this lane's context entirely, so even the hard-limit valve stands down;\n\t\t// the circuit breaker never blocks that valve for senpi-owned lanes.\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerCoolingDown = breaker.isTripped(state, Date.now()) || laneOwnsCompaction;\n\t\tconst { reserveTokens, thresholdTokens, leadTokens } = resolveCompactionGeometry({\n\t\t\tcontextWindow,\n\t\t\tsettings,\n\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t});\n\t\tif (\n\t\t\t!laneOwnsCompaction &&\n\t\t\tusage &&\n\t\t\tpolicy.isAtHardLimit(usage, contextWindow, reserveTokens, pendingPromptTokens)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"hard_limit_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usage.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, EMERGENCY_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldTriggerCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"threshold_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tif (\n\t\t\t\t!shouldDeferGraceBand({\n\t\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\t\tthresholdTokens,\n\t\t\t\t\tleadTokens,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\treserveTokens,\n\t\t\t\t\tcompactionInFlight: speculativeJob !== undefined && !speculativeJob.completed,\n\t\t\t\t\tgraceBandEnabled: settings.graceBandEnabled,\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tawait applyBlockingCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t\t} else {\n\t\t\t\tgetLogger(ctx).debug(\"grace_deferred\", {\n\t\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\t\tthreshold: thresholdTokens,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\t!isOpenAiRemoteCompactionModel(ctx.model) &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldStartSpeculativeCompaction(\n\t\t\t\tusageWithPendingPrompt,\n\t\t\t\tcontextWindow,\n\t\t\t\tsettings,\n\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\tleadTokens,\n\t\t\t)\n\t\t) {\n\t\t\t// The speculative start below logs \"speculative_started\" itself; logging\n\t\t\t// \"emergency_prune\" here mislabeled proactive speculation as pruning and\n\t\t\t// corrupted the counter the incident analysis relies on.\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\n\t\tconst reminder = computeTokenBudgetReminder({\n\t\t\tcontextTokens: usageWithPendingPrompt?.tokens ?? 0,\n\t\t\tcontextWindow,\n\t\t\tthresholdTokens,\n\t\t\tleadTokens,\n\t\t\tcompactionEpoch: speculativeGeneration,\n\t\t\tstate: reminderState,\n\t\t});\n\t\treminderState = reminder.nextState;\n\t\tconst deliveredMessage = resolveBeforeAgentStartMessage({\n\t\t\tmessage,\n\t\t\treminder: reminder.message,\n\t\t\treminderEnabled: settings.reminderEnabled,\n\t\t});\n\t\tconst reminderSystemPrompt = resolveReminderSystemPrompt({\n\t\t\tsystemPrompt: event.systemPrompt,\n\t\t\treminder: !message ? reminder.message : undefined,\n\t\t\treminderEnabled: settings.reminderEnabled,\n\t\t});\n\t\tif (!deliveredMessage && !reminderSystemPrompt) return undefined;\n\t\treturn {\n\t\t\t...(deliveredMessage ? { message: deliveredMessage } : {}),\n\t\t\t...(reminderSystemPrompt ? { systemPrompt: reminderSystemPrompt } : {}),\n\t\t};\n\t});\n\n\tpi.on(\"context\", (event, ctx) => {\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerFallback =\n\t\t\t!laneOwnsCompaction &&\n\t\t\tbreaker.isTripped(state, Date.now()) &&\n\t\t\tusage?.tokens !== null &&\n\t\t\tusage !== undefined &&\n\t\t\tusage.tokens >= contextWindow * policy.computeEffectiveThreshold(contextWindow, state.lastYield ?? undefined);\n\t\tif (breakerFallback)\n\t\t\tgetLogger(ctx).debug(\"breaker_deterministic_fallback\", { route: \"context-event\", tokens: usage.tokens ?? 0 });\n\t\treturn {\n\t\t\tmessages: buildCompactionContext({\n\t\t\t\tevent,\n\t\t\t\tctx,\n\t\t\t\tcontextWindow,\n\t\t\t\tpromptContextWindow: getPromptContextWindow(contextWindow, ctx.model?.maxTokens),\n\t\t\t\ttoolAdmissionEnabled: settings.toolAdmissionEnabled !== false,\n\t\t\t\tbreakerFallback,\n\t\t\t\tlaneOwnsCompaction,\n\t\t\t\temergencyPruneLatch,\n\t\t\t\tlogEmergencyPrune: (fields) => getLogger(ctx).debug(\"emergency_prune\", fields),\n\t\t\t}),\n\t\t};\n\t});\n\n\tpi.on(\"before_provider_request\", async (event, ctx) => {\n\t\tconst model = event.model ?? ctx.model;\n\t\tif (!isOpenAiRemoteCompactionModel(model)) return undefined;\n\t\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (!auth.ok) return undefined;\n\t\tconst effectiveModel =\n\t\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t\t? {\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t\t}\n\t\t\t\t: model;\n\t\tconst headers = createOpenAiRemoteCompactionHeaders(\n\t\t\teffectiveModel,\n\t\t\t{ ...auth, headers: event.headers ?? auth.headers },\n\t\t\tctx.sessionManager.getSessionId(),\n\t\t);\n\t\tif (!headers) return undefined;\n\t\tconst origin = openAiRemoteCompactionOrigin(effectiveModel, headers);\n\t\treturn rewriteOpenAiPayloadWithRemoteCompaction(\n\t\t\tevent.payload,\n\t\t\t{ model: effectiveModel, branchEntries: ctx.sessionManager.getBranch(), origin },\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t);\n\t});\n\n\tpi.on(\"turn_end\", async (_event, ctx) => {\n\t\ttry {\n\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\thandleTurnEnd(degradationState);\n\t\t\tif (degradationState.recoveryTriggeredThisCycle) return;\n\t\t\tif (state.lastYield && state.lastYield.savedTokens <= 0) {\n\t\t\t\tvoid applyBlockingCompaction(ctx, RECOVERY_INSTRUCTIONS).catch(() => {});\n\t\t\t}\n\t\t} finally {\n\t\t\tstate = resetTurnCounter(state, \"\");\n\t\t}\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tstate = resetTurnCounter(state, \"\");\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (\n\t\t\tidle.shouldRunIdleCompaction({\n\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\taborted: event.aborted === true,\n\t\t\t\tsettings,\n\t\t\t\tusage,\n\t\t\t\tcontextWindow,\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\tmode: ctx.mode,\n\t\t\t})\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"idle_trigger\", { contextWindow, tokens: usage?.tokens ?? 0 });\n\t\t\tidleWarmupAttempt = 0;\n\t\t\tsessionIdleSinceAgentEnd = true;\n\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\tarmIdleApply(ctx);\n\t\t} else {\n\t\t\t// A sub-threshold OpenAI warm-up cannot be consumed by the remote\n\t\t\t// compaction route. Once threshold admission succeeds remotely, it would\n\t\t\t// only abort and discard this paid local summary. Above threshold we keep\n\t\t\t// the existing local idle apply, which can finish before the next prompt;\n\t\t\t// if remote compaction later falls back, blocking local generation remains\n\t\t\t// unchanged.\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) return;\n\t\t\tconst warmAction = resolveIdleWarmAction(\n\t\t\t\t{\n\t\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\t\taborted: event.aborted === true,\n\t\t\t\t\tsettings,\n\t\t\t\t\tusage,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t},\n\t\t\t\tspeculativeJob,\n\t\t\t);\n\t\t\tif (warmAction === \"replace\") invalidateSpeculativeCompaction(ctx);\n\t\t\tif (warmAction !== \"none\") {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\tsessionIdleSinceAgentEnd = true;\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t\tarmIdleApply(ctx);\n\t\t\t}\n\t\t}\n\t});\n\n\tpi.on(\"message_end\", async (event, ctx) => {\n\t\tfor (const entry of collectCompactBoundaryEntries(event.message)) {\n\t\t\tpi.appendEntry(CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE, entry);\n\t\t}\n\t\tif (isAbortedAssistantMessage(event)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tif (isMonitorableMessageEvent(event) && !lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tawait handleMessageEnd(degradationState, event, {\n\t\t\t\tapplyCompaction: async (options) => {\n\t\t\t\t\treturn await applyBlockingCompaction(ctx, options.customInstructions);\n\t\t\t\t},\n\t\t\t\tnotify: (message) => ctx.ui.notify(message, \"warning\"),\n\t\t\t});\n\t\t}\n\t});\n\n\tpi.on(\"tool_call\", (event) => {\n\t\trestoration.trackToolCall(restorationState, event);\n\t});\n\n\t// The reload path retires this extension generation right after this event\n\t// (`AgentSession.reload()` invalidates the old runner), so stand the idle\n\t// warm-up watcher down here rather than leaving a timer armed against a\n\t// context that is about to start throwing on every read.\n\tpi.on(\"session_shutdown\", () => {\n\t\tsessionIdleSinceAgentEnd = false;\n\t\tcancelIdleWarmupRetry();\n\t\tidleWarmupAttempt = 0;\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Tool } from \"@earendil-works/pi-ai\";\nimport type { CompactionResult } from \"../../../compaction/index.ts\";\nimport { createWarmAnchorSnapshot, isWarmSummaryAnchorValid } from \"../../../compaction/warm-anchor.ts\";\nimport type { ExtensionAPI, ExtensionContext, SessionBeforeCompactEvent, SessionCompactEvent } from \"../../types.ts\";\nimport * as checkpointState from \"./checkpoint-state.ts\";\nimport * as breaker from \"./circuit-breaker.ts\";\nimport { buildCompactionContext } from \"./context-pipeline.ts\";\nimport {\n\tcreateDegradationMonitorState,\n\thandleMessageEnd,\n\thandleTurnEnd,\n\tRECOVERY_INSTRUCTIONS,\n\tresetOnSessionCompact,\n} from \"./degradation-monitor.ts\";\nimport {\n\tclassifyRequiredCompactionFallbackFailure,\n\tcreateRequiredCompactionFallback,\n\ttype DeterministicFallbackDiagnostic,\n\tformatRequiredCompactionFallbackRejection,\n\ttype RequiredCompactionFallbackFailure,\n} from \"./deterministic-fallback.ts\";\nimport * as idle from \"./idle.ts\";\nimport * as idleRetry from \"./idle-retry.ts\";\nimport {\n\tCLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE,\n\tcollectCompactBoundaryEntries,\n\tcreateCompactionLanePolicy,\n\tSDK_NATIVE_LANE_REJECTION_REASON,\n} from \"./lane-policy.ts\";\nimport { type CompactionLogger, createCompactionLogger } from \"./log.ts\";\nimport { handleCompactionModelSelect } from \"./model-selection.ts\";\nimport {\n\ttype OpenAiRemoteCompactionDependencies,\n\trewriteOpenAiPayloadWithRemoteCompaction,\n\trunOpenAiRemoteCompaction,\n\tSENPI_COMPACTION_EVENT,\n} from \"./openai-remote.ts\";\nimport {\n\tcreateOpenAiRemoteCompactionHeaders,\n\tisOpenAiRemoteCompactionModel,\n\topenAiRemoteCompactionOrigin,\n} from \"./openai-remote-model.ts\";\nimport {\n\tresolveBeforeAgentStartMessage,\n\tresolveCompactionGeometry,\n\tresolveIdleWarmAction,\n\tresolveReminderSystemPrompt,\n\tshouldDeferGraceBand,\n} from \"./orchestration.ts\";\nimport * as cap from \"./per-turn-cap.ts\";\nimport * as policy from \"./policy.ts\";\nimport * as restoration from \"./restoration-tracker.ts\";\nimport {\n\tapplyGeneratedCompaction,\n\tcreateEmergencyPruneLatch,\n\tcreateSpeculativeCompactionSnapshot,\n\tgetPromptVariant,\n\trunExtensionCompaction,\n\ttype SpeculativeCompactionResult,\n\ttype SpeculativeCompactionSnapshot,\n\tSummaryGenerationError,\n} from \"./speculative.ts\";\nimport { type SpeculativeJob, trackSpeculativeJob } from \"./speculative-job.ts\";\nimport { type CompactionExtensionState, createInitialState, resetTurnCounter } from \"./state.ts\";\nimport { resolveInheritedTaskIntent } from \"./task-intent.ts\";\nimport * as todoBridge from \"./todo-bridge.ts\";\nimport {\n\tcomputeTokenBudgetReminder,\n\tcreateInitialReminderState,\n\ttype TokenBudgetReminderState,\n} from \"./token-budget-reminder.ts\";\nimport { isTransientSummarizationFailure } from \"./transient-failure.ts\";\n\nexport { getPromptContextWindow } from \"./extension-wiring.ts\";\n\nimport {\n\tcreateBlockingRemoteCompactionEvent,\n\tendCompactionFeedback,\n\testimatePendingPromptTokens,\n\tgetPromptContextWindow,\n\tisAbortedAssistantMessage,\n\tisMonitorableMessageEvent,\n\tisRequiredCompactionFallbackReason,\n\tlinkAbortSignal,\n\trecentCheckpoint,\n\twithAdditionalTokens,\n} from \"./extension-wiring.ts\";\nimport { isIneffectiveCompaction } from \"./yield.ts\";\n\nconst DEFAULT_CONTEXT_WINDOW = 200_000;\nconst EMERGENCY_COMPACTION_INSTRUCTIONS =\n\t\"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.\";\nconst PROACTIVE_COMPACTION_INSTRUCTIONS = \"Proactively compact before the next agent turn.\";\nconst MAX_PENDING_METADATA = 8;\n\ninterface PendingCompactionMetadata {\n\tcheckpoint: checkpointState.AgentCheckpoint;\n\ttodoSnapshot: todoBridge.TodoSnapshotPayload;\n}\n\nexport default function compactionExtension(\n\tpi: ExtensionAPI,\n\tremoteCompactionDependencies: OpenAiRemoteCompactionDependencies = {},\n): void {\n\tlet state: CompactionExtensionState = createInitialState();\n\tconst lanePolicy = createCompactionLanePolicy();\n\tconst restorationDirectiveState = checkpointState.createRestorationDirectiveState();\n\tconst emergencyPruneLatch = createEmergencyPruneLatch();\n\tconst degradationState = createDegradationMonitorState();\n\tconst restorationState = state.restoration ?? restoration.createRestorationTrackerState();\n\tstate = { ...state, restoration: restorationState };\n\tlet speculativeGeneration = 0;\n\tlet reminderState: TokenBudgetReminderState = createInitialReminderState();\n\tlet speculativeJob: SpeculativeJob | undefined;\n\tconst pendingMetadata = new Map<string, PendingCompactionMetadata>();\n\tlet logger: CompactionLogger | undefined;\n\tconst getLogger = (ctx: ExtensionContext): CompactionLogger => (logger ??= createCompactionLogger(ctx.agentDir));\n\n\tfunction getSummarizationTools(): Tool[] {\n\t\tif (typeof pi.getAllTools !== \"function\" || typeof pi.getActiveTools !== \"function\") return [];\n\t\ttry {\n\t\t\tconst definitionsByName = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));\n\t\t\treturn pi.getActiveTools().flatMap((name) => {\n\t\t\t\tconst tool = definitionsByName.get(name);\n\t\t\t\treturn tool ? [{ name: tool.name, description: tool.description, parameters: tool.parameters }] : [];\n\t\t\t});\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tlet idleWarmupTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet idleWarmupAttempt = 0;\n\t// True from the `agent_end` idle trigger until the next turn starts (or the\n\t// session shuts down). The idle-apply watcher below is fenced on it so a\n\t// summary that lands after the user has already prompted is never applied\n\t// out from under the turn that is starting; the warm-consume path in\n\t// `before_agent_start` owns the job from that point on.\n\tlet sessionIdleSinceAgentEnd = false;\n\n\tfunction cancelIdleWarmupRetry(): void {\n\t\tif (idleWarmupTimer === undefined) return;\n\t\tclearTimeout(idleWarmupTimer);\n\t\tidleWarmupTimer = undefined;\n\t}\n\n\t// A session reload retires this extension generation while the warm-up\n\t// watcher below is still armed: `AgentSession.reload()` invalidates the old\n\t// runner, after which every `ExtensionContext` getter throws\n\t// \"stale extension generation after reload\". The watcher outlives that\n\t// invalidation in two places — the `job.failure` continuation and the armed\n\t// retry timer — and neither had a caller left to receive the throw: the\n\t// continuation is spawned with `void` (unhandled rejection) and the timer\n\t// callback throws straight into the timer queue, which terminates the\n\t// process. The context carries no liveness flag, so a retired generation is\n\t// only observable by reading a getter and catching the assertion.\n\tfunction isContextRetired(ctx: ExtensionContext): boolean {\n\t\ttry {\n\t\t\tctx.isIdle();\n\t\t\treturn false;\n\t\t} catch {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Fenced on the observed job: a prompt, invalidation, a reload, or a newer\n\t// warm-up stands this watcher down before it can start a duplicate\n\t// summarization.\n\tfunction armIdleWarmupRetry(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\tvoid job.failure.then((failure) => {\n\t\t\tif (failure === undefined) {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (speculativeJob !== job) return;\n\t\t\t// A reload between arming and this continuation retires the context.\n\t\t\tif (isContextRetired(ctx)) {\n\t\t\t\tcancelIdleWarmupRetry();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tconst breakerTripped = breaker.isTripped(state, Date.now());\n\t\t\tconst retryDecision: idleRetry.IdleWarmupRetryDecision = {\n\t\t\t\tattempt: idleWarmupAttempt,\n\t\t\t\ttransient: isTransientSummarizationFailure(failure, failure.message),\n\t\t\t\tisIdle: ctx.isIdle(),\n\t\t\t\tbreakerTripped,\n\t\t\t\tstillWarmEligible: idle.shouldWarmAtIdle({\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\taborted: false,\n\t\t\t\t\tsettings,\n\t\t\t\t\tusage,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\tbreakerTripped,\n\t\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t}),\n\t\t\t};\n\t\t\tif (!idleRetry.shouldRetryIdleWarmup(retryDecision)) return;\n\t\t\tcancelIdleWarmupRetry();\n\t\t\tidleWarmupTimer = setTimeout(() => {\n\t\t\t\tidleWarmupTimer = undefined;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\t// The reload may land after the timer was armed; a throw here would\n\t\t\t\t// escape into the timer queue as an uncaughtException.\n\t\t\t\tif (isContextRetired(ctx)) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tidleWarmupAttempt += 1;\n\t\t\t\tgetLogger(ctx).debug(\"idle_trigger\", {\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\ttokens: usage?.tokens ?? 0,\n\t\t\t\t\tcount: idleWarmupAttempt,\n\t\t\t\t});\n\t\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t\tarmIdleApply(ctx);\n\t\t\t}, idleRetry.IDLE_WARMUP_RETRY_DELAY_MS);\n\t\t});\n\t}\n\n\t/**\n\t * Apply the idle warm summary as soon as it finishes generating, while the\n\t * session is still idle. Holding it warm until the next `before_agent_start`\n\t * makes the user watch their own prompt wait behind a compaction they could\n\t * not see coming; applying during the idle gap renders the [compaction] block\n\t * first and lets the next message stack below it.\n\t *\n\t * Every guard is re-read at continuation time, because generation takes long\n\t * enough for all of them to change: the session may no longer be idle, the\n\t * job may have been invalidated or claimed, the context may have dropped\n\t * below the threshold, the lane may have been handed to the SDK, or the\n\t * breaker may have tripped. A refused apply (stale anchor/revision) silently\n\t * keeps the warm hold, so the next prompt consumes it exactly as before.\n\t */\n\tfunction armIdleApply(ctx: ExtensionContext): void {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return;\n\t\t// Never throws out of the continuation: a retired context, a refused apply,\n\t\t// or a provider failure all resolve into a silent stand-down.\n\t\tvoid job.promise\n\t\t\t.then(async (compaction) => {\n\t\t\t\tif (!compaction) return;\n\t\t\t\tif (speculativeJob !== job) return;\n\t\t\t\tif (!sessionIdleSinceAgentEnd) return;\n\t\t\t\tif (isContextRetired(ctx)) return;\n\t\t\t\tif (!ctx.isIdle()) return;\n\t\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\t\tif (breaker.isTripped(state, Date.now())) return;\n\t\t\t\tif (cap.shouldRejectByCap(state).cancel) return;\n\t\t\t\tconst usage = ctx.getContextUsage();\n\t\t\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\t\t\tif (\n\t\t\t\t\t!usage ||\n\t\t\t\t\t!policy.shouldTriggerCompaction(\n\t\t\t\t\t\tusage,\n\t\t\t\t\t\tcontextWindow,\n\t\t\t\t\t\tctx.getCompactionSettings(),\n\t\t\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(ctx, job.snapshot, () => speculativeGeneration, compaction);\n\t\t\t\tif (!result.applied) return;\n\t\t\t\t// The job is consumed: clearing it here is also what stands the idle\n\t\t\t\t// retry watcher down for this generation.\n\t\t\t\tif (speculativeJob === job) speculativeJob = undefined;\n\t\t\t\tcancelIdleWarmupRetry();\n\t\t\t\tgetLogger(ctx).debug(\"idle_applied\", { generation: job.generation, origin: \"speculative\" });\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n\n\tfunction isSameModelIdentity(\n\t\tleft: SpeculativeCompactionSnapshot[\"model\"],\n\t\tright: ExtensionContext[\"model\"],\n\t): boolean {\n\t\treturn (\n\t\t\tright !== undefined &&\n\t\t\tleft.api === right.api &&\n\t\t\tleft.provider === right.provider &&\n\t\t\tleft.id === right.id &&\n\t\t\tleft.baseUrl === right.baseUrl &&\n\t\t\tleft.contextWindow === right.contextWindow\n\t\t);\n\t}\n\n\t/**\n\t * Detach the warm job for the core route before any `await`, so exactly one\n\t * claimant can own it. The controller is deliberately NOT aborted: the whole\n\t * point is to keep the already-paid summarization alive and hand its result to\n\t * core, and clearing the reference is what stands the idle-retry watcher down.\n\t */\n\tfunction claimWarmSummaryForCoreRoute(\n\t\tevent: SessionBeforeCompactEvent,\n\t\tctx: ExtensionContext,\n\t): typeof speculativeJob {\n\t\tconst job = speculativeJob;\n\t\tif (!job) return undefined;\n\t\tif (event.customInstructions !== undefined) return undefined;\n\t\tif (job.snapshot.origin !== \"speculative\") return undefined;\n\t\tif (job.snapshot.preparation.firstKeptEntryId !== event.preparation.firstKeptEntryId) return undefined;\n\t\tif (!isSameModelIdentity(job.snapshot.model, ctx.model)) return undefined;\n\t\tconst anchor = createWarmAnchorSnapshot(\n\t\t\tjob.snapshot.preparation.firstKeptEntryId,\n\t\t\tjob.snapshot.branchEntries ?? [],\n\t\t);\n\t\tif (!anchor || !isWarmSummaryAnchorValid(anchor, event.branchEntries ?? ctx.sessionManager.getBranch())) {\n\t\t\treturn undefined;\n\t\t}\n\t\tspeculativeJob = undefined;\n\t\treturn job;\n\t}\n\n\tfunction invalidateSpeculativeCompaction(ctx: ExtensionContext): void {\n\t\tconst previousGeneration = speculativeGeneration;\n\t\tspeculativeGeneration++;\n\t\tgetLogger(ctx).debug(\"speculative_invalidated\", { generation: previousGeneration });\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t}\n\n\tfunction startSpeculativeCompaction(ctx: ExtensionContext, customInstructions: string): void {\n\t\tif (speculativeJob) return;\n\t\tconst generation = ++speculativeGeneration;\n\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\tgeneration,\n\t\t\tcustomInstructions,\n\t\t\torigin: \"speculative\",\n\t\t\ttools: getSummarizationTools(),\n\t\t});\n\t\tif (!snapshot) return;\n\t\tgetLogger(ctx).debug(\"speculative_started\", { generation, origin: \"speculative\" });\n\t\tconst controller = new AbortController();\n\t\tconst settled = runExtensionCompaction(ctx, snapshot, controller.signal).then(\n\t\t\t(result) => ({ result, error: undefined }),\n\t\t\t(error: unknown) => ({ result: undefined, error: error instanceof Error ? error : new Error(String(error)) }),\n\t\t);\n\t\tspeculativeJob = trackSpeculativeJob({\n\t\t\tgeneration,\n\t\t\tsnapshot,\n\t\t\tcontroller,\n\t\t\tsettled,\n\t\t\tarmedAtTokens: ctx.getContextUsage()?.tokens ?? 0,\n\t\t});\n\t\tvoid settled.then(() => remoteCompactionDependencies.onSpeculativeJobSettled?.());\n\t}\n\n\tfunction capturePendingMetadata(requestId: string, ctx: ExtensionContext): void {\n\t\tpendingMetadata.set(requestId, {\n\t\t\tcheckpoint: checkpointState.captureAgentCheckpoint(pi, ctx),\n\t\t\ttodoSnapshot: todoBridge.createTodoSnapshot(ctx),\n\t\t});\n\t\twhile (pendingMetadata.size > MAX_PENDING_METADATA) {\n\t\t\tconst oldestRequestId = pendingMetadata.keys().next().value;\n\t\t\tif (oldestRequestId === undefined) break;\n\t\t\tpendingMetadata.delete(oldestRequestId);\n\t\t}\n\t}\n\n\tfunction persistAcceptedMetadata(requestId: string): void {\n\t\tconst metadata = pendingMetadata.get(requestId);\n\t\tif (!metadata) return;\n\t\tpendingMetadata.delete(requestId);\n\t\tcheckpointState.persistCheckpoint(pi, metadata.checkpoint);\n\t\ttodoBridge.persistTodoSnapshot(pi, metadata.todoSnapshot);\n\t}\n\n\tfunction recoverRequiredCompaction(\n\t\tsnapshot: SpeculativeCompactionSnapshot,\n\t\tfailureKind: RequiredCompactionFallbackFailure,\n\t): { compaction?: CompactionResult; rejectionReason?: string } {\n\t\tconst diagnostics: DeterministicFallbackDiagnostic = {};\n\t\tconst compaction = createRequiredCompactionFallback(\n\t\t\tsnapshot.preparation,\n\t\t\tsnapshot.contextWindow,\n\t\t\tfailureKind,\n\t\t\t{ taskIntent: resolveInheritedTaskIntent(snapshot.branchEntries ?? []) },\n\t\t\tsnapshot.branchEntries,\n\t\t\tdiagnostics,\n\t\t);\n\t\treturn compaction ? { compaction } : { rejectionReason: formatRequiredCompactionFallbackRejection(diagnostics) };\n\t}\n\n\tasync function applyBlockingCompaction(\n\t\tctx: ExtensionContext,\n\t\tcustomInstructions: string,\n\t): Promise<SpeculativeCompactionResult> {\n\t\tconst provider = ctx.model?.provider;\n\t\tif ((provider === \"cursor\" || provider === \"cursor-cli-oauth\") && !ctx.isIdle()) {\n\t\t\tgetLogger(ctx).debug(\"skip_cursor_mid_turn\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (breaker.isTripped(state, Date.now())) {\n\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\tgetLogger(ctx).debug(\"skip_cap\", { route: \"blocking\" });\n\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t}\n\t\tlet feedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\ttry {\n\t\t\tlet remoteFallbackReason: string | undefined;\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) {\n\t\t\t\tconst remoteGeneration = speculativeGeneration + 1;\n\t\t\t\tconst remoteSnapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\t\tgeneration: remoteGeneration,\n\t\t\t\t\tcustomInstructions,\n\t\t\t\t\torigin: \"blocking\",\n\t\t\t\t});\n\t\t\t\tgetLogger(ctx).debug(\"blocking_started\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\tif (remoteSnapshot) {\n\t\t\t\t\tconst remoteSignal = feedbackSignal ?? new AbortController().signal;\n\t\t\t\t\tconst remoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tcreateBlockingRemoteCompactionEvent(ctx, remoteSnapshot, customInstructions, remoteSignal),\n\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\tif (data?.action === \"remote_fallback\" && typeof data.reason === \"string\") {\n\t\t\t\t\t\t\t\tremoteFallbackReason = data.reason;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpi.events.emit(SENPI_COMPACTION_EVENT, data);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t\t);\n\t\t\t\t\tif (remoteCompaction) {\n\t\t\t\t\t\tif (speculativeGeneration !== remoteGeneration - 1) {\n\t\t\t\t\t\t\tconst result = { applied: false, reason: \"stale\" } as const;\n\t\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: remoteGeneration });\n\t\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspeculativeGeneration = remoteGeneration;\n\t\t\t\t\t\tspeculativeJob?.controller.abort();\n\t\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tremoteSnapshot,\n\t\t\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\t\t\tremoteCompaction,\n\t\t\t\t\t\t\tfeedbackSignal,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", { generation: remoteGeneration, origin: \"blocking\" });\n\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst pendingJob = speculativeJob;\n\t\t\tif (pendingJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(feedbackSignal, pendingJob.controller);\n\t\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\t\tlet inheritedFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcompaction = await pendingJob.promise;\n\t\t\t\t\tinheritedFailure = await pendingJob.failure;\n\t\t\t\t\tif (compaction)\n\t\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: pendingJob.generation, route: \"speculative\" });\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (inheritedFailure !== undefined) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(inheritedFailure);\n\t\t\t\t\tif (\n\t\t\t\t\t\tfailureKind !== undefined &&\n\t\t\t\t\t\t!feedbackSignal?.aborted &&\n\t\t\t\t\t\tpendingJob.snapshot.generation === speculativeGeneration &&\n\t\t\t\t\t\tpendingJob.snapshot.expectedRevision === ctx.getMessageRevision()\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst recovery = recoverRequiredCompaction(pendingJob.snapshot, failureKind);\n\t\t\t\t\t\tcompaction = recovery.compaction;\n\t\t\t\t\t\tif (!compaction) {\n\t\t\t\t\t\t\tconst result = { applied: false, reason: \"failed\" } as const;\n\t\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, recovery.rejectionReason);\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tfailureKind === undefined &&\n\t\t\t\t\t\tisTransientSummarizationFailure(inheritedFailure, inheritedFailure.message)\n\t\t\t\t\t) {\n\t\t\t\t\t\tctx.endCompaction?.({\n\t\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\t\t\t\terrorMessage: `Compaction failed: ${inheritedFailure.message}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tpendingJob.snapshot,\n\t\t\t\t\t() => speculativeGeneration,\n\t\t\t\t\tcompaction,\n\t\t\t\t\tfeedbackSignal,\n\t\t\t\t);\n\t\t\t\tif (result.applied) {\n\t\t\t\t\tspeculativeJob = undefined;\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_applied\", {\n\t\t\t\t\t\tgeneration: pendingJob.generation,\n\t\t\t\t\t\torigin: \"speculative\",\n\t\t\t\t\t});\n\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tif (result.reason === \"stale\") {\n\t\t\t\t\tgetLogger(ctx).debug(\"speculative_stale\", { generation: pendingJob.generation });\n\t\t\t\t} else if (result.reason === \"rejected\") {\n\t\t\t\t\tfeedbackSignal = ctx.beginCompaction?.({ reason: \"extension\" });\n\t\t\t\t}\n\t\t\t\tspeculativeJob = undefined;\n\t\t\t}\n\n\t\t\tconst generation = ++speculativeGeneration;\n\t\t\tconst snapshot = createSpeculativeCompactionSnapshot(ctx, {\n\t\t\t\tgeneration,\n\t\t\t\tcustomInstructions,\n\t\t\t\torigin: \"core-route\",\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t});\n\t\t\tif (!snapshot) {\n\t\t\t\tconst result = { applied: false, reason: \"unavailable\" } as const;\n\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: \"unavailable\" });\n\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, remoteFallbackReason);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, feedbackSignal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({\n\t\t\t\t\t\treason: \"extension\",\n\t\t\t\t\t\tsignal: feedbackSignal,\n\t\t\t\t\t\tdelta,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(error);\n\t\t\t\tif (failureKind !== undefined && !feedbackSignal?.aborted) {\n\t\t\t\t\tconst recovery = recoverRequiredCompaction(snapshot, failureKind);\n\t\t\t\t\tcompaction = recovery.compaction;\n\t\t\t\t\tif (!compaction) {\n\t\t\t\t\t\tconst result = { applied: false, reason: \"failed\" } as const;\n\t\t\t\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, recovery.rejectionReason);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(error instanceof SummaryGenerationError)) throw error;\n\t\t\t\t\tgetLogger(ctx).debug(\"summary_failed\", { reason: error.kind });\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst result = await applyGeneratedCompaction(\n\t\t\t\tctx,\n\t\t\t\tsnapshot,\n\t\t\t\t() => speculativeGeneration,\n\t\t\t\tcompaction,\n\t\t\t\tfeedbackSignal,\n\t\t\t);\n\t\t\tendCompactionFeedback(ctx, feedbackSignal, result, remoteFallbackReason);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (feedbackSignal?.aborted) {\n\t\t\t\t// An aborted blocking compaction is a cancellation, not a failure: no\n\t\t\t\t// red \"Compaction failed\" line, no breaker debit, no rethrow through\n\t\t\t\t// the before_agent_start handler (issue #886). The faux-route flavor\n\t\t\t\t// of this contract is pinned by blocking-compaction-review-hardening.\n\t\t\t\tgetLogger(ctx).debug(\"blocking_aborted\", { route: \"blocking\" });\n\t\t\t\tctx.endCompaction?.({ reason: \"extension\", signal: feedbackSignal, aborted: true });\n\t\t\t\treturn { applied: false, reason: \"rejected\" };\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tctx.endCompaction?.({\n\t\t\t\treason: \"extension\",\n\t\t\t\tsignal: feedbackSignal,\n\t\t\t\taborted: feedbackSignal?.aborted,\n\t\t\t\terrorMessage: `Compaction failed: ${message}`,\n\t\t\t});\n\t\t\tconst transient = isTransientSummarizationFailure(error, message);\n\t\t\tif (transient) {\n\t\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: \"extension\" });\n\t\t\t\treturn { applied: false, reason: \"failed\" };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tpi.on(\"session_before_compact\", async (event: SessionBeforeCompactEvent, ctx) => {\n\t\t// A pre-aborted request (superseded admission or user cancel) must stand\n\t\t// down before touching warm-job ownership: core's own post-emit abort\n\t\t// checks turn it into a clean cancellation (issue #886).\n\t\tif (event.signal.aborted) return undefined;\n\t\tconst claimedWarmJob = claimWarmSummaryForCoreRoute(event, ctx);\n\t\t// The claim detaches the job without aborting it, so ownership must survive every\n\t\t// exit from this handler - including a throw - or the request it already paid for\n\t\t// keeps streaming for a result nobody will read.\n\t\tlet warmJobConsumed = false;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tconst claimedGeneration = speculativeGeneration;\n\t\ttry {\n\t\t\tif (!lanePolicy.ownsCompaction(ctx, event.reason)) {\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"external-owner\",\n\t\t\t\t\treason: SDK_NATIVE_LANE_REJECTION_REASON,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (cap.shouldRejectByCap(state).cancel) {\n\t\t\t\tgetLogger(ctx).debug(\"skip_cap\", { reason: event.reason, count: state.acceptedAbsolute });\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"per-turn-cap\",\n\t\t\t\t\treason: \"absolute compaction cap reached for this session\",\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tif (breaker.isTripped(state, now) && !breaker.shouldBypass(state, { reason: event.reason })) {\n\t\t\t\tconst remainingMs = state.trippedAt !== null ? Math.max(0, state.trippedAt + breaker.COOLDOWN_MS - now) : 0;\n\t\t\t\tgetLogger(ctx).debug(\"skip_breaker\", { reason: event.reason, remainingSec: Math.ceil(remainingMs / 1000) });\n\t\t\t\treturn {\n\t\t\t\t\tcancel: true,\n\t\t\t\t\trejectionCause: \"circuit-breaker\",\n\t\t\t\t\treason: `compaction circuit breaker cooling down (${Math.ceil(remainingMs / 1000)}s left)`,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tcapturePendingMetadata(event.requestId, ctx);\n\n\t\t\tconst model = ctx.model;\n\t\t\tif (!model) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tlet remoteCompaction: Awaited<ReturnType<typeof runOpenAiRemoteCompaction>>;\n\t\t\ttry {\n\t\t\t\tremoteCompaction = await runOpenAiRemoteCompaction(\n\t\t\t\t\tctx,\n\t\t\t\t\tevent,\n\t\t\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t\t\t\tremoteCompactionDependencies,\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\t// The remote route deliberately rethrows once its signal aborts; the\n\t\t\t\t// handler converts that into a silent stand-down so the abort is not\n\t\t\t\t// reported as an extension error with a stack (issue #886).\n\t\t\t\tif (!event.signal.aborted) throw error;\n\t\t\t\tgetLogger(ctx).debug(\"remote_aborted\", { route: \"core-route\", requestId: event.requestId });\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (remoteCompaction) {\n\t\t\t\tgetLogger(ctx).debug(\"core_route_generated\", { route: \"core-route\", requestId: event.requestId });\n\t\t\t\treturn { compaction: remoteCompaction };\n\t\t\t}\n\n\t\t\tlet inheritedWarmFailure: Error | undefined;\n\t\t\tif (claimedWarmJob) {\n\t\t\t\tconst unlinkAbort = linkAbortSignal(event.signal, claimedWarmJob.controller);\n\t\t\t\tlet warmCompaction: CompactionResult | undefined;\n\t\t\t\tlet warmFailure: Error | undefined;\n\t\t\t\ttry {\n\t\t\t\t\twarmCompaction = await claimedWarmJob.promise;\n\t\t\t\t\twarmFailure = await claimedWarmJob.failure;\n\t\t\t\t} finally {\n\t\t\t\t\tunlinkAbort();\n\t\t\t\t}\n\t\t\t\tif (warmFailure === undefined && warmCompaction && !event.signal.aborted) {\n\t\t\t\t\tgetLogger(ctx).debug(\"warm_consumed\", { generation: claimedWarmJob.generation, route: \"core-route\" });\n\t\t\t\t\twarmJobConsumed = true;\n\t\t\t\t\treturn { compaction: warmCompaction };\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\twarmFailure !== undefined &&\n\t\t\t\t\tisRequiredCompactionFallbackReason(event.reason) &&\n\t\t\t\t\tclassifyRequiredCompactionFallbackFailure(warmFailure) !== undefined &&\n\t\t\t\t\t!event.signal.aborted &&\n\t\t\t\t\tspeculativeGeneration === claimedGeneration &&\n\t\t\t\t\tclaimedWarmJob.snapshot.expectedRevision === ctx.getMessageRevision()\n\t\t\t\t) {\n\t\t\t\t\tinheritedWarmFailure = warmFailure;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snapshot = {\n\t\t\t\tgeneration: ++speculativeGeneration,\n\t\t\t\texpectedRevision: ctx.getMessageRevision(),\n\t\t\t\tmodel,\n\t\t\t\tcontextWindow: ctx.getContextUsage()?.contextWindow ?? model.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\tpreparation: event.preparation,\n\t\t\t\tbranchEntries: event.branchEntries,\n\t\t\t\tpromptVariant: getPromptVariant(event),\n\t\t\t\torigin: \"core-route\" as const,\n\t\t\t\tcustomInstructions: event.customInstructions,\n\t\t\t\tsystemPrompt: ctx.getSystemPrompt(),\n\t\t\t\ttools: getSummarizationTools(),\n\t\t\t};\n\t\t\tlet compaction: CompactionResult | undefined;\n\t\t\ttry {\n\t\t\t\tif (inheritedWarmFailure) throw inheritedWarmFailure;\n\t\t\t\tcompaction = await runExtensionCompaction(ctx, snapshot, event.signal, (delta) =>\n\t\t\t\t\tctx.updateCompaction?.({ reason: event.reason, signal: event.signal, delta }),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tconst failureKind = classifyRequiredCompactionFallbackFailure(error);\n\t\t\t\tif (\n\t\t\t\t\tisRequiredCompactionFallbackReason(event.reason) &&\n\t\t\t\t\tfailureKind !== undefined &&\n\t\t\t\t\t!event.signal.aborted\n\t\t\t\t) {\n\t\t\t\t\tconst recovery = recoverRequiredCompaction(snapshot, failureKind);\n\t\t\t\t\tif (recovery.compaction) return { compaction: recovery.compaction };\n\t\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcancel: true,\n\t\t\t\t\t\treason: recovery.rejectionReason,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\tif (error instanceof SummaryGenerationError) {\n\t\t\t\t\treturn { cancel: true, reason: error.message };\n\t\t\t\t}\n\t\t\t\treturn { cancel: true, reason: `compaction generator failed: ${message}` };\n\t\t\t}\n\t\t\tif (!compaction) {\n\t\t\t\tpendingMetadata.delete(event.requestId);\n\t\t\t\tif (event.signal.aborted) {\n\t\t\t\t\treturn { cancel: true };\n\t\t\t\t}\n\t\t\t\treturn { cancel: true, reason: \"compaction generator returned no summary\" };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcompaction,\n\t\t\t};\n\t\t} finally {\n\t\t\tif (!warmJobConsumed) claimedWarmJob?.controller.abort();\n\t\t}\n\t});\n\n\tpi.on(\"model_select\", (event, ctx) =>\n\t\thandleCompactionModelSelect({\n\t\t\tevent,\n\t\t\tctx,\n\t\t\tstate,\n\t\t\tspeculativeSnapshot: speculativeJob?.snapshot,\n\t\t\tlaneOwnsCompaction: lanePolicy.disablesSenpiCompaction(ctx),\n\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\tinvalidate: () => invalidateSpeculativeCompaction(ctx),\n\t\t\tstart: () => startSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS),\n\t\t}),\n\t);\n\n\tpi.on(\"session_compact\", async (event: SessionCompactEvent, ctx) => {\n\t\tconst compactEvent = event;\n\t\tinvalidateSpeculativeCompaction(ctx);\n\t\tif (compactEvent.accepted) {\n\t\t\tpersistAcceptedMetadata(compactEvent.requestId);\n\t\t\tconst branchEntries = ctx.sessionManager.getBranch();\n\t\t\tconst firstKeptIndex = branchEntries.findIndex(\n\t\t\t\t(entry) => entry.id === compactEvent.compactionEntry.firstKeptEntryId,\n\t\t\t);\n\t\t\tconst keptEntries = firstKeptIndex === -1 ? [] : branchEntries.slice(firstKeptIndex);\n\t\t\tstate = cap.incrementAccepted(state);\n\t\t\tstate = breaker.recordSuccess(state);\n\t\t\treminderState = createInitialReminderState();\n\t\t\tconst details = compactEvent.compactionEntry.details as\n\t\t\t\t| { structuralYield?: { savedTokens: number; savingsRatio: number } }\n\t\t\t\t| undefined;\n\t\t\tconst sy = details?.structuralYield;\n\t\t\tif (sy && typeof sy.savedTokens === \"number\" && typeof sy.savingsRatio === \"number\") {\n\t\t\t\tstate = {\n\t\t\t\t\t...state,\n\t\t\t\t\tlastYield: { savedTokens: sy.savedTokens, tokensBefore: compactEvent.compactionEntry.tokensBefore },\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\tisIneffectiveCompaction({\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t})\n\t\t\t\t) {\n\t\t\t\t\tstate = cap.incrementIneffective(state);\n\t\t\t\t\tgetLogger(ctx).debug(\"ineffective_counted\", {\n\t\t\t\t\t\ttokensBefore: compactEvent.compactionEntry.tokensBefore,\n\t\t\t\t\t\tsavedTokens: sy.savedTokens,\n\t\t\t\t\t\tsavingsRatio: sy.savingsRatio,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tresetOnSessionCompact(degradationState);\n\t\t\ttodoBridge.restoreTodosIfMissing(pi, ctx);\n\t\t\tconst usage = ctx.getContextUsage();\n\t\t\tconst settings = ctx.getCompactionSettings();\n\t\t\tif (settings.restorationEnabled ?? true) {\n\t\t\t\trestoration.preparePendingPayload(restorationState, {\n\t\t\t\t\taccepted: true,\n\t\t\t\t\treason: compactEvent.reason,\n\t\t\t\t\tcompactionEntryId: compactEvent.compactionEntry.id,\n\t\t\t\t\tcontextWindow: usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\tusageTokens: usage?.tokens ?? null,\n\t\t\t\t\treserveTokens: policy.resolveEffectiveReserveTokens(\n\t\t\t\t\t\tusage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW,\n\t\t\t\t\t\tsettings,\n\t\t\t\t\t),\n\t\t\t\t\tsettings,\n\t\t\t\t\tkeptMessages: keptEntries.flatMap((entry) => {\n\t\t\t\t\t\tif (entry.type !== \"message\") return [];\n\t\t\t\t\t\treturn [entry.message];\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (compactEvent.rejectionCause === \"external-owner\") return;\n\t\tif (lanePolicy.ownsCompaction(ctx, compactEvent.reason)) {\n\t\t\tstate = breaker.recordFailure(state, Date.now(), { route: compactEvent.reason });\n\t\t}\n\t});\n\n\tpi.on(\"before_agent_start\", async (event, ctx) => {\n\t\tsessionIdleSinceAgentEnd = false;\n\t\tcancelIdleWarmupRetry();\n\t\tconst message = checkpointState.attachRestorationDirective(\n\t\t\trestorationDirectiveState,\n\t\t\trecentCheckpoint(ctx),\n\t\t\trestoration.consumePendingPayload(restorationState),\n\t\t);\n\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst pendingPromptTokens = estimatePendingPromptTokens(event);\n\t\tconst usageWithPendingPrompt = usage ? withAdditionalTokens(usage, pendingPromptTokens) : undefined;\n\t\t// The SDK owns this lane's context entirely, so even the hard-limit valve stands down;\n\t\t// the circuit breaker never blocks that valve for senpi-owned lanes.\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerCoolingDown = breaker.isTripped(state, Date.now()) || laneOwnsCompaction;\n\t\tconst { reserveTokens, thresholdTokens, leadTokens } = resolveCompactionGeometry({\n\t\t\tcontextWindow,\n\t\t\tsettings,\n\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t});\n\t\tif (\n\t\t\t!laneOwnsCompaction &&\n\t\t\tusage &&\n\t\t\tpolicy.isAtHardLimit(usage, contextWindow, reserveTokens, pendingPromptTokens)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"hard_limit_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usage.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tawait applyBlockingCompaction(ctx, EMERGENCY_COMPACTION_INSTRUCTIONS);\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldTriggerCompaction(usageWithPendingPrompt, contextWindow, settings, state.lastYield ?? undefined)\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"threshold_trigger\", {\n\t\t\t\tcontextWindow,\n\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\tthreshold: settings.reserveTokens,\n\t\t\t});\n\t\t\tif (\n\t\t\t\t!shouldDeferGraceBand({\n\t\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\t\tthresholdTokens,\n\t\t\t\t\tleadTokens,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\treserveTokens,\n\t\t\t\t\tcompactionInFlight: speculativeJob !== undefined && !speculativeJob.completed,\n\t\t\t\t\tgraceBandEnabled: settings.graceBandEnabled,\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tawait applyBlockingCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t\t} else {\n\t\t\t\tgetLogger(ctx).debug(\"grace_deferred\", {\n\t\t\t\t\ttokens: usageWithPendingPrompt.tokens ?? 0,\n\t\t\t\t\tthreshold: thresholdTokens,\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (\n\t\t\t!breakerCoolingDown &&\n\t\t\t!isOpenAiRemoteCompactionModel(ctx.model) &&\n\t\t\tusageWithPendingPrompt &&\n\t\t\tpolicy.shouldStartSpeculativeCompaction(\n\t\t\t\tusageWithPendingPrompt,\n\t\t\t\tcontextWindow,\n\t\t\t\tsettings,\n\t\t\t\tstate.lastYield ?? undefined,\n\t\t\t\tleadTokens,\n\t\t\t)\n\t\t) {\n\t\t\t// The speculative start below logs \"speculative_started\" itself; logging\n\t\t\t// \"emergency_prune\" here mislabeled proactive speculation as pruning and\n\t\t\t// corrupted the counter the incident analysis relies on.\n\t\t\tstartSpeculativeCompaction(ctx, PROACTIVE_COMPACTION_INSTRUCTIONS);\n\t\t}\n\n\t\tconst reminder = computeTokenBudgetReminder({\n\t\t\tcontextTokens: usageWithPendingPrompt?.tokens ?? 0,\n\t\t\tcontextWindow,\n\t\t\tthresholdTokens,\n\t\t\tleadTokens,\n\t\t\tcompactionEpoch: speculativeGeneration,\n\t\t\tstate: reminderState,\n\t\t});\n\t\treminderState = reminder.nextState;\n\t\tconst deliveredMessage = resolveBeforeAgentStartMessage({\n\t\t\tmessage,\n\t\t\treminder: reminder.message,\n\t\t\treminderEnabled: settings.reminderEnabled,\n\t\t});\n\t\tconst reminderSystemPrompt = resolveReminderSystemPrompt({\n\t\t\tsystemPrompt: event.systemPrompt,\n\t\t\treminder: !message ? reminder.message : undefined,\n\t\t\treminderEnabled: settings.reminderEnabled,\n\t\t});\n\t\tif (!deliveredMessage && !reminderSystemPrompt) return undefined;\n\t\treturn {\n\t\t\t...(deliveredMessage ? { message: deliveredMessage } : {}),\n\t\t\t...(reminderSystemPrompt ? { systemPrompt: reminderSystemPrompt } : {}),\n\t\t};\n\t});\n\n\tpi.on(\"context\", (event, ctx) => {\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst laneOwnsCompaction = lanePolicy.disablesSenpiCompaction(ctx);\n\t\tconst breakerFallback =\n\t\t\t!laneOwnsCompaction &&\n\t\t\tbreaker.isTripped(state, Date.now()) &&\n\t\t\tusage?.tokens !== null &&\n\t\t\tusage !== undefined &&\n\t\t\tusage.tokens >= contextWindow * policy.computeEffectiveThreshold(contextWindow, state.lastYield ?? undefined);\n\t\tif (breakerFallback)\n\t\t\tgetLogger(ctx).debug(\"breaker_deterministic_fallback\", { route: \"context-event\", tokens: usage.tokens ?? 0 });\n\t\treturn {\n\t\t\tmessages: buildCompactionContext({\n\t\t\t\tevent,\n\t\t\t\tctx,\n\t\t\t\tcontextWindow,\n\t\t\t\tpromptContextWindow: getPromptContextWindow(contextWindow, ctx.model?.maxTokens),\n\t\t\t\ttoolAdmissionEnabled: settings.toolAdmissionEnabled !== false,\n\t\t\t\tbreakerFallback,\n\t\t\t\tlaneOwnsCompaction,\n\t\t\t\temergencyPruneLatch,\n\t\t\t\tlogEmergencyPrune: (fields) => getLogger(ctx).debug(\"emergency_prune\", fields),\n\t\t\t}),\n\t\t};\n\t});\n\n\tpi.on(\"before_provider_request\", async (event, ctx) => {\n\t\tconst model = event.model ?? ctx.model;\n\t\tif (!isOpenAiRemoteCompactionModel(model)) return undefined;\n\t\tconst auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n\t\tif (!auth.ok) return undefined;\n\t\tconst effectiveModel =\n\t\t\tauth.upstreamModelId || auth.baseUrl\n\t\t\t\t? {\n\t\t\t\t\t\t...model,\n\t\t\t\t\t\t...(auth.upstreamModelId ? { id: auth.upstreamModelId } : {}),\n\t\t\t\t\t\t...(auth.baseUrl ? { baseUrl: auth.baseUrl } : {}),\n\t\t\t\t\t}\n\t\t\t\t: model;\n\t\tconst headers = createOpenAiRemoteCompactionHeaders(\n\t\t\teffectiveModel,\n\t\t\t{ ...auth, headers: event.headers ?? auth.headers },\n\t\t\tctx.sessionManager.getSessionId(),\n\t\t);\n\t\tif (!headers) return undefined;\n\t\tconst origin = openAiRemoteCompactionOrigin(effectiveModel, headers);\n\t\treturn rewriteOpenAiPayloadWithRemoteCompaction(\n\t\t\tevent.payload,\n\t\t\t{ model: effectiveModel, branchEntries: ctx.sessionManager.getBranch(), origin },\n\t\t\t(data) => pi.events.emit(SENPI_COMPACTION_EVENT, data),\n\t\t);\n\t});\n\n\tpi.on(\"turn_end\", async (_event, ctx) => {\n\t\ttry {\n\t\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\t\thandleTurnEnd(degradationState);\n\t\t\tif (degradationState.recoveryTriggeredThisCycle) return;\n\t\t\tif (state.lastYield && state.lastYield.savedTokens <= 0) {\n\t\t\t\tvoid applyBlockingCompaction(ctx, RECOVERY_INSTRUCTIONS).catch(() => {});\n\t\t\t}\n\t\t} finally {\n\t\t\tstate = resetTurnCounter(state, \"\");\n\t\t}\n\t});\n\n\tpi.on(\"agent_end\", async (event, ctx) => {\n\t\tstate = resetTurnCounter(state, \"\");\n\t\tif (lanePolicy.disablesSenpiCompaction(ctx)) return;\n\t\tconst usage = ctx.getContextUsage();\n\t\tconst contextWindow = usage?.contextWindow ?? ctx.model?.contextWindow ?? DEFAULT_CONTEXT_WINDOW;\n\t\tconst settings = ctx.getCompactionSettings();\n\t\tif (\n\t\t\tidle.shouldRunIdleCompaction({\n\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\taborted: event.aborted === true,\n\t\t\t\tsettings,\n\t\t\t\tusage,\n\t\t\t\tcontextWindow,\n\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\tmode: ctx.mode,\n\t\t\t})\n\t\t) {\n\t\t\tgetLogger(ctx).debug(\"idle_trigger\", { contextWindow, tokens: usage?.tokens ?? 0 });\n\t\t\tidleWarmupAttempt = 0;\n\t\t\tsessionIdleSinceAgentEnd = true;\n\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\tarmIdleApply(ctx);\n\t\t} else {\n\t\t\t// A sub-threshold OpenAI warm-up cannot be consumed by the remote\n\t\t\t// compaction route. Once threshold admission succeeds remotely, it would\n\t\t\t// only abort and discard this paid local summary. Above threshold we keep\n\t\t\t// the existing local idle apply, which can finish before the next prompt;\n\t\t\t// if remote compaction later falls back, blocking local generation remains\n\t\t\t// unchanged.\n\t\t\tif (isOpenAiRemoteCompactionModel(ctx.model)) return;\n\t\t\tconst warmAction = resolveIdleWarmAction(\n\t\t\t\t{\n\t\t\t\t\twillRetry: event.willRetry ?? false,\n\t\t\t\t\taborted: event.aborted === true,\n\t\t\t\t\tsettings,\n\t\t\t\t\tusage,\n\t\t\t\t\tcontextWindow,\n\t\t\t\t\tbreakerTripped: breaker.isTripped(state, Date.now()),\n\t\t\t\t\tlastYield: state.lastYield ?? undefined,\n\t\t\t\t\tmode: ctx.mode,\n\t\t\t\t},\n\t\t\t\tspeculativeJob,\n\t\t\t);\n\t\t\tif (warmAction === \"replace\") invalidateSpeculativeCompaction(ctx);\n\t\t\tif (warmAction !== \"none\") {\n\t\t\t\tidleWarmupAttempt = 0;\n\t\t\t\tsessionIdleSinceAgentEnd = true;\n\t\t\t\tstartSpeculativeCompaction(ctx, idle.IDLE_COMPACTION_INSTRUCTIONS);\n\t\t\t\tarmIdleWarmupRetry(ctx);\n\t\t\t\tarmIdleApply(ctx);\n\t\t\t}\n\t\t}\n\t});\n\n\tpi.on(\"message_end\", async (event, ctx) => {\n\t\tfor (const entry of collectCompactBoundaryEntries(event.message)) {\n\t\t\tpi.appendEntry(CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE, entry);\n\t\t}\n\t\tif (isAbortedAssistantMessage(event)) {\n\t\t\tinvalidateSpeculativeCompaction(ctx);\n\t\t}\n\t\tif (isMonitorableMessageEvent(event) && !lanePolicy.disablesSenpiCompaction(ctx)) {\n\t\t\tawait handleMessageEnd(degradationState, event, {\n\t\t\t\tapplyCompaction: async (options) => {\n\t\t\t\t\treturn await applyBlockingCompaction(ctx, options.customInstructions);\n\t\t\t\t},\n\t\t\t\tnotify: (message) => ctx.ui.notify(message, \"warning\"),\n\t\t\t});\n\t\t}\n\t});\n\n\tpi.on(\"tool_call\", (event) => {\n\t\trestoration.trackToolCall(restorationState, event);\n\t});\n\n\t// The reload path retires this extension generation right after this event\n\t// (`AgentSession.reload()` invalidates the old runner), so stand the idle\n\t// warm-up watcher down here rather than leaving a timer armed against a\n\t// context that is about to start throwing on every read.\n\tpi.on(\"session_shutdown\", () => {\n\t\tsessionIdleSinceAgentEnd = false;\n\t\tcancelIdleWarmupRetry();\n\t\tidleWarmupAttempt = 0;\n\t\tspeculativeJob?.controller.abort();\n\t\tspeculativeJob = undefined;\n\t});\n}\n"]}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* entry, so the SDK's native compactions stay visible in senpi history.
|
|
16
16
|
*/
|
|
17
17
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
18
|
+
import type { CompactionReason } from "../../types.ts";
|
|
18
19
|
import type { ClaudeSdkOauthProviderSettings } from "../claude-sdk-oauth/settings.ts";
|
|
19
20
|
/** Custom session entry type carrying a mirrored SDK compaction boundary. */
|
|
20
21
|
export declare const CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE = "claude-sdk-oauth-compact";
|
|
@@ -51,6 +52,8 @@ export interface LaneContext {
|
|
|
51
52
|
export interface CompactionLanePolicy {
|
|
52
53
|
/** True when the SDK owns this lane's context and senpi compaction must stand down. */
|
|
53
54
|
disablesSenpiCompaction(context: LaneContext): boolean;
|
|
55
|
+
/** Manual requests are explicitly owned by senpi for recovery, even on SDK lanes. */
|
|
56
|
+
ownsCompaction(context: LaneContext, reason: CompactionReason): boolean;
|
|
54
57
|
}
|
|
55
58
|
export interface CompactBoundaryEntry {
|
|
56
59
|
schema: typeof COMPACT_BOUNDARY_SCHEMA;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/lane-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"lane-policy.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/lane-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AAGtF,6EAA6E;AAC7E,eAAO,MAAM,mCAAmC,6BAA6B,CAAC;AAC9E,mFAAmF;AACnF,eAAO,MAAM,4CAA4C,sCAAsC,CAAC;AAChG;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,0DAA0D,CAAC;AACxG,QAAA,MAAM,uBAAuB,+CAA+C,CAAC;AAE7E,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,0FAA0F;IAC1F,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,MAAM;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,oBAAoB;IACpC,uFAAuF;IACvF,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;IACvD,qFAAqF;IACrF,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACxE;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,GAAE;IAAE,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,8BAA8B,CAAA;CAAO,GACtF,oBAAoB,CAoCtB;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,GAAG,SAAS,CAW5F;AAQD,kFAAkF;AAClF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,oBAAoB,EAAE,CAQ3F"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-scoped compaction opt-out for the `claude-sdk-oauth` main lane.
|
|
3
|
+
*
|
|
4
|
+
* That lane keeps one resident SDK session per senpi session, and the Claude
|
|
5
|
+
* Agent SDK runs its own native auto-compaction over that session's transcript.
|
|
6
|
+
* Running senpi's compaction on top of it would rewrite a history senpi no
|
|
7
|
+
* longer owns, so senpi stands down for the lane: no auto-compaction triggers,
|
|
8
|
+
* no context reduction. Every other provider is untouched.
|
|
9
|
+
*
|
|
10
|
+
* The stand-down is conditional on the lane actually being resident: with the
|
|
11
|
+
* `resumeMode: "off"` escape hatch senpi flattens its own history into every
|
|
12
|
+
* request, so senpi's compaction must stay fully active there.
|
|
13
|
+
*
|
|
14
|
+
* This module also owns the shape of the mirrored `compact_boundary` ledger
|
|
15
|
+
* entry, so the SDK's native compactions stay visible in senpi history.
|
|
16
|
+
*/
|
|
1
17
|
import { CLAUDE_SDK_OAUTH_PROVIDER_ID } from "../claude-sdk-oauth/account-management.js";
|
|
2
18
|
import { loadClaudeSdkOauthProviderSettingsFromDisk } from "../claude-sdk-oauth/settings.js";
|
|
3
19
|
/** Custom session entry type carrying a mirrored SDK compaction boundary. */
|
|
@@ -32,31 +48,39 @@ export function createCompactionLanePolicy(options = {}) {
|
|
|
32
48
|
const load = options.loadProviderSettings ?? loadClaudeSdkOauthProviderSettingsFromDisk;
|
|
33
49
|
let cachedCwd;
|
|
34
50
|
let cachedResumeMode;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
51
|
+
// Declared as a local so `ownsCompaction` never depends on `this`: the policy object
|
|
52
|
+
// is routinely destructured at call sites, which would otherwise unbind the receiver.
|
|
53
|
+
const disablesSenpiCompaction = (context) => {
|
|
54
|
+
if (context.model?.provider !== CLAUDE_SDK_OAUTH_PROVIDER_ID)
|
|
55
|
+
return false;
|
|
56
|
+
// A configured compaction model override makes senpi own summarization
|
|
57
|
+
// for the lane, so the SDK-native stand-down no longer applies. This is
|
|
58
|
+
// the escape hatch for lanes whose SDK never fires native compaction.
|
|
59
|
+
if (context.getCompactionSettings?.().model)
|
|
60
|
+
return false;
|
|
61
|
+
// Per-cwd cache is the intended contract (pinned by lane-policy.test.ts):
|
|
62
|
+
// resumeMode is read once per cwd. A mid-session switch takes effect on
|
|
63
|
+
// the next cwd or session.
|
|
64
|
+
if (cachedCwd !== context.cwd) {
|
|
65
|
+
try {
|
|
66
|
+
cachedResumeMode = load(context.cwd).resumeMode;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// A settings read failure must never silently disable senpi compaction:
|
|
70
|
+
// fail closed by keeping senpi's own compaction fully active.
|
|
71
|
+
cachedCwd = undefined;
|
|
43
72
|
return false;
|
|
44
|
-
// Per-cwd cache is the intended contract (pinned by lane-policy.test.ts):
|
|
45
|
-
// resumeMode is read once per cwd. A mid-session switch takes effect on
|
|
46
|
-
// the next cwd or session.
|
|
47
|
-
if (cachedCwd !== context.cwd) {
|
|
48
|
-
try {
|
|
49
|
-
cachedResumeMode = load(context.cwd).resumeMode;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// A settings read failure must never silently disable senpi compaction:
|
|
53
|
-
// fail closed by keeping senpi's own compaction fully active.
|
|
54
|
-
cachedCwd = undefined;
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
cachedCwd = context.cwd;
|
|
58
73
|
}
|
|
59
|
-
|
|
74
|
+
cachedCwd = context.cwd;
|
|
75
|
+
}
|
|
76
|
+
return isSdkNativeCompactionLane({ model: context.model, resumeMode: cachedResumeMode });
|
|
77
|
+
};
|
|
78
|
+
return {
|
|
79
|
+
disablesSenpiCompaction,
|
|
80
|
+
ownsCompaction(context, reason) {
|
|
81
|
+
// Manual is senpi-owned everywhere: it is the user's explicit recovery path,
|
|
82
|
+
// including on an SDK-native lane whose automatic routes stay SDK-owned.
|
|
83
|
+
return reason === "manual" || !disablesSenpiCompaction(context);
|
|
60
84
|
},
|
|
61
85
|
};
|
|
62
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lane-policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/lane-policy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Provider-scoped compaction opt-out for the `claude-sdk-oauth` main lane.\n *\n * That lane keeps one resident SDK session per senpi session, and the Claude\n * Agent SDK runs its own native auto-compaction over that session's transcript.\n * Running senpi's compaction on top of it would rewrite a history senpi no\n * longer owns, so senpi stands down for the lane: no auto-compaction triggers,\n * no context reduction. Every other provider is untouched.\n *\n * The stand-down is conditional on the lane actually being resident: with the\n * `resumeMode: \"off\"` escape hatch senpi flattens its own history into every\n * request, so senpi's compaction must stay fully active there.\n *\n * This module also owns the shape of the mirrored `compact_boundary` ledger\n * entry, so the SDK's native compactions stay visible in senpi history.\n */\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessageDiagnostic } from \"@earendil-works/pi-ai\";\nimport { CLAUDE_SDK_OAUTH_PROVIDER_ID } from \"../claude-sdk-oauth/account-management.ts\";\nimport type { ClaudeSdkOauthProviderSettings } from \"../claude-sdk-oauth/settings.ts\";\nimport { loadClaudeSdkOauthProviderSettingsFromDisk } from \"../claude-sdk-oauth/settings.ts\";\n\n/** Custom session entry type carrying a mirrored SDK compaction boundary. */\nexport const CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE = \"claude-sdk-oauth-compact\";\n/** Assistant-message diagnostic the lane uses to transport a received boundary. */\nexport const CLAUDE_SDK_OAUTH_COMPACT_BOUNDARY_DIAGNOSTIC = \"claude_sdk_oauth_compact_boundary\";\n/**\n * Reason reported when senpi declines to compact an SDK-native lane. The\n * `external-owner` rejection cause carries the machine-readable policy while\n * this string is what the user and the compaction log see.\n */\nexport const SDK_NATIVE_LANE_REJECTION_REASON = \"the Claude Agent SDK owns compaction for this session\";\nconst COMPACT_BOUNDARY_SCHEMA = \"senpi.claude-sdk-oauth.compact-boundary.v1\";\n\nexport interface LaneModel {\n\tprovider?: string;\n}\n\nexport interface SdkNativeLaneInput {\n\tmodel: LaneModel | undefined;\n\t/** Resolved `claudeSdkOauthProvider.resumeMode`; `undefined` means the \"auto\" default. */\n\tresumeMode?: string;\n}\n\nexport interface LaneContext {\n\tcwd: string;\n\tmodel: LaneModel | undefined;\n\t/**\n\t * Optional resolved-settings getter (present on the real ExtensionContext).\n\t * Used to read a configured `compaction.model` override. When an override is\n\t * set the lane hands summarization to a senpi-owned model, so the SDK-native\n\t * stand-down no longer applies even with a resident SDK session.\n\t */\n\tgetCompactionSettings?: () => { model?: string };\n}\n\nexport interface CompactionLanePolicy {\n\t/** True when the SDK owns this lane's context and senpi compaction must stand down. */\n\tdisablesSenpiCompaction(context: LaneContext): boolean;\n}\n\nexport interface CompactBoundaryEntry {\n\tschema: typeof COMPACT_BOUNDARY_SCHEMA;\n\tsdkSessionId: string;\n\tuuid: string;\n\tcompactMetadata: Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Pure lane predicate. Kept separate from {@link createCompactionLanePolicy} so\n * callers that already know the resolved resume mode never touch disk.\n */\nexport function isSdkNativeCompactionLane(input: SdkNativeLaneInput): boolean {\n\tif (input.model?.provider !== CLAUDE_SDK_OAUTH_PROVIDER_ID) return false;\n\treturn input.resumeMode !== \"off\";\n}\n\n/**\n * Per-extension-instance policy holding one memoized provider-settings read.\n * Settings are only read when the active model actually belongs to the lane, so\n * other providers never pay for the lookup.\n */\nexport function createCompactionLanePolicy(\n\toptions: { loadProviderSettings?: (cwd: string) => ClaudeSdkOauthProviderSettings } = {},\n): CompactionLanePolicy {\n\tconst load = options.loadProviderSettings ?? loadClaudeSdkOauthProviderSettingsFromDisk;\n\tlet cachedCwd: string | undefined;\n\tlet cachedResumeMode: string | undefined;\n\treturn {\n\t\tdisablesSenpiCompaction(context: LaneContext): boolean {\n\t\t\tif (context.model?.provider !== CLAUDE_SDK_OAUTH_PROVIDER_ID) return false;\n\t\t\t// A configured compaction model override makes senpi own summarization\n\t\t\t// for the lane, so the SDK-native stand-down no longer applies. This is\n\t\t\t// the escape hatch for lanes whose SDK never fires native compaction.\n\t\t\tif (context.getCompactionSettings?.().model) return false;\n\t\t\t// Per-cwd cache is the intended contract (pinned by lane-policy.test.ts):\n\t\t\t// resumeMode is read once per cwd. A mid-session switch takes effect on\n\t\t\t// the next cwd or session.\n\t\t\tif (cachedCwd !== context.cwd) {\n\t\t\t\ttry {\n\t\t\t\t\tcachedResumeMode = load(context.cwd).resumeMode;\n\t\t\t\t} catch {\n\t\t\t\t\t// A settings read failure must never silently disable senpi compaction:\n\t\t\t\t\t// fail closed by keeping senpi's own compaction fully active.\n\t\t\t\t\tcachedCwd = undefined;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcachedCwd = context.cwd;\n\t\t\t}\n\t\t\treturn isSdkNativeCompactionLane({ model: context.model, resumeMode: cachedResumeMode });\n\t\t},\n\t};\n}\n\n/** Parse an SDK `compact_boundary` system message into the senpi ledger payload. */\nexport function parseCompactBoundaryMessage(value: unknown): CompactBoundaryEntry | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (value.type !== \"system\" || value.subtype !== \"compact_boundary\") return undefined;\n\tif (typeof value.session_id !== \"string\" || typeof value.uuid !== \"string\") return undefined;\n\tif (!isRecord(value.compact_metadata)) return undefined;\n\treturn {\n\t\tschema: COMPACT_BOUNDARY_SCHEMA,\n\t\tsdkSessionId: value.session_id,\n\t\tuuid: value.uuid,\n\t\tcompactMetadata: { ...value.compact_metadata },\n\t};\n}\n\nfunction messageDiagnostics(message: AgentMessage): readonly AssistantMessageDiagnostic[] {\n\tif (message.role !== \"assistant\") return [];\n\tconst diagnostics = message.diagnostics;\n\treturn Array.isArray(diagnostics) ? diagnostics : [];\n}\n\n/** Collect every compaction boundary the lane attached to a finalized message. */\nexport function collectCompactBoundaryEntries(message: AgentMessage): CompactBoundaryEntry[] {\n\tconst entries: CompactBoundaryEntry[] = [];\n\tfor (const diagnostic of messageDiagnostics(message)) {\n\t\tif (diagnostic.type !== CLAUDE_SDK_OAUTH_COMPACT_BOUNDARY_DIAGNOSTIC) continue;\n\t\tconst entry = parseCompactBoundaryMessage(diagnostic.details);\n\t\tif (entry) entries.push(entry);\n\t}\n\treturn entries;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lane-policy.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/lane-policy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Provider-scoped compaction opt-out for the `claude-sdk-oauth` main lane.\n *\n * That lane keeps one resident SDK session per senpi session, and the Claude\n * Agent SDK runs its own native auto-compaction over that session's transcript.\n * Running senpi's compaction on top of it would rewrite a history senpi no\n * longer owns, so senpi stands down for the lane: no auto-compaction triggers,\n * no context reduction. Every other provider is untouched.\n *\n * The stand-down is conditional on the lane actually being resident: with the\n * `resumeMode: \"off\"` escape hatch senpi flattens its own history into every\n * request, so senpi's compaction must stay fully active there.\n *\n * This module also owns the shape of the mirrored `compact_boundary` ledger\n * entry, so the SDK's native compactions stay visible in senpi history.\n */\n\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessageDiagnostic } from \"@earendil-works/pi-ai\";\nimport type { CompactionReason } from \"../../types.ts\";\nimport { CLAUDE_SDK_OAUTH_PROVIDER_ID } from \"../claude-sdk-oauth/account-management.ts\";\nimport type { ClaudeSdkOauthProviderSettings } from \"../claude-sdk-oauth/settings.ts\";\nimport { loadClaudeSdkOauthProviderSettingsFromDisk } from \"../claude-sdk-oauth/settings.ts\";\n\n/** Custom session entry type carrying a mirrored SDK compaction boundary. */\nexport const CLAUDE_SDK_OAUTH_COMPACT_ENTRY_TYPE = \"claude-sdk-oauth-compact\";\n/** Assistant-message diagnostic the lane uses to transport a received boundary. */\nexport const CLAUDE_SDK_OAUTH_COMPACT_BOUNDARY_DIAGNOSTIC = \"claude_sdk_oauth_compact_boundary\";\n/**\n * Reason reported when senpi declines to compact an SDK-native lane. The\n * `external-owner` rejection cause carries the machine-readable policy while\n * this string is what the user and the compaction log see.\n */\nexport const SDK_NATIVE_LANE_REJECTION_REASON = \"the Claude Agent SDK owns compaction for this session\";\nconst COMPACT_BOUNDARY_SCHEMA = \"senpi.claude-sdk-oauth.compact-boundary.v1\";\n\nexport interface LaneModel {\n\tprovider?: string;\n}\n\nexport interface SdkNativeLaneInput {\n\tmodel: LaneModel | undefined;\n\t/** Resolved `claudeSdkOauthProvider.resumeMode`; `undefined` means the \"auto\" default. */\n\tresumeMode?: string;\n}\n\nexport interface LaneContext {\n\tcwd: string;\n\tmodel: LaneModel | undefined;\n\t/**\n\t * Optional resolved-settings getter (present on the real ExtensionContext).\n\t * Used to read a configured `compaction.model` override. When an override is\n\t * set the lane hands summarization to a senpi-owned model, so the SDK-native\n\t * stand-down no longer applies even with a resident SDK session.\n\t */\n\tgetCompactionSettings?: () => { model?: string };\n}\n\nexport interface CompactionLanePolicy {\n\t/** True when the SDK owns this lane's context and senpi compaction must stand down. */\n\tdisablesSenpiCompaction(context: LaneContext): boolean;\n\t/** Manual requests are explicitly owned by senpi for recovery, even on SDK lanes. */\n\townsCompaction(context: LaneContext, reason: CompactionReason): boolean;\n}\n\nexport interface CompactBoundaryEntry {\n\tschema: typeof COMPACT_BOUNDARY_SCHEMA;\n\tsdkSessionId: string;\n\tuuid: string;\n\tcompactMetadata: Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Pure lane predicate. Kept separate from {@link createCompactionLanePolicy} so\n * callers that already know the resolved resume mode never touch disk.\n */\nexport function isSdkNativeCompactionLane(input: SdkNativeLaneInput): boolean {\n\tif (input.model?.provider !== CLAUDE_SDK_OAUTH_PROVIDER_ID) return false;\n\treturn input.resumeMode !== \"off\";\n}\n\n/**\n * Per-extension-instance policy holding one memoized provider-settings read.\n * Settings are only read when the active model actually belongs to the lane, so\n * other providers never pay for the lookup.\n */\nexport function createCompactionLanePolicy(\n\toptions: { loadProviderSettings?: (cwd: string) => ClaudeSdkOauthProviderSettings } = {},\n): CompactionLanePolicy {\n\tconst load = options.loadProviderSettings ?? loadClaudeSdkOauthProviderSettingsFromDisk;\n\tlet cachedCwd: string | undefined;\n\tlet cachedResumeMode: string | undefined;\n\t// Declared as a local so `ownsCompaction` never depends on `this`: the policy object\n\t// is routinely destructured at call sites, which would otherwise unbind the receiver.\n\tconst disablesSenpiCompaction = (context: LaneContext): boolean => {\n\t\tif (context.model?.provider !== CLAUDE_SDK_OAUTH_PROVIDER_ID) return false;\n\t\t// A configured compaction model override makes senpi own summarization\n\t\t// for the lane, so the SDK-native stand-down no longer applies. This is\n\t\t// the escape hatch for lanes whose SDK never fires native compaction.\n\t\tif (context.getCompactionSettings?.().model) return false;\n\t\t// Per-cwd cache is the intended contract (pinned by lane-policy.test.ts):\n\t\t// resumeMode is read once per cwd. A mid-session switch takes effect on\n\t\t// the next cwd or session.\n\t\tif (cachedCwd !== context.cwd) {\n\t\t\ttry {\n\t\t\t\tcachedResumeMode = load(context.cwd).resumeMode;\n\t\t\t} catch {\n\t\t\t\t// A settings read failure must never silently disable senpi compaction:\n\t\t\t\t// fail closed by keeping senpi's own compaction fully active.\n\t\t\t\tcachedCwd = undefined;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcachedCwd = context.cwd;\n\t\t}\n\t\treturn isSdkNativeCompactionLane({ model: context.model, resumeMode: cachedResumeMode });\n\t};\n\treturn {\n\t\tdisablesSenpiCompaction,\n\t\townsCompaction(context: LaneContext, reason: CompactionReason): boolean {\n\t\t\t// Manual is senpi-owned everywhere: it is the user's explicit recovery path,\n\t\t\t// including on an SDK-native lane whose automatic routes stay SDK-owned.\n\t\t\treturn reason === \"manual\" || !disablesSenpiCompaction(context);\n\t\t},\n\t};\n}\n\n/** Parse an SDK `compact_boundary` system message into the senpi ledger payload. */\nexport function parseCompactBoundaryMessage(value: unknown): CompactBoundaryEntry | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (value.type !== \"system\" || value.subtype !== \"compact_boundary\") return undefined;\n\tif (typeof value.session_id !== \"string\" || typeof value.uuid !== \"string\") return undefined;\n\tif (!isRecord(value.compact_metadata)) return undefined;\n\treturn {\n\t\tschema: COMPACT_BOUNDARY_SCHEMA,\n\t\tsdkSessionId: value.session_id,\n\t\tuuid: value.uuid,\n\t\tcompactMetadata: { ...value.compact_metadata },\n\t};\n}\n\nfunction messageDiagnostics(message: AgentMessage): readonly AssistantMessageDiagnostic[] {\n\tif (message.role !== \"assistant\") return [];\n\tconst diagnostics = message.diagnostics;\n\treturn Array.isArray(diagnostics) ? diagnostics : [];\n}\n\n/** Collect every compaction boundary the lane attached to a finalized message. */\nexport function collectCompactBoundaryEntries(message: AgentMessage): CompactBoundaryEntry[] {\n\tconst entries: CompactBoundaryEntry[] = [];\n\tfor (const diagnostic of messageDiagnostics(message)) {\n\t\tif (diagnostic.type !== CLAUDE_SDK_OAUTH_COMPACT_BOUNDARY_DIAGNOSTIC) continue;\n\t\tconst entry = parseCompactBoundaryMessage(diagnostic.details);\n\t\tif (entry) entries.push(entry);\n\t}\n\treturn entries;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-end-continuation.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/agent-end-continuation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-end-continuation.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/agent-end-continuation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,UAAU,mBAAmB;IAC5B,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAsB,yBAAyB,CAC9C,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CA8BtB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isMalformedToolUseTurn } from "./continuation.js";
|
|
1
2
|
import { didTerminalProviderErrorEndTurn } from "./terminal-provider-error.js";
|
|
2
3
|
export async function continueGoalAfterAgentEnd(monitor, options) {
|
|
3
4
|
if (options.event.aborted === true && options.event.abortSource === "system") {
|
|
@@ -9,6 +10,16 @@ export async function continueGoalAfterAgentEnd(monitor, options) {
|
|
|
9
10
|
willRetry: options.event.willRetry === true,
|
|
10
11
|
});
|
|
11
12
|
}
|
|
13
|
+
const lastAssistant = [...options.event.messages].reverse().find((message) => message.role === "assistant");
|
|
14
|
+
if (lastAssistant?.role === "assistant" && isMalformedToolUseTurn(lastAssistant)) {
|
|
15
|
+
return monitor.afterProviderFailure({
|
|
16
|
+
ctx: options.ctx,
|
|
17
|
+
event: options.event,
|
|
18
|
+
goal: options.goal,
|
|
19
|
+
messages: options.event.messages,
|
|
20
|
+
willRetry: options.event.willRetry === true,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
12
23
|
if (didTerminalProviderErrorEndTurn(options.event)) {
|
|
13
24
|
return monitor.afterProviderFailure({
|
|
14
25
|
ctx: options.ctx,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-end-continuation.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/agent-end-continuation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-end-continuation.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/goal/agent-end-continuation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAS/E,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,OAAqC,EACrC,OAA4B;IAE5B,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC9E,OAAO,OAAO,CAAC,gBAAgB,CAAC;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI;SAC3C,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC5G,IAAI,aAAa,EAAE,IAAI,KAAK,WAAW,IAAI,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAAC;QAClF,OAAO,OAAO,CAAC,oBAAoB,CAAC;YACnC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI;SAC3C,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,+BAA+B,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,OAAO,CAAC,oBAAoB,CAAC;YACnC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;YAChC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI;SAC3C,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1G,CAAC","sourcesContent":["import type { AgentEndEvent, ExtensionContext } from \"../../types.ts\";\nimport { isMalformedToolUseTurn } from \"./continuation.ts\";\nimport type { MonitorAwareGoalContinuation } from \"./monitor-continuation.ts\";\nimport { didTerminalProviderErrorEndTurn } from \"./terminal-provider-error.ts\";\nimport type { Goal } from \"./types.ts\";\n\ninterface GoalAgentEndOptions {\n\treadonly ctx: ExtensionContext;\n\treadonly event: AgentEndEvent;\n\treadonly goal: Goal | null;\n}\n\nexport async function continueGoalAfterAgentEnd(\n\tmonitor: MonitorAwareGoalContinuation,\n\toptions: GoalAgentEndOptions,\n): Promise<Goal | null> {\n\tif (options.event.aborted === true && options.event.abortSource === \"system\") {\n\t\treturn monitor.afterSystemAbort({\n\t\t\tctx: options.ctx,\n\t\t\tevent: options.event,\n\t\t\tgoal: options.goal,\n\t\t\tmessages: options.event.messages,\n\t\t\twillRetry: options.event.willRetry === true,\n\t\t});\n\t}\n\tconst lastAssistant = [...options.event.messages].reverse().find((message) => message.role === \"assistant\");\n\tif (lastAssistant?.role === \"assistant\" && isMalformedToolUseTurn(lastAssistant)) {\n\t\treturn monitor.afterProviderFailure({\n\t\t\tctx: options.ctx,\n\t\t\tevent: options.event,\n\t\t\tgoal: options.goal,\n\t\t\tmessages: options.event.messages,\n\t\t\twillRetry: options.event.willRetry === true,\n\t\t});\n\t}\n\tif (didTerminalProviderErrorEndTurn(options.event)) {\n\t\treturn monitor.afterProviderFailure({\n\t\t\tctx: options.ctx,\n\t\t\tevent: options.event,\n\t\t\tgoal: options.goal,\n\t\t\tmessages: options.event.messages,\n\t\t\twillRetry: options.event.willRetry === true,\n\t\t});\n\t}\n\treturn monitor.afterAgentEnd({ ctx: options.ctx, goal: options.goal, messages: options.event.messages });\n}\n"]}
|