@vybestack/llxprt-code 0.1.18 → 0.1.19-beta

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 (206) hide show
  1. package/README.md +1 -0
  2. package/dist/package.json +6 -4
  3. package/dist/src/acp/acpPeer.js +72 -64
  4. package/dist/src/acp/acpPeer.js.map +1 -1
  5. package/dist/src/commands/mcp/add.d.ts +7 -0
  6. package/dist/src/commands/mcp/add.js +155 -0
  7. package/dist/src/commands/mcp/add.js.map +1 -0
  8. package/dist/src/commands/mcp/list.d.ts +8 -0
  9. package/dist/src/commands/mcp/list.js +110 -0
  10. package/dist/src/commands/mcp/list.js.map +1 -0
  11. package/dist/src/commands/mcp/remove.d.ts +7 -0
  12. package/dist/src/commands/mcp/remove.js +44 -0
  13. package/dist/src/commands/mcp/remove.js.map +1 -0
  14. package/dist/src/commands/mcp.d.ts +7 -0
  15. package/dist/src/commands/mcp.js +23 -0
  16. package/dist/src/commands/mcp.js.map +1 -0
  17. package/dist/src/config/auth.js +5 -0
  18. package/dist/src/config/auth.js.map +1 -1
  19. package/dist/src/config/config.js +80 -37
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/keyBindings.d.ts +64 -0
  22. package/dist/src/config/keyBindings.js +137 -0
  23. package/dist/src/config/keyBindings.js.map +1 -0
  24. package/dist/src/config/settings.d.ts +7 -1
  25. package/dist/src/config/settings.js +20 -4
  26. package/dist/src/config/settings.js.map +1 -1
  27. package/dist/src/gemini.js +12 -109
  28. package/dist/src/gemini.js.map +1 -1
  29. package/dist/src/generated/git-commit.d.ts +1 -1
  30. package/dist/src/generated/git-commit.js +1 -1
  31. package/dist/src/nonInteractiveCli.js +0 -1
  32. package/dist/src/nonInteractiveCli.js.map +1 -1
  33. package/dist/src/providers/logging/git-stats-service-impl.d.ts +19 -0
  34. package/dist/src/providers/logging/git-stats-service-impl.js +25 -0
  35. package/dist/src/providers/logging/git-stats-service-impl.js.map +1 -0
  36. package/dist/src/providers/logging/git-stats.d.ts +43 -0
  37. package/dist/src/providers/logging/git-stats.js +137 -0
  38. package/dist/src/providers/logging/git-stats.js.map +1 -0
  39. package/dist/src/providers/providerManagerInstance.js +7 -0
  40. package/dist/src/providers/providerManagerInstance.js.map +1 -1
  41. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  42. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  43. package/dist/src/services/todo-continuation/todoContinuationService.d.ts +172 -0
  44. package/dist/src/services/todo-continuation/todoContinuationService.js +387 -0
  45. package/dist/src/services/todo-continuation/todoContinuationService.js.map +1 -0
  46. package/dist/src/services/todo-continuation/todoContinuationService.spec.d.ts +6 -0
  47. package/dist/src/services/todo-continuation/todoContinuationService.spec.js +385 -0
  48. package/dist/src/services/todo-continuation/todoContinuationService.spec.js.map +1 -0
  49. package/dist/src/ui/App.js +111 -35
  50. package/dist/src/ui/App.js.map +1 -1
  51. package/dist/src/ui/IdeIntegrationNudge.d.ts +14 -0
  52. package/dist/src/ui/IdeIntegrationNudge.js +32 -0
  53. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  54. package/dist/src/ui/colors.d.ts +5 -0
  55. package/dist/src/ui/colors.js +51 -0
  56. package/dist/src/ui/colors.js.map +1 -1
  57. package/dist/src/ui/commands/chatCommand.js +16 -0
  58. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  59. package/dist/src/ui/commands/diagnosticsCommand.js +9 -1
  60. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  61. package/dist/src/ui/commands/ideCommand.js +67 -31
  62. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  63. package/dist/src/ui/commands/loggingCommand.d.ts +15 -0
  64. package/dist/src/ui/commands/loggingCommand.js +421 -0
  65. package/dist/src/ui/commands/loggingCommand.js.map +1 -0
  66. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  67. package/dist/src/ui/commands/privacyCommand.d.ts +3 -0
  68. package/dist/src/ui/commands/privacyCommand.js +6 -3
  69. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  70. package/dist/src/ui/commands/profileCommand.js +1 -0
  71. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  72. package/dist/src/ui/commands/setCommand.js +2 -0
  73. package/dist/src/ui/commands/setCommand.js.map +1 -1
  74. package/dist/src/ui/commands/setupGithubCommand.js +90 -26
  75. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  76. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  77. package/dist/src/ui/commands/types.d.ts +14 -2
  78. package/dist/src/ui/commands/types.js.map +1 -1
  79. package/dist/src/ui/components/AuthInProgress.js +3 -3
  80. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  81. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  82. package/dist/src/ui/components/ContextUsageDisplay.js +27 -0
  83. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  84. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  85. package/dist/src/ui/components/FolderTrustDialog.js +38 -0
  86. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  87. package/dist/src/ui/components/Footer.d.ts +0 -1
  88. package/dist/src/ui/components/Footer.js +132 -15
  89. package/dist/src/ui/components/Footer.js.map +1 -1
  90. package/dist/src/ui/components/InputPrompt.js +32 -28
  91. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  92. package/dist/src/ui/components/LoggingDialog.d.ts +37 -0
  93. package/dist/src/ui/components/LoggingDialog.js +155 -0
  94. package/dist/src/ui/components/LoggingDialog.js.map +1 -0
  95. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  96. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  97. package/dist/src/ui/components/ProviderDialog.js +100 -26
  98. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  99. package/dist/src/ui/components/ProviderModelDialog.js +99 -27
  100. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  101. package/dist/src/ui/components/TodoPanel.d.ts +11 -0
  102. package/dist/src/ui/components/TodoPanel.js +206 -0
  103. package/dist/src/ui/components/TodoPanel.js.map +1 -0
  104. package/dist/src/ui/components/ToolsDialog.d.ts +2 -2
  105. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +116 -16
  106. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  107. package/dist/src/ui/components/messages/ToolGroupMessage.js +36 -8
  108. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  109. package/dist/src/ui/components/todo-utils.d.ts +16 -0
  110. package/dist/src/ui/components/todo-utils.js +41 -0
  111. package/dist/src/ui/components/todo-utils.js.map +1 -0
  112. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  113. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  114. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  115. package/dist/src/ui/contexts/TodoContext.d.ts +15 -0
  116. package/dist/src/ui/contexts/TodoContext.js +18 -0
  117. package/dist/src/ui/contexts/TodoContext.js.map +1 -0
  118. package/dist/src/ui/contexts/TodoProvider.d.ts +7 -0
  119. package/dist/src/ui/contexts/TodoProvider.js +62 -0
  120. package/dist/src/ui/contexts/TodoProvider.js.map +1 -0
  121. package/dist/src/ui/contexts/ToolCallContext.d.ts +19 -0
  122. package/dist/src/ui/contexts/ToolCallContext.js +13 -0
  123. package/dist/src/ui/contexts/ToolCallContext.js.map +1 -0
  124. package/dist/src/ui/contexts/ToolCallProvider.d.ts +12 -0
  125. package/dist/src/ui/contexts/ToolCallProvider.js +62 -0
  126. package/dist/src/ui/contexts/ToolCallProvider.js.map +1 -0
  127. package/dist/src/ui/hooks/atCommandProcessor.js +28 -4
  128. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  129. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +5 -1
  130. package/dist/src/ui/hooks/slashCommandProcessor.js +137 -112
  131. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  132. package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
  133. package/dist/src/ui/hooks/useAtCompletion.js +180 -0
  134. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
  135. package/dist/src/ui/hooks/useConsoleMessages.js +7 -0
  136. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  137. package/dist/src/ui/hooks/useFolderTrust.d.ts +11 -0
  138. package/dist/src/ui/hooks/useFolderTrust.js +22 -0
  139. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  140. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  141. package/dist/src/ui/hooks/useGeminiStream.js +16 -4
  142. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  143. package/dist/src/ui/hooks/useReactToolScheduler.js +12 -12
  144. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  145. package/dist/src/ui/hooks/useResponsive.d.ts +14 -0
  146. package/dist/src/ui/hooks/useResponsive.js +19 -0
  147. package/dist/src/ui/hooks/useResponsive.js.map +1 -0
  148. package/dist/src/ui/hooks/useTodoContinuation.d.ts +31 -0
  149. package/dist/src/ui/hooks/useTodoContinuation.js +148 -0
  150. package/dist/src/ui/hooks/useTodoContinuation.js.map +1 -0
  151. package/dist/src/ui/hooks/useTodoContinuation.spec.d.ts +6 -0
  152. package/dist/src/ui/hooks/useTodoContinuation.spec.js +378 -0
  153. package/dist/src/ui/hooks/useTodoContinuation.spec.js.map +1 -0
  154. package/dist/src/ui/hooks/useToolsDialog.d.ts +2 -2
  155. package/dist/src/ui/hooks/useToolsDialog.js.map +1 -1
  156. package/dist/src/ui/keyMatchers.d.ts +26 -0
  157. package/dist/src/ui/keyMatchers.js +68 -0
  158. package/dist/src/ui/keyMatchers.js.map +1 -0
  159. package/dist/src/ui/privacy/PrivacyNotice.js +10 -4
  160. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  161. package/dist/src/ui/themes/semantic-resolver.d.ts +12 -0
  162. package/dist/src/ui/themes/semantic-resolver.js +32 -0
  163. package/dist/src/ui/themes/semantic-resolver.js.map +1 -0
  164. package/dist/src/ui/themes/semantic-tokens.d.ts +52 -0
  165. package/dist/src/ui/themes/semantic-tokens.js +7 -0
  166. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  167. package/dist/src/ui/themes/theme-compat.d.ts +34 -0
  168. package/dist/src/ui/themes/theme-compat.js +65 -0
  169. package/dist/src/ui/themes/theme-compat.js.map +1 -0
  170. package/dist/src/ui/themes/theme-manager.d.ts +8 -0
  171. package/dist/src/ui/themes/theme-manager.js +18 -0
  172. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  173. package/dist/src/ui/types.d.ts +1 -1
  174. package/dist/src/ui/utils/CodeColorizer.d.ts +2 -1
  175. package/dist/src/ui/utils/CodeColorizer.js +4 -3
  176. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  177. package/dist/src/ui/utils/ConsolePatcher.d.ts +1 -0
  178. package/dist/src/ui/utils/ConsolePatcher.js +3 -0
  179. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  180. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  181. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  182. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  183. package/dist/src/ui/utils/commandUtils.js +22 -1
  184. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  185. package/dist/src/ui/utils/responsive.d.ts +16 -0
  186. package/dist/src/ui/utils/responsive.js +111 -0
  187. package/dist/src/ui/utils/responsive.js.map +1 -0
  188. package/dist/src/utils/cleanup.d.ts +2 -2
  189. package/dist/src/utils/cleanup.js +2 -2
  190. package/dist/src/utils/cleanup.js.map +1 -1
  191. package/dist/src/utils/gitUtils.d.ts +21 -1
  192. package/dist/src/utils/gitUtils.js +70 -3
  193. package/dist/src/utils/gitUtils.js.map +1 -1
  194. package/dist/src/utils/privacy/ConversationDataRedactor.d.ts +75 -0
  195. package/dist/src/utils/privacy/ConversationDataRedactor.js +412 -0
  196. package/dist/src/utils/privacy/ConversationDataRedactor.js.map +1 -0
  197. package/dist/src/utils/privacy/PrivacyManager.d.ts +58 -0
  198. package/dist/src/utils/privacy/PrivacyManager.js +133 -0
  199. package/dist/src/utils/privacy/PrivacyManager.js.map +1 -0
  200. package/dist/src/utils/sandbox.js +430 -401
  201. package/dist/src/utils/sandbox.js.map +1 -1
  202. package/dist/tsconfig.tsbuildinfo +1 -1
  203. package/package.json +6 -4
  204. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +0 -12
  205. package/dist/src/ui/components/IDEContextDetailDisplay.js +0 -17
  206. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +0 -1
