@ai-agent-forge/agent-forge 0.87.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 +56 -0
- package/README.md +2 -2
- 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 +149 -61
- 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 +105 -183
- 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 +3 -3
- 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/auth-check.d.ts.map +1 -1
- package/dist/cli/auth-check.js +14 -2
- package/dist/cli/auth-check.js.map +1 -1
- package/dist/cli/auth-command.d.ts.map +1 -1
- package/dist/cli/auth-command.js +1 -1
- package/dist/cli/auth-command.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 +5 -6
- 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 +6 -10
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +21 -112
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-internal.d.ts +1 -7
- 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 -4
- 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 -33
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +61 -67
- 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 -7
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +0 -3
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/cli.js +3 -1
- package/dist/core/i18n/locales/zh-cn/cli.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/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js +2 -0
- package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +0 -2
- package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -1
- package/dist/core/model-config.d.ts +0 -1
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +9 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +3 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer.d.ts +2 -2
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +7 -8
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/sdk.d.ts +18 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +267 -76
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +9 -20
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +20 -54
- package/dist/core/settings-manager.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/main.d.ts.map +1 -1
- package/dist/main.js +3 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +0 -2
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +2 -7
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -6
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +6 -28
- package/dist/modes/interactive/components/settings-selector.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/modes/interactive/interactive-mode.d.ts +0 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +23 -36
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +0 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +0 -12
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +0 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +0 -19
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.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/plugins/ecosystem/node-plugin-bootstrap.d.ts +9 -2
- package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js +23 -0
- package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +9 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
- package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
- package/dist/plugins/ecosystem/plugin-bootstrap.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/dist/utils/photon.d.ts +2 -2
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +2 -2
- package/dist/utils/photon.js.map +1 -1
- package/docs/compaction.md +1 -3
- package/docs/docs.json +4 -0
- package/docs/index.md +1 -0
- package/docs/mcp.md +103 -0
- package/docs/models.md +14 -22
- package/docs/providers.md +0 -1
- package/docs/rpc.md +1 -26
- package/docs/sdk.md +4 -6
- package/docs/settings.md +9 -12
- package/docs/skills.md +1 -9
- package/docs/usage.md +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/examples/sdk/10-settings.ts +2 -4
- package/examples/sdk/12-full-control.ts +1 -2
- package/package.json +3 -4
- package/dist/bundle/chunks/chunk-6ZKDNZHA.js +0 -145
- package/dist/bundle/chunks/chunk-BFC2BDVJ.js +0 -13
- package/dist/bundle/chunks/chunk-MOHOLL3F.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 -82
- 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/microcompact.d.ts +0 -80
- package/dist/core/extensions/microcompact.d.ts.map +0 -1
- package/dist/core/extensions/microcompact.js +0 -134
- package/dist/core/extensions/microcompact.js.map +0 -1
- package/dist/core/extensions/provider-failover.d.ts +0 -106
- 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/server/create-harness.d.ts +0 -26
- package/dist/server/create-harness.d.ts.map +0 -1
- package/dist/server/create-harness.js +0 -106
- package/dist/server/create-harness.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-internal.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t/**\n\t * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置满,\n\t * 每次 assistant message_end 减 1(下限 0);冷却期内阈值 decide 以\n\t * `microcompactEnabled: false` 关闭便宜缓解(背景注释见 agent-session.ts)。\n\t */\n\t_microcompactCooldown: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-internal.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash-operations.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-internal.js","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsDH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,MAAM,CAAsB;IAErC,YAAY,MAAuC,EAAE;QACpD,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;CACD;AAED;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CAAI,KAAQ,EAAK;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,2FAAmD;IACnD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAE,IAAU,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAO,CAAC;AAAA,CAC9E","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t/**\n\t * microcompact 冷却(按模型请求计数,0 = 不冷却):relief 落地时置满,\n\t * 每次 assistant message_end 减 1(下限 0);冷却期内阈值 decide 以\n\t * `microcompactEnabled: false` 关闭便宜缓解(背景注释见 agent-session.ts)。\n\t */\n\t_microcompactCooldown: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-internal.js","sourceRoot":"","sources":["../../src/core/agent-session-internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsDH;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,MAAM,CAAsB;IAErC,YAAY,MAAuC,EAAE;QACpD,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACrB;CACD;AAED;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,0FAA0F;AAC1F,MAAM,UAAU,uBAAuB,CAAI,KAAQ,EAAK;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,2FAAmD;IACnD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAE,IAAU,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAO,CAAC;AAAA,CAC9E","sourcesContent":["/**\n * Shared internal contract and snapshot helpers for the agent-session\n * submodules (agent-session-bash.ts, agent-session-compaction.ts,\n * agent-session-context.ts, agent-session-lifecycle.ts, agent-session-loop.ts,\n * agent-session-retry.ts, agent-session-tools.ts, agent-session-model.ts;\n * agent-session-runtime.ts consumes the class directly).\n *\n * `AgentSession` satisfies {@link AgentSessionInternals} structurally through a\n * single internal cast; members mirror the private state and helpers that moved\n * into the submodules. Same-name delegates stay on the class so call sites,\n * dynamic dispatch, and test spies keep working unchanged.\n */\n\nimport type {\n\tAgent,\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tAgentTool,\n\tPrepareNextTurnContext,\n\tThinkingLevel,\n} from \"@agent-forge/agent-core\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tImageContent,\n\tModel,\n\tTextContent,\n\tToolResultMessage,\n} from \"@agent-forge/ai/compat\";\nimport type {\n\tAgentSessionEvent,\n\tModelCycleResult,\n\tModelMutationOptions,\n\tSessionStats,\n\tTurnAbortReason,\n} from \"./agent-session.ts\";\nimport type { CompactionCancelledResult } from \"./agent-session-compaction.ts\";\nimport type { LoopExecutor } from \"./agent-session-loop-runner.ts\";\nimport type { ForkableUserMessage } from \"./agent-session-projection.ts\";\nimport type { BashResult } from \"./bash-executor.ts\";\nimport type { CompactionResult } from \"./compaction/index.ts\";\nimport type { CapabilityPluginHandle, CapabilityRuntime, ContextOperationOptions } from \"./extensions/index.ts\";\nimport type { ModelStreamEventDataV1 } from \"./extensions/lifecycle-catalog.ts\";\nimport type { ContextUsage, ExecutionFactsV1 } from \"./extensions/public-api.ts\";\nimport type { HostLogger } from \"./logger.ts\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport type { ModelRuntime } from \"./model-runtime.ts\";\nimport type { PromptTemplate } from \"./prompt-templates.ts\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { BranchSummaryEntry, SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { Skill } from \"./skills.ts\";\nimport type { SourceInfo } from \"./source-info.ts\";\nimport type { BuildSystemPromptOptions } from \"./system-prompt.ts\";\nimport type { BashOperations } from \"./tools/bash-operations.ts\";\nimport type { ToolDefinition, ToolInfo } from \"./tools/tool-definition.ts\";\n\n/** Registry entry for one tool definition with its source metadata. */\nexport interface ToolDefinitionEntry {\n\tdefinition: ToolDefinition;\n\tsourceInfo: SourceInfo;\n}\n\n/**\n * A session operation was cancelled by user intent (abort, reload barrier) — a\n * normal outcome, never a failure. Host boundaries resolve with structured\n * cancelled results instead of surfacing this as an error.\n */\nexport class SessionCancelledError extends Error {\n\treadonly reason: \"reload\" | \"signal\";\n\n\tconstructor(reason: SessionCancelledError[\"reason\"]) {\n\t\tsuper(`Session operation cancelled: ${reason}`);\n\t\tthis.name = \"SessionCancelledError\";\n\t\tthis.reason = reason;\n\t}\n}\n\n/**\n * Deep-clone a session value and freeze the clone so lifecycle payloads cannot\n * be mutated in place. The implementation lives on the public extension face\n * (`./extensions/public-api.ts`) so first-party and third-party plugins share\n * the same payload-projection contract; re-exported here for the host-internal\n * session submodules.\n */\nexport { detachedSessionSnapshot } from \"./extensions/public-api.ts\";\n\n/** JSON-safe clone for lifecycle payloads that must survive structured clone failures. */\nexport function jsonSafeSessionSnapshot<T>(value: T): T {\n\tconst serialized = JSON.stringify(value);\n\t// v8 ignore next -- 对象消息序列化永远返回字符串,undefined 分支不可达\n\treturn serialized === undefined ? (null as T) : (JSON.parse(serialized) as T);\n}\n\nexport interface AgentSessionInternals {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\treadonly _modelRuntime: ModelRuntime;\n\treadonly model: Model<Api> | undefined;\n\treadonly thinkingLevel: ThinkingLevel;\n\treadonly sessionId: string;\n\treadonly isStreaming: boolean;\n\t/** Idle gate for public context operations (compile-time private getter on AgentSession). */\n\treadonly isIdle: boolean;\n\n\t// Internal session state (compile-time private on AgentSession)\n\t_compactionQueue: Promise<void>;\n\t_compactionAbortController: AbortController | undefined;\n\t_autoCompactionAbortController: AbortController | undefined;\n\t_overflowRecoveryAttempted: boolean;\n\t/** 已完成的溢出裁剪级数(0 = 未裁剪);与 `_overflowRecoveryAttempted` 同点位复位。 */\n\t_overflowTrimStage: number;\n\t_activeCompactionPromise: Promise<unknown> | undefined;\n\t_branchSummaryAbortController: AbortController | undefined;\n\t_branchSummaryPromise: Promise<unknown> | undefined;\n\t_resolveBranchSummaryPromise: (() => void) | undefined;\n\t_reloadInProgress: boolean;\n\t_policyDecisionAbortController: AbortController | undefined;\n\t_retryAbortController: AbortController | undefined;\n\t_retryAttempt: number;\n\t_pendingRetryDecision:\n\t\t| { message: AssistantMessage; decision: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>> }\n\t\t| undefined;\n\t_isAgentRunActive: boolean;\n\t_currentRunAborted: boolean;\n\t_lastAbortReason: TurnAbortReason | undefined;\n\t_lastAssistantMessage: AssistantMessage | undefined;\n\n\t// Lifecycle dispatch state (compile-time private on AgentSession)\n\treadonly _modelStreamState: { streamId: string; sequence: number } | undefined;\n\t/** Correlation id for the active prompt run's lifecycle dispatches; written by the loop-runner via this facade. */\n\t_turnCorrelationId: string | undefined;\n\t_turnCorrelationCounter: number;\n\t/**\n\t * Host-process logger seam (会话轨迹第 2 期,设计 §5.2): one-line process log\n\t * beside lifecycle dispatches that report genuine failures (compaction\n\t * failed). Undefined when no hostLogger was configured; call sites treat it\n\t * as a no-op.\n\t */\n\treadonly _hostLogger?: HostLogger;\n\n\t// Bash execution state (compile-time private on AgentSession)\n\treadonly _bashAbortControllers: Set<AbortController>;\n\treadonly _activeBashPromises: Set<Promise<unknown>>;\n\t_bashEpoch: number;\n\t_pendingBashMessages: BashExecutionMessage[];\n\treadonly isDisposed: boolean;\n\n\t_capabilityRuntime: CapabilityRuntime | undefined;\n\t_compactionPolicyName: string;\n\t_overflowPolicyName: string;\n\t_branchSummaryPolicyName: string;\n\t_retryPolicyName: string;\n\t_runLoopStrategyName: string;\n\t/** Internal loop-executor seam (D-043 G3): set to replace the default prompt/continue drive. No public config; distinct from `_runLoopStrategyName` (a per-continuation veto policy). */\n\t_loopExecutor: LoopExecutor | undefined;\n\n\t// Helpers that remain on AgentSession\n\t_emit(event: AgentSessionEvent): void;\n\t_resolveIdleWaitIfIdle(): void;\n\t_flushPendingCustomMessages(): void;\n\t_emitAgentSettled(): Promise<void>;\n\t_observeLifecycleDeliveryError(error: unknown, extensionPath: string, event: string): void;\n\tabort(): Promise<void>;\n\t_abortInternal(): Promise<void>;\n\n\t// Context-transition state and delegates forwarding to agent-session-context.ts\n\t/** Generation fence for context projections that may outlive a runtime replacement. */\n\t_contextEpoch: number;\n\t_contextTransitionAbortController: AbortController;\n\t/** Serializes context transitions and lets reload/dispose drain them before teardown. */\n\t_activeContextTransition: Promise<unknown> | undefined;\n\t/** Monotonic revision for the public context snapshot/commit facade. */\n\t_contextRevision: number;\n\t/** Serializes public context commits so expectedRevision is a real CAS fence. */\n\t_contextCommitQueue: Promise<void>;\n\t/** Configured external context strategy name, written only by the constructor. */\n\treadonly _contextStrategyName: string | undefined;\n\t_requireContextStrategy(): { runtime: CapabilityRuntime; name: string };\n\t_requireIdleContextOperation(operation: string): void;\n\t_beginContextTransitionFence(): void;\n\t_isContextTransitionCurrent(epoch: number, allowReload: boolean): boolean;\n\t_assertContextTransitionCurrent(epoch: number, allowReload: boolean): void;\n\t_enqueueContextTransition<T>(\n\t\toperation: (epoch: number, signal: AbortSignal) => Promise<T>,\n\t\toptions?: { signal?: AbortSignal; allowReload?: boolean },\n\t): Promise<T>;\n\t_copyContextMessages(value: unknown, strategyName: string, direction: \"input\" | \"result\"): AgentMessage[];\n\t_applyContextTransition(\n\t\tmessages: AgentMessage[],\n\t\treason?: ContextOperationOptions[\"reason\"],\n\t\tsignal?: AbortSignal,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\t_restoreContextTransition(\n\t\tsnapshot: unknown,\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\toptions?: { allowReload?: boolean },\n\t): Promise<AgentMessage[]>;\n\tsnapshotContext(): Promise<unknown>;\n\trestoreContext(snapshot: unknown): Promise<AgentMessage[]>;\n\treplaceContext(context: AgentMessage[]): Promise<AgentMessage[]>;\n\n\t// Model-scope state and delegates forwarding to agent-session-model.ts\n\t_scopedModels: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\t/** Public scoped-models getter (Legacy 迁移 R1): submodules read via this instead of the private field. */\n\treadonly scopedModels: ReadonlyArray<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\tsetModel(model: Model<Api>, options?: ModelMutationOptions): Promise<void>;\n\tsetThinkingLevel(level: ThinkingLevel, options?: ModelMutationOptions): void;\n\t_emitModelSelect(\n\t\tnextModel: Model<Api>,\n\t\tpreviousModel: Model<Api> | undefined,\n\t\tsource: \"set\" | \"cycle\" | \"restore\",\n\t): Promise<void>;\n\t_addPersistedDefaultToNonEmptyScope(model: Model<Api>): void;\n\t_getThinkingLevelForModelSwitch(targetModel?: Model<Api>, explicitLevel?: ThinkingLevel): ThinkingLevel;\n\t_cycleScopedModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\t_cycleAvailableModel(\n\t\tdirection: \"forward\" | \"backward\",\n\t\toptions: ModelMutationOptions,\n\t): Promise<ModelCycleResult | undefined>;\n\n\t// Run-loop wiring state and delegates forwarding to agent-session-loop.ts\n\t/** The agent's construction-time prepare adapter, captured once by the loop wiring install. */\n\t_initialPrepareNextTurn:\n\t\t| ((\n\t\t\t\tcontext: PrepareNextTurnContext,\n\t\t\t\tsignal?: AbortSignal,\n\t\t ) => Promise<AgentLoopTurnUpdate | undefined> | AgentLoopTurnUpdate | undefined)\n\t\t| undefined;\n\n\t// Delegates forwarding to the submodule functions\n\t_compactBeforeNextAssistantResponse(context: AgentContext, signal?: AbortSignal): Promise<AgentContext>;\n\t_enqueueCompaction<T>(operation: () => Promise<T>): Promise<T>;\n\t_compactInternal(customInstructions?: string): Promise<CompactionResult>;\n\t_checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck?: boolean,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean>;\n\t_runAutoCompaction(reason: \"overflow\" | \"threshold\", willRetry: boolean): Promise<boolean>;\n\t_willRetryAfterAgentEnd(event: Extract<AgentEvent, { type: \"agent_end\" }>, signal?: AbortSignal): Promise<boolean>;\n\t_isRetryableError(message: AssistantMessage, execution?: ExecutionFactsV1, signal?: AbortSignal): Promise<boolean>;\n\t_prepareRetry(\n\t\tmessage: AssistantMessage,\n\t\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n\t): Promise<boolean>;\n\tnavigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<{ editorText?: string; cancelled: boolean; aborted?: boolean; summaryEntry?: BranchSummaryEntry }>;\n\n\t// Lifecycle delegates forwarding to agent-session-lifecycle.ts\n\t_dispatchModelStreamLifecycle(\n\t\tmessage: AgentMessage,\n\t\teventName: ModelStreamEventDataV1[\"event\"],\n\t\tphase: ModelStreamEventDataV1[\"phase\"],\n\t): Promise<void>;\n\t_dispatchContextReplacedLifecycle(\n\t\treason: NonNullable<ContextOperationOptions[\"reason\"]>,\n\t\tstrategyName?: string,\n\t): Promise<void>;\n\t_dispatchModelResponseLifecycle(message: AssistantMessage, entryId: string): Promise<void>;\n\t_dispatchToolCommitLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchToolResultLifecycle(message: ToolResultMessage, entryId: string): Promise<void>;\n\t_dispatchSessionReloadLifecycle(generation: number): Promise<void>;\n\n\t// Bash delegates forwarding to agent-session-bash.ts\n\tcaptureBashEpoch(): number;\n\tisBashEpochCurrent(epoch: number): boolean;\n\temitUserBash(excludeFromContext: boolean): void;\n\texecuteBash(\n\t\tcommand: string,\n\t\tonChunk?: (chunk: string) => void,\n\t\toptions?: { excludeFromContext?: boolean; id?: string; operations?: BashOperations },\n\t): Promise<BashResult>;\n\trecordBashResult(\n\t\tcommand: string,\n\t\tresult: BashResult,\n\t\toptions?: { excludeFromContext?: boolean; epoch?: number },\n\t): void;\n\tabortBash(): void;\n\t_flushPendingBashMessages(): void;\n\n\t// Tool registry state (compile-time private on AgentSession)\n\t_resourceLoader: ResourceLoader;\n\t_customTools: ToolDefinition[];\n\t_deferredToolPluginIds: ReadonlySet<string>;\n\t_baseToolDefinitions: Map<string, ToolDefinition>;\n\t_baseToolSources: Map<string, SourceInfo>;\n\t_toolRegistry: Map<string, AgentTool>;\n\t_toolDefinitions: Map<string, ToolDefinitionEntry>;\n\t_toolPromptSnippets: Map<string, string>;\n\t_toolPromptGuidelines: Map<string, string[]>;\n\t_allowedToolNames: Set<string> | undefined;\n\t_excludedToolNames: Set<string> | undefined;\n\t_baseSystemPrompt: string;\n\t_baseSystemPromptOptions: BuildSystemPromptOptions;\n\t_systemPromptOverride: string | undefined;\n\t_orientationPrompt: string | undefined;\n\t_preferenceCard: string | undefined;\n\t_capabilitySkillsFilter: ((skills: Skill[]) => Skill[]) | undefined;\n\t_bootstrapSkillsHandle: CapabilityPluginHandle | undefined;\n\t_cwd: string;\n\n\tgetActiveToolNames(): string[];\n\n\t// Tool registry delegates forwarding to agent-session-tools.ts\n\tgetAllTools(): ToolInfo[];\n\tgetToolDefinition(name: string): ToolDefinition | undefined;\n\tsetActiveToolsByName(toolNames: string[]): void;\n\t_rebuildSystemPrompt(toolNames: string[]): string;\n\t_refreshToolRegistry(options?: { activeToolNames?: string[]; includeAllExtensionTools?: boolean }): void;\n\t_syncCapabilityTools(): void;\n\t_getCapabilitySkills(): Skill[];\n\t_getAvailableSkills(): Skill[];\n\t_validateCapabilitySkillConflicts(): void;\n\t_refreshBootstrapSkills(): Promise<void>;\n\n\t// Read-only projections and delegates forwarding to agent-session-projection.ts\n\treadonly sessionFile: string | undefined;\n\treadonly messages: AgentMessage[];\n\treadonly systemPrompt: string;\n\treadonly promptTemplates: ReadonlyArray<PromptTemplate>;\n\treadonly pendingMessageCount: number;\n\tgetSessionStats(): SessionStats;\n\tgetContextUsage(): ContextUsage | undefined;\n\tgetUserMessagesForForking(): ForkableUserMessage[];\n\texportToHtml(outputPath?: string, options?: { themeName?: string }): Promise<string>;\n\texportToJsonl(outputPath?: string): string;\n\tgetLastAssistantText(): string | undefined;\n\n\t// Resource-discovery delegates forwarding to agent-session-extensions.ts\n\textendResourcesFromExtensions(reason: \"startup\" | \"reload\"): Promise<void>;\n\tbuildExtensionResourcePaths(entries: Array<{ path: string; extensionPath: string }>): Array<{\n\t\tpath: string;\n\t\tmetadata: { source: string; scope: \"temporary\"; origin: \"top-level\"; baseDir?: string };\n\t}>;\n\tgetExtensionSourceLabel(extensionPath: string): string;\n\n\t// Prompt/queue surface consumed by the extension binding closures\n\tsendCustomMessage<T = unknown>(\n\t\tmessage: Pick<CustomMessage<T>, \"customType\" | \"content\" | \"display\" | \"details\">,\n\t\toptions?: { triggerTurn?: boolean; deliverAs?: \"steer\" | \"followUp\" | \"nextTurn\" },\n\t): Promise<void>;\n\tsendUserMessage(\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\toptions?: { deliverAs?: \"steer\" | \"followUp\"; expandPromptTemplates?: boolean },\n\t): Promise<void>;\n\tsetSessionName(name: string): void;\n\tcompact(customInstructions?: string): Promise<CompactionResult | CompactionCancelledResult>;\n}\n"]}
|
|
@@ -29,9 +29,10 @@ import type { AgentLoopWiringV1 } from "./extensions/index.ts";
|
|
|
29
29
|
* plugin and third-party links chain after them in registration order.
|
|
30
30
|
*
|
|
31
31
|
* `shouldStopAfterTurn` follows the same shape: the default repeated-tool-call
|
|
32
|
-
* stop guard is a chain link registered by the
|
|
33
|
-
* (
|
|
34
|
-
* and this wiring only consumes the chain under OR
|
|
32
|
+
* stop guard is a chain link registered by the bundled agent-loop-policy plugin
|
|
33
|
+
* (`plugins/agent-loop-policy`, D-082 批 3 — the implementation moved out of the
|
|
34
|
+
* embedded bootstrap install), and this wiring only consumes the chain under OR
|
|
35
|
+
* semantics.
|
|
35
36
|
*/
|
|
36
37
|
export declare function wireDefaultLoop(session: AgentSessionInternals): void;
|
|
37
38
|
/** Session-bound host state the default loop links read at execution time. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-loop.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAmC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhG
|
|
1
|
+
{"version":3,"file":"agent-session-loop.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGzE,OAAO,KAAK,EAAmC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEhG;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAmGpE;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAoBlF","sourcesContent":["/**\n * Default main-loop wiring for AgentSession.\n *\n * Extracted from `agent-session.ts`. The two host installers operate on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession` keeps\n * same-name delegates so the constructor and `_buildRuntime` call sites,\n * dynamic dispatch, and test spies keep working unchanged. Method-to-method\n * calls that have a facade member go through the session parameter (not direct\n * imports) to preserve that dispatch — including\n * `session._compactBeforeNextAssistantResponse`, whose delegate stays on the\n * class and forwards to `agent-session-compaction.ts`.\n *\n * The agent's construction-time context transform is captured once as the\n * transform chain head, while `beforeToolCall`/`afterToolCall`/\n * `transformContext`/`prepareNextTurn` read the capability runtime's hook\n * chains at execution time, so a runtime rebuild swaps in the new runtime\n * without reinstalling the wiring.\n */\n\nimport type {\n\tAfterToolCallResult,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tPrepareNextTurnContext,\n} from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { detachedSessionSnapshot } from \"./agent-session-internal.ts\";\nimport { dispatchToolGateBlockedLifecycle } from \"./agent-session-lifecycle.ts\";\nimport type { AgentLoopTransformContextHookV1, AgentLoopWiringV1 } from \"./extensions/index.ts\";\n\n/**\n * Wire the default main loop onto the Agent instance.\n *\n * The five hook positions are composed from the runtime's loop-hook chains.\n * Chains are read at execution time, so a runtime rebuild swaps in the new\n * runtime without reinstalling the wiring. The agent's construction-time\n * context transform stays as the transform chain head (host wiring, not a\n * plugin capability); the default links come from the bootstrap agent-loop\n * plugin and third-party links chain after them in registration order.\n *\n * `shouldStopAfterTurn` follows the same shape: the default repeated-tool-call\n * stop guard is a chain link registered by the bundled agent-loop-policy plugin\n * (`plugins/agent-loop-policy`, D-082 批 3 — the implementation moved out of the\n * embedded bootstrap install), and this wiring only consumes the chain under OR\n * semantics.\n */\nexport function wireDefaultLoop(session: AgentSessionInternals): void {\n\t// Captured once, matching the previous overwrite semantics: hooks are\n\t// installed a single time and read live session state at execution time.\n\tconst previousPrepareNextTurnWithContext =\n\t\tsession.agent.prepareNextTurnWithContext ??\n\t\t(session.agent.prepareNextTurn\n\t\t\t? async (_turn: PrepareNextTurnContext, signal?: AbortSignal) => await session.agent.prepareNextTurn?.(signal)\n\t\t\t: undefined);\n\tsession._initialPrepareNextTurn = previousPrepareNextTurnWithContext;\n\n\tconst previousTransform = session.agent.transformContext;\n\tconst transformHead: AgentLoopTransformContextHookV1 | undefined = previousTransform\n\t\t? async (messages, signal) => await previousTransform(messages as AgentMessage[], signal)\n\t\t: undefined;\n\n\tsession.agent.beforeToolCall = async ({ toolCall, args }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"beforeToolCall\") ?? [];\n\t\tlet currentArgs: unknown = args;\n\t\tlet replaced = false;\n\t\tfor (const link of chain) {\n\t\t\tconst result = await link({ toolCallId: toolCall.id, toolName: toolCall.name, args: currentArgs, signal });\n\t\t\tif (!result) continue;\n\t\t\tif (result.block) {\n\t\t\t\t// 先派发观察事实再短路:模型可见行为不变(block 短路为 isError\n\t\t\t\t// tool result 携带 reason,D-062 既有语义)。空白 reason 与校验器\n\t\t\t\t// 的 trim 非空判定同谓词归一为缺席——空串派发会被校验器拒绝且\n\t\t\t\t// 失败仅落宿主日志,拦截观察事实就静默丢了。\n\t\t\t\tconst reason = typeof result.reason === \"string\" && result.reason.trim() !== \"\" ? result.reason : undefined;\n\t\t\t\tawait dispatchToolGateBlockedLifecycle(session, toolCall.id, toolCall.name, reason);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (\"args\" in result) {\n\t\t\t\tcurrentArgs = result.args;\n\t\t\t\treplaced = true;\n\t\t\t}\n\t\t}\n\t\treturn replaced ? { args: currentArgs } : undefined;\n\t};\n\n\tsession.agent.afterToolCall = async ({ toolCall, args, result, isError }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"afterToolCall\") ?? [];\n\t\tlet current: unknown = result;\n\t\tlet override: unknown;\n\t\tfor (const link of chain) {\n\t\t\tconst linkResult = await link({\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\targs,\n\t\t\t\tresult: current,\n\t\t\t\tisError,\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tif (linkResult === undefined) continue;\n\t\t\tcurrent = linkResult;\n\t\t\toverride = linkResult;\n\t\t}\n\t\treturn override as AfterToolCallResult | undefined;\n\t};\n\n\tsession.agent.transformContext = async (messages: AgentMessage[], signal?: AbortSignal) => {\n\t\tlet current: readonly AgentMessage[] = messages;\n\t\tif (transformHead) {\n\t\t\tconst transformed = await transformHead(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"transformContext\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tconst transformed = await link(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\treturn current as AgentMessage[];\n\t};\n\n\tsession.agent.prepareNextTurnWithContext = async (turn, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"prepareNextTurn\") ?? [];\n\t\tlet current: unknown = turn;\n\t\tfor (const link of chain) {\n\t\t\tconst revised = await link(current, signal);\n\t\t\tif (revised !== undefined) current = revised;\n\t\t}\n\t\treturn current as AgentLoopTurnUpdate;\n\t};\n\n\t// 回合后停机链(第五条):构造期 hook 仍是链头(先投一票,true 即停),\n\t// 之后消费 capability runtime 的 \"shouldStopAfterTurn\" 链,任一链路返回\n\t// true 即停。默认护栏由 bundled 插件 agent-forge.plugin.agent-loop-policy\n\t// 经 registerLoopHook 注册(D-082 批 3),禁用面是 disabledPluginIds;\n\t// 四条事件分发链的内嵌装配(disabledBootstrapPlugins)跳过时仅事件链为空,\n\t// 护栏不受其影响——链为空时行为与从前等价(无链即返回构造期 head 的结果\n\t// 或 false,等价 no-op)。\n\tconst previousShouldStopAfterTurn = session.agent.shouldStopAfterTurn;\n\tsession.agent.shouldStopAfterTurn = async (context, signal) => {\n\t\tif (previousShouldStopAfterTurn && (await previousShouldStopAfterTurn(context, signal))) return true;\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"shouldStopAfterTurn\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tif (await link(context, signal)) return true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n/** Session-bound host state the default loop links read at execution time. */\nexport function createLoopWiring(session: AgentSessionInternals): AgentLoopWiringV1 {\n\treturn {\n\t\tgetSessionId: () => session.sessionId,\n\t\tgetRevision: () => detachedSessionSnapshot(session.sessionManager.getRevision()),\n\t\tgetTurnCorrelationId: () => session._turnCorrelationId,\n\t\tobserveError: (error, source, event) => {\n\t\t\tsession._observeLifecycleDeliveryError(error, source, event);\n\t\t},\n\t\tgetImageAutoResize: () => session.settingsManager.getImageAutoResize(),\n\t\tcompactBeforeNextAssistantResponse: (context, signal) =>\n\t\t\tsession._compactBeforeNextAssistantResponse(context, signal),\n\t\tgetTurnRefresh: () => ({\n\t\t\tsystemPrompt: session._systemPromptOverride ?? session._baseSystemPrompt,\n\t\t\ttools: session.agent.state.tools.slice(),\n\t\t\tmodel: session.agent.state.model,\n\t\t\tthinkingLevel: session.agent.state.thinkingLevel,\n\t\t}),\n\t\tgetInitialPrepareNextTurn: () => session._initialPrepareNextTurn,\n\t\tgetContextStrategyName: () => session._contextStrategyName,\n\t};\n}\n"]}
|
|
@@ -29,9 +29,10 @@ import { dispatchToolGateBlockedLifecycle } from "./agent-session-lifecycle.js";
|
|
|
29
29
|
* plugin and third-party links chain after them in registration order.
|
|
30
30
|
*
|
|
31
31
|
* `shouldStopAfterTurn` follows the same shape: the default repeated-tool-call
|
|
32
|
-
* stop guard is a chain link registered by the
|
|
33
|
-
* (
|
|
34
|
-
* and this wiring only consumes the chain under OR
|
|
32
|
+
* stop guard is a chain link registered by the bundled agent-loop-policy plugin
|
|
33
|
+
* (`plugins/agent-loop-policy`, D-082 批 3 — the implementation moved out of the
|
|
34
|
+
* embedded bootstrap install), and this wiring only consumes the chain under OR
|
|
35
|
+
* semantics.
|
|
35
36
|
*/
|
|
36
37
|
export function wireDefaultLoop(session) {
|
|
37
38
|
// Captured once, matching the previous overwrite semantics: hooks are
|
|
@@ -116,9 +117,11 @@ export function wireDefaultLoop(session) {
|
|
|
116
117
|
};
|
|
117
118
|
// 回合后停机链(第五条):构造期 hook 仍是链头(先投一票,true 即停),
|
|
118
119
|
// 之后消费 capability runtime 的 "shouldStopAfterTurn" 链,任一链路返回
|
|
119
|
-
// true 即停。默认护栏由
|
|
120
|
-
//
|
|
121
|
-
//
|
|
120
|
+
// true 即停。默认护栏由 bundled 插件 agent-forge.plugin.agent-loop-policy
|
|
121
|
+
// 经 registerLoopHook 注册(D-082 批 3),禁用面是 disabledPluginIds;
|
|
122
|
+
// 四条事件分发链的内嵌装配(disabledBootstrapPlugins)跳过时仅事件链为空,
|
|
123
|
+
// 护栏不受其影响——链为空时行为与从前等价(无链即返回构造期 head 的结果
|
|
124
|
+
// 或 false,等价 no-op)。
|
|
122
125
|
const previousShouldStopAfterTurn = session.agent.shouldStopAfterTurn;
|
|
123
126
|
session.agent.shouldStopAfterTurn = async (context, signal) => {
|
|
124
127
|
if (previousShouldStopAfterTurn && (await previousShouldStopAfterTurn(context, signal)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-loop.js","sourceRoot":"","sources":["../../src/core/agent-session-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default main-loop wiring for AgentSession.\n *\n * Extracted from `agent-session.ts`. The two host installers operate on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession` keeps\n * same-name delegates so the constructor and `_buildRuntime` call sites,\n * dynamic dispatch, and test spies keep working unchanged. Method-to-method\n * calls that have a facade member go through the session parameter (not direct\n * imports) to preserve that dispatch — including\n * `session._compactBeforeNextAssistantResponse`, whose delegate stays on the\n * class and forwards to `agent-session-compaction.ts`.\n *\n * The agent's construction-time context transform is captured once as the\n * transform chain head, while `beforeToolCall`/`afterToolCall`/\n * `transformContext`/`prepareNextTurn` read the capability runtime's hook\n * chains at execution time, so a runtime rebuild swaps in the new runtime\n * without reinstalling the wiring.\n */\n\nimport type {\n\tAfterToolCallResult,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tPrepareNextTurnContext,\n} from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { detachedSessionSnapshot } from \"./agent-session-internal.ts\";\nimport { dispatchToolGateBlockedLifecycle } from \"./agent-session-lifecycle.ts\";\nimport type { AgentLoopTransformContextHookV1, AgentLoopWiringV1 } from \"./extensions/index.ts\";\n\n/**\n * Wire the default main loop onto the Agent instance.\n *\n * The five hook positions are composed from the runtime's loop-hook chains.\n * Chains are read at execution time, so a runtime rebuild swaps in the new\n * runtime without reinstalling the wiring. The agent's construction-time\n * context transform stays as the transform chain head (host wiring, not a\n * plugin capability); the default links come from the bootstrap agent-loop\n * plugin and third-party links chain after them in registration order.\n *\n * `shouldStopAfterTurn` follows the same shape: the default repeated-tool-call\n * stop guard is a chain link registered by the bootstrap agent-loop plugin\n * (see {@link createRepeatedToolCallStopPolicy} in bootstrap-agent-loop.ts),\n * and this wiring only consumes the chain under OR semantics.\n */\nexport function wireDefaultLoop(session: AgentSessionInternals): void {\n\t// Captured once, matching the previous overwrite semantics: hooks are\n\t// installed a single time and read live session state at execution time.\n\tconst previousPrepareNextTurnWithContext =\n\t\tsession.agent.prepareNextTurnWithContext ??\n\t\t(session.agent.prepareNextTurn\n\t\t\t? async (_turn: PrepareNextTurnContext, signal?: AbortSignal) => await session.agent.prepareNextTurn?.(signal)\n\t\t\t: undefined);\n\tsession._initialPrepareNextTurn = previousPrepareNextTurnWithContext;\n\n\tconst previousTransform = session.agent.transformContext;\n\tconst transformHead: AgentLoopTransformContextHookV1 | undefined = previousTransform\n\t\t? async (messages, signal) => await previousTransform(messages as AgentMessage[], signal)\n\t\t: undefined;\n\n\tsession.agent.beforeToolCall = async ({ toolCall, args }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"beforeToolCall\") ?? [];\n\t\tlet currentArgs: unknown = args;\n\t\tlet replaced = false;\n\t\tfor (const link of chain) {\n\t\t\tconst result = await link({ toolCallId: toolCall.id, toolName: toolCall.name, args: currentArgs, signal });\n\t\t\tif (!result) continue;\n\t\t\tif (result.block) {\n\t\t\t\t// 先派发观察事实再短路:模型可见行为不变(block 短路为 isError\n\t\t\t\t// tool result 携带 reason,D-062 既有语义)。空白 reason 与校验器\n\t\t\t\t// 的 trim 非空判定同谓词归一为缺席——空串派发会被校验器拒绝且\n\t\t\t\t// 失败仅落宿主日志,拦截观察事实就静默丢了。\n\t\t\t\tconst reason = typeof result.reason === \"string\" && result.reason.trim() !== \"\" ? result.reason : undefined;\n\t\t\t\tawait dispatchToolGateBlockedLifecycle(session, toolCall.id, toolCall.name, reason);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (\"args\" in result) {\n\t\t\t\tcurrentArgs = result.args;\n\t\t\t\treplaced = true;\n\t\t\t}\n\t\t}\n\t\treturn replaced ? { args: currentArgs } : undefined;\n\t};\n\n\tsession.agent.afterToolCall = async ({ toolCall, args, result, isError }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"afterToolCall\") ?? [];\n\t\tlet current: unknown = result;\n\t\tlet override: unknown;\n\t\tfor (const link of chain) {\n\t\t\tconst linkResult = await link({\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\targs,\n\t\t\t\tresult: current,\n\t\t\t\tisError,\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tif (linkResult === undefined) continue;\n\t\t\tcurrent = linkResult;\n\t\t\toverride = linkResult;\n\t\t}\n\t\treturn override as AfterToolCallResult | undefined;\n\t};\n\n\tsession.agent.transformContext = async (messages: AgentMessage[], signal?: AbortSignal) => {\n\t\tlet current: readonly AgentMessage[] = messages;\n\t\tif (transformHead) {\n\t\t\tconst transformed = await transformHead(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"transformContext\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tconst transformed = await link(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\treturn current as AgentMessage[];\n\t};\n\n\tsession.agent.prepareNextTurnWithContext = async (turn, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"prepareNextTurn\") ?? [];\n\t\tlet current: unknown = turn;\n\t\tfor (const link of chain) {\n\t\t\tconst revised = await link(current, signal);\n\t\t\tif (revised !== undefined) current = revised;\n\t\t}\n\t\treturn current as AgentLoopTurnUpdate;\n\t};\n\n\t// 回合后停机链(第五条):构造期 hook 仍是链头(先投一票,true 即停),\n\t// 之后消费 capability runtime 的 \"shouldStopAfterTurn\" 链,任一链路返回\n\t// true 即停。默认护栏由 bootstrap agent-loop 插件经 registerLoopHook 注册,\n\t// disabledBootstrapPlugins 跳过该插件时链为空——此时行为与从前等价\n\t// (无链即返回构造期 head 的结果或 false,等价 no-op)。\n\tconst previousShouldStopAfterTurn = session.agent.shouldStopAfterTurn;\n\tsession.agent.shouldStopAfterTurn = async (context, signal) => {\n\t\tif (previousShouldStopAfterTurn && (await previousShouldStopAfterTurn(context, signal))) return true;\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"shouldStopAfterTurn\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tif (await link(context, signal)) return true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n/** Session-bound host state the default loop links read at execution time. */\nexport function createLoopWiring(session: AgentSessionInternals): AgentLoopWiringV1 {\n\treturn {\n\t\tgetSessionId: () => session.sessionId,\n\t\tgetRevision: () => detachedSessionSnapshot(session.sessionManager.getRevision()),\n\t\tgetTurnCorrelationId: () => session._turnCorrelationId,\n\t\tobserveError: (error, source, event) => {\n\t\t\tsession._observeLifecycleDeliveryError(error, source, event);\n\t\t},\n\t\tgetImageAutoResize: () => session.settingsManager.getImageAutoResize(),\n\t\tcompactBeforeNextAssistantResponse: (context, signal) =>\n\t\t\tsession._compactBeforeNextAssistantResponse(context, signal),\n\t\tgetTurnRefresh: () => ({\n\t\t\tsystemPrompt: session._systemPromptOverride ?? session._baseSystemPrompt,\n\t\t\ttools: session.agent.state.tools.slice(),\n\t\t\tmodel: session.agent.state.model,\n\t\t\tthinkingLevel: session.agent.state.thinkingLevel,\n\t\t}),\n\t\tgetInitialPrepareNextTurn: () => session._initialPrepareNextTurn,\n\t\tgetContextStrategyName: () => session._contextStrategyName,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-loop.js","sourceRoot":"","sources":["../../src/core/agent-session-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default main-loop wiring for AgentSession.\n *\n * Extracted from `agent-session.ts`. The two host installers operate on the\n * internal session facade ({@link AgentSessionInternals}); `AgentSession` keeps\n * same-name delegates so the constructor and `_buildRuntime` call sites,\n * dynamic dispatch, and test spies keep working unchanged. Method-to-method\n * calls that have a facade member go through the session parameter (not direct\n * imports) to preserve that dispatch — including\n * `session._compactBeforeNextAssistantResponse`, whose delegate stays on the\n * class and forwards to `agent-session-compaction.ts`.\n *\n * The agent's construction-time context transform is captured once as the\n * transform chain head, while `beforeToolCall`/`afterToolCall`/\n * `transformContext`/`prepareNextTurn` read the capability runtime's hook\n * chains at execution time, so a runtime rebuild swaps in the new runtime\n * without reinstalling the wiring.\n */\n\nimport type {\n\tAfterToolCallResult,\n\tAgentLoopTurnUpdate,\n\tAgentMessage,\n\tPrepareNextTurnContext,\n} from \"@agent-forge/agent-core\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { detachedSessionSnapshot } from \"./agent-session-internal.ts\";\nimport { dispatchToolGateBlockedLifecycle } from \"./agent-session-lifecycle.ts\";\nimport type { AgentLoopTransformContextHookV1, AgentLoopWiringV1 } from \"./extensions/index.ts\";\n\n/**\n * Wire the default main loop onto the Agent instance.\n *\n * The five hook positions are composed from the runtime's loop-hook chains.\n * Chains are read at execution time, so a runtime rebuild swaps in the new\n * runtime without reinstalling the wiring. The agent's construction-time\n * context transform stays as the transform chain head (host wiring, not a\n * plugin capability); the default links come from the bootstrap agent-loop\n * plugin and third-party links chain after them in registration order.\n *\n * `shouldStopAfterTurn` follows the same shape: the default repeated-tool-call\n * stop guard is a chain link registered by the bundled agent-loop-policy plugin\n * (`plugins/agent-loop-policy`, D-082 批 3 — the implementation moved out of the\n * embedded bootstrap install), and this wiring only consumes the chain under OR\n * semantics.\n */\nexport function wireDefaultLoop(session: AgentSessionInternals): void {\n\t// Captured once, matching the previous overwrite semantics: hooks are\n\t// installed a single time and read live session state at execution time.\n\tconst previousPrepareNextTurnWithContext =\n\t\tsession.agent.prepareNextTurnWithContext ??\n\t\t(session.agent.prepareNextTurn\n\t\t\t? async (_turn: PrepareNextTurnContext, signal?: AbortSignal) => await session.agent.prepareNextTurn?.(signal)\n\t\t\t: undefined);\n\tsession._initialPrepareNextTurn = previousPrepareNextTurnWithContext;\n\n\tconst previousTransform = session.agent.transformContext;\n\tconst transformHead: AgentLoopTransformContextHookV1 | undefined = previousTransform\n\t\t? async (messages, signal) => await previousTransform(messages as AgentMessage[], signal)\n\t\t: undefined;\n\n\tsession.agent.beforeToolCall = async ({ toolCall, args }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"beforeToolCall\") ?? [];\n\t\tlet currentArgs: unknown = args;\n\t\tlet replaced = false;\n\t\tfor (const link of chain) {\n\t\t\tconst result = await link({ toolCallId: toolCall.id, toolName: toolCall.name, args: currentArgs, signal });\n\t\t\tif (!result) continue;\n\t\t\tif (result.block) {\n\t\t\t\t// 先派发观察事实再短路:模型可见行为不变(block 短路为 isError\n\t\t\t\t// tool result 携带 reason,D-062 既有语义)。空白 reason 与校验器\n\t\t\t\t// 的 trim 非空判定同谓词归一为缺席——空串派发会被校验器拒绝且\n\t\t\t\t// 失败仅落宿主日志,拦截观察事实就静默丢了。\n\t\t\t\tconst reason = typeof result.reason === \"string\" && result.reason.trim() !== \"\" ? result.reason : undefined;\n\t\t\t\tawait dispatchToolGateBlockedLifecycle(session, toolCall.id, toolCall.name, reason);\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\tif (\"args\" in result) {\n\t\t\t\tcurrentArgs = result.args;\n\t\t\t\treplaced = true;\n\t\t\t}\n\t\t}\n\t\treturn replaced ? { args: currentArgs } : undefined;\n\t};\n\n\tsession.agent.afterToolCall = async ({ toolCall, args, result, isError }, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"afterToolCall\") ?? [];\n\t\tlet current: unknown = result;\n\t\tlet override: unknown;\n\t\tfor (const link of chain) {\n\t\t\tconst linkResult = await link({\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\targs,\n\t\t\t\tresult: current,\n\t\t\t\tisError,\n\t\t\t\tsignal,\n\t\t\t});\n\t\t\tif (linkResult === undefined) continue;\n\t\t\tcurrent = linkResult;\n\t\t\toverride = linkResult;\n\t\t}\n\t\treturn override as AfterToolCallResult | undefined;\n\t};\n\n\tsession.agent.transformContext = async (messages: AgentMessage[], signal?: AbortSignal) => {\n\t\tlet current: readonly AgentMessage[] = messages;\n\t\tif (transformHead) {\n\t\t\tconst transformed = await transformHead(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"transformContext\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tconst transformed = await link(current, signal);\n\t\t\tif (transformed !== undefined) current = transformed as readonly AgentMessage[];\n\t\t}\n\t\treturn current as AgentMessage[];\n\t};\n\n\tsession.agent.prepareNextTurnWithContext = async (turn, signal) => {\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"prepareNextTurn\") ?? [];\n\t\tlet current: unknown = turn;\n\t\tfor (const link of chain) {\n\t\t\tconst revised = await link(current, signal);\n\t\t\tif (revised !== undefined) current = revised;\n\t\t}\n\t\treturn current as AgentLoopTurnUpdate;\n\t};\n\n\t// 回合后停机链(第五条):构造期 hook 仍是链头(先投一票,true 即停),\n\t// 之后消费 capability runtime 的 \"shouldStopAfterTurn\" 链,任一链路返回\n\t// true 即停。默认护栏由 bundled 插件 agent-forge.plugin.agent-loop-policy\n\t// 经 registerLoopHook 注册(D-082 批 3),禁用面是 disabledPluginIds;\n\t// 四条事件分发链的内嵌装配(disabledBootstrapPlugins)跳过时仅事件链为空,\n\t// 护栏不受其影响——链为空时行为与从前等价(无链即返回构造期 head 的结果\n\t// 或 false,等价 no-op)。\n\tconst previousShouldStopAfterTurn = session.agent.shouldStopAfterTurn;\n\tsession.agent.shouldStopAfterTurn = async (context, signal) => {\n\t\tif (previousShouldStopAfterTurn && (await previousShouldStopAfterTurn(context, signal))) return true;\n\t\tconst chain = session._capabilityRuntime?.getLoopHookChain(\"shouldStopAfterTurn\") ?? [];\n\t\tfor (const link of chain) {\n\t\t\tif (await link(context, signal)) return true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n/** Session-bound host state the default loop links read at execution time. */\nexport function createLoopWiring(session: AgentSessionInternals): AgentLoopWiringV1 {\n\treturn {\n\t\tgetSessionId: () => session.sessionId,\n\t\tgetRevision: () => detachedSessionSnapshot(session.sessionManager.getRevision()),\n\t\tgetTurnCorrelationId: () => session._turnCorrelationId,\n\t\tobserveError: (error, source, event) => {\n\t\t\tsession._observeLifecycleDeliveryError(error, source, event);\n\t\t},\n\t\tgetImageAutoResize: () => session.settingsManager.getImageAutoResize(),\n\t\tcompactBeforeNextAssistantResponse: (context, signal) =>\n\t\t\tsession._compactBeforeNextAssistantResponse(context, signal),\n\t\tgetTurnRefresh: () => ({\n\t\t\tsystemPrompt: session._systemPromptOverride ?? session._baseSystemPrompt,\n\t\t\ttools: session.agent.state.tools.slice(),\n\t\t\tmodel: session.agent.state.model,\n\t\t\tthinkingLevel: session.agent.state.thinkingLevel,\n\t\t}),\n\t\tgetInitialPrepareNextTurn: () => session._initialPrepareNextTurn,\n\t\tgetContextStrategyName: () => session._contextStrategyName,\n\t};\n}\n"]}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import type { AgentEvent } from "@agent-forge/agent-core";
|
|
11
11
|
import type { AssistantMessage } from "@agent-forge/ai/compat";
|
|
12
12
|
import type { AgentSessionInternals } from "./agent-session-internal.ts";
|
|
13
|
-
import type
|
|
13
|
+
import { type CapabilityRuntime, type ExecutionFactsV1 } from "./extensions/index.ts";
|
|
14
14
|
export declare function willRetryAfterAgentEnd(session: AgentSessionInternals, event: Extract<AgentEvent, {
|
|
15
15
|
type: "agent_end";
|
|
16
16
|
}>, signal?: AbortSignal): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-retry.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent-session-retry.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,KAAK,iBAAiB,EAA6B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAYjH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,EACjD,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,gBAAgB,EAC5B,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,wBAAsB,WAAW,CAChC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,gBAAgB,EACzB,SAAS,CAAC,EAAE,gBAAgB,EAC5B,MAAM,CAAC,EAAE,WAAW,gEAyBpB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,gBAAgB,EACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,GACzE,OAAO,CAAC,OAAO,CAAC,CA0DlB","sourcesContent":["/**\n * Auto-retry and overflow classification 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 { AgentEvent } from \"@agent-forge/agent-core\";\nimport { retryDelayMs } from \"@agent-forge/ai\";\nimport type { AssistantMessage } from \"@agent-forge/ai/compat\";\nimport { sleep } from \"../utils/sleep.ts\";\nimport { decideOverflow, executionFacts } from \"./agent-session-compaction.ts\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { dispatchAutoRetryLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { type CapabilityRuntime, DEFAULT_RETRY_POLICY_NAME, type ExecutionFactsV1 } from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\n\n/**\n * 内核机制兜底谓词:默认策略名且无人注册(默认插件被禁用或失败隔离)时为\n * true。默认插件不得成为隐藏前提(宪法 §2/§5);显式配置的其他策略名缺失\n * 仍然显式失败——配置错误必须可见(宪法 §7)。\n */\nfunction defaultRetryPolicyAbsent(session: AgentSessionInternals, runtime: CapabilityRuntime): boolean {\n\treturn session._retryPolicyName === DEFAULT_RETRY_POLICY_NAME && !runtime.hasRetryPolicy(session._retryPolicyName);\n}\n\nexport async function willRetryAfterAgentEnd(\n\tsession: AgentSessionInternals,\n\tevent: Extract<AgentEvent, { type: \"agent_end\" }>,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (signal?.aborted) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\tconst settings = session.settingsManager.getRetrySettings();\n\tif (session._retryAttempt >= settings.maxRetries) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\n\tfor (let i = event.messages.length - 1; i >= 0; i--) {\n\t\tconst message = event.messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\tconst assistantMessage = message as AssistantMessage;\n\t\t\ttry {\n\t\t\t\tconst decision = await decideRetry(session, assistantMessage, undefined, signal);\n\t\t\t\tsession._pendingRetryDecision = { message: assistantMessage, decision };\n\t\t\t\treturn decision.retry;\n\t\t\t} catch (error) {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tsession._pendingRetryDecision = undefined;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\tsession._pendingRetryDecision = undefined;\n\treturn false;\n}\n\n/**\n * Check if an error is retryable (overloaded, rate limit, server errors).\n * Context overflow errors are NOT retryable (handled by compaction instead).\n */\nexport async function isRetryableError(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\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// Context overflow is handled by compaction, not retry. Its classification\n\t// runs under decideOverflow's own absence guard —— retry 策略缺失不得跳过\n\t// overflow 分类(overflow 是独立策略面,终审焦点 1 的守卫不得越界短路它)。\n\tif ((await decideOverflow(session, message, execution, signal)).contextOverflow) return false;\n\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做重试分类(无执行者),该次失败按不可重试结算;缺失经 warn 日志暴露,\n\t// 去重方式与 decideCompaction 守卫一致(不去重)。\n\tif (defaultRetryPolicyAbsent(session, runtime)) {\n\t\tsession._hostLogger?.warn(\"retry\", \"no retry policy registered; treating the failure as non-retryable\", {\n\t\t\tfields: { policyName: session._retryPolicyName },\n\t\t});\n\t\treturn false;\n\t}\n\treturn runtime.classifyRetry(session._retryPolicyName, {\n\t\tmessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\nexport async function decideRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n) {\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\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做重试决策(无执行者),该次失败按不可重试结算,回合照常失败返回;缺失\n\t// 经 warn 日志暴露,去重方式与 decideCompaction 守卫一致(不去重)。\n\tif (defaultRetryPolicyAbsent(session, runtime)) {\n\t\tsession._hostLogger?.warn(\"retry\", \"no retry policy registered; skipping the retry decision\", {\n\t\t\tfields: { policyName: session._retryPolicyName },\n\t\t});\n\t\treturn { retry: false };\n\t}\n\treturn runtime.decideRetry(session._retryPolicyName, {\n\t\tretryable: await session._isRetryableError(message, execution, signal),\n\t\tattempt: session._retryAttempt + 1,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tbaseDelayMs: settings.baseDelayMs,\n\t\terrorMessage: message.errorMessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\n/**\n * Prepare a retryable error for continuation with exponential backoff.\n * @returns true if the caller should continue the agent, false otherwise\n */\nexport async function prepareRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n): Promise<boolean> {\n\tconst settings = session.settingsManager.getRetrySettings();\n\tconst decision = precomputedDecision ?? (await decideRetry(session, message));\n\tif (!decision.retry) return false;\n\tsession._retryAttempt++;\n\t// ±10% jitter on the exponential backoff (borrowed from codex's backoff):\n\t// prevents synchronized retry storms when many sessions hit the same outage.\n\t// The effective delay is capped by maxAgentDelayMs before jitter (retryDelayMs\n\t// already caps the exponential path; the min() also clamps policy-provided\n\t// delayMs), so a capped delay can overshoot the cap by at most the jitter band.\n\tconst baseDelayMs = Math.min(\n\t\tdecision.delayMs ?? retryDelayMs(settings, session._retryAttempt),\n\t\tsettings.maxAgentDelayMs,\n\t);\n\tconst delayMs = Math.round(baseDelayMs * (0.9 + Math.random() * 0.2));\n\t// Install the controller before announcing the retry so listeners can cancel\n\t// the pending delay from the auto_retry_start event itself.\n\tsession._retryAbortController = new AbortController();\n\n\tsession._emit({\n\t\ttype: \"auto_retry_start\",\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\tawait dispatchAutoRetryLifecycle(session, {\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\n\t// Remove error message from agent state (keep in session for history)\n\tconst messages = session.agent.state.messages;\n\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\tawait session._applyContextTransition(messages.slice(0, -1), \"retry\");\n\t}\n\n\t// Wait with exponential backoff (abortable)\n\ttry {\n\t\tawait sleep(delayMs, session._retryAbortController.signal);\n\t} catch {\n\t\t// Aborted during sleep - emit end event so UI can clean up\n\t\tconst attempt = session._retryAttempt;\n\t\tsession._retryAttempt = 0;\n\t\tsession._emit({\n\t\t\ttype: \"auto_retry_end\",\n\t\t\tsuccess: false,\n\t\t\tattempt,\n\t\t\tfinalError: \"Retry cancelled\",\n\t\t});\n\t\treturn false;\n\t} finally {\n\t\tsession._retryAbortController = undefined;\n\t}\n\n\treturn true;\n}\n"]}
|
|
@@ -11,7 +11,16 @@ import { retryDelayMs } from "@agent-forge/ai";
|
|
|
11
11
|
import { sleep } from "../utils/sleep.js";
|
|
12
12
|
import { decideOverflow, executionFacts } from "./agent-session-compaction.js";
|
|
13
13
|
import { dispatchAutoRetryLifecycle } from "./agent-session-lifecycle.js";
|
|
14
|
+
import { DEFAULT_RETRY_POLICY_NAME } from "./extensions/index.js";
|
|
14
15
|
import { t } from "./i18n/index.js";
|
|
16
|
+
/**
|
|
17
|
+
* 内核机制兜底谓词:默认策略名且无人注册(默认插件被禁用或失败隔离)时为
|
|
18
|
+
* true。默认插件不得成为隐藏前提(宪法 §2/§5);显式配置的其他策略名缺失
|
|
19
|
+
* 仍然显式失败——配置错误必须可见(宪法 §7)。
|
|
20
|
+
*/
|
|
21
|
+
function defaultRetryPolicyAbsent(session, runtime) {
|
|
22
|
+
return session._retryPolicyName === DEFAULT_RETRY_POLICY_NAME && !runtime.hasRetryPolicy(session._retryPolicyName);
|
|
23
|
+
}
|
|
15
24
|
export async function willRetryAfterAgentEnd(session, event, signal) {
|
|
16
25
|
if (signal?.aborted) {
|
|
17
26
|
session._pendingRetryDecision = undefined;
|
|
@@ -48,13 +57,24 @@ export async function willRetryAfterAgentEnd(session, event, signal) {
|
|
|
48
57
|
* Context overflow errors are NOT retryable (handled by compaction instead).
|
|
49
58
|
*/
|
|
50
59
|
export async function isRetryableError(session, message, execution, signal) {
|
|
51
|
-
// Context overflow is handled by compaction, not retry.
|
|
52
|
-
if ((await decideOverflow(session, message, execution, signal)).contextOverflow)
|
|
53
|
-
return false;
|
|
54
60
|
const runtime = session._capabilityRuntime;
|
|
55
61
|
// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在
|
|
56
62
|
if (!runtime)
|
|
57
63
|
throw new Error(t("Capability runtime is not available"));
|
|
64
|
+
// Context overflow is handled by compaction, not retry. Its classification
|
|
65
|
+
// runs under decideOverflow's own absence guard —— retry 策略缺失不得跳过
|
|
66
|
+
// overflow 分类(overflow 是独立策略面,终审焦点 1 的守卫不得越界短路它)。
|
|
67
|
+
if ((await decideOverflow(session, message, execution, signal)).contextOverflow)
|
|
68
|
+
return false;
|
|
69
|
+
// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层
|
|
70
|
+
// 不做重试分类(无执行者),该次失败按不可重试结算;缺失经 warn 日志暴露,
|
|
71
|
+
// 去重方式与 decideCompaction 守卫一致(不去重)。
|
|
72
|
+
if (defaultRetryPolicyAbsent(session, runtime)) {
|
|
73
|
+
session._hostLogger?.warn("retry", "no retry policy registered; treating the failure as non-retryable", {
|
|
74
|
+
fields: { policyName: session._retryPolicyName },
|
|
75
|
+
});
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
58
78
|
return runtime.classifyRetry(session._retryPolicyName, {
|
|
59
79
|
message,
|
|
60
80
|
signal,
|
|
@@ -68,9 +88,17 @@ export async function decideRetry(session, message, execution, signal) {
|
|
|
68
88
|
// v8 ignore next -- capability runtime 恒由 _buildRuntime 创建,dispose 后不再调用,运行期恒存在
|
|
69
89
|
if (!runtime)
|
|
70
90
|
throw new Error(t("Capability runtime is not available"));
|
|
91
|
+
// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层
|
|
92
|
+
// 不做重试决策(无执行者),该次失败按不可重试结算,回合照常失败返回;缺失
|
|
93
|
+
// 经 warn 日志暴露,去重方式与 decideCompaction 守卫一致(不去重)。
|
|
94
|
+
if (defaultRetryPolicyAbsent(session, runtime)) {
|
|
95
|
+
session._hostLogger?.warn("retry", "no retry policy registered; skipping the retry decision", {
|
|
96
|
+
fields: { policyName: session._retryPolicyName },
|
|
97
|
+
});
|
|
98
|
+
return { retry: false };
|
|
99
|
+
}
|
|
71
100
|
return runtime.decideRetry(session._retryPolicyName, {
|
|
72
101
|
retryable: await session._isRetryableError(message, execution, signal),
|
|
73
|
-
enabled: settings.enabled,
|
|
74
102
|
attempt: session._retryAttempt + 1,
|
|
75
103
|
maxAttempts: settings.maxRetries,
|
|
76
104
|
baseDelayMs: settings.baseDelayMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-retry.js","sourceRoot":"","sources":["../../src/core/agent-session-retry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Auto-retry and overflow classification 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 { AgentEvent } from \"@agent-forge/agent-core\";\nimport { retryDelayMs } from \"@agent-forge/ai\";\nimport type { AssistantMessage } from \"@agent-forge/ai/compat\";\nimport { sleep } from \"../utils/sleep.ts\";\nimport { decideOverflow, executionFacts } from \"./agent-session-compaction.ts\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { dispatchAutoRetryLifecycle } from \"./agent-session-lifecycle.ts\";\nimport type { CapabilityRuntime, ExecutionFactsV1 } from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\n\nexport async function willRetryAfterAgentEnd(\n\tsession: AgentSessionInternals,\n\tevent: Extract<AgentEvent, { type: \"agent_end\" }>,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (signal?.aborted) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\tconst settings = session.settingsManager.getRetrySettings();\n\tif (session._retryAttempt >= settings.maxRetries) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\n\tfor (let i = event.messages.length - 1; i >= 0; i--) {\n\t\tconst message = event.messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\tconst assistantMessage = message as AssistantMessage;\n\t\t\ttry {\n\t\t\t\tconst decision = await decideRetry(session, assistantMessage, undefined, signal);\n\t\t\t\tsession._pendingRetryDecision = { message: assistantMessage, decision };\n\t\t\t\treturn decision.retry;\n\t\t\t} catch (error) {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tsession._pendingRetryDecision = undefined;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\tsession._pendingRetryDecision = undefined;\n\treturn false;\n}\n\n/**\n * Check if an error is retryable (overloaded, rate limit, server errors).\n * Context overflow errors are NOT retryable (handled by compaction instead).\n */\nexport async function isRetryableError(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\t// Context overflow is handled by compaction, not retry.\n\tif ((await decideOverflow(session, message, execution, signal)).contextOverflow) return false;\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.classifyRetry(session._retryPolicyName, {\n\t\tmessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\nexport async function decideRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n) {\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\treturn runtime.decideRetry(session._retryPolicyName, {\n\t\tretryable: await session._isRetryableError(message, execution, signal),\n\t\tenabled: settings.enabled,\n\t\tattempt: session._retryAttempt + 1,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tbaseDelayMs: settings.baseDelayMs,\n\t\terrorMessage: message.errorMessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\n/**\n * Prepare a retryable error for continuation with exponential backoff.\n * @returns true if the caller should continue the agent, false otherwise\n */\nexport async function prepareRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n): Promise<boolean> {\n\tconst settings = session.settingsManager.getRetrySettings();\n\tconst decision = precomputedDecision ?? (await decideRetry(session, message));\n\tif (!decision.retry) return false;\n\tsession._retryAttempt++;\n\t// ±10% jitter on the exponential backoff (borrowed from codex's backoff):\n\t// prevents synchronized retry storms when many sessions hit the same outage.\n\t// The effective delay is capped by maxAgentDelayMs before jitter (retryDelayMs\n\t// already caps the exponential path; the min() also clamps policy-provided\n\t// delayMs), so a capped delay can overshoot the cap by at most the jitter band.\n\tconst baseDelayMs = Math.min(\n\t\tdecision.delayMs ?? retryDelayMs(settings, session._retryAttempt),\n\t\tsettings.maxAgentDelayMs,\n\t);\n\tconst delayMs = Math.round(baseDelayMs * (0.9 + Math.random() * 0.2));\n\t// Install the controller before announcing the retry so listeners can cancel\n\t// the pending delay from the auto_retry_start event itself.\n\tsession._retryAbortController = new AbortController();\n\n\tsession._emit({\n\t\ttype: \"auto_retry_start\",\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\tawait dispatchAutoRetryLifecycle(session, {\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\n\t// Remove error message from agent state (keep in session for history)\n\tconst messages = session.agent.state.messages;\n\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\tawait session._applyContextTransition(messages.slice(0, -1), \"retry\");\n\t}\n\n\t// Wait with exponential backoff (abortable)\n\ttry {\n\t\tawait sleep(delayMs, session._retryAbortController.signal);\n\t} catch {\n\t\t// Aborted during sleep - emit end event so UI can clean up\n\t\tconst attempt = session._retryAttempt;\n\t\tsession._retryAttempt = 0;\n\t\tsession._emit({\n\t\t\ttype: \"auto_retry_end\",\n\t\t\tsuccess: false,\n\t\t\tattempt,\n\t\t\tfinalError: \"Retry cancelled\",\n\t\t});\n\t\treturn false;\n\t} finally {\n\t\tsession._retryAbortController = undefined;\n\t}\n\n\treturn true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-retry.js","sourceRoot":"","sources":["../../src/core/agent-session-retry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Auto-retry and overflow classification 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 { AgentEvent } from \"@agent-forge/agent-core\";\nimport { retryDelayMs } from \"@agent-forge/ai\";\nimport type { AssistantMessage } from \"@agent-forge/ai/compat\";\nimport { sleep } from \"../utils/sleep.ts\";\nimport { decideOverflow, executionFacts } from \"./agent-session-compaction.ts\";\nimport type { AgentSessionInternals } from \"./agent-session-internal.ts\";\nimport { dispatchAutoRetryLifecycle } from \"./agent-session-lifecycle.ts\";\nimport { type CapabilityRuntime, DEFAULT_RETRY_POLICY_NAME, type ExecutionFactsV1 } from \"./extensions/index.ts\";\nimport { t } from \"./i18n/index.ts\";\n\n/**\n * 内核机制兜底谓词:默认策略名且无人注册(默认插件被禁用或失败隔离)时为\n * true。默认插件不得成为隐藏前提(宪法 §2/§5);显式配置的其他策略名缺失\n * 仍然显式失败——配置错误必须可见(宪法 §7)。\n */\nfunction defaultRetryPolicyAbsent(session: AgentSessionInternals, runtime: CapabilityRuntime): boolean {\n\treturn session._retryPolicyName === DEFAULT_RETRY_POLICY_NAME && !runtime.hasRetryPolicy(session._retryPolicyName);\n}\n\nexport async function willRetryAfterAgentEnd(\n\tsession: AgentSessionInternals,\n\tevent: Extract<AgentEvent, { type: \"agent_end\" }>,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\n\tif (signal?.aborted) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\tconst settings = session.settingsManager.getRetrySettings();\n\tif (session._retryAttempt >= settings.maxRetries) {\n\t\tsession._pendingRetryDecision = undefined;\n\t\treturn false;\n\t}\n\n\tfor (let i = event.messages.length - 1; i >= 0; i--) {\n\t\tconst message = event.messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\tconst assistantMessage = message as AssistantMessage;\n\t\t\ttry {\n\t\t\t\tconst decision = await decideRetry(session, assistantMessage, undefined, signal);\n\t\t\t\tsession._pendingRetryDecision = { message: assistantMessage, decision };\n\t\t\t\treturn decision.retry;\n\t\t\t} catch (error) {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tsession._pendingRetryDecision = undefined;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\tsession._pendingRetryDecision = undefined;\n\treturn false;\n}\n\n/**\n * Check if an error is retryable (overloaded, rate limit, server errors).\n * Context overflow errors are NOT retryable (handled by compaction instead).\n */\nexport async function isRetryableError(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n): Promise<boolean> {\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// Context overflow is handled by compaction, not retry. Its classification\n\t// runs under decideOverflow's own absence guard —— retry 策略缺失不得跳过\n\t// overflow 分类(overflow 是独立策略面,终审焦点 1 的守卫不得越界短路它)。\n\tif ((await decideOverflow(session, message, execution, signal)).contextOverflow) return false;\n\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做重试分类(无执行者),该次失败按不可重试结算;缺失经 warn 日志暴露,\n\t// 去重方式与 decideCompaction 守卫一致(不去重)。\n\tif (defaultRetryPolicyAbsent(session, runtime)) {\n\t\tsession._hostLogger?.warn(\"retry\", \"no retry policy registered; treating the failure as non-retryable\", {\n\t\t\tfields: { policyName: session._retryPolicyName },\n\t\t});\n\t\treturn false;\n\t}\n\treturn runtime.classifyRetry(session._retryPolicyName, {\n\t\tmessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\nexport async function decideRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\texecution?: ExecutionFactsV1,\n\tsignal?: AbortSignal,\n) {\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\t// 内核机制兜底:默认策略名且无人注册(默认插件被禁用或失败隔离)时,机制层\n\t// 不做重试决策(无执行者),该次失败按不可重试结算,回合照常失败返回;缺失\n\t// 经 warn 日志暴露,去重方式与 decideCompaction 守卫一致(不去重)。\n\tif (defaultRetryPolicyAbsent(session, runtime)) {\n\t\tsession._hostLogger?.warn(\"retry\", \"no retry policy registered; skipping the retry decision\", {\n\t\t\tfields: { policyName: session._retryPolicyName },\n\t\t});\n\t\treturn { retry: false };\n\t}\n\treturn runtime.decideRetry(session._retryPolicyName, {\n\t\tretryable: await session._isRetryableError(message, execution, signal),\n\t\tattempt: session._retryAttempt + 1,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tbaseDelayMs: settings.baseDelayMs,\n\t\terrorMessage: message.errorMessage,\n\t\tsignal,\n\t\tcontext: { version: 1, sessionId: session.sessionId, phase: \"retry\" },\n\t\texecution: execution ?? executionFacts(session, \"retry\"),\n\t});\n}\n\n/**\n * Prepare a retryable error for continuation with exponential backoff.\n * @returns true if the caller should continue the agent, false otherwise\n */\nexport async function prepareRetry(\n\tsession: AgentSessionInternals,\n\tmessage: AssistantMessage,\n\tprecomputedDecision?: Awaited<ReturnType<CapabilityRuntime[\"decideRetry\"]>>,\n): Promise<boolean> {\n\tconst settings = session.settingsManager.getRetrySettings();\n\tconst decision = precomputedDecision ?? (await decideRetry(session, message));\n\tif (!decision.retry) return false;\n\tsession._retryAttempt++;\n\t// ±10% jitter on the exponential backoff (borrowed from codex's backoff):\n\t// prevents synchronized retry storms when many sessions hit the same outage.\n\t// The effective delay is capped by maxAgentDelayMs before jitter (retryDelayMs\n\t// already caps the exponential path; the min() also clamps policy-provided\n\t// delayMs), so a capped delay can overshoot the cap by at most the jitter band.\n\tconst baseDelayMs = Math.min(\n\t\tdecision.delayMs ?? retryDelayMs(settings, session._retryAttempt),\n\t\tsettings.maxAgentDelayMs,\n\t);\n\tconst delayMs = Math.round(baseDelayMs * (0.9 + Math.random() * 0.2));\n\t// Install the controller before announcing the retry so listeners can cancel\n\t// the pending delay from the auto_retry_start event itself.\n\tsession._retryAbortController = new AbortController();\n\n\tsession._emit({\n\t\ttype: \"auto_retry_start\",\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\tawait dispatchAutoRetryLifecycle(session, {\n\t\tattempt: session._retryAttempt,\n\t\tmaxAttempts: settings.maxRetries,\n\t\tdelayMs,\n\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t});\n\n\t// Remove error message from agent state (keep in session for history)\n\tconst messages = session.agent.state.messages;\n\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\tawait session._applyContextTransition(messages.slice(0, -1), \"retry\");\n\t}\n\n\t// Wait with exponential backoff (abortable)\n\ttry {\n\t\tawait sleep(delayMs, session._retryAbortController.signal);\n\t} catch {\n\t\t// Aborted during sleep - emit end event so UI can clean up\n\t\tconst attempt = session._retryAttempt;\n\t\tsession._retryAttempt = 0;\n\t\tsession._emit({\n\t\t\ttype: \"auto_retry_end\",\n\t\t\tsuccess: false,\n\t\t\tattempt,\n\t\t\tfinalError: \"Retry cancelled\",\n\t\t});\n\t\treturn false;\n\t} finally {\n\t\tsession._retryAbortController = undefined;\n\t}\n\n\treturn true;\n}\n"]}
|