@ai-agent-forge/agent-forge 0.88.2 → 0.88.3
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 +27 -0
- package/README.md +1 -1
- package/bundled-plugins/agent-loop-policy/agent-forge.json +1 -1
- package/bundled-plugins/agent-loop-policy/plugin.json +1 -1
- package/bundled-plugins/coding-tools/agent-forge.json +1 -1
- package/bundled-plugins/coding-tools/plugin.json +1 -1
- package/bundled-plugins/compaction-policy/agent-forge.json +1 -1
- package/bundled-plugins/compaction-policy/plugin.json +1 -1
- package/bundled-plugins/overflow-policy/agent-forge.json +1 -1
- package/bundled-plugins/overflow-policy/plugin.json +1 -1
- package/bundled-plugins/provider-failover/agent-forge.json +1 -1
- package/bundled-plugins/provider-failover/plugin.json +1 -1
- package/bundled-plugins/retry-policy/agent-forge.json +1 -1
- package/bundled-plugins/retry-policy/plugin.json +1 -1
- package/dist/artifacts/paged-read.d.ts +6 -1
- package/dist/artifacts/paged-read.d.ts.map +1 -1
- package/dist/artifacts/paged-read.js.map +1 -1
- package/dist/bundle/.build-manifest.json +240 -230
- package/dist/bundle/chunks/{anthropic-messages-PLAKXR73.js → anthropic-messages-3FJHRAJL.js} +2 -2
- package/dist/bundle/chunks/anthropic.js +1 -1
- package/dist/bundle/chunks/{azure-openai-responses-OUWQ2AZD.js → azure-openai-responses-GCL47IDS.js} +1 -1
- package/dist/bundle/chunks/bedrock-converse-stream.js +1 -1
- package/dist/bundle/chunks/{chunk-6F5JWGKE.js → chunk-32YDZI4J.js} +1 -1
- package/dist/bundle/chunks/{chunk-LSP24WNH.js → chunk-755VNWIF.js} +12 -12
- package/dist/bundle/chunks/{chunk-HTC5K5SM.js → chunk-B42Y2VME.js} +94 -89
- package/dist/bundle/chunks/{chunk-DRQDKNXA.js → chunk-BVVSHK6W.js} +1 -1
- package/dist/bundle/chunks/{chunk-6R7UI4IY.js → chunk-QDLOMKF6.js} +1 -1
- package/dist/bundle/chunks/{chunk-44I47ACN.js → chunk-V3ACW7VD.js} +1 -1
- package/dist/bundle/chunks/{google-generative-ai-DLII6DAT.js → google-generative-ai-6BMXWA44.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-G7BZL7GM.js → google-vertex-6H7NLRTK.js} +1 -1
- package/dist/bundle/chunks/image-resize-worker.js +1 -1
- package/dist/bundle/chunks/{mistral-conversations-JXUK24ID.js → mistral-conversations-IXUHSFSJ.js} +1 -1
- package/dist/bundle/chunks/{openai-codex-responses-5GSGFIPG.js → openai-codex-responses-YHUAEVCM.js} +1 -1
- package/dist/bundle/chunks/openai-codex.js +1 -1
- package/dist/bundle/chunks/{openai-completions-EI2I6DTG.js → openai-completions-ULQCFC72.js} +1 -1
- package/dist/bundle/chunks/openai-responses-NLLAJDPS.js +2 -0
- package/dist/bundle/chunks/{openrouter-images-G4GQRUSG.js → openrouter-images-GZZQZXMS.js} +1 -1
- package/dist/bundle/chunks/openrouter.js +1 -1
- package/dist/bundle/chunks/{pi-messages-PWU2VJMR.js → pi-messages-EJTI2EJ3.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-TQWEGNNZ.js +5 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/client.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts +0 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/experimental/cli.d.ts +3 -3
- package/dist/cli/experimental/cli.d.ts.map +1 -1
- package/dist/cli/experimental/cli.js +2 -2
- package/dist/cli/experimental/cli.js.map +1 -1
- package/dist/cli/experimental/commands/agent-forge.d.ts +15 -0
- package/dist/cli/experimental/commands/agent-forge.d.ts.map +1 -0
- package/dist/cli/experimental/commands/{pi.js → agent-forge.js} +4 -4
- package/dist/cli/experimental/commands/agent-forge.js.map +1 -0
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +1 -1
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -7
- package/dist/config.js.map +1 -1
- package/dist/core/agent-forge-manifest.d.ts +7 -0
- package/dist/core/agent-forge-manifest.d.ts.map +1 -0
- package/dist/core/{pi-manifest.js → agent-forge-manifest.js} +4 -4
- package/dist/core/agent-forge-manifest.js.map +1 -0
- package/dist/core/agent-session-compaction.d.ts +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +3 -3
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-lifecycle.d.ts.map +1 -1
- package/dist/core/agent-session-lifecycle.js +12 -1
- package/dist/core/agent-session-lifecycle.js.map +1 -1
- package/dist/core/agent-session-projection.d.ts.map +1 -1
- package/dist/core/agent-session-projection.js +3 -3
- package/dist/core/agent-session-projection.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -1
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +1 -3
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/extensions/capability-runtime-store.d.ts +20 -1
- package/dist/core/extensions/capability-runtime-store.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-store.js +67 -0
- package/dist/core/extensions/capability-runtime-store.js.map +1 -1
- package/dist/core/extensions/capability-runtime-types.d.ts +14 -0
- package/dist/core/extensions/capability-runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/capability-runtime-types.js +7 -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 +144 -42
- package/dist/core/extensions/capability-runtime.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/virtual-modules.js +6 -1
- package/dist/core/extensions/virtual-modules.js.map +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts +1 -1
- package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
- package/dist/core/facade/coding-agent-facade.js +1 -1
- package/dist/core/facade/coding-agent-facade.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js +3 -3
- package/dist/core/i18n/locales/zh-cn/core-contract-final.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.js +1 -1
- package/dist/core/i18n/locales/zh-cn/core-contract-plugins.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 +1 -1
- package/dist/core/i18n/locales/zh-cn/core-errors.js.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.d.ts.map +1 -1
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js +2 -0
- package/dist/core/i18n/locales/zh-cn/tui-components-misc.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +4 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-resource-collection.d.ts.map +1 -1
- package/dist/core/package-resource-collection.js +5 -5
- package/dist/core/package-resource-collection.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +3 -3
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +1 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +6 -7
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +4 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +5 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +1 -3
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition.d.ts +1 -1
- package/dist/core/tools/tool-definition.d.ts.map +1 -1
- package/dist/core/tools/tool-definition.js.map +1 -1
- package/dist/core/trace-retention.d.ts +16 -1
- package/dist/core/trace-retention.d.ts.map +1 -1
- package/dist/core/trace-retention.js +43 -20
- package/dist/core/trace-retention.js.map +1 -1
- package/dist/export-html/ansi-to-html.d.ts.map +1 -0
- package/dist/export-html/ansi-to-html.js.map +1 -0
- package/dist/{core/export-html → export-html}/index.d.ts +1 -1
- package/dist/export-html/index.d.ts.map +1 -0
- package/dist/{core/export-html → export-html}/index.js +5 -5
- package/dist/export-html/index.js.map +1 -0
- package/dist/{core/export-html → export-html}/tool-renderer.d.ts +2 -2
- package/dist/export-html/tool-renderer.d.ts.map +1 -0
- package/dist/export-html/tool-renderer.js.map +1 -0
- package/dist/{modes/interactive → host}/model-catalog-refresh.d.ts +1 -1
- package/dist/host/model-catalog-refresh.d.ts.map +1 -0
- package/dist/{modes/interactive → host}/model-catalog-refresh.js +1 -1
- package/dist/host/model-catalog-refresh.js.map +1 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +25 -14
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/agents-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-view.js +1 -1
- package/dist/modes/interactive/components/agents-view.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -0
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +83 -24
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +1 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-editor.js +1 -1
- package/dist/modes/interactive/components/dialog-editor.js.map +1 -1
- package/dist/modes/interactive/components/dialog-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-input.js +1 -1
- package/dist/modes/interactive/components/dialog-input.js.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/dialog-selector.js +1 -1
- package/dist/modes/interactive/components/dialog-selector.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -1
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -1
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts +1 -1
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -1
- package/dist/modes/interactive/components/mermaid.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -2
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +1 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js +1 -1
- package/dist/modes/interactive/components/plugin-manager-entry.js.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js +1 -1
- package/dist/modes/interactive/components/plugin-selection-entry.js.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.js +1 -1
- package/dist/modes/interactive/components/queue-manager-selector.js.map +1 -1
- package/dist/modes/interactive/components/render-types.d.ts +1 -1
- package/dist/modes/interactive/components/render-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/render-types.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +2 -2
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -1
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js +1 -1
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +1 -1
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +1 -1
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +1 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +2 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +96 -4
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-run-group.js +1 -1
- package/dist/modes/interactive/components/tool-run-group.js.map +1 -1
- package/dist/modes/interactive/components/tree-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-list.js +1 -1
- package/dist/modes/interactive/components/tree-list.js.map +1 -1
- package/dist/modes/interactive/components/tree-render.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-render.js +1 -1
- package/dist/modes/interactive/components/tree-render.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +1 -1
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +1 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +1 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/workflow-view.d.ts.map +1 -1
- package/dist/modes/interactive/components/workflow-view.js +1 -1
- package/dist/modes/interactive/components/workflow-view.js.map +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts +1 -1
- package/dist/modes/interactive/interactive-auth.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth.js +1 -1
- package/dist/modes/interactive/interactive-auth.js.map +1 -1
- package/dist/modes/interactive/interactive-commands.d.ts +123 -6
- package/dist/modes/interactive/interactive-commands.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-commands.js +691 -4
- package/dist/modes/interactive/interactive-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-events.d.ts +174 -0
- package/dist/modes/interactive/interactive-events.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-events.js +704 -0
- package/dist/modes/interactive/interactive-events.js.map +1 -0
- package/dist/modes/interactive/interactive-format.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-format.js +1 -1
- package/dist/modes/interactive/interactive-format.js.map +1 -1
- package/dist/modes/interactive/interactive-lifecycle.d.ts +94 -0
- package/dist/modes/interactive/interactive-lifecycle.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-lifecycle.js +177 -0
- package/dist/modes/interactive/interactive-lifecycle.js.map +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts +240 -133
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +251 -2159
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/interactive-queues.d.ts +96 -0
- package/dist/modes/interactive/interactive-queues.d.ts.map +1 -0
- package/dist/modes/interactive/interactive-queues.js +183 -0
- package/dist/modes/interactive/interactive-queues.js.map +1 -0
- package/dist/modes/interactive/interactive-selectors.d.ts +95 -5
- package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +517 -6
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/startup-services.d.ts +31 -0
- package/dist/modes/interactive/startup-services.d.ts.map +1 -0
- package/dist/modes/interactive/startup-services.js +123 -0
- package/dist/modes/interactive/startup-services.js.map +1 -0
- package/dist/modes/memory-preheat.d.ts +11 -0
- package/dist/modes/memory-preheat.d.ts.map +1 -0
- package/dist/modes/memory-preheat.js +20 -0
- package/dist/modes/memory-preheat.js.map +1 -0
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +3 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/remote/server-assembly.d.ts.map +1 -1
- package/dist/remote/server-assembly.js +7 -2
- package/dist/remote/server-assembly.js.map +1 -1
- package/dist/suites/builtin-suites.d.ts.map +1 -0
- package/dist/suites/builtin-suites.js.map +1 -0
- package/dist/suites/resolved-agent-profile.d.ts.map +1 -0
- package/dist/suites/resolved-agent-profile.js.map +1 -0
- package/dist/suites/suite-lifecycle.d.ts.map +1 -0
- package/dist/suites/suite-lifecycle.js.map +1 -0
- package/dist/suites/suite-loader.d.ts.map +1 -0
- package/dist/suites/suite-loader.js.map +1 -0
- package/dist/{modes/interactive/theme → theme}/dark.json +1 -1
- package/dist/{modes/interactive/theme → theme}/light.json +1 -1
- package/dist/{modes/interactive/theme → theme}/theme-controller.d.ts +1 -1
- package/dist/theme/theme-controller.d.ts.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme-controller.js +1 -1
- package/dist/theme/theme-controller.js.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme.d.ts +1 -1
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/{modes/interactive/theme → theme}/theme.js +5 -5
- package/dist/theme/theme.js.map +1 -0
- package/docs/compaction.md +7 -7
- package/docs/environment-variables.md +10 -4
- package/docs/keybindings.md +3 -3
- package/docs/models.md +17 -17
- package/docs/packages.md +1 -1
- package/docs/prompt-templates.md +1 -1
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +5 -5
- package/docs/session-format.md +3 -3
- package/docs/settings.md +15 -1
- package/docs/shell-aliases.md +1 -1
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +17 -17
- package/docs/themes.md +5 -5
- package/docs/tmux.md +4 -4
- package/docs/tui.md +1 -1
- package/docs/usage.md +292 -292
- package/docs/windows.md +1 -1
- package/examples/extensions/bash-spawn-hook/index.ts +1 -1
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/mcp-stdio/index.d.ts +64 -0
- package/examples/extensions/mcp-stdio/index.d.ts.map +1 -0
- package/examples/extensions/mcp-stdio/index.js +292 -0
- package/examples/extensions/mcp-stdio/index.js.map +1 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -6
- package/examples/extensions/with-deps/plugin.json +1 -1
- package/package.json +2 -2
- package/dist/bundle/chunks/openai-responses-AUJQ3NWT.js +0 -2
- package/dist/bundle/chunks/virtual-modules-MRXD3RWG.js +0 -5
- package/dist/cli/experimental/commands/pi.d.ts +0 -15
- package/dist/cli/experimental/commands/pi.d.ts.map +0 -1
- package/dist/cli/experimental/commands/pi.js.map +0 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
- package/dist/core/export-html/ansi-to-html.js.map +0 -1
- package/dist/core/export-html/index.d.ts.map +0 -1
- package/dist/core/export-html/index.js.map +0 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
- package/dist/core/export-html/tool-renderer.js.map +0 -1
- package/dist/core/pi-manifest.d.ts +0 -7
- package/dist/core/pi-manifest.d.ts.map +0 -1
- package/dist/core/pi-manifest.js.map +0 -1
- package/dist/modes/interactive/model-catalog-refresh.d.ts.map +0 -1
- package/dist/modes/interactive/model-catalog-refresh.js.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme-controller.js.map +0 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme.js.map +0 -1
- package/dist/profiles/builtin-suites.d.ts.map +0 -1
- package/dist/profiles/builtin-suites.js.map +0 -1
- package/dist/profiles/resolved-agent-profile.d.ts.map +0 -1
- package/dist/profiles/resolved-agent-profile.js.map +0 -1
- package/dist/profiles/suite-lifecycle.d.ts.map +0 -1
- package/dist/profiles/suite-lifecycle.js.map +0 -1
- package/dist/profiles/suite-loader.d.ts.map +0 -1
- package/dist/profiles/suite-loader.js.map +0 -1
- package/dist/utils/deprecation.d.ts +0 -4
- package/dist/utils/deprecation.d.ts.map +0 -1
- package/dist/utils/deprecation.js +0 -13
- package/dist/utils/deprecation.js.map +0 -1
- /package/dist/{core/export-html → export-html}/ansi-to-html.d.ts +0 -0
- /package/dist/{core/export-html → export-html}/ansi-to-html.js +0 -0
- /package/dist/{core/export-html → export-html}/template.css +0 -0
- /package/dist/{core/export-html → export-html}/template.html +0 -0
- /package/dist/{core/export-html → export-html}/template.js +0 -0
- /package/dist/{core/export-html → export-html}/tool-renderer.js +0 -0
- /package/dist/{core/export-html → export-html}/vendor/highlight.min.js +0 -0
- /package/dist/{core/export-html → export-html}/vendor/marked.min.js +0 -0
- /package/dist/{profiles → suites}/builtin-suites.d.ts +0 -0
- /package/dist/{profiles → suites}/builtin-suites.js +0 -0
- /package/dist/{profiles → suites}/resolved-agent-profile.d.ts +0 -0
- /package/dist/{profiles → suites}/resolved-agent-profile.js +0 -0
- /package/dist/{profiles → suites}/suite-lifecycle.d.ts +0 -0
- /package/dist/{profiles → suites}/suite-lifecycle.js +0 -0
- /package/dist/{profiles → suites}/suite-loader.d.ts +0 -0
- /package/dist/{profiles → suites}/suite-loader.js +0 -0
- /package/dist/{modes/interactive/theme → theme}/theme-schema.json +0 -0
|
@@ -1,17 +1,32 @@
|
|
|
1
|
-
import { Container, SelectList, Spacer, Text } from "@agent-forge/tui";
|
|
1
|
+
import { Container, SelectList, Spacer, Text, TuiAltScreen } from "@agent-forge/tui";
|
|
2
2
|
import { getAgentDir } from "../../config.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { listAgentSessions, readAgentSession } from "../../core/agent-session-store.js";
|
|
4
|
+
import { DEFAULT_THINKING_LEVEL, THINKING_LEVEL_OPTIONS } from "../../core/defaults.js";
|
|
5
|
+
import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
|
|
6
|
+
import { setI18nLanguage, t } from "../../core/i18n/index.js";
|
|
5
7
|
import { findExactModelReferenceMatch, resolveModelScopeFromModels } from "../../core/model-resolver.js";
|
|
6
|
-
import {
|
|
8
|
+
import { MissingSessionCwdError } from "../../core/session-cwd.js";
|
|
9
|
+
import { SessionManager } from "../../core/session-manager.js";
|
|
10
|
+
import { refreshModelCatalogs } from "../../host/model-catalog-refresh.js";
|
|
11
|
+
import { listSuiteIds } from "../../suites/suite-loader.js";
|
|
12
|
+
import { getAvailableThemes, getSelectListTheme, theme } from "../../theme/theme.js";
|
|
13
|
+
import { copyToClipboard } from "../../utils/clipboard.js";
|
|
14
|
+
import { AgentsViewComponent } from "./components/agents-view.js";
|
|
15
|
+
import { AssistantMessageComponent } from "./components/assistant-message.js";
|
|
16
|
+
import { CustomMessageComponent } from "./components/custom-message.js";
|
|
7
17
|
import { DynamicBorder } from "./components/dynamic-border.js";
|
|
8
18
|
import { ModelSelectorComponent } from "./components/model-selector.js";
|
|
9
19
|
import { QueueManagerSelectorComponent } from "./components/queue-manager-selector.js";
|
|
10
20
|
import { ScopedModelsSelectorComponent } from "./components/scoped-models-selector.js";
|
|
21
|
+
import { SessionSelectorComponent } from "./components/session-selector.js";
|
|
22
|
+
import { SettingsSelectorComponent } from "./components/settings-selector.js";
|
|
23
|
+
import { BranchSummaryStatusIndicator } from "./components/status-indicator.js";
|
|
11
24
|
import { ThinkingSelectorComponent } from "./components/thinking-selector.js";
|
|
25
|
+
import { ToolExecutionComponent } from "./components/tool-execution.js";
|
|
26
|
+
import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
27
|
+
import { UserMessageComponent } from "./components/user-message.js";
|
|
12
28
|
import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
|
|
13
|
-
import {
|
|
14
|
-
import { getSelectListTheme, theme } from "./theme/theme.js";
|
|
29
|
+
import { WorkflowViewComponent } from "./components/workflow-view.js";
|
|
15
30
|
export function handleSuiteCommand(host, suiteId) {
|
|
16
31
|
const availableSuites = listSuiteIds(getAgentDir());
|
|
17
32
|
if (!suiteId) {
|
|
@@ -421,4 +436,500 @@ export async function handleCloneCommand(host) {
|
|
|
421
436
|
host.showError(error instanceof Error ? error.message : String(error));
|
|
422
437
|
}
|
|
423
438
|
}
|
|
439
|
+
export function showSettingsSelector(host) {
|
|
440
|
+
host.showSelector((done) => {
|
|
441
|
+
let selector;
|
|
442
|
+
const defaultProvider = host.settingsManager.getDefaultProvider();
|
|
443
|
+
const defaultModelId = host.settingsManager.getDefaultModel();
|
|
444
|
+
const defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t("not set");
|
|
445
|
+
selector = new SettingsSelectorComponent({
|
|
446
|
+
defaultModel,
|
|
447
|
+
currentModel: host.facade.getModel(),
|
|
448
|
+
availableDefaultModels: host.facade.getAvailableModels(),
|
|
449
|
+
showImages: host.settingsManager.getShowImages(),
|
|
450
|
+
imageWidthCells: host.settingsManager.getImageWidthCells(),
|
|
451
|
+
autoResizeImages: host.settingsManager.getImageAutoResize(),
|
|
452
|
+
blockImages: host.settingsManager.getBlockImages(),
|
|
453
|
+
steeringMode: host.facade.getSteeringMode(),
|
|
454
|
+
followUpMode: host.facade.getFollowUpMode(),
|
|
455
|
+
transport: host.settingsManager.getTransport(),
|
|
456
|
+
httpIdleTimeoutMs: host.settingsManager.getHttpIdleTimeoutMs(),
|
|
457
|
+
thinkingLevel: host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL,
|
|
458
|
+
availableThinkingLevels: [...THINKING_LEVEL_OPTIONS],
|
|
459
|
+
modelThinkingLevels: host.settingsManager.getAllModelThinkingLevels(),
|
|
460
|
+
currentTheme: host.themeController.getThemeSelection() || "dark",
|
|
461
|
+
terminalTheme: host.themeController.getTerminalTheme(),
|
|
462
|
+
availableThemes: getAvailableThemes(),
|
|
463
|
+
hideThinkingBlock: host.hideThinkingBlock,
|
|
464
|
+
mermaidRenderingMode: host.settingsManager.getMermaidRenderingMode(),
|
|
465
|
+
collapseChangelog: host.settingsManager.getCollapseChangelog(),
|
|
466
|
+
doubleEscapeAction: host.settingsManager.getDoubleEscapeAction(),
|
|
467
|
+
uiLanguage: host.settingsManager.getUiLanguage(),
|
|
468
|
+
treeFilterMode: host.settingsManager.getTreeFilterMode(),
|
|
469
|
+
showHardwareCursor: host.settingsManager.getShowHardwareCursor(),
|
|
470
|
+
showCacheMissNotices: host.settingsManager.getShowCacheMissNotices(),
|
|
471
|
+
editorPaddingX: host.settingsManager.getEditorPaddingX(),
|
|
472
|
+
outputPad: host.settingsManager.getOutputPad(),
|
|
473
|
+
autocompleteMaxVisible: host.settingsManager.getAutocompleteMaxVisible(),
|
|
474
|
+
quietStartup: host.settingsManager.getQuietStartup(),
|
|
475
|
+
clearOnShrink: host.settingsManager.getClearOnShrink(),
|
|
476
|
+
showTerminalProgress: host.settingsManager.getShowTerminalProgress(),
|
|
477
|
+
tuiMode: host.ui.mode,
|
|
478
|
+
fullscreenExitOutput: host.settingsManager.getFullscreenExitOutput(),
|
|
479
|
+
fullscreenScrollbar: host.settingsManager.getFullscreenScrollbar(),
|
|
480
|
+
fullscreenCopyOnSelect: host.settingsManager.getFullscreenCopyOnSelect(),
|
|
481
|
+
fullscreenWheelScrollLines: host.settingsManager.getFullscreenWheelScrollLines(),
|
|
482
|
+
warnings: host.settingsManager.getWarnings(),
|
|
483
|
+
}, {
|
|
484
|
+
onShowImagesChange: (enabled) => {
|
|
485
|
+
host.settingsManager.setShowImages(enabled);
|
|
486
|
+
for (const child of host.chatContainer.children) {
|
|
487
|
+
if (child instanceof ToolExecutionComponent) {
|
|
488
|
+
child.setShowImages(enabled);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
onImageWidthCellsChange: (width) => {
|
|
493
|
+
host.settingsManager.setImageWidthCells(width);
|
|
494
|
+
for (const child of host.chatContainer.children) {
|
|
495
|
+
if (child instanceof ToolExecutionComponent) {
|
|
496
|
+
child.setImageWidthCells(width);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
onAutoResizeImagesChange: (enabled) => {
|
|
501
|
+
host.settingsManager.setImageAutoResize(enabled);
|
|
502
|
+
},
|
|
503
|
+
onBlockImagesChange: (blocked) => {
|
|
504
|
+
host.settingsManager.setBlockImages(blocked);
|
|
505
|
+
},
|
|
506
|
+
onSteeringModeChange: (mode) => {
|
|
507
|
+
host.facade.setSteeringMode(mode);
|
|
508
|
+
},
|
|
509
|
+
onFollowUpModeChange: (mode) => {
|
|
510
|
+
host.facade.setFollowUpMode(mode);
|
|
511
|
+
},
|
|
512
|
+
onTransportChange: (transport) => {
|
|
513
|
+
host.settingsManager.setTransport(transport);
|
|
514
|
+
host.session.host.setTransport(transport);
|
|
515
|
+
},
|
|
516
|
+
onHttpIdleTimeoutMsChange: (timeoutMs) => {
|
|
517
|
+
host.settingsManager.setHttpIdleTimeoutMs(timeoutMs);
|
|
518
|
+
configureHttpDispatcher(timeoutMs);
|
|
519
|
+
host.showStatus(t("HTTP idle timeout: {value}", { value: formatHttpIdleTimeoutMs(timeoutMs) }));
|
|
520
|
+
},
|
|
521
|
+
onModelThinkingLevelChange: (provider, modelId, level) => {
|
|
522
|
+
host.settingsManager.setModelThinkingLevel(provider, modelId, level);
|
|
523
|
+
// If the override is for the current model, apply it to the session too
|
|
524
|
+
const current = host.facade.getModel();
|
|
525
|
+
if (current && current.provider === provider && current.id === modelId) {
|
|
526
|
+
host.facade.setThinkingLevel(level);
|
|
527
|
+
host.footer.invalidate();
|
|
528
|
+
host.updateEditorBorderColor();
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
onModelThinkingLevelRemove: (provider, modelId) => {
|
|
532
|
+
host.settingsManager.removeModelThinkingLevel(provider, modelId);
|
|
533
|
+
// If the override was for the current model, revert to global default
|
|
534
|
+
const current = host.facade.getModel();
|
|
535
|
+
if (current && current.provider === provider && current.id === modelId) {
|
|
536
|
+
const globalDefault = host.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
|
|
537
|
+
host.facade.setThinkingLevel(globalDefault);
|
|
538
|
+
host.footer.invalidate();
|
|
539
|
+
host.updateEditorBorderColor();
|
|
540
|
+
}
|
|
541
|
+
},
|
|
542
|
+
onThemeChange: (themeSetting) => {
|
|
543
|
+
host.settingsManager.setTheme(themeSetting);
|
|
544
|
+
void host.themeController.setThemeSetting(themeSetting);
|
|
545
|
+
},
|
|
546
|
+
onThemePreview: (themeName) => host.themeController.preview(themeName),
|
|
547
|
+
onHideThinkingBlockChange: (hidden) => {
|
|
548
|
+
host.hideThinkingBlock = hidden;
|
|
549
|
+
host.settingsManager.setHideThinkingBlock(hidden);
|
|
550
|
+
host.updateThinkingBlockVisibility();
|
|
551
|
+
},
|
|
552
|
+
onMermaidRenderingModeChange: (mode) => {
|
|
553
|
+
host.settingsManager.setMermaidRenderingMode(mode);
|
|
554
|
+
host.chatContainer.invalidate();
|
|
555
|
+
host.ui.requestRender();
|
|
556
|
+
},
|
|
557
|
+
onShowCacheMissNoticesChange: (shown) => {
|
|
558
|
+
host.settingsManager.setShowCacheMissNotices(shown);
|
|
559
|
+
host.rebuildChatFromMessages();
|
|
560
|
+
},
|
|
561
|
+
onCollapseChangelogChange: (collapsed) => {
|
|
562
|
+
host.settingsManager.setCollapseChangelog(collapsed);
|
|
563
|
+
},
|
|
564
|
+
onQuietStartupChange: (enabled) => {
|
|
565
|
+
host.settingsManager.setQuietStartup(enabled);
|
|
566
|
+
},
|
|
567
|
+
onDoubleEscapeActionChange: (action) => {
|
|
568
|
+
host.settingsManager.setDoubleEscapeAction(action);
|
|
569
|
+
},
|
|
570
|
+
onUiLanguageChange: (language) => {
|
|
571
|
+
host.settingsManager.setUiLanguage(language);
|
|
572
|
+
setI18nLanguage(language);
|
|
573
|
+
host.ui.requestRender();
|
|
574
|
+
},
|
|
575
|
+
onTreeFilterModeChange: (mode) => {
|
|
576
|
+
host.settingsManager.setTreeFilterMode(mode);
|
|
577
|
+
},
|
|
578
|
+
onShowHardwareCursorChange: (enabled) => {
|
|
579
|
+
host.settingsManager.setShowHardwareCursor(enabled);
|
|
580
|
+
host.ui.setShowHardwareCursor(enabled);
|
|
581
|
+
},
|
|
582
|
+
onEditorPaddingXChange: (padding) => {
|
|
583
|
+
host.settingsManager.setEditorPaddingX(padding);
|
|
584
|
+
host.defaultEditor.setPaddingX(padding);
|
|
585
|
+
if (host.editor !== host.defaultEditor && host.editor.setPaddingX !== undefined) {
|
|
586
|
+
host.editor.setPaddingX(padding);
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
onOutputPadChange: (padding) => {
|
|
590
|
+
host.settingsManager.setOutputPad(padding);
|
|
591
|
+
host.outputPad = padding;
|
|
592
|
+
if (host.streamingComponent || host.facade.isStreaming()) {
|
|
593
|
+
for (const child of host.chatContainer.children) {
|
|
594
|
+
if (child instanceof AssistantMessageComponent ||
|
|
595
|
+
child instanceof CustomMessageComponent ||
|
|
596
|
+
child instanceof UserMessageComponent) {
|
|
597
|
+
child.setOutputPad(padding);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
if (host.streamingComponent) {
|
|
601
|
+
host.streamingComponent.setOutputPad(padding);
|
|
602
|
+
}
|
|
603
|
+
host.ui.requestRender();
|
|
604
|
+
return;
|
|
605
|
+
}
|
|
606
|
+
host.rebuildChatFromMessages();
|
|
607
|
+
},
|
|
608
|
+
onAutocompleteMaxVisibleChange: (maxVisible) => {
|
|
609
|
+
host.settingsManager.setAutocompleteMaxVisible(maxVisible);
|
|
610
|
+
host.defaultEditor.setAutocompleteMaxVisible(maxVisible);
|
|
611
|
+
if (host.editor !== host.defaultEditor && host.editor.setAutocompleteMaxVisible !== undefined) {
|
|
612
|
+
host.editor.setAutocompleteMaxVisible(maxVisible);
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
onClearOnShrinkChange: (enabled) => {
|
|
616
|
+
host.settingsManager.setClearOnShrink(enabled);
|
|
617
|
+
host.ui.setClearOnShrink(enabled);
|
|
618
|
+
if (!enabled && !host.activeStatusIndicator) {
|
|
619
|
+
host.statusContainer.clear();
|
|
620
|
+
}
|
|
621
|
+
},
|
|
622
|
+
onShowTerminalProgressChange: (enabled) => {
|
|
623
|
+
host.settingsManager.setShowTerminalProgress(enabled);
|
|
624
|
+
},
|
|
625
|
+
onTuiModeChange: (mode) => {
|
|
626
|
+
if (!host.switchTuiMode(mode)) {
|
|
627
|
+
selector?.getSettingsList().updateValue("tui-mode", host.ui.mode);
|
|
628
|
+
host.showStatus(t("Close active overlays before changing TUI mode"));
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
host.settingsManager.setTuiMode(mode);
|
|
632
|
+
if (!host.activeStatusIndicator)
|
|
633
|
+
host.statusContainer.clear();
|
|
634
|
+
host.showStatus(t("TUI mode: {mode}", { mode }));
|
|
635
|
+
},
|
|
636
|
+
onFullscreenExitOutputChange: (output) => {
|
|
637
|
+
host.settingsManager.setFullscreenExitOutput(output);
|
|
638
|
+
},
|
|
639
|
+
onFullscreenScrollbarChange: (mode) => {
|
|
640
|
+
host.settingsManager.setFullscreenScrollbar(mode);
|
|
641
|
+
host.applyFullscreenScrollbarSetting();
|
|
642
|
+
},
|
|
643
|
+
onFullscreenCopyOnSelectChange: (enabled) => {
|
|
644
|
+
host.settingsManager.setFullscreenCopyOnSelect(enabled);
|
|
645
|
+
if (host.renderer instanceof TuiAltScreen)
|
|
646
|
+
host.renderer.setCopyOnSelect(enabled);
|
|
647
|
+
},
|
|
648
|
+
onFullscreenWheelScrollLinesChange: (lines) => {
|
|
649
|
+
host.settingsManager.setFullscreenWheelScrollLines(lines);
|
|
650
|
+
if (host.renderer instanceof TuiAltScreen)
|
|
651
|
+
host.renderer.setWheelScrollLines(lines);
|
|
652
|
+
},
|
|
653
|
+
onWarningsChange: (warnings) => {
|
|
654
|
+
host.settingsManager.setWarnings(warnings);
|
|
655
|
+
},
|
|
656
|
+
onCancel: () => {
|
|
657
|
+
done();
|
|
658
|
+
host.ui.requestRender();
|
|
659
|
+
},
|
|
660
|
+
});
|
|
661
|
+
return { component: selector, focus: selector.getSettingsList() };
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* Workflow overlay (§9 L2/L3): read-only panorama + transition log from
|
|
666
|
+
* `workflow.state`/`workflow.transition` entries. Actions are forwarded to
|
|
667
|
+
* the editor as reviewable text; the main agent executes them via
|
|
668
|
+
* workflow_advance (rendering and execution stay separated).
|
|
669
|
+
*/
|
|
670
|
+
export function showWorkflowView(host) {
|
|
671
|
+
const hasSnapshot = host.facade
|
|
672
|
+
.getEntries()
|
|
673
|
+
.some((entry) => entry.type === "custom" && entry.customType === "workflow.state");
|
|
674
|
+
if (!hasSnapshot) {
|
|
675
|
+
host.showStatus(t("No workflow in this session"));
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
host.showSelector((done) => {
|
|
679
|
+
const view = new WorkflowViewComponent({
|
|
680
|
+
getEntries: () => host.facade.getEntries(),
|
|
681
|
+
maxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),
|
|
682
|
+
requestRender: () => host.ui.requestRender(),
|
|
683
|
+
});
|
|
684
|
+
view.onClose = done;
|
|
685
|
+
view.onForwardAction = (text) => {
|
|
686
|
+
done();
|
|
687
|
+
host.editor.setText(text);
|
|
688
|
+
host.ui.requestRender();
|
|
689
|
+
host.showStatus(t("Workflow action staged — review in the editor and submit"));
|
|
690
|
+
};
|
|
691
|
+
return { component: view, focus: view, dispose: () => view.dispose() };
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
/**
|
|
695
|
+
* Subagent session browser (/agents): read-only list + detail of this
|
|
696
|
+
* session's subagent transcripts from the D-060 §3 on-disk store — the same
|
|
697
|
+
* parent-scoped summary source as the subagent_list model tool (only this
|
|
698
|
+
* session's children, newest first). Detail entries load lazily per
|
|
699
|
+
* session; a failed load renders inside the view instead of throwing.
|
|
700
|
+
*/
|
|
701
|
+
export function showAgentsView(host) {
|
|
702
|
+
const agentDir = getAgentDir();
|
|
703
|
+
const sessions = listAgentSessions({ agentDir, parentAgentSession: host.facade.getSessionId() });
|
|
704
|
+
if (sessions.length === 0) {
|
|
705
|
+
host.showStatus(t("No subagent sessions in this session"));
|
|
706
|
+
return;
|
|
707
|
+
}
|
|
708
|
+
host.showSelector((done) => {
|
|
709
|
+
const view = new AgentsViewComponent({
|
|
710
|
+
sessions,
|
|
711
|
+
loadEntries: (sessionId) => readAgentSession({ agentDir, sessionId }),
|
|
712
|
+
maxRows: Math.max(6, Math.floor(host.ui.terminal.rows / 2)),
|
|
713
|
+
requestRender: () => host.ui.requestRender(),
|
|
714
|
+
});
|
|
715
|
+
view.onClose = done;
|
|
716
|
+
return { component: view, focus: view };
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
export function showTreeSelector(host, initialSelectedId) {
|
|
720
|
+
const tree = host.facade.getTree();
|
|
721
|
+
const realLeafId = host.facade.getLeafId();
|
|
722
|
+
const initialFilterMode = host.settingsManager.getTreeFilterMode();
|
|
723
|
+
if (tree.length === 0) {
|
|
724
|
+
host.showStatus(t("No entries in session"));
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
host.showSelector((done) => {
|
|
728
|
+
const selector = new TreeSelectorComponent(tree, realLeafId, host.ui.terminal.rows, async (entryId) => {
|
|
729
|
+
// Selecting the current leaf is a no-op (already there)
|
|
730
|
+
if (entryId === host.facade.getLeafId()) {
|
|
731
|
+
done();
|
|
732
|
+
host.showStatus(t("Already at this point"));
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
// Ask about summarization
|
|
736
|
+
done(); // Close selector first
|
|
737
|
+
// Loop until user makes a complete choice or cancels to tree
|
|
738
|
+
let wantsSummary = false;
|
|
739
|
+
let customInstructions;
|
|
740
|
+
// Check if we should skip the prompt (user preference to always default to no summary)
|
|
741
|
+
if (!host.settingsManager.getBranchSummarySkipPrompt()) {
|
|
742
|
+
while (true) {
|
|
743
|
+
const summaryChoice = await host.showDialogSelector(t("Summarize branch?"), [
|
|
744
|
+
t("No summary"),
|
|
745
|
+
t("Summarize"),
|
|
746
|
+
t("Summarize with custom prompt"),
|
|
747
|
+
]);
|
|
748
|
+
if (summaryChoice === undefined) {
|
|
749
|
+
// User pressed escape - re-show tree selector with same selection
|
|
750
|
+
showTreeSelector(host, entryId);
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
wantsSummary = summaryChoice !== t("No summary");
|
|
754
|
+
if (summaryChoice === t("Summarize with custom prompt")) {
|
|
755
|
+
customInstructions = await host.showDialogEditor(t("Custom summarization instructions"));
|
|
756
|
+
if (customInstructions === undefined) {
|
|
757
|
+
// User cancelled - loop back to summary selector
|
|
758
|
+
continue;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
// User made a complete choice
|
|
762
|
+
break;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
// The user committed to navigating: stop the active response first.
|
|
766
|
+
// 中断分级:导航清场只停回合,不终止后台子代理(设计 §4.2)。
|
|
767
|
+
if (host.facade.isStreaming()) {
|
|
768
|
+
host.restoreQueuedMessagesToEditor();
|
|
769
|
+
await host.facade.abort({ cancelAgentTasks: false });
|
|
770
|
+
}
|
|
771
|
+
// Set up escape handler and status indicator if summarizing
|
|
772
|
+
let showingSummaryIndicator = false;
|
|
773
|
+
const originalOnEscape = host.defaultEditor.onEscape;
|
|
774
|
+
if (wantsSummary) {
|
|
775
|
+
host.defaultEditor.onEscape = () => {
|
|
776
|
+
host.facade.abortBranchSummary();
|
|
777
|
+
};
|
|
778
|
+
host.chatContainer.addChild(new Spacer(1));
|
|
779
|
+
host.showStatusIndicator(new BranchSummaryStatusIndicator(host.ui));
|
|
780
|
+
showingSummaryIndicator = true;
|
|
781
|
+
host.ui.requestRender();
|
|
782
|
+
}
|
|
783
|
+
try {
|
|
784
|
+
const result = await host.facade.navigateTree(entryId, {
|
|
785
|
+
summarize: wantsSummary,
|
|
786
|
+
customInstructions,
|
|
787
|
+
});
|
|
788
|
+
if (result.aborted) {
|
|
789
|
+
// Summarization aborted - re-show tree selector with same selection
|
|
790
|
+
host.showStatus(t("Branch summarization cancelled"));
|
|
791
|
+
showTreeSelector(host, entryId);
|
|
792
|
+
return;
|
|
793
|
+
}
|
|
794
|
+
if (result.cancelled) {
|
|
795
|
+
host.showStatus(t("Navigation cancelled"));
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
// Update UI
|
|
799
|
+
host.chatContainer.clear();
|
|
800
|
+
host.renderInitialMessages();
|
|
801
|
+
if (result.editorText && !host.editor.getText().trim()) {
|
|
802
|
+
host.editor.setText(result.editorText);
|
|
803
|
+
}
|
|
804
|
+
host.showStatus(t("Navigated to selected point"));
|
|
805
|
+
void host.flushCompactionQueue({ willRetry: false });
|
|
806
|
+
}
|
|
807
|
+
catch (error) {
|
|
808
|
+
host.showError(error instanceof Error ? error.message : String(error));
|
|
809
|
+
}
|
|
810
|
+
finally {
|
|
811
|
+
if (showingSummaryIndicator) {
|
|
812
|
+
host.clearStatusIndicator("branchSummary");
|
|
813
|
+
}
|
|
814
|
+
host.defaultEditor.onEscape = originalOnEscape;
|
|
815
|
+
}
|
|
816
|
+
}, () => {
|
|
817
|
+
done();
|
|
818
|
+
host.ui.requestRender();
|
|
819
|
+
}, (entryId, label) => {
|
|
820
|
+
host.facade.appendLabelChange(entryId, label);
|
|
821
|
+
host.ui.requestRender();
|
|
822
|
+
}, initialSelectedId, initialFilterMode);
|
|
823
|
+
selector.onCopy = async (text) => {
|
|
824
|
+
if (!text) {
|
|
825
|
+
host.showError(t("Selected entry has no text to copy"));
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
try {
|
|
829
|
+
await copyToClipboard(text);
|
|
830
|
+
host.showStatus(t("Copied selected message to clipboard"));
|
|
831
|
+
}
|
|
832
|
+
catch (error) {
|
|
833
|
+
host.showError(error instanceof Error ? error.message : String(error));
|
|
834
|
+
}
|
|
835
|
+
};
|
|
836
|
+
return { component: selector, focus: selector };
|
|
837
|
+
});
|
|
838
|
+
}
|
|
839
|
+
export function showSessionSelector(host) {
|
|
840
|
+
host.showSelector((done) => {
|
|
841
|
+
const selector = new SessionSelectorComponent((onProgress, signal) => host.runtimeFacade.listSessions(onProgress, signal), (onProgress, signal) => host.runtimeFacade.listAllSessions(onProgress, signal), async (sessionPath) => {
|
|
842
|
+
done();
|
|
843
|
+
await handleResumeSession(host, sessionPath);
|
|
844
|
+
}, () => {
|
|
845
|
+
done();
|
|
846
|
+
host.ui.requestRender();
|
|
847
|
+
}, () => {
|
|
848
|
+
void host.shutdown();
|
|
849
|
+
}, () => host.ui.requestRender(), {
|
|
850
|
+
renameSession: async (sessionFilePath, nextName) => {
|
|
851
|
+
const next = (nextName ?? "").trim();
|
|
852
|
+
if (!next)
|
|
853
|
+
return;
|
|
854
|
+
const mgr = SessionManager.open(sessionFilePath);
|
|
855
|
+
mgr.appendSessionInfo(next);
|
|
856
|
+
},
|
|
857
|
+
showRenameHint: true,
|
|
858
|
+
keybindings: host.keybindings,
|
|
859
|
+
// 会话选择器默认只列当前方案的会话;跨方案会话仅在显式
|
|
860
|
+
// "show all" 后可见(设计 §10.1)。
|
|
861
|
+
suiteFilter: {
|
|
862
|
+
currentSuiteId: host.getCurrentSessionSuiteId(),
|
|
863
|
+
getSessionSuiteId: (session) => host.readSessionSuiteId(session.path),
|
|
864
|
+
},
|
|
865
|
+
}, host.runtimeFacade.getSessionFile());
|
|
866
|
+
return { component: selector, focus: selector };
|
|
867
|
+
});
|
|
868
|
+
}
|
|
869
|
+
export async function handleResumeSession(host, sessionPath, options) {
|
|
870
|
+
host.clearStatusIndicator();
|
|
871
|
+
try {
|
|
872
|
+
const result = await host.runtimeFacade.switchSession(sessionPath, {
|
|
873
|
+
withSession: options?.withSession,
|
|
874
|
+
});
|
|
875
|
+
if (result.cancelled) {
|
|
876
|
+
return result;
|
|
877
|
+
}
|
|
878
|
+
host.showStatus(t("Resumed session"));
|
|
879
|
+
host.detectCrossSuiteResume();
|
|
880
|
+
return result;
|
|
881
|
+
}
|
|
882
|
+
catch (error) {
|
|
883
|
+
if (error instanceof MissingSessionCwdError) {
|
|
884
|
+
const selectedCwd = await host.promptForMissingSessionCwd(error);
|
|
885
|
+
if (!selectedCwd) {
|
|
886
|
+
host.showStatus(t("Resume cancelled"));
|
|
887
|
+
return { cancelled: true };
|
|
888
|
+
}
|
|
889
|
+
const result = await host.runtimeFacade.switchSession(sessionPath, {
|
|
890
|
+
cwdOverride: selectedCwd,
|
|
891
|
+
withSession: options?.withSession,
|
|
892
|
+
});
|
|
893
|
+
if (result.cancelled) {
|
|
894
|
+
return result;
|
|
895
|
+
}
|
|
896
|
+
host.showStatus(t("Resumed session in current cwd"));
|
|
897
|
+
host.detectCrossSuiteResume();
|
|
898
|
+
return result;
|
|
899
|
+
}
|
|
900
|
+
return host.handleFatalRuntimeError(t("Failed to resume session"), error);
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* Interactive recovery for an unresolved startup suite id (设计 §9): pick a
|
|
905
|
+
* suite, persist it as the project setting, then rebuild the session with
|
|
906
|
+
* the selected suite via the same /new assembly path. Cancelling keeps the
|
|
907
|
+
* fallback assembly the runtime started with.
|
|
908
|
+
*/
|
|
909
|
+
export async function showStartupSuiteSelector(host, pending) {
|
|
910
|
+
const selected = await new Promise((resolve) => {
|
|
911
|
+
openSuiteListSelector(host, {
|
|
912
|
+
availableSuites: pending.available,
|
|
913
|
+
note: t('Suite "{id}" was not found. The selected suite applies to the new session.', {
|
|
914
|
+
id: pending.requestedId,
|
|
915
|
+
}),
|
|
916
|
+
onSelect: (suiteId) => resolve(suiteId),
|
|
917
|
+
onCancel: () => resolve(undefined),
|
|
918
|
+
});
|
|
919
|
+
});
|
|
920
|
+
if (selected === undefined) {
|
|
921
|
+
host.showWarning(t('Suite "{id}" was not found — continuing without a suite. Use /suite to choose one.', {
|
|
922
|
+
id: pending.requestedId,
|
|
923
|
+
}));
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
host.settingsManager.setProjectSuite(selected);
|
|
927
|
+
try {
|
|
928
|
+
await host.runtimeFacade.newSession();
|
|
929
|
+
host.showStatus(t("Suite set to {id} — new session started", { id: selected }));
|
|
930
|
+
}
|
|
931
|
+
catch (error) {
|
|
932
|
+
await host.handleFatalRuntimeError(t("Failed to create session"), error);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
424
935
|
//# sourceMappingURL=interactive-selectors.js.map
|