dexto 1.4.0 → 1.5.0

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 (223) hide show
  1. package/README.md +62 -7
  2. package/dist/agents/agent-template.yml +2 -2
  3. package/dist/agents/coding-agent/coding-agent.yml +22 -16
  4. package/dist/agents/database-agent/database-agent.yml +2 -2
  5. package/dist/agents/default-agent.yml +7 -5
  6. package/dist/agents/github-agent/github-agent.yml +2 -2
  7. package/dist/agents/product-name-researcher/product-name-researcher.yml +2 -2
  8. package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +2 -2
  9. package/dist/analytics/events.d.ts +13 -6
  10. package/dist/analytics/events.d.ts.map +1 -1
  11. package/dist/analytics/index.d.ts +1 -1
  12. package/dist/analytics/index.d.ts.map +1 -1
  13. package/dist/analytics/index.js +6 -2
  14. package/dist/api/server-hono.d.ts.map +1 -1
  15. package/dist/api/server-hono.js +27 -5
  16. package/dist/cli/cli-subscriber.d.ts +4 -0
  17. package/dist/cli/cli-subscriber.d.ts.map +1 -1
  18. package/dist/cli/cli-subscriber.js +40 -2
  19. package/dist/cli/commands/create-app.d.ts +16 -14
  20. package/dist/cli/commands/create-app.d.ts.map +1 -1
  21. package/dist/cli/commands/create-app.js +626 -102
  22. package/dist/cli/commands/create-image.d.ts +7 -0
  23. package/dist/cli/commands/create-image.d.ts.map +1 -0
  24. package/dist/cli/commands/create-image.js +201 -0
  25. package/dist/cli/commands/helpers/formatters.js +7 -7
  26. package/dist/cli/commands/index.d.ts +2 -1
  27. package/dist/cli/commands/index.d.ts.map +1 -1
  28. package/dist/cli/commands/index.js +2 -1
  29. package/dist/cli/commands/init-app.js +7 -7
  30. package/dist/cli/commands/install.d.ts +0 -3
  31. package/dist/cli/commands/install.d.ts.map +1 -1
  32. package/dist/cli/commands/install.js +10 -35
  33. package/dist/cli/commands/interactive-commands/command-parser.js +7 -7
  34. package/dist/cli/commands/interactive-commands/general-commands.js +1 -1
  35. package/dist/cli/commands/interactive-commands/prompt-commands.js +11 -11
  36. package/dist/cli/commands/interactive-commands/system/system-commands.js +3 -3
  37. package/dist/cli/commands/list-agents.js +2 -2
  38. package/dist/cli/commands/session-commands.js +16 -16
  39. package/dist/cli/commands/setup.d.ts +13 -5
  40. package/dist/cli/commands/setup.d.ts.map +1 -1
  41. package/dist/cli/commands/setup.js +860 -65
  42. package/dist/cli/commands/which.js +1 -1
  43. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -0
  44. package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
  45. package/dist/cli/ink-cli/components/ApprovalPrompt.js +29 -7
  46. package/dist/cli/ink-cli/components/CustomInput.js +1 -1
  47. package/dist/cli/ink-cli/components/EditableMultiLineInput.js +4 -4
  48. package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
  49. package/dist/cli/ink-cli/components/ElicitationForm.js +6 -6
  50. package/dist/cli/ink-cli/components/ErrorBoundary.d.ts.map +1 -1
  51. package/dist/cli/ink-cli/components/ErrorBoundary.js +1 -1
  52. package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
  53. package/dist/cli/ink-cli/components/Footer.js +1 -1
  54. package/dist/cli/ink-cli/components/HistorySearchBar.d.ts.map +1 -1
  55. package/dist/cli/ink-cli/components/HistorySearchBar.js +1 -1
  56. package/dist/cli/ink-cli/components/MultiLineInput.d.ts.map +1 -1
  57. package/dist/cli/ink-cli/components/MultiLineInput.js +3 -3
  58. package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
  59. package/dist/cli/ink-cli/components/ResourceAutocomplete.js +4 -4
  60. package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +3 -3
  61. package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
  62. package/dist/cli/ink-cli/components/StatusBar.js +7 -5
  63. package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
  64. package/dist/cli/ink-cli/components/TextBufferInput.js +6 -6
  65. package/dist/cli/ink-cli/components/base/BaseAutocomplete.js +4 -4
  66. package/dist/cli/ink-cli/components/base/BaseSelector.js +2 -2
  67. package/dist/cli/ink-cli/components/chat/Footer.js +1 -1
  68. package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
  69. package/dist/cli/ink-cli/components/chat/Header.js +2 -4
  70. package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
  71. package/dist/cli/ink-cli/components/chat/MessageItem.js +5 -5
  72. package/dist/cli/ink-cli/components/chat/MessageList.js +1 -1
  73. package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.js +1 -1
  74. package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts +1 -1
  75. package/dist/cli/ink-cli/components/chat/ToolIcon.js +4 -4
  76. package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
  77. package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.js +1 -1
  78. package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +2 -2
  79. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.js +5 -5
  80. package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.js +2 -2
  81. package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.js +1 -1
  82. package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.js +1 -1
  83. package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.js +2 -2
  84. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
  85. package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +1 -1
  86. package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
  87. package/dist/cli/ink-cli/components/modes/StaticCLI.js +1 -1
  88. package/dist/cli/ink-cli/components/overlays/ApiKeyInput.js +1 -1
  89. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts +10 -2
  90. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
  91. package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +198 -89
  92. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +1 -1
  93. package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +2 -2
  94. package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts.map +1 -1
  95. package/dist/cli/ink-cli/components/overlays/McpAddChoice.js +1 -1
  96. package/dist/cli/ink-cli/components/overlays/McpAddSelector.js +1 -1
  97. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
  98. package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.js +2 -2
  99. package/dist/cli/ink-cli/components/overlays/McpCustomWizard.js +1 -1
  100. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +1 -1
  101. package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +1 -1
  102. package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts.map +1 -1
  103. package/dist/cli/ink-cli/components/overlays/McpSelector.js +1 -1
  104. package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts.map +1 -1
  105. package/dist/cli/ink-cli/components/overlays/McpServerActions.js +2 -2
  106. package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +1 -1
  107. package/dist/cli/ink-cli/components/overlays/McpServerList.js +1 -1
  108. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +5 -5
  109. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
  110. package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +222 -68
  111. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts.map +1 -1
  112. package/dist/cli/ink-cli/components/overlays/PromptAddChoice.js +2 -2
  113. package/dist/cli/ink-cli/components/overlays/PromptAddWizard.js +1 -1
  114. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
  115. package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.js +2 -2
  116. package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
  117. package/dist/cli/ink-cli/components/overlays/PromptList.js +2 -2
  118. package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts.map +1 -1
  119. package/dist/cli/ink-cli/components/overlays/SearchOverlay.js +4 -4
  120. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
  121. package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.js +1 -1
  122. package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts.map +1 -1
  123. package/dist/cli/ink-cli/components/overlays/StreamSelector.js +1 -1
  124. package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +12 -12
  125. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +25 -0
  126. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -0
  127. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +609 -0
  128. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts +15 -0
  129. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts.map +1 -0
  130. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.js +14 -0
  131. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +33 -0
  132. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -0
  133. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +419 -0
  134. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +25 -0
  135. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -0
  136. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +29 -0
  137. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +17 -0
  138. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -0
  139. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.js +11 -0
  140. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +20 -0
  141. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -0
  142. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +10 -0
  143. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +30 -0
  144. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -0
  145. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.js +13 -0
  146. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts +8 -0
  147. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts.map +1 -0
  148. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.js +7 -0
  149. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +79 -0
  150. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +1 -0
  151. package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.js +38 -0
  152. package/dist/cli/ink-cli/components/renderers/DiffRenderer.js +2 -2
  153. package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +1 -1
  154. package/dist/cli/ink-cli/components/renderers/FileRenderer.js +4 -4
  155. package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +2 -2
  156. package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +1 -1
  157. package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +3 -3
  158. package/dist/cli/ink-cli/components/renderers/diff-shared.js +1 -1
  159. package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +1 -1
  160. package/dist/cli/ink-cli/components/shared/MarkdownText.js +8 -6
  161. package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
  162. package/dist/cli/ink-cli/containers/InputContainer.js +23 -1
  163. package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
  164. package/dist/cli/ink-cli/containers/OverlayContainer.js +80 -24
  165. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +1 -1
  166. package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
  167. package/dist/cli/ink-cli/hooks/useAgentEvents.js +5 -1
  168. package/dist/cli/ink-cli/hooks/useCLIState.d.ts +1 -1
  169. package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
  170. package/dist/cli/ink-cli/hooks/useCLIState.js +4 -2
  171. package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
  172. package/dist/cli/ink-cli/services/processStream.js +77 -9
  173. package/dist/cli/ink-cli/state/types.d.ts +3 -2
  174. package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
  175. package/dist/cli/ink-cli/utils/messageFormatting.d.ts +5 -0
  176. package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
  177. package/dist/cli/ink-cli/utils/messageFormatting.js +59 -1
  178. package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
  179. package/dist/cli/ink-cli/utils/toolUtils.js +2 -0
  180. package/dist/cli/utils/api-key-setup.d.ts +54 -4
  181. package/dist/cli/utils/api-key-setup.d.ts.map +1 -1
  182. package/dist/cli/utils/api-key-setup.js +433 -107
  183. package/dist/cli/utils/api-key-verification.d.ts +17 -0
  184. package/dist/cli/utils/api-key-verification.d.ts.map +1 -0
  185. package/dist/cli/utils/api-key-verification.js +211 -0
  186. package/dist/cli/utils/config-validation.d.ts +22 -2
  187. package/dist/cli/utils/config-validation.d.ts.map +1 -1
  188. package/dist/cli/utils/config-validation.js +354 -25
  189. package/dist/cli/utils/local-model-setup.d.ts +46 -0
  190. package/dist/cli/utils/local-model-setup.d.ts.map +1 -0
  191. package/dist/cli/utils/local-model-setup.js +662 -0
  192. package/dist/cli/utils/options.js +1 -1
  193. package/dist/cli/utils/prompt-helpers.d.ts +47 -0
  194. package/dist/cli/utils/prompt-helpers.d.ts.map +1 -0
  195. package/dist/cli/utils/prompt-helpers.js +66 -0
  196. package/dist/cli/utils/provider-setup.d.ts +66 -8
  197. package/dist/cli/utils/provider-setup.d.ts.map +1 -1
  198. package/dist/cli/utils/provider-setup.js +324 -84
  199. package/dist/cli/utils/scaffolding-utils.d.ts +76 -0
  200. package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -0
  201. package/dist/cli/utils/scaffolding-utils.js +246 -0
  202. package/dist/cli/utils/setup-utils.d.ts +16 -0
  203. package/dist/cli/utils/setup-utils.d.ts.map +1 -1
  204. package/dist/cli/utils/setup-utils.js +72 -21
  205. package/dist/cli/utils/template-engine.d.ts +65 -0
  206. package/dist/cli/utils/template-engine.d.ts.map +1 -0
  207. package/dist/cli/utils/template-engine.js +1089 -0
  208. package/dist/config/cli-overrides.d.ts +44 -1
  209. package/dist/config/cli-overrides.d.ts.map +1 -1
  210. package/dist/config/cli-overrides.js +102 -0
  211. package/dist/index.js +315 -53
  212. package/dist/webui/assets/index-8j-KMkX1.js +2054 -0
  213. package/dist/webui/assets/index-c_AX24V4.css +1 -0
  214. package/dist/webui/index.html +3 -9
  215. package/dist/webui/logos/aws-color.svg +1 -0
  216. package/dist/webui/logos/dexto/dexto_logo.svg +1 -1
  217. package/dist/webui/logos/dexto/dexto_logo_light.svg +6 -6
  218. package/dist/webui/logos/glama.svg +7 -0
  219. package/dist/webui/logos/litellm.svg +7 -0
  220. package/dist/webui/logos/openrouter.svg +1 -0
  221. package/package.json +8 -7
  222. package/dist/webui/assets/index-BkwPkZpd.css +0 -1
  223. package/dist/webui/assets/index-D9u1XfyH.js +0 -2025
