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,18 +0,0 @@
1
- import { TextBuffer } from '../utils/textBuffer.js';
2
- import { FileListRef } from '../ui/components/FileList.js';
3
- export declare function useFilePicker(buffer: TextBuffer, triggerUpdate: () => void): {
4
- showFilePicker: boolean;
5
- setShowFilePicker: (show: boolean) => void;
6
- fileSelectedIndex: number;
7
- setFileSelectedIndex: (index: number | ((prev: number) => number)) => void;
8
- fileQuery: string;
9
- setFileQuery: (_query: string) => void;
10
- atSymbolPosition: number;
11
- setAtSymbolPosition: (_pos: number) => void;
12
- filteredFileCount: number;
13
- searchMode: "file" | "content";
14
- updateFilePickerState: (_text: string, cursorPos: number) => void;
15
- handleFileSelect: (filePath: string) => Promise<void>;
16
- handleFilteredCountChange: (count: number) => void;
17
- fileListRef: import("react").RefObject<FileListRef>;
18
- };
@@ -1,224 +0,0 @@
1
- import { useReducer, useCallback, useRef } from 'react';
2
- function filePickerReducer(state, action) {
3
- switch (action.type) {
4
- case 'SHOW':
5
- return {
6
- ...state,
7
- showFilePicker: true,
8
- fileSelectedIndex: 0,
9
- fileQuery: action.query,
10
- atSymbolPosition: action.position,
11
- searchMode: action.searchMode,
12
- };
13
- case 'HIDE':
14
- return {
15
- ...state,
16
- showFilePicker: false,
17
- fileSelectedIndex: 0,
18
- fileQuery: '',
19
- atSymbolPosition: -1,
20
- };
21
- case 'SELECT_FILE':
22
- return {
23
- ...state,
24
- showFilePicker: false,
25
- fileSelectedIndex: 0,
26
- fileQuery: '',
27
- atSymbolPosition: -1,
28
- };
29
- case 'SET_SELECTED_INDEX':
30
- return {
31
- ...state,
32
- fileSelectedIndex: action.index,
33
- };
34
- case 'SET_FILTERED_COUNT':
35
- return {
36
- ...state,
37
- filteredFileCount: action.count,
38
- };
39
- default:
40
- return state;
41
- }
42
- }
43
- export function useFilePicker(buffer, triggerUpdate) {
44
- const [state, dispatch] = useReducer(filePickerReducer, {
45
- showFilePicker: false,
46
- fileSelectedIndex: 0,
47
- fileQuery: '',
48
- atSymbolPosition: -1,
49
- filteredFileCount: 0,
50
- searchMode: 'file',
51
- });
52
- const fileListRef = useRef(null);
53
- // Update file picker state
54
- const updateFilePickerState = useCallback((_text, cursorPos) => {
55
- // Use display text (with placeholders) instead of full text (expanded)
56
- // to ensure cursor position matches text content
57
- // Note: _text parameter is ignored, we use buffer.text instead
58
- const displayText = buffer.text;
59
- if (!displayText.includes('@')) {
60
- if (state.showFilePicker) {
61
- dispatch({ type: 'HIDE' });
62
- }
63
- return;
64
- }
65
- // Find the last '@' or '@@' symbol before the cursor
66
- const beforeCursor = displayText.slice(0, cursorPos);
67
- // Look for @@ first (content search), then @ (file search)
68
- let searchMode = 'file';
69
- let position = -1;
70
- let query = '';
71
- // Search backwards from cursor to find @@ or @
72
- for (let i = beforeCursor.length - 1; i >= 0; i--) {
73
- if (beforeCursor[i] === '@') {
74
- // Check if this is part of @@
75
- if (i > 0 && beforeCursor[i - 1] === '@') {
76
- // Found @@, use content search
77
- searchMode = 'content';
78
- position = i - 1; // Position of first @
79
- const afterDoubleAt = beforeCursor.slice(i + 1);
80
- // Only activate if no space/newline after @@
81
- if (!afterDoubleAt.includes(' ') && !afterDoubleAt.includes('\n')) {
82
- query = afterDoubleAt;
83
- break;
84
- }
85
- else {
86
- // Has space after @@, not valid
87
- position = -1;
88
- break;
89
- }
90
- }
91
- else {
92
- // Found single @, check if next char is also @
93
- if (i < beforeCursor.length - 1 && beforeCursor[i + 1] === '@') {
94
- // This @ is part of @@, continue searching
95
- continue;
96
- }
97
- // Single @, use file search
98
- searchMode = 'file';
99
- position = i;
100
- const afterAt = beforeCursor.slice(i + 1);
101
- // Only activate if no space/newline after @
102
- if (!afterAt.includes(' ') && !afterAt.includes('\n')) {
103
- query = afterAt;
104
- break;
105
- }
106
- else {
107
- // Has space after @, not valid
108
- position = -1;
109
- break;
110
- }
111
- }
112
- }
113
- }
114
- if (position !== -1) {
115
- // For both @ and @@, position points to where we should start replacement
116
- // For @@, position is the first @
117
- // For @, position is the single @
118
- if (!state.showFilePicker ||
119
- state.fileQuery !== query ||
120
- state.atSymbolPosition !== position ||
121
- state.searchMode !== searchMode) {
122
- dispatch({
123
- type: 'SHOW',
124
- query,
125
- position,
126
- searchMode,
127
- });
128
- }
129
- }
130
- else {
131
- // Hide file picker if no valid @ context found
132
- if (state.showFilePicker) {
133
- dispatch({ type: 'HIDE' });
134
- }
135
- }
136
- }, [
137
- buffer,
138
- state.showFilePicker,
139
- state.fileQuery,
140
- state.atSymbolPosition,
141
- state.searchMode,
142
- ]);
143
- // Handle file selection
144
- const handleFileSelect = useCallback(async (filePath) => {
145
- if (state.atSymbolPosition !== -1) {
146
- // Use display text (with placeholders) for position calculations
147
- const displayText = buffer.text;
148
- const cursorPos = buffer.getCursorPosition();
149
- // Replace query with selected file path
150
- // For content search (@@), the filePath already includes line number
151
- // For file search (@), just the file path
152
- const beforeAt = displayText.slice(0, state.atSymbolPosition);
153
- const afterCursor = displayText.slice(cursorPos);
154
- // Construct the replacement based on search mode
155
- const prefix = state.searchMode === 'content' ? '@@' : '@';
156
- const newText = beforeAt + prefix + filePath + ' ' + afterCursor;
157
- // Set the new text and position cursor after the inserted file path + space
158
- buffer.setText(newText);
159
- // Calculate cursor position after the inserted text
160
- // prefix length + filePath length + space
161
- const insertedLength = prefix.length + filePath.length + 1;
162
- const targetPos = state.atSymbolPosition + insertedLength;
163
- // Reset cursor to beginning, then move to correct position
164
- for (let i = 0; i < targetPos; i++) {
165
- if (i < buffer.text.length) {
166
- buffer.moveRight();
167
- }
168
- }
169
- dispatch({ type: 'SELECT_FILE' });
170
- triggerUpdate();
171
- }
172
- }, [state.atSymbolPosition, state.searchMode, buffer, triggerUpdate]);
173
- // Handle filtered file count change
174
- const handleFilteredCountChange = useCallback((count) => {
175
- dispatch({ type: 'SET_FILTERED_COUNT', count });
176
- }, []);
177
- // Wrapper setters for backwards compatibility
178
- const setShowFilePicker = useCallback((show) => {
179
- if (show) {
180
- dispatch({
181
- type: 'SHOW',
182
- query: '',
183
- position: -1,
184
- searchMode: 'file',
185
- });
186
- }
187
- else {
188
- dispatch({ type: 'HIDE' });
189
- }
190
- }, []);
191
- const setFileSelectedIndex = useCallback((index) => {
192
- if (typeof index === 'function') {
193
- // For functional updates, we need to get current state first
194
- // This is a simplified version - in production you might want to use a ref
195
- dispatch({
196
- type: 'SET_SELECTED_INDEX',
197
- index: index(state.fileSelectedIndex),
198
- });
199
- }
200
- else {
201
- dispatch({ type: 'SET_SELECTED_INDEX', index });
202
- }
203
- }, [state.fileSelectedIndex]);
204
- return {
205
- showFilePicker: state.showFilePicker,
206
- setShowFilePicker,
207
- fileSelectedIndex: state.fileSelectedIndex,
208
- setFileSelectedIndex,
209
- fileQuery: state.fileQuery,
210
- setFileQuery: (_query) => {
211
- // Not used, but kept for compatibility
212
- },
213
- atSymbolPosition: state.atSymbolPosition,
214
- setAtSymbolPosition: (_pos) => {
215
- // Not used, but kept for compatibility
216
- },
217
- filteredFileCount: state.filteredFileCount,
218
- searchMode: state.searchMode,
219
- updateFilePickerState,
220
- handleFileSelect,
221
- handleFilteredCountChange,
222
- fileListRef,
223
- };
224
- }
@@ -1,5 +0,0 @@
1
- export interface ExitNotification {
2
- show: boolean;
3
- message: string;
4
- }
5
- export declare function useGlobalExit(onNotification?: (notification: ExitNotification) => void): void;
@@ -1,34 +0,0 @@
1
- import { useInput } from 'ink';
2
- import { useState } from 'react';
3
- import { useI18n } from '../i18n/index.js';
4
- export function useGlobalExit(onNotification) {
5
- const { t } = useI18n();
6
- const [lastCtrlCTime, setLastCtrlCTime] = useState(0);
7
- const ctrlCTimeout = 1000; // 1 second timeout for double Ctrl+C
8
- useInput((input, key) => {
9
- if (key.ctrl && input === 'c') {
10
- const now = Date.now();
11
- if (now - lastCtrlCTime < ctrlCTimeout) {
12
- // Second Ctrl+C within timeout - exit
13
- process.exit(0);
14
- }
15
- else {
16
- // First Ctrl+C - show notification
17
- setLastCtrlCTime(now);
18
- if (onNotification) {
19
- onNotification({
20
- show: true,
21
- message: t.hooks.pressCtrlCAgain,
22
- });
23
- // Hide notification after timeout
24
- setTimeout(() => {
25
- onNotification({
26
- show: false,
27
- message: '',
28
- });
29
- }, ctrlCTimeout);
30
- }
31
- }
32
- }
33
- });
34
- }
@@ -1,6 +0,0 @@
1
- export declare const NAVIGATION_EVENT = "navigate";
2
- export interface NavigationEvent {
3
- destination: 'welcome' | 'chat' | 'settings' | 'mcp' | 'systemprompt' | 'customheaders';
4
- }
5
- export declare function navigateTo(destination: NavigationEvent['destination']): void;
6
- export declare function onNavigate(handler: (event: NavigationEvent) => void): () => void;
@@ -1,17 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- // Global navigation event emitter
3
- const navigationEmitter = new EventEmitter();
4
- // Increase max listeners to prevent warnings, but not unlimited to catch real leaks
5
- navigationEmitter.setMaxListeners(20);
6
- export const NAVIGATION_EVENT = 'navigate';
7
- // Emit navigation event
8
- export function navigateTo(destination) {
9
- navigationEmitter.emit(NAVIGATION_EVENT, { destination });
10
- }
11
- // Subscribe to navigation events
12
- export function onNavigate(handler) {
13
- navigationEmitter.on(NAVIGATION_EVENT, handler);
14
- return () => {
15
- navigationEmitter.off(NAVIGATION_EVENT, handler);
16
- };
17
- }
@@ -1,35 +0,0 @@
1
- import { TextBuffer } from '../utils/textBuffer.js';
2
- type ChatMessage = {
3
- role: string;
4
- content: string;
5
- images?: Array<{
6
- type: 'image';
7
- data: string;
8
- mimeType: string;
9
- }>;
10
- };
11
- export declare function useHistoryNavigation(buffer: TextBuffer, triggerUpdate: () => void, chatHistory: ChatMessage[], onHistorySelect?: (selectedIndex: number, message: string, images?: Array<{
12
- type: 'image';
13
- data: string;
14
- mimeType: string;
15
- }>) => void): {
16
- showHistoryMenu: boolean;
17
- setShowHistoryMenu: import("react").Dispatch<import("react").SetStateAction<boolean>>;
18
- historySelectedIndex: number;
19
- setHistorySelectedIndex: import("react").Dispatch<import("react").SetStateAction<number>>;
20
- escapeKeyCount: number;
21
- setEscapeKeyCount: import("react").Dispatch<import("react").SetStateAction<number>>;
22
- escapeKeyTimer: import("react").MutableRefObject<NodeJS.Timeout | null>;
23
- getUserMessages: () => {
24
- label: string;
25
- value: string;
26
- infoText: string;
27
- }[];
28
- handleHistorySelect: (value: string) => void;
29
- currentHistoryIndex: number;
30
- navigateHistoryUp: () => boolean;
31
- navigateHistoryDown: () => boolean;
32
- resetHistoryNavigation: () => void;
33
- saveToHistory: (content: string) => Promise<void>;
34
- };
35
- export {};
@@ -1,133 +0,0 @@
1
- import { useState, useCallback, useRef, useEffect } from 'react';
2
- import { historyManager } from '../utils/historyManager.js';
3
- export function useHistoryNavigation(buffer, triggerUpdate, chatHistory, onHistorySelect) {
4
- const [showHistoryMenu, setShowHistoryMenu] = useState(false);
5
- const [historySelectedIndex, setHistorySelectedIndex] = useState(0);
6
- const [escapeKeyCount, setEscapeKeyCount] = useState(0);
7
- const escapeKeyTimer = useRef(null);
8
- // Terminal-style history navigation state
9
- const [currentHistoryIndex, setCurrentHistoryIndex] = useState(-1); // -1 means not in history mode
10
- const savedInput = useRef(''); // Save current input when entering history mode
11
- const [persistentHistory, setPersistentHistory] = useState([]);
12
- const persistentHistoryRef = useRef([]);
13
- // Keep ref in sync with state
14
- useEffect(() => {
15
- persistentHistoryRef.current = persistentHistory;
16
- }, [persistentHistory]);
17
- // Load persistent history on mount
18
- useEffect(() => {
19
- historyManager.loadHistory().then(entries => {
20
- setPersistentHistory(entries);
21
- });
22
- }, []);
23
- // Cleanup timer on unmount
24
- useEffect(() => {
25
- return () => {
26
- if (escapeKeyTimer.current) {
27
- clearTimeout(escapeKeyTimer.current);
28
- }
29
- };
30
- }, []);
31
- // Get user messages from chat history for navigation
32
- const getUserMessages = useCallback(() => {
33
- const userMessages = chatHistory
34
- .map((msg, index) => ({ ...msg, originalIndex: index }))
35
- .filter(msg => msg.role === 'user' && msg.content.trim());
36
- // Keep original order (oldest first, newest last) and map with display numbers
37
- return userMessages.map((msg, index) => {
38
- // Remove all newlines, control characters and extra whitespace to ensure single line display
39
- const cleanContent = msg.content
40
- .replace(/[\r\n\t\v\f\u0000-\u001F\u007F-\u009F]+/g, ' ')
41
- .replace(/\s+/g, ' ')
42
- .trim();
43
- return {
44
- label: `${index + 1}. ${cleanContent.slice(0, 50)}${cleanContent.length > 50 ? '...' : ''}`,
45
- value: msg.originalIndex.toString(),
46
- infoText: msg.content,
47
- };
48
- });
49
- }, [chatHistory]);
50
- // Handle history selection
51
- const handleHistorySelect = useCallback((value) => {
52
- const selectedIndex = parseInt(value, 10);
53
- const selectedMessage = chatHistory[selectedIndex];
54
- if (selectedMessage && onHistorySelect) {
55
- // Don't modify buffer here - let ChatInput handle everything via initialContent
56
- // This prevents duplicate image placeholders
57
- setShowHistoryMenu(false);
58
- onHistorySelect(selectedIndex, selectedMessage.content, selectedMessage.images);
59
- }
60
- }, [chatHistory, onHistorySelect]);
61
- // Terminal-style history navigation: navigate up (older)
62
- const navigateHistoryUp = useCallback(() => {
63
- const history = persistentHistoryRef.current;
64
- if (history.length === 0)
65
- return false;
66
- // Save current input when first entering history mode
67
- if (currentHistoryIndex === -1) {
68
- savedInput.current = buffer.getFullText();
69
- }
70
- // Navigate to older message (persistentHistory is already newest first)
71
- const newIndex = currentHistoryIndex === -1
72
- ? 0
73
- : Math.min(history.length - 1, currentHistoryIndex + 1);
74
- setCurrentHistoryIndex(newIndex);
75
- const entry = history[newIndex];
76
- if (entry) {
77
- buffer.setText(entry.content);
78
- triggerUpdate();
79
- }
80
- return true;
81
- }, [currentHistoryIndex]); // 移除 buffer 避免循环依赖
82
- // Terminal-style history navigation: navigate down (newer)
83
- const navigateHistoryDown = useCallback(() => {
84
- if (currentHistoryIndex === -1)
85
- return false;
86
- const newIndex = currentHistoryIndex - 1;
87
- const history = persistentHistoryRef.current;
88
- if (newIndex < 0) {
89
- // Restore original input
90
- buffer.setText(savedInput.current);
91
- setCurrentHistoryIndex(-1);
92
- savedInput.current = '';
93
- }
94
- else {
95
- setCurrentHistoryIndex(newIndex);
96
- const entry = history[newIndex];
97
- if (entry) {
98
- buffer.setText(entry.content);
99
- }
100
- }
101
- triggerUpdate();
102
- return true;
103
- }, [currentHistoryIndex]); // 移除 buffer 避免循环依赖
104
- // Reset history navigation state
105
- const resetHistoryNavigation = useCallback(() => {
106
- setCurrentHistoryIndex(-1);
107
- savedInput.current = '';
108
- }, []);
109
- // Save message to persistent history
110
- const saveToHistory = useCallback(async (content) => {
111
- await historyManager.addEntry(content);
112
- // Reload history to update the list
113
- const entries = await historyManager.getEntries();
114
- setPersistentHistory(entries);
115
- }, []);
116
- return {
117
- showHistoryMenu,
118
- setShowHistoryMenu,
119
- historySelectedIndex,
120
- setHistorySelectedIndex,
121
- escapeKeyCount,
122
- setEscapeKeyCount,
123
- escapeKeyTimer,
124
- getUserMessages,
125
- handleHistorySelect,
126
- // Terminal-style history navigation
127
- currentHistoryIndex,
128
- navigateHistoryUp,
129
- navigateHistoryDown,
130
- resetHistoryNavigation,
131
- saveToHistory,
132
- };
133
- }
@@ -1,6 +0,0 @@
1
- import { TextBuffer, Viewport } from '../utils/textBuffer.js';
2
- export declare function useInputBuffer(viewport: Viewport): {
3
- buffer: TextBuffer;
4
- triggerUpdate: () => void;
5
- forceUpdate: () => void;
6
- };
@@ -1,45 +0,0 @@
1
- import { useState, useCallback, useEffect, useRef } from 'react';
2
- import { TextBuffer } from '../utils/textBuffer.js';
3
- export function useInputBuffer(viewport) {
4
- const [, setForceUpdateState] = useState({});
5
- const lastUpdateTime = useRef(0);
6
- const bufferRef = useRef(null);
7
- // Stable forceUpdate function using useRef
8
- const forceUpdateRef = useRef(() => {
9
- setForceUpdateState({});
10
- });
11
- // Stable triggerUpdate function using useRef
12
- const triggerUpdateRef = useRef(() => {
13
- const now = Date.now();
14
- lastUpdateTime.current = now;
15
- forceUpdateRef.current();
16
- });
17
- // Initialize buffer once
18
- if (!bufferRef.current) {
19
- bufferRef.current = new TextBuffer(viewport, triggerUpdateRef.current);
20
- }
21
- const buffer = bufferRef.current;
22
- // Expose stable callback functions
23
- const forceUpdate = useCallback(() => {
24
- forceUpdateRef.current();
25
- }, []);
26
- const triggerUpdate = useCallback(() => {
27
- triggerUpdateRef.current();
28
- }, []);
29
- // Update buffer viewport when viewport changes
30
- useEffect(() => {
31
- buffer.updateViewport(viewport);
32
- forceUpdateRef.current();
33
- }, [viewport.width, viewport.height, buffer]);
34
- // Cleanup buffer on unmount
35
- useEffect(() => {
36
- return () => {
37
- buffer.destroy();
38
- };
39
- }, [buffer]);
40
- return {
41
- buffer,
42
- triggerUpdate,
43
- forceUpdate,
44
- };
45
- }
@@ -1,80 +0,0 @@
1
- import { TextBuffer } from '../utils/textBuffer.js';
2
- import type { SubAgent } from '../utils/subAgentConfig.js';
3
- type KeyboardInputOptions = {
4
- buffer: TextBuffer;
5
- disabled: boolean;
6
- triggerUpdate: () => void;
7
- forceUpdate: React.Dispatch<React.SetStateAction<{}>>;
8
- showCommands: boolean;
9
- setShowCommands: (show: boolean) => void;
10
- commandSelectedIndex: number;
11
- setCommandSelectedIndex: (index: number | ((prev: number) => number)) => void;
12
- getFilteredCommands: () => Array<{
13
- name: string;
14
- description: string;
15
- }>;
16
- updateCommandPanelState: (text: string) => void;
17
- onCommand?: (commandName: string, result: any) => void;
18
- showFilePicker: boolean;
19
- setShowFilePicker: (show: boolean) => void;
20
- fileSelectedIndex: number;
21
- setFileSelectedIndex: (index: number | ((prev: number) => number)) => void;
22
- fileQuery: string;
23
- setFileQuery: (query: string) => void;
24
- atSymbolPosition: number;
25
- setAtSymbolPosition: (pos: number) => void;
26
- filteredFileCount: number;
27
- updateFilePickerState: (text: string, cursorPos: number) => void;
28
- handleFileSelect: (filePath: string) => Promise<void>;
29
- fileListRef: React.RefObject<{
30
- getSelectedFile: () => string | null;
31
- }>;
32
- showHistoryMenu: boolean;
33
- setShowHistoryMenu: (show: boolean) => void;
34
- historySelectedIndex: number;
35
- setHistorySelectedIndex: (index: number | ((prev: number) => number)) => void;
36
- escapeKeyCount: number;
37
- setEscapeKeyCount: (count: number | ((prev: number) => number)) => void;
38
- escapeKeyTimer: React.MutableRefObject<NodeJS.Timeout | null>;
39
- getUserMessages: () => Array<{
40
- label: string;
41
- value: string;
42
- infoText: string;
43
- }>;
44
- handleHistorySelect: (value: string) => void;
45
- currentHistoryIndex: number;
46
- navigateHistoryUp: () => boolean;
47
- navigateHistoryDown: () => boolean;
48
- resetHistoryNavigation: () => void;
49
- saveToHistory: (content: string) => Promise<void>;
50
- pasteFromClipboard: () => Promise<void>;
51
- onSubmit: (message: string, images?: Array<{
52
- data: string;
53
- mimeType: string;
54
- }>) => void;
55
- ensureFocus: () => void;
56
- showAgentPicker: boolean;
57
- setShowAgentPicker: (show: boolean) => void;
58
- agentSelectedIndex: number;
59
- setAgentSelectedIndex: (index: number | ((prev: number) => number)) => void;
60
- updateAgentPickerState: (text: string, cursorPos: number) => void;
61
- getFilteredAgents: () => SubAgent[];
62
- handleAgentSelect: (agent: SubAgent) => void;
63
- showTodoPicker: boolean;
64
- setShowTodoPicker: (show: boolean) => void;
65
- todoSelectedIndex: number;
66
- setTodoSelectedIndex: (index: number | ((prev: number) => number)) => void;
67
- todos: Array<{
68
- id: string;
69
- file: string;
70
- line: number;
71
- content: string;
72
- }>;
73
- selectedTodos: Set<string>;
74
- toggleTodoSelection: () => void;
75
- confirmTodoSelection: () => void;
76
- todoSearchQuery: string;
77
- setTodoSearchQuery: (query: string) => void;
78
- };
79
- export declare function useKeyboardInput(options: KeyboardInputOptions): void;
80
- export {};