snow-ai 0.4.16 → 0.4.18

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 (352) hide show
  1. package/bundle/cli.mjs +477445 -0
  2. package/bundle/sql-wasm.wasm +0 -0
  3. package/bundle/tiktoken_bg.wasm +0 -0
  4. package/package.json +31 -26
  5. package/dist/agents/codebaseIndexAgent.d.ts +0 -102
  6. package/dist/agents/codebaseIndexAgent.js +0 -641
  7. package/dist/agents/codebaseReviewAgent.d.ts +0 -61
  8. package/dist/agents/codebaseReviewAgent.js +0 -301
  9. package/dist/agents/compactAgent.d.ts +0 -55
  10. package/dist/agents/compactAgent.js +0 -306
  11. package/dist/agents/promptOptimizeAgent.d.ts +0 -54
  12. package/dist/agents/promptOptimizeAgent.js +0 -268
  13. package/dist/agents/reviewAgent.d.ts +0 -50
  14. package/dist/agents/reviewAgent.js +0 -265
  15. package/dist/agents/summaryAgent.d.ts +0 -57
  16. package/dist/agents/summaryAgent.js +0 -260
  17. package/dist/api/anthropic.d.ts +0 -44
  18. package/dist/api/anthropic.js +0 -598
  19. package/dist/api/chat.d.ts +0 -73
  20. package/dist/api/chat.js +0 -386
  21. package/dist/api/embedding.d.ts +0 -34
  22. package/dist/api/embedding.js +0 -80
  23. package/dist/api/gemini.d.ts +0 -31
  24. package/dist/api/gemini.js +0 -445
  25. package/dist/api/models.d.ts +0 -15
  26. package/dist/api/models.js +0 -139
  27. package/dist/api/responses.d.ts +0 -38
  28. package/dist/api/responses.js +0 -515
  29. package/dist/api/systemPrompt.d.ts +0 -4
  30. package/dist/api/systemPrompt.js +0 -408
  31. package/dist/api/types.d.ts +0 -53
  32. package/dist/api/types.js +0 -4
  33. package/dist/app.d.ts +0 -8
  34. package/dist/app.js +0 -112
  35. package/dist/cli.d.ts +0 -2
  36. package/dist/cli.js +0 -199
  37. package/dist/hooks/useAgentPicker.d.ts +0 -14
  38. package/dist/hooks/useAgentPicker.js +0 -119
  39. package/dist/hooks/useClipboard.d.ts +0 -4
  40. package/dist/hooks/useClipboard.js +0 -175
  41. package/dist/hooks/useCommandHandler.d.ts +0 -35
  42. package/dist/hooks/useCommandHandler.js +0 -346
  43. package/dist/hooks/useCommandPanel.d.ts +0 -17
  44. package/dist/hooks/useCommandPanel.js +0 -114
  45. package/dist/hooks/useConversation.d.ts +0 -49
  46. package/dist/hooks/useConversation.js +0 -1052
  47. package/dist/hooks/useFilePicker.d.ts +0 -18
  48. package/dist/hooks/useFilePicker.js +0 -224
  49. package/dist/hooks/useGlobalExit.d.ts +0 -5
  50. package/dist/hooks/useGlobalExit.js +0 -34
  51. package/dist/hooks/useGlobalNavigation.d.ts +0 -6
  52. package/dist/hooks/useGlobalNavigation.js +0 -17
  53. package/dist/hooks/useHistoryNavigation.d.ts +0 -35
  54. package/dist/hooks/useHistoryNavigation.js +0 -133
  55. package/dist/hooks/useInputBuffer.d.ts +0 -6
  56. package/dist/hooks/useInputBuffer.js +0 -45
  57. package/dist/hooks/useKeyboardInput.d.ts +0 -80
  58. package/dist/hooks/useKeyboardInput.js +0 -608
  59. package/dist/hooks/useSessionManagement.d.ts +0 -10
  60. package/dist/hooks/useSessionManagement.js +0 -43
  61. package/dist/hooks/useSessionSave.d.ts +0 -8
  62. package/dist/hooks/useSessionSave.js +0 -63
  63. package/dist/hooks/useSnapshotState.d.ts +0 -26
  64. package/dist/hooks/useSnapshotState.js +0 -28
  65. package/dist/hooks/useStreamingState.d.ts +0 -33
  66. package/dist/hooks/useStreamingState.js +0 -105
  67. package/dist/hooks/useTerminalFocus.d.ts +0 -28
  68. package/dist/hooks/useTerminalFocus.js +0 -87
  69. package/dist/hooks/useTerminalSize.d.ts +0 -4
  70. package/dist/hooks/useTerminalSize.js +0 -20
  71. package/dist/hooks/useTodoPicker.d.ts +0 -16
  72. package/dist/hooks/useTodoPicker.js +0 -94
  73. package/dist/hooks/useToolConfirmation.d.ts +0 -19
  74. package/dist/hooks/useToolConfirmation.js +0 -61
  75. package/dist/hooks/useVSCodeState.d.ts +0 -8
  76. package/dist/hooks/useVSCodeState.js +0 -81
  77. package/dist/i18n/I18nContext.d.ts +0 -14
  78. package/dist/i18n/I18nContext.js +0 -24
  79. package/dist/i18n/index.d.ts +0 -3
  80. package/dist/i18n/index.js +0 -2
  81. package/dist/i18n/lang/en.d.ts +0 -2
  82. package/dist/i18n/lang/en.js +0 -502
  83. package/dist/i18n/lang/es.d.ts +0 -2
  84. package/dist/i18n/lang/es.js +0 -502
  85. package/dist/i18n/lang/ja.d.ts +0 -2
  86. package/dist/i18n/lang/ja.js +0 -502
  87. package/dist/i18n/lang/ko.d.ts +0 -2
  88. package/dist/i18n/lang/ko.js +0 -502
  89. package/dist/i18n/lang/zh-TW.d.ts +0 -2
  90. package/dist/i18n/lang/zh-TW.js +0 -502
  91. package/dist/i18n/lang/zh.d.ts +0 -2
  92. package/dist/i18n/lang/zh.js +0 -502
  93. package/dist/i18n/translations.d.ts +0 -2
  94. package/dist/i18n/translations.js +0 -14
  95. package/dist/i18n/types.d.ts +0 -478
  96. package/dist/i18n/types.js +0 -1
  97. package/dist/mcp/aceCodeSearch.d.ts +0 -247
  98. package/dist/mcp/aceCodeSearch.js +0 -1058
  99. package/dist/mcp/bash.d.ts +0 -50
  100. package/dist/mcp/bash.js +0 -153
  101. package/dist/mcp/codebaseSearch.d.ts +0 -44
  102. package/dist/mcp/codebaseSearch.js +0 -275
  103. package/dist/mcp/filesystem.d.ts +0 -392
  104. package/dist/mcp/filesystem.js +0 -1445
  105. package/dist/mcp/ideDiagnostics.d.ts +0 -36
  106. package/dist/mcp/ideDiagnostics.js +0 -90
  107. package/dist/mcp/notebook.d.ts +0 -10
  108. package/dist/mcp/notebook.js +0 -367
  109. package/dist/mcp/subagent.d.ts +0 -37
  110. package/dist/mcp/subagent.js +0 -113
  111. package/dist/mcp/todo.d.ts +0 -46
  112. package/dist/mcp/todo.js +0 -511
  113. package/dist/mcp/types/aceCodeSearch.types.d.ts +0 -92
  114. package/dist/mcp/types/aceCodeSearch.types.js +0 -4
  115. package/dist/mcp/types/bash.types.d.ts +0 -13
  116. package/dist/mcp/types/bash.types.js +0 -4
  117. package/dist/mcp/types/filesystem.types.d.ts +0 -210
  118. package/dist/mcp/types/filesystem.types.js +0 -27
  119. package/dist/mcp/types/todo.types.d.ts +0 -27
  120. package/dist/mcp/types/todo.types.js +0 -4
  121. package/dist/mcp/types/websearch.types.d.ts +0 -30
  122. package/dist/mcp/types/websearch.types.js +0 -4
  123. package/dist/mcp/utils/aceCodeSearch/filesystem.utils.d.ts +0 -34
  124. package/dist/mcp/utils/aceCodeSearch/filesystem.utils.js +0 -146
  125. package/dist/mcp/utils/aceCodeSearch/language.utils.d.ts +0 -14
  126. package/dist/mcp/utils/aceCodeSearch/language.utils.js +0 -418
  127. package/dist/mcp/utils/aceCodeSearch/search.utils.d.ts +0 -31
  128. package/dist/mcp/utils/aceCodeSearch/search.utils.js +0 -136
  129. package/dist/mcp/utils/aceCodeSearch/symbol.utils.d.ts +0 -20
  130. package/dist/mcp/utils/aceCodeSearch/symbol.utils.js +0 -141
  131. package/dist/mcp/utils/bash/security.utils.d.ts +0 -20
  132. package/dist/mcp/utils/bash/security.utils.js +0 -34
  133. package/dist/mcp/utils/filesystem/batch-operations.utils.d.ts +0 -39
  134. package/dist/mcp/utils/filesystem/batch-operations.utils.js +0 -182
  135. package/dist/mcp/utils/filesystem/code-analysis.utils.d.ts +0 -18
  136. package/dist/mcp/utils/filesystem/code-analysis.utils.js +0 -165
  137. package/dist/mcp/utils/filesystem/match-finder.utils.d.ts +0 -16
  138. package/dist/mcp/utils/filesystem/match-finder.utils.js +0 -85
  139. package/dist/mcp/utils/filesystem/office-parser.utils.d.ts +0 -43
  140. package/dist/mcp/utils/filesystem/office-parser.utils.js +0 -163
  141. package/dist/mcp/utils/filesystem/path-fixer.utils.d.ts +0 -7
  142. package/dist/mcp/utils/filesystem/path-fixer.utils.js +0 -60
  143. package/dist/mcp/utils/filesystem/similarity.utils.d.ts +0 -22
  144. package/dist/mcp/utils/filesystem/similarity.utils.js +0 -75
  145. package/dist/mcp/utils/todo/date.utils.d.ts +0 -9
  146. package/dist/mcp/utils/todo/date.utils.js +0 -14
  147. package/dist/mcp/utils/websearch/browser.utils.d.ts +0 -8
  148. package/dist/mcp/utils/websearch/browser.utils.js +0 -58
  149. package/dist/mcp/utils/websearch/text.utils.d.ts +0 -16
  150. package/dist/mcp/utils/websearch/text.utils.js +0 -39
  151. package/dist/mcp/websearch.d.ts +0 -88
  152. package/dist/mcp/websearch.js +0 -375
  153. package/dist/test/logger-test.d.ts +0 -1
  154. package/dist/test/logger-test.js +0 -7
  155. package/dist/types/index.d.ts +0 -15
  156. package/dist/types/index.js +0 -1
  157. package/dist/ui/components/AgentPickerPanel.d.ts +0 -10
  158. package/dist/ui/components/AgentPickerPanel.js +0 -74
  159. package/dist/ui/components/ChatInput.d.ts +0 -46
  160. package/dist/ui/components/ChatInput.js +0 -384
  161. package/dist/ui/components/CommandPanel.d.ts +0 -15
  162. package/dist/ui/components/CommandPanel.js +0 -80
  163. package/dist/ui/components/DiffViewer.d.ts +0 -11
  164. package/dist/ui/components/DiffViewer.js +0 -178
  165. package/dist/ui/components/FileList.d.ts +0 -15
  166. package/dist/ui/components/FileList.js +0 -360
  167. package/dist/ui/components/FileRollbackConfirmation.d.ts +0 -8
  168. package/dist/ui/components/FileRollbackConfirmation.js +0 -108
  169. package/dist/ui/components/HelpPanel.d.ts +0 -2
  170. package/dist/ui/components/HelpPanel.js +0 -67
  171. package/dist/ui/components/MCPInfoPanel.d.ts +0 -2
  172. package/dist/ui/components/MCPInfoPanel.js +0 -108
  173. package/dist/ui/components/MCPInfoScreen.d.ts +0 -7
  174. package/dist/ui/components/MCPInfoScreen.js +0 -115
  175. package/dist/ui/components/MarkdownRenderer.d.ts +0 -6
  176. package/dist/ui/components/MarkdownRenderer.js +0 -70
  177. package/dist/ui/components/Menu.d.ts +0 -17
  178. package/dist/ui/components/Menu.js +0 -88
  179. package/dist/ui/components/MessageList.d.ts +0 -56
  180. package/dist/ui/components/MessageList.js +0 -97
  181. package/dist/ui/components/PendingMessages.d.ts +0 -13
  182. package/dist/ui/components/PendingMessages.js +0 -29
  183. package/dist/ui/components/PendingToolCalls.d.ts +0 -11
  184. package/dist/ui/components/PendingToolCalls.js +0 -35
  185. package/dist/ui/components/ScrollableSelectInput.d.ts +0 -29
  186. package/dist/ui/components/ScrollableSelectInput.js +0 -157
  187. package/dist/ui/components/SessionListPanel.d.ts +0 -7
  188. package/dist/ui/components/SessionListPanel.js +0 -175
  189. package/dist/ui/components/SessionListScreen.d.ts +0 -7
  190. package/dist/ui/components/SessionListScreen.js +0 -217
  191. package/dist/ui/components/SessionListScreenWrapper.d.ts +0 -7
  192. package/dist/ui/components/SessionListScreenWrapper.js +0 -14
  193. package/dist/ui/components/ShimmerText.d.ts +0 -9
  194. package/dist/ui/components/ShimmerText.js +0 -30
  195. package/dist/ui/components/TodoPickerPanel.d.ts +0 -14
  196. package/dist/ui/components/TodoPickerPanel.js +0 -119
  197. package/dist/ui/components/TodoTree.d.ts +0 -15
  198. package/dist/ui/components/TodoTree.js +0 -60
  199. package/dist/ui/components/ToolConfirmation.d.ts +0 -21
  200. package/dist/ui/components/ToolConfirmation.js +0 -204
  201. package/dist/ui/components/ToolResultPreview.d.ts +0 -13
  202. package/dist/ui/components/ToolResultPreview.js +0 -337
  203. package/dist/ui/components/UsagePanel.d.ts +0 -2
  204. package/dist/ui/components/UsagePanel.js +0 -394
  205. package/dist/ui/contexts/ThemeContext.d.ts +0 -13
  206. package/dist/ui/contexts/ThemeContext.js +0 -28
  207. package/dist/ui/pages/ChatScreen.d.ts +0 -6
  208. package/dist/ui/pages/ChatScreen.js +0 -1519
  209. package/dist/ui/pages/CodeBaseConfigScreen.d.ts +0 -8
  210. package/dist/ui/pages/CodeBaseConfigScreen.js +0 -350
  211. package/dist/ui/pages/ConfigScreen.d.ts +0 -8
  212. package/dist/ui/pages/ConfigScreen.js +0 -1101
  213. package/dist/ui/pages/CustomHeadersScreen.d.ts +0 -6
  214. package/dist/ui/pages/CustomHeadersScreen.js +0 -502
  215. package/dist/ui/pages/HeadlessModeScreen.d.ts +0 -7
  216. package/dist/ui/pages/HeadlessModeScreen.js +0 -381
  217. package/dist/ui/pages/LanguageSettingsScreen.d.ts +0 -7
  218. package/dist/ui/pages/LanguageSettingsScreen.js +0 -91
  219. package/dist/ui/pages/MCPConfigScreen.d.ts +0 -6
  220. package/dist/ui/pages/MCPConfigScreen.js +0 -55
  221. package/dist/ui/pages/ProxyConfigScreen.d.ts +0 -8
  222. package/dist/ui/pages/ProxyConfigScreen.js +0 -149
  223. package/dist/ui/pages/SensitiveCommandConfigScreen.d.ts +0 -7
  224. package/dist/ui/pages/SensitiveCommandConfigScreen.js +0 -271
  225. package/dist/ui/pages/SubAgentConfigScreen.d.ts +0 -9
  226. package/dist/ui/pages/SubAgentConfigScreen.js +0 -435
  227. package/dist/ui/pages/SubAgentListScreen.d.ts +0 -9
  228. package/dist/ui/pages/SubAgentListScreen.js +0 -131
  229. package/dist/ui/pages/SystemPromptConfigScreen.d.ts +0 -6
  230. package/dist/ui/pages/SystemPromptConfigScreen.js +0 -326
  231. package/dist/ui/pages/ThemeSettingsScreen.d.ts +0 -7
  232. package/dist/ui/pages/ThemeSettingsScreen.js +0 -106
  233. package/dist/ui/pages/WelcomeScreen.d.ts +0 -7
  234. package/dist/ui/pages/WelcomeScreen.js +0 -217
  235. package/dist/ui/themes/index.d.ts +0 -23
  236. package/dist/ui/themes/index.js +0 -140
  237. package/dist/utils/apiConfig.d.ts +0 -126
  238. package/dist/utils/apiConfig.js +0 -423
  239. package/dist/utils/autoCompress.d.ts +0 -15
  240. package/dist/utils/autoCompress.js +0 -24
  241. package/dist/utils/chatExporter.d.ts +0 -9
  242. package/dist/utils/chatExporter.js +0 -118
  243. package/dist/utils/checkpointManager.d.ts +0 -74
  244. package/dist/utils/checkpointManager.js +0 -181
  245. package/dist/utils/codebaseConfig.d.ts +0 -16
  246. package/dist/utils/codebaseConfig.js +0 -67
  247. package/dist/utils/codebaseDatabase.d.ts +0 -102
  248. package/dist/utils/codebaseDatabase.js +0 -333
  249. package/dist/utils/codebaseSearchEvents.d.ts +0 -16
  250. package/dist/utils/codebaseSearchEvents.js +0 -13
  251. package/dist/utils/commandExecutor.d.ts +0 -13
  252. package/dist/utils/commandExecutor.js +0 -26
  253. package/dist/utils/commands/agent.d.ts +0 -2
  254. package/dist/utils/commands/agent.js +0 -12
  255. package/dist/utils/commands/clear.d.ts +0 -2
  256. package/dist/utils/commands/clear.js +0 -12
  257. package/dist/utils/commands/compact.d.ts +0 -2
  258. package/dist/utils/commands/compact.js +0 -12
  259. package/dist/utils/commands/export.d.ts +0 -2
  260. package/dist/utils/commands/export.js +0 -12
  261. package/dist/utils/commands/help.d.ts +0 -2
  262. package/dist/utils/commands/help.js +0 -11
  263. package/dist/utils/commands/home.d.ts +0 -2
  264. package/dist/utils/commands/home.js +0 -34
  265. package/dist/utils/commands/ide.d.ts +0 -2
  266. package/dist/utils/commands/ide.js +0 -32
  267. package/dist/utils/commands/init.d.ts +0 -2
  268. package/dist/utils/commands/init.js +0 -93
  269. package/dist/utils/commands/mcp.d.ts +0 -2
  270. package/dist/utils/commands/mcp.js +0 -12
  271. package/dist/utils/commands/resume.d.ts +0 -2
  272. package/dist/utils/commands/resume.js +0 -12
  273. package/dist/utils/commands/review.d.ts +0 -2
  274. package/dist/utils/commands/review.js +0 -81
  275. package/dist/utils/commands/role.d.ts +0 -2
  276. package/dist/utils/commands/role.js +0 -37
  277. package/dist/utils/commands/todoPicker.d.ts +0 -2
  278. package/dist/utils/commands/todoPicker.js +0 -12
  279. package/dist/utils/commands/usage.d.ts +0 -2
  280. package/dist/utils/commands/usage.js +0 -12
  281. package/dist/utils/commands/yolo.d.ts +0 -2
  282. package/dist/utils/commands/yolo.js +0 -12
  283. package/dist/utils/configManager.d.ts +0 -45
  284. package/dist/utils/configManager.js +0 -303
  285. package/dist/utils/contextCompressor.d.ts +0 -16
  286. package/dist/utils/contextCompressor.js +0 -334
  287. package/dist/utils/devMode.d.ts +0 -13
  288. package/dist/utils/devMode.js +0 -54
  289. package/dist/utils/escapeHandler.d.ts +0 -79
  290. package/dist/utils/escapeHandler.js +0 -153
  291. package/dist/utils/fileDialog.d.ts +0 -9
  292. package/dist/utils/fileDialog.js +0 -74
  293. package/dist/utils/fileUtils.d.ts +0 -40
  294. package/dist/utils/fileUtils.js +0 -185
  295. package/dist/utils/historyManager.d.ts +0 -45
  296. package/dist/utils/historyManager.js +0 -159
  297. package/dist/utils/incrementalSnapshot.d.ts +0 -109
  298. package/dist/utils/incrementalSnapshot.js +0 -383
  299. package/dist/utils/index.d.ts +0 -11
  300. package/dist/utils/index.js +0 -18
  301. package/dist/utils/languageConfig.d.ts +0 -21
  302. package/dist/utils/languageConfig.js +0 -61
  303. package/dist/utils/logger.d.ts +0 -37
  304. package/dist/utils/logger.js +0 -122
  305. package/dist/utils/mcpToolsManager.d.ts +0 -52
  306. package/dist/utils/mcpToolsManager.js +0 -878
  307. package/dist/utils/messageFormatter.d.ts +0 -12
  308. package/dist/utils/messageFormatter.js +0 -115
  309. package/dist/utils/notebookManager.d.ts +0 -59
  310. package/dist/utils/notebookManager.js +0 -213
  311. package/dist/utils/patch-highlight.d.ts +0 -5
  312. package/dist/utils/patch-highlight.js +0 -23
  313. package/dist/utils/processManager.d.ts +0 -27
  314. package/dist/utils/processManager.js +0 -75
  315. package/dist/utils/proxyUtils.d.ts +0 -15
  316. package/dist/utils/proxyUtils.js +0 -50
  317. package/dist/utils/resourceMonitor.d.ts +0 -65
  318. package/dist/utils/resourceMonitor.js +0 -175
  319. package/dist/utils/retryUtils.d.ts +0 -49
  320. package/dist/utils/retryUtils.js +0 -303
  321. package/dist/utils/sensitiveCommandManager.d.ts +0 -53
  322. package/dist/utils/sensitiveCommandManager.js +0 -308
  323. package/dist/utils/sessionConverter.d.ts +0 -7
  324. package/dist/utils/sessionConverter.js +0 -306
  325. package/dist/utils/sessionManager.d.ts +0 -53
  326. package/dist/utils/sessionManager.js +0 -371
  327. package/dist/utils/subAgentConfig.d.ts +0 -50
  328. package/dist/utils/subAgentConfig.js +0 -221
  329. package/dist/utils/subAgentExecutor.d.ts +0 -40
  330. package/dist/utils/subAgentExecutor.js +0 -434
  331. package/dist/utils/terminal.d.ts +0 -5
  332. package/dist/utils/terminal.js +0 -13
  333. package/dist/utils/textBuffer.d.ts +0 -99
  334. package/dist/utils/textBuffer.js +0 -547
  335. package/dist/utils/textUtils.d.ts +0 -37
  336. package/dist/utils/textUtils.js +0 -102
  337. package/dist/utils/themeConfig.d.ts +0 -21
  338. package/dist/utils/themeConfig.js +0 -61
  339. package/dist/utils/todoPreprocessor.d.ts +0 -5
  340. package/dist/utils/todoPreprocessor.js +0 -18
  341. package/dist/utils/todoScanner.d.ts +0 -8
  342. package/dist/utils/todoScanner.js +0 -148
  343. package/dist/utils/toolDisplayConfig.d.ts +0 -16
  344. package/dist/utils/toolDisplayConfig.js +0 -47
  345. package/dist/utils/toolExecutor.d.ts +0 -37
  346. package/dist/utils/toolExecutor.js +0 -224
  347. package/dist/utils/usageLogger.d.ts +0 -11
  348. package/dist/utils/usageLogger.js +0 -114
  349. package/dist/utils/vscodeConnection.d.ts +0 -76
  350. package/dist/utils/vscodeConnection.js +0 -430
  351. package/dist/utils/workspaceSnapshot.d.ts +0 -63
  352. package/dist/utils/workspaceSnapshot.js +0 -300