@@ -1,14 +1,14 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * ModelSelector Component (Refactored)
4
4
  * Features:
5
5
  * - Search filtering
6
- * - Custom models support (add/delete)
7
- * - Keyboard shortcuts: Shift+D to delete custom model
6
+ * - Custom models support (add/edit/delete via arrow navigation)
8
7
  */
9
- import { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, } from 'react';
8
+ import { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, useCallback, } from 'react';
10
9
  import { Box, Text } from 'ink';
11
- import { loadCustomModels, deleteCustomModel } from '@dexto/agent-management';
10
+ import { listOllamaModels, DEFAULT_OLLAMA_URL, getLocalModelById } from '@dexto/core';
11
+ import { loadCustomModels, deleteCustomModel, getAllInstalledModels, } from '@dexto/agent-management';
12
12
  function isAddCustomOption(item) {
13
13
  return 'type' in item && item.type === 'add-custom';
14
14
  }
@@ -16,14 +16,15 @@ const MAX_VISIBLE_ITEMS = 10;
16
16
  /**
17
17
  * Model selector with search and custom model support
18
18
  */
19
- const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onClose, onAddCustomModel, agent }, ref) {
19
+ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onClose, onAddCustomModel, onEditCustomModel, agent }, ref) {
20
20
  const [models, setModels] = useState([]);
21
21
  const [customModels, setCustomModels] = useState([]);
22
22
  const [isLoading, setIsLoading] = useState(false);
23
23
  const [selectedIndex, setSelectedIndex] = useState(0);
24
24
  const [searchQuery, setSearchQuery] = useState('');
25
25
  const [scrollOffset, setScrollOffset] = useState(0);
26
- const [pendingDeleteModel, setPendingDeleteModel] = useState(null);
26
+ const [customModelAction, setCustomModelAction] = useState(null);
27
+ const [pendingDeleteConfirm, setPendingDeleteConfirm] = useState(false);
27
28
  const selectedIndexRef = useRef(selectedIndex);
28
29
  const deleteTimeoutRef = useRef(null);
29
30
  // Keep ref in sync
@@ -45,7 +46,8 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
45
46
  setSearchQuery('');
46
47
  setSelectedIndex(0);
47
48
  setScrollOffset(0);
48
- setPendingDeleteModel(null);
49
+ setCustomModelAction(null);
50
+ setPendingDeleteConfirm(false);
49
51
  if (deleteTimeoutRef.current) {
50
52
  clearTimeout(deleteTimeoutRef.current);
51
53
  deleteTimeoutRef.current = null;
@@ -59,25 +61,56 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
59
61
  loadCustomModels(),
60
62
  ]);
