@code-yeongyu/senpi 2026.9.15-2 → 2026.9.16-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/README.md +1 -1
- package/dist/core/agent-session.d.ts +28 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +111 -13
- 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 +4 -2
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/stream-watchdog.d.ts +56 -2
- package/dist/core/compaction/stream-watchdog.d.ts.map +1 -1
- package/dist/core/compaction/stream-watchdog.js +93 -15
- package/dist/core/compaction/stream-watchdog.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.d.ts +6 -0
- 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 +17 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-binding.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.d.ts +4 -1
- 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 +31 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-continuity.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts +2 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js +16 -0
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-reattach.js.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.d.ts.map +1 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.js +19 -8
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-registry-wiring.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 +2 -1
- package/dist/core/extensions/builtin/claude-sdk-oauth/session-stream.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts +13 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js +66 -2
- package/dist/core/extensions/builtin/compaction/deterministic-fallback.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/index.js +16 -10
- package/dist/core/extensions/builtin/compaction/index.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative-summary.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative-summary.js +4 -2
- package/dist/core/extensions/builtin/compaction/speculative-summary.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts +8 -1
- package/dist/core/extensions/builtin/compaction/speculative.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/speculative.js +31 -7
- package/dist/core/extensions/builtin/compaction/speculative.js.map +1 -1
- package/dist/core/extensions/builtin/compaction/transient-failure.d.ts.map +1 -1
- package/dist/core/extensions/builtin/compaction/transient-failure.js +6 -3
- package/dist/core/extensions/builtin/compaction/transient-failure.js.map +1 -1
- package/dist/core/extensions/kernel-tools-context.d.ts +13 -0
- package/dist/core/extensions/kernel-tools-context.d.ts.map +1 -0
- package/dist/core/extensions/kernel-tools-context.js +3 -0
- package/dist/core/extensions/kernel-tools-context.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +19 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +103 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +21 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +5 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/retry-fallback/settings.d.ts +3 -0
- package/dist/core/retry-fallback/settings.d.ts.map +1 -1
- package/dist/core/retry-fallback/settings.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +27 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +78 -5
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-resident-store.d.ts +33 -7
- package/dist/core/session-resident-store.d.ts.map +1 -1
- package/dist/core/session-resident-store.js +163 -14
- package/dist/core/session-resident-store.js.map +1 -1
- package/dist/core/session-write-reservation.d.ts +6 -0
- package/dist/core/session-write-reservation.d.ts.map +1 -1
- package/dist/core/session-write-reservation.js +19 -0
- package/dist/core/session-write-reservation.js.map +1 -1
- package/dist/core/settings-manager.d.ts +35 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +62 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +4 -3
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/read.d.ts +3 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +16 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-render-descriptors.js +12 -5
- package/dist/modes/interactive/components/assistant-render-descriptors.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +2 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +5 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +19 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +66 -14
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/tips/catalog/session-tips.js +1 -1
- package/dist/modes/interactive/tips/catalog/session-tips.js.map +1 -1
- package/dist/modes/interactive/working-status.d.ts +3 -2
- package/dist/modes/interactive/working-status.d.ts.map +1 -1
- package/dist/modes/interactive/working-status.js +17 -4
- package/dist/modes/interactive/working-status.js.map +1 -1
- package/dist/modes/print-mode.d.ts +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +5 -1
- package/dist/modes/print-mode.js.map +1 -1
- package/docs/extensions.md +5 -2
- package/docs/keybindings.md +1 -0
- package/docs/session-format.md +1 -1
- package/docs/sessions.md +3 -3
- package/docs/settings.md +31 -1
- package/docs/usage.md +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +35 -0
- package/node_modules/@code-yeongyu/senpi-codemode/README.md +24 -0
- package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/http-server.ts +7 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/kernel-tools-protocol.ts +85 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridge/protocol.ts +6 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/bridges/agent-bridge.ts +30 -11
- package/node_modules/@code-yeongyu/senpi-codemode/src/extension/session-manager.ts +11 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/index.ts +10 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/prelude.jl +46 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/jl/runner.jl +1 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/context-manager.ts +29 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-contract.ts +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.d.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-context.js +7 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.d.ts +10 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-define.js +12 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.js +22 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-errors.ts +26 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-host.ts +134 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-naming.js +28 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.d.ts +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-parse.js +255 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-pump.js +105 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.d.ts +27 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-registry.js +127 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-schema.js +69 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/kernel-tools-types.ts +42 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/prelude.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-core.js +26 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-runtime.js +20 -8
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-slot.ts +6 -1
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/worker-startup.ts +9 -7
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/js/workpool.js +37 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/kernel-tools-unavailable.ts +5 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/kernel.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/py/prelude.py +57 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/prelude.rb +13 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/rb/workpool.rb +38 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-kernel.ts +13 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/kernels/shared/subprocess-queue.ts +2 -0
- package/node_modules/@code-yeongyu/senpi-codemode/src/prompt/eval-prompt-template.ts +4 -2
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/cell-handler.ts +31 -3
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/run-eval-cell.ts +52 -30
- package/node_modules/@code-yeongyu/senpi-codemode/src/tool/types.ts +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js +30 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts +5 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.js +2 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/agent.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 +51 -12
- 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/harness/tools/read.d.ts +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js +18 -3
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/tools/read.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts +4 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js +268 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/brace-scanner.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts +18 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js +69 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/header-protection.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts +27 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js +118 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/index.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts +21 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js +24 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-context.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts +12 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js +92 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/lexical-spans.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts +47 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js +8 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/read-folders/types.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts +52 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js +155 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/segmented-read-view.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.d.ts +4 -0
- 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 +3 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-throughput-watchdog.d.ts +101 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-throughput-watchdog.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-throughput-watchdog.js +178 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/stream-throughput-watchdog.js.map +1 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts +9 -0
- package/node_modules/@earendil-works/pi-agent-core/dist/types.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/dist/types.js.map +1 -1
- package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/index.js +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/index.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/providers/data/alibaba-token-plan.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/fireworks.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/qwen-token-plan.json +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.d.ts +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.d.ts.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js +15 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/empty-response-errors.js.map +1 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts +24 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.d.ts.map +1 -1
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js +92 -0
- package/node_modules/@earendil-works/pi-ai/dist/utils/retry.js.map +1 -1
- package/node_modules/@earendil-works/pi-ai/package.json +2 -2
- package/node_modules/@earendil-works/pi-pty/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":"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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"]}
|
|
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,EAEhC,sCAAsC,EACtC,yCAAyC,EAEzC,+BAA+B,GAC/B,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,4BAA4B,GAAuC,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,SAAS,yBAAyB,CACjC,GAAqB,EACrB,QAAuC,EACvC,WAA8C,EAC9C,KAAc;QAEd,MAAM,WAAW,GAAoC,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,gCAAgC,CAClD,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,aAAa,EACtB,WAAW,EACX,EAAE,UAAU,EAAE,0BAA0B,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,EACxE,QAAQ,CAAC,aAAa,EACtB,WAAW,CACX,CAAC;QACF,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,eAAe,EAAE,yCAAyC,CAAC,WAAW,CAAC,EAAE,CAAC;QACpG,uEAAuE;QACvE,0EAA0E;QAC1E,gEAAgE;QAChE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,sCAAsC,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACrF,OAAO,EAAE,UAAU,EAAE,CAAC;IACvB,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,MAAM,WAAW,GAAG,yCAAyC,CAAC,gBAAgB,CAAC,CAAC;oBAChF,IACC,WAAW,KAAK,SAAS;wBACzB,CAAC,cAAc,EAAE,OAAO;wBACxB,UAAU,CAAC,QAAQ,CAAC,UAAU,KAAK,qBAAqB;wBACxD,UAAU,CAAC,QAAQ,CAAC,gBAAgB,KAAK,GAAG,CAAC,kBAAkB,EAAE,EAChE,CAAC;wBACF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;wBACpG,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;wBACjC,IAAI,CAAC,UAAU,EAAE,CAAC;4BACjB,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAW,CAAC;4BAC7D,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;4BAC7E,OAAO,MAAM,CAAC;wBACf,CAAC;oBACF,CAAC;yBAAM,IACN,WAAW,KAAK,SAAS;wBACzB,+BAA+B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC1E,CAAC;wBACF,GAAG,CAAC,aAAa,EAAE,CAAC;4BACnB,MAAM,EAAE,WAAW;4BACnB,MAAM,EAAE,cAAc;4BACtB,OAAO,EAAE,cAAc,EAAE,OAAO;4BAChC,YAAY,EAAE,sBAAsB,+BAA+B,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;yBAC/F,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,MAAM,WAAW,GAAG,yCAAyC,CAAC,KAAK,CAAC,CAAC;gBACrE,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;oBAC3D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC9E,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBACjC,IAAI,CAAC,UAAU,EAAE,CAAC;wBACjB,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAW,CAAC;wBAC7D,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;wBAC7E,OAAO,MAAM,CAAC;oBACf,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,CAAC,KAAK,YAAY,sBAAsB,CAAC;wBAAE,MAAM,KAAK,CAAC;oBAC5D,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;YACF,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,+BAA+B,CAAC,OAAO,CAAC,EAAE;aAC9E,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,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;QAChD,IAAI,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,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,oBAAuC,CAAC;YAC5C,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;gBACD,IACC,WAAW,KAAK,SAAS;oBACzB,kCAAkC,CAAC,KAAK,CAAC,MAAM,CAAC;oBAChD,yCAAyC,CAAC,WAAW,CAAC,KAAK,SAAS;oBACpE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;oBACrB,qBAAqB,KAAK,iBAAiB;oBAC3C,cAAc,CAAC,QAAQ,CAAC,gBAAgB,KAAK,GAAG,CAAC,kBAAkB,EAAE,EACpE,CAAC;oBACF,oBAAoB,GAAG,WAAW,CAAC;gBACpC,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,IAAI,oBAAoB;oBAAE,MAAM,oBAAoB,CAAC;gBACrD,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,yBAAyB,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC9E,IAAI,QAAQ,CAAC,UAAU;wBAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACpE,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBACxC,OAAO;wBACN,MAAM,EAAE,IAAI;wBACZ,MAAM,EAAE,QAAQ,CAAC,eAAe;qBAChC,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,+BAA+B,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjF,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gCAAgC,+BAA+B,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAC7G,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,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,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\ttype DeterministicFallbackDiagnostic,\n\tformatRequiredCompactionFallbackNotice,\n\tformatRequiredCompactionFallbackRejection,\n\ttype RequiredCompactionFallbackFailure,\n\tstripTurnRetrySuppressionPrefix,\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\tctx: ExtensionContext,\n\t\tsnapshot: SpeculativeCompactionSnapshot,\n\t\tfailureKind: RequiredCompactionFallbackFailure,\n\t\tcause: unknown,\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\tif (!compaction) return { rejectionReason: formatRequiredCompactionFallbackRejection(diagnostics) };\n\t\t// The compaction itself succeeds, so nothing else tells the user their\n\t\t// transcript was reduced without a provider summary. Say it plainly here,\n\t\t// and never with the internal retry-suppression marker (#1741).\n\t\tctx.ui.notify(formatRequiredCompactionFallbackNotice(failureKind, cause), \"warning\");\n\t\treturn { compaction };\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(ctx, pendingJob.snapshot, failureKind, inheritedFailure);\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: ${stripTurnRetrySuppressionPrefix(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(ctx, snapshot, failureKind, error);\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: ${stripTurnRetrySuppressionPrefix(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(ctx, snapshot, failureKind, error);\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: stripTurnRetrySuppressionPrefix(error.message) };\n\t\t\t\t}\n\t\t\t\treturn { cancel: true, reason: `compaction generator failed: ${stripTurnRetrySuppressionPrefix(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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speculative-summary.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACN,KAAK,gBAAgB,EAGrB,KAAK,OAAO,EAEZ,KAAK,eAAe,EAIpB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAKpG,KAAK,0BAA0B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAqC1D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CASvD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAkBD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACrD,OAAO,EAAE,4BAA4B,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,6BAA6B,CAAC;IACxC,IAAI,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;CACF,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"speculative-summary.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative-summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACN,KAAK,gBAAgB,EAGrB,KAAK,OAAO,EAEZ,KAAK,eAAe,EAIpB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,KAAK,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAKpG,KAAK,0BAA0B,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAqC1D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CASvD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAEhF;AAkBD,wBAAsB,sBAAsB,CAAC,OAAO,EAAE;IACrD,OAAO,EAAE,4BAA4B,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,6BAA6B,CAAC;IACxC,IAAI,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;CACF,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAoE/B"}
|
|
@@ -114,7 +114,9 @@ export async function generateSummaryMessage(options) {
|
|
|
114
114
|
...summarizationReasoningOptions(options.snapshot.model),
|
|
115
115
|
...(options.forbidToolCalls ? { toolChoice: "none" } : {}),
|
|
116
116
|
});
|
|
117
|
-
|
|
117
|
+
// Settlement rides inside the watchdog: a provider whose iterator ends
|
|
118
|
+
// without a terminal event used to park here with every timer cleared.
|
|
119
|
+
return await consumeStreamWithIdleTimeout(responseStream, {
|
|
118
120
|
idleTimeoutMs: DEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS,
|
|
119
121
|
maxDurationMs,
|
|
120
122
|
abort: () => requestController.abort(),
|
|
@@ -124,8 +126,8 @@ export async function generateSummaryMessage(options) {
|
|
|
124
126
|
options.onProgress?.(event.delta);
|
|
125
127
|
}
|
|
126
128
|
},
|
|
129
|
+
settle: async () => await responseStream.result(),
|
|
127
130
|
});
|
|
128
|
-
return await responseStream.result();
|
|
129
131
|
}
|
|
130
132
|
finally {
|
|
131
133
|
if (options.signal)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speculative-summary.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative-summary.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\ttype AssistantMessageEventStream,\n\ttype Context,\n\ttype Message,\n\ttype Model,\n\ttype ProviderHeaders,\n\ttype StreamOptions,\n\tsanitizeAnthropicToolPairs as sanitizeAnthropicPayload,\n\ttype TextContent,\n} from \"@earendil-works/pi-ai\";\nimport { stream } from \"@earendil-works/pi-ai/compat\";\nimport { estimateTokens } from \"../../../compaction/compaction.ts\";\nimport {\n\tconsumeStreamWithIdleTimeout,\n\tDEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS,\n\tsummarizationMaxDurationMs,\n} from \"../../../compaction/stream-watchdog.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport type { buildPrompt } from \"./prompts.ts\";\nimport { repairOrphanedToolResults } from \"./repair-tool-pairs.ts\";\nimport type { SpeculativeCompactionContext, SpeculativeCompactionSnapshot } from \"./speculative.ts\";\nimport { normalizeSummarizationTurnOrder } from \"./summarization-turn-order.ts\";\n\nconst SUMMARY_TOKEN_HEADROOM = 32_768;\nconst SUMMARY_CONTEXT_WINDOW_RESERVE_RATIO = 0.5;\ntype CompactionProgressCallback = (delta: string) => void;\n\nfunction summaryMaxTokens(model: Model<any>, contextWindow: number): number {\n\tconst headroom = model.maxTokens > 0 ? Math.min(SUMMARY_TOKEN_HEADROOM, model.maxTokens) : SUMMARY_TOKEN_HEADROOM;\n\tif (contextWindow > 0) {\n\t\treturn Math.min(headroom, Math.floor(contextWindow * SUMMARY_CONTEXT_WINDOW_RESERVE_RATIO));\n\t}\n\treturn headroom;\n}\n\n/**\n * Reasoning override for summarization requests. Compaction must be fast: a\n * summarization request that inherits the provider's default reasoning mode\n * burns its latency (and output budget) on invisible thinking before emitting\n * the summary. Disable or minimize reasoning per wire family; adapters ignore\n * options their provider does not support. Mirrors how OpenAI Codex keeps its\n * compaction turn cheap.\n */\nfunction summarizationReasoningOptions(model: Model<any>): Record<string, unknown> {\n\tif (!model.reasoning) return {};\n\tif (model.api === \"anthropic-messages\") return { thinkingEnabled: false };\n\tconst reasoningEffort = ([\"low\", \"medium\", \"high\"] as const).find(\n\t\t(level) => model.thinkingLevelMap?.[level] !== null,\n\t);\n\tif (!reasoningEffort) return {};\n\tswitch (model.api) {\n\t\tcase \"openai-responses\":\n\t\tcase \"openai-codex-responses\":\n\t\tcase \"azure-openai-responses\":\n\t\t\treturn { reasoningEffort, reasoningSummary: null };\n\t\tcase \"openai-completions\":\n\t\t\treturn { reasoningEffort };\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\nexport function getSummaryText(message: Message): string {\n\tconst content = Array.isArray(message.content)\n\t\t? message.content\n\t\t: [{ type: \"text\" as const, text: message.content }];\n\treturn content\n\t\t.filter((content): content is TextContent => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\nexport function isAssistantMessage(message: Message): message is AssistantMessage {\n\treturn message.role === \"assistant\" && \"stopReason\" in message;\n}\n\n/**\n * Providers registered through `pi.registerProvider()` (claude-sdk-oauth, Kiro, any\n * extension provider) exist only in Senpi's ModelRuntime, never in compat's builtin\n * api-registry, which rejects their api id outright. Dispatch through the runtime\n * whenever it is reachable and keep compat for contexts constructed without a registry.\n */\nfunction summarizationStream(\n\tcontext: SpeculativeCompactionContext,\n\tmodel: Model<any>,\n\trequestContext: Context,\n\toptions: StreamOptions & Record<string, unknown>,\n): AssistantMessageEventStream {\n\tconst runtime = context.modelRegistry?.modelRuntime;\n\treturn runtime ? runtime.stream(model, requestContext, options) : stream(model, requestContext, options);\n}\n\nexport async function generateSummaryMessage(options: {\n\tcontext: SpeculativeCompactionContext;\n\tforbidToolCalls?: boolean;\n\t/** Resolved per-attempt duration budget; falls back to the size-adaptive default. */\n\tmaxDurationMs?: number;\n\tmessages: AgentMessage[];\n\tonProgress?: CompactionProgressCallback;\n\tprompt: ReturnType<typeof buildPrompt>;\n\tsignal?: AbortSignal;\n\tsnapshot: SpeculativeCompactionSnapshot;\n\tauth: {\n\t\tapiKey?: string;\n\t\theaders?: ProviderHeaders;\n\t\textraBody?: Record<string, unknown>;\n\t};\n}): Promise<Message | undefined> {\n\t// Send the conversation as native LLM messages with the summarization\n\t// instruction as a trailing user message, mirroring normal agent traffic.\n\t// A single serialized `<conversation>` text dump of a large session is\n\t// deterministically refused by Anthropic's anti-distillation classifier\n\t// (\"reverse engineering or duplicating model outputs\"), while the same\n\t// content as native blocks with the agent's system prompt and tools passes.\n\t// Request-local controller: the idle watchdog must be able to tear down a\n\t// stalled summarization request without aborting the caller's own signal.\n\tconst requestController = new AbortController();\n\tconst onCallerAbort = () => requestController.abort(options.signal?.reason);\n\tif (options.signal) {\n\t\tif (options.signal.aborted) onCallerAbort();\n\t\telse options.signal.addEventListener(\"abort\", onCallerAbort, { once: true });\n\t}\n\ttry {\n\t\tconst requestMessages: AgentMessage[] = [\n\t\t\t...options.messages,\n\t\t\t{\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [{ type: \"text\", text: options.prompt.user }],\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t},\n\t\t];\n\t\tconst maxDurationMs =\n\t\t\toptions.maxDurationMs ??\n\t\t\tsummarizationMaxDurationMs(requestMessages.reduce((total, message) => total + estimateTokens(message), 0));\n\t\tconst providerRequest = await options.context.prepareProviderRequest?.(requestMessages);\n\t\tconst requestContext = {\n\t\t\tsystemPrompt: options.snapshot.systemPrompt ?? options.prompt.system,\n\t\t\tmessages: repairOrphanedToolResults(\n\t\t\t\tnormalizeSummarizationTurnOrder(convertToLlm(providerRequest?.messages ?? requestMessages)),\n\t\t\t),\n\t\t\t...(options.snapshot.tools && options.snapshot.tools.length > 0 ? { tools: options.snapshot.tools } : {}),\n\t\t};\n\t\tconst headers = providerRequest\n\t\t\t? await providerRequest.transformHeaders(options.auth.headers ?? {})\n\t\t\t: options.auth.headers;\n\t\tconst responseStream = summarizationStream(options.context, options.snapshot.model, requestContext, {\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\theaders,\n\t\t\textraBody: options.auth.extraBody,\n\t\t\tonPayload: async (payload, model) => {\n\t\t\t\tconst sanitized = model.api === \"anthropic-messages\" ? sanitizeAnthropicPayload(payload) : payload;\n\t\t\t\treturn providerRequest ? await providerRequest.transformPayload(sanitized) : sanitized;\n\t\t\t},\n\t\t\tmaxTokens: summaryMaxTokens(options.snapshot.model, options.snapshot.contextWindow),\n\t\t\tsignal: requestController.signal,\n\t\t\t...summarizationReasoningOptions(options.snapshot.model),\n\t\t\t...(options.forbidToolCalls ? { toolChoice: \"none\" as const } : {}),\n\t\t});\n\t\tawait consumeStreamWithIdleTimeout(responseStream, {\n\t\t\tidleTimeoutMs: DEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS,\n\t\t\tmaxDurationMs,\n\t\t\tabort: () => requestController.abort(),\n\t\t\tsignal: options.signal,\n\t\t\tonEvent: (event) => {\n\t\t\t\tif (event.type === \"text_delta\" && event.delta) {\n\t\t\t\t\toptions.onProgress?.(event.delta);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t\treturn await responseStream.result();\n\t} finally {\n\t\tif (options.signal) options.signal.removeEventListener(\"abort\", onCallerAbort);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"speculative-summary.js","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative-summary.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport {\n\ttype AssistantMessage,\n\ttype AssistantMessageEventStream,\n\ttype Context,\n\ttype Message,\n\ttype Model,\n\ttype ProviderHeaders,\n\ttype StreamOptions,\n\tsanitizeAnthropicToolPairs as sanitizeAnthropicPayload,\n\ttype TextContent,\n} from \"@earendil-works/pi-ai\";\nimport { stream } from \"@earendil-works/pi-ai/compat\";\nimport { estimateTokens } from \"../../../compaction/compaction.ts\";\nimport {\n\tconsumeStreamWithIdleTimeout,\n\tDEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS,\n\tsummarizationMaxDurationMs,\n} from \"../../../compaction/stream-watchdog.ts\";\nimport { convertToLlm } from \"../../../messages.ts\";\nimport type { buildPrompt } from \"./prompts.ts\";\nimport { repairOrphanedToolResults } from \"./repair-tool-pairs.ts\";\nimport type { SpeculativeCompactionContext, SpeculativeCompactionSnapshot } from \"./speculative.ts\";\nimport { normalizeSummarizationTurnOrder } from \"./summarization-turn-order.ts\";\n\nconst SUMMARY_TOKEN_HEADROOM = 32_768;\nconst SUMMARY_CONTEXT_WINDOW_RESERVE_RATIO = 0.5;\ntype CompactionProgressCallback = (delta: string) => void;\n\nfunction summaryMaxTokens(model: Model<any>, contextWindow: number): number {\n\tconst headroom = model.maxTokens > 0 ? Math.min(SUMMARY_TOKEN_HEADROOM, model.maxTokens) : SUMMARY_TOKEN_HEADROOM;\n\tif (contextWindow > 0) {\n\t\treturn Math.min(headroom, Math.floor(contextWindow * SUMMARY_CONTEXT_WINDOW_RESERVE_RATIO));\n\t}\n\treturn headroom;\n}\n\n/**\n * Reasoning override for summarization requests. Compaction must be fast: a\n * summarization request that inherits the provider's default reasoning mode\n * burns its latency (and output budget) on invisible thinking before emitting\n * the summary. Disable or minimize reasoning per wire family; adapters ignore\n * options their provider does not support. Mirrors how OpenAI Codex keeps its\n * compaction turn cheap.\n */\nfunction summarizationReasoningOptions(model: Model<any>): Record<string, unknown> {\n\tif (!model.reasoning) return {};\n\tif (model.api === \"anthropic-messages\") return { thinkingEnabled: false };\n\tconst reasoningEffort = ([\"low\", \"medium\", \"high\"] as const).find(\n\t\t(level) => model.thinkingLevelMap?.[level] !== null,\n\t);\n\tif (!reasoningEffort) return {};\n\tswitch (model.api) {\n\t\tcase \"openai-responses\":\n\t\tcase \"openai-codex-responses\":\n\t\tcase \"azure-openai-responses\":\n\t\t\treturn { reasoningEffort, reasoningSummary: null };\n\t\tcase \"openai-completions\":\n\t\t\treturn { reasoningEffort };\n\t\tdefault:\n\t\t\treturn {};\n\t}\n}\n\nexport function getSummaryText(message: Message): string {\n\tconst content = Array.isArray(message.content)\n\t\t? message.content\n\t\t: [{ type: \"text\" as const, text: message.content }];\n\treturn content\n\t\t.filter((content): content is TextContent => content.type === \"text\")\n\t\t.map((content) => content.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n}\n\nexport function isAssistantMessage(message: Message): message is AssistantMessage {\n\treturn message.role === \"assistant\" && \"stopReason\" in message;\n}\n\n/**\n * Providers registered through `pi.registerProvider()` (claude-sdk-oauth, Kiro, any\n * extension provider) exist only in Senpi's ModelRuntime, never in compat's builtin\n * api-registry, which rejects their api id outright. Dispatch through the runtime\n * whenever it is reachable and keep compat for contexts constructed without a registry.\n */\nfunction summarizationStream(\n\tcontext: SpeculativeCompactionContext,\n\tmodel: Model<any>,\n\trequestContext: Context,\n\toptions: StreamOptions & Record<string, unknown>,\n): AssistantMessageEventStream {\n\tconst runtime = context.modelRegistry?.modelRuntime;\n\treturn runtime ? runtime.stream(model, requestContext, options) : stream(model, requestContext, options);\n}\n\nexport async function generateSummaryMessage(options: {\n\tcontext: SpeculativeCompactionContext;\n\tforbidToolCalls?: boolean;\n\t/** Resolved per-attempt duration budget; falls back to the size-adaptive default. */\n\tmaxDurationMs?: number;\n\tmessages: AgentMessage[];\n\tonProgress?: CompactionProgressCallback;\n\tprompt: ReturnType<typeof buildPrompt>;\n\tsignal?: AbortSignal;\n\tsnapshot: SpeculativeCompactionSnapshot;\n\tauth: {\n\t\tapiKey?: string;\n\t\theaders?: ProviderHeaders;\n\t\textraBody?: Record<string, unknown>;\n\t};\n}): Promise<Message | undefined> {\n\t// Send the conversation as native LLM messages with the summarization\n\t// instruction as a trailing user message, mirroring normal agent traffic.\n\t// A single serialized `<conversation>` text dump of a large session is\n\t// deterministically refused by Anthropic's anti-distillation classifier\n\t// (\"reverse engineering or duplicating model outputs\"), while the same\n\t// content as native blocks with the agent's system prompt and tools passes.\n\t// Request-local controller: the idle watchdog must be able to tear down a\n\t// stalled summarization request without aborting the caller's own signal.\n\tconst requestController = new AbortController();\n\tconst onCallerAbort = () => requestController.abort(options.signal?.reason);\n\tif (options.signal) {\n\t\tif (options.signal.aborted) onCallerAbort();\n\t\telse options.signal.addEventListener(\"abort\", onCallerAbort, { once: true });\n\t}\n\ttry {\n\t\tconst requestMessages: AgentMessage[] = [\n\t\t\t...options.messages,\n\t\t\t{\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: [{ type: \"text\", text: options.prompt.user }],\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t},\n\t\t];\n\t\tconst maxDurationMs =\n\t\t\toptions.maxDurationMs ??\n\t\t\tsummarizationMaxDurationMs(requestMessages.reduce((total, message) => total + estimateTokens(message), 0));\n\t\tconst providerRequest = await options.context.prepareProviderRequest?.(requestMessages);\n\t\tconst requestContext = {\n\t\t\tsystemPrompt: options.snapshot.systemPrompt ?? options.prompt.system,\n\t\t\tmessages: repairOrphanedToolResults(\n\t\t\t\tnormalizeSummarizationTurnOrder(convertToLlm(providerRequest?.messages ?? requestMessages)),\n\t\t\t),\n\t\t\t...(options.snapshot.tools && options.snapshot.tools.length > 0 ? { tools: options.snapshot.tools } : {}),\n\t\t};\n\t\tconst headers = providerRequest\n\t\t\t? await providerRequest.transformHeaders(options.auth.headers ?? {})\n\t\t\t: options.auth.headers;\n\t\tconst responseStream = summarizationStream(options.context, options.snapshot.model, requestContext, {\n\t\t\tapiKey: options.auth.apiKey,\n\t\t\theaders,\n\t\t\textraBody: options.auth.extraBody,\n\t\t\tonPayload: async (payload, model) => {\n\t\t\t\tconst sanitized = model.api === \"anthropic-messages\" ? sanitizeAnthropicPayload(payload) : payload;\n\t\t\t\treturn providerRequest ? await providerRequest.transformPayload(sanitized) : sanitized;\n\t\t\t},\n\t\t\tmaxTokens: summaryMaxTokens(options.snapshot.model, options.snapshot.contextWindow),\n\t\t\tsignal: requestController.signal,\n\t\t\t...summarizationReasoningOptions(options.snapshot.model),\n\t\t\t...(options.forbidToolCalls ? { toolChoice: \"none\" as const } : {}),\n\t\t});\n\t\t// Settlement rides inside the watchdog: a provider whose iterator ends\n\t\t// without a terminal event used to park here with every timer cleared.\n\t\treturn await consumeStreamWithIdleTimeout(responseStream, {\n\t\t\tidleTimeoutMs: DEFAULT_SUMMARIZATION_IDLE_TIMEOUT_MS,\n\t\t\tmaxDurationMs,\n\t\t\tabort: () => requestController.abort(),\n\t\t\tsignal: options.signal,\n\t\t\tonEvent: (event) => {\n\t\t\t\tif (event.type === \"text_delta\" && event.delta) {\n\t\t\t\t\toptions.onProgress?.(event.delta);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsettle: async (): Promise<Message | undefined> => await responseStream.result(),\n\t\t});\n\t} finally {\n\t\tif (options.signal) options.signal.removeEventListener(\"abort\", onCallerAbort);\n\t}\n}\n"]}
|
|
@@ -59,7 +59,14 @@ export type SummaryRequestFailureKind = "upstream-stream-truncated";
|
|
|
59
59
|
export declare class SummaryRequestError extends Error {
|
|
60
60
|
readonly transient: boolean;
|
|
61
61
|
readonly failureKind?: SummaryRequestFailureKind;
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
|
+
* The provider refused the request (refusal/sensitive stop details) rather
|
|
64
|
+
* than failing it. Carried explicitly because the message text cannot encode
|
|
65
|
+
* it, and because a refusal must never authorize destructive context
|
|
66
|
+
* reduction: dropping older detail would not make the model comply.
|
|
67
|
+
*/
|
|
68
|
+
readonly refused: boolean;
|
|
69
|
+
constructor(message: string, transient: boolean, failureKind?: SummaryRequestFailureKind, refused?: boolean);
|
|
63
70
|
}
|
|
64
71
|
export declare class SummaryGenerationError extends Error {
|
|
65
72
|
readonly kind: "auth" | "empty-summary";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speculative.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAON,KAAK,KAAK,EAEV,KAAK,IAAI,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACN,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAKrB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"speculative.d.ts","sourceRoot":"","sources":["../../../../../src/core/extensions/builtin/compaction/speculative.ts"],"names":[],"mappings":"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"}
|