@@ -1,175 +0,0 @@
1
- /**
2
- * Resource Monitor - Track memory usage and potential leaks
3
- */
4
- import { logger } from './logger.js';
5
- class ResourceMonitor {
6
- constructor() {
7
- Object.defineProperty(this, "stats", {
8
- enumerable: true,
9
- configurable: true,
10
- writable: true,
11
- value: []
12
- });
13
- Object.defineProperty(this, "maxStatsHistory", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: 100
18
- });
19
- Object.defineProperty(this, "activeEncoders", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: 0
24
- });
25
- Object.defineProperty(this, "activeMCPConnections", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: 0
30
- });
31
- Object.defineProperty(this, "monitoringInterval", {
32
- enumerable: true,
33
- configurable: true,
34
- writable: true,
35
- value: null
36
- });
37
- }
38
- /**
39
- * Start monitoring resources
40
- */
41
- startMonitoring(intervalMs = 30000) {
42
- if (this.monitoringInterval) {
43
- return; // Already monitoring
44
- }
45
- this.monitoringInterval = setInterval(() => {
46
- this.collectStats();
47
- }, intervalMs);
48
- logger.info('Resource monitoring started');
49
- }
50
- /**
51
- * Stop monitoring resources
52
- */
53
- stopMonitoring() {
54
- if (this.monitoringInterval) {
55
- clearInterval(this.monitoringInterval);
56
- this.monitoringInterval = null;
57
- logger.info('Resource monitoring stopped');
58
- }
59
- }
60
- /**
61
- * Collect current resource stats
62
- */
63
- collectStats() {
64
- const stats = {
65
- timestamp: Date.now(),
66
- memoryUsage: process.memoryUsage(),
67
- activeEncoders: this.activeEncoders,
68
- activeMCPConnections: this.activeMCPConnections,
69
- };
70
- this.stats.push(stats);
71
- // Keep only recent history
72
- if (this.stats.length > this.maxStatsHistory) {
73
- this.stats.shift();
74
- }
75
- // Log warning if memory usage is high
76
- const heapUsedMB = stats.memoryUsage.heapUsed / 1024 / 1024;
77
- if (heapUsedMB > 500) {
78
- logger.warn(`High memory usage detected: ${heapUsedMB.toFixed(2)} MB heap used`);
79
- }
80
- // Log debug info periodically (every 5 minutes)
81
- if (this.stats.length % 10 === 0) {
82
- logger.info(`Resource stats: Heap ${heapUsedMB.toFixed(2)} MB, Encoders: ${this.activeEncoders}, MCP: ${this.activeMCPConnections}`);
83
- }
84
- }
85
- /**
86
- * Track encoder creation
87
- */
88
- trackEncoderCreated() {
89
- this.activeEncoders++;
90
- logger.info(`Encoder created (total: ${this.activeEncoders})`);
91
- }
92
- /**
93
- * Track encoder freed
94
- */
95
- trackEncoderFreed() {
96
- this.activeEncoders--;
97
- if (this.activeEncoders < 0) {
98
- logger.warn('Encoder count went negative - possible double-free');
99
- this.activeEncoders = 0;
100
- }
101
- logger.info(`Encoder freed (remaining: ${this.activeEncoders})`);
102
- }
103
- /**
104
- * Track MCP connection opened
105
- */
106
- trackMCPConnectionOpened(serviceName) {
107
- this.activeMCPConnections++;
108
- logger.info(`MCP connection opened: ${serviceName} (total: ${this.activeMCPConnections})`);
109
- }
110
- /**
111
- * Track MCP connection closed
112
- */
113
- trackMCPConnectionClosed(serviceName) {
114
- this.activeMCPConnections--;
115
- if (this.activeMCPConnections < 0) {
116
- logger.warn('MCP connection count went negative - possible double-close');
117
- this.activeMCPConnections = 0;
118
- }
119
- logger.info(`MCP connection closed: ${serviceName} (remaining: ${this.activeMCPConnections})`);
120
- }
121
- /**
122
- * Get current stats
123
- */
124
- getCurrentStats() {
125
- return this.stats.length > 0 ? this.stats[this.stats.length - 1] : null;
126
- }
127
- /**
128
- * Get stats history
129
- */
130
- getStatsHistory() {
131
- return [...this.stats];
132
- }
133
- /**
134
- * Check if there are potential memory leaks
135
- */
136
- checkForLeaks() {
137
- const reasons = [];
138
- // Check encoder leak
139
- if (this.activeEncoders > 3) {
140
- reasons.push(`High encoder count: ${this.activeEncoders} (expected <= 3)`);
141
- }
142
- // Check MCP connection leak
143
- if (this.activeMCPConnections > 5) {
144
- reasons.push(`High MCP connection count: ${this.activeMCPConnections} (expected <= 5)`);
145
- }
146
- // Check memory growth
147
- if (this.stats.length >= 10) {
148
- const recent = this.stats.slice(-10);
149
- const first = recent[0];
150
- const last = recent[recent.length - 1];
151
- const growthMB = (last.memoryUsage.heapUsed - first.memoryUsage.heapUsed) / 1024 / 1024;
152
- if (growthMB > 100) {
153
- reasons.push(`Memory grew by ${growthMB.toFixed(2)} MB in last 10 samples`);
154
- }
155
- }
156
- return {
157
- hasLeak: reasons.length > 0,
158
- reasons,
159
- };
160
- }
161
- /**
162
- * Force garbage collection if available
163
- */
164
- forceGC() {
165
- if (global.gc) {
166
- logger.info('Forcing garbage collection');
167
- global.gc();
168
- }
169
- else {
170
- logger.warn('GC not available - run with --expose-gc flag for manual GC');
171
- }
172
- }
173
- }
174
- // Singleton instance
175
- export const resourceMonitor = new ResourceMonitor();
@@ -1,49 +0,0 @@
1
- /**
2
- * 重试工具函数
3
- * 提供统一的重试机制用于所有 AI 请求
4
- * - 支持5次重试
5
- * - 延时递增策略 (1s, 2s, 4s, 8s, 16s)
6
- * - 支持 AbortSignal 中断
7
- */
8
- export interface RetryOptions {
9
- maxRetries?: number;
10
- baseDelay?: number;
11
- onRetry?: (error: Error, attempt: number, nextDelay: number) => void;
12
- abortSignal?: AbortSignal;
13
- }
14
- /**
15
- * 包装异步函数,提供重试机制
16
- */
17
- export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
18
- /**
19
- * 包装异步生成器函数,提供重试机制
20
- * 注意:如果生成器已经开始产生数据,则不会重试
21
- */
22
- export declare function withRetryGenerator<T>(fn: () => AsyncGenerator<T, void, unknown>, options?: RetryOptions): AsyncGenerator<T, void, unknown>;
23
- /**
24
- * JSON 解析结果
25
- */
26
- export interface JsonParseResult<T = any> {
27
- success: boolean;
28
- data?: T;
29
- error?: Error;
30
- wasFixed?: boolean;
31
- originalJson?: string;
32
- fixedJson?: string;
33
- }
34
- /**
35
- * 尝试解析 JSON,如果失败则尝试修复常见的 JSON 错误
36
- * @param jsonString - 要解析的 JSON 字符串
37
- * @param options - 配置选项
38
- * @returns 解析结果
39
- */
40
- export declare function parseJsonWithFix<T = any>(jsonString: string, options?: {
41
- /** 是否在修复成功时记录警告 */
42
- logWarning?: boolean;
43
- /** 是否在修复失败时记录错误 */
44
- logError?: boolean;
45
- /** 工具名称(用于日志) */
46
- toolName?: string;
47
- /** 失败时的回退值 */
48
- fallbackValue?: T;
49
- }): JsonParseResult<T>;
@@ -1,303 +0,0 @@
1
- /**
2
- * 重试工具函数
3
- * 提供统一的重试机制用于所有 AI 请求
4
- * - 支持5次重试
5
- * - 延时递增策略 (1s, 2s, 4s, 8s, 16s)
6
- * - 支持 AbortSignal 中断
7
- */
8
- import { logger } from './logger.js';
9
- /**
10
- * 延时函数,支持 AbortSignal 中断
11
- */
12
- async function delay(ms, abortSignal) {
13
- return new Promise((resolve, reject) => {
14
- if (abortSignal?.aborted) {
15
- reject(new Error('Aborted'));
16
- return;
17
- }
18
- const timer = setTimeout(() => {
19
- cleanup();
20
- resolve();
21
- }, ms);
22
- const abortHandler = () => {
23
- cleanup();
24
- reject(new Error('Aborted'));
25
- };
26
- const cleanup = () => {
27
- clearTimeout(timer);
28
- abortSignal?.removeEventListener('abort', abortHandler);
29
- };
30
- abortSignal?.addEventListener('abort', abortHandler);
31
- });
32
- }
33
- /**
34
- * 判断错误是否可重试
35
- */
36
- function isRetriableError(error) {
37
- const errorMessage = error.message.toLowerCase();
38
- // 网络错误
39
- if (errorMessage.includes('network') ||
40
- errorMessage.includes('econnrefused') ||
41
- errorMessage.includes('econnreset') ||
42
- errorMessage.includes('etimedout') ||
43
- errorMessage.includes('timeout')) {
44
- return true;
45
- }
46
- // Rate limit errors
47
- if (errorMessage.includes('rate limit') ||
48
- errorMessage.includes('too many requests') ||
49
- errorMessage.includes('429')) {
50
- return true;
51
- }
52
- // Server errors
53
- if (errorMessage.includes('400') ||
54
- errorMessage.includes('403') ||
55
- errorMessage.includes('405') ||
56
- errorMessage.includes('500') ||
57
- errorMessage.includes('502') ||
58
- errorMessage.includes('503') ||
59
- errorMessage.includes('504') ||
60
- errorMessage.includes('internal server error') ||
61
- errorMessage.includes('bad gateway') ||
62
- errorMessage.includes('service unavailable') ||
63
- errorMessage.includes('gateway timeout')) {
64
- return true;
65
- }
66
- // Temporary service unavailable
67
- if (errorMessage.includes('overloaded') ||
68
- errorMessage.includes('unavailable')) {
69
- return true;
70
- }
71
- // Connection terminated by server
72
- if (errorMessage.includes('terminated') ||
73
- errorMessage.includes('connection reset') ||
74
- errorMessage.includes('socket hang up')) {
75
- return true;
76
- }
77
- // JSON parsing errors from streaming (incomplete or malformed tool calls)
78
- if (errorMessage.includes('invalid tool call json') ||
79
- errorMessage.includes('incomplete tool call json')) {
80
- return true;
81
- }
82
- return false;
83
- }
84
- /**
85
- * 包装异步函数,提供重试机制
86
- */
87
- export async function withRetry(fn, options = {}) {
88
- const { maxRetries = 5, baseDelay = 1000, onRetry, abortSignal } = options;
89
- let lastError = null;
90
- let attempt = 0;
91
- while (attempt <= maxRetries) {
92
- // 检查是否已中断
93
- if (abortSignal?.aborted) {
94
- throw new Error('Request aborted');
95
- }
96
- try {
97
- // 尝试执行函数
98
- return await fn();
99
- }
100
- catch (error) {
101
- lastError = error;
102
- // 如果是 AbortError,立即退出
103
- if (lastError.name === 'AbortError' || lastError.message === 'Aborted') {
104
- throw lastError;
105
- }
106
- // 如果已达到最大重试次数,抛出错误
107
- if (attempt >= maxRetries) {
108
- throw lastError;
109
- }
110
- // 检查错误是否可重试
111
- if (!isRetriableError(lastError)) {
112
- throw lastError;
113
- }
114
- // 计算下次重试的延时(指数退避:1s, 2s, 4s, 8s, 16s)
115
- const nextDelay = baseDelay * Math.pow(2, attempt);
116
- // 调用重试回调
117
- if (onRetry) {
118
- onRetry(lastError, attempt + 1, nextDelay);
119
- }
120
- // 等待后重试
121
- try {
122
- await delay(nextDelay, abortSignal);
123
- }
124
- catch (delayError) {
125
- // 延时过程中被中断
126
- throw new Error('Request aborted');
127
- }
128
- attempt++;
129
- }
130
- }
131
- // 不应该到达这里
132
- throw lastError || new Error('Retry failed');
133
- }
134
- /**
135
- * 包装异步生成器函数,提供重试机制
136
- * 注意:如果生成器已经开始产生数据,则不会重试
137
- */
138
- export async function* withRetryGenerator(fn, options = {}) {
139
- const { maxRetries = 5, baseDelay = 1000, onRetry, abortSignal } = options;
140
- let lastError = null;
141
- let attempt = 0;
142
- let hasYielded = false; // 标记是否已经产生过数据
143
- while (attempt <= maxRetries) {
144
- // 检查是否已中断
145
- if (abortSignal?.aborted) {
146
- throw new Error('Request aborted');
147
- }
148
- try {
149
- // 尝试执行生成器
150
- const generator = fn();
151
- for await (const chunk of generator) {
152
- hasYielded = true; // 标记已产生数据
153
- yield chunk;
154
- }
155
- // 成功完成
156
- return;
157
- }
158
- catch (error) {
159
- lastError = error;
160
- // 如果是 AbortError,立即退出
161
- if (lastError.name === 'AbortError' || lastError.message === 'Aborted') {
162
- throw lastError;
163
- }
164
- // 如果已经产生过数据,不再重试(避免重复数据)
165
- if (hasYielded) {
166
- throw lastError;
167
- }
168
- // 如果已达到最大重试次数,抛出错误
169
- if (attempt >= maxRetries) {
170
- throw lastError;
171
- }
172
- // 检查错误是否可重试
173
- if (!isRetriableError(lastError)) {
174
- throw lastError;
175
- }
176
- // 计算下次重试的延时(指数退避:1s, 2s, 4s, 8s, 16s)
177
- const nextDelay = baseDelay * Math.pow(2, attempt);
178
- // 调用重试回调
179
- if (onRetry) {
180
- onRetry(lastError, attempt + 1, nextDelay);
181
- }
182
- // 等待后重试
183
- try {
184
- await delay(nextDelay, abortSignal);
185
- }
186
- catch (delayError) {
187
- // 延时过程中被中断
188
- throw new Error('Request aborted');
189
- }
190
- attempt++;
191
- }
192
- }
193
- // 不应该到达这里
194
- throw lastError || new Error('Retry failed');
195
- }
196
- /**
197
- * 尝试解析 JSON,如果失败则尝试修复常见的 JSON 错误
198
- * @param jsonString - 要解析的 JSON 字符串
199
- * @param options - 配置选项
200
- * @returns 解析结果
201
- */
202
- export function parseJsonWithFix(jsonString, options = {}) {
203
- const { logWarning = true, logError = true, toolName = 'unknown', fallbackValue, } = options;
204
- // 首先尝试直接解析
205
- try {
206
- const data = JSON.parse(jsonString);
207
- return { success: true, data };
208
- }
209
- catch (originalError) {
210
- // 解析失败,尝试修复
211
- let fixedJson = jsonString;
212
- let wasFixed = false;
213
- // Fix 1: 移除格式错误的模式,如 "endLine":685 ": ""
214
- // 处理值后面有额外冒号和引号的情况
215
- const malformedPattern = /(\"[\w]+\"\s*:\s*[^,}\]]+)\s*\":\s*\"[^\"]*\"/g;
216
- if (malformedPattern.test(fixedJson)) {
217
- fixedJson = fixedJson.replace(malformedPattern, '$1');
218
- wasFixed = true;
219
- }
220
- // Fix 2: 移除闭合括号前的尾随逗号
221
- if (/,(\s*[}\]])/.test(fixedJson)) {
222
- fixedJson = fixedJson.replace(/,(\s*[}\]])/g, '$1');
223
- wasFixed = true;
224
- }
225
- // Fix 3: 修复属性名缺少引号的问题
226
- if (/{\s*\w+\s*:/.test(fixedJson)) {
227
- fixedJson = fixedJson.replace(/{\s*(\w+)\s*:/g, '{"$1":');
228
- fixedJson = fixedJson.replace(/,\s*(\w+)\s*:/g, ',"$1":');
229
- wasFixed = true;
230
- }
231
- // Fix 4: 添加缺失的闭合括号
232
- const openBraces = (fixedJson.match(/{/g) || []).length;
233
- const closeBraces = (fixedJson.match(/}/g) || []).length;
234
- const openBrackets = (fixedJson.match(/\[/g) || []).length;
235
- const closeBrackets = (fixedJson.match(/\]/g) || []).length;
236
- if (openBraces > closeBraces) {
237
- fixedJson += '}'.repeat(openBraces - closeBraces);
238
- wasFixed = true;
239
- }
240
- if (openBrackets > closeBrackets) {
241
- fixedJson += ']'.repeat(openBrackets - closeBrackets);
242
- wasFixed = true;
243
- }
244
- // Fix 5: 移除多余的闭合括号
245
- if (closeBraces > openBraces) {
246
- const extraBraces = closeBraces - openBraces;
247
- for (let i = 0; i < extraBraces; i++) {
248
- fixedJson = fixedJson.replace(/}([^}]*)$/, '$1');
249
- }
250
- wasFixed = true;
251
- }
252
- if (closeBrackets > openBrackets) {
253
- const extraBrackets = closeBrackets - openBrackets;
254
- for (let i = 0; i < extraBrackets; i++) {
255
- fixedJson = fixedJson.replace(/\]([^\]]*)$/, '$1');
256
- }
257
- wasFixed = true;
258
- }
259
- // 尝试解析修复后的 JSON
260
- try {
261
- const data = JSON.parse(fixedJson);
262
- if (wasFixed && logWarning) {
263
- logger.warn(`Warning: Fixed malformed JSON for ${toolName}`);
264
- }
265
- return {
266
- success: true,
267
- data,
268
- wasFixed,
269
- originalJson: jsonString,
270
- fixedJson,
271
- };
272
- }
273
- catch (fixError) {
274
- // 修复失败
275
- if (logError) {
276
- logger.error(`Error: Failed to parse JSON for ${toolName}`);
277
- logger.error(`Original: ${jsonString}`);
278
- if (wasFixed) {
279
- logger.error(`After fixes: ${fixedJson}`);
280
- }
281
- logger.error(`Parse error: ${fixError instanceof Error ? fixError.message : 'Unknown'}`);
282
- }
283
- // 如果提供了回退值,使用回退值
284
- if (fallbackValue !== undefined) {
285
- return {
286
- success: false,
287
- data: fallbackValue,
288
- error: fixError instanceof Error ? fixError : new Error(String(fixError)),
289
- wasFixed,
290
- originalJson: jsonString,
291
- fixedJson: wasFixed ? fixedJson : undefined,
292
- };
293
- }
294
- return {
295
- success: false,
296
- error: fixError instanceof Error ? fixError : new Error(String(fixError)),
297
- wasFixed,
298
- originalJson: jsonString,
299
- fixedJson: wasFixed ? fixedJson : undefined,
300
- };
301
- }
302
- }
303
- }
@@ -1,53 +0,0 @@
1
- export interface SensitiveCommand {
2
- id: string;
3
- pattern: string;
4
- description: string;
5
- enabled: boolean;
6
- isPreset: boolean;
7
- }
8
- export interface SensitiveCommandsConfig {
9
- commands: SensitiveCommand[];
10
- }
11
- /**
12
- * 预设的常见敏感指令
13
- */
14
- export declare const PRESET_SENSITIVE_COMMANDS: SensitiveCommand[];
15
- /**
16
- * Load sensitive commands configuration
17
- */
18
- export declare function loadSensitiveCommands(): SensitiveCommandsConfig;
19
- /**
20
- * Save sensitive commands configuration
21
- */
22
- export declare function saveSensitiveCommands(config: SensitiveCommandsConfig): void;
23
- /**
24
- * Add a custom sensitive command
25
- */
26
- export declare function addSensitiveCommand(pattern: string, description: string): void;
27
- /**
28
- * Remove a sensitive command
29
- */
30
- export declare function removeSensitiveCommand(id: string): void;
31
- /**
32
- * Update a sensitive command
33
- */
34
- export declare function updateSensitiveCommand(id: string, updates: Partial<Omit<SensitiveCommand, 'id' | 'isPreset'>>): void;
35
- /**
36
- * Toggle a sensitive command enabled state
37
- */
38
- export declare function toggleSensitiveCommand(id: string): void;
39
- /**
40
- * Check if a command matches any enabled sensitive pattern
41
- */
42
- export declare function isSensitiveCommand(command: string): {
43
- isSensitive: boolean;
44
- matchedCommand?: SensitiveCommand;
45
- };
46
- /**
47
- * Get all sensitive commands
48
- */
49
- export declare function getAllSensitiveCommands(): SensitiveCommand[];
50
- /**
51
- * Reset to default preset commands
52
- */
53
- export declare function resetToDefaults(): void;