@@ -4,51 +4,125 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
4
4
  * Copyright 2025 Google LLC
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
- import { useState } from 'react';
7
+ import React, { useState, useMemo } from 'react';
8
8
  import { Box, Text, useInput } from 'ink';
9
- import { Colors } from '../colors.js';
9
+ import { SemanticColors } from '../colors.js';
10
+ import { useResponsive } from '../hooks/useResponsive.js';
11
+ import { truncateEnd } from '../utils/responsive.js';
10
12
  export const ProviderDialog = ({ providers, currentProvider, onSelect, onClose, }) => {
11
- const [index, setIndex] = useState(() => Math.max(0, providers.findIndex((p) => p === currentProvider)));
12
- const columns = 3;
13
- const longest = providers.reduce((len, p) => Math.max(len, p.length), 0);
14
- const colWidth = Math.max(longest + 4, 20);
15
- const rows = Math.ceil(providers.length / columns);
13
+ const { isNarrow, isWide, width } = useResponsive();
14
+ const [searchTerm, setSearchTerm] = useState('');
15
+ const [isSearching, setIsSearching] = useState(isNarrow);
16
+ // Filter providers based on search term
17
+ const filteredProviders = useMemo(() => providers.filter((p) => p.toLowerCase().includes(searchTerm.toLowerCase())), [providers, searchTerm]);
18
+ const [index, setIndex] = useState(() => {
19
+ const currentIndex = providers.findIndex((p) => p === currentProvider);
20
+ return Math.max(0, currentIndex);
21
+ });
22
+ // Reset index when search term changes
23
+ React.useEffect(() => {
24
+ if (searchTerm.length === 0) {
25
+ const currentIndex = providers.findIndex((p) => p === currentProvider);
26
+ setIndex(Math.max(0, currentIndex));
27
+ }
28
+ else {
29
+ setIndex(0);
30
+ }
31
+ }, [searchTerm, providers, currentProvider]);
32
+ // Responsive layout calculations
33
+ const columns = isNarrow ? 1 : 3;
34
+ const longest = filteredProviders.reduce((len, p) => Math.max(len, p.length), 0);
35
+ const colWidth = isWide
36
+ ? Math.max(longest + 4, 30)
37
+ : Math.max(longest + 4, 20);
38
+ const rows = Math.ceil(filteredProviders.length / columns);
16
39
  const move = (delta) => {
17
40
  let next = index + delta;
18
41
  if (next < 0)
19
42
  next = 0;
20
- if (next >= providers.length)
21
- next = providers.length - 1;
43
+ if (next >= filteredProviders.length)
44
+ next = filteredProviders.length - 1;
22
45
  setIndex(next);
23
46
  };
24
47
  useInput((input, key) => {
25
- if (key.escape)
26
- return onClose();
27
- if (key.return)
28
- return onSelect(providers[index]);
29
- if (key.leftArrow)
30
- move(-1);
31
- if (key.rightArrow)
32
- move(1);
33
- if (key.upArrow)
34
- move(-columns);
35
- if (key.downArrow)
36
- move(columns);
48
+ if (key.escape) {
49
+ if (isSearching && searchTerm.length > 0) {
50
+ setSearchTerm('');
51
+ }
52
+ else {
53
+ return onClose();
54
+ }
55
+ }
56
+ if (isSearching || isNarrow) {
57
+ if (key.return) {
58
+ if (filteredProviders.length > 0) {
59
+ if (isNarrow) {
60
+ return onSelect(filteredProviders[index]);
61
+ }
62
+ setIsSearching(false);
63
+ }
64
+ }
65
+ else if (key.tab && !isNarrow) {
66
+ setIsSearching(false);
67
+ }
68
+ else if (key.backspace || key.delete) {
69
+ setSearchTerm((prev) => prev.slice(0, -1));
70
+ }
71
+ else if (input && !key.ctrl && !key.meta) {
72
+ setSearchTerm((prev) => prev + input);
73
+ }
74
+ }
75
+ else {
76
+ if (key.return && filteredProviders.length > 0) {
77
+ return onSelect(filteredProviders[index]);
78
+ }
79
+ if (key.tab) {
80
+ setIsSearching(true);
81
+ }
82
+ if (key.leftArrow)
83
+ move(-1);
84
+ if (key.rightArrow)
85
+ move(1);
86
+ if (key.upArrow)
87
+ move(-columns);
88
+ if (key.downArrow)
89
+ move(columns);
90
+ }
37
91
  });
38
92
  const renderItem = (name, i) => {
39
- const selected = i === index;
40
- return (_jsx(Box, { width: colWidth, marginRight: 2, children: _jsxs(Text, { color: selected ? '#00ff00' : Colors.Foreground, children: [selected ? '● ' : '○ ', name] }) }, name));
93
+ const selected = i === index && (!isSearching || isNarrow);
94
+ // In wide mode, don't truncate. In standard/narrow, truncate reasonably
95
+ const displayName = isWide
96
+ ? name
97
+ : name.length > 20
98
+ ? truncateEnd(name, 20)
99
+ : name;
100
+ return (_jsx(Box, { width: isWide ? undefined : colWidth, marginRight: 2, children: _jsxs(Text, { color: selected
101
+ ? SemanticColors.text.accent
102
+ : isSearching && !isNarrow
103
+ ? SemanticColors.text.secondary
104
+ : SemanticColors.text.primary, children: [selected ? '● ' : '○ ', displayName] }) }, name));
41
105
  };
42
106
  const grid = [];
43
107
  for (let r = 0; r < rows; r++) {
44
108
  const rowItems = [];
45
109
  for (let c = 0; c < columns; c++) {
46
110
  const i = r * columns + c;
47
- if (i < providers.length)
48
- rowItems.push(renderItem(providers[i], i));
111
+ if (i < filteredProviders.length)
112
+ rowItems.push(renderItem(filteredProviders[i], i));
49
113
  }
50
114
  grid.push(_jsx(Box, { children: rowItems }, r));
51
115
  }
52
- return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: Colors.Foreground, children: "Select Provider (\u2190/\u2192/\u2191/\u2193, Enter to choose, Esc to cancel)" }), grid] }));
116
+ const renderContent = () => {
117
+ if (isNarrow) {
118
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: "Select Provider" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: SemanticColors.text.primary, children: ["Search: ", _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Type to filter, Enter to select, Esc to cancel" }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [filteredProviders.length, " providers", searchTerm && ` found`] }), filteredProviders.length > 0 ? (grid) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No providers match \"", searchTerm, "\""] }) }))] }));
119
+ }
120
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: isSearching
121
+ ? 'Search Providers'
122
+ : 'Select Provider (←/→/↑/↓, Enter to choose, Esc to cancel)' }), !isNarrow && (_jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: isSearching
123
+ ? SemanticColors.text.primary
124
+ : SemanticColors.text.secondary, children: ["Search:", ' ', isSearching && _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm }), searchTerm && (_jsxs(Text, { color: SemanticColors.text.secondary, children: [' ', "(Found ", filteredProviders.length, " of ", providers.length, ' ', "providers)"] }))] })), filteredProviders.length > 0 ? (grid) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No providers match \"", searchTerm, "\""] }) })), filteredProviders.length > 0 && !isSearching && (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Selected: ", filteredProviders[index]] })), !isNarrow && (_jsx(Text, { color: SemanticColors.text.secondary, children: "Tab to switch modes" }))] }));
125
+ };
126
+ return isNarrow ? (_jsx(Box, { flexDirection: "column", padding: 1, children: renderContent() })) : (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, width: Math.min(width, 100), children: renderContent() }));
53
127
  };
