snow-ai 0.4.16 → 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 -384
  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 -1519
  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,641 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import crypto from 'node:crypto';
4
- import ignore from 'ignore';
5
- import { logger } from '../utils/logger.js';
6
- import { CodebaseDatabase } from '../utils/codebaseDatabase.js';
7
- import { createEmbeddings } from '../api/embedding.js';
8
- import { loadCodebaseConfig, } from '../utils/codebaseConfig.js';
9
- import { withRetry } from '../utils/retryUtils.js';
10
- /**
11
- * Codebase Index Agent
12
- * Handles automatic code scanning, chunking, and embedding
13
- */
14
- export class CodebaseIndexAgent {
15
- constructor(projectRoot) {
16
- Object.defineProperty(this, "db", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: void 0
21
- });
22
- Object.defineProperty(this, "config", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: void 0
27
- });
28
- Object.defineProperty(this, "projectRoot", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: void 0
33
- });
34
- Object.defineProperty(this, "ignoreFilter", {
35
- enumerable: true,
36
- configurable: true,
37
- writable: true,
38
- value: void 0
39
- });
40
- Object.defineProperty(this, "isRunning", {
41
- enumerable: true,
42
- configurable: true,
43
- writable: true,
44
- value: false
45
- });
46
- Object.defineProperty(this, "shouldStop", {
47
- enumerable: true,
48
- configurable: true,
49
- writable: true,
50
- value: false
51
- });
52
- Object.defineProperty(this, "progressCallback", {
53
- enumerable: true,
54
- configurable: true,
55
- writable: true,
56
- value: void 0
57
- });
58
- Object.defineProperty(this, "consecutiveFailures", {
59
- enumerable: true,
60
- configurable: true,
61
- writable: true,
62
- value: 0
63
- });
64
- Object.defineProperty(this, "MAX_CONSECUTIVE_FAILURES", {
65
- enumerable: true,
66
- configurable: true,
67
- writable: true,
68
- value: 3
69
- });
70
- Object.defineProperty(this, "fileWatcher", {
71
- enumerable: true,
72
- configurable: true,
73
- writable: true,
74
- value: null
75
- });
76
- Object.defineProperty(this, "watchDebounceTimers", {
77
- enumerable: true,
78
- configurable: true,
79
- writable: true,
80
- value: new Map()
81
- });
82
- this.projectRoot = projectRoot;
83
- this.config = loadCodebaseConfig();
84
- this.db = new CodebaseDatabase(projectRoot);
85
- this.ignoreFilter = ignore();
86
- // Load .gitignore if exists
87
- this.loadGitignore();
88
- // Add default ignore patterns
89
- this.addDefaultIgnorePatterns();
90
- }
91
- /**
92
- * Start indexing process
93
- */
94
- async start(progressCallback) {
95
- if (this.isRunning) {
96
- logger.warn('Indexing already in progress');
97
- return;
98
- }
99
- if (!this.config.enabled) {
100
- logger.info('Codebase indexing is disabled');
101
- return;
102
- }
103
- this.isRunning = true;
104
- this.shouldStop = false;
105
- this.progressCallback = progressCallback;
106
- try {
107
- // Initialize database
108
- this.db.initialize();
109
- // Check if stopped before starting
110
- if (this.shouldStop) {
111
- logger.info('Indexing cancelled before start');
112
- return;
113
- }
114
- // Check if we should resume or start fresh
115
- const progress = this.db.getProgress();
116
- const isResuming = progress.status === 'indexing';
117
- if (isResuming) {
118
- logger.info('Resuming previous indexing session');
119
- }
120
- // Scan files first
121
- this.notifyProgress({
122
- totalFiles: 0,
123
- processedFiles: 0,
124
- totalChunks: 0,
125
- currentFile: '',
126
- status: 'scanning',
127
- });
128
- const files = await this.scanFiles();
129
- logger.info(`Found ${files.length} code files to index`);
130
- // Reset progress if file count changed (project structure changed)
131
- // or if previous session was interrupted abnormally
132
- const shouldReset = isResuming &&
133
- (progress.totalFiles !== files.length ||
134
- progress.processedFiles > files.length);
135
- if (shouldReset) {
136
- logger.info('File count changed or progress corrupted, resetting progress');
137
- this.db.updateProgress({
138
- totalFiles: files.length,
139
- processedFiles: 0,
140
- totalChunks: this.db.getTotalChunks(),
141
- status: 'indexing',
142
- startedAt: Date.now(),
143
- lastProcessedFile: undefined,
144
- });
145
- }
146
- else {
147
- // Update status to indexing
148
- this.db.updateProgress({
149
- status: 'indexing',
150
- totalFiles: files.length,
151
- startedAt: isResuming ? progress.startedAt : Date.now(),
152
- });
153
- }
154
- // Check if stopped after initialization
155
- if (this.shouldStop) {
156
- logger.info('Indexing cancelled after initialization');
157
- return;
158
- }
159
- // Process files with concurrency control
160
- await this.processFiles(files);
161
- // Only mark as completed if not stopped by user
162
- if (!this.shouldStop) {
163
- // Mark as completed
164
- this.db.updateProgress({
165
- status: 'completed',
166
- completedAt: Date.now(),
167
- });
168
- this.notifyProgress({
169
- totalFiles: files.length,
170
- processedFiles: files.length,
171
- totalChunks: this.db.getTotalChunks(),
172
- currentFile: '',
173
- status: 'completed',
174
- });
175
- logger.info('Indexing completed successfully');
176
- }
177
- else {
178
- logger.info('Indexing paused by user, progress saved');
179
- }
180
- }
181
- catch (error) {
182
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
183
- this.db.updateProgress({
184
- status: 'error',
185
- lastError: errorMessage,
186
- });
187
- this.notifyProgress({
188
- totalFiles: 0,
189
- processedFiles: 0,
190
- totalChunks: 0,
191
- currentFile: '',
192
- status: 'error',
193
- error: errorMessage,
194
- });
195
- logger.error('Indexing failed', error);
196
- throw error;
197
- }
198
- finally {
199
- this.isRunning = false;
200
- this.shouldStop = false;
201
- // Don't change status to 'idle' if indexing was stopped
202
- // This allows resuming when returning to chat screen
203
- // Status will remain as 'indexing' so it can be resumed
204
- }
205
- }
206
- /**
207
- * Stop indexing gracefully
208
- */
209
- async stop() {
210
- if (!this.isRunning) {
211
- return;
212
- }
213
- logger.info('Stopping indexing...');
214
- this.shouldStop = true;
215
- // Wait for current operation to finish
216
- while (this.isRunning) {
217
- await new Promise(resolve => setTimeout(resolve, 100));
218
- }
219
- }
220
- /**
221
- * Check if indexing is in progress
222
- */
223
- isIndexing() {
224
- return this.isRunning;
225
- }
226
- /**
227
- * Get current progress
228
- */
229
- getProgress() {
230
- // Initialize database if not already done
231
- if (!this.db) {
232
- this.db = new CodebaseDatabase(this.projectRoot);
233
- }
234
- this.db.initialize();
235
- return this.db.getProgress();
236
- }
237
- /**
238
- * Clear all indexed data
239
- */
240
- clear() {
241
- this.db.clear();
242
- }
243
- /**
244
- * Close database connection
245
- */
246
- close() {
247
- this.stopWatching();
248
- this.db.close();
249
- }
250
- /**
251
- * Check if watcher is enabled in database
252
- */
253
- isWatcherEnabled() {
254
- try {
255
- this.db.initialize();
256
- return this.db.isWatcherEnabled();
257
- }
258
- catch (error) {
259
- return false;
260
- }
261
- }
262
- /**
263
- * Start watching for file changes
264
- */
265
- startWatching(progressCallback) {
266
- if (this.fileWatcher) {
267
- logger.debug('File watcher already running');
268
- return;
269
- }
270
- if (!this.config.enabled) {
271
- logger.info('Codebase indexing is disabled, not starting watcher');
272
- return;
273
- }
274
- // Save progress callback for file change notifications
275
- if (progressCallback) {
276
- this.progressCallback = progressCallback;
277
- }
278
- try {
279
- this.fileWatcher = fs.watch(this.projectRoot, { recursive: true }, (_eventType, filename) => {
280
- if (!filename)
281
- return;
282
- // Convert to absolute path
283
- const filePath = path.join(this.projectRoot, filename);
284
- const relativePath = path.relative(this.projectRoot, filePath);
285
- // Check if file should be ignored
286
- if (this.ignoreFilter.ignores(relativePath)) {
287
- return;
288
- }
289
- // Check if it's a code file
290
- const ext = path.extname(filename);
291
- if (!CodebaseIndexAgent.CODE_EXTENSIONS.has(ext)) {
292
- return;
293
- }
294
- // Check if file exists (might be deleted)
295
- if (!fs.existsSync(filePath)) {
296
- logger.debug(`File deleted, removing from index: ${relativePath}`);
297
- this.db.deleteChunksByFile(relativePath);
298
- return;
299
- }
300
- // Debounce file changes
301
- this.debounceFileChange(filePath, relativePath);
302
- });
303
- // Persist watcher state to database
304
- this.db.setWatcherEnabled(true);
305
- logger.info('File watcher started successfully');
306
- }
307
- catch (error) {
308
- logger.error('Failed to start file watcher', error);
309
- }
310
- }
311
- /**
312
- * Stop watching for file changes
313
- */
314
- stopWatching() {
315
- if (this.fileWatcher) {
316
- this.fileWatcher.close();
317
- this.fileWatcher = null;
318
- // Persist watcher state to database
319
- this.db.setWatcherEnabled(false);
320
- logger.info('File watcher stopped');
321
- }
322
- // Clear all pending debounce timers
323
- for (const timer of this.watchDebounceTimers.values()) {
324
- clearTimeout(timer);
325
- }
326
- this.watchDebounceTimers.clear();
327
- }
328
- /**
329
- * Debounce file changes to avoid multiple rapid updates
330
- */
331
- debounceFileChange(filePath, relativePath) {
332
- // Clear existing timer for this file
333
- const existingTimer = this.watchDebounceTimers.get(relativePath);
334
- if (existingTimer) {
335
- clearTimeout(existingTimer);
336
- }
337
- // Set new timer
338
- const timer = setTimeout(() => {
339
- this.watchDebounceTimers.delete(relativePath);
340
- this.handleFileChange(filePath, relativePath);
341
- }, 5000); // 5 second debounce - optimized for AI code editing
342
- this.watchDebounceTimers.set(relativePath, timer);
343
- }
344
- /**
345
- * Handle file change event
346
- */
347
- async handleFileChange(filePath, relativePath) {
348
- try {
349
- // Notify UI that file is being reindexed
350
- this.notifyProgress({
351
- totalFiles: 0,
352
- processedFiles: 0,
353
- totalChunks: this.db.getTotalChunks(),
354
- currentFile: relativePath,
355
- status: 'indexing',
356
- });
357
- await this.processFile(filePath);
358
- // Notify UI that reindexing is complete
359
- this.notifyProgress({
360
- totalFiles: 0,
361
- processedFiles: 0,
362
- totalChunks: this.db.getTotalChunks(),
363
- currentFile: '',
364
- status: 'completed',
365
- });
366
- }
367
- catch (error) {
368
- logger.error(`Failed to reindex file: ${relativePath}`, error);
369
- }
370
- }
371
- /**
372
- * Load .gitignore file
373
- */
374
- loadGitignore() {
375
- const gitignorePath = path.join(this.projectRoot, '.gitignore');
376
- if (fs.existsSync(gitignorePath)) {
377
- const content = fs.readFileSync(gitignorePath, 'utf-8');
378
- this.ignoreFilter.add(content);
379
- }
380
- }
381
- /**
382
- * Add default ignore patterns
383
- */
384
- addDefaultIgnorePatterns() {
385
- this.ignoreFilter.add([
386
- 'node_modules',
387
- '.git',
388
- '.snow',
389
- 'dist',
390
- 'build',
391
- 'out',
392
- 'coverage',
393
- '.next',
394
- '.nuxt',
395
- '.cache',
396
- '*.min.js',
397
- '*.min.css',
398
- '*.map',
399
- 'package-lock.json',
400
- 'yarn.lock',
401
- 'pnpm-lock.yaml',
402
- ]);
403
- }
404
- /**
405
- * Scan project directory for code files
406
- */
407
- async scanFiles() {
408
- const files = [];
409
- const scanDir = (dir) => {
410
- const entries = fs.readdirSync(dir, { withFileTypes: true });
411
- for (const entry of entries) {
412
- if (this.shouldStop)
413
- break;
414
- const fullPath = path.join(dir, entry.name);
415
- const relativePath = path.relative(this.projectRoot, fullPath);
416
- // Check if should be ignored
417
- if (this.ignoreFilter.ignores(relativePath)) {
418
- continue;
419
- }
420
- if (entry.isDirectory()) {
421
- scanDir(fullPath);
422
- }
423
- else if (entry.isFile()) {
424
- const ext = path.extname(entry.name);
425
- if (CodebaseIndexAgent.CODE_EXTENSIONS.has(ext)) {
426
- files.push(fullPath);
427
- }
428
- }
429
- }
430
- };
431
- scanDir(this.projectRoot);
432
- return files;
433
- }
434
- /**
435
- * Process files with concurrency control
436
- */
437
- async processFiles(files) {
438
- const concurrency = this.config.batch.concurrency;
439
- // Process files in batches
440
- for (let i = 0; i < files.length; i += concurrency) {
441
- if (this.shouldStop) {
442
- logger.info('Indexing stopped by user');
443
- break;
444
- }
445
- const batch = files.slice(i, i + concurrency);
446
- const promises = batch.map(file => this.processFile(file));
447
- await Promise.allSettled(promises);
448
- // Update processed count accurately (current batch end index)
449
- const processedCount = Math.min(i + batch.length, files.length);
450
- this.db.updateProgress({
451
- processedFiles: processedCount,
452
- });
453
- }
454
- }
455
- /**
456
- * Process single file
457
- */
458
- async processFile(filePath) {
459
- try {
460
- const relativePath = path.relative(this.projectRoot, filePath);
461
- this.notifyProgress({
462
- totalFiles: this.db.getProgress().totalFiles,
463
- processedFiles: this.db.getProgress().processedFiles,
464
- totalChunks: this.db.getTotalChunks(),
465
- currentFile: relativePath,
466
- status: 'indexing',
467
- });
468
- // Read file content
469
- const content = fs.readFileSync(filePath, 'utf-8');
470
- // Calculate file hash for change detection
471
- const fileHash = crypto
472
- .createHash('sha256')
473
- .update(content)
474
- .digest('hex');
475
- // Check if file has been indexed and unchanged
476
- if (this.db.hasFileHash(fileHash)) {
477
- logger.debug(`File unchanged, skipping: ${relativePath}`);
478
- return;
479
- }
480
- // Delete old chunks for this file
481
- this.db.deleteChunksByFile(relativePath);
482
- // Split content into chunks
483
- const chunks = this.splitIntoChunks(content, relativePath);
484
- if (chunks.length === 0) {
485
- logger.debug(`No chunks generated for: ${relativePath}`);
486
- return;
487
- }
488
- // Generate embeddings in batches
489
- const maxLines = this.config.batch.maxLines;
490
- const embeddingBatches = [];
491
- for (let i = 0; i < chunks.length; i += maxLines) {
492
- const batch = chunks.slice(i, i + maxLines);
493
- embeddingBatches.push(batch);
494
- }
495
- for (const batch of embeddingBatches) {
496
- if (this.shouldStop)
497
- break;
498
- try {
499
- // Extract text content for embedding
500
- const texts = batch.map(chunk => chunk.content);
501
- // Call embedding API with retry
502
- const response = await withRetry(async () => {
503
- return await createEmbeddings({
504
- input: texts,
505
- });
506
- }, {
507
- maxRetries: 3,
508
- baseDelay: 2000,
509
- onRetry: (error, attempt, nextDelay) => {
510
- logger.warn(`Embedding API failed for ${relativePath} (attempt ${attempt}/3), retrying in ${nextDelay}ms...`, error.message);
511
- },
512
- });
513
- // Attach embeddings to chunks
514
- for (let i = 0; i < batch.length; i++) {
515
- batch[i].embedding = response.data[i].embedding;
516
- batch[i].fileHash = fileHash;
517
- batch[i].createdAt = Date.now();
518
- batch[i].updatedAt = Date.now();
519
- }
520
- // Store chunks to database with retry
521
- await withRetry(async () => {
522
- this.db.insertChunks(batch);
523
- }, {
524
- maxRetries: 2,
525
- baseDelay: 500,
526
- });
527
- // Update total chunks count
528
- this.db.updateProgress({
529
- totalChunks: this.db.getTotalChunks(),
530
- lastProcessedFile: relativePath,
531
- });
532
- // Reset failure counter on success
533
- this.consecutiveFailures = 0;
534
- }
535
- catch (error) {
536
- this.consecutiveFailures++;
537
- logger.error(`Failed to process batch for ${relativePath} (consecutive failures: ${this.consecutiveFailures}):`, error);
538
- // Stop indexing if too many consecutive failures
539
- if (this.consecutiveFailures >= this.MAX_CONSECUTIVE_FAILURES) {
540
- logger.error(`Stopping indexing after ${this.MAX_CONSECUTIVE_FAILURES} consecutive failures`);
541
- this.db.updateProgress({
542
- status: 'error',
543
- lastError: `Too many failures: ${error instanceof Error ? error.message : 'Unknown error'}`,
544
- });
545
- throw new Error(`Indexing stopped after ${this.MAX_CONSECUTIVE_FAILURES} consecutive failures`);
546
- }
547
- // Skip this batch and continue
548
- continue;
549
- }
550
- }
551
- logger.debug(`Indexed ${chunks.length} chunks from: ${relativePath}`);
552
- }
553
- catch (error) {
554
- logger.error(`Failed to process file: ${filePath}`, error);
555
- // Continue with next file
556
- }
557
- }
558
- /**
559
- * Split file content into chunks
560
- */
561
- splitIntoChunks(content, filePath) {
562
- const lines = content.split('\n');
563
- const chunks = [];
564
- const maxLinesPerChunk = 100; // Max lines per chunk
565
- const overlapLines = 10; // Overlap between chunks for context
566
- for (let i = 0; i < lines.length; i += maxLinesPerChunk - overlapLines) {
567
- const startLine = i;
568
- const endLine = Math.min(i + maxLinesPerChunk, lines.length);
569
- const chunkLines = lines.slice(startLine, endLine);
570
- const chunkContent = chunkLines.join('\n');
571
- // Skip empty chunks
572
- if (chunkContent.trim().length === 0) {
573
- continue;
574
- }
575
- chunks.push({
576
- filePath,
577
- content: chunkContent,
578
- startLine: startLine + 1, // 1-indexed
579
- endLine: endLine,
580
- embedding: [], // Will be filled later
581
- fileHash: '', // Will be filled later
582
- createdAt: 0,
583
- updatedAt: 0,
584
- });
585
- }
586
- return chunks;
587
- }
588
- /**
589
- * Notify progress to callback
590
- */
591
- notifyProgress(progress) {
592
- if (this.progressCallback) {
593
- this.progressCallback(progress);
594
- }
595
- }
596
- }
597
- // Supported code file extensions
598
- Object.defineProperty(CodebaseIndexAgent, "CODE_EXTENSIONS", {
599
- enumerable: true,
600
- configurable: true,
601
- writable: true,
602
- value: new Set([
603
- '.ts',
604
- '.tsx',
605
- '.js',
606
- '.jsx',
607
- '.py',
608
- '.java',
609
- '.cpp',
610
- '.c',
611
- '.h',
612
- '.hpp',
613
- '.cs',
614
- '.go',
615
- '.rs',
616
- '.rb',
617
- '.php',
618
- '.swift',
619
- '.kt',
620
- '.scala',
621
- '.m',
622
- '.md',
623
- '.mm',
624
- '.sh',
625
- '.bash',
626
- '.sql',
627
- '.graphql',
628
- '.proto',
629
- '.json',
630
- '.yaml',
631
- '.yml',
632
- '.toml',
633
- '.xml',
634
- '.html',
635
- '.css',
636
- '.scss',
637
- '.less',
638
- '.vue',
639
- '.svelte',
640
- ])
641
- });
@@ -1,61 +0,0 @@
1
- /**
2
- * Codebase Review Agent Service
3
- *
4
- * Reviews codebase search results to filter out irrelevant items.
5
- * Uses basicModel for efficient, low-cost relevance checking.
6
- * Can also suggest better search keywords if results are not relevant.
7
- */
8
- export declare class CodebaseReviewAgent {
9
- private modelName;
10
- private requestMethod;
11
- private initialized;
12
- private readonly MAX_RETRIES;
13
- /**
14
- * Initialize the review agent with current configuration
15
- */
16
- private initialize;
17
- /**
18
- * Check if review agent is available
19
- */
20
- isAvailable(): Promise<boolean>;
21
- /**
22
- * Call the model with streaming API and assemble complete response
23
- */
24
- private callModel;
25
- /**
26
- * Try to parse JSON response with retry logic
27
- */
28
- private tryParseJSON;
29
- /**
30
- * Review search results with retry mechanism
31
- */
32
- private reviewWithRetry;
33
- /**
34
- * Sleep utility for retry backoff
35
- */
36
- private sleep;
37
- /**
38
- * Review search results and filter out irrelevant ones
39
- * With retry mechanism and graceful degradation
40
- *
41
- * @param query - Original search query
42
- * @param results - Search results to review
43
- * @param abortSignal - Optional abort signal
44
- * @returns Object with filtered results and optional suggestions
45
- */
46
- reviewResults(query: string, results: Array<{
47
- rank: number;
48
- filePath: string;
49
- startLine: number;
50
- endLine: number;
51
- content: string;
52
- similarityScore: string;
53
- location: string;
54
- }>, abortSignal?: AbortSignal): Promise<{
55
- filteredResults: typeof results;
56
- removedCount: number;
57
- suggestions?: string[];
58
- reviewFailed?: boolean;
59
- }>;
60
- }
61
- export declare const codebaseReviewAgent: CodebaseReviewAgent;