61
63
  const modelList = [];
64
+ // Fetch dynamic models for local providers
65
+ let ollamaModels = [];
66
+ let localModels = [];
67
+ try {
68
+ ollamaModels = await listOllamaModels(DEFAULT_OLLAMA_URL);
69
+ }
70
+ catch (error) {
71
+ // Ollama not available, skip
72
+ agent.logger.debug('Ollama not available for model listing');
73
+ }
74
+ try {
75
+ localModels = await getAllInstalledModels();
76
+ }
77
+ catch (error) {
78
+ // Local models not available, skip
79
+ agent.logger.debug('Local models not available for listing');
80
+ }
62
81
  // Add custom models first
63
82
  for (const custom of loadedCustomModels) {
64
- modelList.push({
65
- provider: 'openai-compatible',
83
+ // Use provider from custom model, default to openai-compatible for legacy models
84
+ const customProvider = (custom.provider ?? 'openai-compatible');
85
+ const modelOption = {
86
+ provider: customProvider,
66
87
  name: custom.name,
67
88
  displayName: custom.displayName || custom.name,
68
89
  maxInputTokens: custom.maxInputTokens || 128000,
69
90
  isDefault: false,
70
- isCurrent: currentConfig.provider === 'openai-compatible' &&
91
+ isCurrent: currentConfig.provider === customProvider &&
71
92
  currentConfig.model === custom.name,
72
93
  isCustom: true,
73
- baseURL: custom.baseURL,
74
- });
94
+ };
95
+ if (custom.baseURL) {
96
+ modelOption.baseURL = custom.baseURL;
97
+ }
98
+ modelList.push(modelOption);
75
99
  }
76
100
  // Add registry models
77
101
  for (const provider of providers) {
78
- // Skip openai-compatible as those are shown via custom models
79
- if (provider === 'openai-compatible')
102
+ // Skip custom-only providers that don't have a static model list
103
+ // These are only accessible via the "Add custom model" wizard
104
+ if (provider === 'openai-compatible' ||
105
+ provider === 'openrouter' ||
106
+ provider === 'litellm' ||
107
+ provider === 'glama' ||
108
+ provider === 'bedrock')
109
+ continue;
110
+ // Skip ollama, local, and vertex - they'll be added dynamically below
111
+ if (provider === 'ollama' || provider === 'local' || provider === 'vertex') {
80
112
  continue;
113
+ }
81
114
  const providerModels = allModels[provider];
82
115
  for (const model of providerModels) {
83
116
  modelList.push({
@@ -92,6 +125,52 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
92
125
  });
93
126
  }
94
127
  }
