@ai-agent-forge/agent-forge 0.88.0 → 0.88.1
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 +29 -0
- package/bundled-plugins/agent-loop-policy/agent-forge.json +19 -0
- package/bundled-plugins/agent-loop-policy/dist/entry.d.ts +28 -0
- package/bundled-plugins/agent-loop-policy/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/agent-loop-policy/dist/entry.js +69 -0
- package/bundled-plugins/agent-loop-policy/dist/entry.js.map +1 -0
- package/bundled-plugins/agent-loop-policy/dist/loop-guard.d.ts +199 -0
- package/bundled-plugins/agent-loop-policy/dist/loop-guard.d.ts.map +1 -0
- package/bundled-plugins/agent-loop-policy/dist/loop-guard.js +208 -0
- package/bundled-plugins/agent-loop-policy/dist/loop-guard.js.map +1 -0
- package/bundled-plugins/agent-loop-policy/dist/run-loop-strategy.d.ts +17 -0
- package/bundled-plugins/agent-loop-policy/dist/run-loop-strategy.d.ts.map +1 -0
- package/bundled-plugins/agent-loop-policy/dist/run-loop-strategy.js +18 -0
- package/bundled-plugins/agent-loop-policy/dist/run-loop-strategy.js.map +1 -0
- package/bundled-plugins/agent-loop-policy/plugin.json +7 -0
- package/bundled-plugins/coding-tools/agent-forge.json +19 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/bash.d.ts +5 -44
- package/bundled-plugins/coding-tools/dist/bash.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/bash.js +15 -119
- package/bundled-plugins/coding-tools/dist/bash.js.map +1 -0
- package/bundled-plugins/coding-tools/dist/capability.d.ts +25 -0
- package/bundled-plugins/coding-tools/dist/capability.d.ts.map +1 -0
- package/bundled-plugins/coding-tools/dist/capability.js +98 -0
- package/bundled-plugins/coding-tools/dist/capability.js.map +1 -0
- package/bundled-plugins/coding-tools/dist/config.d.ts +8 -0
- package/bundled-plugins/coding-tools/dist/config.d.ts.map +1 -0
- package/bundled-plugins/coding-tools/dist/config.js +8 -0
- package/bundled-plugins/coding-tools/dist/config.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/edit.d.ts +3 -3
- package/bundled-plugins/coding-tools/dist/edit.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/edit.js +12 -10
- package/bundled-plugins/coding-tools/dist/edit.js.map +1 -0
- package/bundled-plugins/coding-tools/dist/entry.d.ts +14 -0
- package/bundled-plugins/coding-tools/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/coding-tools/dist/entry.js +23 -0
- package/bundled-plugins/coding-tools/dist/entry.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/find.d.ts +4 -4
- package/bundled-plugins/coding-tools/dist/find.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/find.js +10 -8
- package/bundled-plugins/coding-tools/dist/find.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/grep.d.ts +3 -3
- package/bundled-plugins/coding-tools/dist/grep.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/grep.js +10 -8
- package/bundled-plugins/coding-tools/dist/grep.js.map +1 -0
- package/bundled-plugins/coding-tools/dist/index.d.ts +17 -0
- package/bundled-plugins/coding-tools/dist/index.d.ts.map +1 -0
- package/bundled-plugins/coding-tools/dist/index.js +17 -0
- package/bundled-plugins/coding-tools/dist/index.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/ls.d.ts +3 -3
- package/bundled-plugins/coding-tools/dist/ls.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/ls.js +8 -6
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/ls.js.map +1 -1
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/powershell.d.ts +2 -1
- package/bundled-plugins/coding-tools/dist/powershell.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/powershell.js +6 -3
- package/bundled-plugins/coding-tools/dist/powershell.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/read.d.ts +3 -3
- package/bundled-plugins/coding-tools/dist/read.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/read.js +15 -13
- package/bundled-plugins/coding-tools/dist/read.js.map +1 -0
- package/bundled-plugins/coding-tools/dist/types.d.ts +74 -0
- package/bundled-plugins/coding-tools/dist/types.d.ts.map +1 -0
- package/bundled-plugins/coding-tools/dist/types.js +28 -0
- package/bundled-plugins/coding-tools/dist/types.js.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/write.d.ts +2 -2
- package/bundled-plugins/coding-tools/dist/write.d.ts.map +1 -0
- package/{dist/core/tools → bundled-plugins/coding-tools/dist}/write.js +11 -9
- package/bundled-plugins/coding-tools/dist/write.js.map +1 -0
- package/bundled-plugins/coding-tools/plugin.json +10 -0
- package/bundled-plugins/compaction-policy/agent-forge.json +19 -0
- package/bundled-plugins/compaction-policy/dist/branch-summary-policy.d.ts +6 -0
- package/bundled-plugins/compaction-policy/dist/branch-summary-policy.d.ts.map +1 -0
- package/bundled-plugins/compaction-policy/dist/branch-summary-policy.js +19 -0
- package/bundled-plugins/compaction-policy/dist/branch-summary-policy.js.map +1 -0
- package/bundled-plugins/compaction-policy/dist/compaction-policy.d.ts +6 -0
- package/bundled-plugins/compaction-policy/dist/compaction-policy.d.ts.map +1 -0
- package/bundled-plugins/compaction-policy/dist/compaction-policy.js +38 -0
- package/bundled-plugins/compaction-policy/dist/compaction-policy.js.map +1 -0
- package/bundled-plugins/compaction-policy/dist/entry.d.ts +13 -0
- package/bundled-plugins/compaction-policy/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/compaction-policy/dist/entry.js +23 -0
- package/bundled-plugins/compaction-policy/dist/entry.js.map +1 -0
- package/bundled-plugins/compaction-policy/plugin.json +10 -0
- package/bundled-plugins/mcp-http/dist/index.d.ts +8 -0
- package/bundled-plugins/mcp-http/dist/index.d.ts.map +1 -0
- package/bundled-plugins/mcp-http/dist/index.js +8 -0
- package/bundled-plugins/mcp-http/dist/index.js.map +1 -0
- package/bundled-plugins/mcp-http/dist/mcp-http.d.ts.map +1 -0
- package/{dist/plugins → bundled-plugins/mcp-http/dist}/mcp-http.js +1 -1
- package/bundled-plugins/mcp-http/dist/mcp-http.js.map +1 -0
- package/bundled-plugins/overflow-policy/agent-forge.json +19 -0
- package/bundled-plugins/overflow-policy/dist/entry.d.ts +16 -0
- package/bundled-plugins/overflow-policy/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/overflow-policy/dist/entry.js +35 -0
- package/bundled-plugins/overflow-policy/dist/entry.js.map +1 -0
- package/bundled-plugins/overflow-policy/plugin.json +10 -0
- package/bundled-plugins/provider-failover/agent-forge.json +19 -0
- package/bundled-plugins/provider-failover/dist/entry.d.ts +8 -0
- package/bundled-plugins/provider-failover/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/provider-failover/dist/entry.js +8 -0
- package/bundled-plugins/provider-failover/dist/entry.js.map +1 -0
- package/bundled-plugins/provider-failover/dist/provider-failover.d.ts +122 -0
- package/bundled-plugins/provider-failover/dist/provider-failover.d.ts.map +1 -0
- package/{dist/core/extensions → bundled-plugins/provider-failover/dist}/provider-failover.js +143 -56
- package/bundled-plugins/provider-failover/dist/provider-failover.js.map +1 -0
- package/bundled-plugins/provider-failover/plugin.json +7 -0
- package/bundled-plugins/retry-policy/agent-forge.json +19 -0
- package/bundled-plugins/retry-policy/dist/entry.d.ts +16 -0
- package/bundled-plugins/retry-policy/dist/entry.d.ts.map +1 -0
- package/bundled-plugins/retry-policy/dist/entry.js +34 -0
- package/bundled-plugins/retry-policy/dist/entry.js.map +1 -0
- package/bundled-plugins/retry-policy/plugin.json +10 -0
- package/dist/bundle/.build-manifest.json +61 -117
- package/dist/bundle/chunks/{anthropic-messages-ALDZBUKI.js → anthropic-messages-PLAKXR73.js} +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-A2WJWZFB.js → azure-openai-responses-OUWQ2AZD.js} +1 -1
- package/dist/bundle/chunks/{chunk-CIX3FSBK.js → chunk-A3JYRWB6.js} +1 -1
- package/dist/bundle/chunks/{chunk-SQFG22WN.js → chunk-AC2FIS4G.js} +1 -1
- package/dist/bundle/chunks/chunk-AQLNTW2B.js +664 -0
- package/dist/bundle/chunks/chunk-D3ARGZFR.js +13 -0
- package/dist/bundle/chunks/{chunk-YJCQVXW5.js → chunk-HTEVUY7F.js} +1 -1
- package/dist/bundle/chunks/{chunk-Y7HXTASS.js → chunk-HV64ASMT.js} +1 -1
- package/dist/bundle/chunks/chunk-LZOEQITZ.js +855 -0
- package/dist/bundle/chunks/{chunk-7ZY7IXZD.js → chunk-TRDNDS6A.js} +1 -1
- package/dist/bundle/chunks/chunk-Z72JWUZ4.js +4 -0
- package/dist/bundle/chunks/{google-generative-ai-NIB4WONV.js → google-generative-ai-DLII6DAT.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-DCPYUEUO.js → google-vertex-G7BZL7GM.js} +1 -1
- package/dist/bundle/chunks/image-resize-worker.js +2 -2
- package/dist/bundle/chunks/{mistral-conversations-OC6LA5XL.js → mistral-conversations-JXUK24ID.js} +1 -1
- package/dist/bundle/chunks/{openai-codex-responses-IO2X4Y7L.js → openai-codex-responses-5GSGFIPG.js} +1 -1
- package/dist/bundle/chunks/{openai-completions-XYQQHETU.js → openai-completions-EI2I6DTG.js} +1 -1
- package/dist/bundle/chunks/{openai-responses-DLIRN3CI.js → openai-responses-AUJQ3NWT.js} +1 -1
- package/dist/bundle/chunks/{pi-messages-E6RRYBO7.js → pi-messages-PWU2VJMR.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-WF6WRHP7.js +5 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +3 -3
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/capabilities/builtin.d.ts +1 -1
- package/dist/capabilities/builtin.d.ts.map +1 -1
- package/dist/capabilities/builtin.js +5 -0
- package/dist/capabilities/builtin.js.map +1 -1
- package/dist/cli/plugin-command.d.ts.map +1 -1
- package/dist/cli/plugin-command.js +17 -1
- package/dist/cli/plugin-command.js.map +1 -1
- package/dist/config.d.ts +2 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-bash.d.ts +1 -1
- package/dist/core/agent-session-bash.d.ts.map +1 -1
- package/dist/core/agent-session-bash.js +1 -1
- package/dist/core/agent-session-bash.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +14 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +1 -1
- package/dist/core/agent-session-internal.d.ts.map +1 -1
- package/dist/core/agent-session-internal.js.map +1 -1
- package/dist/core/agent-session-loop.d.ts +4 -3
- package/dist/core/agent-session-loop.d.ts.map +1 -1
- package/dist/core/agent-session-loop.js +9 -6
- package/dist/core/agent-session-loop.js.map +1 -1
- package/dist/core/agent-session-retry.d.ts +1 -1
- package/dist/core/agent-session-retry.d.ts.map +1 -1
- package/dist/core/agent-session-retry.js +32 -3
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +30 -9
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tools.d.ts.map +1 -1
- package/dist/core/agent-session-tools.js +5 -1
- package/dist/core/agent-session-tools.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -13
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +56 -34
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.d.ts +23 -151
- package/dist/core/extensions/bootstrap-agent-loop.d.ts.map +1 -1
- package/dist/core/extensions/bootstrap-agent-loop.js +28 -290
- package/dist/core/extensions/bootstrap-agent-loop.js.map +1 -1
- package/dist/core/extensions/capability-runtime-types.d.ts +5 -3
- package/dist/core/extensions/capability-runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-types.js.map +1 -1
- package/dist/core/extensions/capability-runtime.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime.js +42 -6
- package/dist/core/extensions/capability-runtime.js.map +1 -1
- package/dist/core/extensions/index.d.ts +12 -5
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +12 -5
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/virtual-modules.js +65 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-core.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-core.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js +2 -4
- package/dist/core/i18n/locales/zh-cn/core-contract-extensions.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.js +3 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
- package/dist/core/sdk.d.ts +10 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +263 -77
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/tools/bash-operations.d.ts +41 -0
- package/dist/core/tools/bash-operations.d.ts.map +1 -0
- package/dist/core/tools/bash-operations.js +113 -0
- package/dist/core/tools/bash-operations.js.map +1 -0
- package/dist/core/tools/index.d.ts +12 -36
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -117
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/readme-path.d.ts +3 -0
- package/dist/core/tools/readme-path.d.ts.map +1 -0
- package/dist/core/tools/readme-path.js +15 -0
- package/dist/core/tools/readme-path.js.map +1 -0
- package/dist/index.d.ts +3 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -39
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +9 -25
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/plugins/ecosystem/cli.d.ts.map +1 -1
- package/dist/plugins/ecosystem/cli.js +14 -2
- package/dist/plugins/ecosystem/cli.js.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.d.ts +7 -2
- package/dist/plugins/ecosystem/node-npm-registry-source.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-npm-registry-source.js +64 -9
- package/dist/plugins/ecosystem/node-npm-registry-source.js.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-acquisition-host.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-acquisition-host.js +6 -0
- package/dist/plugins/ecosystem/node-plugin-acquisition-host.js.map +1 -1
- package/dist/profiles/builtin-suites.d.ts +5 -1
- package/dist/profiles/builtin-suites.d.ts.map +1 -1
- package/dist/profiles/builtin-suites.js +6 -1
- package/dist/profiles/builtin-suites.js.map +1 -1
- package/examples/extensions/bash-spawn-hook/index.ts +7 -2
- package/examples/extensions/built-in-tool-renderer/index.ts +4 -2
- package/examples/extensions/minimal-mode/index.ts +2 -2
- package/examples/extensions/truncated-tool/index.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +3 -2
- package/dist/bundle/chunks/chunk-6ZKDNZHA.js +0 -145
- package/dist/bundle/chunks/chunk-HLJEVRWP.js +0 -13
- package/dist/bundle/chunks/chunk-YGHQME4V.js +0 -1456
- package/dist/bundle/chunks/virtual-modules-KZ5DRH7Q.js +0 -2
- package/dist/core/extensions/bootstrap-branch-summary-policy.d.ts +0 -7
- package/dist/core/extensions/bootstrap-branch-summary-policy.d.ts.map +0 -1
- package/dist/core/extensions/bootstrap-branch-summary-policy.js +0 -28
- package/dist/core/extensions/bootstrap-branch-summary-policy.js.map +0 -1
- package/dist/core/extensions/bootstrap-compaction-policy.d.ts +0 -7
- package/dist/core/extensions/bootstrap-compaction-policy.d.ts.map +0 -1
- package/dist/core/extensions/bootstrap-compaction-policy.js +0 -48
- package/dist/core/extensions/bootstrap-compaction-policy.js.map +0 -1
- package/dist/core/extensions/bootstrap-overflow-policy.d.ts +0 -7
- package/dist/core/extensions/bootstrap-overflow-policy.d.ts.map +0 -1
- package/dist/core/extensions/bootstrap-overflow-policy.js +0 -30
- package/dist/core/extensions/bootstrap-overflow-policy.js.map +0 -1
- package/dist/core/extensions/bootstrap-retry-policy.d.ts +0 -7
- package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +0 -1
- package/dist/core/extensions/bootstrap-retry-policy.js +0 -29
- package/dist/core/extensions/bootstrap-retry-policy.js.map +0 -1
- package/dist/core/extensions/bootstrap-tools.d.ts +0 -20
- package/dist/core/extensions/bootstrap-tools.d.ts.map +0 -1
- package/dist/core/extensions/bootstrap-tools.js +0 -36
- package/dist/core/extensions/bootstrap-tools.js.map +0 -1
- package/dist/core/extensions/provider-failover.d.ts +0 -110
- package/dist/core/extensions/provider-failover.d.ts.map +0 -1
- package/dist/core/extensions/provider-failover.js.map +0 -1
- package/dist/core/tools/bash.d.ts.map +0 -1
- package/dist/core/tools/bash.js.map +0 -1
- package/dist/core/tools/edit.d.ts.map +0 -1
- package/dist/core/tools/edit.js.map +0 -1
- package/dist/core/tools/find.d.ts.map +0 -1
- package/dist/core/tools/find.js.map +0 -1
- package/dist/core/tools/grep.d.ts.map +0 -1
- package/dist/core/tools/grep.js.map +0 -1
- package/dist/core/tools/ls.d.ts.map +0 -1
- package/dist/core/tools/powershell.d.ts.map +0 -1
- package/dist/core/tools/powershell.js.map +0 -1
- package/dist/core/tools/read.d.ts.map +0 -1
- package/dist/core/tools/read.js.map +0 -1
- package/dist/core/tools/write.d.ts.map +0 -1
- package/dist/core/tools/write.js.map +0 -1
- package/dist/plugins/mcp-http.d.ts.map +0 -1
- package/dist/plugins/mcp-http.js.map +0 -1
- package/dist/profile/child-facade.d.ts +0 -44
- package/dist/profile/child-facade.d.ts.map +0 -1
- package/dist/profile/child-facade.js +0 -56
- package/dist/profile/child-facade.js.map +0 -1
- package/dist/profile/dependency-wiring.d.ts +0 -48
- package/dist/profile/dependency-wiring.d.ts.map +0 -1
- package/dist/profile/dependency-wiring.js +0 -56
- package/dist/profile/dependency-wiring.js.map +0 -1
- package/dist/profile/domain-recovery.d.ts +0 -60
- package/dist/profile/domain-recovery.d.ts.map +0 -1
- package/dist/profile/domain-recovery.js +0 -94
- package/dist/profile/domain-recovery.js.map +0 -1
- package/dist/profile/first-roles.d.ts +0 -30
- package/dist/profile/first-roles.d.ts.map +0 -1
- package/dist/profile/first-roles.js +0 -83
- package/dist/profile/first-roles.js.map +0 -1
- package/dist/profile/goal-plugin.d.ts +0 -38
- package/dist/profile/goal-plugin.d.ts.map +0 -1
- package/dist/profile/goal-plugin.js +0 -132
- package/dist/profile/goal-plugin.js.map +0 -1
- package/dist/profile/plan-plugin.d.ts +0 -44
- package/dist/profile/plan-plugin.d.ts.map +0 -1
- package/dist/profile/plan-plugin.js +0 -157
- package/dist/profile/plan-plugin.js.map +0 -1
- package/dist/profile/policy-manifest.d.ts +0 -53
- package/dist/profile/policy-manifest.d.ts.map +0 -1
- package/dist/profile/policy-manifest.js +0 -53
- package/dist/profile/policy-manifest.js.map +0 -1
- package/dist/profile/role-assembly.d.ts +0 -47
- package/dist/profile/role-assembly.d.ts.map +0 -1
- package/dist/profile/role-assembly.js +0 -31
- package/dist/profile/role-assembly.js.map +0 -1
- package/dist/profile/role-catalog.d.ts +0 -43
- package/dist/profile/role-catalog.d.ts.map +0 -1
- package/dist/profile/role-catalog.js +0 -132
- package/dist/profile/role-catalog.js.map +0 -1
- package/dist/profile/role-orchestrator.d.ts +0 -123
- package/dist/profile/role-orchestrator.d.ts.map +0 -1
- package/dist/profile/role-orchestrator.js +0 -195
- package/dist/profile/role-orchestrator.js.map +0 -1
- package/dist/profile/role-runner.d.ts +0 -99
- package/dist/profile/role-runner.d.ts.map +0 -1
- package/dist/profile/role-runner.js +0 -79
- package/dist/profile/role-runner.js.map +0 -1
- package/dist/profile/root-facade.d.ts +0 -36
- package/dist/profile/root-facade.d.ts.map +0 -1
- package/dist/profile/root-facade.js +0 -49
- package/dist/profile/root-facade.js.map +0 -1
- package/dist/profile/skill-discovery-wiring.d.ts +0 -58
- package/dist/profile/skill-discovery-wiring.d.ts.map +0 -1
- package/dist/profile/skill-discovery-wiring.js +0 -80
- package/dist/profile/skill-discovery-wiring.js.map +0 -1
- package/dist/profile/state-store.d.ts +0 -62
- package/dist/profile/state-store.d.ts.map +0 -1
- package/dist/profile/state-store.js +0 -144
- package/dist/profile/state-store.js.map +0 -1
- package/dist/profile/todo-plugin.d.ts +0 -37
- package/dist/profile/todo-plugin.d.ts.map +0 -1
- package/dist/profile/todo-plugin.js +0 -137
- package/dist/profile/todo-plugin.js.map +0 -1
- /package/{dist/plugins → bundled-plugins/mcp-http/dist}/mcp-http.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-compaction.js","sourceRoot":"","sources":["../../src/core/agent-session-compaction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Compaction engine and branch summarization for AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name private delegates so call sites, dynamic dispatch, and test\n * spies keep working unchanged. Method-to-method calls go through the session\n * parameter (not direct function calls) to preserve that dispatch.\n */\n\nimport type { AgentContext, AgentMessage } from \"@agent-forge/agent-core\";\nimport { contentText, retryAssistantCall, uuidv7 } from \"@agent-forge/ai\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAuthResult,\n\tContext,\n\tModel,\n\tProviderHeaders,\n\tRetryCallbacks,\n\tRetryPolicy,\n\tSimpleStreamOptions,\n\tUsage,\n} from \"@agent-forge/ai/compat\";\nimport { completeSimple, streamSimple } from \"@agent-forge/ai/compat\";\nimport type { SummaryAttemptRecordV1 } from \"../host/summary-retry.ts\";\nimport {\n\ttype AgentSessionInternals,\n\tdetachedSessionSnapshot,\n\tSessionCancelledError,\n} from \"./agent-session-internal.ts\";\nimport { dispatchCompactionDecisionLifecycle, dispatchCompactionFailedLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from \"./auth-guidance.ts\";\nimport {\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\teffectiveKeepRecentTokens,\n\testimateContextTokens,\n\testimateTokens,\n\tisTurnStartMessage,\n} from \"./compaction/index.ts\";\nimport type { ExecutionFactsV1 } from \"./extensions/index.ts\";\nimport {\n\tDEFAULT_COMPACTION_POLICY_NAME,\n\tSESSION_COMPACTION_COMMIT_EVENT_ID,\n\tSESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\ttype SessionCompactionCommitEventDataV1,\n} from \"./extensions/index.ts\";\nimport type { SummaryModelFactsV1, SummaryModelInvocationV1 } from \"./extensions/public-api.ts\";\nimport { SUMMARY_MODEL_INVOCATION_ERROR_CODES } from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, SessionEntry, SessionManager } from \"./session-manager.ts\";\nimport { getLatestCompactionEntry } from \"./session-manager.ts\";\nimport type { CompactionSettings } from \"./settings-manager.ts\";\n\nfunction withoutDeletedHeaders(headers: ProviderHeaders | undefined): Record<string, string> | undefined {\n\treturn headers\n\t\t? Object.fromEntries(Object.entries(headers).filter((entry): entry is [string, string] => entry[1] !== null))\n\t\t: undefined;\n}\n\nfunction estimateMessagesTokens(messages: AgentMessage[]): number {\n\tlet tokens = 0;\n\tfor (const message of messages) {\n\t\ttokens += estimateTokens(message);\n\t}\n\treturn tokens;\n}\n\n/**\n * 溢出裁剪阶梯级数。压缩恢复(compact-and-retry)后仍 context overflow 时,\n * 对运行时投影按 turn 边界逐级裁剪重试:第 1 级压到 `keepRecentTokens`,\n * 第 2 级压到 {@link OVERFLOW_TRIM_STAGE2_TARGET_TOKENS},第 3 级仅保留最后\n * 一条 user 消息及其后内容。canonical 会话历史永不被裁剪路径改写。\n */\nconst OVERFLOW_TRIM_MAX_STAGES = 3;\n\n/** 溢出裁剪第 2 级的目标 token 预算(估算)。 */\nconst OVERFLOW_TRIM_STAGE2_TARGET_TOKENS = 10_000;\n\n/**\n * 溢出/截断裁剪失败文案:实际发生过裁剪时附上前缀(分语:context overflow\n * 维持既有精确文案,recoverable length 用截断响应措辞),0 次保持策略原文。\n */\nfunction overflowTrimFailureMessage(\n\tattempts: number,\n\tfailureMessage: string,\n\tkind: \"contextOverflow\" | \"recoverableLength\",\n): string {\n\tif (attempts <= 0) return failureMessage;\n\tconst head = kind === \"contextOverflow\" ? \"Context overflow\" : \"Truncated response\";\n\treturn `${head} persists after compaction and ${attempts} trim attempts. ${failureMessage}`;\n}\n\n/**\n * Trim the runtime projection for one overflow-recovery stage: drop the oldest\n * complete turns until the kept part estimates within the stage target. The\n * floor keeps the current turn's user message, so the projection is never\n * empty. Stage indices are 0-based: 0 → keepRecentTokens, 1 → 10000, 2 → keep\n * from the last user message (fallback: the latest turn start) onward.\n */\nfunction trimOverflowProjection(messages: AgentMessage[], stage: number, keepRecentTokens: number): AgentMessage[] {\n\t// 第 3 级:仅保留最后一条 user 消息及其后内容(保底不变量)。\n\tif (stage >= 2) {\n\t\t// 切点为 0 时返回原引用:内容无变化,调用方守卫据此直接失败。\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tif (messages[i].role === \"user\") return i === 0 ? messages : messages.slice(i);\n\t\t}\n\t\t// 投影中没有 user 消息时退到最近的回合起点,保持非空。\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tif (isTurnStartMessage(messages[i])) return i === 0 ? messages : messages.slice(i);\n\t\t}\n\t\treturn messages;\n\t}\n\n\tconst target = stage === 0 ? keepRecentTokens : OVERFLOW_TRIM_STAGE2_TARGET_TOKENS;\n\tconst turnStarts: number[] = [];\n\tfor (let i = 0; i < messages.length; i++) {\n\t\tif (isTurnStartMessage(messages[i])) turnStarts.push(i);\n\t}\n\tif (turnStarts.length === 0) return messages;\n\n\t// 后缀 token 估算(chars/4,与 estimateTokens 同一启发式)。\n\tconst suffixTokens = new Array<number>(messages.length + 1).fill(0);\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tsuffixTokens[i] = suffixTokens[i + 1] + estimateTokens(messages[i]);\n\t}\n\tif (suffixTokens[0] <= target) return messages;\n\n\t// 从头删除最老完整回合,直到保留部分估算 token ≤ 目标;永不越过最后一个回合起点。\n\tfor (const start of turnStarts) {\n\t\tif (suffixTokens[start] <= target) return messages.slice(start);\n\t}\n\tconst floorStart = turnStarts[turnStarts.length - 1];\n\treturn floorStart === 0 ? messages : messages.slice(floorStart);\n}\n\nexport async function getRequiredRequestAuth(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\tsignal?: AbortSignal,\n): Promise<{\n\tmodel: Model<Api>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}> {\n\tlet result: AuthResult | undefined;\n\ttry {\n\t\tresult = await session._modelRuntime.getAuth(model, { signal });\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error.cause : undefined;\n\t\tif (cause instanceof Error && cause.message === \"authHeader requires a resolved API key\") {\n\t\t\tthrow new Error(formatNoApiKeyFoundMessage(model.provider));\n\t\t}\n\t\tthrow error;\n\t}\n\tif (result && (result.auth.apiKey || result.auth.headers)) {\n\t\tconst requestModel = result.auth.baseUrl ? { ...model, baseUrl: result.auth.baseUrl } : model;\n\t\treturn {\n\t\t\tmodel: requestModel,\n\t\t\tapiKey: result.auth.apiKey,\n\t\t\theaders: withoutDeletedHeaders(result.auth.headers),\n\t\t\tenv: result.env,\n\t\t};\n\t}\n\n\tconst isOAuth = session._modelRuntime.isUsingOAuth(model.provider);\n\tif (isOAuth) {\n\t\tthrow new Error(\n\t\t\tt(\n\t\t\t\t\"Authentication failed for \\\"{provider}\\\". Credentials may have expired or network is unavailable. Run '/login {provider}' to re-authenticate.\",\n\t\t\t\t{ provider: model.provider },\n\t\t\t),\n\t\t);\n\t}\n\tthrow new Error(formatNoApiKeyFoundMessage(model.provider));\n}\n\nexport async function getSummarizationRequestAuth(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\tsignal?: AbortSignal,\n): Promise<{\n\tmodel: Model<Api>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}> {\n\tif (session.agent.streamFunction === streamSimple) {\n\t\t// provider-failover 隐性耦合(设计 供应商能力槽位与主备切换 §4.8/§6 风险 11):\n\t\t// SDK 默认装配传入的是闭包而非 streamSimple 本身,外包 streamFn wrapper 后该\n\t\t// 恒等比较结果不变(仍走非直连分支)——本比较只对显式传 streamSimple 的宿主\n\t\t// (如测试 harness)为真,行为与 wrapper 上线前逐点等价。\n\t\treturn getRequiredRequestAuth(session, model, signal);\n\t}\n\n\ttry {\n\t\tconst result = await session._modelRuntime.getAuth(model, { signal });\n\t\tif (!result) return { model };\n\t\tconst requestModel = result.auth.baseUrl ? { ...model, baseUrl: result.auth.baseUrl } : model;\n\t\treturn {\n\t\t\tmodel: requestModel,\n\t\t\tapiKey: result.auth.apiKey,\n\t\t\theaders: withoutDeletedHeaders(result.auth.headers),\n\t\t\tenv: result.env,\n\t\t};\n\t} catch (error) {\n\t\t// Auth resolution normally falls back to an unauthenticated summary when\n\t\t// it fails, but an abort must not be swallowed into that fallback: the\n\t\t// caller's signal decided this run is over.\n\t\tif (signal?.aborted) throw error;\n\t\treturn { model };\n\t}\n}\n\n/** Provider-agnostic facts extracted from the auth-resolved summary model. */\nfunction summaryModelFacts(model: Model<Api>): SummaryModelFactsV1 {\n\treturn {\n\t\tid: model.id,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\treasoning: model.reasoning,\n\t};\n}\n\n/**\n * Build the host-owned summary invocation boundary (V1) for one summary run.\n *\n * The closure captures the auth resolved once per run (model with its\n * auth-level baseUrl override, API key, headers, provider env), the retry\n * budget, and the retry callbacks that mirror retries into session events.\n * Transport selection lazily observes `session.agent.streamFunction` at each\n * invoke so request behavior (timeouts, retries, attribution headers) stays\n * identical to agent turns; without one the host falls back to\n * `completeSimple`. Every completion is cache-free (`cacheRetention: \"none\"`)\n * and routed through `routingSessionId` when the caller supplies one; callers\n * without a session (branch summaries) get a fresh routing id per call.\n */\nexport function createSummaryModelInvocationV1(\n\tsession: AgentSessionInternals,\n\tauth: {\n\t\tmodel: Model<Api>;\n\t\tapiKey?: string;\n\t\theaders?: Record<string, string>;\n\t\tenv?: Record<string, string>;\n\t},\n\tretry: RetryPolicy,\n\tcallbacks?: RetryCallbacks,\n\toptions: { routingSessionId?: string } = {},\n): SummaryModelInvocationV1 {\n\treturn {\n\t\tinvoke: async (input, signal) => {\n\t\t\t// Host-owned output cap: never exceed the summary model's limit.\n\t\t\t// Models without a positive cap stay unclamped.\n\t\t\tconst maxTokens =\n\t\t\t\tinput.maxTokens === undefined || auth.model.maxTokens <= 0\n\t\t\t\t\t? input.maxTokens\n\t\t\t\t\t: Math.min(input.maxTokens, auth.model.maxTokens);\n\t\t\tconst requestOptions: SimpleStreamOptions = {\n\t\t\t\t...(maxTokens === undefined ? {} : { maxTokens }),\n\t\t\t\tsignal,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\theaders: auth.headers,\n\t\t\t\tenv: auth.env,\n\t\t\t\t// One-off summaries must never write the prompt cache.\n\t\t\t\tcacheRetention: \"none\",\n\t\t\t\tsessionId: options.routingSessionId ?? uuidv7(),\n\t\t\t};\n\t\t\tif (auth.model.reasoning && input.thinkingLevel && input.thinkingLevel !== \"off\") {\n\t\t\t\trequestOptions.reasoning = input.thinkingLevel;\n\t\t\t}\n\t\t\tconst context: Context = {\n\t\t\t\tsystemPrompt: input.systemPrompt,\n\t\t\t\tmessages: [{ role: \"user\", content: [{ type: \"text\", text: input.prompt }], timestamp: Date.now() }],\n\t\t\t};\n\t\t\tconst produce = async (): Promise<AssistantMessage> => {\n\t\t\t\tconst streamFn = session.agent.streamFunction;\n\t\t\t\treturn streamFn\n\t\t\t\t\t? (await streamFn(auth.model, context, requestOptions)).result()\n\t\t\t\t\t: completeSimple(auth.model, context, requestOptions);\n\t\t\t};\n\t\t\tlet response: AssistantMessage;\n\t\t\ttry {\n\t\t\t\tresponse = await retryAssistantCall(produce, retry, requestOptions.signal, callbacks);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\t\treturn { version: 1, status: \"aborted\" };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.transportError,\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.stopReason === \"aborted\") {\n\t\t\t\treturn { version: 1, status: \"aborted\" };\n\t\t\t}\n\t\t\tif (response.stopReason === \"error\") {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.providerError,\n\t\t\t\t\t\tmessage: response.errorMessage || \"Unknown error\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.stopReason === \"length\") {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.lengthCap,\n\t\t\t\t\t\tmessage: \"generation hit the token cap and the summary is incomplete\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.content.some((block) => block.type === \"toolCall\")) {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.toolCall,\n\t\t\t\t\t\tmessage: \"attempted to call a tool\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tversion: 1,\n\t\t\t\tstatus: \"completed\",\n\t\t\t\ttext: contentText(response.content),\n\t\t\t\tusage: response.usage,\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport async function compactBeforeNextAssistantResponse(\n\tsession: AgentSessionInternals,\n\tcontext: AgentContext,\n\tsignal?: AbortSignal,\n): Promise<AgentContext> {\n\tconst model = session.model;\n\tconst settings = session.settingsManager.getCompactionSettings(model ?? undefined);\n\n\tif (!model || model.contextWindow <= 0) {\n\t\treturn context;\n\t}\n\tconst contextTokens = estimateContextTokens(context.messages).tokens;\n\tconst decision = await decideCompaction(session, {\n\t\treason: \"threshold\",\n\t\tcontextOverflow: false,\n\t\trecoverableLength: false,\n\t\tcontextUsage: {\n\t\t\tcontextTokens,\n\t\t\tcontextWindow: model.contextWindow,\n\t\t\treserveTokens: settings.reserveTokens,\n\t\t},\n\t\tcanContinue: false,\n\t\tsignal: signal ?? session._policyDecisionAbortController?.signal,\n\t});\n\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\treason: \"threshold\",\n\t\tcompact: decision.compact,\n\t\t// The pre-check never retries the turn: the runAutoCompaction call below\n\t\t// passes a fixed false, so the policy's retry flag is not the fact here.\n\t\twillRetry: false,\n\t\tcontextTokens,\n\t\tcontextWindow: model.contextWindow,\n\t\treserveTokens: settings.reserveTokens,\n\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t});\n\tif (!decision.compact) return context;\n\n\tawait session._runAutoCompaction(\"threshold\", false);\n\treturn {\n\t\t...context,\n\t\tmessages: session.agent.state.messages.slice(),\n\t};\n}\n\nexport function executionFacts(\n\tsession: AgentSessionInternals,\n\tphase: ExecutionFactsV1[\"phase\"],\n\toperationId?: string,\n\trevision?: ExecutionFactsV1[\"inputRevision\"],\n): ExecutionFactsV1 {\n\tconst inputRevision = detachedSessionSnapshot(revision ?? session.sessionManager.getRevision());\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\toperationId:\n\t\t\toperationId ??\n\t\t\t`${phase}:${inputRevision.sessionId}:${inputRevision.sequence}:${inputRevision.leafId ?? \"root\"}`,\n\t\tsessionId: session.sessionId,\n\t\tinputRevision,\n\t\tphase,\n\t});\n}\n\nexport async function runCompactionSummary(\n\tsession: AgentSessionInternals,\n\tpreparation: CompactionPreparation,\n\tauth: {\n\t\tmodel: Model<Api>;\n\t\tapiKey?: string;\n\t\theaders?: Record<string, string>;\n\t\tenv?: Record<string, string>;\n\t},\n\tcustomInstructions: string | undefined,\n\tsignal: AbortSignal,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n\texecution: ExecutionFactsV1,\n): Promise<CompactionResult> {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst result = await runtime.summarizeCompaction(session._compactionPolicyName, {\n\t\tpreparation,\n\t\tmodel: summaryModelFacts(auth.model),\n\t\tinvocation: createSummaryModelInvocationV1(\n\t\t\tsession,\n\t\t\tauth,\n\t\t\tsummarizationRetryPolicy(session, execution.operationId, execution.inputRevision, signal),\n\t\t\tsummarizationRetryCallbacks(session, { source: \"compaction\", reason }),\n\t\t\t{ routingSessionId: session.sessionId },\n\t\t),\n\t\tcustomInstructions,\n\t\tsignal,\n\t\treason,\n\t\t// 结构化摘要是机械任务,高思考档不改变质量只增加成本(参照 Codex\n\t\t// RequestEffortUsage::Compaction):摘要请求一律钳到 low,用户显式 off 保持 off。\n\t\tthinkingLevel: session.thinkingLevel === \"off\" ? \"off\" : \"low\",\n\t\tsessionId: session.sessionId,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution,\n\t});\n\t// 包内收窄:invocation 结果按 provider 原样透传 usage;压缩 usage 合并需要内部 Usage 形状。\n\treturn { ...result, usage: result.usage as Usage | undefined };\n}\n\nexport async function decideCompaction(\n\tsession: AgentSessionInternals,\n\tinput: {\n\t\treason: \"overflow\" | \"threshold\";\n\t\tcontextOverflow: boolean;\n\t\trecoverableLength: boolean;\n\t\tcontextUsage?: { contextTokens: number; contextWindow: number; reserveTokens: number };\n\t\tcanContinue: boolean;\n\t\texecution?: ExecutionFactsV1;\n\t\tsignal?: AbortSignal;\n\t},\n) {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做压缩决策(无执行者),回合继续;缺失经 warn 日志与手动 /compact 的显式\n\t// 错误暴露。默认插件不得成为隐藏前提(宪法 §2/§5)。显式配置的其他策略名缺\n\t// 失仍然显式失败——配置错误必须可见(宪法 §7)。\n\tif (\n\t\tsession._compactionPolicyName === DEFAULT_COMPACTION_POLICY_NAME &&\n\t\t!runtime.hasCompactionPolicy(session._compactionPolicyName)\n\t) {\n\t\tsession._hostLogger?.warn(\"compaction\", \"no compaction policy registered; skipping automatic compaction\", {\n\t\t\tfields: { policyName: session._compactionPolicyName, reason: input.reason },\n\t\t});\n\t\treturn { compact: false, retry: false };\n\t}\n\treturn runtime.decideCompaction(session._compactionPolicyName, {\n\t\trecoveryAttempted: session._overflowRecoveryAttempted,\n\t\t...input,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution: input.execution ?? executionFacts(session, \"compaction\"),\n\t\tsignal: input.signal,\n\t});\n}\n\nexport async function prepareCompaction(\n\tsession: AgentSessionInternals,\n\tpathEntries: SessionEntry[],\n\tsettings: CompactionSettings,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n): Promise<CompactionPreparation | undefined> {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst preparation = await runtime.prepareCompaction(session._compactionPolicyName, {\n\t\tentries: pathEntries,\n\t\tsettings,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution: execution ?? executionFacts(session, \"compaction\"),\n\t\tsignal,\n\t});\n\tif (preparation === undefined) return undefined;\n\tconst value = preparation as Record<string, unknown>;\n\tif (\n\t\t!preparation ||\n\t\ttypeof preparation !== \"object\" ||\n\t\ttypeof value.firstKeptEntryId !== \"string\" ||\n\t\t!Array.isArray(value.messagesToSummarize) ||\n\t\t!Array.isArray(value.turnPrefixMessages) ||\n\t\ttypeof value.isSplitTurn !== \"boolean\" ||\n\t\t!Number.isFinite(value.tokensBefore) ||\n\t\ttypeof value.fileOps !== \"object\" ||\n\t\ttypeof value.settings !== \"object\"\n\t) {\n\t\tthrow new Error(\n\t\t\tt(\"Compaction policy returned an invalid preparation: {policyName}\", {\n\t\t\t\tpolicyName: session._compactionPolicyName,\n\t\t\t}),\n\t\t);\n\t}\n\treturn preparation as CompactionPreparation;\n}\n\n/** Capture the branch facts used by one optimistic compaction commit. */\nexport function captureCompactionCommitBoundary(\n\tsession: AgentSessionInternals,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n): {\n\tpathEntries: SessionEntry[];\n\texpectedRevision: ReturnType<SessionManager[\"getRevision\"]>;\n\toperationId: string;\n} {\n\tconst pathEntries = session.sessionManager.getBranch();\n\tconst expectedRevision = session.sessionManager.getRevision();\n\treturn {\n\t\tpathEntries,\n\t\texpectedRevision,\n\t\toperationId: `compaction:${reason}:${expectedRevision.sessionId}:${expectedRevision.sequence}:${expectedRevision.leafId ?? \"root\"}`,\n\t};\n}\n\n/** Queue compaction work so canonical commit and runtime projection stay ordered. */\nexport function enqueueCompaction<T>(session: AgentSessionInternals, operation: () => Promise<T>): Promise<T> {\n\tconst previous = session._compactionQueue;\n\tlet release!: () => void;\n\tsession._compactionQueue = new Promise<void>((resolve) => {\n\t\trelease = resolve;\n\t});\n\tconst queued = previous\n\t\t.then(() => {\n\t\t\tif (session._reloadInProgress) {\n\t\t\t\tthrow new Error(t(\"Session reload in progress; compaction was not started\"));\n\t\t\t}\n\t\t\treturn operation();\n\t\t})\n\t\t.finally(release);\n\tsession._activeCompactionPromise = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeCompactionPromise === queued) session._activeCompactionPromise = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeCompactionPromise === queued) session._activeCompactionPromise = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\n/**\n * Persist an optimistic compaction result before projecting its context.\n *\n * A revision conflict is a failed compaction, not a signal to recompute or\n * append against newer session history. A replay is a successful prior\n * commit and still requires the caller to apply the runtime projection.\n */\nexport function commitCompaction(\n\tsession: AgentSessionInternals,\n\tinput: {\n\t\texpectedRevision: ReturnType<SessionManager[\"getRevision\"]>;\n\t\toperationId: string;\n\t\tsummary: string;\n\t\tfirstKeptEntryId: string;\n\t\ttokensBefore: number;\n\t\tdetails: unknown;\n\t\tusage: Usage | undefined;\n\t},\n): {\n\tentry: CompactionEntry;\n\tstatus: \"committed\" | \"replayed\";\n\trevision: ReturnType<SessionManager[\"getRevision\"]>;\n} {\n\tconst commit = session.sessionManager.commitCompaction({\n\t\tversion: 1,\n\t\toperationId: input.operationId,\n\t\texpectedRevision: input.expectedRevision,\n\t\tsummary: input.summary,\n\t\tfirstKeptEntryId: input.firstKeptEntryId,\n\t\ttokensBefore: input.tokensBefore,\n\t\tdetails: input.details,\n\t\tfromHook: false,\n\t\tusage: input.usage,\n\t});\n\tif (commit.status === \"revision_conflict\") {\n\t\tthrow new Error(\n\t\t\tt(\n\t\t\t\t\"Compaction commit revision conflict: expected {expectedSequence}/{expectedLeafId}, current {currentSequence}/{currentLeafId}\",\n\t\t\t\t{\n\t\t\t\t\texpectedSequence: input.expectedRevision.sequence,\n\t\t\t\t\texpectedLeafId: input.expectedRevision.leafId ?? \"root\",\n\t\t\t\t\tcurrentSequence: commit.currentRevision.sequence,\n\t\t\t\t\tcurrentLeafId: commit.currentRevision.leafId ?? \"root\",\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\n\tconst entry = session.sessionManager.getEntry(commit.entryId);\n\tif (entry?.type !== \"compaction\" || entry.operationId !== input.operationId) {\n\t\tthrow new Error(t(\"Compaction commit entry is unavailable: {entryId}\", { entryId: commit.entryId }));\n\t}\n\treturn { entry, status: commit.status, revision: commit.revision };\n}\n\n/** Deliver committed compaction facts without making delivery part of the commit. */\nexport async function dispatchCompactionCommitLifecycle(\n\tsession: AgentSessionInternals,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n\tcommit: {\n\t\tentry: CompactionEntry;\n\t\tstatus: \"committed\" | \"replayed\";\n\t\trevision: ReturnType<SessionManager[\"getRevision\"]>;\n\t},\n): Promise<void> {\n\ttry {\n\t\tconst runtime = session._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst entry = commit.entry;\n\t\tconst data: SessionCompactionCommitEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tstatus: commit.status,\n\t\t\tentryId: entry.id,\n\t\t\toperationId: entry.operationId ?? \"\",\n\t\t\trevision: commit.revision,\n\t\t\treason,\n\t\t\tsummary: entry.summary,\n\t\t\tfirstKeptEntryId: entry.firstKeptEntryId,\n\t\t\ttokensBefore: entry.tokensBefore,\n\t\t\tfromHook: entry.fromHook === true,\n\t\t\t...(entry.usage === undefined ? {} : { usage: entry.usage }),\n\t\t\t...(entry.details === undefined ? {} : { details: entry.details }),\n\t\t};\n\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\ttype: SESSION_COMPACTION_COMMIT_EVENT_ID,\n\t\t\tversion: SESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\t\t\tphase: \"committed\",\n\t\t\tdata,\n\t\t\toperationId: entry.operationId,\n\t\t\tsource: \"agent-session\",\n\t\t});\n\t\tfor (const failure of delivery.report.failures) {\n\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\tfailure.error,\n\t\t\t\tfailure.pluginId,\n\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}/${failure.kind}`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tconst report = (\n\t\t\terror as { report?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] } }\n\t\t).report;\n\t\t// v8 ignore next -- phase 常量合法且未传 signal,dispatchLifecycle 仅在 transform/execute 被禁止注册时拒绝,report 形态拒绝不可达\n\t\tif (report?.failures) {\n\t\t\tfor (const failure of report.failures) {\n\t\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\terror,\n\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport async function decideOverflow(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n) {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\treturn runtime.decideOverflow(session._overflowPolicyName, {\n\t\tmessage,\n\t\tcontextWindow: session.model?.contextWindow,\n\t\tdesiredMaxOutput: session.model?.maxTokens ?? 0,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"overflow\" },\n\t\texecution: execution ?? executionFacts(session, \"overflow\"),\n\t\tsignal,\n\t});\n}\n\n/**\n * Clear the manual compaction controller and wake any `waitForIdle()` caller.\n * Mirrors the upstream `_clearManualCompactionState` helper: every manual\n * compaction exit path must drop the controller before listeners observe\n * `compaction_end`, so `isIdle` is already true when they run.\n */\nfunction clearManualCompactionState(session: AgentSessionInternals): void {\n\tsession._compactionAbortController = undefined;\n\tsession._resolveIdleWaitIfIdle();\n}\n\n/** Structured cancellation outcome for manual compaction (mirrors navigateTree's shape). */\nexport interface CompactionCancelledResult {\n\treadonly cancelled: true;\n\treadonly aborted: true;\n}\n\nexport async function compactInternal(\n\tsession: AgentSessionInternals,\n\tcustomInstructions?: string,\n): Promise<CompactionResult | CompactionCancelledResult> {\n\tawait session._abortInternal();\n\t// Reload can begin while abort() is waiting for the active agent turn. Do\n\t// not create a fresh controller or begin summary work after that barrier.\n\t// Nothing started, so there is nothing to notify: resolve cancelled.\n\tif (session._reloadInProgress) {\n\t\treturn { cancelled: true, aborted: true };\n\t}\n\tsession._compactionAbortController = new AbortController();\n\tsession._emit({ type: \"compaction_start\", reason: \"manual\" });\n\n\ttry {\n\t\tif (!session.model) {\n\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t}\n\n\t\tconst auth = await getSummarizationRequestAuth(session, session.model, session._compactionAbortController.signal);\n\n\t\tconst { pathEntries, expectedRevision, operationId } = captureCompactionCommitBoundary(session, \"manual\");\n\t\tconst rawSettings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释):手动\n\t\t// 压缩与自动路径同一 effective 值,小窗口下 /compact 不再因保护预算吃满\n\t\t// 整个可摘要窗口而报 \"Nothing to compact\"。\n\t\tconst settings: CompactionSettings = {\n\t\t\t...rawSettings,\n\t\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\t\trawSettings.keepRecentTokens,\n\t\t\t\tsession.model.contextWindow,\n\t\t\t\trawSettings.reserveTokens,\n\t\t\t),\n\t\t};\n\n\t\tconst execution = executionFacts(session, \"compaction\", operationId);\n\t\tconst preparation = await prepareCompaction(\n\t\t\tsession,\n\t\t\tpathEntries,\n\t\t\tsettings,\n\t\t\texecution,\n\t\t\tsession._compactionAbortController.signal,\n\t\t);\n\t\tif (!preparation) {\n\t\t\t// Check why we can't compact\n\t\t\tconst lastEntry = pathEntries[pathEntries.length - 1];\n\t\t\tif (lastEntry?.type === \"compaction\") {\n\t\t\t\tthrow new Error(t(\"Already compacted\"));\n\t\t\t}\n\t\t\tthrow new Error(t(\"Nothing to compact (session too small)\"));\n\t\t}\n\n\t\t// Shared default summary generator, also used by automatic compaction.\n\t\tconst { summary, firstKeptEntryId, tokensBefore, usage, details } = await runCompactionSummary(\n\t\t\tsession,\n\t\t\tpreparation,\n\t\t\tauth,\n\t\t\tcustomInstructions,\n\t\t\tsession._compactionAbortController.signal,\n\t\t\t\"manual\",\n\t\t\texecution,\n\t\t);\n\n\t\tif (session._compactionAbortController.signal.aborted || session._reloadInProgress) {\n\t\t\tthrow new SessionCancelledError(\"signal\");\n\t\t}\n\n\t\tconst compactionCommit = commitCompaction(session, {\n\t\t\texpectedRevision,\n\t\t\toperationId,\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t});\n\t\tawait dispatchCompactionCommitLifecycle(session, \"manual\", compactionCommit);\n\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\tawait session._applyContextTransition(sessionContext.messages, \"compaction\");\n\t\t// Context strategies may replace the runtime projection without rewriting\n\t\t// canonical session history. Report the immediately post-compaction runtime\n\t\t// projection, rather than the pre-projection session reconstruction.\n\t\tconst estimatedTokensAfter = estimateMessagesTokens(session.agent.state.messages);\n\n\t\tconst compactionResult: CompactionResult = {\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\testimatedTokensAfter,\n\t\t\tusage,\n\t\t\tdetails,\n\t\t};\n\t\t// compaction_end listeners may submit queued prompts, so expose idle state before notifying them.\n\t\tclearManualCompactionState(session);\n\t\tsession._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"manual\",\n\t\t\tresult: compactionResult,\n\t\t\taborted: false,\n\t\t\twillRetry: false,\n\t\t});\n\t\treturn compactionResult;\n\t} catch (error) {\n\t\t// Cancellation is decided by the controller state, not the error shape:\n\t\t// aborts surface as AbortError from the summary pipeline, but so can\n\t\t// unrelated failures — only the signal tells them apart (same split as\n\t\t// runAutoCompactionInternal).\n\t\tconst cancelled =\n\t\t\terror instanceof SessionCancelledError || session._compactionAbortController?.signal.aborted === true;\n\t\tif (cancelled) {\n\t\t\t// Cancellation is a normal outcome: notify listeners and resolve with\n\t\t\t// the structured cancelled result instead of rejecting (matches\n\t\t\t// navigateTree).\n\t\t\tclearManualCompactionState(session);\n\t\t\tsession._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: true,\n\t\t\t\twillRetry: false,\n\t\t\t});\n\t\t\treturn { cancelled: true, aborted: true };\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst errorMessage = `Compaction failed: ${message}`;\n\t\tclearManualCompactionState(session);\n\t\tsession._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"manual\",\n\t\t\tresult: undefined,\n\t\t\taborted: false,\n\t\t\twillRetry: false,\n\t\t\terrorMessage,\n\t\t});\n\t\t// 压缩失败打点(会话轨迹第 2 期,设计 §5.2):lifecycle 事件之外的一行\n\t\t// 进程日志,缺 hostLogger 时为 no-op;取消路径不打点。\n\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", { fields: { reason: \"manual\" }, cause: error });\n\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"manual\", errorMessage });\n\t\tthrow error;\n\t} finally {\n\t\tclearManualCompactionState(session);\n\t}\n}\n\n/**\n * Dispatch automatic compaction after `agent_end` or before prompt submission.\n * Manual compaction does not call this method; it enters through `compact()`.\n *\n * Automatic cases:\n * 1. Overflow with retry: a context-overflow error or recoverable length stop;\n * remove the failed assistant message, compact, and retry the turn once.\n * 2. Overflow without retry: a successful response exceeded the configured\n * context window; compact but preserve the completed response.\n * 3. Threshold without retry: valid or estimated context usage crossed the\n * configured threshold; compact without retrying the completed response.\n *\n * Each case calls `_runAutoCompaction()`. After preparation and the\n * `session_before_compact` hook, that method calls the lower-level `compact()`\n * function imported from `./compaction/index.ts`, unless the hook cancels or\n * supplies a custom result.\n *\n * @param assistantMessage The assistant message to check\n * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n * @returns Whether the post-run loop should call `agent.continue()` for overflow recovery or queued messages\n */\nexport async function checkCompaction(\n\tsession: AgentSessionInternals,\n\tassistantMessage: AssistantMessage,\n\tskipAbortedCheck = true,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (signal?.aborted) return false;\n\tconst settings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释:座席实测\n\t// 30K 窗口 20K 保护预算使可摘要前缀为零,阈值反复命中却无事可做)。一次性\n\t// 替换后全文一致使用:下方 trim 阶梯 stage 0 目标。\n\tconst effectiveSettings: typeof settings = {\n\t\t...settings,\n\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\tsettings.keepRecentTokens,\n\t\t\tsession.model?.contextWindow ?? 0,\n\t\t\tsettings.reserveTokens,\n\t\t),\n\t};\n\n\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\tconst contextWindow = session.model?.contextWindow ?? 0;\n\n\t// Skip overflow check if the message came from a different model.\n\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t// shouldn't trigger compaction for the new model.\n\tconst sameModel =\n\t\tsession.model !== undefined &&\n\t\tassistantMessage.provider === session.model.provider &&\n\t\tassistantMessage.model === session.model.id;\n\n\t// Skip compaction checks if this assistant message is older than the latest\n\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t// from retriggering compaction on the first prompt after compaction.\n\tconst compactionEntry = getLatestCompactionEntry(session.sessionManager.getBranch());\n\tconst assistantIsFromBeforeCompaction =\n\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\tif (assistantIsFromBeforeCompaction) {\n\t\treturn false;\n\t}\n\n\t// Automatic cases 1 and 2: context overflow.\n\t// A length stop is recoverable when output ended below the model's original desired limit,\n\t// independent of the configured context size or any context-clamped provider request limit.\n\tconst overflow = sameModel\n\t\t? await decideOverflow(session, assistantMessage, undefined, signal)\n\t\t: { contextOverflow: false, recoverableLength: false };\n\tconst { contextOverflow, recoverableLength } = overflow;\n\tif (contextOverflow || recoverableLength) {\n\t\tconst decision = await decideCompaction(session, {\n\t\t\treason: \"overflow\",\n\t\t\tcontextOverflow,\n\t\t\trecoverableLength,\n\t\t\tcanContinue: assistantMessage.stopReason !== \"stop\",\n\t\t\tsignal,\n\t\t});\n\t\t// The overflow policy request carries no contextUsage, so the threshold\n\t\t// triplet is omitted here rather than fabricated.\n\t\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\t\treason: \"overflow\",\n\t\t\tcompact: decision.compact,\n\t\t\twillRetry: decision.retry === true,\n\t\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t\t});\n\t\tif (!decision.compact) {\n\t\t\t// 溢出裁剪兜底:压缩恢复(recoveryAttempted)后仍 context overflow 或\n\t\t\t// recoverable length(截断响应=输出被掐,缩输入可让输出有空间,turn 边界\n\t\t\t// 裁剪对两种溢出同样有效)时,先对运行时投影做逐级裁剪重试,3 级全失败才\n\t\t\t// 走策略 failureMessage 失败路径。执行逻辑归 AgentSession,策略接口与事件面不变。\n\t\t\tif (\n\t\t\t\tdecision.failureMessage &&\n\t\t\t\t(contextOverflow || recoverableLength) &&\n\t\t\t\tsession._overflowRecoveryAttempted &&\n\t\t\t\tsession._overflowTrimStage < OVERFLOW_TRIM_MAX_STAGES\n\t\t\t) {\n\t\t\t\tconst stage = session._overflowTrimStage;\n\t\t\t\t// 属性收窄不进闭包,先捕获为 const string。\n\t\t\t\tconst failureMessage = decision.failureMessage;\n\t\t\t\t// 裁剪投影与手动/自动压缩的摘要、提交、投影共用同一队列:投影快照也在\n\t\t\t\t// 队列内读取,避免用手快照覆盖手动压缩刚投影的上下文;复用\n\t\t\t\t// compaction_start/end 事件流(reason 现有值 \"overflow\",不新增事件\n\t\t\t\t// 类型或 payload 字段)。\n\t\t\t\treturn session._enqueueCompaction(async () => {\n\t\t\t\t\tsession._autoCompactionAbortController = new AbortController();\n\t\t\t\t\tconst autoCompactionSignal = session._autoCompactionAbortController.signal;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) return false;\n\t\t\t\t\t\t// 与 compact-and-retry 相同:重试上下文先排除末尾失败的 assistant 响应。\n\t\t\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\t\t\tconst base =\n\t\t\t\t\t\t\tmessages.length > 0 && messages[messages.length - 1].role === \"assistant\"\n\t\t\t\t\t\t\t\t? messages.slice(0, -1)\n\t\t\t\t\t\t\t\t: messages;\n\t\t\t\t\t\tconst trimmed = trimOverflowProjection(base, stage, effectiveSettings.keepRecentTokens);\n\t\t\t\t\t\t// 返回原引用 = 已无可裁(估算已在目标内或无 turn 边界):重试注定\n\t\t\t\t\t\t// 同样溢出,不空转请求,按策略失败文案直接失败(级数未增,无前缀)。\n\t\t\t\t\t\tif (trimmed.length === 0 || trimmed === base) {\n\t\t\t\t\t\t\tconst errorMessage = overflowTrimFailureMessage(\n\t\t\t\t\t\t\t\tstage,\n\t\t\t\t\t\t\t\tfailureMessage,\n\t\t\t\t\t\t\t\tcontextOverflow ? \"contextOverflow\" : \"recoverableLength\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\t\t\t\tcause: errorMessage,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsession._overflowTrimStage = stage + 1;\n\t\t\t\t\t\tsession._emit({ type: \"compaction_start\", reason: \"overflow\" });\n\t\t\t\t\t\tawait session._applyContextTransition(trimmed, \"overflow_recovery\");\n\t\t\t\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) {\n\t\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\twillRetry: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// 投影切换抛错也必须配对 compaction_start 的结束事件(镜像\n\t\t\t\t\t\t// runAutoCompactionInternal 的失败事件语义),否则事件流失去配对。\n\t\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\t\t\tcause: errorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tsession._autoCompactionAbortController = undefined;\n\t\t\t\t\t\tsession._resolveIdleWaitIfIdle();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (decision.failureMessage) {\n\t\t\t\tconst errorMessage = overflowTrimFailureMessage(\n\t\t\t\t\tsession._overflowTrimStage,\n\t\t\t\t\tdecision.failureMessage,\n\t\t\t\t\tcontextOverflow ? \"contextOverflow\" : \"recoverableLength\",\n\t\t\t\t);\n\t\t\t\tsession._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage,\n\t\t\t\t});\n\t\t\t\t// The policy reported a genuine failure (not a cancellation), so the\n\t\t\t\t// failed event carries the same fact. 进程日志打点与该事件同一事实,\n\t\t\t\t// 缺 hostLogger 时为 no-op。\n\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\tcause: errorMessage,\n\t\t\t\t});\n\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst willRetry = decision.retry === true;\n\t\tif (willRetry) {\n\t\t\t// A retry excludes the failed assistant response from the next model context.\n\t\t\t// The actual context projection is performed inside the compaction queue so\n\t\t\t// it cannot race a manual compaction's summary, commit, or projection.\n\t\t\tsession._overflowRecoveryAttempted = true;\n\t\t}\n\t\treturn await session._runAutoCompaction(\"overflow\", willRetry);\n\t}\n\n\t// Case 3: threshold compaction without retry.\n\t// For error messages or all-zero usage messages, estimate from the last valid response.\n\t// This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage\n\t// responses can still compact and do not reset context accounting.\n\tlet contextTokens: number;\n\tconst directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;\n\tif (assistantMessage.stopReason === \"error\" || directContextTokens === 0) {\n\t\tconst messages = session.agent.state.messages;\n\t\tconst estimate = estimateContextTokens(messages);\n\t\t// Without provider usage, estimate.tokens is the pure message-size estimate.\n\t\t// Only usage-backed estimates need the stale pre-compaction check.\n\t\tif (estimate.lastUsageIndex !== null) {\n\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t// trigger compaction right after one just finished.\n\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tcompactionEntry &&\n\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tcontextTokens = estimate.tokens;\n\t} else {\n\t\tcontextTokens = directContextTokens;\n\t}\n\n\tconst decision = await decideCompaction(session, {\n\t\treason: \"threshold\",\n\t\tcontextOverflow: false,\n\t\trecoverableLength: false,\n\t\tcontextUsage: {\n\t\t\tcontextTokens,\n\t\t\tcontextWindow,\n\t\t\treserveTokens: settings.reserveTokens,\n\t\t},\n\t\tcanContinue: false,\n\t\tsignal,\n\t});\n\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\treason: \"threshold\",\n\t\tcompact: decision.compact,\n\t\twillRetry: decision.retry === true,\n\t\tcontextTokens,\n\t\tcontextWindow,\n\t\treserveTokens: settings.reserveTokens,\n\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t});\n\treturn decision.compact ? session._runAutoCompaction(\"threshold\", decision.retry === true) : false;\n}\n\n/**\n * Execute threshold or overflow compaction. Manual compaction uses\n * `AgentSession.compact()` instead. Both paths use the selected compaction\n * policy after preparation and extension interception, then commit against the\n * branch revision captured before asynchronous work.\n *\n * @param reason Automatic trigger selected by `_checkCompaction()`\n * @param willRetry Whether to continue the interrupted turn after overflow compaction\n * @returns Whether the post-run loop should call `agent.continue()`\n */\nexport async function runAutoCompaction(\n\tsession: AgentSessionInternals,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): Promise<boolean> {\n\tif (session._reloadInProgress) return false;\n\treturn enqueueCompaction(session, () => runAutoCompactionInternal(session, reason, willRetry));\n}\n\nexport async function runAutoCompactionInternal(\n\tsession: AgentSessionInternals,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): Promise<boolean> {\n\t// Install the controller before asynchronous auth/preparation so callers can\n\t// cancel every stage, including the overflow-recovery projection.\n\tsession._autoCompactionAbortController = new AbortController();\n\tconst autoCompactionSignal = session._autoCompactionAbortController.signal;\n\t// One outer finally guards every exit path: the early overflow-recovery\n\t// return used to skip the summary-phase cleanup, leaking the aborted\n\t// controller (isCompacting stayed true) and hanging reload's waitForIdle().\n\ttry {\n\t\ttry {\n\t\t\tif (willRetry) {\n\t\t\t\t// Keep overflow recovery's runtime projection under the same queue as\n\t\t\t\t// summary generation, canonical commit, and post-commit projection. This\n\t\t\t\t// prevents a manual compaction that was already queued from observing or\n\t\t\t\t// being interleaved with a partially recovered context.\n\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\t\tawait session._applyContextTransition(messages.slice(0, -1), \"overflow_recovery\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) return false;\n\t\t} catch (error) {\n\t\t\tsession._autoCompactionAbortController = undefined;\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst rawSettings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释):\n\t\t// 小窗口下可摘要前缀不再被保护预算吃满,阈值命中的压缩真实落地而非空转。\n\t\tconst settings: CompactionSettings = {\n\t\t\t...rawSettings,\n\t\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\t\trawSettings.keepRecentTokens,\n\t\t\t\tsession.model?.contextWindow ?? 0,\n\t\t\t\trawSettings.reserveTokens,\n\t\t\t),\n\t\t};\n\t\tlet started = false;\n\n\t\ttry {\n\t\t\tif (!session.model) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst auth = await getSummarizationRequestAuth(session, session.model, autoCompactionSignal);\n\t\t\tconst { pathEntries, expectedRevision, operationId } = captureCompactionCommitBoundary(session, reason);\n\n\t\t\tconst execution = executionFacts(session, \"compaction\", operationId);\n\t\t\tconst preparation = await prepareCompaction(session, pathEntries, settings, execution, autoCompactionSignal);\n\t\t\tif (!preparation) {\n\t\t\t\t// The policy decided to compact, but every entry sits inside the\n\t\t\t\t// keepRecentTokens budget, so there is no summarizable prefix.\n\t\t\t\t// Emit the skip so hosts can surface the \"context is full but\n\t\t\t\t// nothing compacts\" state; manual /compact reports the same\n\t\t\t\t// condition as its \"Nothing to compact\" error.\n\t\t\t\tsession._emit({ type: \"compaction_skipped\", reason, cause: \"nothing_to_compact\" });\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tsession._emit({ type: \"compaction_start\", reason });\n\t\t\tstarted = true;\n\n\t\t\t// Shared default summary generator, also used by manual compaction.\n\t\t\tconst { summary, firstKeptEntryId, tokensBefore, usage, details } = await runCompactionSummary(\n\t\t\t\tsession,\n\t\t\t\tpreparation,\n\t\t\t\tauth,\n\t\t\t\tundefined,\n\t\t\t\tautoCompactionSignal,\n\t\t\t\treason,\n\t\t\t\texecution,\n\t\t\t);\n\n\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) {\n\t\t\t\tsession._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst compactionCommit = commitCompaction(session, {\n\t\t\t\texpectedRevision,\n\t\t\t\toperationId,\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t\tusage,\n\t\t\t});\n\t\t\tawait dispatchCompactionCommitLifecycle(session, reason, compactionCommit);\n\t\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\t\tawait session._applyContextTransition(sessionContext.messages, \"compaction\");\n\t\t\t// See the manual-compaction path: this must describe the strategy-projected\n\t\t\t// runtime context, not canonical history retained by SessionManager.\n\t\t\tconst estimatedTokensAfter = estimateMessagesTokens(session.agent.state.messages);\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\testimatedTokensAfter,\n\t\t\t\tusage,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tsession._emit({ type: \"compaction_end\", reason, result, aborted: false, willRetry });\n\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t// The overflow response was persisted on message_end before _checkCompaction() removed it\n\t\t\t\t// from agent state. Rebuilding state from the new compaction can restore that kept entry,\n\t\t\t\t// leaving an assistant as the final message. agent.continue() rejects that state, so remove\n\t\t\t\t// the retriable error or truncated-length response again before continuing the interrupted turn.\n\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg.stopReason === \"error\" || lastMsg.stopReason === \"length\")) {\n\t\t\t\t\tawait session._applyContextTransition(messages.slice(0, -1), \"overflow_recovery\");\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn session.agent.hasQueuedMessages();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\t// Cancellation is decided by the controller state, not the error shape:\n\t\t\t// aborts surface as AbortError from the summary pipeline, but so can\n\t\t\t// unrelated failures — only the signal tells them apart.\n\t\t\tconst aborted = autoCompactionSignal.aborted;\n\t\t\tif (started) {\n\t\t\t\tif (aborted) {\n\t\t\t\t\t// 取消按正常结果收场(aborted:true、无错误文案),不打失败日志、\n\t\t\t\t\t// 不 dispatch failed lifecycle(契约见 dispatchCompactionFailedLifecycle 注释)。\n\t\t\t\t\tsession._emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst formattedErrorMessage =\n\t\t\t\t\t\treason === \"overflow\"\n\t\t\t\t\t\t\t? `Context overflow recovery failed: ${message}`\n\t\t\t\t\t\t\t: `Auto-compaction failed: ${message}`;\n\t\t\t\t\tsession._emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\terrorMessage: formattedErrorMessage,\n\t\t\t\t\t});\n\t\t\t\t\t// 压缩失败打点:与下方 failed 事件同一事实;取消路径不打点。\n\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", { fields: { reason }, cause: error });\n\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason, errorMessage: formattedErrorMessage });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t} finally {\n\t\tsession._autoCompactionAbortController = undefined;\n\t\tsession._resolveIdleWaitIfIdle();\n\t}\n}\n\n/**\n * Retry policy + callbacks shared by compaction and branch-summary summarization calls.\n * Uses the same `settings.retry` budget/backoff as agent-turn retries so a single transient\n * stream drop no longer fails the whole operation. `source` carries the context\n * the TUI needs to render the retry and recreate the underlying indicator.\n */\nexport function summarizationRetryCallbacks(\n\tsession: AgentSessionInternals,\n\tsource: { source: \"branchSummary\" } | { source: \"compaction\"; reason: \"manual\" | \"threshold\" | \"overflow\" },\n): RetryCallbacks {\n\t// Structured trace mirroring SummaryAttemptRecordV1: one record per failed\n\t// attempt (with its backoff) plus the terminal attempt (success or final\n\t// failure) reported by onRetryFinished.\n\tconst attempts: SummaryAttemptRecordV1[] = [];\n\treturn {\n\t\tonRetryScheduled: (attempt, _maxAttempts, delayMs, errorMessage) => {\n\t\t\tattempts.push({ attempt, at: Date.now(), ok: false, failure: errorMessage, waitedMs: delayMs });\n\t\t\tsession._emit({\n\t\t\t\ttype: \"summarization_retry_scheduled\",\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts: _maxAttempts,\n\t\t\t\tdelayMs,\n\t\t\t\terrorMessage,\n\t\t\t});\n\t\t},\n\t\tonRetryAttemptStart: () => {\n\t\t\tsession._emit({\n\t\t\t\ttype: \"summarization_retry_attempt_start\",\n\t\t\t\t...source,\n\t\t\t});\n\t\t},\n\t\tonRetryFinished: (success, attempt, finalError) => {\n\t\t\t// onRetryFinished reports the number of the last FAILED attempt; the\n\t\t\t// terminal attempt it describes is the next one.\n\t\t\tattempts.push(\n\t\t\t\tsuccess\n\t\t\t\t\t? { attempt: attempt + 1, at: Date.now(), ok: true, waitedMs: 0 }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tattempt: attempt + 1,\n\t\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\twaitedMs: 0,\n\t\t\t\t\t\t\t...(finalError === undefined ? {} : { failure: finalError }),\n\t\t\t\t\t\t},\n\t\t\t);\n\t\t\tsession._emit({ type: \"summarization_retry_finished\", source, attempts });\n\t\t},\n\t};\n}\n\n/**\n * Adapt the selected capability retry policy to the shared summary executor.\n * `...settings` 展开携带 `enabled: true`(pi-ai `RetryPolicy` 形状要求,\n * settings-manager 聚合恒填 true——产品侧自动重试无条件生效,D-079)。\n */\nexport function summarizationRetryPolicy(\n\tsession: AgentSessionInternals,\n\toperationId?: string,\n\tinputRevision?: ExecutionFactsV1[\"inputRevision\"],\n\tsignal?: AbortSignal,\n): RetryPolicy {\n\tconst settings = session.settingsManager.getRetrySettings();\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst execution = executionFacts(session, \"retry\", operationId ? `${operationId}:retry` : undefined, inputRevision);\n\treturn {\n\t\t...settings,\n\t\tclassify: (message) =>\n\t\t\truntime.classifyRetry(session._retryPolicyName, {\n\t\t\t\tmessage,\n\t\t\t\tsignal,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\t\t\texecution,\n\t\t\t}),\n\t\tdecide: ({ message, retryable, attempt, maxAttempts, baseDelayMs }) =>\n\t\t\truntime.decideRetry(session._retryPolicyName, {\n\t\t\t\tretryable,\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts,\n\t\t\t\tbaseDelayMs,\n\t\t\t\terrorMessage: message.errorMessage,\n\t\t\t\tsignal,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\t\t\texecution,\n\t\t\t}),\n\t};\n}\n\n/**\n * Navigate to a different node in the session tree.\n * Unlike fork() which creates a new session file, this stays in the same file.\n *\n * @param session Internal session facade\n * @param targetId The entry ID to navigate to\n * @param options.summarize Whether user wants to summarize abandoned branch\n * @param options.customInstructions Custom instructions for summarizer\n * @param options.replaceInstructions If true, customInstructions replaces the default prompt\n * @param options.label Label to attach to the branch summary entry\n * @returns Result with editorText (if user message) and cancelled status\n */\nexport async function navigateTree(\n\tsession: AgentSessionInternals,\n\ttargetId: string,\n\toptions: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string } = {},\n): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }> {\n\tif (session.isStreaming) {\n\t\tthrow new Error(t(\"Wait for the current response to finish before navigating the session tree.\"));\n\t}\n\t// Compaction mutates the active branch; navigating mid-compaction would race the summary commit.\n\tif (session._compactionAbortController !== undefined || session._autoCompactionAbortController !== undefined) {\n\t\tthrow new Error(\n\t\t\tt(\"Wait for the current compaction or tree navigation to finish before navigating the session tree.\"),\n\t\t);\n\t}\n\n\tconst oldLeafId = session.sessionManager.getLeafId();\n\n\t// No-op if already at target\n\tif (targetId === oldLeafId) {\n\t\treturn { cancelled: false };\n\t}\n\n\t// Model required for summarization\n\tif (options.summarize && !session.model) {\n\t\tthrow new Error(t(\"No model available for summarization\"));\n\t}\n\n\tconst targetEntry = session.sessionManager.getEntry(targetId);\n\tif (!targetEntry) {\n\t\tthrow new Error(t(\"Entry {id} not found\", { id: targetId }));\n\t}\n\n\t// Collect entries to summarize (from old leaf to common ancestor)\n\tconst { entries: entriesToSummarize } = collectEntriesForBranchSummary(session.sessionManager, oldLeafId, targetId);\n\n\tconst customInstructions = options.customInstructions;\n\tconst replaceInstructions = options.replaceInstructions;\n\tconst label = options.label;\n\n\tif (session._reloadInProgress) {\n\t\tthrow new Error(t(\"Session reload in progress; tree navigation is unavailable\"));\n\t}\n\tif (session._branchSummaryAbortController) {\n\t\tthrow new Error(t(\"Branch navigation is already in progress\"));\n\t}\n\n\t// Set up abort controller for summarization\n\tsession._branchSummaryAbortController = new AbortController();\n\tconst branchSummaryPromise = new Promise<void>((resolve) => {\n\t\tsession._resolveBranchSummaryPromise = resolve;\n\t});\n\tsession._branchSummaryPromise = branchSummaryPromise;\n\n\ttry {\n\t\t// Run default summarizer if needed\n\t\tlet summaryText: string | undefined;\n\t\tlet summaryDetails: unknown;\n\t\tlet summaryUsage: Usage | undefined;\n\t\tif (options.summarize && entriesToSummarize.length > 0) {\n\t\t\tconst model = session.model!;\n\t\t\tconst auth = await getSummarizationRequestAuth(session, model, session._branchSummaryAbortController.signal);\n\t\t\tconst branchSummarySettings = session.settingsManager.getBranchSummarySettings();\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (!runtime || !runtime.hasBranchSummaryPolicy(session._branchSummaryPolicyName)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Branch summary policy is not registered: {name}\", { name: session._branchSummaryPolicyName }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst execution = executionFacts(\n\t\t\t\tsession,\n\t\t\t\t\"branch_summary\",\n\t\t\t\t`branch_summary:${session.sessionId}:${oldLeafId ?? \"root\"}:${targetId}`,\n\t\t\t);\n\t\t\tconst result = await runtime.summarizeBranch(session._branchSummaryPolicyName, {\n\t\t\t\tentries: entriesToSummarize,\n\t\t\t\tmodel: summaryModelFacts(auth.model),\n\t\t\t\tinvocation: createSummaryModelInvocationV1(\n\t\t\t\t\tsession,\n\t\t\t\t\tauth,\n\t\t\t\t\tsummarizationRetryPolicy(\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\texecution.operationId,\n\t\t\t\t\t\texecution.inputRevision,\n\t\t\t\t\t\tsession._branchSummaryAbortController.signal,\n\t\t\t\t\t),\n\t\t\t\t\tsummarizationRetryCallbacks(session, { source: \"branchSummary\" }),\n\t\t\t\t),\n\t\t\t\tsignal: session._branchSummaryAbortController.signal,\n\t\t\t\tcustomInstructions,\n\t\t\t\treplaceInstructions,\n\t\t\t\treserveTokens: branchSummarySettings.reserveTokens,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"branch_summary\" },\n\t\t\t\texecution,\n\t\t\t});\n\t\t\tif (result.aborted) {\n\t\t\t\treturn { cancelled: true, aborted: true };\n\t\t\t}\n\t\t\tif (result.error) {\n\t\t\t\tthrow new Error(result.error);\n\t\t\t}\n\t\t\tsummaryText = result.summary;\n\t\t\tsummaryUsage = result.usage as Usage | undefined;\n\t\t\tsummaryDetails = {\n\t\t\t\treadFiles: result.readFiles || [],\n\t\t\t\tmodifiedFiles: result.modifiedFiles || [],\n\t\t\t};\n\t\t}\n\t\tif (session._branchSummaryAbortController.signal.aborted || session._reloadInProgress) {\n\t\t\treturn { cancelled: true, aborted: true };\n\t\t}\n\n\t\t// Determine the new leaf position based on target type\n\t\tlet newLeafId: string | null;\n\t\tlet editorText: string | undefined;\n\n\t\tif (targetEntry.type === \"message\" && targetEntry.message.role === \"user\") {\n\t\t\t// User message: leaf = parent (null if root), text goes to editor\n\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\teditorText = contentText(targetEntry.message.content, \"\");\n\t\t} else if (targetEntry.type === \"custom_message\") {\n\t\t\t// Custom message: leaf = parent (null if root), text goes to editor\n\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\teditorText = contentText(targetEntry.content, \"\");\n\t\t} else {\n\t\t\t// Non-user message: leaf = selected node\n\t\t\tnewLeafId = targetId;\n\t\t}\n\n\t\t// Switch leaf (with or without summary)\n\t\t// Summary is attached at the navigation target position (newLeafId), not the old branch\n\t\tlet summaryEntry: BranchSummaryEntry | undefined;\n\t\tif (summaryText) {\n\t\t\t// Create summary at target position (can be null for root)\n\t\t\tconst summaryId = session.sessionManager.branchWithSummary(\n\t\t\t\tnewLeafId,\n\t\t\t\tsummaryText,\n\t\t\t\tsummaryDetails,\n\t\t\t\tfalse,\n\t\t\t\tsummaryUsage,\n\t\t\t);\n\t\t\tsummaryEntry = session.sessionManager.getEntry(summaryId) as BranchSummaryEntry;\n\n\t\t\t// Attach label to the summary entry\n\t\t\tif (label) {\n\t\t\t\tsession.sessionManager.appendLabelChange(summaryId, label);\n\t\t\t}\n\t\t} else if (newLeafId === null) {\n\t\t\t// No summary, navigating to root - reset leaf\n\t\t\tsession.sessionManager.resetLeaf();\n\t\t} else {\n\t\t\t// No summary, navigating to non-root\n\t\t\tsession.sessionManager.branch(newLeafId);\n\t\t}\n\n\t\t// Attach label to target entry when not summarizing (no summary entry to label)\n\t\tif (label && !summaryText) {\n\t\t\tsession.sessionManager.appendLabelChange(targetId, label);\n\t\t}\n\n\t\t// Update agent state\n\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\tawait session._applyContextTransition(sessionContext.messages, \"tree\");\n\n\t\treturn { editorText, cancelled: false, summaryEntry };\n\t} finally {\n\t\tsession._branchSummaryAbortController = undefined;\n\t\tsession._resolveIdleWaitIfIdle();\n\t\tsession._resolveBranchSummaryPromise?.();\n\t\tsession._resolveBranchSummaryPromise = undefined;\n\t\tif (session._branchSummaryPromise === branchSummaryPromise) session._branchSummaryPromise = undefined;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-compaction.js","sourceRoot":"","sources":["../../src/core/agent-session-compaction.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Compaction engine and branch summarization for AgentSession.\n *\n * Extracted from `agent-session.ts`. Every function here operates on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession`\n * keeps same-name private delegates so call sites, dynamic dispatch, and test\n * spies keep working unchanged. Method-to-method calls go through the session\n * parameter (not direct function calls) to preserve that dispatch.\n */\n\nimport type { AgentContext, AgentMessage } from \"@agent-forge/agent-core\";\nimport { contentText, retryAssistantCall, uuidv7 } from \"@agent-forge/ai\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAuthResult,\n\tContext,\n\tModel,\n\tProviderHeaders,\n\tRetryCallbacks,\n\tRetryPolicy,\n\tSimpleStreamOptions,\n\tUsage,\n} from \"@agent-forge/ai/compat\";\nimport { completeSimple, streamSimple } from \"@agent-forge/ai/compat\";\nimport type { SummaryAttemptRecordV1 } from \"../host/summary-retry.ts\";\nimport {\n\ttype AgentSessionInternals,\n\tdetachedSessionSnapshot,\n\tSessionCancelledError,\n} from \"./agent-session-internal.ts\";\nimport { dispatchCompactionDecisionLifecycle, dispatchCompactionFailedLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage } from \"./auth-guidance.ts\";\nimport {\n\ttype CompactionPreparation,\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcollectEntriesForBranchSummary,\n\teffectiveKeepRecentTokens,\n\testimateContextTokens,\n\testimateTokens,\n\tisTurnStartMessage,\n} from \"./compaction/index.ts\";\nimport type { ExecutionFactsV1 } from \"./extensions/index.ts\";\nimport {\n\tDEFAULT_COMPACTION_POLICY_NAME,\n\tDEFAULT_OVERFLOW_POLICY_NAME,\n\tSESSION_COMPACTION_COMMIT_EVENT_ID,\n\tSESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\ttype SessionCompactionCommitEventDataV1,\n} from \"./extensions/index.ts\";\nimport type { SummaryModelFactsV1, SummaryModelInvocationV1 } from \"./extensions/public-api.ts\";\nimport { SUMMARY_MODEL_INVOCATION_ERROR_CODES } from \"./extensions/public-api.ts\";\nimport { t } from \"./i18n/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, SessionEntry, SessionManager } from \"./session-manager.ts\";\nimport { getLatestCompactionEntry } from \"./session-manager.ts\";\nimport type { CompactionSettings } from \"./settings-manager.ts\";\n\nfunction withoutDeletedHeaders(headers: ProviderHeaders | undefined): Record<string, string> | undefined {\n\treturn headers\n\t\t? Object.fromEntries(Object.entries(headers).filter((entry): entry is [string, string] => entry[1] !== null))\n\t\t: undefined;\n}\n\nfunction estimateMessagesTokens(messages: AgentMessage[]): number {\n\tlet tokens = 0;\n\tfor (const message of messages) {\n\t\ttokens += estimateTokens(message);\n\t}\n\treturn tokens;\n}\n\n/**\n * 溢出裁剪阶梯级数。压缩恢复(compact-and-retry)后仍 context overflow 时,\n * 对运行时投影按 turn 边界逐级裁剪重试:第 1 级压到 `keepRecentTokens`,\n * 第 2 级压到 {@link OVERFLOW_TRIM_STAGE2_TARGET_TOKENS},第 3 级仅保留最后\n * 一条 user 消息及其后内容。canonical 会话历史永不被裁剪路径改写。\n */\nconst OVERFLOW_TRIM_MAX_STAGES = 3;\n\n/** 溢出裁剪第 2 级的目标 token 预算(估算)。 */\nconst OVERFLOW_TRIM_STAGE2_TARGET_TOKENS = 10_000;\n\n/**\n * 溢出/截断裁剪失败文案:实际发生过裁剪时附上前缀(分语:context overflow\n * 维持既有精确文案,recoverable length 用截断响应措辞),0 次保持策略原文。\n */\nfunction overflowTrimFailureMessage(\n\tattempts: number,\n\tfailureMessage: string,\n\tkind: \"contextOverflow\" | \"recoverableLength\",\n): string {\n\tif (attempts <= 0) return failureMessage;\n\tconst head = kind === \"contextOverflow\" ? \"Context overflow\" : \"Truncated response\";\n\treturn `${head} persists after compaction and ${attempts} trim attempts. ${failureMessage}`;\n}\n\n/**\n * Trim the runtime projection for one overflow-recovery stage: drop the oldest\n * complete turns until the kept part estimates within the stage target. The\n * floor keeps the current turn's user message, so the projection is never\n * empty. Stage indices are 0-based: 0 → keepRecentTokens, 1 → 10000, 2 → keep\n * from the last user message (fallback: the latest turn start) onward.\n */\nfunction trimOverflowProjection(messages: AgentMessage[], stage: number, keepRecentTokens: number): AgentMessage[] {\n\t// 第 3 级:仅保留最后一条 user 消息及其后内容(保底不变量)。\n\tif (stage >= 2) {\n\t\t// 切点为 0 时返回原引用:内容无变化,调用方守卫据此直接失败。\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tif (messages[i].role === \"user\") return i === 0 ? messages : messages.slice(i);\n\t\t}\n\t\t// 投影中没有 user 消息时退到最近的回合起点,保持非空。\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tif (isTurnStartMessage(messages[i])) return i === 0 ? messages : messages.slice(i);\n\t\t}\n\t\treturn messages;\n\t}\n\n\tconst target = stage === 0 ? keepRecentTokens : OVERFLOW_TRIM_STAGE2_TARGET_TOKENS;\n\tconst turnStarts: number[] = [];\n\tfor (let i = 0; i < messages.length; i++) {\n\t\tif (isTurnStartMessage(messages[i])) turnStarts.push(i);\n\t}\n\tif (turnStarts.length === 0) return messages;\n\n\t// 后缀 token 估算(chars/4,与 estimateTokens 同一启发式)。\n\tconst suffixTokens = new Array<number>(messages.length + 1).fill(0);\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tsuffixTokens[i] = suffixTokens[i + 1] + estimateTokens(messages[i]);\n\t}\n\tif (suffixTokens[0] <= target) return messages;\n\n\t// 从头删除最老完整回合,直到保留部分估算 token ≤ 目标;永不越过最后一个回合起点。\n\tfor (const start of turnStarts) {\n\t\tif (suffixTokens[start] <= target) return messages.slice(start);\n\t}\n\tconst floorStart = turnStarts[turnStarts.length - 1];\n\treturn floorStart === 0 ? messages : messages.slice(floorStart);\n}\n\nexport async function getRequiredRequestAuth(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\tsignal?: AbortSignal,\n): Promise<{\n\tmodel: Model<Api>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}> {\n\tlet result: AuthResult | undefined;\n\ttry {\n\t\tresult = await session._modelRuntime.getAuth(model, { signal });\n\t} catch (error) {\n\t\tconst cause = error instanceof Error ? error.cause : undefined;\n\t\tif (cause instanceof Error && cause.message === \"authHeader requires a resolved API key\") {\n\t\t\tthrow new Error(formatNoApiKeyFoundMessage(model.provider));\n\t\t}\n\t\tthrow error;\n\t}\n\tif (result && (result.auth.apiKey || result.auth.headers)) {\n\t\tconst requestModel = result.auth.baseUrl ? { ...model, baseUrl: result.auth.baseUrl } : model;\n\t\treturn {\n\t\t\tmodel: requestModel,\n\t\t\tapiKey: result.auth.apiKey,\n\t\t\theaders: withoutDeletedHeaders(result.auth.headers),\n\t\t\tenv: result.env,\n\t\t};\n\t}\n\n\tconst isOAuth = session._modelRuntime.isUsingOAuth(model.provider);\n\tif (isOAuth) {\n\t\tthrow new Error(\n\t\t\tt(\n\t\t\t\t\"Authentication failed for \\\"{provider}\\\". Credentials may have expired or network is unavailable. Run '/login {provider}' to re-authenticate.\",\n\t\t\t\t{ provider: model.provider },\n\t\t\t),\n\t\t);\n\t}\n\tthrow new Error(formatNoApiKeyFoundMessage(model.provider));\n}\n\nexport async function getSummarizationRequestAuth(\n\tsession: AgentSessionInternals,\n\tmodel: Model<Api>,\n\tsignal?: AbortSignal,\n): Promise<{\n\tmodel: Model<Api>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}> {\n\tif (session.agent.streamFunction === streamSimple) {\n\t\t// provider-failover 隐性耦合(设计 供应商能力槽位与主备切换 §4.8/§6 风险 11):\n\t\t// SDK 默认装配传入的是闭包而非 streamSimple 本身,外包 streamFn wrapper 后该\n\t\t// 恒等比较结果不变(仍走非直连分支)——本比较只对显式传 streamSimple 的宿主\n\t\t// (如测试 harness)为真,行为与 wrapper 上线前逐点等价。\n\t\treturn getRequiredRequestAuth(session, model, signal);\n\t}\n\n\ttry {\n\t\tconst result = await session._modelRuntime.getAuth(model, { signal });\n\t\tif (!result) return { model };\n\t\tconst requestModel = result.auth.baseUrl ? { ...model, baseUrl: result.auth.baseUrl } : model;\n\t\treturn {\n\t\t\tmodel: requestModel,\n\t\t\tapiKey: result.auth.apiKey,\n\t\t\theaders: withoutDeletedHeaders(result.auth.headers),\n\t\t\tenv: result.env,\n\t\t};\n\t} catch (error) {\n\t\t// Auth resolution normally falls back to an unauthenticated summary when\n\t\t// it fails, but an abort must not be swallowed into that fallback: the\n\t\t// caller's signal decided this run is over.\n\t\tif (signal?.aborted) throw error;\n\t\treturn { model };\n\t}\n}\n\n/** Provider-agnostic facts extracted from the auth-resolved summary model. */\nfunction summaryModelFacts(model: Model<Api>): SummaryModelFactsV1 {\n\treturn {\n\t\tid: model.id,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\treasoning: model.reasoning,\n\t};\n}\n\n/**\n * Build the host-owned summary invocation boundary (V1) for one summary run.\n *\n * The closure captures the auth resolved once per run (model with its\n * auth-level baseUrl override, API key, headers, provider env), the retry\n * budget, and the retry callbacks that mirror retries into session events.\n * Transport selection lazily observes `session.agent.streamFunction` at each\n * invoke so request behavior (timeouts, retries, attribution headers) stays\n * identical to agent turns; without one the host falls back to\n * `completeSimple`. Every completion is cache-free (`cacheRetention: \"none\"`)\n * and routed through `routingSessionId` when the caller supplies one; callers\n * without a session (branch summaries) get a fresh routing id per call.\n */\nexport function createSummaryModelInvocationV1(\n\tsession: AgentSessionInternals,\n\tauth: {\n\t\tmodel: Model<Api>;\n\t\tapiKey?: string;\n\t\theaders?: Record<string, string>;\n\t\tenv?: Record<string, string>;\n\t},\n\tretry: RetryPolicy,\n\tcallbacks?: RetryCallbacks,\n\toptions: { routingSessionId?: string } = {},\n): SummaryModelInvocationV1 {\n\treturn {\n\t\tinvoke: async (input, signal) => {\n\t\t\t// Host-owned output cap: never exceed the summary model's limit.\n\t\t\t// Models without a positive cap stay unclamped.\n\t\t\tconst maxTokens =\n\t\t\t\tinput.maxTokens === undefined || auth.model.maxTokens <= 0\n\t\t\t\t\t? input.maxTokens\n\t\t\t\t\t: Math.min(input.maxTokens, auth.model.maxTokens);\n\t\t\tconst requestOptions: SimpleStreamOptions = {\n\t\t\t\t...(maxTokens === undefined ? {} : { maxTokens }),\n\t\t\t\tsignal,\n\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\theaders: auth.headers,\n\t\t\t\tenv: auth.env,\n\t\t\t\t// One-off summaries must never write the prompt cache.\n\t\t\t\tcacheRetention: \"none\",\n\t\t\t\tsessionId: options.routingSessionId ?? uuidv7(),\n\t\t\t};\n\t\t\tif (auth.model.reasoning && input.thinkingLevel && input.thinkingLevel !== \"off\") {\n\t\t\t\trequestOptions.reasoning = input.thinkingLevel;\n\t\t\t}\n\t\t\tconst context: Context = {\n\t\t\t\tsystemPrompt: input.systemPrompt,\n\t\t\t\tmessages: [{ role: \"user\", content: [{ type: \"text\", text: input.prompt }], timestamp: Date.now() }],\n\t\t\t};\n\t\t\tconst produce = async (): Promise<AssistantMessage> => {\n\t\t\t\tconst streamFn = session.agent.streamFunction;\n\t\t\t\treturn streamFn\n\t\t\t\t\t? (await streamFn(auth.model, context, requestOptions)).result()\n\t\t\t\t\t: completeSimple(auth.model, context, requestOptions);\n\t\t\t};\n\t\t\tlet response: AssistantMessage;\n\t\t\ttry {\n\t\t\t\tresponse = await retryAssistantCall(produce, retry, requestOptions.signal, callbacks);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\t\treturn { version: 1, status: \"aborted\" };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.transportError,\n\t\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.stopReason === \"aborted\") {\n\t\t\t\treturn { version: 1, status: \"aborted\" };\n\t\t\t}\n\t\t\tif (response.stopReason === \"error\") {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.providerError,\n\t\t\t\t\t\tmessage: response.errorMessage || \"Unknown error\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.stopReason === \"length\") {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.lengthCap,\n\t\t\t\t\t\tmessage: \"generation hit the token cap and the summary is incomplete\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (response.content.some((block) => block.type === \"toolCall\")) {\n\t\t\t\treturn {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: SUMMARY_MODEL_INVOCATION_ERROR_CODES.toolCall,\n\t\t\t\t\t\tmessage: \"attempted to call a tool\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tversion: 1,\n\t\t\t\tstatus: \"completed\",\n\t\t\t\ttext: contentText(response.content),\n\t\t\t\tusage: response.usage,\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport async function compactBeforeNextAssistantResponse(\n\tsession: AgentSessionInternals,\n\tcontext: AgentContext,\n\tsignal?: AbortSignal,\n): Promise<AgentContext> {\n\tconst model = session.model;\n\tconst settings = session.settingsManager.getCompactionSettings(model ?? undefined);\n\n\tif (!model || model.contextWindow <= 0) {\n\t\treturn context;\n\t}\n\tconst contextTokens = estimateContextTokens(context.messages).tokens;\n\tconst decision = await decideCompaction(session, {\n\t\treason: \"threshold\",\n\t\tcontextOverflow: false,\n\t\trecoverableLength: false,\n\t\tcontextUsage: {\n\t\t\tcontextTokens,\n\t\t\tcontextWindow: model.contextWindow,\n\t\t\treserveTokens: settings.reserveTokens,\n\t\t},\n\t\tcanContinue: false,\n\t\tsignal: signal ?? session._policyDecisionAbortController?.signal,\n\t});\n\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\treason: \"threshold\",\n\t\tcompact: decision.compact,\n\t\t// The pre-check never retries the turn: the runAutoCompaction call below\n\t\t// passes a fixed false, so the policy's retry flag is not the fact here.\n\t\twillRetry: false,\n\t\tcontextTokens,\n\t\tcontextWindow: model.contextWindow,\n\t\treserveTokens: settings.reserveTokens,\n\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t});\n\tif (!decision.compact) return context;\n\n\tawait session._runAutoCompaction(\"threshold\", false);\n\treturn {\n\t\t...context,\n\t\tmessages: session.agent.state.messages.slice(),\n\t};\n}\n\nexport function executionFacts(\n\tsession: AgentSessionInternals,\n\tphase: ExecutionFactsV1[\"phase\"],\n\toperationId?: string,\n\trevision?: ExecutionFactsV1[\"inputRevision\"],\n): ExecutionFactsV1 {\n\tconst inputRevision = detachedSessionSnapshot(revision ?? session.sessionManager.getRevision());\n\treturn Object.freeze({\n\t\tversion: 1 as const,\n\t\toperationId:\n\t\t\toperationId ??\n\t\t\t`${phase}:${inputRevision.sessionId}:${inputRevision.sequence}:${inputRevision.leafId ?? \"root\"}`,\n\t\tsessionId: session.sessionId,\n\t\tinputRevision,\n\t\tphase,\n\t});\n}\n\nexport async function runCompactionSummary(\n\tsession: AgentSessionInternals,\n\tpreparation: CompactionPreparation,\n\tauth: {\n\t\tmodel: Model<Api>;\n\t\tapiKey?: string;\n\t\theaders?: Record<string, string>;\n\t\tenv?: Record<string, string>;\n\t},\n\tcustomInstructions: string | undefined,\n\tsignal: AbortSignal,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n\texecution: ExecutionFactsV1,\n): Promise<CompactionResult> {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst result = await runtime.summarizeCompaction(session._compactionPolicyName, {\n\t\tpreparation,\n\t\tmodel: summaryModelFacts(auth.model),\n\t\tinvocation: createSummaryModelInvocationV1(\n\t\t\tsession,\n\t\t\tauth,\n\t\t\tsummarizationRetryPolicy(session, execution.operationId, execution.inputRevision, signal),\n\t\t\tsummarizationRetryCallbacks(session, { source: \"compaction\", reason }),\n\t\t\t{ routingSessionId: session.sessionId },\n\t\t),\n\t\tcustomInstructions,\n\t\tsignal,\n\t\treason,\n\t\t// 结构化摘要是机械任务,高思考档不改变质量只增加成本(参照 Codex\n\t\t// RequestEffortUsage::Compaction):摘要请求一律钳到 low,用户显式 off 保持 off。\n\t\tthinkingLevel: session.thinkingLevel === \"off\" ? \"off\" : \"low\",\n\t\tsessionId: session.sessionId,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution,\n\t});\n\t// 包内收窄:invocation 结果按 provider 原样透传 usage;压缩 usage 合并需要内部 Usage 形状。\n\treturn { ...result, usage: result.usage as Usage | undefined };\n}\n\nexport async function decideCompaction(\n\tsession: AgentSessionInternals,\n\tinput: {\n\t\treason: \"overflow\" | \"threshold\";\n\t\tcontextOverflow: boolean;\n\t\trecoverableLength: boolean;\n\t\tcontextUsage?: { contextTokens: number; contextWindow: number; reserveTokens: number };\n\t\tcanContinue: boolean;\n\t\texecution?: ExecutionFactsV1;\n\t\tsignal?: AbortSignal;\n\t},\n) {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做压缩决策(无执行者),回合继续;缺失经 warn 日志与手动 /compact 的显式\n\t// 错误暴露。默认插件不得成为隐藏前提(宪法 §2/§5)。显式配置的其他策略名缺\n\t// 失仍然显式失败——配置错误必须可见(宪法 §7)。\n\tif (\n\t\tsession._compactionPolicyName === DEFAULT_COMPACTION_POLICY_NAME &&\n\t\t!runtime.hasCompactionPolicy(session._compactionPolicyName)\n\t) {\n\t\tsession._hostLogger?.warn(\"compaction\", \"no compaction policy registered; skipping automatic compaction\", {\n\t\t\tfields: { policyName: session._compactionPolicyName, reason: input.reason },\n\t\t});\n\t\treturn { compact: false, retry: false };\n\t}\n\treturn runtime.decideCompaction(session._compactionPolicyName, {\n\t\trecoveryAttempted: session._overflowRecoveryAttempted,\n\t\t...input,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution: input.execution ?? executionFacts(session, \"compaction\"),\n\t\tsignal: input.signal,\n\t});\n}\n\nexport async function prepareCompaction(\n\tsession: AgentSessionInternals,\n\tpathEntries: SessionEntry[],\n\tsettings: CompactionSettings,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n): Promise<CompactionPreparation | undefined> {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst preparation = await runtime.prepareCompaction(session._compactionPolicyName, {\n\t\tentries: pathEntries,\n\t\tsettings,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"compaction\" },\n\t\texecution: execution ?? executionFacts(session, \"compaction\"),\n\t\tsignal,\n\t});\n\tif (preparation === undefined) return undefined;\n\tconst value = preparation as Record<string, unknown>;\n\tif (\n\t\t!preparation ||\n\t\ttypeof preparation !== \"object\" ||\n\t\ttypeof value.firstKeptEntryId !== \"string\" ||\n\t\t!Array.isArray(value.messagesToSummarize) ||\n\t\t!Array.isArray(value.turnPrefixMessages) ||\n\t\ttypeof value.isSplitTurn !== \"boolean\" ||\n\t\t!Number.isFinite(value.tokensBefore) ||\n\t\ttypeof value.fileOps !== \"object\" ||\n\t\ttypeof value.settings !== \"object\"\n\t) {\n\t\tthrow new Error(\n\t\t\tt(\"Compaction policy returned an invalid preparation: {policyName}\", {\n\t\t\t\tpolicyName: session._compactionPolicyName,\n\t\t\t}),\n\t\t);\n\t}\n\treturn preparation as CompactionPreparation;\n}\n\n/** Capture the branch facts used by one optimistic compaction commit. */\nexport function captureCompactionCommitBoundary(\n\tsession: AgentSessionInternals,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n): {\n\tpathEntries: SessionEntry[];\n\texpectedRevision: ReturnType<SessionManager[\"getRevision\"]>;\n\toperationId: string;\n} {\n\tconst pathEntries = session.sessionManager.getBranch();\n\tconst expectedRevision = session.sessionManager.getRevision();\n\treturn {\n\t\tpathEntries,\n\t\texpectedRevision,\n\t\toperationId: `compaction:${reason}:${expectedRevision.sessionId}:${expectedRevision.sequence}:${expectedRevision.leafId ?? \"root\"}`,\n\t};\n}\n\n/** Queue compaction work so canonical commit and runtime projection stay ordered. */\nexport function enqueueCompaction<T>(session: AgentSessionInternals, operation: () => Promise<T>): Promise<T> {\n\tconst previous = session._compactionQueue;\n\tlet release!: () => void;\n\tsession._compactionQueue = new Promise<void>((resolve) => {\n\t\trelease = resolve;\n\t});\n\tconst queued = previous\n\t\t.then(() => {\n\t\t\tif (session._reloadInProgress) {\n\t\t\t\tthrow new Error(t(\"Session reload in progress; compaction was not started\"));\n\t\t\t}\n\t\t\treturn operation();\n\t\t})\n\t\t.finally(release);\n\tsession._activeCompactionPromise = queued;\n\tvoid queued.then(\n\t\t() => {\n\t\t\tif (session._activeCompactionPromise === queued) session._activeCompactionPromise = undefined;\n\t\t},\n\t\t() => {\n\t\t\tif (session._activeCompactionPromise === queued) session._activeCompactionPromise = undefined;\n\t\t},\n\t);\n\treturn queued;\n}\n\n/**\n * Persist an optimistic compaction result before projecting its context.\n *\n * A revision conflict is a failed compaction, not a signal to recompute or\n * append against newer session history. A replay is a successful prior\n * commit and still requires the caller to apply the runtime projection.\n */\nexport function commitCompaction(\n\tsession: AgentSessionInternals,\n\tinput: {\n\t\texpectedRevision: ReturnType<SessionManager[\"getRevision\"]>;\n\t\toperationId: string;\n\t\tsummary: string;\n\t\tfirstKeptEntryId: string;\n\t\ttokensBefore: number;\n\t\tdetails: unknown;\n\t\tusage: Usage | undefined;\n\t},\n): {\n\tentry: CompactionEntry;\n\tstatus: \"committed\" | \"replayed\";\n\trevision: ReturnType<SessionManager[\"getRevision\"]>;\n} {\n\tconst commit = session.sessionManager.commitCompaction({\n\t\tversion: 1,\n\t\toperationId: input.operationId,\n\t\texpectedRevision: input.expectedRevision,\n\t\tsummary: input.summary,\n\t\tfirstKeptEntryId: input.firstKeptEntryId,\n\t\ttokensBefore: input.tokensBefore,\n\t\tdetails: input.details,\n\t\tfromHook: false,\n\t\tusage: input.usage,\n\t});\n\tif (commit.status === \"revision_conflict\") {\n\t\tthrow new Error(\n\t\t\tt(\n\t\t\t\t\"Compaction commit revision conflict: expected {expectedSequence}/{expectedLeafId}, current {currentSequence}/{currentLeafId}\",\n\t\t\t\t{\n\t\t\t\t\texpectedSequence: input.expectedRevision.sequence,\n\t\t\t\t\texpectedLeafId: input.expectedRevision.leafId ?? \"root\",\n\t\t\t\t\tcurrentSequence: commit.currentRevision.sequence,\n\t\t\t\t\tcurrentLeafId: commit.currentRevision.leafId ?? \"root\",\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\n\tconst entry = session.sessionManager.getEntry(commit.entryId);\n\tif (entry?.type !== \"compaction\" || entry.operationId !== input.operationId) {\n\t\tthrow new Error(t(\"Compaction commit entry is unavailable: {entryId}\", { entryId: commit.entryId }));\n\t}\n\treturn { entry, status: commit.status, revision: commit.revision };\n}\n\n/** Deliver committed compaction facts without making delivery part of the commit. */\nexport async function dispatchCompactionCommitLifecycle(\n\tsession: AgentSessionInternals,\n\treason: \"manual\" | \"threshold\" | \"overflow\",\n\tcommit: {\n\t\tentry: CompactionEntry;\n\t\tstatus: \"committed\" | \"replayed\";\n\t\trevision: ReturnType<SessionManager[\"getRevision\"]>;\n\t},\n): Promise<void> {\n\ttry {\n\t\tconst runtime = session._capabilityRuntime;\n\t\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\t\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t\tconst entry = commit.entry;\n\t\tconst data: SessionCompactionCommitEventDataV1 = {\n\t\t\tversion: 1,\n\t\t\tstatus: commit.status,\n\t\t\tentryId: entry.id,\n\t\t\toperationId: entry.operationId ?? \"\",\n\t\t\trevision: commit.revision,\n\t\t\treason,\n\t\t\tsummary: entry.summary,\n\t\t\tfirstKeptEntryId: entry.firstKeptEntryId,\n\t\t\ttokensBefore: entry.tokensBefore,\n\t\t\tfromHook: entry.fromHook === true,\n\t\t\t...(entry.usage === undefined ? {} : { usage: entry.usage }),\n\t\t\t...(entry.details === undefined ? {} : { details: entry.details }),\n\t\t};\n\t\tconst delivery = await runtime.dispatchLifecycle({\n\t\t\ttype: SESSION_COMPACTION_COMMIT_EVENT_ID,\n\t\t\tversion: SESSION_COMPACTION_COMMIT_EVENT_VERSION,\n\t\t\tphase: \"committed\",\n\t\t\tdata,\n\t\t\toperationId: entry.operationId,\n\t\t\tsource: \"agent-session\",\n\t\t});\n\t\tfor (const failure of delivery.report.failures) {\n\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\tfailure.error,\n\t\t\t\tfailure.pluginId,\n\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}/${failure.kind}`,\n\t\t\t);\n\t\t}\n\t} catch (error) {\n\t\tconst report = (\n\t\t\terror as { report?: { failures?: readonly { error: unknown; pluginId: string; kind: string }[] } }\n\t\t).report;\n\t\t// v8 ignore next -- phase 常量合法且未传 signal,dispatchLifecycle 仅在 transform/execute 被禁止注册时拒绝,report 形态拒绝不可达\n\t\tif (report?.failures) {\n\t\t\tfor (const failure of report.failures) {\n\t\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\t\tfailure.error,\n\t\t\t\t\tfailure.pluginId,\n\t\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}/${failure.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tsession._observeLifecycleDeliveryError(\n\t\t\t\terror,\n\t\t\t\t\"<capability-lifecycle>\",\n\t\t\t\t`${SESSION_COMPACTION_COMMIT_EVENT_ID}@${SESSION_COMPACTION_COMMIT_EVENT_VERSION}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport async function decideOverflow(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n) {\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做溢出分类(无执行者),错误不归类为 context overflow,落入通用错误\n\t// 处理;缺失经 warn 日志暴露,去重方式与 decideCompaction 守卫一致(不去\n\t// 重)。默认插件不得成为隐藏前提(宪法 §2/§5)。显式配置的其他策略名缺失\n\t// 仍然显式失败——配置错误必须可见(宪法 §7)。守卫覆盖全部调用者:回合\n\t// 结算的 isRetryableError 与自动压缩触发的 checkCompaction。\n\tif (\n\t\tsession._overflowPolicyName === DEFAULT_OVERFLOW_POLICY_NAME &&\n\t\t!runtime.hasOverflowPolicy(session._overflowPolicyName)\n\t) {\n\t\tsession._hostLogger?.warn(\"overflow\", \"no overflow policy registered; skipping overflow classification\", {\n\t\t\tfields: { policyName: session._overflowPolicyName },\n\t\t});\n\t\treturn { contextOverflow: false, recoverableLength: false };\n\t}\n\treturn runtime.decideOverflow(session._overflowPolicyName, {\n\t\tmessage,\n\t\tcontextWindow: session.model?.contextWindow,\n\t\tdesiredMaxOutput: session.model?.maxTokens ?? 0,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"overflow\" },\n\t\texecution: execution ?? executionFacts(session, \"overflow\"),\n\t\tsignal,\n\t});\n}\n\n/**\n * Clear the manual compaction controller and wake any `waitForIdle()` caller.\n * Mirrors the upstream `_clearManualCompactionState` helper: every manual\n * compaction exit path must drop the controller before listeners observe\n * `compaction_end`, so `isIdle` is already true when they run.\n */\nfunction clearManualCompactionState(session: AgentSessionInternals): void {\n\tsession._compactionAbortController = undefined;\n\tsession._resolveIdleWaitIfIdle();\n}\n\n/** Structured cancellation outcome for manual compaction (mirrors navigateTree's shape). */\nexport interface CompactionCancelledResult {\n\treadonly cancelled: true;\n\treadonly aborted: true;\n}\n\nexport async function compactInternal(\n\tsession: AgentSessionInternals,\n\tcustomInstructions?: string,\n): Promise<CompactionResult | CompactionCancelledResult> {\n\tawait session._abortInternal();\n\t// Reload can begin while abort() is waiting for the active agent turn. Do\n\t// not create a fresh controller or begin summary work after that barrier.\n\t// Nothing started, so there is nothing to notify: resolve cancelled.\n\tif (session._reloadInProgress) {\n\t\treturn { cancelled: true, aborted: true };\n\t}\n\tsession._compactionAbortController = new AbortController();\n\tsession._emit({ type: \"compaction_start\", reason: \"manual\" });\n\n\ttry {\n\t\tif (!session.model) {\n\t\t\tthrow new Error(formatNoModelSelectedMessage());\n\t\t}\n\n\t\tconst auth = await getSummarizationRequestAuth(session, session.model, session._compactionAbortController.signal);\n\n\t\tconst { pathEntries, expectedRevision, operationId } = captureCompactionCommitBoundary(session, \"manual\");\n\t\tconst rawSettings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释):手动\n\t\t// 压缩与自动路径同一 effective 值,小窗口下 /compact 不再因保护预算吃满\n\t\t// 整个可摘要窗口而报 \"Nothing to compact\"。\n\t\tconst settings: CompactionSettings = {\n\t\t\t...rawSettings,\n\t\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\t\trawSettings.keepRecentTokens,\n\t\t\t\tsession.model.contextWindow,\n\t\t\t\trawSettings.reserveTokens,\n\t\t\t),\n\t\t};\n\n\t\tconst execution = executionFacts(session, \"compaction\", operationId);\n\t\tconst preparation = await prepareCompaction(\n\t\t\tsession,\n\t\t\tpathEntries,\n\t\t\tsettings,\n\t\t\texecution,\n\t\t\tsession._compactionAbortController.signal,\n\t\t);\n\t\tif (!preparation) {\n\t\t\t// Check why we can't compact\n\t\t\tconst lastEntry = pathEntries[pathEntries.length - 1];\n\t\t\tif (lastEntry?.type === \"compaction\") {\n\t\t\t\tthrow new Error(t(\"Already compacted\"));\n\t\t\t}\n\t\t\tthrow new Error(t(\"Nothing to compact (session too small)\"));\n\t\t}\n\n\t\t// Shared default summary generator, also used by automatic compaction.\n\t\tconst { summary, firstKeptEntryId, tokensBefore, usage, details } = await runCompactionSummary(\n\t\t\tsession,\n\t\t\tpreparation,\n\t\t\tauth,\n\t\t\tcustomInstructions,\n\t\t\tsession._compactionAbortController.signal,\n\t\t\t\"manual\",\n\t\t\texecution,\n\t\t);\n\n\t\tif (session._compactionAbortController.signal.aborted || session._reloadInProgress) {\n\t\t\tthrow new SessionCancelledError(\"signal\");\n\t\t}\n\n\t\tconst compactionCommit = commitCompaction(session, {\n\t\t\texpectedRevision,\n\t\t\toperationId,\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t});\n\t\tawait dispatchCompactionCommitLifecycle(session, \"manual\", compactionCommit);\n\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\tawait session._applyContextTransition(sessionContext.messages, \"compaction\");\n\t\t// Context strategies may replace the runtime projection without rewriting\n\t\t// canonical session history. Report the immediately post-compaction runtime\n\t\t// projection, rather than the pre-projection session reconstruction.\n\t\tconst estimatedTokensAfter = estimateMessagesTokens(session.agent.state.messages);\n\n\t\tconst compactionResult: CompactionResult = {\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\testimatedTokensAfter,\n\t\t\tusage,\n\t\t\tdetails,\n\t\t};\n\t\t// compaction_end listeners may submit queued prompts, so expose idle state before notifying them.\n\t\tclearManualCompactionState(session);\n\t\tsession._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"manual\",\n\t\t\tresult: compactionResult,\n\t\t\taborted: false,\n\t\t\twillRetry: false,\n\t\t});\n\t\treturn compactionResult;\n\t} catch (error) {\n\t\t// Cancellation is decided by the controller state, not the error shape:\n\t\t// aborts surface as AbortError from the summary pipeline, but so can\n\t\t// unrelated failures — only the signal tells them apart (same split as\n\t\t// runAutoCompactionInternal).\n\t\tconst cancelled =\n\t\t\terror instanceof SessionCancelledError || session._compactionAbortController?.signal.aborted === true;\n\t\tif (cancelled) {\n\t\t\t// Cancellation is a normal outcome: notify listeners and resolve with\n\t\t\t// the structured cancelled result instead of rejecting (matches\n\t\t\t// navigateTree).\n\t\t\tclearManualCompactionState(session);\n\t\t\tsession._emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason: \"manual\",\n\t\t\t\tresult: undefined,\n\t\t\t\taborted: true,\n\t\t\t\twillRetry: false,\n\t\t\t});\n\t\t\treturn { cancelled: true, aborted: true };\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst errorMessage = `Compaction failed: ${message}`;\n\t\tclearManualCompactionState(session);\n\t\tsession._emit({\n\t\t\ttype: \"compaction_end\",\n\t\t\treason: \"manual\",\n\t\t\tresult: undefined,\n\t\t\taborted: false,\n\t\t\twillRetry: false,\n\t\t\terrorMessage,\n\t\t});\n\t\t// 压缩失败打点(会话轨迹第 2 期,设计 §5.2):lifecycle 事件之外的一行\n\t\t// 进程日志,缺 hostLogger 时为 no-op;取消路径不打点。\n\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", { fields: { reason: \"manual\" }, cause: error });\n\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"manual\", errorMessage });\n\t\tthrow error;\n\t} finally {\n\t\tclearManualCompactionState(session);\n\t}\n}\n\n/**\n * Dispatch automatic compaction after `agent_end` or before prompt submission.\n * Manual compaction does not call this method; it enters through `compact()`.\n *\n * Automatic cases:\n * 1. Overflow with retry: a context-overflow error or recoverable length stop;\n * remove the failed assistant message, compact, and retry the turn once.\n * 2. Overflow without retry: a successful response exceeded the configured\n * context window; compact but preserve the completed response.\n * 3. Threshold without retry: valid or estimated context usage crossed the\n * configured threshold; compact without retrying the completed response.\n *\n * Each case calls `_runAutoCompaction()`. After preparation and the\n * `session_before_compact` hook, that method calls the lower-level `compact()`\n * function imported from `./compaction/index.ts`, unless the hook cancels or\n * supplies a custom result.\n *\n * @param assistantMessage The assistant message to check\n * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n * @returns Whether the post-run loop should call `agent.continue()` for overflow recovery or queued messages\n */\nexport async function checkCompaction(\n\tsession: AgentSessionInternals,\n\tassistantMessage: AssistantMessage,\n\tskipAbortedCheck = true,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (signal?.aborted) return false;\n\tconst settings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释:座席实测\n\t// 30K 窗口 20K 保护预算使可摘要前缀为零,阈值反复命中却无事可做)。一次性\n\t// 替换后全文一致使用:下方 trim 阶梯 stage 0 目标。\n\tconst effectiveSettings: typeof settings = {\n\t\t...settings,\n\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\tsettings.keepRecentTokens,\n\t\t\tsession.model?.contextWindow ?? 0,\n\t\t\tsettings.reserveTokens,\n\t\t),\n\t};\n\n\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\tconst contextWindow = session.model?.contextWindow ?? 0;\n\n\t// Skip overflow check if the message came from a different model.\n\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t// shouldn't trigger compaction for the new model.\n\tconst sameModel =\n\t\tsession.model !== undefined &&\n\t\tassistantMessage.provider === session.model.provider &&\n\t\tassistantMessage.model === session.model.id;\n\n\t// Skip compaction checks if this assistant message is older than the latest\n\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t// from retriggering compaction on the first prompt after compaction.\n\tconst compactionEntry = getLatestCompactionEntry(session.sessionManager.getBranch());\n\tconst assistantIsFromBeforeCompaction =\n\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\tif (assistantIsFromBeforeCompaction) {\n\t\treturn false;\n\t}\n\n\t// Automatic cases 1 and 2: context overflow.\n\t// A length stop is recoverable when output ended below the model's original desired limit,\n\t// independent of the configured context size or any context-clamped provider request limit.\n\tconst overflow = sameModel\n\t\t? await decideOverflow(session, assistantMessage, undefined, signal)\n\t\t: { contextOverflow: false, recoverableLength: false };\n\tconst { contextOverflow, recoverableLength } = overflow;\n\tif (contextOverflow || recoverableLength) {\n\t\tconst decision = await decideCompaction(session, {\n\t\t\treason: \"overflow\",\n\t\t\tcontextOverflow,\n\t\t\trecoverableLength,\n\t\t\tcanContinue: assistantMessage.stopReason !== \"stop\",\n\t\t\tsignal,\n\t\t});\n\t\t// The overflow policy request carries no contextUsage, so the threshold\n\t\t// triplet is omitted here rather than fabricated.\n\t\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\t\treason: \"overflow\",\n\t\t\tcompact: decision.compact,\n\t\t\twillRetry: decision.retry === true,\n\t\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t\t});\n\t\tif (!decision.compact) {\n\t\t\t// 溢出裁剪兜底:压缩恢复(recoveryAttempted)后仍 context overflow 或\n\t\t\t// recoverable length(截断响应=输出被掐,缩输入可让输出有空间,turn 边界\n\t\t\t// 裁剪对两种溢出同样有效)时,先对运行时投影做逐级裁剪重试,3 级全失败才\n\t\t\t// 走策略 failureMessage 失败路径。执行逻辑归 AgentSession,策略接口与事件面不变。\n\t\t\tif (\n\t\t\t\tdecision.failureMessage &&\n\t\t\t\t(contextOverflow || recoverableLength) &&\n\t\t\t\tsession._overflowRecoveryAttempted &&\n\t\t\t\tsession._overflowTrimStage < OVERFLOW_TRIM_MAX_STAGES\n\t\t\t) {\n\t\t\t\tconst stage = session._overflowTrimStage;\n\t\t\t\t// 属性收窄不进闭包,先捕获为 const string。\n\t\t\t\tconst failureMessage = decision.failureMessage;\n\t\t\t\t// 裁剪投影与手动/自动压缩的摘要、提交、投影共用同一队列:投影快照也在\n\t\t\t\t// 队列内读取,避免用手快照覆盖手动压缩刚投影的上下文;复用\n\t\t\t\t// compaction_start/end 事件流(reason 现有值 \"overflow\",不新增事件\n\t\t\t\t// 类型或 payload 字段)。\n\t\t\t\treturn session._enqueueCompaction(async () => {\n\t\t\t\t\tsession._autoCompactionAbortController = new AbortController();\n\t\t\t\t\tconst autoCompactionSignal = session._autoCompactionAbortController.signal;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) return false;\n\t\t\t\t\t\t// 与 compact-and-retry 相同:重试上下文先排除末尾失败的 assistant 响应。\n\t\t\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\t\t\tconst base =\n\t\t\t\t\t\t\tmessages.length > 0 && messages[messages.length - 1].role === \"assistant\"\n\t\t\t\t\t\t\t\t? messages.slice(0, -1)\n\t\t\t\t\t\t\t\t: messages;\n\t\t\t\t\t\tconst trimmed = trimOverflowProjection(base, stage, effectiveSettings.keepRecentTokens);\n\t\t\t\t\t\t// 返回原引用 = 已无可裁(估算已在目标内或无 turn 边界):重试注定\n\t\t\t\t\t\t// 同样溢出,不空转请求,按策略失败文案直接失败(级数未增,无前缀)。\n\t\t\t\t\t\tif (trimmed.length === 0 || trimmed === base) {\n\t\t\t\t\t\t\tconst errorMessage = overflowTrimFailureMessage(\n\t\t\t\t\t\t\t\tstage,\n\t\t\t\t\t\t\t\tfailureMessage,\n\t\t\t\t\t\t\t\tcontextOverflow ? \"contextOverflow\" : \"recoverableLength\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\t\t\t\tcause: errorMessage,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsession._overflowTrimStage = stage + 1;\n\t\t\t\t\t\tsession._emit({ type: \"compaction_start\", reason: \"overflow\" });\n\t\t\t\t\t\tawait session._applyContextTransition(trimmed, \"overflow_recovery\");\n\t\t\t\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) {\n\t\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\twillRetry: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// 投影切换抛错也必须配对 compaction_start 的结束事件(镜像\n\t\t\t\t\t\t// runAutoCompactionInternal 的失败事件语义),否则事件流失去配对。\n\t\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tsession._emit({\n\t\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\terrorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\t\t\tcause: errorMessage,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tsession._autoCompactionAbortController = undefined;\n\t\t\t\t\t\tsession._resolveIdleWaitIfIdle();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (decision.failureMessage) {\n\t\t\t\tconst errorMessage = overflowTrimFailureMessage(\n\t\t\t\t\tsession._overflowTrimStage,\n\t\t\t\t\tdecision.failureMessage,\n\t\t\t\t\tcontextOverflow ? \"contextOverflow\" : \"recoverableLength\",\n\t\t\t\t);\n\t\t\t\tsession._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage,\n\t\t\t\t});\n\t\t\t\t// The policy reported a genuine failure (not a cancellation), so the\n\t\t\t\t// failed event carries the same fact. 进程日志打点与该事件同一事实,\n\t\t\t\t// 缺 hostLogger 时为 no-op。\n\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", {\n\t\t\t\t\tfields: { reason: \"overflow\" },\n\t\t\t\t\tcause: errorMessage,\n\t\t\t\t});\n\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason: \"overflow\", errorMessage });\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tconst willRetry = decision.retry === true;\n\t\tif (willRetry) {\n\t\t\t// A retry excludes the failed assistant response from the next model context.\n\t\t\t// The actual context projection is performed inside the compaction queue so\n\t\t\t// it cannot race a manual compaction's summary, commit, or projection.\n\t\t\tsession._overflowRecoveryAttempted = true;\n\t\t}\n\t\treturn await session._runAutoCompaction(\"overflow\", willRetry);\n\t}\n\n\t// Case 3: threshold compaction without retry.\n\t// For error messages or all-zero usage messages, estimate from the last valid response.\n\t// This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage\n\t// responses can still compact and do not reset context accounting.\n\tlet contextTokens: number;\n\tconst directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;\n\tif (assistantMessage.stopReason === \"error\" || directContextTokens === 0) {\n\t\tconst messages = session.agent.state.messages;\n\t\tconst estimate = estimateContextTokens(messages);\n\t\t// Without provider usage, estimate.tokens is the pure message-size estimate.\n\t\t// Only usage-backed estimates need the stale pre-compaction check.\n\t\tif (estimate.lastUsageIndex !== null) {\n\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t// trigger compaction right after one just finished.\n\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tcompactionEntry &&\n\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tcontextTokens = estimate.tokens;\n\t} else {\n\t\tcontextTokens = directContextTokens;\n\t}\n\n\tconst decision = await decideCompaction(session, {\n\t\treason: \"threshold\",\n\t\tcontextOverflow: false,\n\t\trecoverableLength: false,\n\t\tcontextUsage: {\n\t\t\tcontextTokens,\n\t\t\tcontextWindow,\n\t\t\treserveTokens: settings.reserveTokens,\n\t\t},\n\t\tcanContinue: false,\n\t\tsignal,\n\t});\n\tawait dispatchCompactionDecisionLifecycle(session, {\n\t\treason: \"threshold\",\n\t\tcompact: decision.compact,\n\t\twillRetry: decision.retry === true,\n\t\tcontextTokens,\n\t\tcontextWindow,\n\t\treserveTokens: settings.reserveTokens,\n\t\t...(decision.failureMessage === undefined ? {} : { failureMessage: decision.failureMessage }),\n\t});\n\treturn decision.compact ? session._runAutoCompaction(\"threshold\", decision.retry === true) : false;\n}\n\n/**\n * Execute threshold or overflow compaction. Manual compaction uses\n * `AgentSession.compact()` instead. Both paths use the selected compaction\n * policy after preparation and extension interception, then commit against the\n * branch revision captured before asynchronous work.\n *\n * @param reason Automatic trigger selected by `_checkCompaction()`\n * @param willRetry Whether to continue the interrupted turn after overflow compaction\n * @returns Whether the post-run loop should call `agent.continue()`\n */\nexport async function runAutoCompaction(\n\tsession: AgentSessionInternals,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): Promise<boolean> {\n\tif (session._reloadInProgress) return false;\n\treturn enqueueCompaction(session, () => runAutoCompactionInternal(session, reason, willRetry));\n}\n\nexport async function runAutoCompactionInternal(\n\tsession: AgentSessionInternals,\n\treason: \"overflow\" | \"threshold\",\n\twillRetry: boolean,\n): Promise<boolean> {\n\t// Install the controller before asynchronous auth/preparation so callers can\n\t// cancel every stage, including the overflow-recovery projection.\n\tsession._autoCompactionAbortController = new AbortController();\n\tconst autoCompactionSignal = session._autoCompactionAbortController.signal;\n\t// One outer finally guards every exit path: the early overflow-recovery\n\t// return used to skip the summary-phase cleanup, leaking the aborted\n\t// controller (isCompacting stayed true) and hanging reload's waitForIdle().\n\ttry {\n\t\ttry {\n\t\t\tif (willRetry) {\n\t\t\t\t// Keep overflow recovery's runtime projection under the same queue as\n\t\t\t\t// summary generation, canonical commit, and post-commit projection. This\n\t\t\t\t// prevents a manual compaction that was already queued from observing or\n\t\t\t\t// being interleaved with a partially recovered context.\n\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\t\tawait session._applyContextTransition(messages.slice(0, -1), \"overflow_recovery\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) return false;\n\t\t} catch (error) {\n\t\t\tsession._autoCompactionAbortController = undefined;\n\t\t\tthrow error;\n\t\t}\n\n\t\tconst rawSettings = session.settingsManager.getCompactionSettings(session.model ?? undefined);\n\t\t// Adaptive keepRecentTokens(effectiveKeepRecentTokens,动机见其注释):\n\t\t// 小窗口下可摘要前缀不再被保护预算吃满,阈值命中的压缩真实落地而非空转。\n\t\tconst settings: CompactionSettings = {\n\t\t\t...rawSettings,\n\t\t\tkeepRecentTokens: effectiveKeepRecentTokens(\n\t\t\t\trawSettings.keepRecentTokens,\n\t\t\t\tsession.model?.contextWindow ?? 0,\n\t\t\t\trawSettings.reserveTokens,\n\t\t\t),\n\t\t};\n\t\tlet started = false;\n\n\t\ttry {\n\t\t\tif (!session.model) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst auth = await getSummarizationRequestAuth(session, session.model, autoCompactionSignal);\n\t\t\tconst { pathEntries, expectedRevision, operationId } = captureCompactionCommitBoundary(session, reason);\n\n\t\t\tconst execution = executionFacts(session, \"compaction\", operationId);\n\t\t\tconst preparation = await prepareCompaction(session, pathEntries, settings, execution, autoCompactionSignal);\n\t\t\tif (!preparation) {\n\t\t\t\t// The policy decided to compact, but every entry sits inside the\n\t\t\t\t// keepRecentTokens budget, so there is no summarizable prefix.\n\t\t\t\t// Emit the skip so hosts can surface the \"context is full but\n\t\t\t\t// nothing compacts\" state; manual /compact reports the same\n\t\t\t\t// condition as its \"Nothing to compact\" error.\n\t\t\t\tsession._emit({ type: \"compaction_skipped\", reason, cause: \"nothing_to_compact\" });\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tsession._emit({ type: \"compaction_start\", reason });\n\t\t\tstarted = true;\n\n\t\t\t// Shared default summary generator, also used by manual compaction.\n\t\t\tconst { summary, firstKeptEntryId, tokensBefore, usage, details } = await runCompactionSummary(\n\t\t\t\tsession,\n\t\t\t\tpreparation,\n\t\t\t\tauth,\n\t\t\t\tundefined,\n\t\t\t\tautoCompactionSignal,\n\t\t\t\treason,\n\t\t\t\texecution,\n\t\t\t);\n\n\t\t\tif (autoCompactionSignal.aborted || session._reloadInProgress) {\n\t\t\t\tsession._emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst compactionCommit = commitCompaction(session, {\n\t\t\t\texpectedRevision,\n\t\t\t\toperationId,\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t\tusage,\n\t\t\t});\n\t\t\tawait dispatchCompactionCommitLifecycle(session, reason, compactionCommit);\n\t\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\t\tawait session._applyContextTransition(sessionContext.messages, \"compaction\");\n\t\t\t// See the manual-compaction path: this must describe the strategy-projected\n\t\t\t// runtime context, not canonical history retained by SessionManager.\n\t\t\tconst estimatedTokensAfter = estimateMessagesTokens(session.agent.state.messages);\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\testimatedTokensAfter,\n\t\t\t\tusage,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tsession._emit({ type: \"compaction_end\", reason, result, aborted: false, willRetry });\n\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = session.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t// The overflow response was persisted on message_end before _checkCompaction() removed it\n\t\t\t\t// from agent state. Rebuilding state from the new compaction can restore that kept entry,\n\t\t\t\t// leaving an assistant as the final message. agent.continue() rejects that state, so remove\n\t\t\t\t// the retriable error or truncated-length response again before continuing the interrupted turn.\n\t\t\t\tif (lastMsg?.role === \"assistant\" && (lastMsg.stopReason === \"error\" || lastMsg.stopReason === \"length\")) {\n\t\t\t\t\tawait session._applyContextTransition(messages.slice(0, -1), \"overflow_recovery\");\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn session.agent.hasQueuedMessages();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\t// Cancellation is decided by the controller state, not the error shape:\n\t\t\t// aborts surface as AbortError from the summary pipeline, but so can\n\t\t\t// unrelated failures — only the signal tells them apart.\n\t\t\tconst aborted = autoCompactionSignal.aborted;\n\t\t\tif (started) {\n\t\t\t\tif (aborted) {\n\t\t\t\t\t// 取消按正常结果收场(aborted:true、无错误文案),不打失败日志、\n\t\t\t\t\t// 不 dispatch failed lifecycle(契约见 dispatchCompactionFailedLifecycle 注释)。\n\t\t\t\t\tsession._emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst formattedErrorMessage =\n\t\t\t\t\t\treason === \"overflow\"\n\t\t\t\t\t\t\t? `Context overflow recovery failed: ${message}`\n\t\t\t\t\t\t\t: `Auto-compaction failed: ${message}`;\n\t\t\t\t\tsession._emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: false,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\terrorMessage: formattedErrorMessage,\n\t\t\t\t\t});\n\t\t\t\t\t// 压缩失败打点:与下方 failed 事件同一事实;取消路径不打点。\n\t\t\t\t\tsession._hostLogger?.error(\"compaction\", \"compaction failed\", { fields: { reason }, cause: error });\n\t\t\t\t\tawait dispatchCompactionFailedLifecycle(session, { reason, errorMessage: formattedErrorMessage });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t} finally {\n\t\tsession._autoCompactionAbortController = undefined;\n\t\tsession._resolveIdleWaitIfIdle();\n\t}\n}\n\n/**\n * Retry policy + callbacks shared by compaction and branch-summary summarization calls.\n * Uses the same `settings.retry` budget/backoff as agent-turn retries so a single transient\n * stream drop no longer fails the whole operation. `source` carries the context\n * the TUI needs to render the retry and recreate the underlying indicator.\n */\nexport function summarizationRetryCallbacks(\n\tsession: AgentSessionInternals,\n\tsource: { source: \"branchSummary\" } | { source: \"compaction\"; reason: \"manual\" | \"threshold\" | \"overflow\" },\n): RetryCallbacks {\n\t// Structured trace mirroring SummaryAttemptRecordV1: one record per failed\n\t// attempt (with its backoff) plus the terminal attempt (success or final\n\t// failure) reported by onRetryFinished.\n\tconst attempts: SummaryAttemptRecordV1[] = [];\n\treturn {\n\t\tonRetryScheduled: (attempt, _maxAttempts, delayMs, errorMessage) => {\n\t\t\tattempts.push({ attempt, at: Date.now(), ok: false, failure: errorMessage, waitedMs: delayMs });\n\t\t\tsession._emit({\n\t\t\t\ttype: \"summarization_retry_scheduled\",\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts: _maxAttempts,\n\t\t\t\tdelayMs,\n\t\t\t\terrorMessage,\n\t\t\t});\n\t\t},\n\t\tonRetryAttemptStart: () => {\n\t\t\tsession._emit({\n\t\t\t\ttype: \"summarization_retry_attempt_start\",\n\t\t\t\t...source,\n\t\t\t});\n\t\t},\n\t\tonRetryFinished: (success, attempt, finalError) => {\n\t\t\t// onRetryFinished reports the number of the last FAILED attempt; the\n\t\t\t// terminal attempt it describes is the next one.\n\t\t\tattempts.push(\n\t\t\t\tsuccess\n\t\t\t\t\t? { attempt: attempt + 1, at: Date.now(), ok: true, waitedMs: 0 }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tattempt: attempt + 1,\n\t\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t\t\tok: false,\n\t\t\t\t\t\t\twaitedMs: 0,\n\t\t\t\t\t\t\t...(finalError === undefined ? {} : { failure: finalError }),\n\t\t\t\t\t\t},\n\t\t\t);\n\t\t\tsession._emit({ type: \"summarization_retry_finished\", source, attempts });\n\t\t},\n\t};\n}\n\n/**\n * Adapt the selected capability retry policy to the shared summary executor.\n * `...settings` 展开携带 `enabled: true`(pi-ai `RetryPolicy` 形状要求,\n * settings-manager 聚合恒填 true——产品侧自动重试无条件生效,D-079)。\n */\nexport function summarizationRetryPolicy(\n\tsession: AgentSessionInternals,\n\toperationId?: string,\n\tinputRevision?: ExecutionFactsV1[\"inputRevision\"],\n\tsignal?: AbortSignal,\n): RetryPolicy {\n\tconst settings = session.settingsManager.getRetrySettings();\n\tconst runtime = session._capabilityRuntime;\n\t// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在\n\tif (!runtime) throw new Error(t(\"Capability runtime is not available\"));\n\tconst execution = executionFacts(session, \"retry\", operationId ? `${operationId}:retry` : undefined, inputRevision);\n\treturn {\n\t\t...settings,\n\t\tclassify: (message) =>\n\t\t\truntime.classifyRetry(session._retryPolicyName, {\n\t\t\t\tmessage,\n\t\t\t\tsignal,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\t\t\texecution,\n\t\t\t}),\n\t\tdecide: ({ message, retryable, attempt, maxAttempts, baseDelayMs }) =>\n\t\t\truntime.decideRetry(session._retryPolicyName, {\n\t\t\t\tretryable,\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts,\n\t\t\t\tbaseDelayMs,\n\t\t\t\terrorMessage: message.errorMessage,\n\t\t\t\tsignal,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\t\t\texecution,\n\t\t\t}),\n\t};\n}\n\n/**\n * Navigate to a different node in the session tree.\n * Unlike fork() which creates a new session file, this stays in the same file.\n *\n * @param session Internal session facade\n * @param targetId The entry ID to navigate to\n * @param options.summarize Whether user wants to summarize abandoned branch\n * @param options.customInstructions Custom instructions for summarizer\n * @param options.replaceInstructions If true, customInstructions replaces the default prompt\n * @param options.label Label to attach to the branch summary entry\n * @returns Result with editorText (if user message) and cancelled status\n */\nexport async function navigateTree(\n\tsession: AgentSessionInternals,\n\ttargetId: string,\n\toptions: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string } = {},\n): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }> {\n\tif (session.isStreaming) {\n\t\tthrow new Error(t(\"Wait for the current response to finish before navigating the session tree.\"));\n\t}\n\t// Compaction mutates the active branch; navigating mid-compaction would race the summary commit.\n\tif (session._compactionAbortController !== undefined || session._autoCompactionAbortController !== undefined) {\n\t\tthrow new Error(\n\t\t\tt(\"Wait for the current compaction or tree navigation to finish before navigating the session tree.\"),\n\t\t);\n\t}\n\n\tconst oldLeafId = session.sessionManager.getLeafId();\n\n\t// No-op if already at target\n\tif (targetId === oldLeafId) {\n\t\treturn { cancelled: false };\n\t}\n\n\t// Model required for summarization\n\tif (options.summarize && !session.model) {\n\t\tthrow new Error(t(\"No model available for summarization\"));\n\t}\n\n\tconst targetEntry = session.sessionManager.getEntry(targetId);\n\tif (!targetEntry) {\n\t\tthrow new Error(t(\"Entry {id} not found\", { id: targetId }));\n\t}\n\n\t// Collect entries to summarize (from old leaf to common ancestor)\n\tconst { entries: entriesToSummarize } = collectEntriesForBranchSummary(session.sessionManager, oldLeafId, targetId);\n\n\tconst customInstructions = options.customInstructions;\n\tconst replaceInstructions = options.replaceInstructions;\n\tconst label = options.label;\n\n\tif (session._reloadInProgress) {\n\t\tthrow new Error(t(\"Session reload in progress; tree navigation is unavailable\"));\n\t}\n\tif (session._branchSummaryAbortController) {\n\t\tthrow new Error(t(\"Branch navigation is already in progress\"));\n\t}\n\n\t// Set up abort controller for summarization\n\tsession._branchSummaryAbortController = new AbortController();\n\tconst branchSummaryPromise = new Promise<void>((resolve) => {\n\t\tsession._resolveBranchSummaryPromise = resolve;\n\t});\n\tsession._branchSummaryPromise = branchSummaryPromise;\n\n\ttry {\n\t\t// Run default summarizer if needed\n\t\tlet summaryText: string | undefined;\n\t\tlet summaryDetails: unknown;\n\t\tlet summaryUsage: Usage | undefined;\n\t\tif (options.summarize && entriesToSummarize.length > 0) {\n\t\t\tconst model = session.model!;\n\t\t\tconst auth = await getSummarizationRequestAuth(session, model, session._branchSummaryAbortController.signal);\n\t\t\tconst branchSummarySettings = session.settingsManager.getBranchSummarySettings();\n\t\t\tconst runtime = session._capabilityRuntime;\n\t\t\tif (!runtime || !runtime.hasBranchSummaryPolicy(session._branchSummaryPolicyName)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tt(\"Branch summary policy is not registered: {name}\", { name: session._branchSummaryPolicyName }),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst execution = executionFacts(\n\t\t\t\tsession,\n\t\t\t\t\"branch_summary\",\n\t\t\t\t`branch_summary:${session.sessionId}:${oldLeafId ?? \"root\"}:${targetId}`,\n\t\t\t);\n\t\t\tconst result = await runtime.summarizeBranch(session._branchSummaryPolicyName, {\n\t\t\t\tentries: entriesToSummarize,\n\t\t\t\tmodel: summaryModelFacts(auth.model),\n\t\t\t\tinvocation: createSummaryModelInvocationV1(\n\t\t\t\t\tsession,\n\t\t\t\t\tauth,\n\t\t\t\t\tsummarizationRetryPolicy(\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\texecution.operationId,\n\t\t\t\t\t\texecution.inputRevision,\n\t\t\t\t\t\tsession._branchSummaryAbortController.signal,\n\t\t\t\t\t),\n\t\t\t\t\tsummarizationRetryCallbacks(session, { source: \"branchSummary\" }),\n\t\t\t\t),\n\t\t\t\tsignal: session._branchSummaryAbortController.signal,\n\t\t\t\tcustomInstructions,\n\t\t\t\treplaceInstructions,\n\t\t\t\treserveTokens: branchSummarySettings.reserveTokens,\n\t\t\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"branch_summary\" },\n\t\t\t\texecution,\n\t\t\t});\n\t\t\tif (result.aborted) {\n\t\t\t\treturn { cancelled: true, aborted: true };\n\t\t\t}\n\t\t\tif (result.error) {\n\t\t\t\tthrow new Error(result.error);\n\t\t\t}\n\t\t\tsummaryText = result.summary;\n\t\t\tsummaryUsage = result.usage as Usage | undefined;\n\t\t\tsummaryDetails = {\n\t\t\t\treadFiles: result.readFiles || [],\n\t\t\t\tmodifiedFiles: result.modifiedFiles || [],\n\t\t\t};\n\t\t}\n\t\tif (session._branchSummaryAbortController.signal.aborted || session._reloadInProgress) {\n\t\t\treturn { cancelled: true, aborted: true };\n\t\t}\n\n\t\t// Determine the new leaf position based on target type\n\t\tlet newLeafId: string | null;\n\t\tlet editorText: string | undefined;\n\n\t\tif (targetEntry.type === \"message\" && targetEntry.message.role === \"user\") {\n\t\t\t// User message: leaf = parent (null if root), text goes to editor\n\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\teditorText = contentText(targetEntry.message.content, \"\");\n\t\t} else if (targetEntry.type === \"custom_message\") {\n\t\t\t// Custom message: leaf = parent (null if root), text goes to editor\n\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\teditorText = contentText(targetEntry.content, \"\");\n\t\t} else {\n\t\t\t// Non-user message: leaf = selected node\n\t\t\tnewLeafId = targetId;\n\t\t}\n\n\t\t// Switch leaf (with or without summary)\n\t\t// Summary is attached at the navigation target position (newLeafId), not the old branch\n\t\tlet summaryEntry: BranchSummaryEntry | undefined;\n\t\tif (summaryText) {\n\t\t\t// Create summary at target position (can be null for root)\n\t\t\tconst summaryId = session.sessionManager.branchWithSummary(\n\t\t\t\tnewLeafId,\n\t\t\t\tsummaryText,\n\t\t\t\tsummaryDetails,\n\t\t\t\tfalse,\n\t\t\t\tsummaryUsage,\n\t\t\t);\n\t\t\tsummaryEntry = session.sessionManager.getEntry(summaryId) as BranchSummaryEntry;\n\n\t\t\t// Attach label to the summary entry\n\t\t\tif (label) {\n\t\t\t\tsession.sessionManager.appendLabelChange(summaryId, label);\n\t\t\t}\n\t\t} else if (newLeafId === null) {\n\t\t\t// No summary, navigating to root - reset leaf\n\t\t\tsession.sessionManager.resetLeaf();\n\t\t} else {\n\t\t\t// No summary, navigating to non-root\n\t\t\tsession.sessionManager.branch(newLeafId);\n\t\t}\n\n\t\t// Attach label to target entry when not summarizing (no summary entry to label)\n\t\tif (label && !summaryText) {\n\t\t\tsession.sessionManager.appendLabelChange(targetId, label);\n\t\t}\n\n\t\t// Update agent state\n\t\tconst sessionContext = session.sessionManager.buildSessionContext();\n\t\tawait session._applyContextTransition(sessionContext.messages, \"tree\");\n\n\t\treturn { editorText, cancelled: false, summaryEntry };\n\t} finally {\n\t\tsession._branchSummaryAbortController = undefined;\n\t\tsession._resolveIdleWaitIfIdle();\n\t\tsession._resolveBranchSummaryPromise?.();\n\t\tsession._resolveBranchSummaryPromise = undefined;\n\t\tif (session._branchSummaryPromise === branchSummaryPromise) session._branchSummaryPromise = undefined;\n\t}\n}\n"]}
|
|
@@ -31,7 +31,7 @@ import type { SettingsManager } from "./settings-manager.ts";
|
|
|
31
31
|
import type { Skill } from "./skills.ts";
|
|
32
32
|
import type { SourceInfo } from "./source-info.ts";
|
|
33
33
|
import type { BuildSystemPromptOptions } from "./system-prompt.ts";
|
|
34
|
-
import type { BashOperations } from "./tools/bash.ts";
|
|
34
|
+
import type { BashOperations } from "./tools/bash-operations.ts";
|
|
35
35
|
import type { ToolDefinition, ToolInfo } from "./tools/tool-definition.ts";
|
|
36
36
|
/** Registry entry for one tool definition with its source metadata. */
|
|
37
37
|
export interface ToolDefinitionEntry {
|