54
128
  //# sourceMappingURL=ProviderDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderDialog.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AASrD,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,SAAS,EACT,eAAe,EACf,QAAQ,EACR,OAAO,GACR,EAAE,EAAE;IACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzD,wCAAwC;IACxC,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CACH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CACnD,EACH,CAAC,SAAS,EAAE,UAAU,CAAC,CACxB,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACtC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7C,iCAAiC;IACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,EACnC,CAAC,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM;QACrB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;QACzB,IAAI,IAAI,GAAG,CAAC;YAAE,IAAI,GAAG,CAAC,CAAC;QACvB,IAAI,IAAI,IAAI,iBAAiB,CAAC,MAAM;YAAE,IAAI,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1E,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,WAAW,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,aAAa,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjC,IAAI,QAAQ,EAAE,CAAC;wBACb,OAAO,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5C,CAAC;oBACD,cAAc,CAAC,KAAK,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,cAAc,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3C,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,MAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,cAAc,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,SAAS;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,UAAU;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,OAAO;gBAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC;QAC3D,wEAAwE;QACxE,MAAM,WAAW,GAAG,MAAM;YACxB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;gBAChB,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,CACL,KAAC,GAAG,IAAY,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,YAClE,MAAC,IAAI,IACH,KAAK,EACH,QAAQ;oBACN,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM;oBAC5B,CAAC,CAAC,WAAW,IAAI,CAAC,QAAQ;wBACxB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS;wBAC/B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,aAGlC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACtB,WAAW,IACP,IAZC,IAAI,CAaR,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,EAAuB,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM;gBAC9B,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAC,GAAG,cAAU,QAAQ,IAAZ,CAAC,CAAkB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,gCAEtC,EAGP,MAAC,GAAG,IAAC,OAAO,EAAE,CAAC,aACb,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,yBAC9B,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,uBAAU,IACpD,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,YAAG,UAAU,GAAQ,IACzD,EAEN,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,+DAEnC,EAGP,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,aACvC,iBAAiB,CAAC,MAAM,gBAAY,UAAU,IAAI,QAAQ,IACtD,EAGN,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B,IAAI,CACL,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,sCACd,UAAU,UAC/B,GACH,CACP,IACG,CACP,CAAC;QACJ,CAAC;QAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,YAC1C,WAAW;wBACV,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,2DAA2D,GAC1D,EAGN,CAAC,QAAQ,IAAI,CACZ,MAAC,GAAG,IAAC,OAAO,EAAE,CAAC,aACb,MAAC,IAAI,IACH,KAAK,EACH,WAAW;gCACT,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO;gCAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,wBAG3B,GAAG,EACV,WAAW,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,uBAAU,IAC5D,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,YAAG,UAAU,GAAQ,EAC5D,UAAU,IAAI,CACb,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,aACvC,GAAG,aACI,iBAAiB,CAAC,MAAM,UAAM,SAAS,CAAC,MAAM,EAAE,GAAG,kBAEtD,CACR,IACG,CACP,EAGA,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC9B,IAAI,CACL,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,sCACd,UAAU,UAC/B,GACH,CACP,EAGA,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAC/C,MAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,2BAC7B,iBAAiB,CAAC,KAAK,CAAC,IAC9B,CACR,EAEA,CAAC,QAAQ,IAAI,CACZ,KAAC,IAAI,IAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,oCAA4B,CACvE,IACG,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAChB,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,YACnC,aAAa,EAAE,GACZ,CACP,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,EAC1C,aAAa,EAAC,QAAQ,EACtB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,YAE1B,aAAa,EAAE,GACZ,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -6,28 +6,65 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
