@bastani/atomic 0.8.27 → 0.8.28-alpha.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 +75 -0
- package/README.md +120 -118
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +2 -2
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +22 -0
- package/dist/builtin/workflows/README.md +11 -9
- package/dist/builtin/workflows/builtin/open-claude-design.ts +150 -13
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/authoring.d.ts +5 -2
- package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +3 -1
- package/dist/builtin/workflows/src/extension/hil-answer-notifications.ts +17 -25
- package/dist/builtin/workflows/src/extension/index.ts +133 -18
- package/dist/builtin/workflows/src/extension/render-result.ts +22 -2
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +3 -3
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +210 -16
- package/dist/builtin/workflows/src/sdk-surface.ts +1 -1
- package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +42 -5
- package/dist/builtin/workflows/src/shared/store-types.ts +8 -2
- package/dist/builtin/workflows/src/shared/store.ts +51 -0
- package/dist/builtin/workflows/src/shared/types.ts +14 -4
- package/dist/builtin/workflows/src/tui/chat-surface.ts +32 -33
- package/dist/builtin/workflows/src/tui/graph-view.ts +4 -1
- package/dist/builtin/workflows/src/tui/prompt-card.ts +6 -0
- package/dist/builtin/workflows/src/tui/run-detail.ts +11 -4
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +11 -1
- package/dist/builtin/workflows/src/tui/status-list.ts +32 -2
- package/dist/cli/args.d.ts +4 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +35 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/project-trust.d.ts +10 -0
- package/dist/cli/project-trust.d.ts.map +1 -0
- package/dist/cli/project-trust.js +36 -0
- package/dist/cli/project-trust.js.map +1 -0
- package/dist/cli/startup-ui.d.ts +7 -0
- package/dist/cli/startup-ui.d.ts.map +1 -0
- package/dist/cli/startup-ui.js +57 -0
- package/dist/cli/startup-ui.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -3
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +3 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +2 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +9 -5
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +205 -51
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts +10 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +26 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +4 -3
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +5 -3
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +16 -10
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -84
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +20 -502
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-compaction.d.ts.map +1 -1
- package/dist/core/compaction/context-compaction.js +39 -82
- package/dist/core/compaction/context-compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts +1 -1
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +1 -1
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/experimental.d.ts +2 -0
- package/dist/core/experimental.d.ts.map +1 -0
- package/dist/core/experimental.js +5 -0
- package/dist/core/experimental.js.map +1 -0
- package/dist/core/export-html/template.js +19 -6
- package/dist/core/extensions/index.d.ts +1 -1
- 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 +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +6 -4
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +11 -4
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +53 -3
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +44 -12
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +2 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +27 -1
- package/dist/core/footer-data-provider.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/messages.d.ts +1 -11
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +10 -25
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +64 -7
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-guard.d.ts +1 -0
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js +52 -22
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +20 -8
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/project-trust.d.ts +15 -0
- package/dist/core/project-trust.d.ts.map +1 -0
- package/dist/core/project-trust.js +58 -0
- package/dist/core/project-trust.js.map +1 -0
- package/dist/core/prompt-templates.d.ts +5 -4
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +30 -29
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-attribution.d.ts +4 -0
- package/dist/core/provider-attribution.d.ts.map +1 -0
- package/dist/core/provider-attribution.js +73 -0
- package/dist/core/provider-attribution.js.map +1 -0
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +3 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +9 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +134 -11
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +12 -2
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +108 -18
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +12 -42
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +11 -15
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +111 -111
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +15 -5
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +69 -14
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +0 -3
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +2 -1
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +7 -10
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/oversized-tool-result.d.ts +53 -0
- package/dist/core/tools/oversized-tool-result.d.ts.map +1 -0
- package/dist/core/tools/oversized-tool-result.js +206 -0
- package/dist/core/tools/oversized-tool-result.js.map +1 -0
- package/dist/core/tools/read.d.ts +12 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +99 -34
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +6 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +17 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +6 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +2 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/tool-limits.d.ts +25 -0
- package/dist/core/tools/tool-limits.d.ts.map +1 -0
- package/dist/core/tools/tool-limits.js +25 -0
- package/dist/core/tools/tool-limits.js.map +1 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts +31 -0
- package/dist/core/trust-manager.d.ts.map +1 -0
- package/dist/core/trust-manager.js +196 -0
- package/dist/core/trust-manager.js.map +1 -0
- package/dist/index.d.ts +12 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +142 -30
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +3 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +325 -7
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +2 -2
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -5
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +5 -9
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +0 -3
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +6 -0
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -1
- package/dist/modes/interactive/components/index.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 +9 -16
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +20 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +22 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts +23 -0
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -0
- package/dist/modes/interactive/components/trust-selector.js +85 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -0
- 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/interactive-mode.d.ts +9 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +134 -36
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +10 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +1 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +4 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +52 -8
- 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 +24 -5
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts +6 -2
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +104 -10
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/changelog.d.ts +1 -0
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +72 -0
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/deprecation.d.ts +4 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/deprecation.js +13 -0
- package/dist/utils/deprecation.js.map +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +54 -22
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +7 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/open-browser.d.ts +9 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +22 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/docs/compaction.md +210 -181
- package/docs/containerization.md +111 -0
- package/docs/custom-provider.md +9 -9
- package/docs/development.md +1 -1
- package/docs/docs.json +2 -0
- package/docs/extensions.md +71 -24
- package/docs/index.md +2 -0
- package/docs/json.md +3 -4
- package/docs/models.md +10 -10
- package/docs/packages.md +1 -1
- package/docs/prompt-templates.md +9 -2
- package/docs/providers.md +18 -5
- package/docs/quickstart.md +1 -0
- package/docs/rpc.md +3 -2
- package/docs/sdk.md +5 -0
- package/docs/security.md +56 -0
- package/docs/session-format.md +14 -23
- package/docs/sessions.md +11 -1
- package/docs/settings.md +23 -9
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +44 -2
- package/docs/themes.md +1 -1
- package/docs/tmux.md +4 -2
- package/docs/tui.md +14 -5
- package/docs/usage.md +17 -3
- package/docs/workflows.md +11 -9
- package/examples/README.md +1 -1
- package/examples/extensions/README.md +9 -6
- package/examples/extensions/bash-spawn-hook.ts +1 -1
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/claude-rules.ts +1 -1
- package/examples/extensions/commands.ts +1 -1
- package/examples/extensions/custom-compaction.ts +43 -106
- package/examples/extensions/custom-header.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +4 -4
- package/examples/extensions/custom-provider-anthropic/package.json +6 -6
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +55 -4
- package/examples/extensions/custom-provider-gitlab-duo/package.json +3 -3
- package/examples/extensions/doom-overlay/README.md +1 -1
- package/examples/extensions/doom-overlay/index.ts +2 -2
- package/examples/extensions/git-merge-and-resolve.ts +115 -0
- package/examples/extensions/gondolin/index.ts +523 -0
- package/examples/extensions/gondolin/package-lock.json +185 -0
- package/examples/extensions/gondolin/package.json +19 -0
- package/examples/extensions/handoff.ts +7 -45
- package/examples/extensions/hidden-thinking-label.ts +1 -1
- package/examples/extensions/inline-bash.ts +2 -2
- package/examples/extensions/input-transform-streaming.ts +39 -0
- package/examples/extensions/input-transform.ts +3 -3
- package/examples/extensions/interactive-shell.ts +2 -2
- package/examples/extensions/mac-system-theme.ts +2 -2
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/modal-editor.ts +1 -1
- package/examples/extensions/model-status.ts +1 -1
- package/examples/extensions/overlay-qa-tests.ts +198 -179
- package/examples/extensions/overlay-test.ts +1 -1
- package/examples/extensions/pirate.ts +1 -1
- package/examples/extensions/preset.ts +14 -12
- package/examples/extensions/project-trust.ts +64 -0
- package/examples/extensions/prompt-customizer.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/question.ts +1 -1
- package/examples/extensions/questionnaire.ts +1 -1
- package/examples/extensions/rainbow-editor.ts +1 -1
- package/examples/extensions/sandbox/index.ts +16 -14
- package/examples/extensions/sandbox/package-lock.json +90 -90
- package/examples/extensions/sandbox/package.json +17 -17
- package/examples/extensions/snake.ts +1 -1
- package/examples/extensions/space-invaders.ts +1 -1
- package/examples/extensions/ssh.ts +2 -2
- package/examples/extensions/subagent/README.md +13 -13
- package/examples/extensions/subagent/agents.ts +4 -2
- package/examples/extensions/subagent/index.ts +6 -6
- package/examples/extensions/summarize.ts +1 -1
- package/examples/extensions/tic-tac-toe.ts +1 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/todo.ts +1 -1
- package/examples/extensions/tool-override.ts +1 -1
- package/examples/extensions/tools.ts +6 -1
- package/examples/extensions/trigger-compact.ts +5 -4
- package/examples/extensions/with-deps/package-lock.json +4 -4
- package/examples/extensions/with-deps/package.json +7 -7
- package/examples/extensions/working-indicator.ts +4 -4
- package/examples/extensions/working-message-test.ts +1 -1
- package/examples/sdk/01-minimal.ts +1 -1
- package/examples/sdk/03-custom-prompt.ts +1 -1
- package/examples/sdk/04-skills.ts +1 -1
- package/examples/sdk/06-extensions.ts +2 -2
- package/examples/sdk/08-prompt-templates.ts +1 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +2 -2
- package/examples/sdk/README.md +2 -2
- package/package.json +8 -8
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +0 -43
- package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
6
|
import * as os from "node:os";
|
|
7
7
|
import * as path from "node:path";
|
|
8
|
+
import chalk from "chalk";
|
|
8
9
|
import { getProviders, } from "@earendil-works/pi-ai";
|
|
9
10
|
import { CombinedAutocompleteProvider, Container, fuzzyFilter, getCapabilities, hyperlink, Loader, Markdown, matchesKey, ProcessTerminal, Spacer, setKeybindings, Text, TruncatedText, TUI, visibleWidth, } from "@earendil-works/pi-tui";
|
|
10
11
|
import { spawn, spawnSync } from "child_process";
|
|
@@ -14,7 +15,6 @@ import { pickWhimsicalWorkingMessage } from "./whimsical-messages.js";
|
|
|
14
15
|
import { SessionImportFileNotFoundError, } from "../../core/agent-session-runtime.js";
|
|
15
16
|
import { FooterDataProvider, } from "../../core/footer-data-provider.js";
|
|
16
17
|
import { KeybindingsManager, } from "../../core/keybindings.js";
|
|
17
|
-
import { createCompactionSummaryMessage } from "../../core/messages.js";
|
|
18
18
|
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope, } from "../../core/model-resolver.js";
|
|
19
19
|
import { formatCodexFastModeModelLabel, hasSupportedCodexFastModeModel, shouldApplyCodexFastMode, } from "../../core/codex-fast-mode.js";
|
|
20
20
|
import { configureHttpDispatcher } from "../../core/http-dispatcher.js";
|
|
@@ -24,7 +24,7 @@ import { formatMissingSessionCwdPrompt, MissingSessionCwdError, } from "../../co
|
|
|
24
24
|
import { SessionManager, } from "../../core/session-manager.js";
|
|
25
25
|
import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
|
|
26
26
|
import { isInstallTelemetryEnabled } from "../../core/telemetry.js";
|
|
27
|
-
import { getChangelogPath, getEntriesForVersion, getNewEntries, parseChangelog, } from "../../utils/changelog.js";
|
|
27
|
+
import { getChangelogPath, getEntriesForVersion, getNewEntries, normalizeChangelogLinks, parseChangelog, } from "../../utils/changelog.js";
|
|
28
28
|
import { copyToClipboard } from "../../utils/clipboard.js";
|
|
29
29
|
import { combineQueuedMessagesForEditor, openExternalEditorForText, pasteClipboardImageToEditor, } from "./chat-input-actions.js";
|
|
30
30
|
import { parseGitUrl } from "../../utils/git.js";
|
|
@@ -41,7 +41,6 @@ import { BorderedLoader } from "./components/bordered-loader.js";
|
|
|
41
41
|
import { BranchSummaryMessageComponent } from "./components/branch-summary-message.js";
|
|
42
42
|
import { chatEntriesFromAgentMessages, renderChatMessageEntry, } from "./components/chat-message-renderer.js";
|
|
43
43
|
import { addChatTranscriptEntry } from "./components/chat-transcript.js";
|
|
44
|
-
import { CompactionSummaryMessageComponent } from "./components/compaction-summary-message.js";
|
|
45
44
|
import { ContextCompactionSummaryMessageComponent } from "./components/context-compaction-summary-message.js";
|
|
46
45
|
import { CountdownTimer } from "./components/countdown-timer.js";
|
|
47
46
|
import { CustomEditor } from "./components/custom-editor.js";
|
|
@@ -65,6 +64,8 @@ import { SettingsSelectorComponent } from "./components/settings-selector.js";
|
|
|
65
64
|
import { SkillInvocationMessageComponent } from "./components/skill-invocation-message.js";
|
|
66
65
|
import { ToolExecutionComponent } from "./components/tool-execution.js";
|
|
67
66
|
import { TreeSelectorComponent } from "./components/tree-selector.js";
|
|
67
|
+
import { TrustSelectorComponent } from "./components/trust-selector.js";
|
|
68
|
+
import { hasProjectConfigDir, ProjectTrustStore } from "../../core/trust-manager.js";
|
|
68
69
|
import { UserMessageComponent } from "./components/user-message.js";
|
|
69
70
|
import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
|
|
70
71
|
import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, initTheme, onThemeChange, setRegisteredThemes, setTheme, setThemeInstance, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
|
|
@@ -89,13 +90,6 @@ class ExpandableText extends Text {
|
|
|
89
90
|
this.setText(this.expanded ? this.getExpandedText() : this.getCollapsedText());
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
|
-
function isContextCompactionResult(result) {
|
|
93
|
-
return (typeof result === "object" &&
|
|
94
|
-
result !== null &&
|
|
95
|
-
"stats" in result &&
|
|
96
|
-
"deletedTargets" in result &&
|
|
97
|
-
"protectedEntryIds" in result);
|
|
98
|
-
}
|
|
99
93
|
const DEAD_TERMINAL_ERROR_CODES = new Set(["EIO", "EPIPE", "ENOTCONN"]);
|
|
100
94
|
function isDeadTerminalError(error) {
|
|
101
95
|
if (!error || typeof error !== "object" || !("code" in error)) {
|
|
@@ -115,6 +109,27 @@ function isUnknownModel(model) {
|
|
|
115
109
|
model.id === "unknown" &&
|
|
116
110
|
model.api === "unknown");
|
|
117
111
|
}
|
|
112
|
+
function quoteIfNeeded(value) {
|
|
113
|
+
if (value.length > 0 && !/[^a-zA-Z0-9_\-./~:@]/.test(value)) {
|
|
114
|
+
return value;
|
|
115
|
+
}
|
|
116
|
+
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
117
|
+
}
|
|
118
|
+
export function formatResumeCommand(sessionManager) {
|
|
119
|
+
if (!process.stdout.isTTY)
|
|
120
|
+
return undefined;
|
|
121
|
+
if (!sessionManager.isPersisted())
|
|
122
|
+
return undefined;
|
|
123
|
+
const sessionFile = sessionManager.getSessionFile();
|
|
124
|
+
if (!sessionFile || !fs.existsSync(sessionFile))
|
|
125
|
+
return undefined;
|
|
126
|
+
const args = [APP_NAME];
|
|
127
|
+
if (!sessionManager.usesDefaultSessionDir()) {
|
|
128
|
+
args.push("--session-dir", quoteIfNeeded(sessionManager.getSessionDir()));
|
|
129
|
+
}
|
|
130
|
+
args.push("--session", sessionManager.getSessionId());
|
|
131
|
+
return args.join(" ");
|
|
132
|
+
}
|
|
118
133
|
function hasDefaultModelProvider(providerId) {
|
|
119
134
|
return providerId in defaultModelPerProvider;
|
|
120
135
|
}
|
|
@@ -146,6 +161,7 @@ export class InteractiveMode {
|
|
|
146
161
|
constructor(runtimeHost, options = {}) {
|
|
147
162
|
this.autocompleteProviderWrappers = [];
|
|
148
163
|
this.isInitialized = false;
|
|
164
|
+
this.pendingUserInputs = [];
|
|
149
165
|
this.loadingAnimation = undefined;
|
|
150
166
|
this.workingMessage = undefined;
|
|
151
167
|
this.workingVisible = true;
|
|
@@ -209,6 +225,7 @@ export class InteractiveMode {
|
|
|
209
225
|
*/
|
|
210
226
|
this.isShuttingDown = false;
|
|
211
227
|
this.options = options;
|
|
228
|
+
this.autoTrustOnReloadCwd = options.autoTrustOnReloadCwd;
|
|
212
229
|
this.runtimeHost = runtimeHost;
|
|
213
230
|
this.runtimeHost.setBeforeSessionInvalidate(() => {
|
|
214
231
|
this.resetExtensionUI();
|
|
@@ -648,7 +665,7 @@ export class InteractiveMode {
|
|
|
648
665
|
if (currentEntries.length > 0) {
|
|
649
666
|
this.settingsManager.setLastChangelogVersion(VERSION);
|
|
650
667
|
this.reportInstallTelemetry(VERSION);
|
|
651
|
-
return currentEntries.map((e) => e.content).join("\n\n");
|
|
668
|
+
return currentEntries.map((e) => normalizeChangelogLinks(e.content, e)).join("\n\n");
|
|
652
669
|
}
|
|
653
670
|
return undefined;
|
|
654
671
|
}
|
|
@@ -1245,6 +1262,7 @@ export class InteractiveMode {
|
|
|
1245
1262
|
const uiContext = this.createExtensionUIContext();
|
|
1246
1263
|
await this.session.bindExtensions({
|
|
1247
1264
|
uiContext,
|
|
1265
|
+
mode: "tui",
|
|
1248
1266
|
commandContextActions: {
|
|
1249
1267
|
waitForIdle: () => this.session.agent.waitForIdle(),
|
|
1250
1268
|
newSession: async (options) => {
|
|
@@ -1381,12 +1399,14 @@ export class InteractiveMode {
|
|
|
1381
1399
|
// Create a context for shortcut handlers
|
|
1382
1400
|
const createContext = () => ({
|
|
1383
1401
|
ui: this.createExtensionUIContext(),
|
|
1402
|
+
mode: "tui",
|
|
1384
1403
|
hasUI: true,
|
|
1385
1404
|
cwd: this.sessionManager.getCwd(),
|
|
1386
1405
|
sessionManager: this.sessionManager,
|
|
1387
1406
|
modelRegistry: this.session.modelRegistry,
|
|
1388
1407
|
model: this.session.model,
|
|
1389
1408
|
isIdle: () => !this.session.isStreaming,
|
|
1409
|
+
isProjectTrusted: () => this.session.settingsManager.isProjectTrusted(),
|
|
1390
1410
|
signal: this.session.agent.signal,
|
|
1391
1411
|
abort: () => this.session.abort(),
|
|
1392
1412
|
hasPendingMessages: () => this.session.pendingMessageCount > 0,
|
|
@@ -1397,7 +1417,7 @@ export class InteractiveMode {
|
|
|
1397
1417
|
compact: (options) => {
|
|
1398
1418
|
void (async () => {
|
|
1399
1419
|
try {
|
|
1400
|
-
const result = await this.session.compact(
|
|
1420
|
+
const result = await this.session.compact();
|
|
1401
1421
|
options?.onComplete?.(result);
|
|
1402
1422
|
}
|
|
1403
1423
|
catch (error) {
|
|
@@ -1688,6 +1708,20 @@ export class InteractiveMode {
|
|
|
1688
1708
|
}
|
|
1689
1709
|
this.extensionTerminalInputUnsubscribers.clear();
|
|
1690
1710
|
}
|
|
1711
|
+
createProjectTrustContext(cwd) {
|
|
1712
|
+
const ui = this.createExtensionUIContext();
|
|
1713
|
+
return {
|
|
1714
|
+
cwd,
|
|
1715
|
+
mode: "tui",
|
|
1716
|
+
hasUI: true,
|
|
1717
|
+
ui: {
|
|
1718
|
+
select: ui.select,
|
|
1719
|
+
confirm: ui.confirm,
|
|
1720
|
+
input: ui.input,
|
|
1721
|
+
notify: ui.notify,
|
|
1722
|
+
},
|
|
1723
|
+
};
|
|
1724
|
+
}
|
|
1691
1725
|
/**
|
|
1692
1726
|
* Create the ExtensionUIContext for extensions.
|
|
1693
1727
|
*/
|
|
@@ -2242,6 +2276,11 @@ export class InteractiveMode {
|
|
|
2242
2276
|
this.editor.setText("");
|
|
2243
2277
|
return;
|
|
2244
2278
|
}
|
|
2279
|
+
if (text === "/trust") {
|
|
2280
|
+
this.showTrustSelector();
|
|
2281
|
+
this.editor.setText("");
|
|
2282
|
+
return;
|
|
2283
|
+
}
|
|
2245
2284
|
if (text === "/login") {
|
|
2246
2285
|
this.showOAuthSelector("login");
|
|
2247
2286
|
this.editor.setText("");
|
|
@@ -2343,6 +2382,9 @@ export class InteractiveMode {
|
|
|
2343
2382
|
if (this.onInputCallback) {
|
|
2344
2383
|
this.onInputCallback(text);
|
|
2345
2384
|
}
|
|
2385
|
+
else {
|
|
2386
|
+
this.pendingUserInputs.push(text);
|
|
2387
|
+
}
|
|
2346
2388
|
this.editor.addToHistory?.(text);
|
|
2347
2389
|
};
|
|
2348
2390
|
}
|
|
@@ -2595,12 +2637,7 @@ export class InteractiveMode {
|
|
|
2595
2637
|
else if (event.result) {
|
|
2596
2638
|
this.chatContainer.clear();
|
|
2597
2639
|
this.rebuildChatFromMessages();
|
|
2598
|
-
|
|
2599
|
-
this.addContextCompactionSummaryToChat(event.result);
|
|
2600
|
-
}
|
|
2601
|
-
else {
|
|
2602
|
-
this.addMessageToChat(createCompactionSummaryMessage(event.result.summary, event.result.tokensBefore, new Date().toISOString()));
|
|
2603
|
-
}
|
|
2640
|
+
this.addContextCompactionSummaryToChat(event.result);
|
|
2604
2641
|
this.footer.invalidate();
|
|
2605
2642
|
}
|
|
2606
2643
|
else if (event.errorMessage) {
|
|
@@ -2787,13 +2824,6 @@ export class InteractiveMode {
|
|
|
2787
2824
|
}
|
|
2788
2825
|
break;
|
|
2789
2826
|
}
|
|
2790
|
-
case "compactionSummary": {
|
|
2791
|
-
this.chatContainer.addChild(new Spacer(1));
|
|
2792
|
-
const component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());
|
|
2793
|
-
component.setExpanded(this.toolOutputExpanded);
|
|
2794
|
-
this.chatContainer.addChild(component);
|
|
2795
|
-
break;
|
|
2796
|
-
}
|
|
2797
2827
|
case "branchSummary": {
|
|
2798
2828
|
this.chatContainer.addChild(new Spacer(1));
|
|
2799
2829
|
const component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());
|
|
@@ -2838,10 +2868,8 @@ export class InteractiveMode {
|
|
|
2838
2868
|
// Tool results are rendered inline with tool calls, handled separately
|
|
2839
2869
|
break;
|
|
2840
2870
|
}
|
|
2841
|
-
default:
|
|
2842
|
-
|
|
2843
|
-
void _exhaustive;
|
|
2844
|
-
}
|
|
2871
|
+
default:
|
|
2872
|
+
break;
|
|
2845
2873
|
}
|
|
2846
2874
|
}
|
|
2847
2875
|
/**
|
|
@@ -2886,6 +2914,10 @@ export class InteractiveMode {
|
|
|
2886
2914
|
}
|
|
2887
2915
|
}
|
|
2888
2916
|
async getUserInput() {
|
|
2917
|
+
const queuedInput = this.pendingUserInputs.shift();
|
|
2918
|
+
if (queuedInput !== undefined) {
|
|
2919
|
+
return queuedInput;
|
|
2920
|
+
}
|
|
2889
2921
|
return new Promise((resolve) => {
|
|
2890
2922
|
this.onInputCallback = (text) => {
|
|
2891
2923
|
this.onInputCallback = undefined;
|
|
@@ -2915,16 +2947,28 @@ export class InteractiveMode {
|
|
|
2915
2947
|
// Only called when editor is empty (enforced by CustomEditor)
|
|
2916
2948
|
void this.shutdown();
|
|
2917
2949
|
}
|
|
2918
|
-
async shutdown() {
|
|
2950
|
+
async shutdown(options) {
|
|
2919
2951
|
if (this.isShuttingDown)
|
|
2920
2952
|
return;
|
|
2921
2953
|
this.isShuttingDown = true;
|
|
2922
2954
|
this.unregisterSignalHandlers();
|
|
2955
|
+
if (options?.fromSignal) {
|
|
2956
|
+
await this.runtimeHost.dispose();
|
|
2957
|
+
// Drain any in-flight Kitty key release events before stopping.
|
|
2958
|
+
// This prevents escape sequences from leaking to the parent shell over slow SSH.
|
|
2959
|
+
await this.ui.terminal.drainInput(1000);
|
|
2960
|
+
this.stop();
|
|
2961
|
+
process.exit(0);
|
|
2962
|
+
}
|
|
2923
2963
|
// Drain any in-flight Kitty key release events before stopping.
|
|
2924
2964
|
// This prevents escape sequences from leaking to the parent shell over slow SSH.
|
|
2925
2965
|
await this.ui.terminal.drainInput(1000);
|
|
2926
2966
|
this.stop();
|
|
2927
2967
|
await this.runtimeHost.dispose();
|
|
2968
|
+
const resumeCommand = formatResumeCommand(this.sessionManager);
|
|
2969
|
+
if (resumeCommand) {
|
|
2970
|
+
process.stdout.write(`${chalk.dim("To resume this session:")} ${resumeCommand}\n`);
|
|
2971
|
+
}
|
|
2928
2972
|
process.exit(0);
|
|
2929
2973
|
}
|
|
2930
2974
|
emergencyTerminalExit() {
|
|
@@ -2983,11 +3027,8 @@ export class InteractiveMode {
|
|
|
2983
3027
|
}
|
|
2984
3028
|
for (const signal of signals) {
|
|
2985
3029
|
const handler = () => {
|
|
2986
|
-
if (signal === "SIGHUP") {
|
|
2987
|
-
this.emergencyTerminalExit();
|
|
2988
|
-
}
|
|
2989
3030
|
killTrackedDetachedChildren();
|
|
2990
|
-
void this.shutdown();
|
|
3031
|
+
void this.shutdown({ fromSignal: true });
|
|
2991
3032
|
};
|
|
2992
3033
|
process.prependListener(signal, handler);
|
|
2993
3034
|
this.signalCleanupHandlers.push(() => process.off(signal, handler));
|
|
@@ -3461,6 +3502,7 @@ export class InteractiveMode {
|
|
|
3461
3502
|
editorPaddingX: this.settingsManager.getEditorPaddingX(),
|
|
3462
3503
|
autocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),
|
|
3463
3504
|
quietStartup: this.settingsManager.getQuietStartup(),
|
|
3505
|
+
defaultProjectTrust: this.settingsManager.getDefaultProjectTrust(),
|
|
3464
3506
|
clearOnShrink: this.settingsManager.getClearOnShrink(),
|
|
3465
3507
|
showTerminalProgress: this.settingsManager.getShowTerminalProgress(),
|
|
3466
3508
|
warnings: this.settingsManager.getWarnings(),
|
|
@@ -3549,6 +3591,9 @@ export class InteractiveMode {
|
|
|
3549
3591
|
onQuietStartupChange: (enabled) => {
|
|
3550
3592
|
this.settingsManager.setQuietStartup(enabled);
|
|
3551
3593
|
},
|
|
3594
|
+
onDefaultProjectTrustChange: (defaultProjectTrust) => {
|
|
3595
|
+
this.settingsManager.setDefaultProjectTrust(defaultProjectTrust);
|
|
3596
|
+
},
|
|
3552
3597
|
onDoubleEscapeActionChange: (action) => {
|
|
3553
3598
|
this.settingsManager.setDoubleEscapeAction(action);
|
|
3554
3599
|
},
|
|
@@ -3809,6 +3854,51 @@ export class InteractiveMode {
|
|
|
3809
3854
|
this.showError(error instanceof Error ? error.message : String(error));
|
|
3810
3855
|
}
|
|
3811
3856
|
}
|
|
3857
|
+
maybeSaveImplicitProjectTrustAfterReload() {
|
|
3858
|
+
const cwd = this.sessionManager.getCwd();
|
|
3859
|
+
if (this.autoTrustOnReloadCwd !== cwd) {
|
|
3860
|
+
return false;
|
|
3861
|
+
}
|
|
3862
|
+
if (!this.settingsManager.isProjectTrusted() || !hasProjectConfigDir(cwd)) {
|
|
3863
|
+
return false;
|
|
3864
|
+
}
|
|
3865
|
+
const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);
|
|
3866
|
+
try {
|
|
3867
|
+
if (trustStore.get(cwd) !== null) {
|
|
3868
|
+
this.autoTrustOnReloadCwd = undefined;
|
|
3869
|
+
return false;
|
|
3870
|
+
}
|
|
3871
|
+
trustStore.set(cwd, true);
|
|
3872
|
+
this.autoTrustOnReloadCwd = undefined;
|
|
3873
|
+
return true;
|
|
3874
|
+
}
|
|
3875
|
+
catch (error) {
|
|
3876
|
+
this.showWarning(`Could not save project trust after reload: ${error instanceof Error ? error.message : String(error)}`);
|
|
3877
|
+
return false;
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
showTrustSelector() {
|
|
3881
|
+
const cwd = this.sessionManager.getCwd();
|
|
3882
|
+
const trustStore = new ProjectTrustStore(this.runtimeHost.services.agentDir);
|
|
3883
|
+
const savedDecision = trustStore.getEntry(cwd);
|
|
3884
|
+
this.showSelector((done) => {
|
|
3885
|
+
const selector = new TrustSelectorComponent({
|
|
3886
|
+
cwd,
|
|
3887
|
+
savedDecision,
|
|
3888
|
+
projectTrusted: this.settingsManager.isProjectTrusted(),
|
|
3889
|
+
onSelect: (selection) => {
|
|
3890
|
+
trustStore.setMany(selection.updates);
|
|
3891
|
+
done();
|
|
3892
|
+
this.showStatus(`Saved trust decision: ${selection.trusted ? "trusted" : "untrusted"}. Restart ${APP_NAME} for this to take effect.`);
|
|
3893
|
+
},
|
|
3894
|
+
onCancel: () => {
|
|
3895
|
+
done();
|
|
3896
|
+
this.ui.requestRender();
|
|
3897
|
+
},
|
|
3898
|
+
});
|
|
3899
|
+
return { component: selector, focus: selector };
|
|
3900
|
+
});
|
|
3901
|
+
}
|
|
3812
3902
|
showTreeSelector(initialSelectedId) {
|
|
3813
3903
|
const tree = this.sessionManager.getTree();
|
|
3814
3904
|
const realLeafId = this.sessionManager.getLeafId();
|
|
@@ -3909,7 +3999,9 @@ export class InteractiveMode {
|
|
|
3909
3999
|
}
|
|
3910
4000
|
showSessionSelector() {
|
|
3911
4001
|
this.showSelector((done) => {
|
|
3912
|
-
const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),
|
|
4002
|
+
const selector = new SessionSelectorComponent((onProgress) => SessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress), (onProgress) => this.sessionManager.usesDefaultSessionDir()
|
|
4003
|
+
? SessionManager.listAll(onProgress)
|
|
4004
|
+
: SessionManager.listAll(this.sessionManager.getSessionDir(), onProgress), async (sessionPath) => {
|
|
3913
4005
|
done();
|
|
3914
4006
|
await this.handleResumeSession(sessionPath);
|
|
3915
4007
|
}, () => {
|
|
@@ -3940,6 +4032,7 @@ export class InteractiveMode {
|
|
|
3940
4032
|
try {
|
|
3941
4033
|
const result = await this.runtimeHost.switchSession(sessionPath, {
|
|
3942
4034
|
withSession: options?.withSession,
|
|
4035
|
+
projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),
|
|
3943
4036
|
});
|
|
3944
4037
|
if (result.cancelled) {
|
|
3945
4038
|
return result;
|
|
@@ -3958,6 +4051,7 @@ export class InteractiveMode {
|
|
|
3958
4051
|
const result = await this.runtimeHost.switchSession(sessionPath, {
|
|
3959
4052
|
cwdOverride: selectedCwd,
|
|
3960
4053
|
withSession: options?.withSession,
|
|
4054
|
+
projectTrustContextFactory: (cwd) => this.createProjectTrustContext(cwd),
|
|
3961
4055
|
});
|
|
3962
4056
|
if (result.cancelled) {
|
|
3963
4057
|
return result;
|
|
@@ -4364,10 +4458,14 @@ export class InteractiveMode {
|
|
|
4364
4458
|
this.setupExtensionShortcuts(runner);
|
|
4365
4459
|
this.rebuildChatFromMessages();
|
|
4366
4460
|
dismissReloadBox(this.editor);
|
|
4461
|
+
const savedImplicitProjectTrust = this.maybeSaveImplicitProjectTrustAfterReload();
|
|
4367
4462
|
this.showLoadedResources({
|
|
4368
4463
|
force: false,
|
|
4369
4464
|
showDiagnosticsWhenQuiet: true,
|
|
4370
4465
|
});
|
|
4466
|
+
if (savedImplicitProjectTrust) {
|
|
4467
|
+
this.showStatus("Saved project trust for future sessions");
|
|
4468
|
+
}
|
|
4371
4469
|
const modelsJsonError = this.session.modelRegistry.getError();
|
|
4372
4470
|
if (modelsJsonError) {
|
|
4373
4471
|
this.showError(`models.json error: ${modelsJsonError}`);
|
|
@@ -4629,7 +4727,7 @@ export class InteractiveMode {
|
|
|
4629
4727
|
const changelogMarkdown = allEntries.length > 0
|
|
4630
4728
|
? allEntries
|
|
4631
4729
|
.reverse()
|
|
4632
|
-
.map((e) => e.content)
|
|
4730
|
+
.map((e) => normalizeChangelogLinks(e.content, e))
|
|
4633
4731
|
.join("\n\n")
|
|
4634
4732
|
: "No changelog entries found.";
|
|
4635
4733
|
this.chatContainer.addChild(new Spacer(1));
|