128
+ // Add Ollama models dynamically
129
+ for (const ollamaModel of ollamaModels) {
130
+ modelList.push({
131
+ provider: 'ollama',
132
+ name: ollamaModel.name,
133
+ displayName: ollamaModel.name,
134
+ maxInputTokens: 128000, // Default, actual varies by model
135
+ isDefault: false,
136
+ isCurrent: currentConfig.provider === 'ollama' &&
137
+ currentConfig.model === ollamaModel.name,
138
+ isCustom: false,
139
+ });
140
+ }
141
+ // Add local models dynamically
142
+ for (const localModel of localModels) {
143
+ // Get display name from registry if available
144
+ const modelInfo = getLocalModelById(localModel.id);
145
+ const displayName = modelInfo?.name || localModel.id;
146
+ const maxInputTokens = modelInfo?.contextLength || 128000;
147
+ modelList.push({
148
+ provider: 'local',
149
+ name: localModel.id,
150
+ displayName,
151
+ maxInputTokens,
152
+ isDefault: false,
153
+ isCurrent: currentConfig.provider === 'local' &&
154
+ currentConfig.model === localModel.id,
155
+ isCustom: false,
156
+ });
157
+ }
158
+ // Add Vertex AI models from registry
159
+ const vertexModels = allModels['vertex'];
160
+ if (vertexModels) {
161
+ for (const model of vertexModels) {
162
+ modelList.push({
163
+ provider: 'vertex',
164
+ name: model.name,
165
+ displayName: model.displayName,
166
+ maxInputTokens: model.maxInputTokens,
167
+ isDefault: model.isDefault,
168
+ isCurrent: currentConfig.provider === 'vertex' &&
169
+ currentConfig.model === model.name,
170
+ isCustom: false,
171
+ });
172
+ }
173
+ }
95
174
  if (!cancelled) {
96
175
  setModels(modelList);
97
176
  setCustomModels(loadedCustomModels);
@@ -148,7 +227,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
148
227
  }
149
228
  }, [selectedIndex, scrollOffset]);
150
229
  // Handle delete custom model