6
6
  */
7
7
  import React, { useState, useMemo } from 'react';
8
8
  import { Box, Text, useInput } from 'ink';
9
- import { Colors } from '../colors.js';
9
+ import { SemanticColors } from '../colors.js';
10
+ import { useResponsive } from '../hooks/useResponsive.js';
11
+ import { truncateStart } from '../utils/responsive.js';
10
12
  export const ProviderModelDialog = ({ models, currentModel, onSelect, onClose, }) => {
13
+ const { isNarrow, isWide, width } = useResponsive();
11
14
  const [searchTerm, setSearchTerm] = useState('');
12
15
  const [isSearching, setIsSearching] = useState(true);
13
16
  // Sort models alphabetically by ID
14
17
  const sortedModels = useMemo(() => [...models].sort((a, b) => a.id.toLowerCase().localeCompare(b.id.toLowerCase())), [models]);
15
18
  // Filter models based on search term
16
19
  const filteredModels = useMemo(() => sortedModels.filter((m) => m.id.toLowerCase().includes(searchTerm.toLowerCase())), [sortedModels, searchTerm]);
17
- const [index, setIndex] = useState(() => Math.max(0, filteredModels.findIndex((m) => m.id === currentModel)));
20
+ const [index, setIndex] = useState(() => Math.max(0, sortedModels.findIndex((m) => m.id === currentModel)));
18
21
  // Reset index when search term changes
19
22
  React.useEffect(() => {
20
- setIndex(0);
21
- }, [searchTerm]);
22
- // Dynamically calculate columns based on terminal width and longest model ID
23
- const terminalWidth = process.stdout.columns || 80;
24
- const longestId = filteredModels.reduce((len, m) => Math.max(len, m.id.length), 0);
25
- const minColWidth = Math.max(longestId + 4, 24);
26
- const padding = 8; // Border + margins
27
- const maxColumns = Math.floor((terminalWidth - padding) / minColWidth);
28
- const columns = Math.min(Math.max(3, maxColumns), 5); // Between 3-5 columns
29
- const colWidth = Math.floor((terminalWidth - padding) / columns);
23
+ const currentIndex = filteredModels.findIndex((m) => m.id === currentModel);
24
+ setIndex(Math.max(0, currentIndex));
25
+ }, [searchTerm, filteredModels, currentModel]);
26
+ // Calculate optimal layout based on available width and content
27
+ const calculateLayout = () => {
28
+ // Calculate minimum column width needed
29
+ const longestModelName = filteredModels.reduce((len, m) => Math.max(len, m.id.length), 0);
30
+ if (isNarrow) {
31
+ return { columns: 1, colWidth: Math.max(longestModelName + 4, 25) };
32
+ }
33
+ // Step 1: Get actual content width - responsive to screen size
34
+ // For narrow screens, use full width; for wider screens, use 80% of width
35
+ const maxDialogWidth = isNarrow ? width : Math.floor(width * 0.8);
36
+ const contentWidth = maxDialogWidth - 4; // 4 for padding/borders
37
+ // Step 2: Calculate column width needed (model name + marker + small buffer)
38
+ const markerWidth = 2; // "● " or "○ "
39
+ const spacingBetweenCols = 4; // Fixed spacing between columns
40
+ const colWidthNeeded = longestModelName + markerWidth + 1; // +1 for a tiny buffer
41
+ // Step 3: Determine optimal column count
42
+ // Try to fit as many columns as possible without truncation
43
+ let optimalColumns = 1;
44
+ for (let cols = 5; cols >= 1; cols--) {
45
+ // Calculate total width needed for this many columns
46
+ const totalWidthNeeded = colWidthNeeded * cols + spacingBetweenCols * (cols - 1);
47
+ if (totalWidthNeeded <= contentWidth) {
48
+ optimalColumns = cols;
49
+ break;
50
+ }
51
+ }
52
+ // If even 1 column doesn't fit, we'll need to truncate
53
+ const columns = optimalColumns;
54
+ // Step 4: Calculate actual column width
55
+ if (columns === 1) {
56
+ // Single column: use all available width
57
+ return { columns: 1, colWidth: contentWidth };
58
+ }
59
+ else {
60
+ // Multiple columns: use exact width needed + spacing
61
+ return { columns, colWidth: colWidthNeeded };
62
+ }
63
+ };
64
+ const layout = calculateLayout();
65
+ const { columns, colWidth } = layout;
30
66
  const rows = Math.ceil(filteredModels.length / columns);
