@hyperspaceng/neural-coding-agent 0.62.1 → 0.63.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +143 -0
- package/README.md +10 -0
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/register-bedrock.js +2 -2
- package/dist/bun/register-bedrock.js.map +1 -1
- package/dist/cli/args.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- 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/file-processor.d.ts +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +4 -0
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +21 -11
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +159 -101
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +5 -3
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +7 -4
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +4 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -3
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +5 -5
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +28 -27
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +2 -2
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/export-html/index.d.ts +3 -3
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +7 -6
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +2 -2
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +41 -16
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +27 -17
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +7 -10
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +27 -38
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +56 -15
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +2 -8
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts +3 -3
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts +19 -3
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +85 -71
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +2 -2
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +5 -5
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-guard.d.ts +6 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +59 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +3 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +153 -29
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +2 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +30 -32
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +6 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +37 -5
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +6 -5
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +136 -108
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +4 -4
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +15 -24
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +2 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +3 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +3 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +2 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +25 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -3
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -38
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/timings.d.ts +1 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +6 -0
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts +20 -10
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +151 -59
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +23 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +150 -57
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +31 -7
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +179 -59
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +4 -4
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +12 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +76 -27
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +16 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +83 -29
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +68 -22
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +50 -26
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +10 -4
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +67 -13
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +11 -4
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +110 -51
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +21 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +49 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +30 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/write.d.ts +10 -4
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +162 -27
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +57 -19
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +1 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +1 -2
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +19 -6
- 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 +1 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +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 +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 +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/countdown-timer.d.ts +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +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 +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +1 -1
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +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 +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 +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +2 -2
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +2 -2
- 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 +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +2 -2
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +2 -2
- 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-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
- 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/show-images-selector.d.ts +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 +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/theme-selector.d.ts +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 +2 -2
- 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 +15 -41
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +121 -679
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +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 +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 +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/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +5 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +175 -160
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +5 -2
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +15 -1
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +2 -2
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +84 -78
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +2 -2
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- 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 +27 -20
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +5 -6
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/image-resize.d.ts +6 -6
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +45 -94
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/development.md +3 -1
- package/docs/extensions.md +85 -34
- package/docs/models.md +6 -0
- package/docs/rpc.md +11 -2
- package/docs/settings.md +12 -0
- package/docs/skills.md +3 -2
- package/docs/tui.md +2 -2
- package/examples/extensions/built-in-tool-renderer.ts +8 -8
- package/examples/extensions/commands.ts +3 -3
- package/examples/extensions/custom-compaction.ts +17 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +17 -17
- package/examples/extensions/custom-provider-gitlab-duo/package.json +14 -14
- package/examples/extensions/custom-provider-qwen-cli/package.json +14 -14
- package/examples/extensions/handoff.ts +5 -2
- package/examples/extensions/minimal-mode.ts +14 -14
- package/examples/extensions/qna.ts +5 -2
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/subagent/index.ts +23 -3
- package/examples/extensions/summarize.ts +15 -4
- package/examples/extensions/todo.ts +2 -2
- package/examples/extensions/trigger-compact.ts +11 -1
- package/examples/extensions/truncated-tool.ts +2 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +20 -20
- package/examples/sdk/04-skills.ts +8 -2
- package/examples/sdk/08-prompt-templates.ts +2 -1
- package/examples/sdk/12-full-control.ts +0 -1
- package/package.json +5 -4
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
16
|
import { basename, dirname, join, resolve } from "node:path";
|
|
17
|
-
import { isContextOverflow, modelsAreEqual, resetApiProviders, supportsXhigh } from "@
|
|
17
|
+
import { isContextOverflow, modelsAreEqual, resetApiProviders, supportsXhigh } from "@hyperspaceng/neural-ai";
|
|
18
18
|
import { getDocsPath } from "../config.js";
|
|
19
19
|
import { theme } from "../modes/interactive/theme/theme.js";
|
|
20
20
|
import { stripFrontmatter } from "../utils/frontmatter.js";
|
|
@@ -27,9 +27,10 @@ import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
|
27
27
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
28
28
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
29
29
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
|
|
30
|
-
import {
|
|
30
|
+
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
31
31
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
32
|
-
import {
|
|
32
|
+
import { createAllToolDefinitions } from "./tools/index.js";
|
|
33
|
+
import { createToolDefinitionFromAgentTool, wrapToolDefinition } from "./tools/tool-definition-wrapper.js";
|
|
33
34
|
/**
|
|
34
35
|
* Parse a skill block from message text.
|
|
35
36
|
* Returns null if the text doesn't contain a skill block.
|
|
@@ -89,7 +90,7 @@ export class AgentSession {
|
|
|
89
90
|
_turnIndex = 0;
|
|
90
91
|
_resourceLoader;
|
|
91
92
|
_customTools;
|
|
92
|
-
|
|
93
|
+
_baseToolDefinitions = new Map();
|
|
93
94
|
_cwd;
|
|
94
95
|
_extensionRunnerRef;
|
|
95
96
|
_initialActiveToolNames;
|
|
@@ -103,6 +104,7 @@ export class AgentSession {
|
|
|
103
104
|
_modelRegistry;
|
|
104
105
|
// Tool registry for extension getTools/setTools
|
|
105
106
|
_toolRegistry = new Map();
|
|
107
|
+
_toolDefinitions = new Map();
|
|
106
108
|
_toolPromptSnippets = new Map();
|
|
107
109
|
_toolPromptGuidelines = new Map();
|
|
108
110
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
@@ -132,6 +134,23 @@ export class AgentSession {
|
|
|
132
134
|
get modelRegistry() {
|
|
133
135
|
return this._modelRegistry;
|
|
134
136
|
}
|
|
137
|
+
async _getRequiredRequestAuth(model) {
|
|
138
|
+
const result = await this._modelRegistry.getApiKeyAndHeaders(model);
|
|
139
|
+
if (!result.ok) {
|
|
140
|
+
throw new Error(result.error);
|
|
141
|
+
}
|
|
142
|
+
if (result.apiKey) {
|
|
143
|
+
return { apiKey: result.apiKey, headers: result.headers };
|
|
144
|
+
}
|
|
145
|
+
const isOAuth = this._modelRegistry.isUsingOAuth(model);
|
|
146
|
+
if (isOAuth) {
|
|
147
|
+
throw new Error(`Authentication failed for "${model.provider}". ` +
|
|
148
|
+
`Credentials may have expired or network is unavailable. ` +
|
|
149
|
+
`Run '/login ${model.provider}' to re-authenticate.`);
|
|
150
|
+
}
|
|
151
|
+
throw new Error(`No API key found for ${model.provider}.\n\n` +
|
|
152
|
+
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "providers.md")}`);
|
|
153
|
+
}
|
|
135
154
|
/**
|
|
136
155
|
* Install tool hooks once on the Agent instance.
|
|
137
156
|
*
|
|
@@ -493,15 +512,19 @@ export class AgentSession {
|
|
|
493
512
|
return this.agent.state.tools.map((t) => t.name);
|
|
494
513
|
}
|
|
495
514
|
/**
|
|
496
|
-
* Get all configured tools with name, description, and
|
|
515
|
+
* Get all configured tools with name, description, parameter schema, and source metadata.
|
|
497
516
|
*/
|
|
498
517
|
getAllTools() {
|
|
499
|
-
return Array.from(this.
|
|
500
|
-
name:
|
|
501
|
-
description:
|
|
502
|
-
parameters:
|
|
518
|
+
return Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({
|
|
519
|
+
name: definition.name,
|
|
520
|
+
description: definition.description,
|
|
521
|
+
parameters: definition.parameters,
|
|
522
|
+
sourceInfo,
|
|
503
523
|
}));
|
|
504
524
|
}
|
|
525
|
+
getToolDefinition(name) {
|
|
526
|
+
return this._toolDefinitions.get(name)?.definition;
|
|
527
|
+
}
|
|
505
528
|
/**
|
|
506
529
|
* Set active tools by name.
|
|
507
530
|
* Only tools in the registry can be enabled. Unknown tool names are ignored.
|
|
@@ -680,9 +703,7 @@ export class AgentSession {
|
|
|
680
703
|
`Use /login or set an API key environment variable. See ${join(getDocsPath(), "providers.md")}\n\n` +
|
|
681
704
|
"Then use /model to select a model.");
|
|
682
705
|
}
|
|
683
|
-
|
|
684
|
-
const apiKey = await this._modelRegistry.getApiKey(this.model);
|
|
685
|
-
if (!apiKey) {
|
|
706
|
+
if (!this._modelRegistry.hasConfiguredAuth(this.model)) {
|
|
686
707
|
const isOAuth = this._modelRegistry.isUsingOAuth(this.model);
|
|
687
708
|
if (isOAuth) {
|
|
688
709
|
throw new Error(`Authentication failed for "${this.model.provider}". ` +
|
|
@@ -1059,12 +1080,11 @@ export class AgentSession {
|
|
|
1059
1080
|
}
|
|
1060
1081
|
/**
|
|
1061
1082
|
* Set model directly.
|
|
1062
|
-
* Validates
|
|
1063
|
-
* @throws Error if no
|
|
1083
|
+
* Validates that auth is configured, saves to session and settings.
|
|
1084
|
+
* @throws Error if no auth is configured for the model
|
|
1064
1085
|
*/
|
|
1065
1086
|
async setModel(model) {
|
|
1066
|
-
|
|
1067
|
-
if (!apiKey) {
|
|
1087
|
+
if (!this._modelRegistry.hasConfiguredAuth(model)) {
|
|
1068
1088
|
throw new Error(`No API key for ${model.provider}/${model.id}`);
|
|
1069
1089
|
}
|
|
1070
1090
|
const previousModel = this.model;
|
|
@@ -1088,27 +1108,11 @@ export class AgentSession {
|
|
|
1088
1108
|
}
|
|
1089
1109
|
return this._cycleAvailableModel(direction);
|
|
1090
1110
|
}
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
const result = [];
|
|
1094
|
-
for (const scoped of this._scopedModels) {
|
|
1095
|
-
const provider = scoped.model.provider;
|
|
1096
|
-
let apiKey;
|
|
1097
|
-
if (apiKeysByProvider.has(provider)) {
|
|
1098
|
-
apiKey = apiKeysByProvider.get(provider);
|
|
1099
|
-
}
|
|
1100
|
-
else {
|
|
1101
|
-
apiKey = await this._modelRegistry.getApiKeyForProvider(provider);
|
|
1102
|
-
apiKeysByProvider.set(provider, apiKey);
|
|
1103
|
-
}
|
|
1104
|
-
if (apiKey) {
|
|
1105
|
-
result.push(scoped);
|
|
1106
|
-
}
|
|
1107
|
-
}
|
|
1108
|
-
return result;
|
|
1111
|
+
_getScopedModelsWithAuth() {
|
|
1112
|
+
return this._scopedModels.filter((scoped) => this._modelRegistry.hasConfiguredAuth(scoped.model));
|
|
1109
1113
|
}
|
|
1110
1114
|
async _cycleScopedModel(direction) {
|
|
1111
|
-
const scopedModels =
|
|
1115
|
+
const scopedModels = this._getScopedModelsWithAuth();
|
|
1112
1116
|
if (scopedModels.length <= 1)
|
|
1113
1117
|
return undefined;
|
|
1114
1118
|
const currentModel = this.model;
|
|
@@ -1142,10 +1146,6 @@ export class AgentSession {
|
|
|
1142
1146
|
const len = availableModels.length;
|
|
1143
1147
|
const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
|
|
1144
1148
|
const nextModel = availableModels[nextIndex];
|
|
1145
|
-
const apiKey = await this._modelRegistry.getApiKey(nextModel);
|
|
1146
|
-
if (!apiKey) {
|
|
1147
|
-
throw new Error(`No API key for ${nextModel.provider}/${nextModel.id}`);
|
|
1148
|
-
}
|
|
1149
1149
|
const thinkingLevel = this._getThinkingLevelForModelSwitch();
|
|
1150
1150
|
this.agent.setModel(nextModel);
|
|
1151
1151
|
this.sessionManager.appendModelChange(nextModel.provider, nextModel.id);
|
|
@@ -1270,14 +1270,12 @@ export class AgentSession {
|
|
|
1270
1270
|
this._disconnectFromAgent();
|
|
1271
1271
|
await this.abort();
|
|
1272
1272
|
this._compactionAbortController = new AbortController();
|
|
1273
|
+
this._emit({ type: "compaction_start", reason: "manual" });
|
|
1273
1274
|
try {
|
|
1274
1275
|
if (!this.model) {
|
|
1275
1276
|
throw new Error("No model selected");
|
|
1276
1277
|
}
|
|
1277
|
-
const apiKey = await this.
|
|
1278
|
-
if (!apiKey) {
|
|
1279
|
-
throw new Error(`No API key for ${this.model.provider}`);
|
|
1280
|
-
}
|
|
1278
|
+
const { apiKey, headers } = await this._getRequiredRequestAuth(this.model);
|
|
1281
1279
|
const pathEntries = this.sessionManager.getBranch();
|
|
1282
1280
|
const settings = this.settingsManager.getCompactionSettings();
|
|
1283
1281
|
const preparation = prepareCompaction(pathEntries, settings);
|
|
@@ -1320,7 +1318,7 @@ export class AgentSession {
|
|
|
1320
1318
|
}
|
|
1321
1319
|
else {
|
|
1322
1320
|
// Generate compaction result
|
|
1323
|
-
const result = await compact(preparation, this.model, apiKey, customInstructions, this._compactionAbortController.signal);
|
|
1321
|
+
const result = await compact(preparation, this.model, apiKey, headers, customInstructions, this._compactionAbortController.signal);
|
|
1324
1322
|
summary = result.summary;
|
|
1325
1323
|
firstKeptEntryId = result.firstKeptEntryId;
|
|
1326
1324
|
tokensBefore = result.tokensBefore;
|
|
@@ -1342,12 +1340,33 @@ export class AgentSession {
|
|
|
1342
1340
|
fromExtension,
|
|
1343
1341
|
});
|
|
1344
1342
|
}
|
|
1345
|
-
|
|
1343
|
+
const compactionResult = {
|
|
1346
1344
|
summary,
|
|
1347
1345
|
firstKeptEntryId,
|
|
1348
1346
|
tokensBefore,
|
|
1349
1347
|
details,
|
|
1350
1348
|
};
|
|
1349
|
+
this._emit({
|
|
1350
|
+
type: "compaction_end",
|
|
1351
|
+
reason: "manual",
|
|
1352
|
+
result: compactionResult,
|
|
1353
|
+
aborted: false,
|
|
1354
|
+
willRetry: false,
|
|
1355
|
+
});
|
|
1356
|
+
return compactionResult;
|
|
1357
|
+
}
|
|
1358
|
+
catch (error) {
|
|
1359
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1360
|
+
const aborted = message === "Compaction cancelled" || (error instanceof Error && error.name === "AbortError");
|
|
1361
|
+
this._emit({
|
|
1362
|
+
type: "compaction_end",
|
|
1363
|
+
reason: "manual",
|
|
1364
|
+
result: undefined,
|
|
1365
|
+
aborted,
|
|
1366
|
+
willRetry: false,
|
|
1367
|
+
errorMessage: aborted ? undefined : `Compaction failed: ${message}`,
|
|
1368
|
+
});
|
|
1369
|
+
throw error;
|
|
1351
1370
|
}
|
|
1352
1371
|
finally {
|
|
1353
1372
|
this._compactionAbortController = undefined;
|
|
@@ -1403,7 +1422,8 @@ export class AgentSession {
|
|
|
1403
1422
|
if (sameModel && isContextOverflow(assistantMessage, contextWindow)) {
|
|
1404
1423
|
if (this._overflowRecoveryAttempted) {
|
|
1405
1424
|
this._emit({
|
|
1406
|
-
type: "
|
|
1425
|
+
type: "compaction_end",
|
|
1426
|
+
reason: "overflow",
|
|
1407
1427
|
result: undefined,
|
|
1408
1428
|
aborted: false,
|
|
1409
1429
|
willRetry: false,
|
|
@@ -1453,22 +1473,41 @@ export class AgentSession {
|
|
|
1453
1473
|
*/
|
|
1454
1474
|
async _runAutoCompaction(reason, willRetry) {
|
|
1455
1475
|
const settings = this.settingsManager.getCompactionSettings();
|
|
1456
|
-
this._emit({ type: "
|
|
1476
|
+
this._emit({ type: "compaction_start", reason });
|
|
1457
1477
|
this._autoCompactionAbortController = new AbortController();
|
|
1458
1478
|
try {
|
|
1459
1479
|
if (!this.model) {
|
|
1460
|
-
this._emit({
|
|
1480
|
+
this._emit({
|
|
1481
|
+
type: "compaction_end",
|
|
1482
|
+
reason,
|
|
1483
|
+
result: undefined,
|
|
1484
|
+
aborted: false,
|
|
1485
|
+
willRetry: false,
|
|
1486
|
+
});
|
|
1461
1487
|
return;
|
|
1462
1488
|
}
|
|
1463
|
-
const
|
|
1464
|
-
if (!apiKey) {
|
|
1465
|
-
this._emit({
|
|
1489
|
+
const authResult = await this._modelRegistry.getApiKeyAndHeaders(this.model);
|
|
1490
|
+
if (!authResult.ok || !authResult.apiKey) {
|
|
1491
|
+
this._emit({
|
|
1492
|
+
type: "compaction_end",
|
|
1493
|
+
reason,
|
|
1494
|
+
result: undefined,
|
|
1495
|
+
aborted: false,
|
|
1496
|
+
willRetry: false,
|
|
1497
|
+
});
|
|
1466
1498
|
return;
|
|
1467
1499
|
}
|
|
1500
|
+
const { apiKey, headers } = authResult;
|
|
1468
1501
|
const pathEntries = this.sessionManager.getBranch();
|
|
1469
1502
|
const preparation = prepareCompaction(pathEntries, settings);
|
|
1470
1503
|
if (!preparation) {
|
|
1471
|
-
this._emit({
|
|
1504
|
+
this._emit({
|
|
1505
|
+
type: "compaction_end",
|
|
1506
|
+
reason,
|
|
1507
|
+
result: undefined,
|
|
1508
|
+
aborted: false,
|
|
1509
|
+
willRetry: false,
|
|
1510
|
+
});
|
|
1472
1511
|
return;
|
|
1473
1512
|
}
|
|
1474
1513
|
let extensionCompaction;
|
|
@@ -1482,7 +1521,13 @@ export class AgentSession {
|
|
|
1482
1521
|
signal: this._autoCompactionAbortController.signal,
|
|
1483
1522
|
}));
|
|
1484
1523
|
if (extensionResult?.cancel) {
|
|
1485
|
-
this._emit({
|
|
1524
|
+
this._emit({
|
|
1525
|
+
type: "compaction_end",
|
|
1526
|
+
reason,
|
|
1527
|
+
result: undefined,
|
|
1528
|
+
aborted: true,
|
|
1529
|
+
willRetry: false,
|
|
1530
|
+
});
|
|
1486
1531
|
return;
|
|
1487
1532
|
}
|
|
1488
1533
|
if (extensionResult?.compaction) {
|
|
@@ -1503,14 +1548,20 @@ export class AgentSession {
|
|
|
1503
1548
|
}
|
|
1504
1549
|
else {
|
|
1505
1550
|
// Generate compaction result
|
|
1506
|
-
const compactResult = await compact(preparation, this.model, apiKey, undefined, this._autoCompactionAbortController.signal);
|
|
1551
|
+
const compactResult = await compact(preparation, this.model, apiKey, headers, undefined, this._autoCompactionAbortController.signal);
|
|
1507
1552
|
summary = compactResult.summary;
|
|
1508
1553
|
firstKeptEntryId = compactResult.firstKeptEntryId;
|
|
1509
1554
|
tokensBefore = compactResult.tokensBefore;
|
|
1510
1555
|
details = compactResult.details;
|
|
1511
1556
|
}
|
|
1512
1557
|
if (this._autoCompactionAbortController.signal.aborted) {
|
|
1513
|
-
this._emit({
|
|
1558
|
+
this._emit({
|
|
1559
|
+
type: "compaction_end",
|
|
1560
|
+
reason,
|
|
1561
|
+
result: undefined,
|
|
1562
|
+
aborted: true,
|
|
1563
|
+
willRetry: false,
|
|
1564
|
+
});
|
|
1514
1565
|
return;
|
|
1515
1566
|
}
|
|
1516
1567
|
this.sessionManager.appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromExtension);
|
|
@@ -1532,7 +1583,7 @@ export class AgentSession {
|
|
|
1532
1583
|
tokensBefore,
|
|
1533
1584
|
details,
|
|
1534
1585
|
};
|
|
1535
|
-
this._emit({ type: "
|
|
1586
|
+
this._emit({ type: "compaction_end", reason, result, aborted: false, willRetry });
|
|
1536
1587
|
if (willRetry) {
|
|
1537
1588
|
const messages = this.agent.state.messages;
|
|
1538
1589
|
const lastMsg = messages[messages.length - 1];
|
|
@@ -1554,7 +1605,8 @@ export class AgentSession {
|
|
|
1554
1605
|
catch (error) {
|
|
1555
1606
|
const errorMessage = error instanceof Error ? error.message : "compaction failed";
|
|
1556
1607
|
this._emit({
|
|
1557
|
-
type: "
|
|
1608
|
+
type: "compaction_end",
|
|
1609
|
+
reason,
|
|
1558
1610
|
result: undefined,
|
|
1559
1611
|
aborted: false,
|
|
1560
1612
|
willRetry: false,
|
|
@@ -1656,36 +1708,24 @@ export class AgentSession {
|
|
|
1656
1708
|
this.agent.setModel(refreshedModel);
|
|
1657
1709
|
}
|
|
1658
1710
|
_bindExtensionCore(runner) {
|
|
1659
|
-
const normalizeLocation = (source) => {
|
|
1660
|
-
if (source === "user" || source === "project" || source === "path") {
|
|
1661
|
-
return source;
|
|
1662
|
-
}
|
|
1663
|
-
return undefined;
|
|
1664
|
-
};
|
|
1665
|
-
const reservedBuiltins = new Set(BUILTIN_SLASH_COMMANDS.map((command) => command.name));
|
|
1666
1711
|
const getCommands = () => {
|
|
1667
|
-
const extensionCommands = runner
|
|
1668
|
-
.
|
|
1669
|
-
.filter(({ command }) => !reservedBuiltins.has(command.name))
|
|
1670
|
-
.map(({ command, extensionPath }) => ({
|
|
1671
|
-
name: command.name,
|
|
1712
|
+
const extensionCommands = runner.getRegisteredCommands().map((command) => ({
|
|
1713
|
+
name: command.invocationName,
|
|
1672
1714
|
description: command.description,
|
|
1673
1715
|
source: "extension",
|
|
1674
|
-
|
|
1716
|
+
sourceInfo: command.sourceInfo,
|
|
1675
1717
|
}));
|
|
1676
1718
|
const templates = this.promptTemplates.map((template) => ({
|
|
1677
1719
|
name: template.name,
|
|
1678
1720
|
description: template.description,
|
|
1679
1721
|
source: "prompt",
|
|
1680
|
-
|
|
1681
|
-
path: template.filePath,
|
|
1722
|
+
sourceInfo: template.sourceInfo,
|
|
1682
1723
|
}));
|
|
1683
1724
|
const skills = this._resourceLoader.getSkills().skills.map((skill) => ({
|
|
1684
1725
|
name: `skill:${skill.name}`,
|
|
1685
1726
|
description: skill.description,
|
|
1686
1727
|
source: "skill",
|
|
1687
|
-
|
|
1688
|
-
path: skill.filePath,
|
|
1728
|
+
sourceInfo: skill.sourceInfo,
|
|
1689
1729
|
}));
|
|
1690
1730
|
return [...extensionCommands, ...templates, ...skills];
|
|
1691
1731
|
};
|
|
@@ -1726,8 +1766,7 @@ export class AgentSession {
|
|
|
1726
1766
|
refreshTools: () => this._refreshToolRegistry(),
|
|
1727
1767
|
getCommands,
|
|
1728
1768
|
setModel: async (model) => {
|
|
1729
|
-
|
|
1730
|
-
if (!key)
|
|
1769
|
+
if (!this.modelRegistry.hasConfiguredAuth(model))
|
|
1731
1770
|
return false;
|
|
1732
1771
|
await this.setModel(model);
|
|
1733
1772
|
return true;
|
|
@@ -1773,24 +1812,44 @@ export class AgentSession {
|
|
|
1773
1812
|
const registeredTools = this._extensionRunner?.getAllRegisteredTools() ?? [];
|
|
1774
1813
|
const allCustomTools = [
|
|
1775
1814
|
...registeredTools,
|
|
1776
|
-
...this._customTools.map((
|
|
1815
|
+
...this._customTools.map((definition) => ({
|
|
1816
|
+
definition,
|
|
1817
|
+
sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" }),
|
|
1818
|
+
})),
|
|
1777
1819
|
];
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1820
|
+
const definitionRegistry = new Map(Array.from(this._baseToolDefinitions.entries()).map(([name, definition]) => [
|
|
1821
|
+
name,
|
|
1822
|
+
{
|
|
1823
|
+
definition,
|
|
1824
|
+
sourceInfo: createSyntheticSourceInfo(`<builtin:${name}>`, { source: "builtin" }),
|
|
1825
|
+
},
|
|
1826
|
+
]));
|
|
1827
|
+
for (const tool of allCustomTools) {
|
|
1828
|
+
definitionRegistry.set(tool.definition.name, {
|
|
1829
|
+
definition: tool.definition,
|
|
1830
|
+
sourceInfo: tool.sourceInfo,
|
|
1831
|
+
});
|
|
1832
|
+
}
|
|
1833
|
+
this._toolDefinitions = definitionRegistry;
|
|
1834
|
+
this._toolPromptSnippets = new Map(Array.from(definitionRegistry.values())
|
|
1835
|
+
.map(({ definition }) => {
|
|
1836
|
+
const snippet = this._normalizePromptSnippet(definition.promptSnippet);
|
|
1837
|
+
return snippet ? [definition.name, snippet] : undefined;
|
|
1782
1838
|
})
|
|
1783
1839
|
.filter((entry) => entry !== undefined));
|
|
1784
|
-
this._toolPromptGuidelines = new Map(
|
|
1785
|
-
.map((
|
|
1786
|
-
const guidelines = this._normalizePromptGuidelines(
|
|
1787
|
-
return guidelines.length > 0 ? [
|
|
1840
|
+
this._toolPromptGuidelines = new Map(Array.from(definitionRegistry.values())
|
|
1841
|
+
.map(({ definition }) => {
|
|
1842
|
+
const guidelines = this._normalizePromptGuidelines(definition.promptGuidelines);
|
|
1843
|
+
return guidelines.length > 0 ? [definition.name, guidelines] : undefined;
|
|
1788
1844
|
})
|
|
1789
1845
|
.filter((entry) => entry !== undefined));
|
|
1790
1846
|
const wrappedExtensionTools = this._extensionRunner
|
|
1791
1847
|
? wrapRegisteredTools(allCustomTools, this._extensionRunner)
|
|
1792
1848
|
: [];
|
|
1793
|
-
const toolRegistry = new Map(this.
|
|
1849
|
+
const toolRegistry = new Map(Array.from(this._baseToolDefinitions.values()).map((definition) => [
|
|
1850
|
+
definition.name,
|
|
1851
|
+
wrapToolDefinition(definition),
|
|
1852
|
+
]));
|
|
1794
1853
|
for (const tool of wrappedExtensionTools) {
|
|
1795
1854
|
toolRegistry.set(tool.name, tool);
|
|
1796
1855
|
}
|
|
@@ -1815,13 +1874,16 @@ export class AgentSession {
|
|
|
1815
1874
|
_buildRuntime(options) {
|
|
1816
1875
|
const autoResizeImages = this.settingsManager.getImageAutoResize();
|
|
1817
1876
|
const shellCommandPrefix = this.settingsManager.getShellCommandPrefix();
|
|
1818
|
-
const
|
|
1819
|
-
? this._baseToolsOverride
|
|
1820
|
-
|
|
1877
|
+
const baseToolDefinitions = this._baseToolsOverride
|
|
1878
|
+
? Object.fromEntries(Object.entries(this._baseToolsOverride).map(([name, tool]) => [
|
|
1879
|
+
name,
|
|
1880
|
+
createToolDefinitionFromAgentTool(tool),
|
|
1881
|
+
]))
|
|
1882
|
+
: createAllToolDefinitions(this._cwd, {
|
|
1821
1883
|
read: { autoResizeImages },
|
|
1822
1884
|
bash: { commandPrefix: shellCommandPrefix },
|
|
1823
1885
|
});
|
|
1824
|
-
this.
|
|
1886
|
+
this._baseToolDefinitions = new Map(Object.entries(baseToolDefinitions).map(([name, tool]) => [name, tool]));
|
|
1825
1887
|
const extensionsResult = this._resourceLoader.getExtensions();
|
|
1826
1888
|
if (options.flagValues) {
|
|
1827
1889
|
for (const [name, value] of options.flagValues) {
|
|
@@ -2285,14 +2347,12 @@ export class AgentSession {
|
|
|
2285
2347
|
let summaryDetails;
|
|
2286
2348
|
if (options.summarize && entriesToSummarize.length > 0 && !extensionSummary) {
|
|
2287
2349
|
const model = this.model;
|
|
2288
|
-
const apiKey = await this.
|
|
2289
|
-
if (!apiKey) {
|
|
2290
|
-
throw new Error(`No API key for ${model.provider}`);
|
|
2291
|
-
}
|
|
2350
|
+
const { apiKey, headers } = await this._getRequiredRequestAuth(model);
|
|
2292
2351
|
const branchSummarySettings = this.settingsManager.getBranchSummarySettings();
|
|
2293
2352
|
const result = await generateBranchSummary(entriesToSummarize, {
|
|
2294
2353
|
model,
|
|
2295
2354
|
apiKey,
|
|
2355
|
+
headers,
|
|
2296
2356
|
signal: this._branchSummaryAbortController.signal,
|
|
2297
2357
|
customInstructions,
|
|
2298
2358
|
replaceInstructions,
|
|
@@ -2449,6 +2509,7 @@ export class AgentSession {
|
|
|
2449
2509
|
total: totalInput + totalOutput + totalCacheRead + totalCacheWrite,
|
|
2450
2510
|
},
|
|
2451
2511
|
cost: totalCost,
|
|
2512
|
+
contextUsage: this.getContextUsage(),
|
|
2452
2513
|
};
|
|
2453
2514
|
}
|
|
2454
2515
|
getContextUsage() {
|
|
@@ -2500,13 +2561,10 @@ export class AgentSession {
|
|
|
2500
2561
|
async exportToHtml(outputPath) {
|
|
2501
2562
|
const themeName = this.settingsManager.getTheme();
|
|
2502
2563
|
// Create tool renderer if we have an extension runner (for custom tool HTML rendering)
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
theme,
|
|
2508
|
-
});
|
|
2509
|
-
}
|
|
2564
|
+
const toolRenderer = createToolHtmlRenderer({
|
|
2565
|
+
getToolDefinition: (name) => this.getToolDefinition(name),
|
|
2566
|
+
theme,
|
|
2567
|
+
});
|
|
2510
2568
|
return await exportSessionToHtml(this.sessionManager, this.state, {
|
|
2511
2569
|
outputPath,
|
|
2512
2570
|
themeName,
|