151
- const handleDeleteCustomModel = async (model) => {
230
+ const handleDeleteCustomModel = useCallback(async (model) => {
152
231
  if (!model.isCustom)
153
232
  return;
154
233
  try {
@@ -162,6 +241,15 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
162
241
  catch (error) {
163
242
  agent.logger.error(`Failed to delete custom model: ${error instanceof Error ? error.message : 'Unknown error'}`);
164
243
  }
244
+ }, [agent]);
245
+ // Helper to clear action state
246
+ const clearActionState = () => {
247
+ setCustomModelAction(null);
248
+ setPendingDeleteConfirm(false);
249
+ if (deleteTimeoutRef.current) {
250
+ clearTimeout(deleteTimeoutRef.current);
251
+ deleteTimeoutRef.current = null;
252
+ }
165
253
  };
166
254
  // Expose handleInput method via ref
167
255
  useImperativeHandle(ref, () => ({
@@ -170,46 +258,79 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
170
258
  return false;
171
259
  // Escape always works
172
260
  if (key.escape) {
261
+ // If in action mode, just clear it first
262
+ if (customModelAction) {
263
+ clearActionState();
264
+ return true;
265
+ }
173
266
  onClose();
174
267
  return true;
175
268
  }
176
- // Handle character input for search
177
- if (input && !key.return && !key.upArrow && !key.downArrow && !key.tab) {
178
- // Shift+D to delete custom model (requires double-press confirmation)
179
- if (input === 'D' && key.shift) {
180
- const item = filteredItems[selectedIndexRef.current];
181
- if (item && !isAddCustomOption(item) && item.isCustom) {
182
- if (pendingDeleteModel === item.name) {
183
- // Second press - actually delete
184
- if (deleteTimeoutRef.current) {
185
- clearTimeout(deleteTimeoutRef.current);
186
- deleteTimeoutRef.current = null;
187
- }
188
- setPendingDeleteModel(null);
189
- void handleDeleteCustomModel(item);
269
+ const itemsLength = filteredItems.length;
270
+ const currentItem = filteredItems[selectedIndexRef.current];
271
+ const isOnCustomModel = currentItem && !isAddCustomOption(currentItem) && currentItem.isCustom;
272
+ // Right arrow - enter/advance action mode for custom models
273
+ if (key.rightArrow) {
274
+ if (!isOnCustomModel)
275
+ return false;
276
+ if (customModelAction === null) {
277
+ // Enter edit mode
278
+ setCustomModelAction('edit');
279
+ return true;
280
+ }
281
+ else if (customModelAction === 'edit') {
282
+ // Advance to delete mode
283
+ setCustomModelAction('delete');
284
+ setPendingDeleteConfirm(false);
285
+ return true;
286
+ }
287
+ else if (customModelAction === 'delete') {
288
+ // In delete mode, right arrow confirms deletion
289
+ if (pendingDeleteConfirm) {
290
+ // Second press - actually delete
291
+ if (deleteTimeoutRef.current) {
292
+ clearTimeout(deleteTimeoutRef.current);
293
+ deleteTimeoutRef.current = null;
190
294
  }
191
- else {
192
- // First press - set pending and start timeout
193
- setPendingDeleteModel(item.name);
194
- if (deleteTimeoutRef.current) {
195
- clearTimeout(deleteTimeoutRef.current);
196
- }
197
- deleteTimeoutRef.current = setTimeout(() => {
198
- setPendingDeleteModel(null);
199
- deleteTimeoutRef.current = null;
200
- }, 3000); // 3 second timeout
295
+ clearActionState();
296
+ void handleDeleteCustomModel(currentItem);
297
+ }
298
+ else {
299
+ // First press in delete mode - set pending confirmation
300
+ setPendingDeleteConfirm(true);
301
+ if (deleteTimeoutRef.current) {
302
+ clearTimeout(deleteTimeoutRef.current);
201
303
  }
202
- return true;
304
+ deleteTimeoutRef.current = setTimeout(() => {
305
+ setPendingDeleteConfirm(false);
306
+ deleteTimeoutRef.current = null;
307
+ }, 3000); // 3 second timeout
203
308
  }
204
- return false;
309
+ return true;
205
310
  }
206
- // Any other input clears the pending delete confirmation
207
- if (pendingDeleteModel) {
208
- setPendingDeleteModel(null);
311
+ }
312
+ // Left arrow - go back in action mode
313
+ if (key.leftArrow) {
314
+ if (customModelAction === 'delete') {
315
+ setCustomModelAction('edit');
316
+ setPendingDeleteConfirm(false);
209
317
  if (deleteTimeoutRef.current) {
210
318
  clearTimeout(deleteTimeoutRef.current);
211
319
  deleteTimeoutRef.current = null;
212
320
  }
321
+ return true;
322
+ }
323
+ else if (customModelAction === 'edit') {
324
+ setCustomModelAction(null);
325
+ return true;
326
+ }
327
+ return false;
328
+ }
329
+ // Handle character input for search
330
+ if (input && !key.return && !key.upArrow && !key.downArrow && !key.tab) {
331
+ // Any character input clears action state and adds to search
332
+ if (customModelAction) {
333
+ clearActionState();
213
334
  }
214
335
  // Backspace
215
336
  if (key.backspace || key.delete) {
@@ -229,17 +350,12 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
229
350
  setSearchQuery((prev) => prev.slice(0, -1));
230
351
  return true;
231
352
  }
232
- const itemsLength = filteredItems.length;
233
353
  if (itemsLength === 0)
234
354
  return false;
235
355
  if (key.upArrow) {
236
- // Clear pending delete on navigation
237
- if (pendingDeleteModel) {
238
- setPendingDeleteModel(null);
239
- if (deleteTimeoutRef.current) {
240
- clearTimeout(deleteTimeoutRef.current);
241
- deleteTimeoutRef.current = null;
242
- }
356
+ // Clear action state on vertical navigation
357
+ if (customModelAction) {
358
+ clearActionState();
243
359
  }
244
360
  const nextIndex = (selectedIndexRef.current - 1 + itemsLength) % itemsLength;
245
361
  setSelectedIndex(nextIndex);
@@ -247,13 +363,9 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
247
363
  return true;
248
364
  }
249
365
  if (key.downArrow) {
250
- // Clear pending delete on navigation
251
- if (pendingDeleteModel) {
252
- setPendingDeleteModel(null);
253
- if (deleteTimeoutRef.current) {
254
- clearTimeout(deleteTimeoutRef.current);
255
- deleteTimeoutRef.current = null;
256
- }
366
+ // Clear action state on vertical navigation
367
+ if (customModelAction) {
368
+ clearActionState();
257
369
  }
258
370
  const nextIndex = (selectedIndexRef.current + 1) % itemsLength;
259
371
  setSelectedIndex(nextIndex);
@@ -265,34 +377,76 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
265
377
  if (item) {
266
378
  if (isAddCustomOption(item)) {
267
379
  onAddCustomModel();
380
+ return true;
268
381
  }
269
- else {
270
- onSelectModel(item.provider, item.name, item.baseURL);
382
+ // Handle action mode confirmations
383
+ if (customModelAction === 'edit' && item.isCustom) {
384
+ // Find the full custom model data
385
+ const customModel = customModels.find((cm) => cm.name === item.name &&
386
+ (cm.provider ?? 'openai-compatible') === item.provider);
387
+ if (customModel) {
388
+ onEditCustomModel(customModel);
389
+ }
390
+ return true;
391
+ }
392
+ if (customModelAction === 'delete' && item.isCustom) {
393
+ if (pendingDeleteConfirm) {
394
+ // Already confirmed, delete
395
+ clearActionState();
396
+ void handleDeleteCustomModel(item);
397
+ }
398
+ else {
399
+ // Set pending confirmation
400
+ setPendingDeleteConfirm(true);
401
+ if (deleteTimeoutRef.current) {
402
+ clearTimeout(deleteTimeoutRef.current);
403
+ }
404
+ deleteTimeoutRef.current = setTimeout(() => {
405
+ setPendingDeleteConfirm(false);
406
+ deleteTimeoutRef.current = null;
407
+ }, 3000);
408
+ }
409
+ return true;
271
410
  }
411
+ // Normal selection
412
+ onSelectModel(item.provider, item.name, item.displayName, item.baseURL);
272
413
  return true;
273
414
  }
274
415
  }
275
416
  return false;
276
417
  },
277
- }), [isVisible, filteredItems, onClose, onSelectModel, onAddCustomModel, pendingDeleteModel]);
418
+ }), [
419
+ isVisible,
420
+ filteredItems,
421
+ onClose,
422
+ onSelectModel,
423
+ onAddCustomModel,
424
+ onEditCustomModel,
425
+ customModelAction,
426
+ pendingDeleteConfirm,
427
+ customModels,
428
+ handleDeleteCustomModel,
429
+ ]);
278
430
  if (!isVisible)
279
431
  return null;
280
432
  if (isLoading) {
281
- return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { dimColor: true, children: "Loading models..." }) }));
433
+ return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: "Loading models..." }) }));
282
434
  }
283
435
  const visibleItems = filteredItems.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS);
284
436
  const hasCustomModels = customModels.length > 0;
285
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "cyan", bold: true, children: ["Select Model (", selectedIndex + 1, "/", filteredItems.length, ")"] }) }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { dimColor: true, children: "\u2191\u2193 navigate, Enter select, Esc close" }), hasCustomModels && _jsx(Text, { dimColor: true, children: ", Shift+D delete custom" })] }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { color: "gray", children: "\uD83D\uDD0D " }), _jsx(Text, { color: searchQuery ? 'white' : 'gray', children: searchQuery || 'Type to search...' }), _jsx(Text, { color: "cyan", children: "\u258C" })] }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { dimColor: true, children: '─'.repeat(50) }) }), visibleItems.map((item, visibleIndex) => {
437
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "cyan", bold: true, children: ["Select Model (", selectedIndex + 1, "/", filteredItems.length, ")"] }) }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { color: "gray", children: "\u2191\u2193 navigate, Enter select, Esc close" }), hasCustomModels && _jsx(Text, { color: "gray", children: ", \u2192\u2190 for custom actions" })] }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { color: "gray", children: "\uD83D\uDD0D " }), _jsx(Text, { color: searchQuery ? 'white' : 'gray', children: searchQuery || 'Type to search...' }), _jsx(Text, { color: "cyan", children: "\u258C" })] }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: '─'.repeat(50) }) }), visibleItems.map((item, visibleIndex) => {
286
438
  const actualIndex = scrollOffset + visibleIndex;
287
439
  const isSelected = actualIndex === selectedIndex;
288
440
  if (isAddCustomOption(item)) {
289
441
  return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: isSelected ? 'green' : 'gray', bold: isSelected, children: "\u2795 Add custom model..." }) }, "add-custom"));
