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,88 +0,0 @@
1
- import type { SearchResponse, WebPageContent } from './types/websearch.types.js';
2
- /**
3
- * Web Search Service using DuckDuckGo Lite with Puppeteer Core
4
- * Provides web search functionality with real browser support and proxy
5
- * Uses system-installed Chrome/Edge to reduce package size
6
- */
7
- export declare class WebSearchService {
8
- private maxResults;
9
- private browser;
10
- private executablePath;
11
- constructor(maxResults?: number);
12
- /**
13
- * Launch browser with proxy settings from config
14
- */
15
- private launchBrowser;
16
- /**
17
- * Close browser instance
18
- */
19
- closeBrowser(): Promise<void>;
20
- /**
21
- * Perform a web search using DuckDuckGo
22
- * @param query - Search query string
23
- * @param maxResults - Maximum number of results to return (default: 10)
24
- * @returns Search results with title, URL, and snippet
25
- */
26
- search(query: string, maxResults?: number): Promise<SearchResponse>;
27
- /**
28
- * Fetch and extract content from a web page
29
- * @param url - URL of the web page to fetch
30
- * @param maxLength - Maximum content length (default: 50000 characters)
31
- * @param userQuery - Optional user query for content extraction using compact model agent
32
- * @param abortSignal - Optional abort signal from main flow
33
- * @param onTokenUpdate - Optional callback to update token count during compression
34
- * @returns Cleaned page content
35
- */
36
- fetchPage(url: string, maxLength?: number, userQuery?: string, abortSignal?: AbortSignal, onTokenUpdate?: (tokenCount: number) => void): Promise<WebPageContent>;
37
- }
38
- export declare const webSearchService: WebSearchService;
39
- export declare const mcpTools: ({
40
- name: string;
41
- description: string;
42
- inputSchema: {
43
- type: string;
44
- properties: {
45
- query: {
46
- type: string;
47
- description: string;
48
- };
49
- maxResults: {
50
- type: string;
51
- description: string;
52
- default: number;
53
- minimum: number;
54
- maximum: number;
55
- };
56
- url?: undefined;
57
- maxLength?: undefined;
58
- userQuery?: undefined;
59
- };
60
- required: string[];
61
- };
62
- } | {
63
- name: string;
64
- description: string;
65
- inputSchema: {
66
- type: string;
67
- properties: {
68
- url: {
69
- type: string;
70
- description: string;
71
- };
72
- maxLength: {
73
- type: string;
74
- description: string;
75
- default: number;
76
- minimum: number;
77
- maximum: number;
78
- };
79
- userQuery: {
80
- type: string;
81
- description: string;
82
- };
83
- query?: undefined;
84
- maxResults?: undefined;
85
- };
86
- required: string[];
87
- };
88
- })[];
@@ -1,375 +0,0 @@
1
- import puppeteer from 'puppeteer-core';
2
- import { existsSync } from 'node:fs';
3
- import { getProxyConfig } from '../utils/apiConfig.js';
4
- // Utility functions
5
- import { findBrowserExecutable } from './utils/websearch/browser.utils.js';
6
- import { cleanText } from './utils/websearch/text.utils.js';
7
- /**
8
- * Web Search Service using DuckDuckGo Lite with Puppeteer Core
9
- * Provides web search functionality with real browser support and proxy
10
- * Uses system-installed Chrome/Edge to reduce package size
11
- */
12
- export class WebSearchService {
13
- constructor(maxResults = 10) {
14
- Object.defineProperty(this, "maxResults", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: void 0
19
- });
20
- Object.defineProperty(this, "browser", {
21
- enumerable: true,
22
- configurable: true,
23
- writable: true,
24
- value: null
25
- });
26
- Object.defineProperty(this, "executablePath", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: null
31
- });
32
- this.maxResults = maxResults;
33
- }
34
- /**
35
- * Launch browser with proxy settings from config
36
- */
37
- async launchBrowser() {
38
- if (this.browser && this.browser.connected) {
39
- return this.browser;
40
- }
41
- const proxyConfig = getProxyConfig();
42
- // Find browser executable path (cache it)
43
- // Priority: 1. User-configured path, 2. Auto-detect
44
- if (!this.executablePath) {
45
- // First try user-configured browser path
46
- if (proxyConfig.browserPath && existsSync(proxyConfig.browserPath)) {
47
- this.executablePath = proxyConfig.browserPath;
48
- }
49
- else {
50
- // Fallback to auto-detection
51
- this.executablePath = findBrowserExecutable();
52
- if (!this.executablePath) {
53
- throw new Error('No system browser found. Please install Chrome or Edge browser, or configure browser path in Proxy settings.');
54
- }
55
- }
56
- }
57
- const launchArgs = [
58
- '--no-sandbox',
59
- '--disable-setuid-sandbox',
60
- '--disable-dev-shm-usage',
61
- '--disable-accelerated-2d-canvas',
62
- '--disable-gpu',
63
- ];
64
- // Only add proxy if enabled
65
- if (proxyConfig.enabled) {
66
- launchArgs.unshift(`--proxy-server=http://127.0.0.1:${proxyConfig.port}`);
67
- }
68
- this.browser = await puppeteer.launch({
69
- executablePath: this.executablePath,
70
- headless: true,
71
- args: launchArgs,
72
- });
73
- return this.browser;
74
- }
75
- /**
76
- * Close browser instance
77
- */
78
- async closeBrowser() {
79
- if (this.browser) {
80
- await this.browser.close();
81
- this.browser = null;
82
- }
83
- }
84
- /**
85
- * Perform a web search using DuckDuckGo
86
- * @param query - Search query string
87
- * @param maxResults - Maximum number of results to return (default: 10)
88
- * @returns Search results with title, URL, and snippet
89
- */
90
- async search(query, maxResults) {
91
- const limit = maxResults || this.maxResults;
92
- let page = null;
93
- try {
94
- // Launch browser with proxy
95
- const browser = await this.launchBrowser();
96
- page = await browser.newPage();
97
- // Set realistic user agent
98
- await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
99
- // Encode query for URL
100
- const encodedQuery = encodeURIComponent(query);
101
- const searchUrl = `https://lite.duckduckgo.com/lite?q=${encodedQuery}`;
102
- // Navigate to search page with timeout
103
- await page.goto(searchUrl, {
104
- waitUntil: 'networkidle2',
105
- timeout: 30000,
106
- });
107
- // Extract search results from the page
108
- const results = await page.evaluate((maxLimit) => {
109
- const searchResults = [];
110
- const rows = document.querySelectorAll('table tr');
111
- let currentResult = {};
112
- let resultCount = 0;
113
- for (const row of rows) {
114
- if (resultCount >= maxLimit)
115
- break;
116
- // Check if this row contains a link (title row)
117
- const linkElement = row.querySelector('a.result-link');
118
- if (linkElement) {
119
- // Save previous result if exists
120
- if (currentResult.title && currentResult.url) {
121
- searchResults.push(currentResult);
122
- resultCount++;
123
- if (resultCount >= maxLimit)
124
- break;
125
- }
126
- // Start new result
127
- const title = linkElement.textContent?.trim() || '';
128
- const href = linkElement.getAttribute('href') || '';
129
- // Extract actual URL from DuckDuckGo redirect
130
- let actualUrl = href;
131
- if (href.includes('uddg=')) {
132
- const match = href.match(/uddg=([^&]+)/);
133
- if (match && match[1]) {
134
- actualUrl = decodeURIComponent(match[1]);
135
- }
136
- }
137
- currentResult = {
138
- title: title,
139
- url: actualUrl,
140
- snippet: '',
141
- displayUrl: '',
142
- };
143
- continue;
144
- }
145
- // Check if this row contains snippet
146
- const snippetElement = row.querySelector('td.result-snippet');
147
- if (snippetElement && currentResult.title) {
148
- currentResult.snippet = snippetElement.textContent?.trim() || '';
149
- continue;
150
- }
151
- // Check if this row contains display URL
152
- const displayUrlElement = row.querySelector('span.link-text');
153
- if (displayUrlElement && currentResult.title) {
154
- currentResult.displayUrl =
155
- displayUrlElement.textContent?.trim() || '';
156
- }
157
- }
158
- // Add last result if exists
159
- if (currentResult.title &&
160
- currentResult.url &&
161
- resultCount < maxLimit) {
162
- searchResults.push(currentResult);
163
- }
164
- return searchResults;
165
- }, limit);
166
- // Clean text in results
167
- const cleanedResults = results.map(result => ({
168
- title: cleanText(result.title),
169
- url: result.url,
170
- snippet: cleanText(result.snippet),
171
- displayUrl: cleanText(result.displayUrl),
172
- }));
173
- // Close the page
174
- await page.close();
175
- return {
176
- query,
177
- results: cleanedResults,
178
- totalResults: cleanedResults.length,
179
- };
180
- }
181
- catch (error) {
182
- // Clean up page on error
183
- if (page) {
184
- try {
185
- await page.close();
186
- }
187
- catch {
188
- // Ignore close errors
189
- }
190
- }
191
- throw new Error(`Web search failed: ${error.message}`);
192
- }
193
- }
194
- /**
195
- * Fetch and extract content from a web page
196
- * @param url - URL of the web page to fetch
197
- * @param maxLength - Maximum content length (default: 50000 characters)
198
- * @param userQuery - Optional user query for content extraction using compact model agent
199
- * @param abortSignal - Optional abort signal from main flow
200
- * @param onTokenUpdate - Optional callback to update token count during compression
201
- * @returns Cleaned page content
202
- */
203
- async fetchPage(url, maxLength = 50000, userQuery, abortSignal, onTokenUpdate) {
204
- let page = null;
205
- try {
206
- // Launch browser with proxy
207
- const browser = await this.launchBrowser();
208
- page = await browser.newPage();
209
- // Set realistic user agent
210
- await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
211
- // Navigate to page with timeout
212
- await page.goto(url, {
213
- waitUntil: 'networkidle2',
214
- timeout: 30000,
215
- });
216
- // Extract content using browser context
217
- const pageData = await page.evaluate(() => {
218
- // Remove unwanted elements
219
- const selectorsToRemove = [
220
- 'script',
221
- 'style',
222
- 'nav',
223
- 'header',
224
- 'footer',
225
- 'iframe',
226
- 'noscript',
227
- 'svg',
228
- '.advertisement',
229
- '.ad',
230
- '.ads',
231
- '#cookie-banner',
232
- '.cookie-notice',
233
- '.social-share',
234
- '.comments',
235
- '.sidebar',
236
- '[role="banner"]',
237
- '[role="navigation"]',
238
- '[role="complementary"]',
239
- ];
240
- selectorsToRemove.forEach(selector => {
241
- document.querySelectorAll(selector).forEach(el => el.remove());
242
- });
243
- // Get title
244
- const title = document.title || '';
245
- // Try to find main content area
246
- let mainContent = null;
247
- const mainSelectors = [
248
- 'article',
249
- 'main',
250
- '[role="main"]',
251
- '.main-content',
252
- '.content',
253
- '#content',
254
- '.article-body',
255
- '.post-content',
256
- ];
257
- for (const selector of mainSelectors) {
258
- mainContent = document.querySelector(selector);
259
- if (mainContent)
260
- break;
261
- }
262
- // Fallback to body if no main content found
263
- const contentElement = mainContent || document.body;
264
- // Extract text content
265
- const textContent = contentElement.textContent || '';
266
- return {
267
- title,
268
- textContent,
269
- };
270
- });
271
- // Clean and process the text
272
- let cleanedContent = pageData.textContent
273
- .replace(/\s+/g, ' ') // Replace multiple spaces with single space
274
- .replace(/\n\s*\n/g, '\n') // Remove empty lines
275
- .trim();
276
- // Limit content length
277
- if (cleanedContent.length > maxLength) {
278
- cleanedContent =
279
- cleanedContent.slice(0, maxLength) + '\n\n[Content truncated...]';
280
- }
281
- // Create preview (first 500 characters)
282
- const contentPreview = cleanedContent.slice(0, 500) +
283
- (cleanedContent.length > 500 ? '...' : '');
284
- // Close the page
285
- await page.close();
286
- // Use compact agent to extract key information if userQuery is provided
287
- let finalContent = cleanedContent;
288
- if (userQuery) {
289
- try {
290
- const { compactAgent } = await import('../agents/compactAgent.js');
291
- const isAvailable = await compactAgent.isAvailable();
292
- if (isAvailable) {
293
- // Use compact model to extract relevant information
294
- // No timeout - let it run as long as needed
295
- finalContent = await compactAgent.extractWebPageContent(cleanedContent, userQuery, url, abortSignal, onTokenUpdate);
296
- }
297
- }
298
- catch (error) {
299
- // If compact agent fails, fallback to original content
300
- // Error is already logged in compactAgent
301
- }
302
- }
303
- return {
304
- url,
305
- title: cleanText(pageData.title),
306
- content: finalContent,
307
- textLength: finalContent.length,
308
- contentPreview,
309
- };
310
- }
311
- catch (error) {
312
- // Clean up page on error
313
- if (page) {
314
- try {
315
- await page.close();
316
- }
317
- catch {
318
- // Ignore close errors
319
- }
320
- }
321
- throw new Error(`Failed to fetch page: ${error.message}`);
322
- }
323
- }
324
- }
325
- // Export a default instance
326
- export const webSearchService = new WebSearchService();
327
- // MCP Tool definitions
328
- export const mcpTools = [
329
- {
330
- name: 'websearch-search',
331
- description: 'Search the web using DuckDuckGo. Returns a list of search results with titles, URLs, and snippets. Best for finding current information, documentation, news, or general web content. **IMPORTANT WORKFLOW**: After getting search results, analyze them and choose ONLY ONE most credible and relevant page to fetch. Do NOT fetch multiple pages - reading one high-quality source is sufficient and more efficient.',
332
- inputSchema: {
333
- type: 'object',
334
- properties: {
335
- query: {
336
- type: 'string',
337
- description: 'Search query string (e.g., "Claude latest model", "TypeScript best practices")',
338
- },
339
- maxResults: {
340
- type: 'number',
341
- description: 'Maximum number of results to return (default: 10, max: 20)',
342
- default: 10,
343
- minimum: 1,
344
- maximum: 20,
345
- },
346
- },
347
- required: ['query'],
348
- },
349
- },
350
- {
351
- name: 'websearch-fetch',
352
- description: "Fetch and read the full content of a web page. Automatically cleans HTML and extracts the main text content, removing ads, navigation, and other noise. **USAGE RULE**: Only fetch ONE page per search - choose the most credible and relevant result (prefer official documentation, reputable tech sites, or well-known sources). **OPTIMIZATION**: ALWAYS provide the userQuery parameter with the user's original question. This enables automatic extraction of only relevant information using a compact AI model, which dramatically saves context and improves response quality.",
353
- inputSchema: {
354
- type: 'object',
355
- properties: {
356
- url: {
357
- type: 'string',
358
- description: 'Full URL of the web page to fetch (e.g., "https://example.com/article")',
359
- },
360
- maxLength: {
361
- type: 'number',
362
- description: 'Maximum content length in characters (default: 50000, max: 100000)',
363
- default: 50000,
364
- minimum: 1000,
365
- maximum: 100000,
366
- },
367
- userQuery: {
368
- type: 'string',
369
- description: "REQUIRED: User's original question or query. This is essential for intelligent content extraction - the compact AI model will extract only information relevant to this query, reducing content size by 80-95%. Always provide this parameter.",
370
- },
371
- },
372
- required: ['url'],
373
- },
374
- },
375
- ];
@@ -1 +0,0 @@
1
- export {};
@@ -1,7 +0,0 @@
1
- import { logger } from '../utils/logger.js';
2
- // Test the logger
3
- logger.info('Logger service initialized successfully');
4
- logger.error('Test error message', { errorCode: 500 });
5
- logger.warn('Test warning message');
6
- logger.debug('Debug information', { timestamp: Date.now() });
7
- console.log('Logger test completed. Check ./snow/log directory for log files.');
@@ -1,15 +0,0 @@
1
- export interface SnowConfig {
2
- model?: string;
3
- apiKey?: string;
4
- maxTokens?: number;
5
- }
6
- export interface Command {
7
- name: string;
8
- description: string;
9
- handler: (args: string[]) => Promise<void>;
10
- }
11
- export interface AppState {
12
- isLoading: boolean;
13
- currentCommand?: string;
14
- history: string[];
15
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import type { SubAgent } from '../../utils/subAgentConfig.js';
3
- interface Props {
4
- agents: SubAgent[];
5
- selectedIndex: number;
6
- visible: boolean;
7
- maxHeight?: number;
8
- }
9
- declare const AgentPickerPanel: React.MemoExoticComponent<({ agents, selectedIndex, visible, maxHeight }: Props) => React.JSX.Element | null>;
10
- export default AgentPickerPanel;
@@ -1,74 +0,0 @@
1
- import React, { memo, useMemo } from 'react';
2
- import { Box, Text } from 'ink';
3
- import { Alert } from '@inkjs/ui';
4
- import { useTheme } from '../contexts/ThemeContext.js';
5
- const AgentPickerPanel = memo(({ agents, selectedIndex, visible, maxHeight }) => {
6
- const { theme } = useTheme();
7
- // Fixed maximum display items to prevent rendering issues
8
- const MAX_DISPLAY_ITEMS = 5;
9
- const effectiveMaxItems = maxHeight
10
- ? Math.min(maxHeight, MAX_DISPLAY_ITEMS)
11
- : MAX_DISPLAY_ITEMS;
12
- // Limit displayed agents
13
- const displayedAgents = useMemo(() => {
14
- if (agents.length <= effectiveMaxItems) {
15
- return agents;
16
- }
17
- // Show agents around the selected index
18
- const halfWindow = Math.floor(effectiveMaxItems / 2);
19
- let startIndex = Math.max(0, selectedIndex - halfWindow);
20
- let endIndex = Math.min(agents.length, startIndex + effectiveMaxItems);
21
- // Adjust if we're near the end
22
- if (endIndex - startIndex < effectiveMaxItems) {
23
- startIndex = Math.max(0, endIndex - effectiveMaxItems);
24
- }
25
- return agents.slice(startIndex, endIndex);
26
- }, [agents, selectedIndex, effectiveMaxItems]);
27
- // Calculate actual selected index in the displayed subset
28
- const displayedSelectedIndex = useMemo(() => {
29
- return displayedAgents.findIndex(agent => {
30
- const originalIndex = agents.indexOf(agent);
31
- return originalIndex === selectedIndex;
32
- });
33
- }, [displayedAgents, agents, selectedIndex]);
34
- // Don't show panel if not visible
35
- if (!visible) {
36
- return null;
37
- }
38
- // Show message if no agents configured
39
- if (agents.length === 0) {
40
- return (React.createElement(Box, { flexDirection: "column" },
41
- React.createElement(Box, { width: "100%" },
42
- React.createElement(Box, { flexDirection: "column", width: "100%" },
43
- React.createElement(Box, null,
44
- React.createElement(Text, { color: theme.colors.warning, bold: true }, "Sub-Agent Selection")),
45
- React.createElement(Box, { marginTop: 1 },
46
- React.createElement(Alert, { variant: "warning" }, "No sub-agents configured. Please configure sub-agents first."))))));
47
- }
48
- return (React.createElement(Box, { flexDirection: "column" },
49
- React.createElement(Box, { width: "100%" },
50
- React.createElement(Box, { flexDirection: "column", width: "100%" },
51
- React.createElement(Box, null,
52
- React.createElement(Text, { color: theme.colors.warning, bold: true },
53
- "Select Sub-Agent",
54
- ' ',
55
- agents.length > effectiveMaxItems &&
56
- `(${selectedIndex + 1}/${agents.length})`),
57
- React.createElement(Text, { color: theme.colors.menuSecondary, dimColor: true }, "(Press ESC to close)")),
58
- displayedAgents.map((agent, index) => (React.createElement(Box, { key: agent.id, flexDirection: "column", width: "100%" },
59
- React.createElement(Text, { color: index === displayedSelectedIndex ? theme.colors.success : theme.colors.menuSecondary, bold: true },
60
- index === displayedSelectedIndex ? '❯ ' : ' ',
61
- "#",
62
- agent.name),
63
- React.createElement(Box, { marginLeft: 3 },
64
- React.createElement(Text, { color: index === displayedSelectedIndex ? theme.colors.success : theme.colors.menuSecondary, dimColor: true },
65
- "\u2514\u2500 ",
66
- agent.description || 'No description'))))),
67
- agents.length > effectiveMaxItems && (React.createElement(Box, { marginTop: 1 },
68
- React.createElement(Text, { color: theme.colors.menuSecondary, dimColor: true },
69
- "\u2191\u2193 to scroll \u00B7 ",
70
- agents.length - effectiveMaxItems,
71
- " more hidden")))))));
72
- });
73
- AgentPickerPanel.displayName = 'AgentPickerPanel';
74
- export default AgentPickerPanel;
@@ -1,46 +0,0 @@
1
- import React from 'react';
2
- /**
3
- * Calculate context usage percentage
4
- * This is the same logic used in ChatInput to display usage
5
- */
6
- export declare function calculateContextPercentage(contextUsage: {
7
- inputTokens: number;
8
- maxContextTokens: number;
9
- cacheCreationTokens?: number;
10
- cacheReadTokens?: number;
11
- cachedTokens?: number;
12
- }): number;
13
- type Props = {
14
- onSubmit: (message: string, images?: Array<{
15
- data: string;
16
- mimeType: string;
17
- }>) => void;
18
- onCommand?: (commandName: string, result: any) => void;
19
- placeholder?: string;
20
- disabled?: boolean;
21
- isProcessing?: boolean;
22
- chatHistory?: Array<{
23
- role: string;
24
- content: string;
25
- }>;
26
- onHistorySelect?: (selectedIndex: number, message: string) => void;
27
- yoloMode?: boolean;
28
- contextUsage?: {
29
- inputTokens: number;
30
- maxContextTokens: number;
31
- cacheCreationTokens?: number;
32
- cacheReadTokens?: number;
33
- cachedTokens?: number;
34
- };
35
- initialContent?: {
36
- text: string;
37
- images?: Array<{
38
- type: 'image';
39
- data: string;
40
- mimeType: string;
41
- }>;
42
- } | null;
43
- onContextPercentageChange?: (percentage: number) => void;
44
- };
45
- export default function ChatInput({ onSubmit, onCommand, placeholder, disabled, isProcessing, chatHistory, onHistorySelect, yoloMode, contextUsage, initialContent, onContextPercentageChange, }: Props): React.JSX.Element;
46
- export {};