67
+ const maxDialogWidth = isNarrow ? width : Math.floor(width * 0.8);
31
68
  const move = (delta) => {
32
69
  let next = index + delta;
33
70
  if (next < 0)
@@ -78,24 +115,59 @@ export const ProviderModelDialog = ({ models, currentModel, onSelect, onClose, }
78
115
  move(columns);
79
116
  }
80
117
  });
81
- const renderItem = (m, i) => {
82
- const selected = i === index && !isSearching;
83
- return (_jsx(Box, { width: colWidth, marginRight: 2, children: _jsxs(Text, { color: selected ? '#00ff00' : isSearching ? Colors.Gray : Colors.Foreground, children: [selected ? '● ' : '○ ', m.id] }) }, m.id));
118
+ const renderItem = (m, i, isLastInRow) => {
119
+ const selected = i === index;
120
+ // Calculate display name - truncate from start to preserve model name
121
+ let displayName;
122
+ const maxLength = colWidth - 3; // Account for marker and space
123
+ if (m.id.length > maxLength) {
124
+ // Truncate from start to preserve the important model name at the end
125
+ displayName = truncateStart(m.id, maxLength);
126
+ }
127
+ else {
128
+ displayName = m.id;
129
+ }
130
+ return (_jsx(Box, { width: colWidth, marginRight: isLastInRow ? 0 : 1, children: _jsxs(Text, { color: selected
131
+ ? SemanticColors.text.accent
132
+ : isSearching && !isNarrow
133
+ ? SemanticColors.text.secondary
134
+ : SemanticColors.text.primary, children: [selected ? '● ' : '○ ', displayName] }) }, m.id));
84
135
  };
85
- // Calculate visible rows for scrolling
86
- const maxVisibleRows = Math.min(rows, 10); // Show max 10 rows at a time
136
+ // Calculate visible items for scrolling (limit to reasonable amount)
137
+ const maxVisibleRows = Math.min(rows, 10);
87
138
  const currentRow = Math.floor(index / columns);
88
139
  const scrollOffset = Math.max(0, Math.min(currentRow - Math.floor(maxVisibleRows / 2), rows - maxVisibleRows));
89
- const visibleGrid = [];
90
- for (let r = scrollOffset; r < Math.min(scrollOffset + maxVisibleRows, rows); r++) {
91
- const rowItems = [];
92
- for (let c = 0; c < columns; c++) {
93
- const i = r * columns + c;
94
- if (i < filteredModels.length)
95
- rowItems.push(renderItem(filteredModels[i], i));
140
+ const startIndex = scrollOffset * columns;
141
+ const endIndex = Math.min(startIndex + maxVisibleRows * columns, filteredModels.length);
142
+ const visibleModels = filteredModels.slice(startIndex, endIndex);
143
+ // Create the model grid with proper row/column layout
144
+ const renderModelGrid = () => {
145
+ const gridRows = [];
146
+ for (let row = 0; row < maxVisibleRows; row++) {
147
+ const rowItems = [];
148
+ for (let col = 0; col < columns; col++) {
149
+ const idx = row * columns + col;
150
+ if (idx < visibleModels.length) {
151
+ const isLastInRow = col === columns - 1;
152
+ rowItems.push(renderItem(visibleModels[idx], startIndex + idx, isLastInRow));
153
+ }
154
+ }
155
+ if (rowItems.length > 0) {
156
+ gridRows.push(_jsx(Box, { flexDirection: "row", children: rowItems }, row));
157
+ }
158
+ }
159
+ return _jsx(Box, { flexDirection: "column", children: gridRows });
160
+ };
161
+ const renderContent = () => {
162
+ if (isNarrow) {
163
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: "Select Model" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: SemanticColors.text.primary, children: ["search: ", _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Tab to switch modes, Enter to select, Esc to cancel" }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [filteredModels.length, " models", searchTerm && ` found`] }), filteredModels.length > 0 ? (renderModelGrid()) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No models match \"", searchTerm, "\""] }) }))] }));
96
164
  }