290
442
  }
291
- return (_jsxs(Box, { paddingX: 0, paddingY: 0, children: [item.isCustom && _jsx(Text, { color: isSelected ? 'yellow' : 'gray', children: "\u2605 " }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: item.displayName || item.name }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', "(", item.isCustom ? 'custom' : item.provider, ")"] }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', "\u2022 ", item.maxInputTokens.toLocaleString(), " tokens"] }), item.isDefault && (_jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', "[DEFAULT]"] })), item.isCurrent && (_jsxs(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: [' ', "\u2190 Current"] }))] }, `${item.provider}-${item.name}`));
292
- }), filteredItems.length > MAX_VISIBLE_ITEMS && (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { dimColor: true, children: [scrollOffset > 0 ? '↑ more above' : '', scrollOffset > 0 && scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
443
+ // Show action buttons for selected custom models
444
+ const showActions = isSelected && item.isCustom;
445
+ return (_jsxs(Box, { paddingX: 0, paddingY: 0, children: [item.isCustom && _jsx(Text, { color: isSelected ? 'orange' : 'gray', children: "\u2605 " }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: item.displayName || item.name }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" (", item.provider, ")"] }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', "\u2022 ", item.maxInputTokens.toLocaleString(), " tokens"] }), item.isDefault && (_jsx(Text, { color: isSelected ? 'white' : 'gray', children: " [DEFAULT]" })), item.isCurrent && !showActions && (_jsxs(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: [' ', "\u2190 Current"] })), showActions && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { color: customModelAction === 'edit' ? 'green' : 'gray', bold: customModelAction === 'edit', inverse: customModelAction === 'edit', children: [' ', "Edit", ' '] }), _jsx(Text, { children: " " }), _jsxs(Text, { color: customModelAction === 'delete' ? 'red' : 'gray', bold: customModelAction === 'delete', inverse: customModelAction === 'delete', children: [' ', "Delete", ' '] })] }))] }, `${item.provider}-${item.name}`));
446
+ }), filteredItems.length > MAX_VISIBLE_ITEMS && (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "gray", children: [scrollOffset > 0 ? '↑ more above' : '', scrollOffset > 0 && scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
293
447
  ? ' | '
294
448
  : '', scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
295
449
  ? '↓ more below'
296
- : ''] }) })), pendingDeleteModel && (_jsx(Box, { paddingX: 0, paddingY: 0, marginTop: 1, children: _jsxs(Text, { color: "yellow", children: ["\u26A0\uFE0F Press Shift+D again to delete '", pendingDeleteModel, "'"] }) }))] }));
450
+ : ''] }) })), customModelAction === 'delete' && pendingDeleteConfirm && (_jsx(Box, { paddingX: 0, paddingY: 0, marginTop: 1, children: _jsx(Text, { color: "yellowBright", children: "\u26A0\uFE0F Press \u2192 or Enter again to confirm delete" }) })), customModelAction && !pendingDeleteConfirm && (_jsx(Box, { paddingX: 0, paddingY: 0, marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["\u2190 ", customModelAction === 'edit' ? 'deselect' : 'edit', " | \u2192", ' ', customModelAction === 'edit' ? 'delete' : 'confirm', " | Enter", ' ', customModelAction] }) }))] }));
297
451
  });
298
452
  export default ModelSelector;
@@ -1 +1 @@
1
- {"version":3,"file":"PromptAddChoice.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptAddChoice.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5D,UAAU,oBAAoB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AA0BD;;GAEG;AACH,QAAA,MAAM,eAAe,oGA8DpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"PromptAddChoice.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptAddChoice.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5D,UAAU,oBAAoB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AA0BD;;GAEG;AACH,QAAA,MAAM,eAAe,oGA2DpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -41,12 +41,12 @@ const PromptAddChoice = forwardRef(function PromptAddChoice({ isVisible, onSelec
41
41
  }), []);
42
42
  // Format item for display
43
43
  const formatItem = (item, isSelected) => {
44
- return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: item.label }), item.recommended && (_jsxs(Text, { color: "green", dimColor: !isSelected, children: [' ', "(Recommended)"] })), _jsxs(Text, { dimColor: true, children: [" \u00B7 ", item.description] })] }));
44
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: item.label }), item.recommended && (_jsx(Text, { color: isSelected ? 'green' : 'gray', children: " (Recommended)" })), _jsxs(Text, { color: "gray", children: [" \u00B7 ", item.description] })] }));
45
45
  };
46
46
  // Handle selection
47
47
  const handleSelect = (item) => {
48
48
  onSelect(item.scope);
49
49
  };
