snow-ai 0.4.15 → 0.4.17

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 (351) hide show
  1. package/bundle/cli.mjs +477445 -0
  2. package/bundle/sql-wasm.wasm +0 -0
  3. package/package.json +31 -26
  4. package/dist/agents/codebaseIndexAgent.d.ts +0 -102
  5. package/dist/agents/codebaseIndexAgent.js +0 -641
  6. package/dist/agents/codebaseReviewAgent.d.ts +0 -61
  7. package/dist/agents/codebaseReviewAgent.js +0 -301
  8. package/dist/agents/compactAgent.d.ts +0 -55
  9. package/dist/agents/compactAgent.js +0 -306
  10. package/dist/agents/promptOptimizeAgent.d.ts +0 -54
  11. package/dist/agents/promptOptimizeAgent.js +0 -268
  12. package/dist/agents/reviewAgent.d.ts +0 -50
  13. package/dist/agents/reviewAgent.js +0 -265
  14. package/dist/agents/summaryAgent.d.ts +0 -57
  15. package/dist/agents/summaryAgent.js +0 -260
  16. package/dist/api/anthropic.d.ts +0 -44
  17. package/dist/api/anthropic.js +0 -598
  18. package/dist/api/chat.d.ts +0 -73
  19. package/dist/api/chat.js +0 -386
  20. package/dist/api/embedding.d.ts +0 -34
  21. package/dist/api/embedding.js +0 -80
  22. package/dist/api/gemini.d.ts +0 -31
  23. package/dist/api/gemini.js +0 -445
  24. package/dist/api/models.d.ts +0 -15
  25. package/dist/api/models.js +0 -139
  26. package/dist/api/responses.d.ts +0 -38
  27. package/dist/api/responses.js +0 -515
  28. package/dist/api/systemPrompt.d.ts +0 -4
  29. package/dist/api/systemPrompt.js +0 -408
  30. package/dist/api/types.d.ts +0 -53
  31. package/dist/api/types.js +0 -4
  32. package/dist/app.d.ts +0 -8
  33. package/dist/app.js +0 -112
  34. package/dist/cli.d.ts +0 -2
  35. package/dist/cli.js +0 -199
  36. package/dist/hooks/useAgentPicker.d.ts +0 -14
  37. package/dist/hooks/useAgentPicker.js +0 -119
  38. package/dist/hooks/useClipboard.d.ts +0 -4
  39. package/dist/hooks/useClipboard.js +0 -175
  40. package/dist/hooks/useCommandHandler.d.ts +0 -35
  41. package/dist/hooks/useCommandHandler.js +0 -346
  42. package/dist/hooks/useCommandPanel.d.ts +0 -17
  43. package/dist/hooks/useCommandPanel.js +0 -114
  44. package/dist/hooks/useConversation.d.ts +0 -49
  45. package/dist/hooks/useConversation.js +0 -1052
  46. package/dist/hooks/useFilePicker.d.ts +0 -18
  47. package/dist/hooks/useFilePicker.js +0 -224
  48. package/dist/hooks/useGlobalExit.d.ts +0 -5
  49. package/dist/hooks/useGlobalExit.js +0 -34
  50. package/dist/hooks/useGlobalNavigation.d.ts +0 -6
  51. package/dist/hooks/useGlobalNavigation.js +0 -17
  52. package/dist/hooks/useHistoryNavigation.d.ts +0 -35
  53. package/dist/hooks/useHistoryNavigation.js +0 -133
  54. package/dist/hooks/useInputBuffer.d.ts +0 -6
  55. package/dist/hooks/useInputBuffer.js +0 -45
  56. package/dist/hooks/useKeyboardInput.d.ts +0 -80
  57. package/dist/hooks/useKeyboardInput.js +0 -608
  58. package/dist/hooks/useSessionManagement.d.ts +0 -10
  59. package/dist/hooks/useSessionManagement.js +0 -43
  60. package/dist/hooks/useSessionSave.d.ts +0 -8
  61. package/dist/hooks/useSessionSave.js +0 -63
  62. package/dist/hooks/useSnapshotState.d.ts +0 -26
  63. package/dist/hooks/useSnapshotState.js +0 -28
  64. package/dist/hooks/useStreamingState.d.ts +0 -33
  65. package/dist/hooks/useStreamingState.js +0 -105
  66. package/dist/hooks/useTerminalFocus.d.ts +0 -28
  67. package/dist/hooks/useTerminalFocus.js +0 -87
  68. package/dist/hooks/useTerminalSize.d.ts +0 -4
  69. package/dist/hooks/useTerminalSize.js +0 -20
  70. package/dist/hooks/useTodoPicker.d.ts +0 -16
  71. package/dist/hooks/useTodoPicker.js +0 -94
  72. package/dist/hooks/useToolConfirmation.d.ts +0 -19
  73. package/dist/hooks/useToolConfirmation.js +0 -61
  74. package/dist/hooks/useVSCodeState.d.ts +0 -8
  75. package/dist/hooks/useVSCodeState.js +0 -81
  76. package/dist/i18n/I18nContext.d.ts +0 -14
  77. package/dist/i18n/I18nContext.js +0 -24
  78. package/dist/i18n/index.d.ts +0 -3
  79. package/dist/i18n/index.js +0 -2
  80. package/dist/i18n/lang/en.d.ts +0 -2
  81. package/dist/i18n/lang/en.js +0 -502
  82. package/dist/i18n/lang/es.d.ts +0 -2
  83. package/dist/i18n/lang/es.js +0 -502
  84. package/dist/i18n/lang/ja.d.ts +0 -2
  85. package/dist/i18n/lang/ja.js +0 -502
  86. package/dist/i18n/lang/ko.d.ts +0 -2
  87. package/dist/i18n/lang/ko.js +0 -502
  88. package/dist/i18n/lang/zh-TW.d.ts +0 -2
  89. package/dist/i18n/lang/zh-TW.js +0 -502
  90. package/dist/i18n/lang/zh.d.ts +0 -2
  91. package/dist/i18n/lang/zh.js +0 -502
  92. package/dist/i18n/translations.d.ts +0 -2
  93. package/dist/i18n/translations.js +0 -14
  94. package/dist/i18n/types.d.ts +0 -478
  95. package/dist/i18n/types.js +0 -1
  96. package/dist/mcp/aceCodeSearch.d.ts +0 -247
  97. package/dist/mcp/aceCodeSearch.js +0 -1058
  98. package/dist/mcp/bash.d.ts +0 -50
  99. package/dist/mcp/bash.js +0 -153
  100. package/dist/mcp/codebaseSearch.d.ts +0 -44
  101. package/dist/mcp/codebaseSearch.js +0 -275
  102. package/dist/mcp/filesystem.d.ts +0 -392
  103. package/dist/mcp/filesystem.js +0 -1445
  104. package/dist/mcp/ideDiagnostics.d.ts +0 -36
  105. package/dist/mcp/ideDiagnostics.js +0 -90
  106. package/dist/mcp/notebook.d.ts +0 -10
  107. package/dist/mcp/notebook.js +0 -367
  108. package/dist/mcp/subagent.d.ts +0 -37
  109. package/dist/mcp/subagent.js +0 -113
  110. package/dist/mcp/todo.d.ts +0 -46
  111. package/dist/mcp/todo.js +0 -511
  112. package/dist/mcp/types/aceCodeSearch.types.d.ts +0 -92
  113. package/dist/mcp/types/aceCodeSearch.types.js +0 -4
  114. package/dist/mcp/types/bash.types.d.ts +0 -13
  115. package/dist/mcp/types/bash.types.js +0 -4
  116. package/dist/mcp/types/filesystem.types.d.ts +0 -210
  117. package/dist/mcp/types/filesystem.types.js +0 -27
  118. package/dist/mcp/types/todo.types.d.ts +0 -27
  119. package/dist/mcp/types/todo.types.js +0 -4
  120. package/dist/mcp/types/websearch.types.d.ts +0 -30
  121. package/dist/mcp/types/websearch.types.js +0 -4
  122. package/dist/mcp/utils/aceCodeSearch/filesystem.utils.d.ts +0 -34
  123. package/dist/mcp/utils/aceCodeSearch/filesystem.utils.js +0 -146
  124. package/dist/mcp/utils/aceCodeSearch/language.utils.d.ts +0 -14
  125. package/dist/mcp/utils/aceCodeSearch/language.utils.js +0 -418
  126. package/dist/mcp/utils/aceCodeSearch/search.utils.d.ts +0 -31
  127. package/dist/mcp/utils/aceCodeSearch/search.utils.js +0 -136
  128. package/dist/mcp/utils/aceCodeSearch/symbol.utils.d.ts +0 -20
  129. package/dist/mcp/utils/aceCodeSearch/symbol.utils.js +0 -141
  130. package/dist/mcp/utils/bash/security.utils.d.ts +0 -20
  131. package/dist/mcp/utils/bash/security.utils.js +0 -34
  132. package/dist/mcp/utils/filesystem/batch-operations.utils.d.ts +0 -39
  133. package/dist/mcp/utils/filesystem/batch-operations.utils.js +0 -182
  134. package/dist/mcp/utils/filesystem/code-analysis.utils.d.ts +0 -18
  135. package/dist/mcp/utils/filesystem/code-analysis.utils.js +0 -165
  136. package/dist/mcp/utils/filesystem/match-finder.utils.d.ts +0 -16
  137. package/dist/mcp/utils/filesystem/match-finder.utils.js +0 -85
  138. package/dist/mcp/utils/filesystem/office-parser.utils.d.ts +0 -43
  139. package/dist/mcp/utils/filesystem/office-parser.utils.js +0 -163
  140. package/dist/mcp/utils/filesystem/path-fixer.utils.d.ts +0 -7
  141. package/dist/mcp/utils/filesystem/path-fixer.utils.js +0 -60
  142. package/dist/mcp/utils/filesystem/similarity.utils.d.ts +0 -22
  143. package/dist/mcp/utils/filesystem/similarity.utils.js +0 -75
  144. package/dist/mcp/utils/todo/date.utils.d.ts +0 -9
  145. package/dist/mcp/utils/todo/date.utils.js +0 -14
  146. package/dist/mcp/utils/websearch/browser.utils.d.ts +0 -8
  147. package/dist/mcp/utils/websearch/browser.utils.js +0 -58
  148. package/dist/mcp/utils/websearch/text.utils.d.ts +0 -16
  149. package/dist/mcp/utils/websearch/text.utils.js +0 -39
  150. package/dist/mcp/websearch.d.ts +0 -88
  151. package/dist/mcp/websearch.js +0 -375
  152. package/dist/test/logger-test.d.ts +0 -1
  153. package/dist/test/logger-test.js +0 -7
  154. package/dist/types/index.d.ts +0 -15
  155. package/dist/types/index.js +0 -1
  156. package/dist/ui/components/AgentPickerPanel.d.ts +0 -10
  157. package/dist/ui/components/AgentPickerPanel.js +0 -74
  158. package/dist/ui/components/ChatInput.d.ts +0 -46
  159. package/dist/ui/components/ChatInput.js +0 -379
  160. package/dist/ui/components/CommandPanel.d.ts +0 -15
  161. package/dist/ui/components/CommandPanel.js +0 -80
  162. package/dist/ui/components/DiffViewer.d.ts +0 -11
  163. package/dist/ui/components/DiffViewer.js +0 -178
  164. package/dist/ui/components/FileList.d.ts +0 -15
  165. package/dist/ui/components/FileList.js +0 -360
  166. package/dist/ui/components/FileRollbackConfirmation.d.ts +0 -8
  167. package/dist/ui/components/FileRollbackConfirmation.js +0 -108
  168. package/dist/ui/components/HelpPanel.d.ts +0 -2
  169. package/dist/ui/components/HelpPanel.js +0 -67
  170. package/dist/ui/components/MCPInfoPanel.d.ts +0 -2
  171. package/dist/ui/components/MCPInfoPanel.js +0 -108
  172. package/dist/ui/components/MCPInfoScreen.d.ts +0 -7
  173. package/dist/ui/components/MCPInfoScreen.js +0 -115
  174. package/dist/ui/components/MarkdownRenderer.d.ts +0 -6
  175. package/dist/ui/components/MarkdownRenderer.js +0 -70
  176. package/dist/ui/components/Menu.d.ts +0 -17
  177. package/dist/ui/components/Menu.js +0 -88
  178. package/dist/ui/components/MessageList.d.ts +0 -56
  179. package/dist/ui/components/MessageList.js +0 -97
  180. package/dist/ui/components/PendingMessages.d.ts +0 -13
  181. package/dist/ui/components/PendingMessages.js +0 -29
  182. package/dist/ui/components/PendingToolCalls.d.ts +0 -11
  183. package/dist/ui/components/PendingToolCalls.js +0 -35
  184. package/dist/ui/components/ScrollableSelectInput.d.ts +0 -29
  185. package/dist/ui/components/ScrollableSelectInput.js +0 -157
  186. package/dist/ui/components/SessionListPanel.d.ts +0 -7
  187. package/dist/ui/components/SessionListPanel.js +0 -175
  188. package/dist/ui/components/SessionListScreen.d.ts +0 -7
  189. package/dist/ui/components/SessionListScreen.js +0 -217
  190. package/dist/ui/components/SessionListScreenWrapper.d.ts +0 -7
  191. package/dist/ui/components/SessionListScreenWrapper.js +0 -14
  192. package/dist/ui/components/ShimmerText.d.ts +0 -9
  193. package/dist/ui/components/ShimmerText.js +0 -30
  194. package/dist/ui/components/TodoPickerPanel.d.ts +0 -14
  195. package/dist/ui/components/TodoPickerPanel.js +0 -119
  196. package/dist/ui/components/TodoTree.d.ts +0 -15
  197. package/dist/ui/components/TodoTree.js +0 -60
  198. package/dist/ui/components/ToolConfirmation.d.ts +0 -21
  199. package/dist/ui/components/ToolConfirmation.js +0 -204
  200. package/dist/ui/components/ToolResultPreview.d.ts +0 -13
  201. package/dist/ui/components/ToolResultPreview.js +0 -337
  202. package/dist/ui/components/UsagePanel.d.ts +0 -2
  203. package/dist/ui/components/UsagePanel.js +0 -394
  204. package/dist/ui/contexts/ThemeContext.d.ts +0 -13
  205. package/dist/ui/contexts/ThemeContext.js +0 -28
  206. package/dist/ui/pages/ChatScreen.d.ts +0 -6
  207. package/dist/ui/pages/ChatScreen.js +0 -1495
  208. package/dist/ui/pages/CodeBaseConfigScreen.d.ts +0 -8
  209. package/dist/ui/pages/CodeBaseConfigScreen.js +0 -350
  210. package/dist/ui/pages/ConfigScreen.d.ts +0 -8
  211. package/dist/ui/pages/ConfigScreen.js +0 -1101
  212. package/dist/ui/pages/CustomHeadersScreen.d.ts +0 -6
  213. package/dist/ui/pages/CustomHeadersScreen.js +0 -502
  214. package/dist/ui/pages/HeadlessModeScreen.d.ts +0 -7
  215. package/dist/ui/pages/HeadlessModeScreen.js +0 -381
  216. package/dist/ui/pages/LanguageSettingsScreen.d.ts +0 -7
  217. package/dist/ui/pages/LanguageSettingsScreen.js +0 -91
  218. package/dist/ui/pages/MCPConfigScreen.d.ts +0 -6
  219. package/dist/ui/pages/MCPConfigScreen.js +0 -55
  220. package/dist/ui/pages/ProxyConfigScreen.d.ts +0 -8
  221. package/dist/ui/pages/ProxyConfigScreen.js +0 -149
  222. package/dist/ui/pages/SensitiveCommandConfigScreen.d.ts +0 -7
  223. package/dist/ui/pages/SensitiveCommandConfigScreen.js +0 -271
  224. package/dist/ui/pages/SubAgentConfigScreen.d.ts +0 -9
  225. package/dist/ui/pages/SubAgentConfigScreen.js +0 -435
  226. package/dist/ui/pages/SubAgentListScreen.d.ts +0 -9
  227. package/dist/ui/pages/SubAgentListScreen.js +0 -131
  228. package/dist/ui/pages/SystemPromptConfigScreen.d.ts +0 -6
  229. package/dist/ui/pages/SystemPromptConfigScreen.js +0 -326
  230. package/dist/ui/pages/ThemeSettingsScreen.d.ts +0 -7
  231. package/dist/ui/pages/ThemeSettingsScreen.js +0 -106
  232. package/dist/ui/pages/WelcomeScreen.d.ts +0 -7
  233. package/dist/ui/pages/WelcomeScreen.js +0 -217
  234. package/dist/ui/themes/index.d.ts +0 -23
  235. package/dist/ui/themes/index.js +0 -140
  236. package/dist/utils/apiConfig.d.ts +0 -126
  237. package/dist/utils/apiConfig.js +0 -423
  238. package/dist/utils/autoCompress.d.ts +0 -15
  239. package/dist/utils/autoCompress.js +0 -24
  240. package/dist/utils/chatExporter.d.ts +0 -9
  241. package/dist/utils/chatExporter.js +0 -118
  242. package/dist/utils/checkpointManager.d.ts +0 -74
  243. package/dist/utils/checkpointManager.js +0 -181
  244. package/dist/utils/codebaseConfig.d.ts +0 -16
  245. package/dist/utils/codebaseConfig.js +0 -67
  246. package/dist/utils/codebaseDatabase.d.ts +0 -102
  247. package/dist/utils/codebaseDatabase.js +0 -333
  248. package/dist/utils/codebaseSearchEvents.d.ts +0 -16
  249. package/dist/utils/codebaseSearchEvents.js +0 -13
  250. package/dist/utils/commandExecutor.d.ts +0 -13
  251. package/dist/utils/commandExecutor.js +0 -26
  252. package/dist/utils/commands/agent.d.ts +0 -2
  253. package/dist/utils/commands/agent.js +0 -12
  254. package/dist/utils/commands/clear.d.ts +0 -2
  255. package/dist/utils/commands/clear.js +0 -12
  256. package/dist/utils/commands/compact.d.ts +0 -2
  257. package/dist/utils/commands/compact.js +0 -12
  258. package/dist/utils/commands/export.d.ts +0 -2
  259. package/dist/utils/commands/export.js +0 -12
  260. package/dist/utils/commands/help.d.ts +0 -2
  261. package/dist/utils/commands/help.js +0 -11
  262. package/dist/utils/commands/home.d.ts +0 -2
  263. package/dist/utils/commands/home.js +0 -34
  264. package/dist/utils/commands/ide.d.ts +0 -2
  265. package/dist/utils/commands/ide.js +0 -32
  266. package/dist/utils/commands/init.d.ts +0 -2
  267. package/dist/utils/commands/init.js +0 -93
  268. package/dist/utils/commands/mcp.d.ts +0 -2
  269. package/dist/utils/commands/mcp.js +0 -12
  270. package/dist/utils/commands/resume.d.ts +0 -2
  271. package/dist/utils/commands/resume.js +0 -12
  272. package/dist/utils/commands/review.d.ts +0 -2
  273. package/dist/utils/commands/review.js +0 -81
  274. package/dist/utils/commands/role.d.ts +0 -2
  275. package/dist/utils/commands/role.js +0 -37
  276. package/dist/utils/commands/todoPicker.d.ts +0 -2
  277. package/dist/utils/commands/todoPicker.js +0 -12
  278. package/dist/utils/commands/usage.d.ts +0 -2
  279. package/dist/utils/commands/usage.js +0 -12
  280. package/dist/utils/commands/yolo.d.ts +0 -2
  281. package/dist/utils/commands/yolo.js +0 -12
  282. package/dist/utils/configManager.d.ts +0 -45
  283. package/dist/utils/configManager.js +0 -303
  284. package/dist/utils/contextCompressor.d.ts +0 -16
  285. package/dist/utils/contextCompressor.js +0 -334
  286. package/dist/utils/devMode.d.ts +0 -13
  287. package/dist/utils/devMode.js +0 -54
  288. package/dist/utils/escapeHandler.d.ts +0 -79
  289. package/dist/utils/escapeHandler.js +0 -153
  290. package/dist/utils/fileDialog.d.ts +0 -9
  291. package/dist/utils/fileDialog.js +0 -74
  292. package/dist/utils/fileUtils.d.ts +0 -40
  293. package/dist/utils/fileUtils.js +0 -185
  294. package/dist/utils/historyManager.d.ts +0 -45
  295. package/dist/utils/historyManager.js +0 -159
  296. package/dist/utils/incrementalSnapshot.d.ts +0 -109
  297. package/dist/utils/incrementalSnapshot.js +0 -383
  298. package/dist/utils/index.d.ts +0 -11
  299. package/dist/utils/index.js +0 -18
  300. package/dist/utils/languageConfig.d.ts +0 -21
  301. package/dist/utils/languageConfig.js +0 -61
  302. package/dist/utils/logger.d.ts +0 -37
  303. package/dist/utils/logger.js +0 -122
  304. package/dist/utils/mcpToolsManager.d.ts +0 -52
  305. package/dist/utils/mcpToolsManager.js +0 -878
  306. package/dist/utils/messageFormatter.d.ts +0 -12
  307. package/dist/utils/messageFormatter.js +0 -115
  308. package/dist/utils/notebookManager.d.ts +0 -59
  309. package/dist/utils/notebookManager.js +0 -213
  310. package/dist/utils/patch-highlight.d.ts +0 -5
  311. package/dist/utils/patch-highlight.js +0 -23
  312. package/dist/utils/processManager.d.ts +0 -27
  313. package/dist/utils/processManager.js +0 -75
  314. package/dist/utils/proxyUtils.d.ts +0 -15
  315. package/dist/utils/proxyUtils.js +0 -50
  316. package/dist/utils/resourceMonitor.d.ts +0 -65
  317. package/dist/utils/resourceMonitor.js +0 -175
  318. package/dist/utils/retryUtils.d.ts +0 -49
  319. package/dist/utils/retryUtils.js +0 -303
  320. package/dist/utils/sensitiveCommandManager.d.ts +0 -53
  321. package/dist/utils/sensitiveCommandManager.js +0 -308
  322. package/dist/utils/sessionConverter.d.ts +0 -7
  323. package/dist/utils/sessionConverter.js +0 -306
  324. package/dist/utils/sessionManager.d.ts +0 -53
  325. package/dist/utils/sessionManager.js +0 -371
  326. package/dist/utils/subAgentConfig.d.ts +0 -50
  327. package/dist/utils/subAgentConfig.js +0 -221
  328. package/dist/utils/subAgentExecutor.d.ts +0 -40
  329. package/dist/utils/subAgentExecutor.js +0 -434
  330. package/dist/utils/terminal.d.ts +0 -5
  331. package/dist/utils/terminal.js +0 -13
  332. package/dist/utils/textBuffer.d.ts +0 -99
  333. package/dist/utils/textBuffer.js +0 -547
  334. package/dist/utils/textUtils.d.ts +0 -37
  335. package/dist/utils/textUtils.js +0 -102
  336. package/dist/utils/themeConfig.d.ts +0 -21
  337. package/dist/utils/themeConfig.js +0 -61
  338. package/dist/utils/todoPreprocessor.d.ts +0 -5
  339. package/dist/utils/todoPreprocessor.js +0 -18
  340. package/dist/utils/todoScanner.d.ts +0 -8
  341. package/dist/utils/todoScanner.js +0 -148
  342. package/dist/utils/toolDisplayConfig.d.ts +0 -16
  343. package/dist/utils/toolDisplayConfig.js +0 -47
  344. package/dist/utils/toolExecutor.d.ts +0 -37
  345. package/dist/utils/toolExecutor.js +0 -224
  346. package/dist/utils/usageLogger.d.ts +0 -11
  347. package/dist/utils/usageLogger.js +0 -114
  348. package/dist/utils/vscodeConnection.d.ts +0 -76
  349. package/dist/utils/vscodeConnection.js +0 -430
  350. package/dist/utils/workspaceSnapshot.d.ts +0 -63
  351. package/dist/utils/workspaceSnapshot.js +0 -300
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- type Props = {
3
- onBack: () => void;
4
- onSave?: () => void;
5
- inlineMode?: boolean;
6
- };
7
- export default function CodeBaseConfigScreen({ onBack, onSave, inlineMode, }: Props): React.JSX.Element;
8
- export {};
@@ -1,350 +0,0 @@
1
- import React, { useState, useEffect } from 'react';
2
- import { Box, Text, useInput } from 'ink';
3
- import Gradient from 'ink-gradient';
4
- import { Alert } from '@inkjs/ui';
5
- import TextInput from 'ink-text-input';
6
- import { loadCodebaseConfig, saveCodebaseConfig, } from '../../utils/codebaseConfig.js';
7
- import { useI18n } from '../../i18n/index.js';
8
- import { useTheme } from '../contexts/ThemeContext.js';
9
- const focusEventTokenRegex = /(?:\x1b)?\[[0-9;]*[IO]/g;
10
- const isFocusEventInput = (value) => {
11
- if (!value) {
12
- return false;
13
- }
14
- if (value === '\x1b[I' ||
15
- value === '\x1b[O' ||
16
- value === '[I' ||
17
- value === '[O') {
18
- return true;
19
- }
20
- const trimmed = value.trim();
21
- if (!trimmed) {
22
- return false;
23
- }
24
- const tokens = trimmed.match(focusEventTokenRegex);
25
- if (!tokens) {
26
- return false;
27
- }
28
- const normalized = trimmed.replace(/\s+/g, '');
29
- const tokensCombined = tokens.join('');
30
- return tokensCombined === normalized;
31
- };
32
- const stripFocusArtifacts = (value) => {
33
- if (!value) {
34
- return '';
35
- }
36
- return value
37
- .replace(/\x1b\[[0-9;]*[IO]/g, '')
38
- .replace(/\[[0-9;]*[IO]/g, '')
39
- .replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
40
- };
41
- export default function CodeBaseConfigScreen({ onBack, onSave, inlineMode = false, }) {
42
- const { t } = useI18n();
43
- const { theme } = useTheme();
44
- // Configuration state
45
- const [enabled, setEnabled] = useState(false);
46
- const [enableAgentReview, setEnableAgentReview] = useState(true);
47
- const [embeddingModelName, setEmbeddingModelName] = useState('');
48
- const [embeddingBaseUrl, setEmbeddingBaseUrl] = useState('');
49
- const [embeddingApiKey, setEmbeddingApiKey] = useState('');
50
- const [embeddingDimensions, setEmbeddingDimensions] = useState(1536);
51
- const [batchMaxLines, setBatchMaxLines] = useState(10);
52
- const [batchConcurrency, setBatchConcurrency] = useState(1);
53
- // UI state
54
- const [currentField, setCurrentField] = useState('enabled');
55
- const [isEditing, setIsEditing] = useState(false);
56
- const [errors, setErrors] = useState([]);
57
- // Scrolling configuration
58
- const MAX_VISIBLE_FIELDS = 8;
59
- const allFields = [
60
- 'enabled',
61
- 'enableAgentReview',
62
- 'embeddingModelName',
63
- 'embeddingBaseUrl',
64
- 'embeddingApiKey',
65
- 'embeddingDimensions',
66
- 'batchMaxLines',
67
- 'batchConcurrency',
68
- ];
69
- const currentFieldIndex = allFields.indexOf(currentField);
70
- const totalFields = allFields.length;
71
- useEffect(() => {
72
- loadConfiguration();
73
- }, []);
74
- const loadConfiguration = () => {
75
- const config = loadCodebaseConfig();
76
- setEnabled(config.enabled);
77
- setEnableAgentReview(config.enableAgentReview);
78
- setEmbeddingModelName(config.embedding.modelName);
79
- setEmbeddingBaseUrl(config.embedding.baseUrl);
80
- setEmbeddingApiKey(config.embedding.apiKey);
81
- setEmbeddingDimensions(config.embedding.dimensions);
82
- setBatchMaxLines(config.batch.maxLines);
83
- setBatchConcurrency(config.batch.concurrency);
84
- };
85
- const saveConfiguration = () => {
86
- // Validation
87
- const validationErrors = [];
88
- if (enabled) {
89
- // Embedding configuration is required
90
- if (!embeddingModelName.trim()) {
91
- validationErrors.push(t.codebaseConfig.validationModelNameRequired);
92
- }
93
- if (!embeddingBaseUrl.trim()) {
94
- validationErrors.push(t.codebaseConfig.validationBaseUrlRequired);
95
- // Embedding API key is optional (for local deployments like Ollama)
96
- // if (!embeddingApiKey.trim()) {
97
- // validationErrors.push('Embedding API key is required when enabled');
98
- // }
99
- }
100
- if (embeddingDimensions <= 0) {
101
- validationErrors.push(t.codebaseConfig.validationDimensionsPositive);
102
- }
103
- // Batch configuration validation
104
- if (batchMaxLines <= 0) {
105
- validationErrors.push(t.codebaseConfig.validationMaxLinesPositive);
106
- }
107
- if (batchConcurrency <= 0) {
108
- validationErrors.push(t.codebaseConfig.validationConcurrencyPositive);
109
- }
110
- // LLM is optional - no validation needed
111
- }
112
- if (validationErrors.length > 0) {
113
- setErrors(validationErrors);
114
- return;
115
- }
116
- try {
117
- const config = {
118
- enabled,
119
- enableAgentReview,
120
- embedding: {
121
- modelName: embeddingModelName,
122
- baseUrl: embeddingBaseUrl,
123
- apiKey: embeddingApiKey,
124
- dimensions: embeddingDimensions,
125
- },
126
- batch: {
127
- maxLines: batchMaxLines,
128
- concurrency: batchConcurrency,
129
- },
130
- };
131
- saveCodebaseConfig(config);
132
- setErrors([]);
133
- // Trigger codebase config reload in ChatScreen
134
- if (global.__reloadCodebaseConfig) {
135
- global.__reloadCodebaseConfig();
136
- }
137
- onSave?.();
138
- }
139
- catch (error) {
140
- setErrors([
141
- error instanceof Error ? error.message : t.codebaseConfig.saveError,
142
- ]);
143
- }
144
- };
145
- const renderField = (field) => {
146
- const isActive = field === currentField;
147
- const isCurrentlyEditing = isActive && isEditing;
148
- switch (field) {
149
- case 'enabled':
150
- return (React.createElement(Box, { key: field, flexDirection: "column" },
151
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
152
- isActive ? '❯ ' : ' ',
153
- t.codebaseConfig.codebaseEnabled),
154
- React.createElement(Box, { marginLeft: 3 },
155
- React.createElement(Text, { color: theme.colors.menuSecondary },
156
- enabled ? t.codebaseConfig.enabled : t.codebaseConfig.disabled,
157
- ' ',
158
- t.codebaseConfig.toggleHint))));
159
- case 'enableAgentReview':
160
- return (React.createElement(Box, { key: field, flexDirection: "column" },
161
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
162
- isActive ? '❯ ' : ' ',
163
- t.codebaseConfig.agentReview),
164
- React.createElement(Box, { marginLeft: 3 },
165
- React.createElement(Text, { color: theme.colors.menuSecondary },
166
- enableAgentReview
167
- ? t.codebaseConfig.enabled
168
- : t.codebaseConfig.disabled,
169
- ' ',
170
- t.codebaseConfig.toggleHint))));
171
- case 'embeddingModelName':
172
- return (React.createElement(Box, { key: field, flexDirection: "column" },
173
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
174
- isActive ? '❯ ' : ' ',
175
- t.codebaseConfig.embeddingModelName),
176
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
177
- React.createElement(Text, { color: theme.colors.menuInfo },
178
- React.createElement(TextInput, { value: embeddingModelName, onChange: value => setEmbeddingModelName(stripFocusArtifacts(value)), onSubmit: () => setIsEditing(false) })))),
179
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
180
- React.createElement(Text, { color: theme.colors.menuSecondary }, embeddingModelName || t.codebaseConfig.notSet)))));
181
- case 'embeddingBaseUrl':
182
- return (React.createElement(Box, { key: field, flexDirection: "column" },
183
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
184
- isActive ? '❯ ' : ' ',
185
- t.codebaseConfig.embeddingBaseUrl),
186
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
187
- React.createElement(Text, { color: theme.colors.menuInfo },
188
- React.createElement(TextInput, { value: embeddingBaseUrl, onChange: value => setEmbeddingBaseUrl(stripFocusArtifacts(value)), onSubmit: () => setIsEditing(false) })))),
189
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
190
- React.createElement(Text, { color: theme.colors.menuSecondary }, embeddingBaseUrl || t.codebaseConfig.notSet)))));
191
- case 'embeddingApiKey':
192
- return (React.createElement(Box, { key: field, flexDirection: "column" },
193
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
194
- isActive ? '❯ ' : ' ',
195
- t.codebaseConfig.embeddingApiKeyOptional),
196
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
197
- React.createElement(Text, { color: theme.colors.menuInfo },
198
- React.createElement(TextInput, { value: embeddingApiKey, onChange: value => setEmbeddingApiKey(stripFocusArtifacts(value)), onSubmit: () => setIsEditing(false), mask: "*" })))),
199
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
200
- React.createElement(Text, { color: theme.colors.menuSecondary }, embeddingApiKey
201
- ? t.codebaseConfig.masked
202
- : t.codebaseConfig.notSet)))));
203
- case 'embeddingDimensions':
204
- return (React.createElement(Box, { key: field, flexDirection: "column" },
205
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
206
- isActive ? '❯ ' : ' ',
207
- t.codebaseConfig.embeddingDimensions),
208
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
209
- React.createElement(Text, { color: theme.colors.menuInfo },
210
- React.createElement(TextInput, { value: embeddingDimensions.toString(), onChange: value => {
211
- const num = parseInt(stripFocusArtifacts(value) || '0');
212
- if (!isNaN(num)) {
213
- setEmbeddingDimensions(num);
214
- }
215
- }, onSubmit: () => setIsEditing(false) })))),
216
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
217
- React.createElement(Text, { color: theme.colors.menuSecondary }, embeddingDimensions)))));
218
- case 'batchMaxLines':
219
- return (React.createElement(Box, { key: field, flexDirection: "column" },
220
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
221
- isActive ? '❯ ' : ' ',
222
- t.codebaseConfig.batchMaxLines),
223
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
224
- React.createElement(Text, { color: theme.colors.menuInfo },
225
- React.createElement(TextInput, { value: batchMaxLines.toString(), onChange: value => {
226
- const num = parseInt(stripFocusArtifacts(value) || '0');
227
- if (!isNaN(num)) {
228
- setBatchMaxLines(num);
229
- }
230
- }, onSubmit: () => setIsEditing(false) })))),
231
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
232
- React.createElement(Text, { color: theme.colors.menuSecondary }, batchMaxLines)))));
233
- case 'batchConcurrency':
234
- return (React.createElement(Box, { key: field, flexDirection: "column" },
235
- React.createElement(Text, { color: isActive ? theme.colors.menuSelected : theme.colors.menuNormal },
236
- isActive ? '❯ ' : ' ',
237
- t.codebaseConfig.batchConcurrency),
238
- isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
239
- React.createElement(Text, { color: theme.colors.menuInfo },
240
- React.createElement(TextInput, { value: batchConcurrency.toString(), onChange: value => {
241
- const num = parseInt(stripFocusArtifacts(value) || '0');
242
- if (!isNaN(num)) {
243
- setBatchConcurrency(num);
244
- }
245
- }, onSubmit: () => setIsEditing(false) })))),
246
- !isCurrentlyEditing && (React.createElement(Box, { marginLeft: 3 },
247
- React.createElement(Text, { color: theme.colors.menuSecondary }, batchConcurrency)))));
248
- default:
249
- return null;
250
- }
251
- };
252
- useInput((rawInput, key) => {
253
- const input = stripFocusArtifacts(rawInput);
254
- if (!input && isFocusEventInput(rawInput)) {
255
- return;
256
- }
257
- if (isFocusEventInput(rawInput)) {
258
- return;
259
- }
260
- // When editing, only handle submission
261
- if (isEditing) {
262
- // TextInput handles the actual editing
263
- // Escape to cancel editing
264
- if (key.escape) {
265
- setIsEditing(false);
266
- loadConfiguration(); // Reset to saved values
267
- }
268
- return;
269
- }
270
- // Navigation
271
- if (key.upArrow) {
272
- const currentIndex = allFields.indexOf(currentField);
273
- if (currentIndex > 0) {
274
- setCurrentField(allFields[currentIndex - 1]);
275
- }
276
- return;
277
- }
278
- if (key.downArrow) {
279
- const currentIndex = allFields.indexOf(currentField);
280
- if (currentIndex < allFields.length - 1) {
281
- setCurrentField(allFields[currentIndex + 1]);
282
- }
283
- return;
284
- }
285
- // Toggle enabled field
286
- if (key.return && currentField === 'enabled') {
287
- setEnabled(!enabled);
288
- return;
289
- }
290
- // Toggle enableAgentReview field
291
- if (key.return && currentField === 'enableAgentReview') {
292
- setEnableAgentReview(!enableAgentReview);
293
- return;
294
- }
295
- // Enter editing mode for text fields
296
- if (key.return &&
297
- currentField !== 'enabled' &&
298
- currentField !== 'enableAgentReview') {
299
- setIsEditing(true);
300
- return;
301
- }
302
- // Save configuration (Ctrl+S or Escape when not editing)
303
- if ((key.ctrl && input === 's') || key.escape) {
304
- saveConfiguration();
305
- if (!errors.length) {
306
- onBack();
307
- }
308
- return;
309
- }
310
- });
311
- return (React.createElement(Box, { flexDirection: "column", padding: 1 },
312
- !inlineMode && (React.createElement(Box, { marginBottom: 1, borderStyle: "double", borderColor: theme.colors.menuInfo, paddingX: 2 },
313
- React.createElement(Box, { flexDirection: "column" },
314
- React.createElement(Gradient, { name: "rainbow" }, t.codebaseConfig.title),
315
- React.createElement(Text, { color: theme.colors.menuSecondary }, t.codebaseConfig.subtitle)))),
316
- React.createElement(Box, { marginBottom: 1 },
317
- React.createElement(Text, { color: theme.colors.warning, bold: true },
318
- t.codebaseConfig.settingsPosition,
319
- " (",
320
- currentFieldIndex + 1,
321
- "/",
322
- totalFields,
323
- ")"),
324
- totalFields > MAX_VISIBLE_FIELDS && (React.createElement(Text, { color: theme.colors.menuSecondary },
325
- ' ',
326
- t.codebaseConfig.scrollHint))),
327
- React.createElement(Box, { flexDirection: "column" }, (() => {
328
- // Calculate visible window
329
- if (allFields.length <= MAX_VISIBLE_FIELDS) {
330
- // Show all fields if less than max
331
- return allFields.map(field => renderField(field));
332
- }
333
- // Calculate scroll window
334
- const halfWindow = Math.floor(MAX_VISIBLE_FIELDS / 2);
335
- let startIndex = Math.max(0, currentFieldIndex - halfWindow);
336
- let endIndex = Math.min(allFields.length, startIndex + MAX_VISIBLE_FIELDS);
337
- // Adjust if we're near the end
338
- if (endIndex - startIndex < MAX_VISIBLE_FIELDS) {
339
- startIndex = Math.max(0, endIndex - MAX_VISIBLE_FIELDS);
340
- }
341
- const visibleFields = allFields.slice(startIndex, endIndex);
342
- return visibleFields.map(field => renderField(field));
343
- })()),
344
- errors.length > 0 && (React.createElement(Box, { flexDirection: "column", marginTop: 1 },
345
- React.createElement(Text, { color: theme.colors.error, bold: true }, t.codebaseConfig.errors),
346
- errors.map((error, index) => (React.createElement(Text, { key: index, color: theme.colors.error },
347
- "\u2022 ",
348
- error))))),
349
- React.createElement(Box, { flexDirection: "column", marginTop: 1 }, isEditing ? (React.createElement(Alert, { variant: "info" }, t.codebaseConfig.editingHint)) : (React.createElement(Alert, { variant: "info" }, t.codebaseConfig.navigationHint)))));
350
- }
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- type Props = {
3
- onBack: () => void;
4
- onSave: () => void;
5
- inlineMode?: boolean;
6
- };
7
- export default function ConfigScreen({ onBack, onSave, inlineMode, }: Props): React.JSX.Element;
8
- export {};