97
- visibleGrid.push(_jsx(Box, { children: rowItems }, r));
98
- }
99
- return (_jsxs(Box, { borderStyle: "round", borderColor: Colors.Gray, flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, color: Colors.Foreground, children: "Select Model (Tab to switch modes, Enter to select, Esc to cancel)" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: isSearching ? Colors.Foreground : Colors.Gray, children: ["Search: ", isSearching && _jsx(Text, { color: "#00ff00", children: "\u258C" })] }), _jsx(Text, { color: Colors.Foreground, children: searchTerm })] }), searchTerm && (_jsxs(Text, { color: Colors.Gray, children: ["Found ", filteredModels.length, " of ", sortedModels.length, " models"] })), rows > maxVisibleRows && (_jsxs(Text, { color: Colors.Gray, children: ["Showing ", scrollOffset + 1, "-", Math.min(scrollOffset + maxVisibleRows, rows), " of ", rows, " rows"] })), filteredModels.length > 0 ? (visibleGrid) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: Colors.Gray, children: ["No models match \"", searchTerm, "\""] }) })), filteredModels.length > 0 && !isSearching && (_jsxs(Text, { color: Colors.Gray, children: ["Selected: ", filteredModels[index].id] }))] }));
165
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: isSearching
166
+ ? 'Search Models'
167
+ : 'Select Model (Tab to switch modes, Enter to select, Esc to cancel)' }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: isSearching
168
+ ? SemanticColors.text.primary
169
+ : SemanticColors.text.secondary, children: ["search:", ' ', isSearching && _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsxs(Text, { color: SemanticColors.text.secondary, children: ["Found ", filteredModels.length, " of ", sortedModels.length, " models"] }), isWide && rows > maxVisibleRows && (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Showing ", scrollOffset + 1, "-", Math.min(scrollOffset + maxVisibleRows, rows), " of ", rows, " rows"] })), filteredModels.length > 0 ? (renderModelGrid()) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No models match \"", searchTerm, "\""] }) })), filteredModels.length > 0 && !isSearching && (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Selected: ", filteredModels[index].id] })), _jsx(Text, { color: SemanticColors.text.secondary, children: "Tab to switch modes" })] }));
170
+ };
171
+ return isNarrow ? (_jsx(Box, { flexDirection: "column", padding: 1, children: renderContent() })) : (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, width: maxDialogWidth, children: renderContent() }));
100
172
  };