50
- return (_jsx(BaseSelector, { ref: baseSelectorRef, items: CHOICES, isVisible: isVisible, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Add Prompt", borderColor: "yellow", emptyMessage: "No options available" }));
50
+ return (_jsx(BaseSelector, { ref: baseSelectorRef, items: CHOICES, isVisible: isVisible, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Add Prompt", borderColor: "yellowBright", emptyMessage: "No options available" }));
51
51
  });
52
52
  export default PromptAddChoice;
@@ -161,6 +161,6 @@ const PromptAddWizard = forwardRef(function PromptAddWizard({ isVisible, scope,
161
161
  if (!isVisible || !currentStepConfig)
162
162
  return null;
163
163
  const scopeLabel = scope === 'agent' ? 'Agent' : 'Shared';
164
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, marginTop: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "yellow", children: ["Add ", scopeLabel, " Prompt"] }), _jsxs(Text, { dimColor: true, children: [' ', "(Step ", currentStep + 1, "/", WIZARD_STEPS.length, ")"] })] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: [currentStepConfig.label, ":"] }), _jsx(Text, { dimColor: true, children: currentStepConfig.placeholder })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: currentInput }), _jsx(Text, { color: "cyan", children: "_" })] }), currentStepConfig.multiline && (_jsx(Text, { dimColor: true, italic: true, children: "(Shift+Enter for newline)" }))] }), error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Enter to continue \u2022 Esc to ", currentStep > 0 ? 'go back' : 'cancel'] }) })] }));
164
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellowBright", paddingX: 1, marginTop: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "yellowBright", children: ["Add ", scopeLabel, " Prompt"] }), _jsxs(Text, { color: "gray", children: [' ', "(Step ", currentStep + 1, "/", WIZARD_STEPS.length, ")"] })] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: [currentStepConfig.label, ":"] }), _jsx(Text, { color: "gray", children: currentStepConfig.placeholder })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: currentInput }), _jsx(Text, { color: "cyan", children: "_" })] }), currentStepConfig.multiline && (_jsx(Text, { color: "gray", italic: true, children: "(Shift+Enter for newline)" }))] }), error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["Enter to continue \u2022 Esc to ", currentStep > 0 ? 'go back' : 'cancel'] }) })] }));
165
165
  });
166
166
  export default PromptAddWizard;
@@ -1 +1 @@
1
- {"version":3,"file":"PromptDeleteSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptDeleteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAwBD;;GAEG;AACH,QAAA,MAAM,oBAAoB,8GAoJzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"PromptDeleteSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptDeleteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAwBD;;GAEG;AACH,QAAA,MAAM,oBAAoB,8GA4IzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -102,7 +102,7 @@ const PromptDeleteSelector = forwardRef(function PromptDeleteSelector({ isVisibl
102
102
  const displayName = item.prompt.displayName || item.prompt.name;
103
103
  const sourceLabel = item.sourceType === 'shared' ? 'shared' : 'config';
104
104
  const sourceColor = item.sourceType === 'shared' ? 'magenta' : 'blue';
105
- return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'red' : 'white', bold: isSelected, children: displayName }), item.prompt.title && (_jsxs(Text, { color: "gray", dimColor: !isSelected, children: [' ', "- ", item.prompt.title] })), _jsxs(Text, { color: sourceColor, dimColor: !isSelected, children: [' ', "(", sourceLabel, ")"] })] }));
105
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'red' : 'white', bold: isSelected, children: displayName }), item.prompt.title && _jsxs(Text, { color: "gray", children: [" - ", item.prompt.title] }), _jsxs(Text, { color: sourceColor, children: [" (", sourceLabel, ")"] })] }));
106
106
  };
107
107
  // Handle selection
108
108
  const handleSelect = (item) => {
@@ -114,6 +114,6 @@ const PromptDeleteSelector = forwardRef(function PromptDeleteSelector({ isVisibl
114
114
  }, [deletablePrompts]);
115
115
  // Custom empty message
116
116
  const emptyMessage = 'No deletable prompts found.\nMCP prompts cannot be deleted.';
117
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Delete Prompt", borderColor: "red", emptyMessage: emptyMessage, maxVisibleItems: 10 }), isVisible && !isLoading && items.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, children: "Note: MCP prompts cannot be deleted (they come from servers)" }) }))] }));
117
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Delete Prompt", borderColor: "red", emptyMessage: emptyMessage, maxVisibleItems: 10 }), isVisible && !isLoading && items.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", italic: true, children: "Note: MCP prompts cannot be deleted (they come from servers)" }) }))] }));
118
118
  });
119
119
  export default PromptDeleteSelector;
@@ -1 +1 @@
1
- {"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptList.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,gBAAgB,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAEhC,UAAU,eAAe;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAuCD;;GAEG;AACH,QAAA,MAAM,UAAU,0FA0Kd,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptList.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,gBAAgB,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAEhC,UAAU,eAAe;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAuCD;;GAEG;AACH,QAAA,MAAM,UAAU,0FAkKd,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -118,7 +118,7 @@ const PromptList = forwardRef(function PromptList({ isVisible, onAction, onLoadI
118
118
  const sourceInfo = getSourceIndicator(prompt.source);
119
119
  const isShared = isSharedPrompt(prompt);
120
120
  const sourceLabel = isShared ? 'shared' : sourceInfo.label;
121
- return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: displayName }), prompt.title && (_jsxs(Text, { color: "gray", dimColor: !isSelected, children: [' ', "- ", prompt.title] })), _jsxs(Text, { color: sourceInfo.color, dimColor: !isSelected, children: [' ', "(", sourceLabel, ")"] })] }));
121
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: displayName }), prompt.title && _jsxs(Text, { color: "gray", children: [" - ", prompt.title] }), _jsxs(Text, { color: sourceInfo.color, children: [" (", sourceLabel, ")"] })] }));
122
122
  };
123
123
  // Handle selection
124
124
  const handleSelect = (item) => {
@@ -139,6 +139,6 @@ const PromptList = forwardRef(function PromptList({ isVisible, onAction, onLoadI
139
139
  onLoadIntoInput(`/${displayName} `);
140
140
  }
141
141
  };
142
- return (_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, onTab: handleTab, supportsTab: true, title: "Prompts", borderColor: "yellow", emptyMessage: "No prompts configured", maxVisibleItems: 12 }));
142
+ return (_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, onTab: handleTab, supportsTab: true, title: "Prompts", borderColor: "yellowBright", emptyMessage: "No prompts configured", maxVisibleItems: 12 }));
143
143
  });
144
144
  export default PromptList;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SearchOverlay.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAeD;;GAEG;AACH,QAAA,MAAM,aAAa,gGAwSjB,CAAC;AAcH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SearchOverlay.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAeD;;GAEG;AACH,QAAA,MAAM,aAAa,gGAqSjB,CAAC;AAcH,eAAe,aAAa,CAAC"}
