@bastani/atomic 0.9.24 → 0.9.25-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 +42 -0
- package/dist/builtin/intercom/index.bundle.mjs +5 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +11 -0
- package/dist/builtin/mcp/index.bundle.mjs +219 -71
- package/dist/builtin/mcp/package.json +6 -2
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +1 -0
- package/dist/builtin/web-access/index.bundle.mjs +7 -6
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +6 -0
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +66 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +1 -0
- package/dist/cli/startup-ui.d.ts +3 -4
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +3 -4
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +5 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-export.d.ts.map +1 -1
- package/dist/core/agent-session-export.js +3 -0
- package/dist/core/agent-session-export.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +4 -0
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +2 -1
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-nested-tools.d.ts +10 -0
- package/dist/core/agent-session-nested-tools.d.ts.map +1 -0
- package/dist/core/agent-session-nested-tools.js +76 -0
- package/dist/core/agent-session-nested-tools.js.map +1 -0
- package/dist/core/agent-session-runtime-auth.js +3 -1
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-state.d.ts +2 -0
- package/dist/core/agent-session-state.d.ts.map +1 -1
- package/dist/core/agent-session-state.js +11 -11
- package/dist/core/agent-session-state.js.map +1 -1
- package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
- package/dist/core/agent-session-tool-hooks.js +18 -3
- package/dist/core/agent-session-tool-hooks.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +15 -3
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +6 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/builtin-resource-loader.d.ts.map +1 -1
- package/dist/core/builtin-resource-loader.js +13 -1
- package/dist/core/builtin-resource-loader.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 +18 -18
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/execution-model-router.d.ts.map +1 -1
- package/dist/core/execution-model-router.js +24 -8
- package/dist/core/execution-model-router.js.map +1 -1
- package/dist/core/export-html/template.js +12 -0
- package/dist/core/extensions/agent-events.d.ts +3 -0
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +2 -0
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +9 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/event-results.d.ts +3 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -0
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +4 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-core.d.ts.map +1 -1
- package/dist/core/extensions/loader-core.js +3 -5
- package/dist/core/extensions/loader-core.js.map +1 -1
- package/dist/core/extensions/loader-host-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-host-modules.js +7 -1
- package/dist/core/extensions/loader-host-modules.js.map +1 -1
- package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
- package/dist/core/extensions/loader-runtime.js +3 -0
- package/dist/core/extensions/loader-runtime.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +4 -0
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +2 -0
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +16 -1
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +34 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +5 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +4 -0
- package/dist/core/extensions/tool-events.d.ts.map +1 -1
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +34 -3
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +14 -2
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/fast-model-routing-transport.d.ts.map +1 -1
- package/dist/core/fast-model-routing-transport.js +2 -1
- package/dist/core/fast-model-routing-transport.js.map +1 -1
- package/dist/core/fast-model-routing.d.ts +1 -2
- package/dist/core/fast-model-routing.d.ts.map +1 -1
- package/dist/core/fast-model-routing.js +13 -11
- package/dist/core/fast-model-routing.js.map +1 -1
- package/dist/core/fast-model-variants.d.ts +4 -1
- package/dist/core/fast-model-variants.d.ts.map +1 -1
- package/dist/core/fast-model-variants.js +42 -17
- package/dist/core/fast-model-variants.js.map +1 -1
- package/dist/core/mandatory-resource-loader.d.ts.map +1 -1
- package/dist/core/mandatory-resource-loader.js +9 -0
- package/dist/core/mandatory-resource-loader.js.map +1 -1
- package/dist/core/model-registry.d.ts +4 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +9 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +1 -1
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-routing-candidates.d.ts +4 -0
- package/dist/core/model-routing-candidates.d.ts.map +1 -1
- package/dist/core/model-routing-candidates.js +8 -3
- package/dist/core/model-routing-candidates.js.map +1 -1
- package/dist/core/model-routing-evals.d.ts.map +1 -1
- package/dist/core/model-routing-evals.js +4 -5
- package/dist/core/model-routing-evals.js.map +1 -1
- package/dist/core/model-runtime.d.ts +3 -2
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +19 -25
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +64 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -0
- package/dist/core/nested-tool-calls.js +132 -0
- package/dist/core/nested-tool-calls.js.map +1 -0
- package/dist/core/oauth-provider-metadata.js +1 -1
- package/dist/core/oauth-provider-metadata.js.map +1 -1
- package/dist/core/package-manager-resolver.d.ts.map +1 -1
- package/dist/core/package-manager-resolver.js +21 -3
- package/dist/core/package-manager-resolver.js.map +1 -1
- package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
- package/dist/core/package-manager-resource-accumulator.js +2 -0
- package/dist/core/package-manager-resource-accumulator.js.map +1 -1
- package/dist/core/package-manager-types.d.ts +2 -0
- package/dist/core/package-manager-types.d.ts.map +1 -1
- package/dist/core/package-manager-types.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +1 -0
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader-core.d.ts.map +1 -1
- package/dist/core/resource-loader-core.js +12 -6
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/resource-loader-extensions.d.ts +1 -0
- package/dist/core/resource-loader-extensions.d.ts.map +1 -1
- package/dist/core/resource-loader-extensions.js +64 -4
- package/dist/core/resource-loader-extensions.js.map +1 -1
- package/dist/core/resource-loader-paths.d.ts.map +1 -1
- package/dist/core/resource-loader-paths.js +2 -1
- package/dist/core/resource-loader-paths.js.map +1 -1
- package/dist/core/resource-loader-reload.d.ts.map +1 -1
- package/dist/core/resource-loader-reload.js +5 -4
- package/dist/core/resource-loader-reload.js.map +1 -1
- package/dist/core/resource-loader-source-info.d.ts.map +1 -1
- package/dist/core/resource-loader-source-info.js +7 -5
- package/dist/core/resource-loader-source-info.js.map +1 -1
- package/dist/core/resource-loader-types.d.ts +4 -0
- package/dist/core/resource-loader-types.d.ts.map +1 -1
- package/dist/core/resource-loader-types.js.map +1 -1
- package/dist/core/sdk-types.d.ts +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/session-manager-core.d.ts +2 -0
- package/dist/core/session-manager-core.d.ts.map +1 -1
- package/dist/core/session-manager-core.js +5 -1
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-entries.d.ts +1 -1
- package/dist/core/session-manager-entries.d.ts.map +1 -1
- package/dist/core/session-manager-entries.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +4 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +27 -1
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.d.ts +2 -0
- package/dist/core/settings-manager-core.d.ts.map +1 -1
- package/dist/core/settings-manager-core.js +4 -0
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
- package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-ui-accessors.js +13 -0
- package/dist/core/settings-manager-ui-accessors.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-merge.d.ts +1 -0
- package/dist/core/settings-merge.d.ts.map +1 -1
- package/dist/core/settings-merge.js +30 -1
- package/dist/core/settings-merge.js.map +1 -1
- package/dist/core/settings-types.d.ts +8 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/source-info.d.ts +3 -0
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js +11 -0
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/structured-output/index.d.ts.map +1 -1
- package/dist/core/structured-output/index.js +3 -1
- package/dist/core/structured-output/index.js.map +1 -1
- package/dist/core/tool-loadout.d.ts +6 -0
- package/dist/core/tool-loadout.d.ts.map +1 -0
- package/dist/core/tool-loadout.js +63 -0
- package/dist/core/tool-loadout.js.map +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/ask-user-question.js +1 -0
- package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +31 -11
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +4 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +32 -0
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +27 -21
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/render-utils.d.ts +4 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +19 -0
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-concurrency.d.ts +1 -1
- package/dist/core/tools/tool-concurrency.d.ts.map +1 -1
- package/dist/core/tools/tool-concurrency.js +28 -3
- package/dist/core/tools/tool-concurrency.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +4 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/usage-totals.d.ts +2 -0
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +23 -0
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts +10 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -0
- package/dist/extensions/codemode/execute.js +313 -0
- package/dist/extensions/codemode/execute.js.map +1 -0
- package/dist/extensions/codemode/index.d.ts +11 -0
- package/dist/extensions/codemode/index.d.ts.map +1 -0
- package/dist/extensions/codemode/index.js +14 -0
- package/dist/extensions/codemode/index.js.map +1 -0
- package/dist/extensions/codemode/renderer.d.ts +4 -0
- package/dist/extensions/codemode/renderer.d.ts.map +1 -0
- package/dist/extensions/codemode/renderer.js +78 -0
- package/dist/extensions/codemode/renderer.js.map +1 -0
- package/dist/extensions/codemode/tool.d.ts +51 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -0
- package/dist/extensions/codemode/tool.js +134 -0
- package/dist/extensions/codemode/tool.js.map +1 -0
- package/dist/extensions/codemode/worker.d.ts +2 -0
- package/dist/extensions/codemode/worker.d.ts.map +1 -0
- package/dist/extensions/codemode/worker.js +2 -0
- package/dist/extensions/codemode/worker.js.map +1 -0
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +5 -1
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +31 -10
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/tool-search/index.d.ts +5 -0
- package/dist/extensions/tool-search/index.d.ts.map +1 -0
- package/dist/extensions/tool-search/index.js +6 -0
- package/dist/extensions/tool-search/index.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +41 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -0
- package/dist/extensions/tool-search/tool.js +161 -0
- package/dist/extensions/tool-search/tool.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +2 -0
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js +9 -1
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector-project-scope.js +4 -1
- package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts +2 -2
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +1 -0
- 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 +42 -7
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
- package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +13 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js +3 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/themed-text.d.ts +8 -0
- package/dist/modes/interactive/components/themed-text.d.ts.map +1 -0
- package/dist/modes/interactive/components/themed-text.js +14 -0
- package/dist/modes/interactive/components/themed-text.js.map +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +5 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +2 -0
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +5 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +7 -10
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +5 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +8 -3
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-tui.d.ts +2 -1
- package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-tui.js +1 -0
- package/dist/modes/interactive/interactive-tui.js.map +1 -1
- package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
- package/dist/modes/interactive/theme/color-utils.js +3 -0
- package/dist/modes/interactive/theme/color-utils.js.map +1 -1
- package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -1
- package/dist/modes/interactive/theme/export-colors.js +4 -1
- package/dist/modes/interactive/theme/export-colors.js.map +1 -1
- package/dist/modes/interactive/theme/system-theme.d.ts +23 -0
- package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -0
- package/dist/modes/interactive/theme/system-theme.js +462 -0
- package/dist/modes/interactive/theme/system-theme.js.map +1 -0
- package/dist/modes/interactive/theme/terminal-colors.d.ts +10 -0
- package/dist/modes/interactive/theme/terminal-colors.d.ts.map +1 -0
- package/dist/modes/interactive/theme/terminal-colors.js +36 -0
- package/dist/modes/interactive/theme/terminal-colors.js.map +1 -0
- package/dist/modes/interactive/theme/terminal-detection.d.ts +4 -6
- package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -1
- package/dist/modes/interactive/theme/terminal-detection.js +12 -46
- package/dist/modes/interactive/theme/terminal-detection.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.d.ts +1 -0
- package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +2 -2
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.d.ts +16 -8
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +106 -64
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-loading.js +23 -2
- package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.js +1 -1
- package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +2 -2
- package/dist/modes/interactive/theme/theme.d.ts +2 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +2 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive-engine/engine-session-stats.d.ts +26 -0
- package/dist/modes/interactive-engine/engine-session-stats.d.ts.map +1 -0
- package/dist/modes/interactive-engine/engine-session-stats.js +71 -0
- package/dist/modes/interactive-engine/engine-session-stats.js.map +1 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
- package/dist/modes/interactive-engine/extension-ui-bridge.js +4 -0
- package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts +3 -0
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +27 -5
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +3 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +8 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +2 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts +1 -3
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +3 -30
- package/dist/utils/shell.js.map +1 -1
- package/docs/extensions/api-reference.md +5 -1
- package/docs/extensions/authoring.md +31 -1
- package/docs/extensions/events.md +3 -1
- package/docs/extensions.md +14 -0
- package/docs/models/evals.md +45 -2
- package/docs/models/reference.md +33 -2
- package/docs/models.md +1 -0
- package/docs/packages.md +2 -0
- package/docs/providers.md +34 -7
- package/docs/reference/cli.md +4 -0
- package/docs/rpc/protocol.md +10 -0
- package/docs/sdk/reference.md +11 -1
- package/docs/sdk/structured-decisions.md +4 -2
- package/docs/session-format.md +5 -0
- package/docs/settings.md +19 -5
- package/docs/skills.md +1 -1
- package/docs/themes/reference.md +2 -1
- package/docs/themes.md +4 -2
- package/docs/tools.md +39 -0
- package/npm-shrinkwrap.json +115 -113
- package/package.json +12 -9
|
@@ -3,6 +3,7 @@ import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
|
3
3
|
import { areExperimentalFeaturesEnabled } from "../../../core/experimental.js";
|
|
4
4
|
import { getOwnerTaskStore } from "../../../core/tasks/owner-store.js";
|
|
5
5
|
import { addUsageToTotals, createUsageTotals } from "../../../core/usage-totals.js";
|
|
6
|
+
import { getEngineSessionStats } from "../../interactive-engine/engine-session-stats.js";
|
|
6
7
|
import { theme } from "../theme/theme.js";
|
|
7
8
|
import { renderTaskFooter } from "./task-list.js";
|
|
8
9
|
const defaultFooterRenderStyle = {
|
|
@@ -44,17 +45,26 @@ function rightAlign(line, width) {
|
|
|
44
45
|
}
|
|
45
46
|
return `${" ".repeat(width - lineWidth)}${line}`;
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
const mirrorStats = new WeakMap();
|
|
49
|
+
function getCacheHitRate(usage) {
|
|
50
|
+
const promptTokens = usage.input + usage.cacheRead + usage.cacheWrite;
|
|
51
|
+
return promptTokens > 0 ? (usage.cacheRead / promptTokens) * 100 : undefined;
|
|
52
|
+
}
|
|
53
|
+
function summarizeEngineUsage(stats) {
|
|
54
|
+
const { input, output, cacheRead, cacheWrite } = stats.tokens;
|
|
55
|
+
return {
|
|
56
|
+
totals: { input, output, cacheRead, cacheWrite, cost: stats.cost },
|
|
57
|
+
latestCacheHitRate: stats.latestAssistantUsage ? getCacheHitRate(stats.latestAssistantUsage) : undefined,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function summarizeEntryUsage(session) {
|
|
49
61
|
// Calculate cumulative usage from ALL session entries (not just post-compaction messages)
|
|
50
62
|
const totals = createUsageTotals();
|
|
51
63
|
let latestCacheHitRate;
|
|
52
64
|
for (const entry of session.sessionManager.getEntries()) {
|
|
53
65
|
if (entry.type === "message" && entry.message.role === "assistant") {
|
|
54
66
|
addUsageToTotals(totals, entry.message.usage);
|
|
55
|
-
|
|
56
|
-
latestCacheHitRate =
|
|
57
|
-
latestPromptTokens > 0 ? (entry.message.usage.cacheRead / latestPromptTokens) * 100 : undefined;
|
|
67
|
+
latestCacheHitRate = getCacheHitRate(entry.message.usage);
|
|
58
68
|
}
|
|
59
69
|
else if ((entry.type === "branch_summary" || entry.type === "session_summary" || entry.type === "compaction") &&
|
|
60
70
|
entry.usage) {
|
|
@@ -67,9 +77,34 @@ function getUsageLine(session, autoCompactEnabled, width) {
|
|
|
67
77
|
addUsageToTotals(totals, entry.message.usage);
|
|
68
78
|
}
|
|
69
79
|
}
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
return { totals, latestCacheHitRate };
|
|
81
|
+
}
|
|
82
|
+
function getMirrorStats(session) {
|
|
83
|
+
const manager = session.sessionManager;
|
|
84
|
+
const sessionId = manager.getSessionId();
|
|
85
|
+
const leafId = manager.getLeafId();
|
|
86
|
+
const entryCount = manager.getEntryCount();
|
|
87
|
+
const limitsModel = session.model;
|
|
88
|
+
const cached = mirrorStats.get(session);
|
|
89
|
+
if (cached &&
|
|
90
|
+
cached.sessionId === sessionId &&
|
|
91
|
+
cached.leafId === leafId &&
|
|
92
|
+
cached.entryCount === entryCount &&
|
|
93
|
+
cached.limitsModel === limitsModel)
|
|
94
|
+
return cached;
|
|
95
|
+
const { totals, latestCacheHitRate } = summarizeEntryUsage(session);
|
|
72
96
|
const contextUsage = session.getContextUsage();
|
|
97
|
+
const stats = { sessionId, leafId, entryCount, limitsModel, totals, latestCacheHitRate, contextUsage };
|
|
98
|
+
mirrorStats.set(session, stats);
|
|
99
|
+
return stats;
|
|
100
|
+
}
|
|
101
|
+
function getUsageLine(session, autoCompactEnabled, width) {
|
|
102
|
+
const state = session.state;
|
|
103
|
+
// An isolated engine owns the live session; its stats replace the host's mirror entries.
|
|
104
|
+
const engineStats = getEngineSessionStats(session);
|
|
105
|
+
const { totals, latestCacheHitRate, contextUsage } = engineStats
|
|
106
|
+
? { ...summarizeEngineUsage(engineStats), contextUsage: engineStats.contextUsage }
|
|
107
|
+
: getMirrorStats(session);
|
|
73
108
|
const contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0;
|
|
74
109
|
const contextPercentValue = contextUsage?.percent ?? 0;
|
|
75
110
|
const contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : "?";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { type Component, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.js\";\nimport { areExperimentalFeaturesEnabled } from \"../../../core/experimental.ts\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport { getOwnerTaskStore } from \"../../../core/tasks/owner-store.js\";\nimport { addUsageToTotals, createUsageTotals } from \"../../../core/usage-totals.ts\";\nimport { theme } from \"../theme/theme.js\";\nimport { renderTaskFooter } from \"./task-list.js\";\n\nexport interface FooterRenderStyle {\n\tdim(text: string): string;\n\tmuted(text: string): string;\n\twarning(text: string): string;\n}\n\nconst defaultFooterRenderStyle: FooterRenderStyle = {\n\tdim: (text) => theme.fg(\"dim\", text),\n\tmuted: (text) => theme.fg(\"muted\", text),\n\twarning: (text) => theme.fg(\"warning\", text),\n};\n\nfunction sanitizeStatusText(text: string): string {\n\t// Replace newlines, tabs, carriage returns with space, then collapse\n\t// multiple spaces (pi parity). ANSI/SGR sequences must survive intact:\n\t// extension statuses are frequently theme-colored, and stripping only the\n\t// ESC byte would leave the rest of the sequence as visible literal text.\n\treturn text\n\t\t.replace(/[\\r\\n\\t]/g, \" \")\n\t\t.replace(/ +/g, \" \")\n\t\t.trim();\n}\n\n/**\n * Format token counts (similar to web-ui)\n */\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\nfunction replaceHome(input: string): string {\n\treturn formatCwdForFooter(input, process.env.HOME || process.env.USERPROFILE);\n}\n\nfunction rightAlign(line: string, width: number): string {\n\tconst lineWidth = visibleWidth(line);\n\tif (lineWidth >= width) {\n\t\treturn truncateToWidth(line, width, theme.fg(\"dim\", \"...\"));\n\t}\n\treturn `${\" \".repeat(width - lineWidth)}${line}`;\n}\n\nfunction getUsageLine(session: AgentSession, autoCompactEnabled: boolean, width: number): string {\n\tconst state = session.state;\n\n\t// Calculate cumulative usage from ALL session entries (not just post-compaction messages)\n\tconst totals = createUsageTotals();\n\tlet latestCacheHitRate: number | undefined;\n\n\tfor (const entry of session.sessionManager.getEntries()) {\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\taddUsageToTotals(totals, entry.message.usage);\n\n\t\t\tconst latestPromptTokens =\n\t\t\t\tentry.message.usage.input + entry.message.usage.cacheRead + entry.message.usage.cacheWrite;\n\t\t\tlatestCacheHitRate =\n\t\t\t\tlatestPromptTokens > 0 ? (entry.message.usage.cacheRead / latestPromptTokens) * 100 : undefined;\n\t\t} else if (\n\t\t\t(entry.type === \"branch_summary\" || entry.type === \"session_summary\" || entry.type === \"compaction\") &&\n\t\t\tentry.usage\n\t\t) {\n\t\t\taddUsageToTotals(totals, entry.usage);\n\t\t} else if (\n\t\t\tentry.type === \"message\" &&\n\t\t\tentry.message.role === \"toolResult\" &&\n\t\t\t\"usage\" in entry.message &&\n\t\t\tentry.message.usage\n\t\t) {\n\t\t\taddUsageToTotals(totals, entry.message.usage);\n\t\t}\n\t}\n\n\t// Calculate context usage from session (handles compaction correctly).\n\t// After compaction, tokens are unknown until the next LLM response.\n\tconst contextUsage = session.getContextUsage();\n\tconst contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0;\n\tconst contextPercentValue = contextUsage?.percent ?? 0;\n\tconst contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : \"?\";\n\n\tconst usageParts = [];\n\tif (totals.input) usageParts.push(`${theme.fg(\"dim\", \"↑\")}${theme.fg(\"muted\", formatTokens(totals.input))}`);\n\tif (totals.output) usageParts.push(`${theme.fg(\"dim\", \"↓\")}${theme.fg(\"muted\", formatTokens(totals.output))}`);\n\tif (totals.cacheRead) usageParts.push(`${theme.fg(\"dim\", \"R\")}${theme.fg(\"muted\", formatTokens(totals.cacheRead))}`);\n\tif (totals.cacheWrite)\n\t\tusageParts.push(`${theme.fg(\"dim\", \"W\")}${theme.fg(\"muted\", formatTokens(totals.cacheWrite))}`);\n\tif ((totals.cacheRead > 0 || totals.cacheWrite > 0) && latestCacheHitRate !== undefined) {\n\t\tusageParts.push(`${theme.fg(\"dim\", \"CH\")}${theme.fg(\"muted\", `${latestCacheHitRate.toFixed(1)}%`)}`);\n\t}\n\n\t// Kimi Coding is subscription-backed despite using API-key authentication.\n\tconst usingSubscription = state.model\n\t\t? state.model.provider === \"kimi-coding\" || session.modelRuntime.isUsingOAuth(state.model.provider)\n\t\t: false;\n\tif (totals.cost || usingSubscription) {\n\t\tusageParts.push(\n\t\t\t`${theme.fg(\"muted\", `$${totals.cost.toFixed(3)}`)}${usingSubscription ? ` ${theme.fg(\"dim\", \"(sub)\")}` : \"\"}`,\n\t\t);\n\t}\n\n\tconst autoIndicator = autoCompactEnabled ? \" (auto)\" : \"\";\n\tconst contextPercentDisplay =\n\t\tcontextPercent === \"?\"\n\t\t\t? `?/${formatTokens(contextWindow)}${autoIndicator}`\n\t\t\t: `${contextPercent}%/${formatTokens(contextWindow)}${autoIndicator}`;\n\tif (autoCompactEnabled && contextPercentValue > 70) {\n\t\tusageParts.push(theme.fg(\"warning\", contextPercentDisplay));\n\t} else if (contextPercentValue > 90) {\n\t\tusageParts.push(theme.fg(\"error\", contextPercentDisplay));\n\t} else if (contextPercentValue > 70) {\n\t\tusageParts.push(theme.fg(\"warning\", contextPercentDisplay));\n\t} else {\n\t\tusageParts.push(theme.fg(\"muted\", contextPercentDisplay));\n\t}\n\n\tconst separator = theme.fg(\"dim\", \" • \");\n\tconst usageText = usageParts.length > 0 ? usageParts.join(separator) : theme.fg(\"muted\", contextPercentDisplay);\n\treturn rightAlign(usageText, width);\n}\n\nexport function formatCwdForFooter(cwd: string, home: string | undefined): string {\n\tif (!home) return cwd;\n\n\tconst resolvedCwd = resolve(cwd);\n\tconst resolvedHome = resolve(home);\n\tconst relativeToHome = relative(resolvedHome, resolvedCwd);\n\tconst isInsideHome =\n\t\trelativeToHome === \"\" ||\n\t\t(relativeToHome !== \"..\" && !relativeToHome.startsWith(`..${sep}`) && !isAbsolute(relativeToHome));\n\n\tif (!isInsideHome) return cwd;\n\treturn relativeToHome === \"\" ? \"~\" : `~${sep}${relativeToHome}`;\n}\n\n/**\n * Right-aligned usage meter that sits above the composer, matching the approved\n * prototype's separate token/cost/context ribbon.\n */\nexport class UsageMeterComponent implements Component {\n\tprivate autoCompactEnabled = true;\n\n\tprivate declare session: AgentSession;\n\n\tconstructor(session: AgentSession) {\n\t\tthis.session = session;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(enabled: boolean): void {\n\t\tthis.autoCompactEnabled = enabled;\n\t}\n\n\tinvalidate(): void {\n\t\t// Render pulls live session data.\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [getUsageLine(this.session, this.autoCompactEnabled, width)];\n\t}\n}\n\n/**\n * Sparse statusline below the composer. It mirrors the preview: model + cwd\n * when idle, or one semantic dot with short recovery copy while work is live.\n */\nexport class FooterComponent implements Component {\n\tprivate declare session: AgentSession;\n\tprivate declare footerData: ReadonlyFooterDataProvider;\n\tprivate declare readonly renderStyle: FooterRenderStyle;\n\tprivate readonly navigationActive: () => boolean;\n\tprivate branchCwd: string | undefined;\n\tprivate releaseBranch: (() => void) | undefined;\n\tprivate disposed = false;\n\n\tconstructor(\n\t\tsession: AgentSession,\n\t\tfooterData: ReadonlyFooterDataProvider,\n\t\trenderStyle: FooterRenderStyle = defaultFooterRenderStyle,\n\t\tnavigationActive: () => boolean = () => false,\n\t) {\n\t\tthis.session = session;\n\t\tthis.footerData = footerData;\n\t\tthis.renderStyle = renderStyle;\n\t\tthis.navigationActive = navigationActive;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tif (this.session !== session) {\n\t\t\tthis.releaseBranch?.();\n\t\t\tthis.releaseBranch = undefined;\n\t\t\tthis.branchCwd = undefined;\n\t\t}\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(_enabled: boolean): void {\n\t\t// Usage state lives in UsageMeterComponent. Kept for compatibility with existing call sites.\n\t}\n\n\t/**\n\t * No-op: git branch caching now handled by provider.\n\t * Kept for compatibility with existing call sites in interactive-mode.\n\t */\n\tinvalidate(): void {\n\t\t// No-op: git branch is cached/invalidated by provider\n\t}\n\n\t/** Release this viewer's branch subscription without disposing shared footer data. */\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.releaseBranch?.();\n\t\tthis.releaseBranch = undefined;\n\t}\n\n\trender(width: number): string[] {\n\t\tif (this.disposed) return [];\n\t\tconst state = this.session.state;\n\t\tconst cwd = this.session.sessionManager.getCwd();\n\t\tif (this.branchCwd !== cwd) {\n\t\t\tthis.releaseBranch?.();\n\t\t\t// Repaints are requested by the host's existing shared branch subscription.\n\t\t\tthis.releaseBranch = this.footerData.onBranchChange(() => {}, cwd);\n\t\t\tthis.branchCwd = cwd;\n\t\t}\n\t\tlet pwd = replaceHome(cwd);\n\t\tconst branch = this.footerData.getGitBranch(cwd);\n\t\tif (branch) pwd += ` (${branch})`;\n\t\tconst sessionName =\n\t\t\ttypeof this.session.sessionManager.getSessionName === \"function\"\n\t\t\t\t? this.session.sessionManager.getSessionName()\n\t\t\t\t: undefined;\n\t\tif (sessionName) pwd += ` • ${sessionName}`;\n\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tlet modelLabel = modelName;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\tmodelLabel = thinkingLevel === \"off\" ? modelLabel : `${modelLabel} ${thinkingLevel}`;\n\t\t}\n\t\tif (this.footerData.getAvailableProviderCount() > 1 && state.model) {\n\t\t\tmodelLabel = `(${state.model.provider}) ${modelLabel}`;\n\t\t}\n\n\t\tconst liveState =\n\t\t\tthis.session.isStreaming && !this.navigationActive() ? this.renderStyle.muted(\"esc to interrupt\") : undefined;\n\t\tlet statusText =\n\t\t\tliveState ?? `${this.renderStyle.dim(modelLabel)} ${this.renderStyle.dim(\"•\")} ${this.renderStyle.muted(pwd)}`;\n\t\tif (areExperimentalFeaturesEnabled()) statusText += ` ${this.renderStyle.warning(\"xp\")}`;\n\t\tconst lines = [truncateToWidth(statusText, width, this.renderStyle.dim(\"...\"))];\n\t\tconst statuses = [...this.footerData.getExtensionStatuses()].sort(([a], [b]) => a.localeCompare(b));\n\t\tif (statuses.length > 0) {\n\t\t\tlines.push(\n\t\t\t\ttruncateToWidth(\n\t\t\t\t\tstatuses.map(([, text]) => sanitizeStatusText(text)).join(` ${this.renderStyle.dim(\"•\")} `),\n\t\t\t\t\twidth,\n\t\t\t\t\tthis.renderStyle.dim(\"...\"),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlines.push(...renderTaskFooter(getOwnerTaskStore(this.session)?.backgroundTasks ?? [], width));\n\t\treturn lines;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/footer.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute, relative, resolve, sep } from \"node:path\";\nimport type { Usage } from \"@bastani/pi-ai/compat\";\nimport { type Component, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { AgentSession } from \"../../../core/agent-session.js\";\nimport type { SessionStats } from \"../../../core/agent-session-types.js\";\nimport { areExperimentalFeaturesEnabled } from \"../../../core/experimental.ts\";\nimport type { ContextUsage } from \"../../../core/extensions/types.ts\";\nimport type { ReadonlyFooterDataProvider } from \"../../../core/footer-data-provider.ts\";\nimport { getOwnerTaskStore } from \"../../../core/tasks/owner-store.js\";\nimport { addUsageToTotals, createUsageTotals, type UsageTotals } from \"../../../core/usage-totals.ts\";\nimport { getEngineSessionStats } from \"../../interactive-engine/engine-session-stats.js\";\nimport { theme } from \"../theme/theme.js\";\nimport { renderTaskFooter } from \"./task-list.js\";\n\nexport interface FooterRenderStyle {\n\tdim(text: string): string;\n\tmuted(text: string): string;\n\twarning(text: string): string;\n}\n\nconst defaultFooterRenderStyle: FooterRenderStyle = {\n\tdim: (text) => theme.fg(\"dim\", text),\n\tmuted: (text) => theme.fg(\"muted\", text),\n\twarning: (text) => theme.fg(\"warning\", text),\n};\n\nfunction sanitizeStatusText(text: string): string {\n\t// Replace newlines, tabs, carriage returns with space, then collapse\n\t// multiple spaces (pi parity). ANSI/SGR sequences must survive intact:\n\t// extension statuses are frequently theme-colored, and stripping only the\n\t// ESC byte would leave the rest of the sequence as visible literal text.\n\treturn text\n\t\t.replace(/[\\r\\n\\t]/g, \" \")\n\t\t.replace(/ +/g, \" \")\n\t\t.trim();\n}\n\n/**\n * Format token counts (similar to web-ui)\n */\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\nfunction replaceHome(input: string): string {\n\treturn formatCwdForFooter(input, process.env.HOME || process.env.USERPROFILE);\n}\n\nfunction rightAlign(line: string, width: number): string {\n\tconst lineWidth = visibleWidth(line);\n\tif (lineWidth >= width) {\n\t\treturn truncateToWidth(line, width, theme.fg(\"dim\", \"...\"));\n\t}\n\treturn `${\" \".repeat(width - lineWidth)}${line}`;\n}\n\ntype UsageSummary = { totals: UsageTotals; latestCacheHitRate: number | undefined };\n\ninterface MirrorStats extends UsageSummary {\n\tsessionId: string;\n\tleafId: string | null;\n\tentryCount: number;\n\tlimitsModel: AgentSession[\"model\"];\n\tcontextUsage: ContextUsage | undefined;\n}\n\nconst mirrorStats = new WeakMap<AgentSession, MirrorStats>();\n\nfunction getCacheHitRate(usage: Usage): number | undefined {\n\tconst promptTokens = usage.input + usage.cacheRead + usage.cacheWrite;\n\treturn promptTokens > 0 ? (usage.cacheRead / promptTokens) * 100 : undefined;\n}\n\nfunction summarizeEngineUsage(stats: SessionStats): UsageSummary {\n\tconst { input, output, cacheRead, cacheWrite } = stats.tokens;\n\treturn {\n\t\ttotals: { input, output, cacheRead, cacheWrite, cost: stats.cost },\n\t\tlatestCacheHitRate: stats.latestAssistantUsage ? getCacheHitRate(stats.latestAssistantUsage) : undefined,\n\t};\n}\n\nfunction summarizeEntryUsage(session: AgentSession): UsageSummary {\n\t// Calculate cumulative usage from ALL session entries (not just post-compaction messages)\n\tconst totals = createUsageTotals();\n\tlet latestCacheHitRate: number | undefined;\n\n\tfor (const entry of session.sessionManager.getEntries()) {\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\taddUsageToTotals(totals, entry.message.usage);\n\t\t\tlatestCacheHitRate = getCacheHitRate(entry.message.usage);\n\t\t} else if (\n\t\t\t(entry.type === \"branch_summary\" || entry.type === \"session_summary\" || entry.type === \"compaction\") &&\n\t\t\tentry.usage\n\t\t) {\n\t\t\taddUsageToTotals(totals, entry.usage);\n\t\t} else if (\n\t\t\tentry.type === \"message\" &&\n\t\t\tentry.message.role === \"toolResult\" &&\n\t\t\t\"usage\" in entry.message &&\n\t\t\tentry.message.usage\n\t\t) {\n\t\t\taddUsageToTotals(totals, entry.message.usage);\n\t\t}\n\t}\n\treturn { totals, latestCacheHitRate };\n}\n\nfunction getMirrorStats(session: AgentSession): MirrorStats {\n\tconst manager = session.sessionManager;\n\tconst sessionId = manager.getSessionId();\n\tconst leafId = manager.getLeafId();\n\tconst entryCount = manager.getEntryCount();\n\tconst limitsModel = session.model;\n\tconst cached = mirrorStats.get(session);\n\tif (\n\t\tcached &&\n\t\tcached.sessionId === sessionId &&\n\t\tcached.leafId === leafId &&\n\t\tcached.entryCount === entryCount &&\n\t\tcached.limitsModel === limitsModel\n\t)\n\t\treturn cached;\n\n\tconst { totals, latestCacheHitRate } = summarizeEntryUsage(session);\n\tconst contextUsage = session.getContextUsage();\n\tconst stats = { sessionId, leafId, entryCount, limitsModel, totals, latestCacheHitRate, contextUsage };\n\tmirrorStats.set(session, stats);\n\treturn stats;\n}\n\nfunction getUsageLine(session: AgentSession, autoCompactEnabled: boolean, width: number): string {\n\tconst state = session.state;\n\t// An isolated engine owns the live session; its stats replace the host's mirror entries.\n\tconst engineStats = getEngineSessionStats(session);\n\tconst { totals, latestCacheHitRate, contextUsage } = engineStats\n\t\t? { ...summarizeEngineUsage(engineStats), contextUsage: engineStats.contextUsage }\n\t\t: getMirrorStats(session);\n\tconst contextWindow = contextUsage?.contextWindow ?? state.model?.contextWindow ?? 0;\n\tconst contextPercentValue = contextUsage?.percent ?? 0;\n\tconst contextPercent = contextUsage?.percent !== null ? contextPercentValue.toFixed(1) : \"?\";\n\n\tconst usageParts = [];\n\tif (totals.input) usageParts.push(`${theme.fg(\"dim\", \"↑\")}${theme.fg(\"muted\", formatTokens(totals.input))}`);\n\tif (totals.output) usageParts.push(`${theme.fg(\"dim\", \"↓\")}${theme.fg(\"muted\", formatTokens(totals.output))}`);\n\tif (totals.cacheRead) usageParts.push(`${theme.fg(\"dim\", \"R\")}${theme.fg(\"muted\", formatTokens(totals.cacheRead))}`);\n\tif (totals.cacheWrite)\n\t\tusageParts.push(`${theme.fg(\"dim\", \"W\")}${theme.fg(\"muted\", formatTokens(totals.cacheWrite))}`);\n\tif ((totals.cacheRead > 0 || totals.cacheWrite > 0) && latestCacheHitRate !== undefined) {\n\t\tusageParts.push(`${theme.fg(\"dim\", \"CH\")}${theme.fg(\"muted\", `${latestCacheHitRate.toFixed(1)}%`)}`);\n\t}\n\n\t// Kimi Coding is subscription-backed despite using API-key authentication.\n\tconst usingSubscription = state.model\n\t\t? state.model.provider === \"kimi-coding\" || session.modelRuntime.isUsingOAuth(state.model.provider)\n\t\t: false;\n\tif (totals.cost || usingSubscription) {\n\t\tusageParts.push(\n\t\t\t`${theme.fg(\"muted\", `$${totals.cost.toFixed(3)}`)}${usingSubscription ? ` ${theme.fg(\"dim\", \"(sub)\")}` : \"\"}`,\n\t\t);\n\t}\n\n\tconst autoIndicator = autoCompactEnabled ? \" (auto)\" : \"\";\n\tconst contextPercentDisplay =\n\t\tcontextPercent === \"?\"\n\t\t\t? `?/${formatTokens(contextWindow)}${autoIndicator}`\n\t\t\t: `${contextPercent}%/${formatTokens(contextWindow)}${autoIndicator}`;\n\tif (autoCompactEnabled && contextPercentValue > 70) {\n\t\tusageParts.push(theme.fg(\"warning\", contextPercentDisplay));\n\t} else if (contextPercentValue > 90) {\n\t\tusageParts.push(theme.fg(\"error\", contextPercentDisplay));\n\t} else if (contextPercentValue > 70) {\n\t\tusageParts.push(theme.fg(\"warning\", contextPercentDisplay));\n\t} else {\n\t\tusageParts.push(theme.fg(\"muted\", contextPercentDisplay));\n\t}\n\n\tconst separator = theme.fg(\"dim\", \" • \");\n\tconst usageText = usageParts.length > 0 ? usageParts.join(separator) : theme.fg(\"muted\", contextPercentDisplay);\n\treturn rightAlign(usageText, width);\n}\n\nexport function formatCwdForFooter(cwd: string, home: string | undefined): string {\n\tif (!home) return cwd;\n\n\tconst resolvedCwd = resolve(cwd);\n\tconst resolvedHome = resolve(home);\n\tconst relativeToHome = relative(resolvedHome, resolvedCwd);\n\tconst isInsideHome =\n\t\trelativeToHome === \"\" ||\n\t\t(relativeToHome !== \"..\" && !relativeToHome.startsWith(`..${sep}`) && !isAbsolute(relativeToHome));\n\n\tif (!isInsideHome) return cwd;\n\treturn relativeToHome === \"\" ? \"~\" : `~${sep}${relativeToHome}`;\n}\n\n/**\n * Right-aligned usage meter that sits above the composer, matching the approved\n * prototype's separate token/cost/context ribbon.\n */\nexport class UsageMeterComponent implements Component {\n\tprivate autoCompactEnabled = true;\n\n\tprivate declare session: AgentSession;\n\n\tconstructor(session: AgentSession) {\n\t\tthis.session = session;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(enabled: boolean): void {\n\t\tthis.autoCompactEnabled = enabled;\n\t}\n\n\tinvalidate(): void {\n\t\t// Render pulls live session data.\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [getUsageLine(this.session, this.autoCompactEnabled, width)];\n\t}\n}\n\n/**\n * Sparse statusline below the composer. It mirrors the preview: model + cwd\n * when idle, or one semantic dot with short recovery copy while work is live.\n */\nexport class FooterComponent implements Component {\n\tprivate declare session: AgentSession;\n\tprivate declare footerData: ReadonlyFooterDataProvider;\n\tprivate declare readonly renderStyle: FooterRenderStyle;\n\tprivate readonly navigationActive: () => boolean;\n\tprivate branchCwd: string | undefined;\n\tprivate releaseBranch: (() => void) | undefined;\n\tprivate disposed = false;\n\n\tconstructor(\n\t\tsession: AgentSession,\n\t\tfooterData: ReadonlyFooterDataProvider,\n\t\trenderStyle: FooterRenderStyle = defaultFooterRenderStyle,\n\t\tnavigationActive: () => boolean = () => false,\n\t) {\n\t\tthis.session = session;\n\t\tthis.footerData = footerData;\n\t\tthis.renderStyle = renderStyle;\n\t\tthis.navigationActive = navigationActive;\n\t}\n\n\tsetSession(session: AgentSession): void {\n\t\tif (this.session !== session) {\n\t\t\tthis.releaseBranch?.();\n\t\t\tthis.releaseBranch = undefined;\n\t\t\tthis.branchCwd = undefined;\n\t\t}\n\t\tthis.session = session;\n\t}\n\n\tsetAutoCompactEnabled(_enabled: boolean): void {\n\t\t// Usage state lives in UsageMeterComponent. Kept for compatibility with existing call sites.\n\t}\n\n\t/**\n\t * No-op: git branch caching now handled by provider.\n\t * Kept for compatibility with existing call sites in interactive-mode.\n\t */\n\tinvalidate(): void {\n\t\t// No-op: git branch is cached/invalidated by provider\n\t}\n\n\t/** Release this viewer's branch subscription without disposing shared footer data. */\n\tdispose(): void {\n\t\tthis.disposed = true;\n\t\tthis.releaseBranch?.();\n\t\tthis.releaseBranch = undefined;\n\t}\n\n\trender(width: number): string[] {\n\t\tif (this.disposed) return [];\n\t\tconst state = this.session.state;\n\t\tconst cwd = this.session.sessionManager.getCwd();\n\t\tif (this.branchCwd !== cwd) {\n\t\t\tthis.releaseBranch?.();\n\t\t\t// Repaints are requested by the host's existing shared branch subscription.\n\t\t\tthis.releaseBranch = this.footerData.onBranchChange(() => {}, cwd);\n\t\t\tthis.branchCwd = cwd;\n\t\t}\n\t\tlet pwd = replaceHome(cwd);\n\t\tconst branch = this.footerData.getGitBranch(cwd);\n\t\tif (branch) pwd += ` (${branch})`;\n\t\tconst sessionName =\n\t\t\ttypeof this.session.sessionManager.getSessionName === \"function\"\n\t\t\t\t? this.session.sessionManager.getSessionName()\n\t\t\t\t: undefined;\n\t\tif (sessionName) pwd += ` • ${sessionName}`;\n\n\t\tconst modelName = state.model?.id || \"no-model\";\n\t\tlet modelLabel = modelName;\n\t\tif (state.model?.reasoning) {\n\t\t\tconst thinkingLevel = state.thinkingLevel || \"off\";\n\t\t\tmodelLabel = thinkingLevel === \"off\" ? modelLabel : `${modelLabel} ${thinkingLevel}`;\n\t\t}\n\t\tif (this.footerData.getAvailableProviderCount() > 1 && state.model) {\n\t\t\tmodelLabel = `(${state.model.provider}) ${modelLabel}`;\n\t\t}\n\n\t\tconst liveState =\n\t\t\tthis.session.isStreaming && !this.navigationActive() ? this.renderStyle.muted(\"esc to interrupt\") : undefined;\n\t\tlet statusText =\n\t\t\tliveState ?? `${this.renderStyle.dim(modelLabel)} ${this.renderStyle.dim(\"•\")} ${this.renderStyle.muted(pwd)}`;\n\t\tif (areExperimentalFeaturesEnabled()) statusText += ` ${this.renderStyle.warning(\"xp\")}`;\n\t\tconst lines = [truncateToWidth(statusText, width, this.renderStyle.dim(\"...\"))];\n\t\tconst statuses = [...this.footerData.getExtensionStatuses()].sort(([a], [b]) => a.localeCompare(b));\n\t\tif (statuses.length > 0) {\n\t\t\tlines.push(\n\t\t\t\ttruncateToWidth(\n\t\t\t\t\tstatuses.map(([, text]) => sanitizeStatusText(text)).join(` ${this.renderStyle.dim(\"•\")} `),\n\t\t\t\t\twidth,\n\t\t\t\t\tthis.renderStyle.dim(\"...\"),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tlines.push(...renderTaskFooter(getOwnerTaskStore(this.session)?.backgroundTasks ?? [], width));\n\t\treturn lines;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-handlers.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGX,iBAAiB,EAEjB,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"settings-selector-handlers.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGX,iBAAiB,EAEjB,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CA8GhH"}
|
|
@@ -84,6 +84,9 @@ export function createSettingsChangeHandler(callbacks) {
|
|
|
84
84
|
case "fullscreen-copy-on-select":
|
|
85
85
|
callbacks.onFullscreenCopyOnSelectChange(newValue === "true");
|
|
86
86
|
break;
|
|
87
|
+
case "fullscreen-wheel-scroll-lines":
|
|
88
|
+
callbacks.onFullscreenWheelScrollLinesChange?.(newValue === "auto" ? "auto" : Number(newValue));
|
|
89
|
+
break;
|
|
87
90
|
case "editor-padding":
|
|
88
91
|
callbacks.onEditorPaddingXChange(parseInt(newValue, 10));
|
|
89
92
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-handlers.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\nimport { DEFAULT_HTTP_IDLE_TIMEOUT_MS, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport type { CacheWarmingMode, FullscreenExitOutput, MermaidRenderingMode } from \"../../../core/settings-manager.ts\";\nimport { DEFAULT_PROJECT_TRUST_BY_LABEL } from \"./settings-selector-options.ts\";\nimport type {\n\tDoubleEscapeAction,\n\tQueueDeliveryMode,\n\tSettingsCallbacks,\n\tTreeFilterMode,\n} from \"./settings-selector-types.ts\";\n\nexport function createSettingsChangeHandler(callbacks: SettingsCallbacks): (id: string, newValue: string) => void {\n\treturn (id, newValue) => {\n\t\tswitch (id) {\n\t\t\tcase \"autocompact\":\n\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"show-images\":\n\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"image-width-cells\":\n\t\t\t\tcallbacks.onImageWidthCellsChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"auto-resize-images\":\n\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"block-images\":\n\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"skill-commands\":\n\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"steering-mode\":\n\t\t\t\tcallbacks.onSteeringModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"follow-up-mode\":\n\t\t\t\tcallbacks.onFollowUpModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"transport\":\n\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\tbreak;\n\t\t\tcase \"http-idle-timeout\": {\n\t\t\t\tconst selected = HTTP_IDLE_TIMEOUT_CHOICES.find((choice) => choice.label === newValue);\n\t\t\t\tcallbacks.onHttpIdleTimeoutChange(selected?.timeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"cache-warming\":\n\t\t\t\tcallbacks.onCacheWarmingChange(newValue as CacheWarmingMode);\n\t\t\t\tbreak;\n\t\t\tcase \"bash-interceptor\":\n\t\t\t\tcallbacks.onBashInterceptorEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"hide-thinking\":\n\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"mermaid-rendering\":\n\t\t\t\tcallbacks.onMermaidRenderingModeChange(newValue as MermaidRenderingMode);\n\t\t\t\tbreak;\n\t\t\tcase \"latex-rendering\":\n\t\t\t\tcallbacks.onLatexRenderingEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"collapse-changelog\":\n\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"quiet-startup\":\n\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"install-telemetry\":\n\t\t\t\tcallbacks.onEnableInstallTelemetryChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"default-project-trust\": {\n\t\t\t\tconst defaultProjectTrust = DEFAULT_PROJECT_TRUST_BY_LABEL.get(newValue);\n\t\t\t\tif (defaultProjectTrust) {\n\t\t\t\t\tcallbacks.onDefaultProjectTrustChange(defaultProjectTrust);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"double-escape-action\":\n\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as DoubleEscapeAction);\n\t\t\t\tbreak;\n\t\t\tcase \"tree-filter-mode\":\n\t\t\t\tcallbacks.onTreeFilterModeChange(newValue as TreeFilterMode);\n\t\t\t\tbreak;\n\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-scrollbar\":\n\t\t\t\tcallbacks.onFullscreenScrollbarChange(newValue as ScrollViewScrollbar);\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-exit-output\":\n\t\t\t\tcallbacks.onFullscreenExitOutputChange(newValue as FullscreenExitOutput);\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-copy-on-select\":\n\t\t\t\tcallbacks.onFullscreenCopyOnSelectChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"editor-padding\":\n\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"output-padding\":\n\t\t\t\tcallbacks.onOutputPadChange(newValue === \"0\" ? 0 : 1);\n\t\t\t\tbreak;\n\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"clear-on-shrink\":\n\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"terminal-progress\":\n\t\t\t\tcallbacks.onShowTerminalProgressChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"cache-miss-notices\":\n\t\t\t\tcallbacks.onShowCacheMissNoticesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"theme\":\n\t\t\t\tcallbacks.onThemeChange(newValue);\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-selector-handlers.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-handlers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\nimport { DEFAULT_HTTP_IDLE_TIMEOUT_MS, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport type { CacheWarmingMode, FullscreenExitOutput, MermaidRenderingMode } from \"../../../core/settings-manager.ts\";\nimport { DEFAULT_PROJECT_TRUST_BY_LABEL } from \"./settings-selector-options.ts\";\nimport type {\n\tDoubleEscapeAction,\n\tQueueDeliveryMode,\n\tSettingsCallbacks,\n\tTreeFilterMode,\n} from \"./settings-selector-types.ts\";\n\nexport function createSettingsChangeHandler(callbacks: SettingsCallbacks): (id: string, newValue: string) => void {\n\treturn (id, newValue) => {\n\t\tswitch (id) {\n\t\t\tcase \"autocompact\":\n\t\t\t\tcallbacks.onAutoCompactChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"show-images\":\n\t\t\t\tcallbacks.onShowImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"image-width-cells\":\n\t\t\t\tcallbacks.onImageWidthCellsChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"auto-resize-images\":\n\t\t\t\tcallbacks.onAutoResizeImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"block-images\":\n\t\t\t\tcallbacks.onBlockImagesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"skill-commands\":\n\t\t\t\tcallbacks.onEnableSkillCommandsChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"steering-mode\":\n\t\t\t\tcallbacks.onSteeringModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"follow-up-mode\":\n\t\t\t\tcallbacks.onFollowUpModeChange(newValue as QueueDeliveryMode);\n\t\t\t\tbreak;\n\t\t\tcase \"transport\":\n\t\t\t\tcallbacks.onTransportChange(newValue as Transport);\n\t\t\t\tbreak;\n\t\t\tcase \"http-idle-timeout\": {\n\t\t\t\tconst selected = HTTP_IDLE_TIMEOUT_CHOICES.find((choice) => choice.label === newValue);\n\t\t\t\tcallbacks.onHttpIdleTimeoutChange(selected?.timeoutMs ?? DEFAULT_HTTP_IDLE_TIMEOUT_MS);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"cache-warming\":\n\t\t\t\tcallbacks.onCacheWarmingChange(newValue as CacheWarmingMode);\n\t\t\t\tbreak;\n\t\t\tcase \"bash-interceptor\":\n\t\t\t\tcallbacks.onBashInterceptorEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"hide-thinking\":\n\t\t\t\tcallbacks.onHideThinkingBlockChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"mermaid-rendering\":\n\t\t\t\tcallbacks.onMermaidRenderingModeChange(newValue as MermaidRenderingMode);\n\t\t\t\tbreak;\n\t\t\tcase \"latex-rendering\":\n\t\t\t\tcallbacks.onLatexRenderingEnabledChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"collapse-changelog\":\n\t\t\t\tcallbacks.onCollapseChangelogChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"quiet-startup\":\n\t\t\t\tcallbacks.onQuietStartupChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"install-telemetry\":\n\t\t\t\tcallbacks.onEnableInstallTelemetryChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"default-project-trust\": {\n\t\t\t\tconst defaultProjectTrust = DEFAULT_PROJECT_TRUST_BY_LABEL.get(newValue);\n\t\t\t\tif (defaultProjectTrust) {\n\t\t\t\t\tcallbacks.onDefaultProjectTrustChange(defaultProjectTrust);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"double-escape-action\":\n\t\t\t\tcallbacks.onDoubleEscapeActionChange(newValue as DoubleEscapeAction);\n\t\t\t\tbreak;\n\t\t\tcase \"tree-filter-mode\":\n\t\t\t\tcallbacks.onTreeFilterModeChange(newValue as TreeFilterMode);\n\t\t\t\tbreak;\n\t\t\tcase \"show-hardware-cursor\":\n\t\t\t\tcallbacks.onShowHardwareCursorChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-scrollbar\":\n\t\t\t\tcallbacks.onFullscreenScrollbarChange(newValue as ScrollViewScrollbar);\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-exit-output\":\n\t\t\t\tcallbacks.onFullscreenExitOutputChange(newValue as FullscreenExitOutput);\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-copy-on-select\":\n\t\t\t\tcallbacks.onFullscreenCopyOnSelectChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"fullscreen-wheel-scroll-lines\":\n\t\t\t\tcallbacks.onFullscreenWheelScrollLinesChange?.(newValue === \"auto\" ? \"auto\" : Number(newValue));\n\t\t\t\tbreak;\n\t\t\tcase \"editor-padding\":\n\t\t\t\tcallbacks.onEditorPaddingXChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"output-padding\":\n\t\t\t\tcallbacks.onOutputPadChange(newValue === \"0\" ? 0 : 1);\n\t\t\t\tbreak;\n\t\t\tcase \"autocomplete-max-visible\":\n\t\t\t\tcallbacks.onAutocompleteMaxVisibleChange(parseInt(newValue, 10));\n\t\t\t\tbreak;\n\t\t\tcase \"clear-on-shrink\":\n\t\t\t\tcallbacks.onClearOnShrinkChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"terminal-progress\":\n\t\t\t\tcallbacks.onShowTerminalProgressChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"cache-miss-notices\":\n\t\t\t\tcallbacks.onShowCacheMissNoticesChange(newValue === \"true\");\n\t\t\t\tbreak;\n\t\t\tcase \"theme\":\n\t\t\t\tcallbacks.onThemeChange(newValue);\n\t\t\t\tbreak;\n\t\t}\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-items.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"settings-selector-items.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAK3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAqJtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,GAAG,WAAW,EAAE,CA2QtG"}
|
|
@@ -85,6 +85,19 @@ function insertUiToggles(items, config) {
|
|
|
85
85
|
values: ["true", "false"],
|
|
86
86
|
});
|
|
87
87
|
insertAfter(items, "fullscreen-copy-on-select", {
|
|
88
|
+
id: "fullscreen-wheel-scroll-lines",
|
|
89
|
+
label: "Fullscreen wheel scroll lines",
|
|
90
|
+
description: "Lines per wheel event, or auto acceleration",
|
|
91
|
+
currentValue: String(config.fullscreenWheelScrollLines ?? "auto"),
|
|
92
|
+
values: [
|
|
93
|
+
"auto",
|
|
94
|
+
...[...new Set([1, 2, 3, 5, 10, config.fullscreenWheelScrollLines])]
|
|
95
|
+
.filter((lines) => typeof lines === "number")
|
|
96
|
+
.sort((a, b) => a - b)
|
|
97
|
+
.map(String),
|
|
98
|
+
],
|
|
99
|
+
});
|
|
100
|
+
insertAfter(items, "fullscreen-wheel-scroll-lines", {
|
|
88
101
|
id: "editor-padding",
|
|
89
102
|
label: "Editor padding",
|
|
90
103
|
description: "Horizontal padding for input editor (0-3)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-items.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"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","sourcesContent":["import { isModelType } from \"@bastani/pi-ai\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getCapabilities, type SettingItem } from \"@earendil-works/pi-tui\";\nimport { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { keyDisplayText } from \"./keybinding-hints.js\";\nimport { DEFAULT_PROJECT_TRUST_LABELS } from \"./settings-selector-options.ts\";\nimport { SelectSubmenu, ThemeSubmenu, WarningSettingsSubmenu } from \"./settings-selector-submenus.ts\";\nimport type { SettingsCallbacks, SettingsConfig } from \"./settings-selector-types.ts\";\n\n/**\n * Sentinel row shown when no default-model catalog entry exists to configure.\n * Upstream uses a double-underscore `none` marker; Atomic must not, because\n * `test/ci/subagents-clean-break-contracts.test.ts` bans that exact literal as\n * a deleted subagent environment key.\n */\nconst NO_DEFAULT_MODELS_VALUE = \"__no-models__\";\n\nfunction insertImageItems(items: SettingItem[], config: SettingsConfig): void {\n\tif (!getCapabilities().images) return;\n\n\titems.splice(1, 0, {\n\t\tid: \"show-images\",\n\t\tlabel: \"Show images\",\n\t\tdescription: \"Render images inline in terminal\",\n\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\titems.splice(2, 0, {\n\t\tid: \"image-width-cells\",\n\t\tlabel: \"Image width\",\n\t\tdescription: \"Preferred inline image width in terminal cells\",\n\t\tcurrentValue: String(config.imageWidthCells),\n\t\tvalues: [\"60\", \"80\", \"120\"],\n\t});\n}\n\nfunction insertAfter(items: SettingItem[], afterId: string, item: SettingItem): void {\n\tconst index = items.findIndex((candidate) => candidate.id === afterId);\n\titems.splice(index + 1, 0, item);\n}\n\nfunction insertUiToggles(items: SettingItem[], config: SettingsConfig): void {\n\tconst supportsImages = getCapabilities().images;\n\titems.splice(supportsImages ? 3 : 1, 0, {\n\t\tid: \"auto-resize-images\",\n\t\tlabel: \"Auto-resize images\",\n\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"auto-resize-images\", {\n\t\tid: \"block-images\",\n\t\tlabel: \"Block images\",\n\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"block-images\", {\n\t\tid: \"skill-commands\",\n\t\tlabel: \"Skill commands\",\n\t\tdescription: \"Register skills as /skill:name commands\",\n\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"skill-commands\", {\n\t\tid: \"show-hardware-cursor\",\n\t\tlabel: \"Show hardware cursor\",\n\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"show-hardware-cursor\", {\n\t\tid: \"fullscreen-scrollbar\",\n\t\tlabel: \"Fullscreen scrollbar\",\n\t\tdescription: \"Scrollbar behavior for the fullscreen transcript\",\n\t\tcurrentValue: config.fullscreenScrollbar,\n\t\tvalues: [\"auto\", \"always\", \"hidden\"],\n\t});\n\tinsertAfter(items, \"fullscreen-scrollbar\", {\n\t\tid: \"fullscreen-exit-output\",\n\t\tlabel: \"Fullscreen exit output\",\n\t\tdescription: \"Print the transcript or only a session resume hint when exiting\",\n\t\tcurrentValue: config.fullscreenExitOutput,\n\t\tvalues: [\"transcript\", \"resume-hint\"],\n\t});\n\tinsertAfter(items, \"fullscreen-exit-output\", {\n\t\tid: \"fullscreen-copy-on-select\",\n\t\tlabel: \"Fullscreen copy on select\",\n\t\tdescription: \"Copy selected transcript text automatically on mouse release\",\n\t\tcurrentValue: config.fullscreenCopyOnSelect ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"fullscreen-copy-on-select\", {\n\t\tid: \"editor-padding\",\n\t\tlabel: \"Editor padding\",\n\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\tcurrentValue: String(config.editorPaddingX),\n\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t});\n\tinsertAfter(items, \"editor-padding\", {\n\t\tid: \"output-padding\",\n\t\tlabel: \"Output padding\",\n\t\tdescription: \"Horizontal padding for rendered chat output (0-1)\",\n\t\tcurrentValue: String(config.outputPad),\n\t\tvalues: [\"0\", \"1\"],\n\t});\n\tinsertAfter(items, \"output-padding\", {\n\t\tid: \"autocomplete-max-visible\",\n\t\tlabel: \"Autocomplete max items\",\n\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t});\n\tinsertAfter(items, \"autocomplete-max-visible\", {\n\t\tid: \"clear-on-shrink\",\n\t\tlabel: \"Clear on shrink\",\n\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"clear-on-shrink\", {\n\t\tid: \"terminal-progress\",\n\t\tlabel: \"Terminal progress\",\n\t\tdescription: \"Show OSC 9;4 progress indicators in the terminal tab bar\",\n\t\tcurrentValue: config.showTerminalProgress ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"terminal-progress\", {\n\t\tid: \"cache-miss-notices\",\n\t\tlabel: \"Cache miss notices\",\n\t\tdescription: \"Show cache costs and provider recovery diagnostics\",\n\t\tcurrentValue: config.showCacheMissNotices ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"cache-miss-notices\", {\n\t\tid: \"cache-warming\",\n\t\tlabel: \"Cache warming\",\n\t\tdescription: \"Refresh prompt caches before they expire. Each refresh costs money.\",\n\t\tcurrentValue: config.cacheWarming,\n\t\tvalues: [\"off\", \"streaming\", \"idle\"],\n\t});\n}\n\nexport function buildSettingsItems(config: SettingsConfig, callbacks: SettingsCallbacks): SettingItem[] {\n\tconst followUpKey = keyDisplayText(\"app.message.followUp\");\n\tlet currentWarnings = { ...config.warnings };\n\n\tconst items: SettingItem[] = [\n\t\t{\n\t\t\tid: \"autocompact\",\n\t\t\tlabel: \"Auto-compact\",\n\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"steering-mode\",\n\t\t\tlabel: \"Steering mode\",\n\t\t\tdescription:\n\t\t\t\t\"enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\tcurrentValue: config.steeringMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"follow-up-mode\",\n\t\t\tlabel: \"Follow-up mode\",\n\t\t\tdescription: `${followUpKey} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\tcurrentValue: config.followUpMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"transport\",\n\t\t\tlabel: \"Transport\",\n\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\tcurrentValue: config.transport,\n\t\t\tvalues: [\"sse\", \"websocket\", \"websocket-cached\", \"auto\"],\n\t\t},\n\t\t{\n\t\t\tid: \"http-idle-timeout\",\n\t\t\tlabel: \"HTTP idle timeout\",\n\t\t\tdescription:\n\t\t\t\t\"Maximum idle gap while waiting for HTTP headers or body chunks. Disable for local models that pause longer than five minutes.\",\n\t\t\tcurrentValue: formatHttpIdleTimeoutMs(config.httpIdleTimeoutMs),\n\t\t\tvalues: HTTP_IDLE_TIMEOUT_CHOICES.map((choice) => choice.label),\n\t\t},\n\t\t{\n\t\t\tid: \"bash-interceptor\",\n\t\t\tlabel: \"Bash Interceptor\",\n\t\t\tdescription: \"Block shell commands that have dedicated tools\",\n\t\t\tcurrentValue: config.bashInterceptorEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"hide-thinking\",\n\t\t\tlabel: \"Hide thinking\",\n\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"mermaid-rendering\",\n\t\t\tlabel: \"Mermaid diagrams\",\n\t\t\tdescription: \"Render Mermaid code blocks as Unicode diagrams\",\n\t\t\tcurrentValue: config.mermaidRenderingMode,\n\t\t\tvalues: [\"off\", \"final\", \"streaming\"],\n\t\t},\n\t\t{\n\t\t\tid: \"latex-rendering\",\n\t\t\tlabel: \"LaTeX math\",\n\t\t\tdescription: \"Render LaTeX expressions as Unicode math\",\n\t\t\tcurrentValue: config.latexRenderingEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"collapse-changelog\",\n\t\t\tlabel: \"Collapse changelog\",\n\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"quiet-startup\",\n\t\t\tlabel: \"Quiet startup\",\n\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"install-telemetry\",\n\t\t\tlabel: \"Install telemetry\",\n\t\t\tdescription:\n\t\t\t\t\"Send a version-adoption ping on the first interactive launch with fresh settings or after an update with changelog entries\",\n\t\t\tcurrentValue: config.enableInstallTelemetry ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"default-project-trust\",\n\t\t\tlabel: \"Default project trust\",\n\t\t\tdescription: \"Fallback behavior when no extension or saved trust decision decides project trust\",\n\t\t\tcurrentValue: DEFAULT_PROJECT_TRUST_LABELS[config.defaultProjectTrust],\n\t\t\tvalues: Object.values(DEFAULT_PROJECT_TRUST_LABELS),\n\t\t},\n\t\t{\n\t\t\tid: \"double-escape-action\",\n\t\t\tlabel: \"Double-escape action\",\n\t\t\tdescription: \"Action when pressing esc twice with empty editor\",\n\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t},\n\t\t{\n\t\t\tid: \"tree-filter-mode\",\n\t\t\tlabel: \"Tree filter mode\",\n\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"warnings\",\n\t\t\tlabel: \"Warnings\",\n\t\t\tdescription: \"Enable or disable individual warnings\",\n\t\t\tcurrentValue: \"configure\",\n\t\t\tsubmenu: (_currentValue, done) =>\n\t\t\t\tnew WarningSettingsSubmenu(\n\t\t\t\t\tcurrentWarnings,\n\t\t\t\t\t(warnings) => {\n\t\t\t\t\t\tcurrentWarnings = warnings;\n\t\t\t\t\t\tcallbacks.onWarningsChange(warnings);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"router-model\",\n\t\t\tlabel: \"Router model\",\n\t\t\tdescription: `Saves to ${config.routerModelScope ?? \"global\"} settings; affects routing decisions, not the chat model`,\n\t\t\tcurrentValue: config.routerModel && config.routerModel !== \"auto\" ? config.routerModel : \"Automatic\",\n\t\t\tsubmenu: (_currentValue, done) => {\n\t\t\t\tconst current = config.routerModel === \"auto\" ? \"\" : (config.routerModel ?? \"\");\n\t\t\t\tconst options = [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: \"\",\n\t\t\t\t\t\tlabel: \"Automatic\",\n\t\t\t\t\t\tdescription: \"Use the current chat model\",\n\t\t\t\t\t},\n\t\t\t\t\t...(config.availableClassifierModels ?? []).map((model) => ({\n\t\t\t\t\t\tvalue: `${model.provider}/${model.id}`,\n\t\t\t\t\t\tlabel: `${model.provider}/${model.id}`,\n\t\t\t\t\t\tdescription: model.name,\n\t\t\t\t\t})),\n\t\t\t\t\t...(config.availableDefaultModels ?? [])\n\t\t\t\t\t\t.filter((model) => isModelType(model, \"chat\"))\n\t\t\t\t\t\t.map((model) => ({\n\t\t\t\t\t\t\tvalue: `${model.provider}/${model.id}`,\n\t\t\t\t\t\t\tlabel: `${model.provider}/${model.id}`,\n\t\t\t\t\t\t\tdescription: model.name,\n\t\t\t\t\t\t})),\n\t\t\t\t];\n\t\t\t\tif (current && !options.some((option) => option.value === current)) {\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tvalue: current,\n\t\t\t\t\t\tlabel: current,\n\t\t\t\t\t\tdescription: \"Configured model is not currently available\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn new SelectSubmenu(\n\t\t\t\t\t\"Router model\",\n\t\t\t\t\t`Saves to ${config.routerModelScope ?? \"global\"} settings. Choose a provider permitted to receive routing context. Automatic saves an empty routerModel.`,\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tlabel: `${option.value === current ? \"✓ \" : \" \"}${option.label}`,\n\t\t\t\t\t})),\n\t\t\t\t\tcurrent,\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tcallbacks.onRouterModelChange?.(value);\n\t\t\t\t\t\tconfig.routerModel = value;\n\t\t\t\t\t\tdone(value || \"Automatic\");\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"model-thinking\",\n\t\t\tlabel: \"Default thinking level per model\",\n\t\t\tdescription: \"Search models and set a startup thinking override\",\n\t\t\tcurrentValue:\n\t\t\t\tObject.keys(config.modelThinkingLevels ?? {}).length === 0\n\t\t\t\t\t? \"none\"\n\t\t\t\t\t: `${Object.keys(config.modelThinkingLevels ?? {}).length} configured`,\n\t\t\tsubmenu: (_currentValue, done) => {\n\t\t\t\tconst levels: ThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\t\t\t\tconst thinkingCountLabel = () => {\n\t\t\t\t\tconst count = Object.keys(config.modelThinkingLevels ?? {}).length;\n\t\t\t\t\treturn count === 0 ? \"none\" : `${count} configured`;\n\t\t\t\t};\n\t\t\t\tconst options = (config.availableDefaultModels ?? []).flatMap((model) => {\n\t\t\t\t\tconst key = `${model.provider}/${model.id}`;\n\t\t\t\t\tconst available = model.reasoning ? levels : ([\"off\"] as ThinkingLevel[]);\n\t\t\t\t\t// Upstream pi #8900 marks the active option with a leading \"✓ \" so it stays\n\t\t\t\t\t// visible while the cursor browses elsewhere. Upstream marks the level label;\n\t\t\t\t\t// Atomic flattened the two-stage picker into one model × level list, so the\n\t\t\t\t\t// marker goes on the row whose level is the configured override.\n\t\t\t\t\tconst activeLevel = config.modelThinkingLevels?.[key];\n\t\t\t\t\tconst items = available.map((level) => ({\n\t\t\t\t\t\tvalue: `${key}\\0${level}`,\n\t\t\t\t\t\tlabel: `${level === activeLevel ? \"✓ \" : \" \"}${model.id} [${model.provider}]`,\n\t\t\t\t\t\tdescription: `${level}${activeLevel === level ? \" · default\" : \"\"}`,\n\t\t\t\t\t}));\n\t\t\t\t\tif (activeLevel !== undefined)\n\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\tvalue: `${key}\\0`,\n\t\t\t\t\t\t\tlabel: ` ${model.id} [${model.provider}]`,\n\t\t\t\t\t\t\tdescription: \"clear override\",\n\t\t\t\t\t\t});\n\t\t\t\t\treturn items;\n\t\t\t\t});\n\t\t\t\t// An empty catalog must explain itself instead of opening a zero-row\n\t\t\t\t// picker; upstream 2ff8ba6223/5133c9284f use a sentinel row for this.\n\t\t\t\tif (options.length === 0)\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tvalue: NO_DEFAULT_MODELS_VALUE,\n\t\t\t\t\t\tlabel: \"No models available\",\n\t\t\t\t\t\tdescription: \"Log in to a provider or configure an API key first\",\n\t\t\t\t\t});\n\t\t\t\treturn new SelectSubmenu(\n\t\t\t\t\t\"Per-Model Thinking Level\",\n\t\t\t\t\t\"Select a model and thinking level\",\n\t\t\t\t\toptions,\n\t\t\t\t\t\"\",\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tif (value === NO_DEFAULT_MODELS_VALUE) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst [key, level] = value.split(\"\\0\");\n\t\t\t\t\t\tconst slash = key.indexOf(\"/\");\n\t\t\t\t\t\tconst provider = key.slice(0, slash);\n\t\t\t\t\t\tconst modelId = key.slice(slash + 1);\n\t\t\t\t\t\tif (level) {\n\t\t\t\t\t\t\tcallbacks.onModelThinkingLevelChange?.(provider, modelId, level as ThinkingLevel);\n\t\t\t\t\t\t\tconfig.modelThinkingLevels = { ...config.modelThinkingLevels, [key]: level as ThinkingLevel };\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallbacks.onModelThinkingLevelRemove?.(provider, modelId);\n\t\t\t\t\t\t\tconst next = { ...config.modelThinkingLevels };\n\t\t\t\t\t\t\tdelete next[key];\n\t\t\t\t\t\t\tconfig.modelThinkingLevels = next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(thinkingCountLabel());\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"theme\",\n\t\t\tlabel: \"Theme\",\n\t\t\tdescription: \"Color theme for the interface\",\n\t\t\tcurrentValue: config.currentTheme,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew ThemeSubmenu(currentValue, config.terminalTheme, config.availableThemes, callbacks, done),\n\t\t},\n\t];\n\n\tinsertImageItems(items, config);\n\tinsertUiToggles(items, config);\n\treturn items;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-selector-items.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-items.ts"],"names":[],"mappings":"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","sourcesContent":["import { isModelType } from \"@bastani/pi-ai\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getCapabilities, type SettingItem } from \"@earendil-works/pi-tui\";\nimport { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from \"../../../core/http-dispatcher.ts\";\nimport { keyDisplayText } from \"./keybinding-hints.js\";\nimport { DEFAULT_PROJECT_TRUST_LABELS } from \"./settings-selector-options.ts\";\nimport { SelectSubmenu, ThemeSubmenu, WarningSettingsSubmenu } from \"./settings-selector-submenus.ts\";\nimport type { SettingsCallbacks, SettingsConfig } from \"./settings-selector-types.ts\";\n\n/**\n * Sentinel row shown when no default-model catalog entry exists to configure.\n * Upstream uses a double-underscore `none` marker; Atomic must not, because\n * `test/ci/subagents-clean-break-contracts.test.ts` bans that exact literal as\n * a deleted subagent environment key.\n */\nconst NO_DEFAULT_MODELS_VALUE = \"__no-models__\";\n\nfunction insertImageItems(items: SettingItem[], config: SettingsConfig): void {\n\tif (!getCapabilities().images) return;\n\n\titems.splice(1, 0, {\n\t\tid: \"show-images\",\n\t\tlabel: \"Show images\",\n\t\tdescription: \"Render images inline in terminal\",\n\t\tcurrentValue: config.showImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\titems.splice(2, 0, {\n\t\tid: \"image-width-cells\",\n\t\tlabel: \"Image width\",\n\t\tdescription: \"Preferred inline image width in terminal cells\",\n\t\tcurrentValue: String(config.imageWidthCells),\n\t\tvalues: [\"60\", \"80\", \"120\"],\n\t});\n}\n\nfunction insertAfter(items: SettingItem[], afterId: string, item: SettingItem): void {\n\tconst index = items.findIndex((candidate) => candidate.id === afterId);\n\titems.splice(index + 1, 0, item);\n}\n\nfunction insertUiToggles(items: SettingItem[], config: SettingsConfig): void {\n\tconst supportsImages = getCapabilities().images;\n\titems.splice(supportsImages ? 3 : 1, 0, {\n\t\tid: \"auto-resize-images\",\n\t\tlabel: \"Auto-resize images\",\n\t\tdescription: \"Resize large images to 2000x2000 max for better model compatibility\",\n\t\tcurrentValue: config.autoResizeImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"auto-resize-images\", {\n\t\tid: \"block-images\",\n\t\tlabel: \"Block images\",\n\t\tdescription: \"Prevent images from being sent to LLM providers\",\n\t\tcurrentValue: config.blockImages ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"block-images\", {\n\t\tid: \"skill-commands\",\n\t\tlabel: \"Skill commands\",\n\t\tdescription: \"Register skills as /skill:name commands\",\n\t\tcurrentValue: config.enableSkillCommands ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"skill-commands\", {\n\t\tid: \"show-hardware-cursor\",\n\t\tlabel: \"Show hardware cursor\",\n\t\tdescription: \"Show the terminal cursor while still positioning it for IME support\",\n\t\tcurrentValue: config.showHardwareCursor ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"show-hardware-cursor\", {\n\t\tid: \"fullscreen-scrollbar\",\n\t\tlabel: \"Fullscreen scrollbar\",\n\t\tdescription: \"Scrollbar behavior for the fullscreen transcript\",\n\t\tcurrentValue: config.fullscreenScrollbar,\n\t\tvalues: [\"auto\", \"always\", \"hidden\"],\n\t});\n\tinsertAfter(items, \"fullscreen-scrollbar\", {\n\t\tid: \"fullscreen-exit-output\",\n\t\tlabel: \"Fullscreen exit output\",\n\t\tdescription: \"Print the transcript or only a session resume hint when exiting\",\n\t\tcurrentValue: config.fullscreenExitOutput,\n\t\tvalues: [\"transcript\", \"resume-hint\"],\n\t});\n\tinsertAfter(items, \"fullscreen-exit-output\", {\n\t\tid: \"fullscreen-copy-on-select\",\n\t\tlabel: \"Fullscreen copy on select\",\n\t\tdescription: \"Copy selected transcript text automatically on mouse release\",\n\t\tcurrentValue: config.fullscreenCopyOnSelect ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"fullscreen-copy-on-select\", {\n\t\tid: \"fullscreen-wheel-scroll-lines\",\n\t\tlabel: \"Fullscreen wheel scroll lines\",\n\t\tdescription: \"Lines per wheel event, or auto acceleration\",\n\t\tcurrentValue: String(config.fullscreenWheelScrollLines ?? \"auto\"),\n\t\tvalues: [\n\t\t\t\"auto\",\n\t\t\t...[...new Set([1, 2, 3, 5, 10, config.fullscreenWheelScrollLines])]\n\t\t\t\t.filter((lines): lines is number => typeof lines === \"number\")\n\t\t\t\t.sort((a, b) => a - b)\n\t\t\t\t.map(String),\n\t\t],\n\t});\n\tinsertAfter(items, \"fullscreen-wheel-scroll-lines\", {\n\t\tid: \"editor-padding\",\n\t\tlabel: \"Editor padding\",\n\t\tdescription: \"Horizontal padding for input editor (0-3)\",\n\t\tcurrentValue: String(config.editorPaddingX),\n\t\tvalues: [\"0\", \"1\", \"2\", \"3\"],\n\t});\n\tinsertAfter(items, \"editor-padding\", {\n\t\tid: \"output-padding\",\n\t\tlabel: \"Output padding\",\n\t\tdescription: \"Horizontal padding for rendered chat output (0-1)\",\n\t\tcurrentValue: String(config.outputPad),\n\t\tvalues: [\"0\", \"1\"],\n\t});\n\tinsertAfter(items, \"output-padding\", {\n\t\tid: \"autocomplete-max-visible\",\n\t\tlabel: \"Autocomplete max items\",\n\t\tdescription: \"Max visible items in autocomplete dropdown (3-20)\",\n\t\tcurrentValue: String(config.autocompleteMaxVisible),\n\t\tvalues: [\"3\", \"5\", \"7\", \"10\", \"15\", \"20\"],\n\t});\n\tinsertAfter(items, \"autocomplete-max-visible\", {\n\t\tid: \"clear-on-shrink\",\n\t\tlabel: \"Clear on shrink\",\n\t\tdescription: \"Clear empty rows when content shrinks (may cause flicker)\",\n\t\tcurrentValue: config.clearOnShrink ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"clear-on-shrink\", {\n\t\tid: \"terminal-progress\",\n\t\tlabel: \"Terminal progress\",\n\t\tdescription: \"Show OSC 9;4 progress indicators in the terminal tab bar\",\n\t\tcurrentValue: config.showTerminalProgress ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"terminal-progress\", {\n\t\tid: \"cache-miss-notices\",\n\t\tlabel: \"Cache miss notices\",\n\t\tdescription: \"Show cache costs and provider recovery diagnostics\",\n\t\tcurrentValue: config.showCacheMissNotices ? \"true\" : \"false\",\n\t\tvalues: [\"true\", \"false\"],\n\t});\n\tinsertAfter(items, \"cache-miss-notices\", {\n\t\tid: \"cache-warming\",\n\t\tlabel: \"Cache warming\",\n\t\tdescription: \"Refresh prompt caches before they expire. Each refresh costs money.\",\n\t\tcurrentValue: config.cacheWarming,\n\t\tvalues: [\"off\", \"streaming\", \"idle\"],\n\t});\n}\n\nexport function buildSettingsItems(config: SettingsConfig, callbacks: SettingsCallbacks): SettingItem[] {\n\tconst followUpKey = keyDisplayText(\"app.message.followUp\");\n\tlet currentWarnings = { ...config.warnings };\n\n\tconst items: SettingItem[] = [\n\t\t{\n\t\t\tid: \"autocompact\",\n\t\t\tlabel: \"Auto-compact\",\n\t\t\tdescription: \"Automatically compact context when it gets too large\",\n\t\t\tcurrentValue: config.autoCompact ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"steering-mode\",\n\t\t\tlabel: \"Steering mode\",\n\t\t\tdescription:\n\t\t\t\t\"enter while streaming queues steering messages. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.\",\n\t\t\tcurrentValue: config.steeringMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"follow-up-mode\",\n\t\t\tlabel: \"Follow-up mode\",\n\t\t\tdescription: `${followUpKey} queues follow-up messages until agent stops. 'one-at-a-time': deliver one, wait for response. 'all': deliver all at once.`,\n\t\t\tcurrentValue: config.followUpMode,\n\t\t\tvalues: [\"one-at-a-time\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"transport\",\n\t\t\tlabel: \"Transport\",\n\t\t\tdescription: \"Preferred transport for providers that support multiple transports\",\n\t\t\tcurrentValue: config.transport,\n\t\t\tvalues: [\"sse\", \"websocket\", \"websocket-cached\", \"auto\"],\n\t\t},\n\t\t{\n\t\t\tid: \"http-idle-timeout\",\n\t\t\tlabel: \"HTTP idle timeout\",\n\t\t\tdescription:\n\t\t\t\t\"Maximum idle gap while waiting for HTTP headers or body chunks. Disable for local models that pause longer than five minutes.\",\n\t\t\tcurrentValue: formatHttpIdleTimeoutMs(config.httpIdleTimeoutMs),\n\t\t\tvalues: HTTP_IDLE_TIMEOUT_CHOICES.map((choice) => choice.label),\n\t\t},\n\t\t{\n\t\t\tid: \"bash-interceptor\",\n\t\t\tlabel: \"Bash Interceptor\",\n\t\t\tdescription: \"Block shell commands that have dedicated tools\",\n\t\t\tcurrentValue: config.bashInterceptorEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"hide-thinking\",\n\t\t\tlabel: \"Hide thinking\",\n\t\t\tdescription: \"Hide thinking blocks in assistant responses\",\n\t\t\tcurrentValue: config.hideThinkingBlock ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"mermaid-rendering\",\n\t\t\tlabel: \"Mermaid diagrams\",\n\t\t\tdescription: \"Render Mermaid code blocks as Unicode diagrams\",\n\t\t\tcurrentValue: config.mermaidRenderingMode,\n\t\t\tvalues: [\"off\", \"final\", \"streaming\"],\n\t\t},\n\t\t{\n\t\t\tid: \"latex-rendering\",\n\t\t\tlabel: \"LaTeX math\",\n\t\t\tdescription: \"Render LaTeX expressions as Unicode math\",\n\t\t\tcurrentValue: config.latexRenderingEnabled ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"collapse-changelog\",\n\t\t\tlabel: \"Collapse changelog\",\n\t\t\tdescription: \"Show condensed changelog after updates\",\n\t\t\tcurrentValue: config.collapseChangelog ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"quiet-startup\",\n\t\t\tlabel: \"Quiet startup\",\n\t\t\tdescription: \"Disable verbose printing at startup\",\n\t\t\tcurrentValue: config.quietStartup ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"install-telemetry\",\n\t\t\tlabel: \"Install telemetry\",\n\t\t\tdescription:\n\t\t\t\t\"Send a version-adoption ping on the first interactive launch with fresh settings or after an update with changelog entries\",\n\t\t\tcurrentValue: config.enableInstallTelemetry ? \"true\" : \"false\",\n\t\t\tvalues: [\"true\", \"false\"],\n\t\t},\n\t\t{\n\t\t\tid: \"default-project-trust\",\n\t\t\tlabel: \"Default project trust\",\n\t\t\tdescription: \"Fallback behavior when no extension or saved trust decision decides project trust\",\n\t\t\tcurrentValue: DEFAULT_PROJECT_TRUST_LABELS[config.defaultProjectTrust],\n\t\t\tvalues: Object.values(DEFAULT_PROJECT_TRUST_LABELS),\n\t\t},\n\t\t{\n\t\t\tid: \"double-escape-action\",\n\t\t\tlabel: \"Double-escape action\",\n\t\t\tdescription: \"Action when pressing esc twice with empty editor\",\n\t\t\tcurrentValue: config.doubleEscapeAction,\n\t\t\tvalues: [\"tree\", \"fork\", \"none\"],\n\t\t},\n\t\t{\n\t\t\tid: \"tree-filter-mode\",\n\t\t\tlabel: \"Tree filter mode\",\n\t\t\tdescription: \"Default filter when opening /tree\",\n\t\t\tcurrentValue: config.treeFilterMode,\n\t\t\tvalues: [\"default\", \"no-tools\", \"user-only\", \"labeled-only\", \"all\"],\n\t\t},\n\t\t{\n\t\t\tid: \"warnings\",\n\t\t\tlabel: \"Warnings\",\n\t\t\tdescription: \"Enable or disable individual warnings\",\n\t\t\tcurrentValue: \"configure\",\n\t\t\tsubmenu: (_currentValue, done) =>\n\t\t\t\tnew WarningSettingsSubmenu(\n\t\t\t\t\tcurrentWarnings,\n\t\t\t\t\t(warnings) => {\n\t\t\t\t\t\tcurrentWarnings = warnings;\n\t\t\t\t\t\tcallbacks.onWarningsChange(warnings);\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t),\n\t\t},\n\t\t{\n\t\t\tid: \"router-model\",\n\t\t\tlabel: \"Router model\",\n\t\t\tdescription: `Saves to ${config.routerModelScope ?? \"global\"} settings; affects routing decisions, not the chat model`,\n\t\t\tcurrentValue: config.routerModel && config.routerModel !== \"auto\" ? config.routerModel : \"Automatic\",\n\t\t\tsubmenu: (_currentValue, done) => {\n\t\t\t\tconst current = config.routerModel === \"auto\" ? \"\" : (config.routerModel ?? \"\");\n\t\t\t\tconst options = [\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: \"\",\n\t\t\t\t\t\tlabel: \"Automatic\",\n\t\t\t\t\t\tdescription: \"Use the current chat model\",\n\t\t\t\t\t},\n\t\t\t\t\t...(config.availableClassifierModels ?? []).map((model) => ({\n\t\t\t\t\t\tvalue: `${model.provider}/${model.id}`,\n\t\t\t\t\t\tlabel: `${model.provider}/${model.id}`,\n\t\t\t\t\t\tdescription: model.name,\n\t\t\t\t\t})),\n\t\t\t\t\t...(config.availableDefaultModels ?? [])\n\t\t\t\t\t\t.filter((model) => isModelType(model, \"chat\"))\n\t\t\t\t\t\t.map((model) => ({\n\t\t\t\t\t\t\tvalue: `${model.provider}/${model.id}`,\n\t\t\t\t\t\t\tlabel: `${model.provider}/${model.id}`,\n\t\t\t\t\t\t\tdescription: model.name,\n\t\t\t\t\t\t})),\n\t\t\t\t];\n\t\t\t\tif (current && !options.some((option) => option.value === current)) {\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tvalue: current,\n\t\t\t\t\t\tlabel: current,\n\t\t\t\t\t\tdescription: \"Configured model is not currently available\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn new SelectSubmenu(\n\t\t\t\t\t\"Router model\",\n\t\t\t\t\t`Saves to ${config.routerModelScope ?? \"global\"} settings. Choose a provider permitted to receive routing context. Automatic saves an empty routerModel.`,\n\t\t\t\t\toptions.map((option) => ({\n\t\t\t\t\t\t...option,\n\t\t\t\t\t\tlabel: `${option.value === current ? \"✓ \" : \" \"}${option.label}`,\n\t\t\t\t\t})),\n\t\t\t\t\tcurrent,\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tcallbacks.onRouterModelChange?.(value);\n\t\t\t\t\t\tconfig.routerModel = value;\n\t\t\t\t\t\tdone(value || \"Automatic\");\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"model-thinking\",\n\t\t\tlabel: \"Default thinking level per model\",\n\t\t\tdescription: \"Search models and set a startup thinking override\",\n\t\t\tcurrentValue:\n\t\t\t\tObject.keys(config.modelThinkingLevels ?? {}).length === 0\n\t\t\t\t\t? \"none\"\n\t\t\t\t\t: `${Object.keys(config.modelThinkingLevels ?? {}).length} configured`,\n\t\t\tsubmenu: (_currentValue, done) => {\n\t\t\t\tconst levels: ThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\t\t\t\tconst thinkingCountLabel = () => {\n\t\t\t\t\tconst count = Object.keys(config.modelThinkingLevels ?? {}).length;\n\t\t\t\t\treturn count === 0 ? \"none\" : `${count} configured`;\n\t\t\t\t};\n\t\t\t\tconst options = (config.availableDefaultModels ?? []).flatMap((model) => {\n\t\t\t\t\tconst key = `${model.provider}/${model.id}`;\n\t\t\t\t\tconst available = model.reasoning ? levels : ([\"off\"] as ThinkingLevel[]);\n\t\t\t\t\t// Upstream pi #8900 marks the active option with a leading \"✓ \" so it stays\n\t\t\t\t\t// visible while the cursor browses elsewhere. Upstream marks the level label;\n\t\t\t\t\t// Atomic flattened the two-stage picker into one model × level list, so the\n\t\t\t\t\t// marker goes on the row whose level is the configured override.\n\t\t\t\t\tconst activeLevel = config.modelThinkingLevels?.[key];\n\t\t\t\t\tconst items = available.map((level) => ({\n\t\t\t\t\t\tvalue: `${key}\\0${level}`,\n\t\t\t\t\t\tlabel: `${level === activeLevel ? \"✓ \" : \" \"}${model.id} [${model.provider}]`,\n\t\t\t\t\t\tdescription: `${level}${activeLevel === level ? \" · default\" : \"\"}`,\n\t\t\t\t\t}));\n\t\t\t\t\tif (activeLevel !== undefined)\n\t\t\t\t\t\titems.push({\n\t\t\t\t\t\t\tvalue: `${key}\\0`,\n\t\t\t\t\t\t\tlabel: ` ${model.id} [${model.provider}]`,\n\t\t\t\t\t\t\tdescription: \"clear override\",\n\t\t\t\t\t\t});\n\t\t\t\t\treturn items;\n\t\t\t\t});\n\t\t\t\t// An empty catalog must explain itself instead of opening a zero-row\n\t\t\t\t// picker; upstream 2ff8ba6223/5133c9284f use a sentinel row for this.\n\t\t\t\tif (options.length === 0)\n\t\t\t\t\toptions.push({\n\t\t\t\t\t\tvalue: NO_DEFAULT_MODELS_VALUE,\n\t\t\t\t\t\tlabel: \"No models available\",\n\t\t\t\t\t\tdescription: \"Log in to a provider or configure an API key first\",\n\t\t\t\t\t});\n\t\t\t\treturn new SelectSubmenu(\n\t\t\t\t\t\"Per-Model Thinking Level\",\n\t\t\t\t\t\"Select a model and thinking level\",\n\t\t\t\t\toptions,\n\t\t\t\t\t\"\",\n\t\t\t\t\t(value) => {\n\t\t\t\t\t\tif (value === NO_DEFAULT_MODELS_VALUE) {\n\t\t\t\t\t\t\tdone();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst [key, level] = value.split(\"\\0\");\n\t\t\t\t\t\tconst slash = key.indexOf(\"/\");\n\t\t\t\t\t\tconst provider = key.slice(0, slash);\n\t\t\t\t\t\tconst modelId = key.slice(slash + 1);\n\t\t\t\t\t\tif (level) {\n\t\t\t\t\t\t\tcallbacks.onModelThinkingLevelChange?.(provider, modelId, level as ThinkingLevel);\n\t\t\t\t\t\t\tconfig.modelThinkingLevels = { ...config.modelThinkingLevels, [key]: level as ThinkingLevel };\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallbacks.onModelThinkingLevelRemove?.(provider, modelId);\n\t\t\t\t\t\t\tconst next = { ...config.modelThinkingLevels };\n\t\t\t\t\t\t\tdelete next[key];\n\t\t\t\t\t\t\tconfig.modelThinkingLevels = next;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(thinkingCountLabel());\n\t\t\t\t\t},\n\t\t\t\t\t() => done(),\n\t\t\t\t\tundefined,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"theme\",\n\t\t\tlabel: \"Theme\",\n\t\t\tdescription: \"Color theme for the interface\",\n\t\t\tcurrentValue: config.currentTheme,\n\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\tnew ThemeSubmenu(currentValue, config.terminalTheme, config.availableThemes, callbacks, done),\n\t\t},\n\t];\n\n\tinsertImageItems(items, config);\n\tinsertUiToggles(items, config);\n\treturn items;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-submenus.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-submenus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAwC,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EACN,SAAS,EAQT,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAIN,KAAK,aAAa,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAStE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAkB;IAE/B,YAAY,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,EA+BzG;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjC;CACD;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC3C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,cAAc,CAAK;IAE3B,YACC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,EACpB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAC3C,UAAU,UAAQ,EAoDlB;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkCjC;CACD;AAED,wBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"settings-selector-submenus.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-submenus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAwC,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EACN,SAAS,EAQT,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAIN,KAAK,aAAa,EAElB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAStE;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACpD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAkB;IAE/B,YAAY,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,EA+BzG;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjC;CACD;AAED,qBAAa,aAAc,SAAQ,SAAS;IAC3C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,cAAc,CAAK;IAE3B,YACC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,QAAQ,EAAE,MAAM,IAAI,EACpB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAC3C,UAAU,UAAQ,EAoDlB;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAkCjC;CACD;AAED,wBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,EAAE,CAMxF;AAsCD,qBAAa,YAAa,SAAQ,SAAS;IAC1C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAW;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAE1B,YACC,mBAAmB,EAAE,MAAM,EAC3B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,EAAE,EACzB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,EAyBxC;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjC;IAED,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,iBAAiB;IAqFzB,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,MAAM;CAId"}
|
|
@@ -116,16 +116,18 @@ export function themeItems(availableThemes, currentTheme) {
|
|
|
116
116
|
return availableThemes.map((name) => ({
|
|
117
117
|
value: name,
|
|
118
118
|
label: `${name === currentTheme ? "✓ " : " "}${name}`,
|
|
119
|
+
description: name === "system" ? "Use the terminal's foreground, background, and palette" : undefined,
|
|
119
120
|
}));
|
|
120
121
|
}
|
|
121
122
|
function singleModeThemeItems(availableThemes, currentTheme) {
|
|
122
123
|
return [
|
|
124
|
+
...themeItems(availableThemes.filter((name) => name === "system"), currentTheme),
|
|
123
125
|
{
|
|
124
126
|
value: AUTOMATIC_THEME_VALUE,
|
|
125
127
|
label: " Automatic",
|
|
126
128
|
description: "Use separate themes for light and dark terminal appearance",
|
|
127
129
|
},
|
|
128
|
-
...themeItems(availableThemes, currentTheme),
|
|
130
|
+
...themeItems(availableThemes.filter((name) => name !== "system"), currentTheme),
|
|
129
131
|
];
|
|
130
132
|
}
|
|
131
133
|
function preferredTheme(availableThemes, preferred, fallback) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-selector-submenus.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-submenus.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, SelectItem, SelectListLayoutOptions, SettingItem } from \"@earendil-works/pi-tui\";\nimport {\n\tContainer,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\tSelectList,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport type { WarningSettings } from \"../../../core/settings-manager.ts\";\nimport {\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\tparseAutoThemeSetting,\n\ttype TerminalTheme,\n\ttheme,\n} from \"../theme/theme.js\";\nimport type { SettingsCallbacks } from \"./settings-selector-types.ts\";\n\nconst SETTINGS_SUBMENU_SELECT_LIST_LAYOUT: SelectListLayoutOptions = {\n\tminPrimaryColumnWidth: 12,\n\tmaxPrimaryColumnWidth: 32,\n};\n\nconst AUTOMATIC_THEME_VALUE = \"/\";\n\n/**\n * A submenu component for selecting from a list of options.\n */\nexport class WarningSettingsSubmenu extends Container {\n\tprivate settingsList: SettingsList;\n\tprivate state: WarningSettings;\n\n\tconstructor(warnings: WarningSettings, onChange: (warnings: WarningSettings) => void, onCancel: () => void) {\n\t\tsuper();\n\n\t\tthis.state = { ...warnings };\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"anthropic-extra-usage\",\n\t\t\t\tlabel: \"Anthropic extra usage\",\n\t\t\t\tdescription: \"Warn when Anthropic subscription auth may use paid extra usage\",\n\t\t\t\tcurrentValue: (this.state.anthropicExtraUsage ?? true) ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t];\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\tMath.min(items.length, 10),\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"anthropic-extra-usage\":\n\t\t\t\t\t\tthis.state = { ...this.state, anthropicExtraUsage: newValue === \"true\" };\n\t\t\t\t\t\tonChange({ ...this.state });\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel,\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tthis.settingsList.handleInput(data);\n\t\treturn true;\n\t}\n}\n\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\tprivate readonly allOptions: SelectItem[];\n\tprivate readonly currentValue: string;\n\tprivate readonly onSelectValue: (value: string) => void;\n\tprivate readonly onCancelValue: () => void;\n\tprivate searchInput?: Input;\n\tprivate listChildIndex = 0;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t\tsearchable = false,\n\t) {\n\t\tsuper();\n\t\tthis.allOptions = options;\n\t\tthis.currentValue = currentValue;\n\t\tthis.onSelectValue = onSelect;\n\t\tthis.onCancelValue = onCancel;\n\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\tif (searchable) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.searchInput = new Input();\n\t\t\tthis.addChild(this.searchInput);\n\t\t}\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.selectList = new SelectList(\n\t\t\toptions,\n\t\t\tMath.min(options.length, 10),\n\t\t\tgetSelectListTheme(),\n\t\t\tSETTINGS_SUBMENU_SELECT_LIST_LAYOUT,\n\t\t);\n\n\t\tconst currentIndex = options.findIndex((o) => o.value === currentValue);\n\t\tif (currentIndex !== -1) {\n\t\t\tthis.selectList.setSelectedIndex(currentIndex);\n\t\t}\n\n\t\tthis.selectList.onSelect = (item) => {\n\t\t\tonSelect(item.value);\n\t\t};\n\n\t\tthis.selectList.onCancel = onCancel;\n\n\t\tif (onSelectionChange) {\n\t\t\tthis.selectList.onSelectionChange = (item) => {\n\t\t\t\tonSelectionChange(item.value);\n\t\t\t};\n\t\t}\n\n\t\tthis.listChildIndex = this.children.length;\n\t\tthis.addChild(this.selectList);\n\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \" enter select · esc back\"), 0, 0));\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (!this.searchInput) {\n\t\t\tthis.selectList.handleInput(data);\n\t\t\treturn true;\n\t\t}\n\t\tconst kb = getKeybindings();\n\t\tif (\n\t\t\tkb.matches(data, \"tui.select.up\") ||\n\t\t\tkb.matches(data, \"tui.select.down\") ||\n\t\t\tkb.matches(data, \"tui.select.confirm\") ||\n\t\t\tkb.matches(data, \"tui.select.cancel\")\n\t\t) {\n\t\t\tthis.selectList.handleInput(data);\n\t\t\treturn true;\n\t\t}\n\t\tthis.searchInput.handleInput(data);\n\t\tconst query = this.searchInput.getValue();\n\t\tconst options = query\n\t\t\t? fuzzyFilter(this.allOptions, query, (item) => `${item.label} ${item.description ?? \"\"}`)\n\t\t\t: this.allOptions;\n\t\tconst list = new SelectList(\n\t\t\toptions,\n\t\t\tMath.min(options.length, 10),\n\t\t\tgetSelectListTheme(),\n\t\t\tSETTINGS_SUBMENU_SELECT_LIST_LAYOUT,\n\t\t);\n\t\tconst currentIndex = options.findIndex((item) => item.value === this.currentValue);\n\t\t// Searching should focus the best match, not a weaker match of the saved value.\n\t\tif (!query && currentIndex !== -1) list.setSelectedIndex(currentIndex);\n\t\tlist.onSelect = (item) => this.onSelectValue(item.value);\n\t\tlist.onCancel = this.onCancelValue;\n\t\tthis.children[this.listChildIndex] = list;\n\t\tthis.selectList = list;\n\t\treturn true;\n\t}\n}\n\nexport function themeItems(availableThemes: string[], currentTheme: string): SelectItem[] {\n\treturn availableThemes.map((name) => ({\n\t\tvalue: name,\n\t\tlabel: `${name === currentTheme ? \"✓ \" : \" \"}${name}`,\n\t}));\n}\n\nfunction singleModeThemeItems(availableThemes: string[], currentTheme: string): SelectItem[] {\n\treturn [\n\t\t{\n\t\t\tvalue: AUTOMATIC_THEME_VALUE,\n\t\t\tlabel: \" Automatic\",\n\t\t\tdescription: \"Use separate themes for light and dark terminal appearance\",\n\t\t},\n\t\t...themeItems(availableThemes, currentTheme),\n\t];\n}\n\nfunction preferredTheme(availableThemes: string[], preferred: string | undefined, fallback: string): string {\n\tif (preferred && availableThemes.includes(preferred)) return preferred;\n\tif (availableThemes.includes(fallback)) return fallback;\n\treturn availableThemes[0] ?? fallback;\n}\n\nfunction defaultAutomaticThemes(\n\tcurrentThemeSetting: string,\n\tavailableThemes: string[],\n): { lightTheme: string; darkTheme: string } {\n\tconst autoTheme = parseAutoThemeSetting(currentThemeSetting);\n\tif (autoTheme) return autoTheme;\n\n\tconst currentFixedTheme = currentThemeSetting.includes(\"/\") ? undefined : currentThemeSetting;\n\tconst themeName = preferredTheme(availableThemes, currentFixedTheme, \"dark\");\n\treturn { lightTheme: themeName, darkTheme: themeName };\n}\n\nexport class ThemeSubmenu extends Container {\n\tprivate inputComponent: Component | undefined;\n\tprivate readonly callbacks: SettingsCallbacks;\n\tprivate readonly availableThemes: string[];\n\tprivate readonly terminalTheme: TerminalTheme;\n\tprivate readonly onDone: (selectedValue?: string) => void;\n\tprivate readonly originalThemeSetting: string;\n\tprivate mode: \"single\" | \"automatic\";\n\tprivate singleTheme: string;\n\tprivate lightTheme: string;\n\tprivate darkTheme: string;\n\n\tconstructor(\n\t\tcurrentThemeSetting: string,\n\t\tterminalTheme: TerminalTheme,\n\t\tavailableThemes: string[],\n\t\tcallbacks: SettingsCallbacks,\n\t\tonDone: (selectedValue?: string) => void,\n\t) {\n\t\tsuper();\n\t\tthis.callbacks = callbacks;\n\t\tthis.availableThemes = availableThemes;\n\t\tthis.terminalTheme = terminalTheme;\n\t\tthis.onDone = onDone;\n\t\tthis.originalThemeSetting = currentThemeSetting;\n\t\tconst autoTheme = parseAutoThemeSetting(currentThemeSetting);\n\t\tconst automaticThemes = defaultAutomaticThemes(currentThemeSetting, availableThemes);\n\t\tconst fixedTheme = autoTheme || currentThemeSetting.includes(\"/\") ? undefined : currentThemeSetting;\n\t\tthis.mode = autoTheme ? \"automatic\" : \"single\";\n\t\tthis.lightTheme = automaticThemes.lightTheme;\n\t\tthis.darkTheme = automaticThemes.darkTheme;\n\t\tthis.singleTheme = preferredTheme(\n\t\t\tavailableThemes,\n\t\t\tfixedTheme ?? (autoTheme ? this.getActiveAutomaticTheme() : undefined),\n\t\t\t\"dark\",\n\t\t);\n\n\t\tif (this.mode === \"automatic\") {\n\t\t\tthis.showAutomaticMenu();\n\t\t} else {\n\t\t\tthis.showSingleMenu();\n\t\t}\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (!this.inputComponent?.handleInput) return false;\n\t\tthis.inputComponent.handleInput(data);\n\t\treturn true;\n\t}\n\n\tprivate setContent(renderComponent: Component, inputComponent: Component = renderComponent): void {\n\t\tthis.clear();\n\t\tthis.addChild(renderComponent);\n\t\tthis.inputComponent = inputComponent;\n\t}\n\n\tprivate showSingleMenu(): void {\n\t\tthis.mode = \"single\";\n\t\tconst menu = new SelectSubmenu(\n\t\t\t\"Theme\",\n\t\t\t\"Select a theme, or choose Automatic to follow terminal appearance.\",\n\t\t\tsingleModeThemeItems(this.availableThemes, this.singleTheme),\n\t\t\tthis.singleTheme,\n\t\t\t(value) => {\n\t\t\t\tif (value === AUTOMATIC_THEME_VALUE) {\n\t\t\t\t\tthis.mode = \"automatic\";\n\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\tthis.showAutomaticMenu();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.singleTheme = value;\n\t\t\t\tthis.apply(value);\n\t\t\t},\n\t\t\t() => this.cancel(),\n\t\t\t(value) => {\n\t\t\t\tthis.callbacks.onThemePreview?.(value === AUTOMATIC_THEME_VALUE ? this.getAutomaticThemeSetting() : value);\n\t\t\t},\n\t\t);\n\t\tthis.setContent(menu);\n\t}\n\n\tprivate showAutomaticMenu(): void {\n\t\tthis.mode = \"automatic\";\n\t\tconst content = new Container();\n\t\tcontent.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Automatic Theme\")), 0, 0));\n\t\tcontent.addChild(new Spacer(1));\n\t\tcontent.addChild(new Text(theme.fg(\"muted\", \"Choose themes for terminal light and dark appearance.\"), 0, 0));\n\t\tcontent.addChild(new Text(theme.fg(\"muted\", \"Light/dark detection requires terminal support.\"), 0, 0));\n\t\tcontent.addChild(new Spacer(1));\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"light-theme\",\n\t\t\t\tlabel: \"Light theme\",\n\t\t\t\tdescription: \"Theme to use in automatic mode when the terminal is light\",\n\t\t\t\tcurrentValue: this.lightTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tthis.createThemeSelect(\n\t\t\t\t\t\t\"Light Theme\",\n\t\t\t\t\t\t\"Select the theme to use for light terminal appearance\",\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\tdone,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tthis.lightTheme = value;\n\t\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"dark-theme\",\n\t\t\t\tlabel: \"Dark theme\",\n\t\t\t\tdescription: \"Theme to use in automatic mode when the terminal is dark\",\n\t\t\t\tcurrentValue: this.darkTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tthis.createThemeSelect(\n\t\t\t\t\t\t\"Dark Theme\",\n\t\t\t\t\t\t\"Select the theme to use for dark terminal appearance\",\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\tdone,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tthis.darkTheme = value;\n\t\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"apply\",\n\t\t\t\tlabel: \"Apply\",\n\t\t\t\tdescription: \"Save and go back\",\n\t\t\t\tcurrentValue: \"save and go back\",\n\t\t\t\tvalues: [\"save and go back\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"single-mode\",\n\t\t\t\tlabel: \"Change mode\",\n\t\t\t\tdescription: \"Switch to one theme for light and dark\",\n\t\t\t\tcurrentValue: \"switch to single theme\",\n\t\t\t\tvalues: [\"switch to single theme\"],\n\t\t\t},\n\t\t];\n\n\t\tconst settingsList = new SettingsList(\n\t\t\titems,\n\t\t\tMath.min(items.length, 10),\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"single-mode\":\n\t\t\t\t\t\tthis.mode = \"single\";\n\t\t\t\t\t\tthis.singleTheme = this.getActiveAutomaticTheme();\n\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.singleTheme);\n\t\t\t\t\t\tthis.showSingleMenu();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"apply\":\n\t\t\t\t\t\tthis.apply(this.getAutomaticThemeSetting());\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => this.cancel(),\n\t\t);\n\t\tcontent.addChild(settingsList);\n\t\tthis.setContent(content, settingsList);\n\t}\n\n\tprivate createThemeSelect(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\tcurrentValue: string,\n\t\tdone: (selectedValue?: string) => void,\n\t\tonSelect: (value: string) => void,\n\t): SelectSubmenu {\n\t\treturn new SelectSubmenu(\n\t\t\ttitle,\n\t\t\tdescription,\n\t\t\tthemeItems(this.availableThemes, currentValue),\n\t\t\tcurrentValue,\n\t\t\tonSelect,\n\t\t\t() => {\n\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\tdone();\n\t\t\t},\n\t\t\t(value) => this.callbacks.onThemePreview?.(value),\n\t\t);\n\t}\n\n\tprivate getThemeSetting(): string {\n\t\treturn this.mode === \"automatic\" ? this.getAutomaticThemeSetting() : this.singleTheme;\n\t}\n\n\tprivate getActiveAutomaticTheme(): string {\n\t\treturn this.terminalTheme === \"light\" ? this.lightTheme : this.darkTheme;\n\t}\n\n\tprivate getAutomaticThemeSetting(): string {\n\t\treturn `${this.lightTheme}/${this.darkTheme}`;\n\t}\n\n\tprivate apply(themeSetting: string): void {\n\t\tthis.onDone(themeSetting);\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.callbacks.onThemePreview?.(this.originalThemeSetting);\n\t\tthis.onDone();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-selector-submenus.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-submenus.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Component, SelectItem, SelectListLayoutOptions, SettingItem } from \"@earendil-works/pi-tui\";\nimport {\n\tContainer,\n\tfuzzyFilter,\n\tgetKeybindings,\n\tInput,\n\tSelectList,\n\tSettingsList,\n\tSpacer,\n\tText,\n} from \"@earendil-works/pi-tui\";\nimport type { WarningSettings } from \"../../../core/settings-manager.ts\";\nimport {\n\tgetSelectListTheme,\n\tgetSettingsListTheme,\n\tparseAutoThemeSetting,\n\ttype TerminalTheme,\n\ttheme,\n} from \"../theme/theme.js\";\nimport type { SettingsCallbacks } from \"./settings-selector-types.ts\";\n\nconst SETTINGS_SUBMENU_SELECT_LIST_LAYOUT: SelectListLayoutOptions = {\n\tminPrimaryColumnWidth: 12,\n\tmaxPrimaryColumnWidth: 32,\n};\n\nconst AUTOMATIC_THEME_VALUE = \"/\";\n\n/**\n * A submenu component for selecting from a list of options.\n */\nexport class WarningSettingsSubmenu extends Container {\n\tprivate settingsList: SettingsList;\n\tprivate state: WarningSettings;\n\n\tconstructor(warnings: WarningSettings, onChange: (warnings: WarningSettings) => void, onCancel: () => void) {\n\t\tsuper();\n\n\t\tthis.state = { ...warnings };\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"anthropic-extra-usage\",\n\t\t\t\tlabel: \"Anthropic extra usage\",\n\t\t\t\tdescription: \"Warn when Anthropic subscription auth may use paid extra usage\",\n\t\t\t\tcurrentValue: (this.state.anthropicExtraUsage ?? true) ? \"true\" : \"false\",\n\t\t\t\tvalues: [\"true\", \"false\"],\n\t\t\t},\n\t\t];\n\n\t\tthis.settingsList = new SettingsList(\n\t\t\titems,\n\t\t\tMath.min(items.length, 10),\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id, newValue) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"anthropic-extra-usage\":\n\t\t\t\t\t\tthis.state = { ...this.state, anthropicExtraUsage: newValue === \"true\" };\n\t\t\t\t\t\tonChange({ ...this.state });\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCancel,\n\t\t);\n\n\t\tthis.addChild(this.settingsList);\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tthis.settingsList.handleInput(data);\n\t\treturn true;\n\t}\n}\n\nexport class SelectSubmenu extends Container {\n\tprivate selectList: SelectList;\n\tprivate readonly allOptions: SelectItem[];\n\tprivate readonly currentValue: string;\n\tprivate readonly onSelectValue: (value: string) => void;\n\tprivate readonly onCancelValue: () => void;\n\tprivate searchInput?: Input;\n\tprivate listChildIndex = 0;\n\n\tconstructor(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\toptions: SelectItem[],\n\t\tcurrentValue: string,\n\t\tonSelect: (value: string) => void,\n\t\tonCancel: () => void,\n\t\tonSelectionChange?: (value: string) => void,\n\t\tsearchable = false,\n\t) {\n\t\tsuper();\n\t\tthis.allOptions = options;\n\t\tthis.currentValue = currentValue;\n\t\tthis.onSelectValue = onSelect;\n\t\tthis.onCancelValue = onCancel;\n\n\t\tthis.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 0, 0));\n\n\t\tif (description) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.addChild(new Text(theme.fg(\"muted\", description), 0, 0));\n\t\t}\n\n\t\tif (searchable) {\n\t\t\tthis.addChild(new Spacer(1));\n\t\t\tthis.searchInput = new Input();\n\t\t\tthis.addChild(this.searchInput);\n\t\t}\n\n\t\tthis.addChild(new Spacer(1));\n\n\t\tthis.selectList = new SelectList(\n\t\t\toptions,\n\t\t\tMath.min(options.length, 10),\n\t\t\tgetSelectListTheme(),\n\t\t\tSETTINGS_SUBMENU_SELECT_LIST_LAYOUT,\n\t\t);\n\n\t\tconst currentIndex = options.findIndex((o) => o.value === currentValue);\n\t\tif (currentIndex !== -1) {\n\t\t\tthis.selectList.setSelectedIndex(currentIndex);\n\t\t}\n\n\t\tthis.selectList.onSelect = (item) => {\n\t\t\tonSelect(item.value);\n\t\t};\n\n\t\tthis.selectList.onCancel = onCancel;\n\n\t\tif (onSelectionChange) {\n\t\t\tthis.selectList.onSelectionChange = (item) => {\n\t\t\t\tonSelectionChange(item.value);\n\t\t\t};\n\t\t}\n\n\t\tthis.listChildIndex = this.children.length;\n\t\tthis.addChild(this.selectList);\n\n\t\tthis.addChild(new Spacer(1));\n\t\tthis.addChild(new Text(theme.fg(\"dim\", \" enter select · esc back\"), 0, 0));\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (!this.searchInput) {\n\t\t\tthis.selectList.handleInput(data);\n\t\t\treturn true;\n\t\t}\n\t\tconst kb = getKeybindings();\n\t\tif (\n\t\t\tkb.matches(data, \"tui.select.up\") ||\n\t\t\tkb.matches(data, \"tui.select.down\") ||\n\t\t\tkb.matches(data, \"tui.select.confirm\") ||\n\t\t\tkb.matches(data, \"tui.select.cancel\")\n\t\t) {\n\t\t\tthis.selectList.handleInput(data);\n\t\t\treturn true;\n\t\t}\n\t\tthis.searchInput.handleInput(data);\n\t\tconst query = this.searchInput.getValue();\n\t\tconst options = query\n\t\t\t? fuzzyFilter(this.allOptions, query, (item) => `${item.label} ${item.description ?? \"\"}`)\n\t\t\t: this.allOptions;\n\t\tconst list = new SelectList(\n\t\t\toptions,\n\t\t\tMath.min(options.length, 10),\n\t\t\tgetSelectListTheme(),\n\t\t\tSETTINGS_SUBMENU_SELECT_LIST_LAYOUT,\n\t\t);\n\t\tconst currentIndex = options.findIndex((item) => item.value === this.currentValue);\n\t\t// Searching should focus the best match, not a weaker match of the saved value.\n\t\tif (!query && currentIndex !== -1) list.setSelectedIndex(currentIndex);\n\t\tlist.onSelect = (item) => this.onSelectValue(item.value);\n\t\tlist.onCancel = this.onCancelValue;\n\t\tthis.children[this.listChildIndex] = list;\n\t\tthis.selectList = list;\n\t\treturn true;\n\t}\n}\n\nexport function themeItems(availableThemes: string[], currentTheme: string): SelectItem[] {\n\treturn availableThemes.map((name) => ({\n\t\tvalue: name,\n\t\tlabel: `${name === currentTheme ? \"✓ \" : \" \"}${name}`,\n\t\tdescription: name === \"system\" ? \"Use the terminal's foreground, background, and palette\" : undefined,\n\t}));\n}\n\nfunction singleModeThemeItems(availableThemes: string[], currentTheme: string): SelectItem[] {\n\treturn [\n\t\t...themeItems(\n\t\t\tavailableThemes.filter((name) => name === \"system\"),\n\t\t\tcurrentTheme,\n\t\t),\n\t\t{\n\t\t\tvalue: AUTOMATIC_THEME_VALUE,\n\t\t\tlabel: \" Automatic\",\n\t\t\tdescription: \"Use separate themes for light and dark terminal appearance\",\n\t\t},\n\t\t...themeItems(\n\t\t\tavailableThemes.filter((name) => name !== \"system\"),\n\t\t\tcurrentTheme,\n\t\t),\n\t];\n}\n\nfunction preferredTheme(availableThemes: string[], preferred: string | undefined, fallback: string): string {\n\tif (preferred && availableThemes.includes(preferred)) return preferred;\n\tif (availableThemes.includes(fallback)) return fallback;\n\treturn availableThemes[0] ?? fallback;\n}\n\nfunction defaultAutomaticThemes(\n\tcurrentThemeSetting: string,\n\tavailableThemes: string[],\n): { lightTheme: string; darkTheme: string } {\n\tconst autoTheme = parseAutoThemeSetting(currentThemeSetting);\n\tif (autoTheme) return autoTheme;\n\n\tconst currentFixedTheme = currentThemeSetting.includes(\"/\") ? undefined : currentThemeSetting;\n\tconst themeName = preferredTheme(availableThemes, currentFixedTheme, \"dark\");\n\treturn { lightTheme: themeName, darkTheme: themeName };\n}\n\nexport class ThemeSubmenu extends Container {\n\tprivate inputComponent: Component | undefined;\n\tprivate readonly callbacks: SettingsCallbacks;\n\tprivate readonly availableThemes: string[];\n\tprivate readonly terminalTheme: TerminalTheme;\n\tprivate readonly onDone: (selectedValue?: string) => void;\n\tprivate readonly originalThemeSetting: string;\n\tprivate mode: \"single\" | \"automatic\";\n\tprivate singleTheme: string;\n\tprivate lightTheme: string;\n\tprivate darkTheme: string;\n\n\tconstructor(\n\t\tcurrentThemeSetting: string,\n\t\tterminalTheme: TerminalTheme,\n\t\tavailableThemes: string[],\n\t\tcallbacks: SettingsCallbacks,\n\t\tonDone: (selectedValue?: string) => void,\n\t) {\n\t\tsuper();\n\t\tthis.callbacks = callbacks;\n\t\tthis.availableThemes = availableThemes;\n\t\tthis.terminalTheme = terminalTheme;\n\t\tthis.onDone = onDone;\n\t\tthis.originalThemeSetting = currentThemeSetting;\n\t\tconst autoTheme = parseAutoThemeSetting(currentThemeSetting);\n\t\tconst automaticThemes = defaultAutomaticThemes(currentThemeSetting, availableThemes);\n\t\tconst fixedTheme = autoTheme || currentThemeSetting.includes(\"/\") ? undefined : currentThemeSetting;\n\t\tthis.mode = autoTheme ? \"automatic\" : \"single\";\n\t\tthis.lightTheme = automaticThemes.lightTheme;\n\t\tthis.darkTheme = automaticThemes.darkTheme;\n\t\tthis.singleTheme = preferredTheme(\n\t\t\tavailableThemes,\n\t\t\tfixedTheme ?? (autoTheme ? this.getActiveAutomaticTheme() : undefined),\n\t\t\t\"dark\",\n\t\t);\n\n\t\tif (this.mode === \"automatic\") {\n\t\t\tthis.showAutomaticMenu();\n\t\t} else {\n\t\t\tthis.showSingleMenu();\n\t\t}\n\t}\n\n\thandleInput(data: string): boolean {\n\t\tif (!this.inputComponent?.handleInput) return false;\n\t\tthis.inputComponent.handleInput(data);\n\t\treturn true;\n\t}\n\n\tprivate setContent(renderComponent: Component, inputComponent: Component = renderComponent): void {\n\t\tthis.clear();\n\t\tthis.addChild(renderComponent);\n\t\tthis.inputComponent = inputComponent;\n\t}\n\n\tprivate showSingleMenu(): void {\n\t\tthis.mode = \"single\";\n\t\tconst menu = new SelectSubmenu(\n\t\t\t\"Theme\",\n\t\t\t\"Select a theme, or choose Automatic to follow terminal appearance.\",\n\t\t\tsingleModeThemeItems(this.availableThemes, this.singleTheme),\n\t\t\tthis.singleTheme,\n\t\t\t(value) => {\n\t\t\t\tif (value === AUTOMATIC_THEME_VALUE) {\n\t\t\t\t\tthis.mode = \"automatic\";\n\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\tthis.showAutomaticMenu();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.singleTheme = value;\n\t\t\t\tthis.apply(value);\n\t\t\t},\n\t\t\t() => this.cancel(),\n\t\t\t(value) => {\n\t\t\t\tthis.callbacks.onThemePreview?.(value === AUTOMATIC_THEME_VALUE ? this.getAutomaticThemeSetting() : value);\n\t\t\t},\n\t\t);\n\t\tthis.setContent(menu);\n\t}\n\n\tprivate showAutomaticMenu(): void {\n\t\tthis.mode = \"automatic\";\n\t\tconst content = new Container();\n\t\tcontent.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Automatic Theme\")), 0, 0));\n\t\tcontent.addChild(new Spacer(1));\n\t\tcontent.addChild(new Text(theme.fg(\"muted\", \"Choose themes for terminal light and dark appearance.\"), 0, 0));\n\t\tcontent.addChild(new Text(theme.fg(\"muted\", \"Light/dark detection requires terminal support.\"), 0, 0));\n\t\tcontent.addChild(new Spacer(1));\n\n\t\tconst items: SettingItem[] = [\n\t\t\t{\n\t\t\t\tid: \"light-theme\",\n\t\t\t\tlabel: \"Light theme\",\n\t\t\t\tdescription: \"Theme to use in automatic mode when the terminal is light\",\n\t\t\t\tcurrentValue: this.lightTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tthis.createThemeSelect(\n\t\t\t\t\t\t\"Light Theme\",\n\t\t\t\t\t\t\"Select the theme to use for light terminal appearance\",\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\tdone,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tthis.lightTheme = value;\n\t\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"dark-theme\",\n\t\t\t\tlabel: \"Dark theme\",\n\t\t\t\tdescription: \"Theme to use in automatic mode when the terminal is dark\",\n\t\t\t\tcurrentValue: this.darkTheme,\n\t\t\t\tsubmenu: (currentValue, done) =>\n\t\t\t\t\tthis.createThemeSelect(\n\t\t\t\t\t\t\"Dark Theme\",\n\t\t\t\t\t\t\"Select the theme to use for dark terminal appearance\",\n\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\tdone,\n\t\t\t\t\t\t(value) => {\n\t\t\t\t\t\t\tthis.darkTheme = value;\n\t\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\t\t\t\tdone(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"apply\",\n\t\t\t\tlabel: \"Apply\",\n\t\t\t\tdescription: \"Save and go back\",\n\t\t\t\tcurrentValue: \"save and go back\",\n\t\t\t\tvalues: [\"save and go back\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"single-mode\",\n\t\t\t\tlabel: \"Change mode\",\n\t\t\t\tdescription: \"Switch to one theme for light and dark\",\n\t\t\t\tcurrentValue: \"switch to single theme\",\n\t\t\t\tvalues: [\"switch to single theme\"],\n\t\t\t},\n\t\t];\n\n\t\tconst settingsList = new SettingsList(\n\t\t\titems,\n\t\t\tMath.min(items.length, 10),\n\t\t\tgetSettingsListTheme(),\n\t\t\t(id) => {\n\t\t\t\tswitch (id) {\n\t\t\t\t\tcase \"single-mode\":\n\t\t\t\t\t\tthis.mode = \"single\";\n\t\t\t\t\t\tthis.singleTheme = this.getActiveAutomaticTheme();\n\t\t\t\t\t\tthis.callbacks.onThemePreview?.(this.singleTheme);\n\t\t\t\t\t\tthis.showSingleMenu();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"apply\":\n\t\t\t\t\t\tthis.apply(this.getAutomaticThemeSetting());\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => this.cancel(),\n\t\t);\n\t\tcontent.addChild(settingsList);\n\t\tthis.setContent(content, settingsList);\n\t}\n\n\tprivate createThemeSelect(\n\t\ttitle: string,\n\t\tdescription: string,\n\t\tcurrentValue: string,\n\t\tdone: (selectedValue?: string) => void,\n\t\tonSelect: (value: string) => void,\n\t): SelectSubmenu {\n\t\treturn new SelectSubmenu(\n\t\t\ttitle,\n\t\t\tdescription,\n\t\t\tthemeItems(this.availableThemes, currentValue),\n\t\t\tcurrentValue,\n\t\t\tonSelect,\n\t\t\t() => {\n\t\t\t\tthis.callbacks.onThemePreview?.(this.getThemeSetting());\n\t\t\t\tdone();\n\t\t\t},\n\t\t\t(value) => this.callbacks.onThemePreview?.(value),\n\t\t);\n\t}\n\n\tprivate getThemeSetting(): string {\n\t\treturn this.mode === \"automatic\" ? this.getAutomaticThemeSetting() : this.singleTheme;\n\t}\n\n\tprivate getActiveAutomaticTheme(): string {\n\t\treturn this.terminalTheme === \"light\" ? this.lightTheme : this.darkTheme;\n\t}\n\n\tprivate getAutomaticThemeSetting(): string {\n\t\treturn `${this.lightTheme}/${this.darkTheme}`;\n\t}\n\n\tprivate apply(themeSetting: string): void {\n\t\tthis.onDone(themeSetting);\n\t}\n\n\tprivate cancel(): void {\n\t\tthis.callbacks.onThemePreview?.(this.originalThemeSetting);\n\t\tthis.onDone();\n\t}\n}\n"]}
|