centaurus-cli 3.0.1 → 3.1.0

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 (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5158
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1526 -1512
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +601 -572
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -406
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3263
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -514
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -204
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"grep-search.js","sourceRoot":"","sources":["../../src/tools/grep-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/tools/grep-search.ts"],"sourcesContent":["import { Tool, ToolExecutionContext } from './types.js';\r\nimport { spawn, ChildProcess } from 'child_process';\r\nimport { execFile } from 'child_process';\r\nimport { promisify } from 'util';\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\nimport * as readline from 'readline';\r\nimport { ContextManager } from '../context/context-manager.js';\r\n\r\nconst execFileAsync = promisify(execFile);\r\n\r\nfunction hasUnescapedChar(value: string, targetChar: string): boolean {\r\n let escaped = false;\r\n for (const ch of value) {\r\n if (escaped) {\r\n escaped = false;\r\n continue;\r\n }\r\n if (ch === '\\\\') {\r\n escaped = true;\r\n continue;\r\n }\r\n if (ch === targetChar) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction looksLikeRegexPattern(value: string): boolean {\r\n const query = value.trim();\r\n if (!query) {\r\n return false;\r\n }\r\n\r\n // High-confidence regex indicators.\r\n if (hasUnescapedChar(query, '|')) {\r\n return true;\r\n }\r\n if (/\\\\[dDsSwWbBAZzGQEnrtvf0(){}[\\].+*?^$|\\\\]/.test(query)) {\r\n return true;\r\n }\r\n if (query.startsWith('^') || /(^|[^\\\\])\\$$/.test(query)) {\r\n return true;\r\n }\r\n if (/(^|[^\\\\])\\[[^\\]]+\\]/.test(query)) {\r\n return true;\r\n }\r\n if (/(^|[^\\\\])\\((\\?:|\\?=|\\?!|\\?<=|\\?<!)/.test(query)) {\r\n return true;\r\n }\r\n if (/(^|[^\\\\])\\{[0-9]+(,[0-9]*)?\\}/.test(query)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction usesRegexFeaturesUnsupportedByGrep(value: string): boolean {\r\n const query = value.trim();\r\n if (!query) {\r\n return false;\r\n }\r\n\r\n // Word-boundary and backreference classes are not portable in grep -E.\r\n if (/\\\\[bBkK]/.test(query)) {\r\n return true;\r\n }\r\n // Unicode property classes are not supported by grep -E.\r\n if (/\\\\[pPkK]\\{/.test(query)) {\r\n return true;\r\n }\r\n // Lookaround, non-capturing groups, and named captures are not supported by grep -E.\r\n if (/\\(\\?(?::|=|!|<=|<!|<[^>]+>)/.test(query)) {\r\n return true;\r\n }\r\n // Lazy quantifiers are not supported by grep -E.\r\n if (/(?:\\*\\?|\\+\\?|\\?\\?|\\{\\d+(?:,\\d*)?\\}\\?)/.test(query)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction normalizeRegexForGrep(pattern: string): string {\r\n // Translate common JS/PCRE shorthand classes to POSIX-compatible ERE classes.\r\n // This keeps behavior consistent across grep implementations (GNU/BSD/BusyBox).\r\n let out = '';\r\n for (let i = 0; i < pattern.length; i++) {\r\n const ch = pattern[i];\r\n if (ch !== '\\\\') {\r\n out += ch;\r\n continue;\r\n }\r\n\r\n if (i + 1 >= pattern.length) {\r\n out += '\\\\';\r\n break;\r\n }\r\n\r\n const next = pattern[i + 1];\r\n switch (next) {\r\n case 'd':\r\n out += '[0-9]';\r\n break;\r\n case 'D':\r\n out += '[^0-9]';\r\n break;\r\n case 's':\r\n out += '[[:space:]]';\r\n break;\r\n case 'S':\r\n out += '[^[:space:]]';\r\n break;\r\n case 'w':\r\n out += '[[:alnum:]_]';\r\n break;\r\n case 'W':\r\n out += '[^[:alnum:]_]';\r\n break;\r\n default:\r\n out += `\\\\${next}`;\r\n break;\r\n }\r\n i++;\r\n }\r\n\r\n return out;\r\n}\r\n\r\nfunction escapePowerShellSingleQuoted(value: string): string {\r\n return value.replace(/'/g, \"''\");\r\n}\r\n\r\n// ============================================================================\r\n// INTERFACES\r\n// ============================================================================\r\n\r\nexport interface GrepSearchParams {\r\n Query: string;\r\n SearchPath: string;\r\n Includes?: string[];\r\n CaseInsensitive?: boolean;\r\n IsRegex?: boolean;\r\n MatchPerLine?: boolean;\r\n MaxResults?: number;\r\n}\r\n\r\n/**\r\n * Context line with explicit line number tracking\r\n */\r\nexport interface ContextLine {\r\n lineNumber: number;\r\n text: string;\r\n}\r\n\r\n/**\r\n * Enhanced match with column/offset information\r\n */\r\nexport interface GrepMatch {\r\n file: string;\r\n line: number;\r\n column?: number;\r\n byteOffset?: number;\r\n match: string;\r\n matchIndices?: [number, number][];\r\n contextBefore: ContextLine[];\r\n contextAfter: ContextLine[];\r\n}\r\n\r\n/**\r\n * Backend type - now includes powershell and nodejs\r\n */\r\nexport type GrepBackend = 'ripgrep' | 'grep' | 'powershell' | 'findstr' | 'nodejs' | 'remote';\r\n\r\n/**\r\n * Reason for result truncation\r\n */\r\nexport type TruncationReason = 'max_matches' | 'backend_limit' | 'timeout';\r\n\r\n/**\r\n * Search metadata for debugging and transparency\r\n */\r\nexport interface GrepSearchMetadata {\r\n backend: GrepBackend;\r\n searchDurationMs: number;\r\n filesSearched?: number;\r\n queriesExecuted: string[];\r\n matchesPerQuery: Record<string, number>;\r\n encodingFallback?: boolean;\r\n}\r\n\r\n/**\r\n * Enhanced search result with structured data and metadata\r\n */\r\nexport interface GrepSearchResult {\r\n matches: GrepMatch[];\r\n totalMatches: number;\r\n uniqueMatchesCount: number;\r\n truncated: boolean;\r\n truncationReason?: TruncationReason;\r\n searchPattern: string;\r\n metadata: GrepSearchMetadata;\r\n formattedOutput: string;\r\n}\r\n\r\n/**\r\n * Internal result before formatting\r\n */\r\ninterface InternalSearchResult {\r\n matches: GrepMatch[];\r\n totalMatches: number;\r\n truncated: boolean;\r\n truncationReason?: TruncationReason;\r\n searchPattern: string;\r\n filesSearched?: number;\r\n encodingFallback?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// GREP SEARCH TOOL CLASS - CROSS-PLATFORM ROBUST IMPLEMENTATION\r\n// ============================================================================\r\n\r\n/**\r\n * GrepSearchTool - Cross-platform text search with multiple backends\r\n * \r\n * Backend priority:\r\n * 1. ripgrep (fastest, cross-platform)\r\n * 2. grep (Linux/macOS native)\r\n * 3. PowerShell Select-String (Windows, good Unicode support)\r\n * 4. Pure Node.js (universal fallback, no dependencies)\r\n * \r\n * Features:\r\n * - Streaming output to handle large repos\r\n * - Early abort when MAX_MATCHES reached\r\n * - Proper encoding handling (UTF-8 with fallback)\r\n * - CRLF normalization\r\n * - Windows path support (drive letters, UNC)\r\n */\r\nexport class GrepSearchTool {\r\n public static readonly DEFAULT_MAX_MATCHES = 50;\r\n private static readonly MAX_LINE_LENGTH = 300;\r\n private static readonly CONTEXT_LINES = 2;\r\n private static readonly SEARCH_TIMEOUT = 30000;\r\n\r\n // Cache tool availability to avoid repeated checks\r\n private static toolCache: Map<string, boolean> = new Map();\r\n\r\n /**\r\n * Check if a command is available\r\n */\r\n private async hasCommand(cmd: string, args: string[] = ['--version']): Promise<boolean> {\r\n const cacheKey = `${cmd}:${args.join(',')}`;\r\n if (GrepSearchTool.toolCache.has(cacheKey)) {\r\n return GrepSearchTool.toolCache.get(cacheKey)!;\r\n }\r\n\r\n try {\r\n await Promise.race([\r\n execFileAsync(cmd, args, { timeout: 2000 }),\r\n new Promise<never>((_, reject) => setTimeout(() => reject(new Error('Timeout')), 2000))\r\n ]);\r\n GrepSearchTool.toolCache.set(cacheKey, true);\r\n return true;\r\n } catch {\r\n GrepSearchTool.toolCache.set(cacheKey, false);\r\n return false;\r\n }\r\n }\r\n\r\n private async hasRipgrep(): Promise<boolean> {\r\n return this.hasCommand('rg', ['--version']);\r\n }\r\n\r\n private async hasGrep(): Promise<boolean> {\r\n return this.hasCommand('grep', ['--version']);\r\n }\r\n\r\n private async hasPowerShell(): Promise<boolean> {\r\n // Try pwsh first (PowerShell Core), then powershell (Windows PowerShell)\r\n if (await this.hasCommand('pwsh', ['-Version'])) return true;\r\n if (process.platform === 'win32') {\r\n return this.hasCommand('powershell', ['-Version']);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get the PowerShell executable name\r\n */\r\n private async getPowerShellExe(): Promise<string> {\r\n if (await this.hasCommand('pwsh', ['-Version'])) return 'pwsh';\r\n return 'powershell';\r\n }\r\n\r\n /**\r\n * Normalize file path to forward slashes\r\n */\r\n private normalizePath(filePath: string): string {\r\n return filePath.replace(/\\\\/g, '/');\r\n }\r\n\r\n /**\r\n * Truncate long lines\r\n */\r\n private truncateLine(line: string): string {\r\n if (line.length <= GrepSearchTool.MAX_LINE_LENGTH) {\r\n return line;\r\n }\r\n return line.substring(0, GrepSearchTool.MAX_LINE_LENGTH) + ' [truncated]';\r\n }\r\n\r\n /**\r\n * Normalize line endings (CRLF -> LF)\r\n */\r\n private normalizeLineEndings(text: string): string {\r\n return text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\r\n }\r\n\r\n /**\r\n * Parse file:line:content format robustly, handling Windows paths\r\n * E.g., \"C:\\foo\\bar.ts:42:content\" or \"/foo/bar.ts:42:content\"\r\n */\r\n private parseGrepLine(line: string): { file: string; lineNum: number; content: string } | null {\r\n // Windows absolute path: C:\\path\\to\\file:line:content\r\n const m1 = line.match(/^([A-Za-z]:\\\\.+?):(\\d+):(.*)$/);\r\n if (m1) return { file: m1[1], lineNum: +m1[2], content: m1[3] };\r\n\r\n // UNC path: \\\\server\\share\\path:line:content\r\n const m2 = line.match(/^(\\\\\\\\.+?):(\\d+):(.*)$/);\r\n if (m2) return { file: m2[1], lineNum: +m2[2], content: m2[3] };\r\n\r\n // Unix / relative path: /path/to/file:line:content or path/to/file:line:content\r\n const m3 = line.match(/^(.+?):(\\d+):(.*)$/);\r\n if (m3) return { file: m3[1], lineNum: +m3[2], content: m3[3] };\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Create regex from pattern\r\n */\r\n private createSearchRegex(pattern: string, isRegex: boolean, caseInsensitive: boolean): RegExp {\r\n const flags = caseInsensitive ? 'gi' : 'g';\r\n if (isRegex) {\r\n try {\r\n return new RegExp(pattern, flags);\r\n } catch {\r\n // Invalid regex, escape and use as literal\r\n return new RegExp(this.escapeRegex(pattern), flags);\r\n }\r\n }\r\n return new RegExp(this.escapeRegex(pattern), flags);\r\n }\r\n\r\n /**\r\n * Escape regex special characters\r\n */\r\n private escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n }\r\n\r\n /**\r\n * Check if file matches include patterns\r\n */\r\n private matchesIncludesFilter(filePath: string, includes?: string[]): boolean {\r\n if (!includes || includes.length === 0) {\r\n return true;\r\n }\r\n\r\n const fileName = path.basename(filePath);\r\n const normalizedPath = this.normalizePath(filePath);\r\n\r\n for (const pattern of includes) {\r\n if (pattern.startsWith('*.')) {\r\n const ext = pattern.substring(1);\r\n if (fileName.endsWith(ext)) {\r\n return true;\r\n }\r\n } else if (pattern.includes('**')) {\r\n const ext = pattern.replace('**/', '').replace('*', '');\r\n if (fileName.endsWith(ext) || normalizedPath.includes(ext)) {\r\n return true;\r\n }\r\n } else if (fileName === pattern || normalizedPath.includes(pattern)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if file is likely binary\r\n */\r\n private async isBinaryFile(filePath: string): Promise<boolean> {\r\n try {\r\n const fd = await fs.promises.open(filePath, 'r');\r\n const buffer = Buffer.alloc(8192);\r\n const { bytesRead } = await fd.read(buffer, 0, 8192, 0);\r\n await fd.close();\r\n\r\n // Check for null bytes (common in binary files)\r\n for (let i = 0; i < bytesRead; i++) {\r\n if (buffer[i] === 0) return true;\r\n }\r\n return false;\r\n } catch {\r\n return true; // Assume binary on error\r\n }\r\n }\r\n\r\n // ========================================================================\r\n // RIPGREP BACKEND (Streaming)\r\n // ========================================================================\r\n\r\n private async searchWithRipgrepStreaming(\r\n params: GrepSearchParams,\r\n cwd: string\r\n ): Promise<InternalSearchResult> {\r\n return new Promise((resolve, reject) => {\r\n const args: string[] = [\r\n '--json',\r\n `--context=${GrepSearchTool.CONTEXT_LINES}`,\r\n ];\r\n\r\n if (params.CaseInsensitive) {\r\n args.push('--ignore-case');\r\n }\r\n\r\n if (!params.IsRegex) {\r\n args.push('--fixed-strings');\r\n }\r\n\r\n if (params.Includes && params.Includes.length > 0) {\r\n params.Includes.forEach(pattern => {\r\n args.push('--glob', pattern);\r\n });\r\n }\r\n\r\n args.push('--', params.Query, params.SearchPath);\r\n\r\n const matches: GrepMatch[] = [];\r\n let truncated = false;\r\n let currentFile: string | null = null;\r\n let contextQueue: ContextLine[] = [];\r\n let pendingMatch: GrepMatch | null = null;\r\n let contextAfterCount = 0;\r\n\r\n // RACECONDITION FIX: Guard against double-resolution\r\n let finished = false;\r\n\r\n const child = spawn('rg', args, {\r\n cwd,\r\n env: { ...process.env, LANG: 'en_US.UTF-8' }\r\n });\r\n\r\n const rl = readline.createInterface({ input: child.stdout });\r\n\r\n // Robust cleanup function\r\n const done = (result: InternalSearchResult) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n\r\n // TERMINATION FIX: Use simple kill() for Windows compatibility\r\n child.kill();\r\n rl.close();\r\n resolve(result);\r\n };\r\n\r\n const fail = (err: Error) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n child.kill();\r\n rl.close();\r\n reject(err);\r\n };\r\n\r\n const timer = setTimeout(() => {\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated: true,\r\n truncationReason: 'timeout',\r\n searchPattern: params.Query\r\n });\r\n }, GrepSearchTool.SEARCH_TIMEOUT);\r\n\r\n rl.on('line', (line) => {\r\n if (finished) return;\r\n\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n // ABORT FIX: Immediately stop and resolve\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: 'max_matches',\r\n searchPattern: params.Query\r\n });\r\n return;\r\n }\r\n\r\n try {\r\n const event = JSON.parse(line);\r\n\r\n if (event.type === 'begin' && event.data?.path?.text) {\r\n currentFile = this.normalizePath(event.data.path.text);\r\n contextQueue = [];\r\n pendingMatch = null;\r\n contextAfterCount = 0;\r\n } else if (event.type === 'context' && event.data?.lines?.text) {\r\n const ctxLine: ContextLine = {\r\n lineNumber: event.data.line_number,\r\n text: this.truncateLine(this.normalizeLineEndings(event.data.lines.text).trimEnd())\r\n };\r\n\r\n if (pendingMatch && contextAfterCount < GrepSearchTool.CONTEXT_LINES) {\r\n pendingMatch.contextAfter.push(ctxLine);\r\n contextAfterCount++;\r\n } else {\r\n contextQueue.push(ctxLine);\r\n if (contextQueue.length > GrepSearchTool.CONTEXT_LINES) {\r\n contextQueue.shift();\r\n }\r\n }\r\n } else if (event.type === 'match' && event.data) {\r\n // Finalize previous match\r\n if (pendingMatch) {\r\n matches.push(pendingMatch);\r\n }\r\n\r\n const lineText = event.data.lines?.text || '';\r\n const submatches = event.data.submatches || [];\r\n\r\n pendingMatch = {\r\n file: currentFile || this.normalizePath(event.data.path?.text || ''),\r\n line: event.data.line_number,\r\n column: submatches.length > 0 ? submatches[0].start + 1 : undefined,\r\n byteOffset: event.data.absolute_offset,\r\n match: this.truncateLine(this.normalizeLineEndings(lineText).trimEnd()),\r\n matchIndices: submatches.map((s: any) => [s.start, s.end]),\r\n contextBefore: [...contextQueue],\r\n contextAfter: []\r\n };\r\n\r\n contextQueue = [];\r\n contextAfterCount = 0;\r\n }\r\n } catch {\r\n // Ignore parse errors\r\n }\r\n });\r\n\r\n child.on('close', (code) => {\r\n if (finished) return;\r\n\r\n // Finalize last match\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n if (pendingMatch && matches.length < maxMatches) {\r\n matches.push(pendingMatch);\r\n }\r\n\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: truncated ? 'max_matches' : undefined,\r\n searchPattern: params.Query\r\n });\r\n });\r\n\r\n child.on('error', (err) => {\r\n fail(err);\r\n });\r\n });\r\n }\r\n\r\n // ========================================================================\r\n // GREP BACKEND (Streaming)\r\n // ========================================================================\r\n\r\n private async searchWithGrepStreaming(\r\n params: GrepSearchParams,\r\n cwd: string\r\n ): Promise<InternalSearchResult> {\r\n return new Promise((resolve, reject) => {\r\n const query = params.IsRegex ? normalizeRegexForGrep(params.Query) : params.Query;\r\n const args: string[] = [\r\n '-n', // line numbers\r\n '-r', // recursive\r\n `--context=${GrepSearchTool.CONTEXT_LINES}`,\r\n ];\r\n\r\n if (params.CaseInsensitive) {\r\n args.push('-i');\r\n }\r\n\r\n if (!params.IsRegex) {\r\n args.push('-F'); // fixed strings\r\n } else {\r\n args.push('-E'); // extended regex (supports |)\r\n }\r\n\r\n if (params.Includes && params.Includes.length > 0) {\r\n params.Includes.forEach(pattern => {\r\n args.push('--include', pattern);\r\n });\r\n }\r\n\r\n args.push(query, params.SearchPath);\r\n\r\n const matches: GrepMatch[] = [];\r\n let truncated = false;\r\n let finished = false;\r\n\r\n const child = spawn('grep', args, {\r\n cwd,\r\n env: { ...process.env, LANG: 'en_US.UTF-8' }\r\n });\r\n\r\n const rl = readline.createInterface({ input: child.stdout });\r\n\r\n const done = (result: InternalSearchResult) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n child.kill();\r\n rl.close();\r\n resolve(result);\r\n };\r\n\r\n const fail = (err: Error) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n child.kill();\r\n rl.close();\r\n reject(err);\r\n };\r\n\r\n const timer = setTimeout(() => {\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated: true,\r\n truncationReason: 'timeout',\r\n searchPattern: params.Query\r\n });\r\n }, GrepSearchTool.SEARCH_TIMEOUT);\r\n\r\n rl.on('line', (line) => {\r\n if (finished) return;\r\n\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: 'max_matches',\r\n searchPattern: params.Query\r\n });\r\n return;\r\n }\r\n\r\n const normalizedLine = this.normalizeLineEndings(line);\r\n\r\n // Skip separator lines\r\n if (normalizedLine === '--') return;\r\n\r\n const parsed = this.parseGrepLine(normalizedLine);\r\n if (parsed) {\r\n // For grep, we treat each line as a match (context handling is simpler)\r\n matches.push({\r\n file: this.normalizePath(parsed.file),\r\n line: parsed.lineNum,\r\n match: this.truncateLine(parsed.content),\r\n contextBefore: [],\r\n contextAfter: []\r\n });\r\n }\r\n });\r\n\r\n child.on('close', () => {\r\n if (finished) return;\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: truncated ? 'max_matches' : undefined,\r\n searchPattern: params.Query\r\n });\r\n });\r\n\r\n child.on('error', (err) => fail(err));\r\n });\r\n }\r\n\r\n // ========================================================================\r\n // POWERSHELL BACKEND (Windows)\r\n // ========================================================================\r\n\r\n private async searchWithPowerShell(\r\n params: GrepSearchParams,\r\n cwd: string\r\n ): Promise<InternalSearchResult> {\r\n const psExe = await this.getPowerShellExe();\r\n\r\n // Build the PowerShell command\r\n // Select-String supports regex by default, -SimpleMatch for literal\r\n const patternArg = escapePowerShellSingleQuoted(params.Query);\r\n const searchPath = path.resolve(cwd, params.SearchPath);\r\n const escapedSearchPath = escapePowerShellSingleQuoted(searchPath);\r\n\r\n let psCommand: string;\r\n\r\n // Check if searching a file or directory\r\n const stats = await fs.promises.stat(searchPath).catch(() => null);\r\n const isDirectory = stats?.isDirectory() ?? false;\r\n\r\n // PATH FIX: Use $_.Path instead of $_.Filename for absolute paths\r\n if (isDirectory) {\r\n // Search directory recursively\r\n const includePattern = params.Includes && params.Includes.length > 0\r\n ? params.Includes.map(p => `'${escapePowerShellSingleQuoted(p)}'`).join(',')\r\n : \"'*'\";\r\n\r\n const max = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n\r\n psCommand = params.IsRegex\r\n ? `Get-ChildItem -Path '${escapedSearchPath}' -Recurse -File -Include ${includePattern} -ErrorAction SilentlyContinue | Select-String -Pattern '${patternArg}'${params.CaseInsensitive ? '' : ' -CaseSensitive'} -Context ${GrepSearchTool.CONTEXT_LINES} | Select-Object -First ${max} | ForEach-Object { $_.Path + ':' + $_.LineNumber + ':' + $_.Line }`\r\n : `Get-ChildItem -Path '${escapedSearchPath}' -Recurse -File -Include ${includePattern} -ErrorAction SilentlyContinue | Select-String -Pattern '${patternArg}' -SimpleMatch${params.CaseInsensitive ? '' : ' -CaseSensitive'} -Context ${GrepSearchTool.CONTEXT_LINES} | Select-Object -First ${max} | ForEach-Object { $_.Path + ':' + $_.LineNumber + ':' + $_.Line }`;\r\n } else {\r\n // Search single file\r\n const max = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n psCommand = params.IsRegex\r\n ? `Select-String -Path '${escapedSearchPath}' -Pattern '${patternArg}'${params.CaseInsensitive ? '' : ' -CaseSensitive'} -Context ${GrepSearchTool.CONTEXT_LINES} | Select-Object -First ${max} | ForEach-Object { $_.Path + ':' + $_.LineNumber + ':' + $_.Line }`\r\n : `Select-String -Path '${escapedSearchPath}' -Pattern '${patternArg}' -SimpleMatch${params.CaseInsensitive ? '' : ' -CaseSensitive'} -Context ${GrepSearchTool.CONTEXT_LINES} | Select-Object -First ${max} | ForEach-Object { $_.Path + ':' + $_.LineNumber + ':' + $_.Line }`;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const matches: GrepMatch[] = [];\r\n let truncated = false;\r\n let finished = false;\r\n\r\n const child = spawn(psExe, ['-NoProfile', '-Command', psCommand], {\r\n cwd,\r\n env: { ...process.env }\r\n });\r\n\r\n // Robust cleanup function\r\n const done = (result: InternalSearchResult) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n child.kill();\r\n resolve(result);\r\n };\r\n\r\n const fail = (err: Error) => {\r\n if (finished) return;\r\n finished = true;\r\n clearTimeout(timer);\r\n child.kill();\r\n reject(err);\r\n };\r\n\r\n const timer = setTimeout(() => {\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated: true,\r\n truncationReason: 'timeout',\r\n searchPattern: params.Query\r\n });\r\n }, GrepSearchTool.SEARCH_TIMEOUT);\r\n\r\n let stdout = '';\r\n let stderr = '';\r\n\r\n child.stdout.on('data', (data) => {\r\n stdout += data.toString();\r\n });\r\n\r\n child.stderr.on('data', (data) => {\r\n stderr += data.toString();\r\n });\r\n\r\n child.on('close', (code) => {\r\n if (finished) return;\r\n\r\n const lines = this.normalizeLineEndings(stdout).split('\\n').filter(l => l.trim());\r\n\r\n for (const line of lines) {\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n break;\r\n }\r\n\r\n const parsed = this.parseGrepLine(line);\r\n if (parsed) {\r\n matches.push({\r\n file: this.normalizePath(parsed.file),\r\n line: parsed.lineNum,\r\n match: this.truncateLine(parsed.content),\r\n contextBefore: [],\r\n contextAfter: []\r\n });\r\n }\r\n }\r\n\r\n done({\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: truncated ? 'max_matches' : undefined,\r\n searchPattern: params.Query\r\n });\r\n });\r\n\r\n child.on('error', (err) => fail(err));\r\n });\r\n }\r\n\r\n // ========================================================================\r\n // PURE NODE.JS BACKEND (Universal Fallback)\r\n // ========================================================================\r\n\r\n private async searchWithNodeJS(\r\n params: GrepSearchParams,\r\n cwd: string\r\n ): Promise<InternalSearchResult> {\r\n const matches: GrepMatch[] = [];\r\n let truncated = false;\r\n let filesSearched = 0;\r\n let encodingFallback = false;\r\n\r\n const searchPath = path.resolve(cwd, params.SearchPath);\r\n const regex = this.createSearchRegex(params.Query, params.IsRegex ?? false, params.CaseInsensitive ?? false);\r\n\r\n // Collect files to search\r\n const filesToSearch: string[] = [];\r\n\r\n const stats = await fs.promises.stat(searchPath).catch(() => null);\r\n if (!stats) {\r\n return { matches: [], totalMatches: 0, truncated: false, searchPattern: params.Query };\r\n }\r\n\r\n if (stats.isFile()) {\r\n filesToSearch.push(searchPath);\r\n } else if (stats.isDirectory()) {\r\n await this.collectFiles(searchPath, filesToSearch, params.Includes);\r\n }\r\n\r\n // Search each file\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n for (const filePath of filesToSearch) {\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n break;\r\n }\r\n\r\n // Skip binary files\r\n if (await this.isBinaryFile(filePath)) {\r\n continue;\r\n }\r\n\r\n filesSearched++;\r\n\r\n try {\r\n let content: string;\r\n const buffer = await fs.promises.readFile(filePath);\r\n\r\n // Try UTF-8 first\r\n try {\r\n content = buffer.toString('utf8');\r\n // Check for replacement characters indicating decode failure\r\n if (content.includes('\\uFFFD')) {\r\n content = buffer.toString('latin1');\r\n encodingFallback = true;\r\n }\r\n } catch {\r\n content = buffer.toString('latin1');\r\n encodingFallback = true;\r\n }\r\n\r\n const lines = this.normalizeLineEndings(content).split('\\n');\r\n\r\n for (let i = 0; i < lines.length; i++) {\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n break;\r\n }\r\n\r\n const line = lines[i];\r\n regex.lastIndex = 0; // Reset regex state\r\n\r\n // LOOP FIX: Capture all matches in the line, not just the first\r\n let matchResult;\r\n while ((matchResult = regex.exec(line)) !== null) {\r\n // Prevent infinite loops with zero-width matches\r\n if (matchResult.index === regex.lastIndex) {\r\n regex.lastIndex++;\r\n }\r\n\r\n const relativePath = path.relative(cwd, filePath);\r\n\r\n // Collect context\r\n const contextBefore: ContextLine[] = [];\r\n const contextAfter: ContextLine[] = [];\r\n\r\n for (let j = Math.max(0, i - GrepSearchTool.CONTEXT_LINES); j < i; j++) {\r\n contextBefore.push({\r\n lineNumber: j + 1,\r\n text: this.truncateLine(lines[j])\r\n });\r\n }\r\n\r\n for (let j = i + 1; j <= Math.min(lines.length - 1, i + GrepSearchTool.CONTEXT_LINES); j++) {\r\n contextAfter.push({\r\n lineNumber: j + 1,\r\n text: this.truncateLine(lines[j])\r\n });\r\n }\r\n\r\n matches.push({\r\n file: this.normalizePath(relativePath),\r\n line: i + 1,\r\n column: matchResult.index + 1,\r\n match: this.truncateLine(line),\r\n contextBefore,\r\n contextAfter\r\n });\r\n\r\n if (matches.length >= maxMatches) {\r\n truncated = true;\r\n break;\r\n }\r\n }\r\n\r\n if (truncated) break;\r\n }\r\n } catch {\r\n // Skip files that can't be read\r\n }\r\n }\r\n\r\n return {\r\n matches,\r\n totalMatches: matches.length,\r\n truncated,\r\n truncationReason: truncated ? 'max_matches' : undefined,\r\n searchPattern: params.Query,\r\n filesSearched,\r\n encodingFallback\r\n };\r\n }\r\n\r\n /**\r\n * Recursively collect files from directory\r\n */\r\n private async collectFiles(dir: string, files: string[], includes?: string[], maxFiles = 10000): Promise<void> {\r\n if (files.length >= maxFiles) return;\r\n\r\n try {\r\n const entries = await fs.promises.readdir(dir, { withFileTypes: true });\r\n\r\n for (const entry of entries) {\r\n if (files.length >= maxFiles) break;\r\n\r\n const fullPath = path.join(dir, entry.name);\r\n\r\n // Skip common non-code directories\r\n if (entry.isDirectory()) {\r\n if (['node_modules', '.git', 'dist', 'build', '__pycache__', '.vscode', '.idea'].includes(entry.name)) {\r\n continue;\r\n }\r\n await this.collectFiles(fullPath, files, includes, maxFiles);\r\n } else if (entry.isFile()) {\r\n if (this.matchesIncludesFilter(fullPath, includes)) {\r\n files.push(fullPath);\r\n }\r\n }\r\n }\r\n } catch {\r\n // Ignore directories that can't be read\r\n }\r\n }\r\n\r\n // ========================================================================\r\n // MAIN EXECUTE METHOD\r\n // ========================================================================\r\n\r\n private async executeWithPreferredBackends(\r\n params: GrepSearchParams,\r\n cwd: string\r\n ): Promise<InternalSearchResult & { backend: GrepBackend }> {\r\n let result: InternalSearchResult;\r\n let backend: GrepBackend;\r\n\r\n try {\r\n // Try backends in order of preference\r\n if (await this.hasRipgrep()) {\r\n backend = 'ripgrep';\r\n result = await this.searchWithRipgrepStreaming(params, cwd);\r\n } else if (await this.hasGrep()) {\r\n // `grep -E` is fast and portable, but it cannot handle lookarounds,\r\n // lazy quantifiers, word boundaries, and similar advanced constructs.\r\n // Use the Node.js engine for those patterns to keep behavior consistent.\r\n if (params.IsRegex && usesRegexFeaturesUnsupportedByGrep(params.Query)) {\r\n backend = 'nodejs';\r\n result = await this.searchWithNodeJS(params, cwd);\r\n } else {\r\n backend = 'grep';\r\n result = await this.searchWithGrepStreaming(params, cwd);\r\n }\r\n } else if (process.platform === 'win32' && await this.hasPowerShell()) {\r\n backend = 'powershell';\r\n result = await this.searchWithPowerShell(params, cwd);\r\n } else {\r\n // Universal Node.js fallback\r\n backend = 'nodejs';\r\n result = await this.searchWithNodeJS(params, cwd);\r\n }\r\n } catch (error: any) {\r\n // If primary backend fails, try fallback\r\n try {\r\n backend = 'nodejs';\r\n result = await this.searchWithNodeJS(params, cwd);\r\n } catch (fallbackError: any) {\r\n throw new Error(`Search failed: ${error.message}. Fallback also failed: ${fallbackError.message}`);\r\n }\r\n }\r\n\r\n // Apply post-filtering for Includes if backend didn't support it\r\n if (params.Includes && params.Includes.length > 0 && backend === 'nodejs') {\r\n const filteredMatches = result.matches.filter(match =>\r\n this.matchesIncludesFilter(match.file, params.Includes)\r\n );\r\n\r\n return {\r\n ...result,\r\n matches: filteredMatches,\r\n totalMatches: filteredMatches.length,\r\n backend\r\n };\r\n }\r\n\r\n return { ...result, backend };\r\n }\r\n\r\n async execute(params: GrepSearchParams, cwd: string): Promise<InternalSearchResult & { backend: GrepBackend }> {\r\n const shouldRetryAsRegex = params.IsRegex === undefined && looksLikeRegexPattern(params.Query);\r\n\r\n // Default behavior remains literal unless caller explicitly requests regex.\r\n const primaryParams: GrepSearchParams = {\r\n ...params,\r\n IsRegex: params.IsRegex ?? false\r\n };\r\n\r\n const primaryResult = await this.executeWithPreferredBackends(primaryParams, cwd);\r\n\r\n // Robust fallback for model-generated queries like `a|b` or `loadChat\\(`.\r\n if (shouldRetryAsRegex && primaryResult.matches.length === 0) {\r\n const regexParams: GrepSearchParams = {\r\n ...params,\r\n IsRegex: true\r\n };\r\n const regexResult = await this.executeWithPreferredBackends(regexParams, cwd);\r\n\r\n if (regexResult.matches.length > 0) {\r\n return regexResult;\r\n }\r\n }\r\n\r\n return primaryResult;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// FORMATTING FUNCTION\r\n// ============================================================================\r\n\r\nfunction formatGrepResults(result: GrepSearchResult): string {\r\n if (result.matches.length === 0) {\r\n return `No matches found for pattern \"${result.searchPattern}\"`;\r\n }\r\n\r\n const uniqueFiles = new Set<string>();\r\n result.matches.forEach(match => uniqueFiles.add(match.file));\r\n const fileCount = uniqueFiles.size;\r\n\r\n const output: string[] = [];\r\n output.push(`Found ${result.uniqueMatchesCount} match${result.uniqueMatchesCount === 1 ? '' : 'es'} in ${fileCount} file${fileCount === 1 ? '' : 's'} for pattern \"${result.searchPattern}\"`);\r\n\r\n if (result.truncated) {\r\n const reason = result.truncationReason === 'timeout' ? '(timed out)' : '';\r\n output.push(`(showing first ${result.matches.length} matches${reason ? ' ' + reason : ''})`);\r\n }\r\n\r\n const matchesByFile = new Map<string, GrepMatch[]>();\r\n result.matches.forEach(match => {\r\n if (!matchesByFile.has(match.file)) {\r\n matchesByFile.set(match.file, []);\r\n }\r\n matchesByFile.get(match.file)?.push(match);\r\n });\r\n\r\n matchesByFile.forEach((matches, file) => {\r\n output.push(`\\n${file}`);\r\n\r\n matches.forEach(match => {\r\n match.contextBefore.forEach(ctx => {\r\n output.push(`${ctx.lineNumber}: ${ctx.text}`);\r\n });\r\n\r\n const columnInfo = match.column ? ` (col ${match.column})` : '';\r\n output.push(`${match.line}:> ${match.match}${columnInfo}`);\r\n\r\n match.contextAfter.forEach(ctx => {\r\n output.push(`${ctx.lineNumber}: ${ctx.text}`);\r\n });\r\n });\r\n });\r\n\r\n return output.join('\\n');\r\n}\r\n\r\n// ============================================================================\r\n// REMOTE SEARCH HELPER\r\n// ============================================================================\r\n\r\n/**\r\n * Execute grep search on a remote system via ContextManager\r\n * Used for SSH/Docker/WSL environments\r\n */\r\nasync function searchRemote(\r\n params: GrepSearchParams,\r\n contextManager: ContextManager\r\n): Promise<InternalSearchResult & { backend: GrepBackend }> {\r\n const maxMatches = params.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n const remoteQuery = params.IsRegex ? normalizeRegexForGrep(params.Query) : params.Query;\r\n\r\n // Escape the query for shell usage\r\n const escapedQuery = remoteQuery.replace(/'/g, \"'\\\\''\");\r\n\r\n // First, check if the path is a file or directory to use correct grep flags\r\n // Use test -d to check if it's a directory\r\n const checkResult = await contextManager.executeCommand(`test -d \"${params.SearchPath}\" && echo \"dir\" || echo \"file\"`, 5000);\r\n const isDirectory = checkResult.stdout.trim() === 'dir';\r\n\r\n // Build grep command - use -r only for directories, -H to always show filename\r\n let grepArgs = isDirectory ? '-rn' : '-Hn'; // -H for filename, -n for line numbers, -r for recursive\r\n if (params.CaseInsensitive) {\r\n grepArgs += 'i';\r\n }\r\n if (params.IsRegex) {\r\n grepArgs += 'E'; // extended regex (supports alternation with |)\r\n } else {\r\n grepArgs += 'F'; // fixed strings (literal)\r\n }\r\n\r\n // Add include patterns if specified (only useful for directories)\r\n let includeArgs = '';\r\n if (isDirectory && params.Includes && params.Includes.length > 0) {\r\n includeArgs = params.Includes.map(p => `--include='${p}'`).join(' ');\r\n }\r\n\r\n // Build the full command with result limit\r\n const command = `grep ${grepArgs} ${includeArgs} '${escapedQuery}' \"${params.SearchPath}\" 2>/dev/null | head -n ${maxMatches}`;\r\n\r\n try {\r\n const result = await contextManager.executeCommand(command, 30000);\r\n\r\n const matches: GrepMatch[] = [];\r\n const lines = result.stdout.split('\\n').filter(line => line.trim());\r\n\r\n for (const line of lines) {\r\n // Parse grep output: file:line:content\r\n const match = line.match(/^(.+?):(\\d+):(.+)$/);\r\n if (match) {\r\n // Truncate long lines\r\n let content = match[3];\r\n if (content.length > 300) {\r\n content = content.substring(0, 300) + ' [truncated]';\r\n }\r\n\r\n matches.push({\r\n file: match[1],\r\n line: parseInt(match[2], 10),\r\n match: content,\r\n contextBefore: [],\r\n contextAfter: [],\r\n });\r\n }\r\n }\r\n\r\n return {\r\n matches,\r\n totalMatches: matches.length,\r\n truncated: matches.length >= maxMatches,\r\n truncationReason: matches.length >= maxMatches ? 'max_matches' : undefined,\r\n searchPattern: params.Query,\r\n backend: 'remote' as GrepBackend,\r\n };\r\n } catch (error: any) {\r\n // If grep fails (command not found, permission denied, etc.), return empty result\r\n return {\r\n matches: [],\r\n totalMatches: 0,\r\n truncated: false,\r\n searchPattern: params.Query,\r\n backend: 'remote' as GrepBackend,\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// TOOL EXPORT\r\n// ============================================================================\r\n\r\nexport const grepSearchTool: Tool = {\r\n schema: {\r\n name: 'grep_search',\r\n description: `Search FILE CONTENTS for text patterns using ripgrep.\r\n\r\nUSE THIS TOOL WHEN:\r\n- Searching for text/code INSIDE files (function names, variable names, error messages, etc.)\r\n- Looking for where something is defined or used in the codebase\r\n- Finding all files that contain a specific string or pattern\r\n\r\nMULTI-WORD SEARCH: When you search for \"control system\", this tool will automatically:\r\n1. Search for the exact phrase \"control system\"\r\n2. ALSO search for files containing just \"control\" or just \"system\"\r\n3. Merge and deduplicate all results\r\n\r\nResults are returned with file paths and line numbers:\r\nfilename\r\nline: context\r\nline:> match (col X)\r\nline: context\r\n\r\nNOT for: Finding files/folders by NAME. Use find_files for that instead.\r\nTotal results are capped at 50 matches. Use Includes to filter by file type.`,\r\n parameters: {\r\n type: 'object',\r\n properties: {\r\n reason_text: {\r\n type: 'string',\r\n description: 'REQUIRED: A brief explanation of what you are searching for and why.',\r\n },\r\n Query: {\r\n type: 'string',\r\n description: 'The search term or pattern. For multi-word queries like \"control system\", individual words will also be searched.',\r\n },\r\n SearchPath: {\r\n type: 'string',\r\n description: 'The path to search. This can be a directory or a file.',\r\n },\r\n Includes: {\r\n type: 'array',\r\n description: 'Glob patterns to filter files (e.g. [\"*.ts\"]).',\r\n items: { type: 'string' }\r\n },\r\n MaxResults: {\r\n type: 'number',\r\n description: 'Optional: Maximum number of results to return. Default is 50. Increase this if you need to see more matches.',\r\n },\r\n CaseInsensitive: {\r\n type: 'boolean',\r\n description: 'If true, performs a case-insensitive search. Default: false (case-sensitive)',\r\n },\r\n IsRegex: {\r\n type: 'boolean',\r\n description: 'If true, treats Query as regex. If omitted, the tool starts with literal search and auto-retries regex for regex-like patterns (e.g. a|b, loadChat\\\\().',\r\n },\r\n },\r\n required: ['reason_text', 'Query', 'SearchPath'],\r\n },\r\n },\r\n async execute(args, context) {\r\n const tool = new GrepSearchTool();\r\n const startTime = Date.now();\r\n\r\n const query = args.Query as string;\r\n const queryLooksRegexLike = looksLikeRegexPattern(query);\r\n const words = query.trim().split(/\\s+/).filter(w => w.length > 2);\r\n\r\n const allMatches: GrepMatch[] = [];\r\n const seenMatches = new Set<string>();\r\n const matchesPerQuery: Record<string, number> = {};\r\n const queriesExecuted: string[] = [];\r\n let rawTotalMatches = 0;\r\n let backend: GrepBackend = 'ripgrep';\r\n let truncated = false;\r\n let truncationReason: TruncationReason | undefined;\r\n let encodingFallback = false;\r\n\r\n const queries: string[] = [query];\r\n\r\n if (words.length > 1 && args.IsRegex !== true && !queryLooksRegexLike) {\r\n for (const word of words) {\r\n if (word !== query) {\r\n queries.push(word);\r\n }\r\n }\r\n }\r\n\r\n // Check if we're in a remote context (SSH, Docker, WSL)\r\n const contextManager = context.contextManager as ContextManager;\r\n const currentContext = contextManager?.getCurrentContext();\r\n const isRemote = currentContext && currentContext.type !== 'local';\r\n\r\n try {\r\n for (const searchQuery of queries) {\r\n queriesExecuted.push(searchQuery);\r\n\r\n const params: GrepSearchParams = {\r\n Query: searchQuery,\r\n SearchPath: args.SearchPath,\r\n Includes: args.Includes,\r\n MaxResults: args.MaxResults,\r\n CaseInsensitive: args.CaseInsensitive ?? false,\r\n IsRegex: args.IsRegex,\r\n };\r\n\r\n try {\r\n // Use remote search for SSH/Docker/WSL, local search otherwise\r\n let result = isRemote\r\n ? await searchRemote(params, contextManager)\r\n : await tool.execute(params, context.cwd);\r\n\r\n // Remote grep needs explicit regex mode; retry regex for regex-like queries\r\n // only when caller did not explicitly choose IsRegex mode.\r\n if (isRemote && args.IsRegex === undefined && looksLikeRegexPattern(searchQuery) && result.matches.length === 0) {\r\n const regexRetryParams: GrepSearchParams = {\r\n ...params,\r\n IsRegex: true,\r\n };\r\n const regexRetryResult = await searchRemote(regexRetryParams, contextManager);\r\n if (regexRetryResult.matches.length > 0) {\r\n result = regexRetryResult;\r\n }\r\n }\r\n\r\n backend = result.backend;\r\n matchesPerQuery[searchQuery] = result.totalMatches;\r\n rawTotalMatches += result.totalMatches;\r\n\r\n if (result.truncated) {\r\n truncated = true;\r\n truncationReason = result.truncationReason;\r\n }\r\n\r\n if (result.encodingFallback) {\r\n encodingFallback = true;\r\n }\r\n\r\n // Add unique matches with improved dedupe key\r\n for (const match of result.matches) {\r\n // Use file:line:column:matchText for more accurate deduplication\r\n const key = `${match.file}:${match.line}:${match.column ?? 0}:${match.match.substring(0, 50)}`;\r\n const maxMatches = args.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n\r\n if (!seenMatches.has(key) && allMatches.length < maxMatches) {\r\n seenMatches.add(key);\r\n allMatches.push(match);\r\n }\r\n }\r\n } catch {\r\n matchesPerQuery[searchQuery] = 0;\r\n continue;\r\n }\r\n }\r\n\r\n const endTime = Date.now();\r\n const uniqueMatchesCount = allMatches.length;\r\n const max = args.MaxResults || GrepSearchTool.DEFAULT_MAX_MATCHES;\r\n\r\n const finalResult: GrepSearchResult = {\r\n matches: allMatches,\r\n totalMatches: rawTotalMatches,\r\n uniqueMatchesCount,\r\n truncated: truncated || allMatches.length >= max,\r\n truncationReason: allMatches.length >= max ? 'max_matches' : truncationReason,\r\n searchPattern: queries.length > 1 ? `\"${query}\" (+ individual words)` : query,\r\n metadata: {\r\n backend,\r\n searchDurationMs: endTime - startTime,\r\n queriesExecuted,\r\n matchesPerQuery,\r\n encodingFallback\r\n },\r\n formattedOutput: '',\r\n };\r\n\r\n finalResult.formattedOutput = formatGrepResults(finalResult);\r\n\r\n return finalResult.formattedOutput;\r\n } catch (error: any) {\r\n throw new Error(`Grep search failed: ${error.message}`);\r\n }\r\n },\r\n};\r\n"],"mappings":"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","names":[]}