@@ -164,16 +164,16 @@ const SearchOverlay = forwardRef(function SearchOverlay({ isVisible, onClose, on
164
164
  return null;
165
165
  // Calculate visible results window
166
166
  const visibleResults = state.results.slice(scrollOffset.current, scrollOffset.current + MAX_VISIBLE_RESULTS);
167
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Search Messages" }), state.total > 0 && (_jsxs(Text, { dimColor: true, children: [' ', "(", state.total, " result", state.total !== 1 ? 's' : '', ")"] }))] }), _jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: state.query }), _jsx(Text, { color: "cyan", children: "_" })] }), state.isLoading && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellow", children: "Searching..." }) })), state.error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: state.error }) })), !state.isLoading && state.results.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [visibleResults.map((result, idx) => {
167
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Search Messages" }), state.total > 0 && (_jsxs(Text, { color: "gray", children: [' ', "(", state.total, " result", state.total !== 1 ? 's' : '', ")"] }))] }), _jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: state.query }), _jsx(Text, { color: "cyan", children: "_" })] }), state.isLoading && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellowBright", children: "Searching..." }) })), state.error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: state.error }) })), !state.isLoading && state.results.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [visibleResults.map((result, idx) => {
168
168
  const actualIndex = scrollOffset.current + idx;
169
169
  const isSelected = actualIndex === state.selectedIndex;
170
170
  const roleColor = result.message.role === 'user'
171
171
  ? 'blue'
172
172
  : result.message.role === 'assistant'
173
173
  ? 'green'
174
- : 'yellow';
175
- return (_jsxs(Box, { flexDirection: "column", paddingLeft: isSelected ? 0 : 2, children: [_jsxs(Box, { children: [isSelected && (_jsx(Text, { color: "cyan", bold: true, children: '> ' })), _jsx(Text, { color: "gray", children: result.sessionId.slice(0, 8) }), _jsx(Text, { children: " " }), _jsxs(Text, { color: roleColor, bold: isSelected, children: ["[", result.message.role, "]"] })] }), _jsx(Box, { paddingLeft: isSelected ? 2 : 0, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', truncateContext(result.context, 60)] }) })] }, `${result.sessionId}-${result.messageIndex}`));
176
- }), state.results.length > MAX_VISIBLE_RESULTS && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["Showing ", scrollOffset.current + 1, "-", Math.min(scrollOffset.current + MAX_VISIBLE_RESULTS, state.results.length), ' ', "of ", state.results.length, state.hasMore ? '+' : ''] }) }))] })), !state.isLoading && state.query && state.results.length === 0 && !state.error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["No results found for \"", state.query, "\""] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u2191\u2193 navigate \u2022 Enter select \u2022 Esc close" }) })] }));
174
+ : 'yellowBright';
175
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: isSelected ? 0 : 2, children: [_jsxs(Box, { children: [isSelected && (_jsx(Text, { color: "cyan", bold: true, children: '> ' })), _jsx(Text, { color: "gray", children: result.sessionId.slice(0, 8) }), _jsx(Text, { children: " " }), _jsxs(Text, { color: roleColor, bold: isSelected, children: ["[", result.message.role, "]"] })] }), _jsx(Box, { paddingLeft: isSelected ? 2 : 0, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', truncateContext(result.context, 60)] }) })] }, `${result.sessionId}-${result.messageIndex}`));
176
+ }), state.results.length > MAX_VISIBLE_RESULTS && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["Showing ", scrollOffset.current + 1, "-", Math.min(scrollOffset.current + MAX_VISIBLE_RESULTS, state.results.length), ' ', "of ", state.results.length, state.hasMore ? '+' : ''] }) }))] })), !state.isLoading && state.query && state.results.length === 0 && !state.error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["No results found for \"", state.query, "\""] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "\u2191\u2193 navigate \u2022 Enter select \u2022 Esc close" }) })] }));
177
177
  });
178
178
  /**
179
179
  * Truncate context text for display
@@ -1 +1 @@
1
- {"version":3,"file":"SessionSubcommandSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SessionSubcommandSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,UAAU,8BAA8B;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAgBD;;GAEG;AACH,QAAA,MAAM,yBAAyB,wHA8D7B,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"SessionSubcommandSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SessionSubcommandSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,UAAU,8BAA8B;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAgBD;;GAEG;AACH,QAAA,MAAM,yBAAyB,wHA2D7B,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
@@ -32,7 +32,7 @@ const SessionSubcommandSelector = forwardRef(function SessionSubcommandSelector(
32
32
  }
33
33
  }, [isVisible]);
34
34
  // Format option for display
35
- const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', "- ", option.description] })] }));
35
+ const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" - ", option.description] })] }));
36
36
  // Handle selection
37
37
  const handleSelect = (option) => {
38
38
  onSelect(option.action);
@@ -1 +1 @@
1
- {"version":3,"file":"StreamSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/StreamSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAI/D,UAAU,mBAAmB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAUD;;GAEG;AACH,QAAA,MAAM,cAAc,kGA0FnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"StreamSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/StreamSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAI/D,UAAU,mBAAmB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAUD;;GAEG;AACH,QAAA,MAAM,cAAc,kGAuFnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -46,7 +46,7 @@ const StreamSelector = forwardRef(function StreamSelector({ isVisible, onSelect,
46
46
  setSelectedIndex(currentEnabled ? 0 : 1);
47
47
  }, [isVisible]);
48
48
  // Format option item for display
49
- const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', dimColor: !isSelected, children: [' ', "- ", option.description] }), option.isCurrent && (_jsxs(Text, { color: "green", bold: true, children: [' ', "\u2713"] }))] }));
49
+ const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" - ", option.description] }), option.isCurrent && (_jsxs(Text, { color: "green", bold: true, children: [' ', "\u2713"] }))] }));
50
50
  // Handle selection
51
51
  const handleSelect = (option) => {
52
52
  const enabled = option.id === 'enabled';