101
173
  //# sourceMappingURL=ProviderModelDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProviderModelDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProviderModelDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Vybestack LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ interface TodoPanelProps {
8
+ width: number;
9
+ }
10
+ export declare const TodoPanel: React.FC<TodoPanelProps>;
11
+ export {};
@@ -0,0 +1,206 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Vybestack LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import { useEffect, useState } from 'react';
8
+ import { Box, Text } from 'ink';
9
+ import { useTodoContext } from '../contexts/TodoContext.js';
10
+ import { useToolCallContext } from '../contexts/ToolCallContext.js';
11
+ import { useResponsive } from '../hooks/useResponsive.js';
12
+ import { SemanticColors } from '../colors.js';
13
+ import { groupToolCalls } from './todo-utils.js';
14
+ import { truncateEnd } from '../utils/responsive.js';
15
+ const formatParameters = (parameters) => {
16
+ const paramStrings = [];
17
+ const MAX_LENGTH = 40; // Doubled from 20 to be less aggressive
18
+ for (const [key, value] of Object.entries(parameters)) {
19
+ if (typeof value === 'string') {
20
+ let displayValue = value;
21
+ // Special handling for file paths - show the end part
22
+ if (key === 'file_path' ||
23
+ key === 'absolute_path' ||
24
+ value.includes('/')) {
25
+ if (value.length > MAX_LENGTH) {
26
+ // For paths, show the last part which is more useful
27
+ displayValue = '...' + value.slice(-(MAX_LENGTH - 3));
28
+ }
29
+ }
30
+ else {
31
+ // For non-paths, truncate normally but with larger limit
32
+ displayValue =
33
+ value.length > MAX_LENGTH
34
+ ? value.substring(0, MAX_LENGTH - 3) + '...'
35
+ : value;
36
+ }
37
+ paramStrings.push(`${key}: '${displayValue}'`);
38
+ }
39
+ else {
40
+ const jsonStr = JSON.stringify(value);
41
+ const displayValue = jsonStr.length > MAX_LENGTH
42
+ ? jsonStr.substring(0, MAX_LENGTH - 3) + '...'
43
+ : jsonStr;
44
+ paramStrings.push(`${key}: ${displayValue}`);
45
+ }
46
+ }
47
+ return paramStrings.join(', ');
48
+ };
49
+ const renderToolCall = (toolCall, count = 1, indent = ' ', index = 0) => {
50
+ const params = formatParameters(toolCall.parameters);
51
+ const toolText = `${toolCall.name}(${params})`;
52
+ const countText = count > 1 ? ` ${count}x` : '';
53
+ return (_jsx(Box, { flexDirection: "row", minHeight: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: [indent, "\u21B3 ", toolText, countText] }) }, `${toolCall.id || `${toolCall.name}-${index}`}`));
54
+ };
55
+ const renderTodoSummary = (todos) => {
56
+ const elements = [];
57
+ const completed = todos.filter((t) => t.status === 'completed').length;
58
+ const inProgress = todos.filter((t) => t.status === 'in_progress').length;
59
+ const pending = todos.filter((t) => t.status === 'pending').length;
60
+ const total = todos.length;
61
+ // Summary line
62
+ elements.push(_jsxs(Box, { flexDirection: "row", minHeight: 1, children: [_jsxs(Text, { color: SemanticColors.text.primary, children: [total, " tasks: "] }), _jsxs(Text, { color: SemanticColors.status.success, children: [completed, " completed"] }), _jsx(Text, { color: SemanticColors.text.secondary, children: ", " }), _jsxs(Text, { color: SemanticColors.status.warning, children: [inProgress, " in progress"] }), _jsx(Text, { color: SemanticColors.text.secondary, children: ", " }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [pending, " pending"] })] }, "summary"));
63
+ // Status indicators only
64
+ elements.push(_jsx(Box, { flexDirection: "row", minHeight: 1, marginTop: 1, children: todos.map((todo) => {
65
+ let marker = '';
66
+ let markerColor = SemanticColors.text.primary;
67
+ if (todo.status === 'completed') {
68
+ marker = '✔';
69
+ markerColor = SemanticColors.status.success;
70
+ }
71
+ else if (todo.status === 'pending') {
72
+ marker = '○';
73
+ markerColor = SemanticColors.text.secondary;
74
+ }
75
+ else if (todo.status === 'in_progress') {
76
+ marker = '→';
77
+ markerColor = SemanticColors.status.warning;
78
+ }
79
+ return (_jsxs(Text, { color: markerColor, bold: true, children: [marker, ' '] }, todo.id));
80
+ }) }, "indicators"));
81
+ return elements;
82
+ };
83
+ const renderTodoAbbreviated = (todo, availableWidth) => {
84
+ const elements = [];
85
+ // Todo status marker and content
86
+ let marker = '';
87
+ let markerColor = SemanticColors.text.primary;
88
+ if (todo.status === 'completed') {
89
+ marker = '✔';
90
+ markerColor = SemanticColors.status.success;
91
+ }
92
+ else if (todo.status === 'pending') {
93
+ marker = '○';
94
+ markerColor = SemanticColors.text.secondary;
95
+ }
96
+ else if (todo.status === 'in_progress') {
97
+ marker = '→';
98
+ markerColor = SemanticColors.status.warning;
99
+ }
100
+ // Calculate available width for content (minus marker, space, padding, borders)
101
+ // Use 85% of available width instead of 50% for better readability
102
+ const contentWidth = Math.max(20, Math.min(80, Math.floor(availableWidth * 0.85)));
103
+ const truncatedContent = truncateEnd(todo.content, contentWidth);
104
+ // Main todo line
105
+ elements.push(_jsxs(Box, { flexDirection: "row", minHeight: 1, children: [_jsxs(Text, { color: markerColor, bold: true, children: [marker, ' '] }), _jsx(Box, { flexGrow: 1, children: _jsx(Text, { color: todo.status === 'in_progress'
106
+ ? SemanticColors.status.warning
107
+ : SemanticColors.text.primary, bold: todo.status === 'in_progress', children: truncatedContent }) })] }, todo.id));
108
+ return elements;
109
+ };
110
+ const renderTodo = (todo, allToolCalls) => {
111
+ const elements = [];
112
+ // Todo status marker and content
113
+ let marker = '';
114
+ let markerColor = SemanticColors.text.primary;
115
+ if (todo.status === 'completed') {
116
+ marker = '✔';
117
+ markerColor = SemanticColors.status.success;
118
+ }
119
+ else if (todo.status === 'pending') {
120
+ marker = '○';
121
+ markerColor = SemanticColors.text.secondary;
122
+ }
123
+ else if (todo.status === 'in_progress') {
124
+ marker = '→';
125
+ markerColor = SemanticColors.status.warning;
126
+ }
127
+ // Main todo line
128
+ elements.push(_jsxs(Box, { flexDirection: "row", minHeight: 1, children: [_jsxs(Text, { color: markerColor, bold: true, children: [marker, ' '] }), _jsx(Box, { flexGrow: 1, children: _jsxs(Text, { color: todo.status === 'in_progress'
129
+ ? SemanticColors.status.warning
130
+ : SemanticColors.text.primary, bold: todo.status === 'in_progress', wrap: "wrap", children: [todo.content, todo.status === 'in_progress' && (_jsx(Text, { color: SemanticColors.status.warning, children: " \u2190 current" }))] }) })] }, todo.id));
131
+ // Render subtasks and their tool calls
132
+ if (todo.subtasks && todo.subtasks.length > 0) {
133
+ for (const subtask of todo.subtasks) {
134
+ elements.push(_jsx(Box, { children: _jsxs(Text, { color: SemanticColors.text.secondary, children: [' ', "\u2022 ", subtask.content] }) }, `${todo.id}-subtask-${subtask.content}`));
135
+ if (subtask.toolCalls && subtask.toolCalls.length > 0) {
136
+ const grouped = groupToolCalls(subtask.toolCalls);
137
+ grouped.forEach((group, index) => {
138
+ elements.push(renderToolCall(group.toolCall, group.count, ' ', index));
139
+ });
140
+ }
141
+ }
142
+ }
143
+ // Group and render all tool calls from memory (only for in_progress tasks)
144
+ if (allToolCalls.length > 0 && todo.status === 'in_progress') {
145
+ const grouped = groupToolCalls(allToolCalls);
146
+ grouped.forEach((group, index) => {
147
+ elements.push(renderToolCall(group.toolCall, group.count, ' ', index));
148
+ });
149
+ }
150
+ return elements;
151
+ };
152
+ const TodoPanelComponent = ({ width }) => {
153
+ const { todos } = useTodoContext();
154
+ const { getExecutingToolCalls, subscribe } = useToolCallContext();
155
+ const { isNarrow, isStandard, isWide } = useResponsive();
156
+ const [, forceUpdate] = useState({});
157
+ const [contentKey, setContentKey] = useState(0);
158
+ // Force re-render when todos change
159
+ useEffect(() => {
160
+ forceUpdate({});
161
+ setContentKey((prev) => prev + 1);
162
+ }, [todos]);
163
+ // Subscribe to tool call updates to re-render when they change
164
+ useEffect(() => {
165
+ const unsubscribe = subscribe(() => {
166
+ forceUpdate({});
167
+ setContentKey((prev) => prev + 1);
168
+ });
169
+ return unsubscribe;
170
+ }, [subscribe]);
171
+ if (todos.length === 0) {
172
+ return null; // Auto-hide when no todos exist
173
+ }
174
+ const allElements = [];
175
+ // Add header
176
+ allElements.push(_jsx(Box, { minHeight: 1, marginBottom: 1, children: _jsx(Text, { color: SemanticColors.text.accent, bold: true, children: "Todo Progress" }) }, "header"));
177
+ // Render different content based on breakpoint
178
+ if (isNarrow) {
179
+ // NARROW: Show only task count and status indicators
180
+ const summaryElements = renderTodoSummary(todos);
181
+ allElements.push(...summaryElements);
182
+ }
183
+ else if (isStandard) {
184
+ // STANDARD: Show abbreviated task titles
185
+ for (const todo of todos) {
186
+ const todoElements = renderTodoAbbreviated(todo, width);
187
+ allElements.push(...todoElements);
188
+ // Add spacing between todos
189
+ allElements.push(_jsx(Box, { height: 1 }, `${todo.id}-spacer`));
190
+ }
191
+ }
192
+ else if (isWide) {
193
+ // WIDE: Show full task details
194
+ for (const todo of todos) {
195
+ const allToolCalls = getExecutingToolCalls(todo.id); // This now gets all tool calls
196
+ const todoElements = renderTodo(todo, allToolCalls);
197
+ allElements.push(...todoElements);
198
+ // Add spacing between todos
199
+ allElements.push(_jsx(Box, { height: 1 }, `${todo.id}-spacer`));
200
+ }
201
+ }
202
+ return (_jsx(Box, { flexDirection: "column", width: width, borderStyle: "round", borderColor: SemanticColors.text.accent, paddingX: 1, paddingY: 1, children: allElements }, `todo-panel-${contentKey}`));
203
+ };
204
+ // Export without memo to ensure updates when context changes
205
+ export const TodoPanel = TodoPanelComponent;
206
+ //# sourceMappingURL=TodoPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoPanel.js","sourceRoot":"","sources":["../../../../src/ui/components/TodoPanel.tsx"],"names":[],"mappings":"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"}