@bastani/atomic 0.9.25 → 0.9.26-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/builtin/intercom/package.json +2 -2
  3. package/dist/builtin/mcp/OAUTH.md +1 -1
  4. package/dist/builtin/mcp/native-client-licenses/NOTICE +2 -2
  5. package/dist/builtin/mcp/package.json +1 -1
  6. package/dist/builtin/subagents/package.json +3 -3
  7. package/dist/builtin/web-access/package.json +2 -2
  8. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  9. package/dist/builtin/workflows/package.json +2 -2
  10. package/dist/builtin/workflows/src/extension/index.bundle.mjs +17 -0
  11. package/dist/builtin/workflows/src/index.js +15 -0
  12. package/dist/cli/args.js +1 -1
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  15. package/dist/core/agent-session-extension-bindings.js +4 -0
  16. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  17. package/dist/core/agent-session-methods.d.ts +5 -1
  18. package/dist/core/agent-session-methods.d.ts.map +1 -1
  19. package/dist/core/agent-session-methods.js.map +1 -1
  20. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  21. package/dist/core/agent-session-prompt.js +1 -0
  22. package/dist/core/agent-session-prompt.js.map +1 -1
  23. package/dist/core/agent-session-state.d.ts +14 -2
  24. package/dist/core/agent-session-state.d.ts.map +1 -1
  25. package/dist/core/agent-session-state.js +31 -6
  26. package/dist/core/agent-session-state.js.map +1 -1
  27. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  28. package/dist/core/agent-session-tool-registry.js +5 -1
  29. package/dist/core/agent-session-tool-registry.js.map +1 -1
  30. package/dist/core/agent-session.d.ts +1 -0
  31. package/dist/core/agent-session.d.ts.map +1 -1
  32. package/dist/core/agent-session.js +2 -2
  33. package/dist/core/agent-session.js.map +1 -1
  34. package/dist/core/messages.d.ts.map +1 -1
  35. package/dist/core/messages.js +4 -3
  36. package/dist/core/messages.js.map +1 -1
  37. package/dist/core/model-registry.d.ts +2 -1
  38. package/dist/core/model-registry.d.ts.map +1 -1
  39. package/dist/core/model-registry.js +3 -0
  40. package/dist/core/model-registry.js.map +1 -1
  41. package/dist/core/oauth-login.d.ts +1 -0
  42. package/dist/core/oauth-login.d.ts.map +1 -1
  43. package/dist/core/oauth-login.js.map +1 -1
  44. package/dist/core/oauth-provider-metadata.d.ts.map +1 -1
  45. package/dist/core/oauth-provider-metadata.js +1 -0
  46. package/dist/core/oauth-provider-metadata.js.map +1 -1
  47. package/dist/core/settings-manager-resource-accessors.d.ts +3 -3
  48. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  49. package/dist/core/settings-manager-resource-accessors.js +2 -1
  50. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  51. package/dist/core/settings-manager.d.ts +1 -1
  52. package/dist/core/settings-manager.d.ts.map +1 -1
  53. package/dist/core/settings-manager.js.map +1 -1
  54. package/dist/core/settings-types.d.ts +2 -1
  55. package/dist/core/settings-types.d.ts.map +1 -1
  56. package/dist/core/settings-types.js.map +1 -1
  57. package/dist/core/system-prompt.js +1 -1
  58. package/dist/core/system-prompt.js.map +1 -1
  59. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  60. package/dist/extensions/codemode/execute.js +133 -31
  61. package/dist/extensions/codemode/execute.js.map +1 -1
  62. package/dist/extensions/codemode/tool.d.ts +2 -1
  63. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  64. package/dist/extensions/codemode/tool.js +25 -4
  65. package/dist/extensions/codemode/tool.js.map +1 -1
  66. package/dist/extensions/mcp/cli.js +2 -2
  67. package/dist/extensions/mcp/cli.js.map +1 -1
  68. package/dist/extensions/mcp/client/oauth/flow.d.ts +6 -0
  69. package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
  70. package/dist/extensions/mcp/client/oauth/flow.js +23 -5
  71. package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
  72. package/dist/extensions/mcp/client/oauth/index.d.ts +1 -1
  73. package/dist/extensions/mcp/client/oauth/index.d.ts.map +1 -1
  74. package/dist/extensions/mcp/client/oauth/index.js +1 -1
  75. package/dist/extensions/mcp/client/oauth/index.js.map +1 -1
  76. package/dist/extensions/mcp/index.d.ts.map +1 -1
  77. package/dist/extensions/mcp/index.js +22 -12
  78. package/dist/extensions/mcp/index.js.map +1 -1
  79. package/dist/extensions/mcp/oauth.d.ts +12 -7
  80. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  81. package/dist/extensions/mcp/oauth.js +58 -24
  82. package/dist/extensions/mcp/oauth.js.map +1 -1
  83. package/dist/extensions/mcp/runtime.js +1 -1
  84. package/dist/extensions/mcp/runtime.js.map +1 -1
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/main-session-options.d.ts.map +1 -1
  89. package/dist/main-session-options.js +6 -0
  90. package/dist/main-session-options.js.map +1 -1
  91. package/dist/main.js +1 -1
  92. package/dist/main.js.map +1 -1
  93. package/dist/modes/interactive/components/atomic-banner.d.ts +2 -0
  94. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  95. package/dist/modes/interactive/components/atomic-banner.js +9 -1
  96. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  97. package/dist/modes/interactive/components/oauth-selector.d.ts +2 -0
  98. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/oauth-selector.js +9 -4
  100. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  101. package/dist/modes/interactive/components/settings-selector-handlers.js +1 -1
  102. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  103. package/dist/modes/interactive/components/settings-selector-items.js +3 -3
  104. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  105. package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -3
  106. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  107. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  108. package/dist/modes/interactive/components/startup-identity.js +2 -2
  109. package/dist/modes/interactive/components/startup-identity.js.map +1 -1
  110. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  111. package/dist/modes/interactive/components/user-message.js +3 -4
  112. package/dist/modes/interactive/components/user-message.js.map +1 -1
  113. package/dist/modes/interactive/interactive-auth-login.js +14 -5
  114. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  115. package/dist/modes/interactive/interactive-auth-routing.js +38 -17
  116. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  117. package/dist/modes/interactive/interactive-mode-surface.d.ts +6 -4
  118. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  119. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  120. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  121. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  122. package/dist/modes/interactive/interactive-selectors.js +2 -2
  123. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  124. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  125. package/dist/modes/interactive/interactive-startup.js +12 -4
  126. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  127. package/dist/modes/interactive/login-provider-options.d.ts +2 -1
  128. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -1
  129. package/dist/modes/interactive/login-provider-options.js +11 -6
  130. package/dist/modes/interactive/login-provider-options.js.map +1 -1
  131. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -1
  132. package/dist/modes/interactive/theme/system-theme.js +10 -4
  133. package/dist/modes/interactive/theme/system-theme.js.map +1 -1
  134. package/docs/codemode.md +214 -0
  135. package/docs/docs.json +1 -0
  136. package/docs/extensions/api-reference.md +2 -0
  137. package/docs/getting-started/authentication.md +2 -2
  138. package/docs/guides.md +1 -1
  139. package/docs/mcp-servers.md +2 -0
  140. package/docs/providers.md +5 -3
  141. package/docs/reference/cli.md +1 -1
  142. package/docs/settings.md +1 -1
  143. package/docs/terminal-setup.md +2 -0
  144. package/docs/tools.md +1 -3
  145. package/docs/usage.md +1 -1
  146. package/npm-shrinkwrap.json +68 -73
  147. package/package.json +8 -8
@@ -54,7 +54,7 @@ export function createSettingsChangeHandler(callbacks) {
54
54
  callbacks.onCollapseChangelogChange(newValue === "true");
55
55
  break;
56
56
  case "quiet-startup":
57
- callbacks.onQuietStartupChange(newValue === "true");
57
+ callbacks.onQuietStartupChange(newValue === "header" ? "header" : newValue === "true");
58
58
  break;
59
59
  case "install-telemetry":
60
60
  callbacks.onEnableInstallTelemetryChange(newValue === "true");
@@ -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 \"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
+ {"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 === \"header\" ? \"header\" : 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"]}
@@ -224,9 +224,9 @@ export function buildSettingsItems(config, callbacks) {
224
224
  {
225
225
  id: "quiet-startup",
226
226
  label: "Quiet startup",
227
- description: "Disable verbose printing at startup",
228
- currentValue: config.quietStartup ? "true" : "false",
229
- values: ["true", "false"],
227
+ description: "Disable verbose printing at startup (header: keep only the startup header)",
228
+ currentValue: String(config.quietStartup),
229
+ values: ["true", "header", "false"],
230
230
  },
231
231
  {
232
232
  id: "install-telemetry",
@@ -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: \"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
+ {"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 (header: keep only the startup header)\",\n\t\t\tcurrentValue: String(config.quietStartup),\n\t\t\tvalues: [\"true\", \"header\", \"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,7 +1,7 @@
1
1
  import type { Api, ClassifierApi, ClassifierModel, Model, Transport } from "@bastani/pi-ai/compat";
2
2
  import type { ThinkingLevel } from "@earendil-works/pi-agent-core";
3
3
  import type { ScrollViewScrollbar, WheelScrollLines } from "@earendil-works/pi-tui";
4
- import type { CacheWarmingMode, DefaultProjectTrust, FullscreenExitOutput, MermaidRenderingMode, WarningSettings } from "../../../core/settings-manager.ts";
4
+ import type { CacheWarmingMode, DefaultProjectTrust, FullscreenExitOutput, MermaidRenderingMode, QuietStartup, WarningSettings } from "../../../core/settings-manager.ts";
5
5
  import type { TerminalTheme } from "../theme/theme.js";
6
6
  export type QueueDeliveryMode = "all" | "one-at-a-time";
7
7
  export type DoubleEscapeAction = "fork" | "tree" | "none";
@@ -45,7 +45,7 @@ export interface SettingsConfig {
45
45
  outputPad: 0 | 1;
46
46
  showCacheMissNotices: boolean;
47
47
  autocompleteMaxVisible: number;
48
- quietStartup: boolean;
48
+ quietStartup: QuietStartup;
49
49
  defaultProjectTrust: DefaultProjectTrust;
50
50
  clearOnShrink: boolean;
51
51
  showTerminalProgress: boolean;
@@ -86,7 +86,7 @@ export interface SettingsCallbacks {
86
86
  onOutputPadChange: (padding: 0 | 1) => void;
87
87
  onShowCacheMissNoticesChange: (enabled: boolean) => void;
88
88
  onAutocompleteMaxVisibleChange: (maxVisible: number) => void;
89
- onQuietStartupChange: (enabled: boolean) => void;
89
+ onQuietStartupChange: (quiet: QuietStartup) => void;
90
90
  onDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;
91
91
  onClearOnShrinkChange: (enabled: boolean) => void;
92
92
  onShowTerminalProgressChange: (enabled: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-selector-types.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EACX,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,eAAe,CAAC;AACxD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC;AAE3F,MAAM,WAAW,cAAc;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,iBAAiB,CAAC;IAChC,YAAY,EAAE,iBAAiB,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,gBAAgB,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,uBAAuB,EAAE,aAAa,EAAE,CAAC;IACzC,sBAAsB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACtC,yBAAyB,CAAC,EAAE,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,gBAAgB,CAAC;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,QAAQ,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IACjC,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,uBAAuB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,wBAAwB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,2BAA2B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAClD,uBAAuB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,oBAAoB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvD,8BAA8B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,qBAAqB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/F,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,yBAAyB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,4BAA4B,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACnE,6BAA6B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1D,yBAAyB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,8BAA8B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,0BAA0B,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjE,sBAAsB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACvD,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,2BAA2B,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjE,4BAA4B,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACrE,8BAA8B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,kCAAkC,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACvE,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,iBAAiB,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC5C,4BAA4B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,8BAA8B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,oBAAoB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,2BAA2B,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChF,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,4BAA4B,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,gBAAgB,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-selector-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, ClassifierApi, ClassifierModel, Model, Transport } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { ScrollViewScrollbar, WheelScrollLines } from \"@earendil-works/pi-tui\";\nimport type {\n\tCacheWarmingMode,\n\tDefaultProjectTrust,\n\tFullscreenExitOutput,\n\tMermaidRenderingMode,\n\tWarningSettings,\n} from \"../../../core/settings-manager.ts\";\nimport type { TerminalTheme } from \"../theme/theme.js\";\n\nexport type QueueDeliveryMode = \"all\" | \"one-at-a-time\";\nexport type DoubleEscapeAction = \"fork\" | \"tree\" | \"none\";\nexport type TreeFilterMode = \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\tsteeringMode: QueueDeliveryMode;\n\tfollowUpMode: QueueDeliveryMode;\n\ttransport: Transport;\n\thttpIdleTimeoutMs: number;\n\tcacheWarming: CacheWarmingMode;\n\tbashInterceptorEnabled: boolean;\n\tthinkingLevel: ThinkingLevel;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tavailableDefaultModels?: Model<Api>[];\n\tavailableClassifierModels?: ClassifierModel<ClassifierApi>[];\n\trouterModel?: string;\n\trouterModelScope?: \"global\" | \"project\";\n\tmodelThinkingLevels?: Record<string, ThinkingLevel>;\n\tcurrentTheme: string;\n\tterminalTheme: TerminalTheme;\n\tavailableThemes: string[];\n\thideThinkingBlock: boolean;\n\tmermaidRenderingMode: MermaidRenderingMode;\n\tlatexRenderingEnabled: boolean;\n\tcollapseChangelog: boolean;\n\tenableInstallTelemetry: boolean;\n\tdoubleEscapeAction: DoubleEscapeAction;\n\ttreeFilterMode: TreeFilterMode;\n\tshowHardwareCursor: boolean;\n\tfullscreenScrollbar: ScrollViewScrollbar;\n\tfullscreenExitOutput: FullscreenExitOutput;\n\tfullscreenCopyOnSelect: boolean;\n\tfullscreenWheelScrollLines?: WheelScrollLines;\n\teditorPaddingX: number;\n\toutputPad: 0 | 1;\n\tshowCacheMissNotices: boolean;\n\tautocompleteMaxVisible: number;\n\tquietStartup: boolean;\n\tdefaultProjectTrust: DefaultProjectTrust;\n\tclearOnShrink: boolean;\n\tshowTerminalProgress: boolean;\n\twarnings: WarningSettings;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonImageWidthCellsChange: (width: number) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: QueueDeliveryMode) => void;\n\tonFollowUpModeChange: (mode: QueueDeliveryMode) => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonHttpIdleTimeoutChange: (timeoutMs: number) => void;\n\tonCacheWarmingChange: (mode: CacheWarmingMode) => void;\n\tonBashInterceptorEnabledChange: (enabled: boolean) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonRouterModelChange?: (model: string) => void;\n\tonModelThinkingLevelChange?: (provider: string, modelId: string, level: ThinkingLevel) => void;\n\tonModelThinkingLevelRemove?: (provider: string, modelId: string) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonMermaidRenderingModeChange: (mode: MermaidRenderingMode) => void;\n\tonLatexRenderingEnabledChange: (enabled: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonEnableInstallTelemetryChange: (enabled: boolean) => void;\n\tonDoubleEscapeActionChange: (action: DoubleEscapeAction) => void;\n\tonTreeFilterModeChange: (mode: TreeFilterMode) => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonFullscreenScrollbarChange: (mode: ScrollViewScrollbar) => void;\n\tonFullscreenExitOutputChange: (output: FullscreenExitOutput) => void;\n\tonFullscreenCopyOnSelectChange: (enabled: boolean) => void;\n\tonFullscreenWheelScrollLinesChange?: (lines: WheelScrollLines) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonOutputPadChange: (padding: 0 | 1) => void;\n\tonShowCacheMissNoticesChange: (enabled: boolean) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonQuietStartupChange: (enabled: boolean) => void;\n\tonDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonShowTerminalProgressChange: (enabled: boolean) => void;\n\tonWarningsChange: (warnings: WarningSettings) => void;\n\tonCancel: () => void;\n}\n"]}
1
+ {"version":3,"file":"settings-selector-types.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/settings-selector-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, ClassifierApi, ClassifierModel, Model, Transport } from \"@bastani/pi-ai/compat\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { ScrollViewScrollbar, WheelScrollLines } from \"@earendil-works/pi-tui\";\nimport type {\n\tCacheWarmingMode,\n\tDefaultProjectTrust,\n\tFullscreenExitOutput,\n\tMermaidRenderingMode,\n\tQuietStartup,\n\tWarningSettings,\n} from \"../../../core/settings-manager.ts\";\nimport type { TerminalTheme } from \"../theme/theme.js\";\n\nexport type QueueDeliveryMode = \"all\" | \"one-at-a-time\";\nexport type DoubleEscapeAction = \"fork\" | \"tree\" | \"none\";\nexport type TreeFilterMode = \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\";\n\nexport interface SettingsConfig {\n\tautoCompact: boolean;\n\tshowImages: boolean;\n\timageWidthCells: number;\n\tautoResizeImages: boolean;\n\tblockImages: boolean;\n\tenableSkillCommands: boolean;\n\tsteeringMode: QueueDeliveryMode;\n\tfollowUpMode: QueueDeliveryMode;\n\ttransport: Transport;\n\thttpIdleTimeoutMs: number;\n\tcacheWarming: CacheWarmingMode;\n\tbashInterceptorEnabled: boolean;\n\tthinkingLevel: ThinkingLevel;\n\tavailableThinkingLevels: ThinkingLevel[];\n\tavailableDefaultModels?: Model<Api>[];\n\tavailableClassifierModels?: ClassifierModel<ClassifierApi>[];\n\trouterModel?: string;\n\trouterModelScope?: \"global\" | \"project\";\n\tmodelThinkingLevels?: Record<string, ThinkingLevel>;\n\tcurrentTheme: string;\n\tterminalTheme: TerminalTheme;\n\tavailableThemes: string[];\n\thideThinkingBlock: boolean;\n\tmermaidRenderingMode: MermaidRenderingMode;\n\tlatexRenderingEnabled: boolean;\n\tcollapseChangelog: boolean;\n\tenableInstallTelemetry: boolean;\n\tdoubleEscapeAction: DoubleEscapeAction;\n\ttreeFilterMode: TreeFilterMode;\n\tshowHardwareCursor: boolean;\n\tfullscreenScrollbar: ScrollViewScrollbar;\n\tfullscreenExitOutput: FullscreenExitOutput;\n\tfullscreenCopyOnSelect: boolean;\n\tfullscreenWheelScrollLines?: WheelScrollLines;\n\teditorPaddingX: number;\n\toutputPad: 0 | 1;\n\tshowCacheMissNotices: boolean;\n\tautocompleteMaxVisible: number;\n\tquietStartup: QuietStartup;\n\tdefaultProjectTrust: DefaultProjectTrust;\n\tclearOnShrink: boolean;\n\tshowTerminalProgress: boolean;\n\twarnings: WarningSettings;\n}\n\nexport interface SettingsCallbacks {\n\tonAutoCompactChange: (enabled: boolean) => void;\n\tonShowImagesChange: (enabled: boolean) => void;\n\tonImageWidthCellsChange: (width: number) => void;\n\tonAutoResizeImagesChange: (enabled: boolean) => void;\n\tonBlockImagesChange: (blocked: boolean) => void;\n\tonEnableSkillCommandsChange: (enabled: boolean) => void;\n\tonSteeringModeChange: (mode: QueueDeliveryMode) => void;\n\tonFollowUpModeChange: (mode: QueueDeliveryMode) => void;\n\tonTransportChange: (transport: Transport) => void;\n\tonHttpIdleTimeoutChange: (timeoutMs: number) => void;\n\tonCacheWarmingChange: (mode: CacheWarmingMode) => void;\n\tonBashInterceptorEnabledChange: (enabled: boolean) => void;\n\tonThinkingLevelChange: (level: ThinkingLevel) => void;\n\tonRouterModelChange?: (model: string) => void;\n\tonModelThinkingLevelChange?: (provider: string, modelId: string, level: ThinkingLevel) => void;\n\tonModelThinkingLevelRemove?: (provider: string, modelId: string) => void;\n\tonThemeChange: (theme: string) => void;\n\tonThemePreview?: (theme: string) => void;\n\tonHideThinkingBlockChange: (hidden: boolean) => void;\n\tonMermaidRenderingModeChange: (mode: MermaidRenderingMode) => void;\n\tonLatexRenderingEnabledChange: (enabled: boolean) => void;\n\tonCollapseChangelogChange: (collapsed: boolean) => void;\n\tonEnableInstallTelemetryChange: (enabled: boolean) => void;\n\tonDoubleEscapeActionChange: (action: DoubleEscapeAction) => void;\n\tonTreeFilterModeChange: (mode: TreeFilterMode) => void;\n\tonShowHardwareCursorChange: (enabled: boolean) => void;\n\tonFullscreenScrollbarChange: (mode: ScrollViewScrollbar) => void;\n\tonFullscreenExitOutputChange: (output: FullscreenExitOutput) => void;\n\tonFullscreenCopyOnSelectChange: (enabled: boolean) => void;\n\tonFullscreenWheelScrollLinesChange?: (lines: WheelScrollLines) => void;\n\tonEditorPaddingXChange: (padding: number) => void;\n\tonOutputPadChange: (padding: 0 | 1) => void;\n\tonShowCacheMissNoticesChange: (enabled: boolean) => void;\n\tonAutocompleteMaxVisibleChange: (maxVisible: number) => void;\n\tonQuietStartupChange: (quiet: QuietStartup) => void;\n\tonDefaultProjectTrustChange: (defaultProjectTrust: DefaultProjectTrust) => void;\n\tonClearOnShrinkChange: (enabled: boolean) => void;\n\tonShowTerminalProgressChange: (enabled: boolean) => void;\n\tonWarningsChange: (warnings: WarningSettings) => void;\n\tonCancel: () => void;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Text } from "@earendil-works/pi-tui";
2
2
  import { markLifecycleTiming } from "../../../core/lifecycle-timings.js";
3
- import { STARTUP_ASSEMBLY_GAPS, STARTUP_FRAME_MS } from "./atomic-banner.js";
3
+ import { STARTUP_ASSEMBLY_GAPS, STARTUP_FRAME_MS, supportsAtomicBanner } from "./atomic-banner.js";
4
4
  export function startupStateAtElapsed(elapsedMs) {
5
5
  if (elapsedMs >= 1040)
6
6
  return { gap: 0, manifestoPhase: 4, complete: true };
@@ -16,7 +16,7 @@ export function startupStateAtElapsed(elapsedMs) {
16
16
  return { gap: STARTUP_ASSEMBLY_GAPS[frame], manifestoPhase: 0, complete: false };
17
17
  }
18
18
  export function startupMotionEnabled() {
19
- return process.stdout.isTTY === true && process.env.ATOMIC_REDUCED_MOTION !== "1";
19
+ return process.stdout.isTTY === true && process.env.ATOMIC_REDUCED_MOTION !== "1" && supportsAtomicBanner();
20
20
  }
21
21
  export class StartupIdentityComponent {
22
22
  ui;
@@ -1 +1 @@
1
- {"version":3,"file":"startup-identity.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-identity.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { markLifecycleTiming } from \"../../../core/lifecycle-timings.ts\";\nimport { STARTUP_ASSEMBLY_GAPS, STARTUP_FRAME_MS } from \"./atomic-banner.ts\";\n\nexport interface StartupAnimationState {\n\tgap: number;\n\tmanifestoPhase: number;\n\tcomplete: boolean;\n}\n\nexport function startupStateAtElapsed(elapsedMs: number): StartupAnimationState {\n\tif (elapsedMs >= 1040) return { gap: 0, manifestoPhase: 4, complete: true };\n\tif (elapsedMs >= 960) return { gap: 0, manifestoPhase: 3, complete: false };\n\tif (elapsedMs >= 880) return { gap: 0, manifestoPhase: 2, complete: false };\n\tif (elapsedMs >= 800) return { gap: 0, manifestoPhase: 1, complete: false };\n\tif (elapsedMs >= 640) return { gap: 0, manifestoPhase: 0, complete: false };\n\tconst frame = Math.min(7, Math.floor(Math.max(0, elapsedMs) / STARTUP_FRAME_MS));\n\treturn { gap: STARTUP_ASSEMBLY_GAPS[frame]!, manifestoPhase: 0, complete: false };\n}\n\nexport function startupMotionEnabled(): boolean {\n\treturn process.stdout.isTTY === true && process.env.ATOMIC_REDUCED_MOTION !== \"1\";\n}\n\nexport class StartupIdentityComponent implements Component {\n\tprivate readonly ui: TUI;\n\tprivate readonly compose: (width: number, state: StartupAnimationState) => string;\n\tprivate readonly startedAt = Date.now();\n\tprivate settled = false;\n\tprivate timer: ReturnType<typeof setInterval> | undefined;\n\tprivate renderedText: string | undefined;\n\tprivate renderedWidth: number | undefined;\n\tprivate renderedLines: string[] = [];\n\n\tconstructor(\n\t\tui: TUI,\n\t\tcompose: (width: number, state: StartupAnimationState) => string,\n\t\tanimate = startupMotionEnabled(),\n\t) {\n\t\tthis.ui = ui;\n\t\tthis.compose = compose;\n\t\tthis.settled = !animate;\n\t\tif (animate) {\n\t\t\tthis.timer = setInterval(() => {\n\t\t\t\tif (Date.now() - this.startedAt >= 1040) this.settle();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}, STARTUP_FRAME_MS);\n\t\t\tthis.timer.unref?.();\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tconst state = this.settled\n\t\t\t? { gap: 0, manifestoPhase: 4, complete: true }\n\t\t\t: startupStateAtElapsed(Date.now() - this.startedAt);\n\t\tmarkLifecycleTiming(\"startup-coherent\");\n\t\tif (state.complete) markLifecycleTiming(\"startup-complete\");\n\t\tconst text = this.compose(width, state);\n\t\tif (text !== this.renderedText || width !== this.renderedWidth) {\n\t\t\tthis.renderedText = text;\n\t\t\tthis.renderedWidth = width;\n\t\t\tthis.renderedLines = new Text(text, 1, 0).render(width);\n\t\t}\n\t\treturn this.renderedLines;\n\t}\n\n\tsettle(): boolean {\n\t\tif (this.settled) return false;\n\t\tthis.settled = true;\n\t\tif (this.timer) clearInterval(this.timer);\n\t\tthis.timer = undefined;\n\t\tthis.ui.requestRender();\n\t\treturn true;\n\t}\n\n\trefresh(): void {\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetExpanded(_expanded: boolean): void {}\n\tinvalidate(): void {\n\t\tthis.renderedText = undefined;\n\t}\n}\n"]}
1
+ {"version":3,"file":"startup-identity.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/startup-identity.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Component, Text, type TUI } from \"@earendil-works/pi-tui\";\nimport { markLifecycleTiming } from \"../../../core/lifecycle-timings.ts\";\nimport { STARTUP_ASSEMBLY_GAPS, STARTUP_FRAME_MS, supportsAtomicBanner } from \"./atomic-banner.ts\";\n\nexport interface StartupAnimationState {\n\tgap: number;\n\tmanifestoPhase: number;\n\tcomplete: boolean;\n}\n\nexport function startupStateAtElapsed(elapsedMs: number): StartupAnimationState {\n\tif (elapsedMs >= 1040) return { gap: 0, manifestoPhase: 4, complete: true };\n\tif (elapsedMs >= 960) return { gap: 0, manifestoPhase: 3, complete: false };\n\tif (elapsedMs >= 880) return { gap: 0, manifestoPhase: 2, complete: false };\n\tif (elapsedMs >= 800) return { gap: 0, manifestoPhase: 1, complete: false };\n\tif (elapsedMs >= 640) return { gap: 0, manifestoPhase: 0, complete: false };\n\tconst frame = Math.min(7, Math.floor(Math.max(0, elapsedMs) / STARTUP_FRAME_MS));\n\treturn { gap: STARTUP_ASSEMBLY_GAPS[frame]!, manifestoPhase: 0, complete: false };\n}\n\nexport function startupMotionEnabled(): boolean {\n\treturn process.stdout.isTTY === true && process.env.ATOMIC_REDUCED_MOTION !== \"1\" && supportsAtomicBanner();\n}\n\nexport class StartupIdentityComponent implements Component {\n\tprivate readonly ui: TUI;\n\tprivate readonly compose: (width: number, state: StartupAnimationState) => string;\n\tprivate readonly startedAt = Date.now();\n\tprivate settled = false;\n\tprivate timer: ReturnType<typeof setInterval> | undefined;\n\tprivate renderedText: string | undefined;\n\tprivate renderedWidth: number | undefined;\n\tprivate renderedLines: string[] = [];\n\n\tconstructor(\n\t\tui: TUI,\n\t\tcompose: (width: number, state: StartupAnimationState) => string,\n\t\tanimate = startupMotionEnabled(),\n\t) {\n\t\tthis.ui = ui;\n\t\tthis.compose = compose;\n\t\tthis.settled = !animate;\n\t\tif (animate) {\n\t\t\tthis.timer = setInterval(() => {\n\t\t\t\tif (Date.now() - this.startedAt >= 1040) this.settle();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t}, STARTUP_FRAME_MS);\n\t\t\tthis.timer.unref?.();\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tconst state = this.settled\n\t\t\t? { gap: 0, manifestoPhase: 4, complete: true }\n\t\t\t: startupStateAtElapsed(Date.now() - this.startedAt);\n\t\tmarkLifecycleTiming(\"startup-coherent\");\n\t\tif (state.complete) markLifecycleTiming(\"startup-complete\");\n\t\tconst text = this.compose(width, state);\n\t\tif (text !== this.renderedText || width !== this.renderedWidth) {\n\t\t\tthis.renderedText = text;\n\t\t\tthis.renderedWidth = width;\n\t\t\tthis.renderedLines = new Text(text, 1, 0).render(width);\n\t\t}\n\t\treturn this.renderedLines;\n\t}\n\n\tsettle(): boolean {\n\t\tif (this.settled) return false;\n\t\tthis.settled = true;\n\t\tif (this.timer) clearInterval(this.timer);\n\t\tthis.timer = undefined;\n\t\tthis.ui.requestRender();\n\t\treturn true;\n\t}\n\n\trefresh(): void {\n\t\tthis.ui.requestRender();\n\t}\n\n\tsetExpanded(_expanded: boolean): void {}\n\tinvalidate(): void {\n\t\tthis.renderedText = undefined;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,SAAS,EAAY,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAQ7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAAU;IAE7B,YACC,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,aAAkC,EACjD,SAAS,SAAI,EACb,oBAAoB,GAAE,SAAS,mBAAmB,EAAO,EACzD,WAAW,UAAO,EASlB;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,OAAO,CAAC,OAAO;IAuBN,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASvC;CACD"}
1
+ {"version":3,"file":"user-message.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAQ7E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAClD,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,WAAW,CAAU;IAE7B,YACC,IAAI,EAAE,MAAM,EACZ,aAAa,GAAE,aAAkC,EACjD,SAAS,SAAI,EACb,oBAAoB,GAAE,SAAS,mBAAmB,EAAO,EACzD,WAAW,UAAO,EASlB;IAED,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlC;IAED,OAAO,CAAC,OAAO;IAsBN,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CASvC;CACD"}
@@ -1,4 +1,4 @@
1
- import { Box, Container, Markdown } from "@earendil-works/pi-tui";
1
+ import { Container, Markdown } from "@earendil-works/pi-tui";
2
2
  import { getMarkdownTheme, theme } from "../theme/theme.js";
3
3
  import { createMarkdownTransform } from "./markdown-transform.js";
4
4
  const OSC133_ZONE_START = "\x1b]133;A\x07";
@@ -28,16 +28,15 @@ export class UserMessageComponent extends Container {
28
28
  }
29
29
  rebuild() {
30
30
  this.clear();
31
- const contentBox = new Box(this.outputPad, 1, (content) => theme.bg("userMessageBg", content));
32
- contentBox.addChild(new Markdown(this.text, 0, 0, this.markdownTheme, {
31
+ this.addChild(new Markdown(this.text, this.outputPad, 1, this.markdownTheme, {
33
32
  color: (content) => theme.fg("userMessageText", content),
33
+ bgColor: (content) => theme.bg("userMessageBg", content),
34
34
  }, {
35
35
  preserveOrderedListMarkers: true,
36
36
  preserveBackslashEscapes: true,
37
37
  transform: createMarkdownTransform("user", false, this.markdownTransformers),
38
38
  renderLatex: this.renderLatex,
39
39
  }));
40
- this.addChild(contentBox);
41
40
  }
42
41
  render(width) {
43
42
  const lines = super.render(width);
@@ -1 +1 @@
1
- {"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAC1C,IAAI,CAAS;IACb,aAAa,CAAgB;IAC7B,SAAS,CAAS;IAClB,oBAAoB,CAAiC;IACrD,WAAW,CAAU;IAE7B,YACC,IAAY,EACZ,aAAa,GAAkB,gBAAgB,EAAE,EACjD,SAAS,GAAG,CAAC,EACb,oBAAoB,GAAmC,EAAE,EACzD,WAAW,GAAG,IAAI;QAElB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,OAAe;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,OAAO;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvG,UAAU,CAAC,QAAQ,CAClB,IAAI,QAAQ,CACX,IAAI,CAAC,IAAI,EACT,CAAC,EACD,CAAC,EACD,IAAI,CAAC,aAAa,EAClB;YACC,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC;SAChE,EACD;YACC,0BAA0B,EAAE,IAAI;YAChC,wBAAwB,EAAE,IAAI;YAC9B,SAAS,EAAE,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC;YAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;SAC7B,CACD,CACD,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["import { Box, Container, Markdown, type MarkdownTheme } from \"@earendil-works/pi-tui\";\nimport type { MarkdownTransformer } from \"../../../core/extensions/types.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\nimport { createMarkdownTransform } from \"./markdown-transform.ts\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\nconst OSC133_ZONE_FINAL = \"\\x1b]133;C\\x07\";\n\n/**\n * Component that renders a user message\n */\nexport class UserMessageComponent extends Container {\n\tprivate text: string;\n\tprivate markdownTheme: MarkdownTheme;\n\tprivate outputPad: number;\n\tprivate markdownTransformers: readonly MarkdownTransformer[];\n\tprivate renderLatex: boolean;\n\n\tconstructor(\n\t\ttext: string,\n\t\tmarkdownTheme: MarkdownTheme = getMarkdownTheme(),\n\t\toutputPad = 1,\n\t\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\t\trenderLatex = true,\n\t) {\n\t\tsuper();\n\t\tthis.text = text;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.outputPad = outputPad;\n\t\tthis.markdownTransformers = markdownTransformers;\n\t\tthis.renderLatex = renderLatex;\n\t\tthis.rebuild();\n\t}\n\n\tsetOutputPad(padding: number): void {\n\t\tthis.outputPad = padding;\n\t\tthis.rebuild();\n\t}\n\n\tprivate rebuild(): void {\n\t\tthis.clear();\n\t\tconst contentBox = new Box(this.outputPad, 1, (content: string) => theme.bg(\"userMessageBg\", content));\n\t\tcontentBox.addChild(\n\t\t\tnew Markdown(\n\t\t\t\tthis.text,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\tthis.markdownTheme,\n\t\t\t\t{\n\t\t\t\t\tcolor: (content: string) => theme.fg(\"userMessageText\", content),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpreserveOrderedListMarkers: true,\n\t\t\t\t\tpreserveBackslashEscapes: true,\n\t\t\t\t\ttransform: createMarkdownTransform(\"user\", false, this.markdownTransformers),\n\t\t\t\t\trenderLatex: this.renderLatex,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\tthis.addChild(contentBox);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = OSC133_ZONE_END + OSC133_ZONE_FINAL + lines[lines.length - 1];\n\t\treturn lines;\n\t}\n}\n"]}
1
+ {"version":3,"file":"user-message.js","sourceRoot":"","sources":["../../../../src/modes/interactive/components/user-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,wBAAwB,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,SAAS;IAC1C,IAAI,CAAS;IACb,aAAa,CAAgB;IAC7B,SAAS,CAAS;IAClB,oBAAoB,CAAiC;IACrD,WAAW,CAAU;IAE7B,YACC,IAAY,EACZ,aAAa,GAAkB,gBAAgB,EAAE,EACjD,SAAS,GAAG,CAAC,EACb,oBAAoB,GAAmC,EAAE,EACzD,WAAW,GAAG,IAAI;QAElB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,OAAe;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,OAAO;QACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,CACZ,IAAI,QAAQ,CACX,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,CAAC,EACD,IAAI,CAAC,aAAa,EAClB;YACC,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,EAAE,OAAO,CAAC;YAChE,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC;SAChE,EACD;YACC,0BAA0B,EAAE,IAAI;YAChC,wBAAwB,EAAE,IAAI;YAC9B,SAAS,EAAE,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC;YAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;SAC7B,CACD,CACD,CAAC;IACH,CAAC;IAEQ,MAAM,CAAC,KAAa;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,KAAK,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,eAAe,GAAG,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxF,OAAO,KAAK,CAAC;IACd,CAAC;CACD","sourcesContent":["import { Container, Markdown, type MarkdownTheme } from \"@earendil-works/pi-tui\";\nimport type { MarkdownTransformer } from \"../../../core/extensions/types.ts\";\nimport { getMarkdownTheme, theme } from \"../theme/theme.js\";\nimport { createMarkdownTransform } from \"./markdown-transform.ts\";\n\nconst OSC133_ZONE_START = \"\\x1b]133;A\\x07\";\nconst OSC133_ZONE_END = \"\\x1b]133;B\\x07\";\nconst OSC133_ZONE_FINAL = \"\\x1b]133;C\\x07\";\n\n/**\n * Component that renders a user message\n */\nexport class UserMessageComponent extends Container {\n\tprivate text: string;\n\tprivate markdownTheme: MarkdownTheme;\n\tprivate outputPad: number;\n\tprivate markdownTransformers: readonly MarkdownTransformer[];\n\tprivate renderLatex: boolean;\n\n\tconstructor(\n\t\ttext: string,\n\t\tmarkdownTheme: MarkdownTheme = getMarkdownTheme(),\n\t\toutputPad = 1,\n\t\tmarkdownTransformers: readonly MarkdownTransformer[] = [],\n\t\trenderLatex = true,\n\t) {\n\t\tsuper();\n\t\tthis.text = text;\n\t\tthis.markdownTheme = markdownTheme;\n\t\tthis.outputPad = outputPad;\n\t\tthis.markdownTransformers = markdownTransformers;\n\t\tthis.renderLatex = renderLatex;\n\t\tthis.rebuild();\n\t}\n\n\tsetOutputPad(padding: number): void {\n\t\tthis.outputPad = padding;\n\t\tthis.rebuild();\n\t}\n\n\tprivate rebuild(): void {\n\t\tthis.clear();\n\t\tthis.addChild(\n\t\t\tnew Markdown(\n\t\t\t\tthis.text,\n\t\t\t\tthis.outputPad,\n\t\t\t\t1,\n\t\t\t\tthis.markdownTheme,\n\t\t\t\t{\n\t\t\t\t\tcolor: (content: string) => theme.fg(\"userMessageText\", content),\n\t\t\t\t\tbgColor: (content: string) => theme.bg(\"userMessageBg\", content),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpreserveOrderedListMarkers: true,\n\t\t\t\t\tpreserveBackslashEscapes: true,\n\t\t\t\t\ttransform: createMarkdownTransform(\"user\", false, this.markdownTransformers),\n\t\t\t\t\trenderLatex: this.renderLatex,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t}\n\n\toverride render(width: number): string[] {\n\t\tconst lines = super.render(width);\n\t\tif (lines.length === 0) {\n\t\t\treturn lines;\n\t\t}\n\n\t\tlines[0] = OSC133_ZONE_START + lines[0];\n\t\tlines[lines.length - 1] = OSC133_ZONE_END + OSC133_ZONE_FINAL + lines[lines.length - 1];\n\t\treturn lines;\n\t}\n}\n"]}
@@ -68,14 +68,17 @@ InteractiveModeBase.prototype.completeProviderAuthentication = async function (p
68
68
  }
69
69
  }
70
70
  };
71
- InteractiveModeBase.prototype.showBedrockSetupDialog = function (providerId, providerName) {
71
+ InteractiveModeBase.prototype.showBedrockSetupDialog = function (providerId, providerName, onBack) {
72
72
  const restoreEditor = () => {
73
73
  this.editorContainer.clear();
74
74
  this.editorContainer.addChild(this.editor);
75
75
  this.ui.setFocus(this.editor);
76
76
  this.ui.requestRender();
77
77
  };
78
- const dialog = new LoginDialogComponent(this.ui, providerId, () => restoreEditor(), providerName, "Amazon Bedrock setup");
78
+ const dialog = new LoginDialogComponent(this.ui, providerId, () => {
79
+ restoreEditor();
80
+ onBack?.();
81
+ }, providerName, "Amazon Bedrock setup");
79
82
  dialog.showDetails([
80
83
  theme.fg("text", "Amazon Bedrock uses AWS credentials instead of a single API key."),
81
84
  theme.fg("text", "Configure an AWS profile, IAM keys, bearer token, or role-based credentials."),
@@ -87,7 +90,7 @@ InteractiveModeBase.prototype.showBedrockSetupDialog = function (providerId, pro
87
90
  this.ui.setFocus(dialog);
88
91
  this.ui.requestRender();
89
92
  };
90
- InteractiveModeBase.prototype.showApiKeyLoginDialog = async function (providerId, providerName) {
93
+ InteractiveModeBase.prototype.showApiKeyLoginDialog = async function (providerId, providerName, onBack) {
91
94
  const previousModel = this.session.model;
92
95
  const dialog = new LoginDialogComponent(this.ui, providerId, (_success, _message) => {
93
96
  // Completion handled below
@@ -122,7 +125,10 @@ InteractiveModeBase.prototype.showApiKeyLoginDialog = async function (providerId
122
125
  if (error instanceof CredentialSynchronizationError) {
123
126
  this.showError(`Saved API key for ${providerName}, but local model state could not be synchronized: ${errorMsg}`);
124
127
  }
125
- else if (!isOAuthLoginCancelled(error)) {
128
+ else if (isOAuthLoginCancelled(error)) {
129
+ onBack?.();
130
+ }
131
+ else {
126
132
  this.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);
127
133
  }
128
134
  }
@@ -149,7 +155,7 @@ InteractiveModeBase.prototype.showOAuthLoginSelect = function (dialog, prompt) {
149
155
  this.ui.requestRender();
150
156
  });
151
157
  };
152
- InteractiveModeBase.prototype.showLoginDialog = async function (providerId, providerName) {
158
+ InteractiveModeBase.prototype.showLoginDialog = async function (providerId, providerName, onBack) {
153
159
  const previousModel = this.session.model;
154
160
  const metadata = this.session.modelRuntime?.getOAuthProviderMetadata().find(({ id }) => id === providerId);
155
161
  const usesCallbackServer = metadata?.usesCallbackServer === true;
@@ -238,6 +244,9 @@ InteractiveModeBase.prototype.showLoginDialog = async function (providerId, prov
238
244
  else if (loginSucceeded || !isOAuthLoginCancelled(error)) {
239
245
  this.showError(`Failed to login to ${providerName}: ${errorMsg}`);
240
246
  }
247
+ else {
248
+ onBack?.();
249
+ }
241
250
  }
242
251
  };
243
252
  //# sourceMappingURL=interactive-auth-login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"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","sourcesContent":["import { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport { isOAuthLoginCancelled } from \"../../core/oauth-login.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\tdefaultModelPerProvider,\n\tExtensionSelectorComponent,\n\tgetAuthPath,\n\tgetDocsPath,\n\tLoginDialogComponent,\n\ttype Model,\n\ttype OAuthSelectPrompt,\n\tpath,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nexport function llamaCppPostLoginGuidance(actionLabel: string, loadedModelCount: number): string {\n\treturn loadedModelCount === 0\n\t\t? `${actionLabel}. No llama.cpp models are loaded. Use /llama to load a model, then /model to select it.`\n\t\t: `${actionLabel}. Use /model to select a loaded llama.cpp model, or /llama to manage models.`;\n}\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tpreviousModel: Model<Api> | undefined,\n\toptions: { modelsRefreshed?: boolean } = {},\n): Promise<void> {\n\tif (!options.modelsRefreshed) {\n\t\t// Match pi: after authentication persists the credential, a thrown catalog\n\t\t// refresh failure remains visible to the caller without rolling it back.\n\t\tawait this.session.modelRuntime.refresh();\n\t}\n\n\tconst actionLabel = authType === \"oauth\" ? `Logged in to ${providerName}` : `Saved API key for ${providerName}`;\n\n\tlet selectedModel: Model<Api> | undefined;\n\tlet selectionError: string | undefined;\n\tif (providerId !== \"typesafe\" && isUnknownModel(previousModel)) {\n\t\tconst availableModels = this.session.modelRuntime.getAvailableSnapshot();\n\t\tconst providerModels = availableModels.filter((model) => model.provider === providerId);\n\t\tif (providerId === \"llama.cpp\") {\n\t\t\tselectionError = llamaCppPostLoginGuidance(actionLabel, providerModels.length);\n\t\t} else if (!hasDefaultModelProvider(providerId)) {\n\t\t\tselectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n\t\t} else if (providerModels.length === 0) {\n\t\t\tselectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n\t\t} else {\n\t\t\tconst defaultModelId = defaultModelPerProvider[providerId];\n\t\t\tselectedModel =\n\t\t\t\tproviderModels.find((model) => model.id === defaultModelId) ??\n\t\t\t\t(providerId === \"radius\" ? providerModels[0] : undefined);\n\t\t\tif (!selectedModel) {\n\t\t\t\tselectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.setModel(selectedModel);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tselectedModel = undefined;\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tselectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tawait this.updateAvailableProviderCount();\n\tthis.setupAutocompleteProvider();\n\tthis.footer.invalidate();\n\tthis.updateEditorBorderColor();\n\tif (selectedModel) {\n\t\tthis.showStatus(`${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`);\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n\t\tthis.checkDaxnutsEasterEgg(selectedModel);\n\t} else {\n\t\tthis.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n\t\tif (selectionError) {\n\t\t\tthis.showError(selectionError);\n\t\t} else {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): void {\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t() => restoreEditor(),\n\t\tproviderName,\n\t\t\"Amazon Bedrock setup\",\n\t);\n\tdialog.showDetails([\n\t\ttheme.fg(\"text\", \"Amazon Bedrock uses AWS credentials instead of a single API key.\"),\n\t\ttheme.fg(\"text\", \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\"),\n\t\ttheme.fg(\"muted\", \"See:\"),\n\t\ttheme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n\t]);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginApiKeyProvider(providerId, {\n\t\t\tsignal: dialog.signal,\n\t\t\tprompt: (prompt) =>\n\t\t\t\tdialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined),\n\t\t\tnotify: (event) => {\n\t\t\t\tif (event.type === \"info\") dialog.showInfo(event.message, event.links);\n\t\t\t\telse if (event.type === \"progress\") dialog.showProgress(event.message);\n\t\t\t},\n\t\t});\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"api_key\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(\n\t\t\t\t`Saved API key for ${providerName}, but local model state could not be synchronized: ${errorMsg}`,\n\t\t\t);\n\t\t} else if (!isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function (\n\tthis: InteractiveModeBase,\n\tdialog: LoginDialogComponent,\n\tprompt: OAuthSelectPrompt,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst restoreDialog = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(dialog);\n\t\t\tthis.ui.setFocus(dialog);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t\tconst labels = prompt.options.map((option) => option.label);\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\tprompt.message,\n\t\t\tlabels,\n\t\t\t(optionLabel) => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(prompt.options.find((option) => option.label === optionLabel)?.id);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(selector);\n\t\tthis.ui.setFocus(selector);\n\t\tthis.ui.requestRender();\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\tconst metadata = this.session.modelRuntime?.getOAuthProviderMetadata().find(({ id }) => id === providerId);\n\tconst usesCallbackServer = metadata?.usesCallbackServer === true;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t\tmetadata?.loginLabel,\n\t);\n\n\t// Show dialog in editor container\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\t// Promise for manual code input (racing with callback server)\n\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\tmanualCodeResolve = resolve;\n\t\tmanualCodeReject = reject;\n\t});\n\n\t// Restore editor helper\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tlet loginSucceeded = false;\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginOAuthProvider(providerId, {\n\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\tdialog.showAuth(info.url, info.instructions, {\n\t\t\t\t\tshowCancelHint: !usesCallbackServer,\n\t\t\t\t});\n\n\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t},\n\n\t\t\tonDeviceCode: (info) => {\n\t\t\t\tdialog.showDeviceCode(info);\n\t\t\t\tdialog.showWaiting(\"Waiting for authentication...\");\n\t\t\t},\n\n\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\treturn dialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined);\n\t\t\t},\n\n\t\t\tonProgress: (message: string) => {\n\t\t\t\tdialog.showProgress(message);\n\t\t\t},\n\n\t\t\tonInfo: (message, links) => {\n\t\t\t\tdialog.showInfo(message, links);\n\t\t\t},\n\n\t\t\tonSelect: (prompt: OAuthSelectPrompt) => this.showOAuthLoginSelect(dialog, prompt),\n\n\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\tonManualCodeCancel: () => {\n\t\t\t\tdialog.dismissPendingInput();\n\t\t\t\tmanualCodeResolve?.(\"\");\n\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\tmanualCodeReject = undefined;\n\t\t\t},\n\n\t\t\tsignal: dialog.signal,\n\t\t});\n\t\tloginSucceeded = true;\n\n\t\t// Success\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"oauth\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(`Logged in to ${providerName}, but local model state could not be synchronized: ${errorMsg}`);\n\t\t} else if (loginSucceeded || !isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n"]}
1
+ {"version":3,"file":"interactive-auth-login.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-auth-login.ts"],"names":[],"mappings":"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","sourcesContent":["import { CredentialSynchronizationError } from \"../../core/model-runtime.js\";\nimport { isOAuthLoginCancelled } from \"../../core/oauth-login.ts\";\nimport { InteractiveModeBase } from \"./interactive-mode-base.ts\";\nimport {\n\ttype Api,\n\tdefaultModelPerProvider,\n\tExtensionSelectorComponent,\n\tgetAuthPath,\n\tgetDocsPath,\n\tLoginDialogComponent,\n\ttype Model,\n\ttype OAuthSelectPrompt,\n\tpath,\n\ttheme,\n} from \"./interactive-mode-deps.ts\";\nimport { hasDefaultModelProvider, isUnknownModel } from \"./interactive-mode-helpers.ts\";\n\nexport function llamaCppPostLoginGuidance(actionLabel: string, loadedModelCount: number): string {\n\treturn loadedModelCount === 0\n\t\t? `${actionLabel}. No llama.cpp models are loaded. Use /llama to load a model, then /model to select it.`\n\t\t: `${actionLabel}. Use /model to select a loaded llama.cpp model, or /llama to manage models.`;\n}\n\nInteractiveModeBase.prototype.completeProviderAuthentication = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tauthType: \"oauth\" | \"api_key\",\n\tpreviousModel: Model<Api> | undefined,\n\toptions: { modelsRefreshed?: boolean } = {},\n): Promise<void> {\n\tif (!options.modelsRefreshed) {\n\t\t// Match pi: after authentication persists the credential, a thrown catalog\n\t\t// refresh failure remains visible to the caller without rolling it back.\n\t\tawait this.session.modelRuntime.refresh();\n\t}\n\n\tconst actionLabel = authType === \"oauth\" ? `Logged in to ${providerName}` : `Saved API key for ${providerName}`;\n\n\tlet selectedModel: Model<Api> | undefined;\n\tlet selectionError: string | undefined;\n\tif (providerId !== \"typesafe\" && isUnknownModel(previousModel)) {\n\t\tconst availableModels = this.session.modelRuntime.getAvailableSnapshot();\n\t\tconst providerModels = availableModels.filter((model) => model.provider === providerId);\n\t\tif (providerId === \"llama.cpp\") {\n\t\t\tselectionError = llamaCppPostLoginGuidance(actionLabel, providerModels.length);\n\t\t} else if (!hasDefaultModelProvider(providerId)) {\n\t\t\tselectionError = `${actionLabel}, but no default model is configured for provider \"${providerId}\". Use /model to select a model.`;\n\t\t} else if (providerModels.length === 0) {\n\t\t\tselectionError = `${actionLabel}, but no models are available for that provider. Use /model to select a model.`;\n\t\t} else {\n\t\t\tconst defaultModelId = defaultModelPerProvider[providerId];\n\t\t\tselectedModel =\n\t\t\t\tproviderModels.find((model) => model.id === defaultModelId) ??\n\t\t\t\t(providerId === \"radius\" ? providerModels[0] : undefined);\n\t\t\tif (!selectedModel) {\n\t\t\t\tselectionError = `${actionLabel}, but its default model \"${defaultModelId}\" is not available. Use /model to select a model.`;\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.setModel(selectedModel);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tselectedModel = undefined;\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tselectionError = `${actionLabel}, but selecting its default model failed: ${errorMessage}. Use /model to select a model.`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tawait this.updateAvailableProviderCount();\n\tthis.setupAutocompleteProvider();\n\tthis.footer.invalidate();\n\tthis.updateEditorBorderColor();\n\tif (selectedModel) {\n\t\tthis.showStatus(`${actionLabel}. Selected ${selectedModel.id}. Credentials saved to ${getAuthPath()}`);\n\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth(selectedModel);\n\t\tthis.checkDaxnutsEasterEgg(selectedModel);\n\t} else {\n\t\tthis.showStatus(`${actionLabel}. Credentials saved to ${getAuthPath()}`);\n\t\tif (selectionError) {\n\t\t\tthis.showError(selectionError);\n\t\t} else {\n\t\t\tvoid this.maybeWarnAboutAnthropicSubscriptionAuth();\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showBedrockSetupDialog = function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tonBack?: () => void,\n): void {\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t() => {\n\t\t\trestoreEditor();\n\t\t\tonBack?.();\n\t\t},\n\t\tproviderName,\n\t\t\"Amazon Bedrock setup\",\n\t);\n\tdialog.showDetails([\n\t\ttheme.fg(\"text\", \"Amazon Bedrock uses AWS credentials instead of a single API key.\"),\n\t\ttheme.fg(\"text\", \"Configure an AWS profile, IAM keys, bearer token, or role-based credentials.\"),\n\t\ttheme.fg(\"muted\", \"See:\"),\n\t\ttheme.fg(\"accent\", ` ${path.join(getDocsPath(), \"providers.md\")}`),\n\t]);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n};\n\nInteractiveModeBase.prototype.showApiKeyLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tonBack?: () => void,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t);\n\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginApiKeyProvider(providerId, {\n\t\t\tsignal: dialog.signal,\n\t\t\tprompt: (prompt) =>\n\t\t\t\tdialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined),\n\t\t\tnotify: (event) => {\n\t\t\t\tif (event.type === \"info\") dialog.showInfo(event.message, event.links);\n\t\t\t\telse if (event.type === \"progress\") dialog.showProgress(event.message);\n\t\t\t},\n\t\t});\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"api_key\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(\n\t\t\t\t`Saved API key for ${providerName}, but local model state could not be synchronized: ${errorMsg}`,\n\t\t\t);\n\t\t} else if (isOAuthLoginCancelled(error)) {\n\t\t\tonBack?.();\n\t\t} else {\n\t\t\tthis.showError(`Failed to save API key for ${providerName}: ${errorMsg}`);\n\t\t}\n\t}\n};\n\nInteractiveModeBase.prototype.showOAuthLoginSelect = function (\n\tthis: InteractiveModeBase,\n\tdialog: LoginDialogComponent,\n\tprompt: OAuthSelectPrompt,\n): Promise<string | undefined> {\n\treturn new Promise((resolve) => {\n\t\tconst restoreDialog = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(dialog);\n\t\t\tthis.ui.setFocus(dialog);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t\tconst labels = prompt.options.map((option) => option.label);\n\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\tprompt.message,\n\t\t\tlabels,\n\t\t\t(optionLabel) => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(prompt.options.find((option) => option.label === optionLabel)?.id);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\trestoreDialog();\n\t\t\t\tresolve(undefined);\n\t\t\t},\n\t\t);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(selector);\n\t\tthis.ui.setFocus(selector);\n\t\tthis.ui.requestRender();\n\t});\n};\n\nInteractiveModeBase.prototype.showLoginDialog = async function (\n\tthis: InteractiveModeBase,\n\tproviderId: string,\n\tproviderName: string,\n\tonBack?: () => void,\n): Promise<void> {\n\tconst previousModel = this.session.model;\n\tconst metadata = this.session.modelRuntime?.getOAuthProviderMetadata().find(({ id }) => id === providerId);\n\tconst usesCallbackServer = metadata?.usesCallbackServer === true;\n\n\tconst dialog = new LoginDialogComponent(\n\t\tthis.ui,\n\t\tproviderId,\n\t\t(_success, _message) => {\n\t\t\t// Completion handled below\n\t\t},\n\t\tproviderName,\n\t\tmetadata?.loginLabel,\n\t);\n\n\t// Show dialog in editor container\n\tthis.editorContainer.clear();\n\tthis.editorContainer.addChild(dialog);\n\tthis.ui.setFocus(dialog);\n\tthis.ui.requestRender();\n\n\t// Promise for manual code input (racing with callback server)\n\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\tmanualCodeResolve = resolve;\n\t\tmanualCodeReject = reject;\n\t});\n\n\t// Restore editor helper\n\tconst restoreEditor = () => {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t};\n\n\tlet loginSucceeded = false;\n\ttry {\n\t\tconst loginResult = await this.runtimeHost.loginOAuthProvider(providerId, {\n\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\tdialog.showAuth(info.url, info.instructions, {\n\t\t\t\t\tshowCancelHint: !usesCallbackServer,\n\t\t\t\t});\n\n\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\tdialog\n\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t},\n\n\t\t\tonDeviceCode: (info) => {\n\t\t\t\tdialog.showDeviceCode(info);\n\t\t\t\tdialog.showWaiting(\"Waiting for authentication...\");\n\t\t\t},\n\n\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\treturn dialog.showPrompt(prompt.message, \"placeholder\" in prompt ? prompt.placeholder : undefined);\n\t\t\t},\n\n\t\t\tonProgress: (message: string) => {\n\t\t\t\tdialog.showProgress(message);\n\t\t\t},\n\n\t\t\tonInfo: (message, links) => {\n\t\t\t\tdialog.showInfo(message, links);\n\t\t\t},\n\n\t\t\tonSelect: (prompt: OAuthSelectPrompt) => this.showOAuthLoginSelect(dialog, prompt),\n\n\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\tonManualCodeCancel: () => {\n\t\t\t\tdialog.dismissPendingInput();\n\t\t\t\tmanualCodeResolve?.(\"\");\n\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\tmanualCodeReject = undefined;\n\t\t\t},\n\n\t\t\tsignal: dialog.signal,\n\t\t});\n\t\tloginSucceeded = true;\n\n\t\t// Success\n\t\trestoreEditor();\n\t\tawait this.completeProviderAuthentication(providerId, providerName, \"oauth\", previousModel, loginResult);\n\t} catch (error: unknown) {\n\t\trestoreEditor();\n\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\tif (error instanceof CredentialSynchronizationError) {\n\t\t\tthis.showError(`Logged in to ${providerName}, but local model state could not be synchronized: ${errorMsg}`);\n\t\t} else if (loginSucceeded || !isOAuthLoginCancelled(error)) {\n\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t} else {\n\t\t\tonBack?.();\n\t\t}\n\t}\n};\n"]}