mindweave 0.0.1 → 2.1.2

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 (481) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +171 -14
  3. package/dist/alternator/chassis/cache.js +47 -0
  4. package/dist/alternator/chassis/cache.js.map +1 -0
  5. package/dist/alternator/chassis/domRefs.js +53 -0
  6. package/dist/alternator/chassis/domRefs.js.map +1 -0
  7. package/dist/alternator/chassis/extractWorker.js +65 -0
  8. package/dist/alternator/chassis/extractWorker.js.map +1 -0
  9. package/dist/alternator/chassis/graph.js +221 -0
  10. package/dist/alternator/chassis/graph.js.map +1 -0
  11. package/dist/alternator/chassis/index.js +463 -0
  12. package/dist/alternator/chassis/index.js.map +1 -0
  13. package/dist/alternator/chassis/isolation.js +336 -0
  14. package/dist/alternator/chassis/isolation.js.map +1 -0
  15. package/dist/alternator/chassis/langCases.js +69 -0
  16. package/dist/alternator/chassis/langCases.js.map +1 -0
  17. package/dist/alternator/chassis/lsp.js +469 -0
  18. package/dist/alternator/chassis/lsp.js.map +1 -0
  19. package/dist/alternator/chassis/markup.js +262 -0
  20. package/dist/alternator/chassis/markup.js.map +1 -0
  21. package/dist/alternator/chassis/provision.js +198 -0
  22. package/dist/alternator/chassis/provision.js.map +1 -0
  23. package/dist/alternator/chassis/rank.js +72 -0
  24. package/dist/alternator/chassis/rank.js.map +1 -0
  25. package/dist/alternator/chassis/servers.js +215 -0
  26. package/dist/alternator/chassis/servers.js.map +1 -0
  27. package/dist/alternator/chassis/treesitter.js +608 -0
  28. package/dist/alternator/chassis/treesitter.js.map +1 -0
  29. package/dist/alternator/chassis/types.js +24 -0
  30. package/dist/alternator/chassis/types.js.map +1 -0
  31. package/dist/alternator/lane.js +67 -0
  32. package/dist/alternator/lane.js.map +1 -0
  33. package/dist/cli/App.js +2586 -0
  34. package/dist/cli/App.js.map +1 -0
  35. package/dist/cli/altScreen.js +67 -0
  36. package/dist/cli/altScreen.js.map +1 -0
  37. package/dist/cli/approvalChannel.js +72 -0
  38. package/dist/cli/approvalChannel.js.map +1 -0
  39. package/dist/cli/attachments.js +188 -0
  40. package/dist/cli/attachments.js.map +1 -0
  41. package/dist/cli/bootstrap.js +279 -0
  42. package/dist/cli/bootstrap.js.map +1 -0
  43. package/dist/cli/chatAnchor.js +94 -0
  44. package/dist/cli/chatAnchor.js.map +1 -0
  45. package/dist/cli/commandArgs.js +79 -0
  46. package/dist/cli/commandArgs.js.map +1 -0
  47. package/dist/cli/commandRoute.js +78 -0
  48. package/dist/cli/commandRoute.js.map +1 -0
  49. package/dist/cli/compaction.js +69 -0
  50. package/dist/cli/compaction.js.map +1 -0
  51. package/dist/cli/components/ApprovalBox.js +100 -0
  52. package/dist/cli/components/ApprovalBox.js.map +1 -0
  53. package/dist/cli/components/BlockView.js +128 -0
  54. package/dist/cli/components/BlockView.js.map +1 -0
  55. package/dist/cli/components/FirstRunFrame.js +41 -0
  56. package/dist/cli/components/FirstRunFrame.js.map +1 -0
  57. package/dist/cli/components/KeyManager.js +197 -0
  58. package/dist/cli/components/KeyManager.js.map +1 -0
  59. package/dist/cli/components/KeySetup.js +125 -0
  60. package/dist/cli/components/KeySetup.js.map +1 -0
  61. package/dist/cli/components/MenuFrame.js +24 -0
  62. package/dist/cli/components/MenuFrame.js.map +1 -0
  63. package/dist/cli/components/Picker.js +82 -0
  64. package/dist/cli/components/Picker.js.map +1 -0
  65. package/dist/cli/components/PromptInput.js +509 -0
  66. package/dist/cli/components/PromptInput.js.map +1 -0
  67. package/dist/cli/components/SubagentView.js +86 -0
  68. package/dist/cli/components/SubagentView.js.map +1 -0
  69. package/dist/cli/components/ToolGroup.js +60 -0
  70. package/dist/cli/components/ToolGroup.js.map +1 -0
  71. package/dist/cli/components/ToolLine.js +123 -0
  72. package/dist/cli/components/ToolLine.js.map +1 -0
  73. package/dist/cli/components/TrustGate.js +37 -0
  74. package/dist/cli/components/TrustGate.js.map +1 -0
  75. package/dist/cli/costView.js +40 -0
  76. package/dist/cli/costView.js.map +1 -0
  77. package/dist/cli/frameRate.js +30 -0
  78. package/dist/cli/frameRate.js.map +1 -0
  79. package/dist/cli/framebuffer/paint.js +165 -0
  80. package/dist/cli/framebuffer/paint.js.map +1 -0
  81. package/dist/cli/framebuffer/parse.js +266 -0
  82. package/dist/cli/framebuffer/parse.js.map +1 -0
  83. package/dist/cli/framebuffer/screen.js +196 -0
  84. package/dist/cli/framebuffer/screen.js.map +1 -0
  85. package/dist/cli/framebuffer/writer.js +139 -0
  86. package/dist/cli/framebuffer/writer.js.map +1 -0
  87. package/dist/cli/groupReveal.js +51 -0
  88. package/dist/cli/groupReveal.js.map +1 -0
  89. package/dist/cli/help.js +55 -0
  90. package/dist/cli/help.js.map +1 -0
  91. package/dist/cli/inputView.js +105 -0
  92. package/dist/cli/inputView.js.map +1 -0
  93. package/dist/cli/keyManager.js +65 -0
  94. package/dist/cli/keyManager.js.map +1 -0
  95. package/dist/cli/keySetup.js +35 -0
  96. package/dist/cli/keySetup.js.map +1 -0
  97. package/dist/cli/keyStore.js +73 -0
  98. package/dist/cli/keyStore.js.map +1 -0
  99. package/dist/cli/markdown.js +460 -0
  100. package/dist/cli/markdown.js.map +1 -0
  101. package/dist/cli/messageQueue.js +96 -0
  102. package/dist/cli/messageQueue.js.map +1 -0
  103. package/dist/cli/modes.js +90 -0
  104. package/dist/cli/modes.js.map +1 -0
  105. package/dist/cli/mouse.js +78 -0
  106. package/dist/cli/mouse.js.map +1 -0
  107. package/dist/cli/pasteAssembler.js +44 -0
  108. package/dist/cli/pasteAssembler.js.map +1 -0
  109. package/dist/cli/pathComplete.js +39 -0
  110. package/dist/cli/pathComplete.js.map +1 -0
  111. package/dist/cli/perfLog.js +90 -0
  112. package/dist/cli/perfLog.js.map +1 -0
  113. package/dist/cli/reveal.js +32 -0
  114. package/dist/cli/reveal.js.map +1 -0
  115. package/dist/cli/revealPace.js +59 -0
  116. package/dist/cli/revealPace.js.map +1 -0
  117. package/dist/cli/sessionCarry.js +19 -0
  118. package/dist/cli/sessionCarry.js.map +1 -0
  119. package/dist/cli/smoothScroll.js +74 -0
  120. package/dist/cli/smoothScroll.js.map +1 -0
  121. package/dist/cli/startupArgs.js +96 -0
  122. package/dist/cli/startupArgs.js.map +1 -0
  123. package/dist/cli/terminalRestore.js +34 -0
  124. package/dist/cli/terminalRestore.js.map +1 -0
  125. package/dist/cli/toolDisplay.js +219 -0
  126. package/dist/cli/toolDisplay.js.map +1 -0
  127. package/dist/cli/toolItems.js +65 -0
  128. package/dist/cli/toolItems.js.map +1 -0
  129. package/dist/cli/transcript.js +351 -0
  130. package/dist/cli/transcript.js.map +1 -0
  131. package/dist/cli/trust.js +79 -0
  132. package/dist/cli/trust.js.map +1 -0
  133. package/dist/cli/updateCheck.js +107 -0
  134. package/dist/cli/updateCheck.js.map +1 -0
  135. package/dist/cli/version.js +39 -0
  136. package/dist/cli/version.js.map +1 -0
  137. package/dist/cli/viewport.js +179 -0
  138. package/dist/cli/viewport.js.map +1 -0
  139. package/dist/cli/virtualWindow.js +103 -0
  140. package/dist/cli/virtualWindow.js.map +1 -0
  141. package/dist/cli/workingVerb.js +37 -0
  142. package/dist/cli/workingVerb.js.map +1 -0
  143. package/dist/cli/wrap.js +145 -0
  144. package/dist/cli/wrap.js.map +1 -0
  145. package/dist/drivers/anthropic/cachePoints.js +77 -0
  146. package/dist/drivers/anthropic/cachePoints.js.map +1 -0
  147. package/dist/drivers/anthropic/client.js +432 -0
  148. package/dist/drivers/anthropic/client.js.map +1 -0
  149. package/dist/drivers/anthropic/index.js +10 -0
  150. package/dist/drivers/anthropic/index.js.map +1 -0
  151. package/dist/drivers/anthropic/manifest.js +221 -0
  152. package/dist/drivers/anthropic/manifest.js.map +1 -0
  153. package/dist/drivers/cerebras/client.js +69 -0
  154. package/dist/drivers/cerebras/client.js.map +1 -0
  155. package/dist/drivers/cerebras/index.js +5 -0
  156. package/dist/drivers/cerebras/index.js.map +1 -0
  157. package/dist/drivers/cerebras/manifest.js +140 -0
  158. package/dist/drivers/cerebras/manifest.js.map +1 -0
  159. package/dist/drivers/clientId.js +41 -0
  160. package/dist/drivers/clientId.js.map +1 -0
  161. package/dist/drivers/contextOverflow.js +77 -0
  162. package/dist/drivers/contextOverflow.js.map +1 -0
  163. package/dist/drivers/deepseek/client.js +168 -0
  164. package/dist/drivers/deepseek/client.js.map +1 -0
  165. package/dist/drivers/deepseek/index.js +16 -0
  166. package/dist/drivers/deepseek/index.js.map +1 -0
  167. package/dist/drivers/deepseek/inlineTools.js +46 -0
  168. package/dist/drivers/deepseek/inlineTools.js.map +1 -0
  169. package/dist/drivers/deepseek/manifest.js +166 -0
  170. package/dist/drivers/deepseek/manifest.js.map +1 -0
  171. package/dist/drivers/gemini/client.js +38 -0
  172. package/dist/drivers/gemini/client.js.map +1 -0
  173. package/dist/drivers/gemini/index.js +5 -0
  174. package/dist/drivers/gemini/index.js.map +1 -0
  175. package/dist/drivers/gemini/manifest.js +150 -0
  176. package/dist/drivers/gemini/manifest.js.map +1 -0
  177. package/dist/drivers/glm/client.js +90 -0
  178. package/dist/drivers/glm/client.js.map +1 -0
  179. package/dist/drivers/glm/index.js +9 -0
  180. package/dist/drivers/glm/index.js.map +1 -0
  181. package/dist/drivers/glm/manifest.js +183 -0
  182. package/dist/drivers/glm/manifest.js.map +1 -0
  183. package/dist/drivers/groq/client.js +80 -0
  184. package/dist/drivers/groq/client.js.map +1 -0
  185. package/dist/drivers/groq/index.js +5 -0
  186. package/dist/drivers/groq/index.js.map +1 -0
  187. package/dist/drivers/groq/manifest.js +160 -0
  188. package/dist/drivers/groq/manifest.js.map +1 -0
  189. package/dist/drivers/kimi/client.js +82 -0
  190. package/dist/drivers/kimi/client.js.map +1 -0
  191. package/dist/drivers/kimi/index.js +9 -0
  192. package/dist/drivers/kimi/index.js.map +1 -0
  193. package/dist/drivers/kimi/manifest.js +168 -0
  194. package/dist/drivers/kimi/manifest.js.map +1 -0
  195. package/dist/drivers/meta/client.js +30 -0
  196. package/dist/drivers/meta/client.js.map +1 -0
  197. package/dist/drivers/meta/index.js +5 -0
  198. package/dist/drivers/meta/index.js.map +1 -0
  199. package/dist/drivers/meta/manifest.js +101 -0
  200. package/dist/drivers/meta/manifest.js.map +1 -0
  201. package/dist/drivers/minimax/client.js +36 -0
  202. package/dist/drivers/minimax/client.js.map +1 -0
  203. package/dist/drivers/minimax/index.js +5 -0
  204. package/dist/drivers/minimax/index.js.map +1 -0
  205. package/dist/drivers/minimax/manifest.js +120 -0
  206. package/dist/drivers/minimax/manifest.js.map +1 -0
  207. package/dist/drivers/mistral/client.js +54 -0
  208. package/dist/drivers/mistral/client.js.map +1 -0
  209. package/dist/drivers/mistral/index.js +5 -0
  210. package/dist/drivers/mistral/index.js.map +1 -0
  211. package/dist/drivers/mistral/manifest.js +118 -0
  212. package/dist/drivers/mistral/manifest.js.map +1 -0
  213. package/dist/drivers/openai/client.js +290 -0
  214. package/dist/drivers/openai/client.js.map +1 -0
  215. package/dist/drivers/openai/index.js +9 -0
  216. package/dist/drivers/openai/index.js.map +1 -0
  217. package/dist/drivers/openai/manifest.js +133 -0
  218. package/dist/drivers/openai/manifest.js.map +1 -0
  219. package/dist/drivers/openaiCompat/wire.js +493 -0
  220. package/dist/drivers/openaiCompat/wire.js.map +1 -0
  221. package/dist/drivers/partialTurn.js +23 -0
  222. package/dist/drivers/partialTurn.js.map +1 -0
  223. package/dist/drivers/providerError.js +181 -0
  224. package/dist/drivers/providerError.js.map +1 -0
  225. package/dist/drivers/qwen/client.js +93 -0
  226. package/dist/drivers/qwen/client.js.map +1 -0
  227. package/dist/drivers/qwen/index.js +9 -0
  228. package/dist/drivers/qwen/index.js.map +1 -0
  229. package/dist/drivers/qwen/manifest.js +146 -0
  230. package/dist/drivers/qwen/manifest.js.map +1 -0
  231. package/dist/drivers/registry.js +177 -0
  232. package/dist/drivers/registry.js.map +1 -0
  233. package/dist/drivers/retryPolicy.js +129 -0
  234. package/dist/drivers/retryPolicy.js.map +1 -0
  235. package/dist/drivers/searchBlocks.js +61 -0
  236. package/dist/drivers/searchBlocks.js.map +1 -0
  237. package/dist/drivers/types.js +2 -0
  238. package/dist/drivers/types.js.map +1 -0
  239. package/dist/drivers/xai/client.js +63 -0
  240. package/dist/drivers/xai/client.js.map +1 -0
  241. package/dist/drivers/xai/index.js +5 -0
  242. package/dist/drivers/xai/index.js.map +1 -0
  243. package/dist/drivers/xai/manifest.js +137 -0
  244. package/dist/drivers/xai/manifest.js.map +1 -0
  245. package/dist/dynamo/_probe.tmp.js +20 -0
  246. package/dist/dynamo/_probe.tmp.js.map +1 -0
  247. package/dist/dynamo/cacheBreak.js +88 -0
  248. package/dist/dynamo/cacheBreak.js.map +1 -0
  249. package/dist/dynamo/contextWindow.js +243 -0
  250. package/dist/dynamo/contextWindow.js.map +1 -0
  251. package/dist/dynamo/engine.js +2011 -0
  252. package/dist/dynamo/engine.js.map +1 -0
  253. package/dist/dynamo/guard.js +132 -0
  254. package/dist/dynamo/guard.js.map +1 -0
  255. package/dist/dynamo/liveMeter.js +58 -0
  256. package/dist/dynamo/liveMeter.js.map +1 -0
  257. package/dist/dynamo/model.js +172 -0
  258. package/dist/dynamo/model.js.map +1 -0
  259. package/dist/dynamo/planArtifact.js +125 -0
  260. package/dist/dynamo/planArtifact.js.map +1 -0
  261. package/dist/dynamo/pricing.js +140 -0
  262. package/dist/dynamo/pricing.js.map +1 -0
  263. package/dist/dynamo/prompt.js +264 -0
  264. package/dist/dynamo/prompt.js.map +1 -0
  265. package/dist/dynamo/spend.js +45 -0
  266. package/dist/dynamo/spend.js.map +1 -0
  267. package/dist/dynamo/verify.js +483 -0
  268. package/dist/dynamo/verify.js.map +1 -0
  269. package/dist/governor/forbidden.js +181 -0
  270. package/dist/governor/forbidden.js.map +1 -0
  271. package/dist/governor/freshness.js +83 -0
  272. package/dist/governor/freshness.js.map +1 -0
  273. package/dist/governor/frontmatter.js +38 -0
  274. package/dist/governor/frontmatter.js.map +1 -0
  275. package/dist/governor/glob.js +75 -0
  276. package/dist/governor/glob.js.map +1 -0
  277. package/dist/governor/index.js +87 -0
  278. package/dist/governor/index.js.map +1 -0
  279. package/dist/governor/rules.js +80 -0
  280. package/dist/governor/rules.js.map +1 -0
  281. package/dist/governor/scope.js +91 -0
  282. package/dist/governor/scope.js.map +1 -0
  283. package/dist/governor/skills.js +176 -0
  284. package/dist/governor/skills.js.map +1 -0
  285. package/dist/governor/types.js +16 -0
  286. package/dist/governor/types.js.map +1 -0
  287. package/dist/governor/write.js +182 -0
  288. package/dist/governor/write.js.map +1 -0
  289. package/dist/index.js +89 -0
  290. package/dist/index.js.map +1 -0
  291. package/dist/mcp/catalog.js +232 -0
  292. package/dist/mcp/catalog.js.map +1 -0
  293. package/dist/mcp/config.js +116 -0
  294. package/dist/mcp/config.js.map +1 -0
  295. package/dist/mcp/configWrite.js +254 -0
  296. package/dist/mcp/configWrite.js.map +1 -0
  297. package/dist/mcp/connection.js +504 -0
  298. package/dist/mcp/connection.js.map +1 -0
  299. package/dist/mcp/deferred.js +104 -0
  300. package/dist/mcp/deferred.js.map +1 -0
  301. package/dist/mcp/discover.js +128 -0
  302. package/dist/mcp/discover.js.map +1 -0
  303. package/dist/mcp/manager.js +679 -0
  304. package/dist/mcp/manager.js.map +1 -0
  305. package/dist/mcp/paramHeaders.js +163 -0
  306. package/dist/mcp/paramHeaders.js.map +1 -0
  307. package/dist/mcp/prompts.js +136 -0
  308. package/dist/mcp/prompts.js.map +1 -0
  309. package/dist/mcp/protocol.js +171 -0
  310. package/dist/mcp/protocol.js.map +1 -0
  311. package/dist/mcp/resources.js +119 -0
  312. package/dist/mcp/resources.js.map +1 -0
  313. package/dist/mcp/resultStore.js +180 -0
  314. package/dist/mcp/resultStore.js.map +1 -0
  315. package/dist/mcp/subscriptions.js +74 -0
  316. package/dist/mcp/subscriptions.js.map +1 -0
  317. package/dist/mcp/transport/headerValue.js +40 -0
  318. package/dist/mcp/transport/headerValue.js.map +1 -0
  319. package/dist/mcp/transport/http.js +321 -0
  320. package/dist/mcp/transport/http.js.map +1 -0
  321. package/dist/mcp/transport/stdio.js +234 -0
  322. package/dist/mcp/transport/stdio.js.map +1 -0
  323. package/dist/mcp/transport/types.js +27 -0
  324. package/dist/mcp/transport/types.js.map +1 -0
  325. package/dist/mcp/trust.js +98 -0
  326. package/dist/mcp/trust.js.map +1 -0
  327. package/dist/mcp/trustStore.js +55 -0
  328. package/dist/mcp/trustStore.js.map +1 -0
  329. package/dist/memory/autoMemory.js +340 -0
  330. package/dist/memory/autoMemory.js.map +1 -0
  331. package/dist/memory/compaction.js +513 -0
  332. package/dist/memory/compaction.js.map +1 -0
  333. package/dist/memory/images.js +173 -0
  334. package/dist/memory/images.js.map +1 -0
  335. package/dist/memory/presence.js +59 -0
  336. package/dist/memory/presence.js.map +1 -0
  337. package/dist/memory/projectNotes.js +247 -0
  338. package/dist/memory/projectNotes.js.map +1 -0
  339. package/dist/memory/restore.js +72 -0
  340. package/dist/memory/restore.js.map +1 -0
  341. package/dist/memory/session.js +472 -0
  342. package/dist/memory/session.js.map +1 -0
  343. package/dist/memory/sessionMemory.js +142 -0
  344. package/dist/memory/sessionMemory.js.map +1 -0
  345. package/dist/memory/sessionMemoryCompact.js +136 -0
  346. package/dist/memory/sessionMemoryCompact.js.map +1 -0
  347. package/dist/memory/store.js +217 -0
  348. package/dist/memory/store.js.map +1 -0
  349. package/dist/memory/types.js +14 -0
  350. package/dist/memory/types.js.map +1 -0
  351. package/dist/memory/workingSet.js +383 -0
  352. package/dist/memory/workingSet.js.map +1 -0
  353. package/dist/project/context.js +425 -0
  354. package/dist/project/context.js.map +1 -0
  355. package/dist/tools/approval.js +189 -0
  356. package/dist/tools/approval.js.map +1 -0
  357. package/dist/tools/askUser.js +103 -0
  358. package/dist/tools/askUser.js.map +1 -0
  359. package/dist/tools/atomicWrite.js +151 -0
  360. package/dist/tools/atomicWrite.js.map +1 -0
  361. package/dist/tools/backgroundShells.js +468 -0
  362. package/dist/tools/backgroundShells.js.map +1 -0
  363. package/dist/tools/captureSweep.js +77 -0
  364. package/dist/tools/captureSweep.js.map +1 -0
  365. package/dist/tools/chassisMux.js +92 -0
  366. package/dist/tools/chassisMux.js.map +1 -0
  367. package/dist/tools/checkpoints.js +328 -0
  368. package/dist/tools/checkpoints.js.map +1 -0
  369. package/dist/tools/codeIntel.js +267 -0
  370. package/dist/tools/codeIntel.js.map +1 -0
  371. package/dist/tools/deferredNative.js +121 -0
  372. package/dist/tools/deferredNative.js.map +1 -0
  373. package/dist/tools/detail.js +135 -0
  374. package/dist/tools/detail.js.map +1 -0
  375. package/dist/tools/diagnostics.js +174 -0
  376. package/dist/tools/diagnostics.js.map +1 -0
  377. package/dist/tools/edit.js +167 -0
  378. package/dist/tools/edit.js.map +1 -0
  379. package/dist/tools/editCore.js +283 -0
  380. package/dist/tools/editCore.js.map +1 -0
  381. package/dist/tools/editFile.js +183 -0
  382. package/dist/tools/editFile.js.map +1 -0
  383. package/dist/tools/editRipple.js +126 -0
  384. package/dist/tools/editRipple.js.map +1 -0
  385. package/dist/tools/editTarget.js +131 -0
  386. package/dist/tools/editTarget.js.map +1 -0
  387. package/dist/tools/editWindow.js +49 -0
  388. package/dist/tools/editWindow.js.map +1 -0
  389. package/dist/tools/eol.js +56 -0
  390. package/dist/tools/eol.js.map +1 -0
  391. package/dist/tools/exitPlan.js +175 -0
  392. package/dist/tools/exitPlan.js.map +1 -0
  393. package/dist/tools/focus.js +42 -0
  394. package/dist/tools/focus.js.map +1 -0
  395. package/dist/tools/gitignore.js +148 -0
  396. package/dist/tools/gitignore.js.map +1 -0
  397. package/dist/tools/glob.js +134 -0
  398. package/dist/tools/glob.js.map +1 -0
  399. package/dist/tools/governorTools.js +258 -0
  400. package/dist/tools/governorTools.js.map +1 -0
  401. package/dist/tools/grep.js +450 -0
  402. package/dist/tools/grep.js.map +1 -0
  403. package/dist/tools/guard.js +220 -0
  404. package/dist/tools/guard.js.map +1 -0
  405. package/dist/tools/killTree.js +215 -0
  406. package/dist/tools/killTree.js.map +1 -0
  407. package/dist/tools/listDir.js +143 -0
  408. package/dist/tools/listDir.js.map +1 -0
  409. package/dist/tools/mcpAdd.js +176 -0
  410. package/dist/tools/mcpAdd.js.map +1 -0
  411. package/dist/tools/mcpResources.js +116 -0
  412. package/dist/tools/mcpResources.js.map +1 -0
  413. package/dist/tools/mcpSearch.js +123 -0
  414. package/dist/tools/mcpSearch.js.map +1 -0
  415. package/dist/tools/multiEdit.js +168 -0
  416. package/dist/tools/multiEdit.js.map +1 -0
  417. package/dist/tools/paths.js +225 -0
  418. package/dist/tools/paths.js.map +1 -0
  419. package/dist/tools/posixShell.js +123 -0
  420. package/dist/tools/posixShell.js.map +1 -0
  421. package/dist/tools/readFile.js +371 -0
  422. package/dist/tools/readFile.js.map +1 -0
  423. package/dist/tools/readSymbol.js +145 -0
  424. package/dist/tools/readSymbol.js.map +1 -0
  425. package/dist/tools/registry.js +120 -0
  426. package/dist/tools/registry.js.map +1 -0
  427. package/dist/tools/replaceSymbol.js +141 -0
  428. package/dist/tools/replaceSymbol.js.map +1 -0
  429. package/dist/tools/results.js +15 -0
  430. package/dist/tools/results.js.map +1 -0
  431. package/dist/tools/ripgrep.js +145 -0
  432. package/dist/tools/ripgrep.js.map +1 -0
  433. package/dist/tools/runCommand.js +633 -0
  434. package/dist/tools/runCommand.js.map +1 -0
  435. package/dist/tools/saveMemory.js +102 -0
  436. package/dist/tools/saveMemory.js.map +1 -0
  437. package/dist/tools/screenshot.js +200 -0
  438. package/dist/tools/screenshot.js.map +1 -0
  439. package/dist/tools/screenshotWin.js +227 -0
  440. package/dist/tools/screenshotWin.js.map +1 -0
  441. package/dist/tools/search.js +121 -0
  442. package/dist/tools/search.js.map +1 -0
  443. package/dist/tools/sessionTools.js +187 -0
  444. package/dist/tools/sessionTools.js.map +1 -0
  445. package/dist/tools/shellCheckpoint.js +123 -0
  446. package/dist/tools/shellCheckpoint.js.map +1 -0
  447. package/dist/tools/shellLint.js +102 -0
  448. package/dist/tools/shellLint.js.map +1 -0
  449. package/dist/tools/shellTools.js +203 -0
  450. package/dist/tools/shellTools.js.map +1 -0
  451. package/dist/tools/spanCore.js +78 -0
  452. package/dist/tools/spanCore.js.map +1 -0
  453. package/dist/tools/subagent.js +224 -0
  454. package/dist/tools/subagent.js.map +1 -0
  455. package/dist/tools/subagentReport.js +114 -0
  456. package/dist/tools/subagentReport.js.map +1 -0
  457. package/dist/tools/tempSweep.js +118 -0
  458. package/dist/tools/tempSweep.js.map +1 -0
  459. package/dist/tools/todo.js +117 -0
  460. package/dist/tools/todo.js.map +1 -0
  461. package/dist/tools/types.js +2 -0
  462. package/dist/tools/types.js.map +1 -0
  463. package/dist/tools/untrusted.js +46 -0
  464. package/dist/tools/untrusted.js.map +1 -0
  465. package/dist/tools/useSkill.js +62 -0
  466. package/dist/tools/useSkill.js.map +1 -0
  467. package/dist/tools/walk.js +152 -0
  468. package/dist/tools/walk.js.map +1 -0
  469. package/dist/tools/web.js +61 -0
  470. package/dist/tools/web.js.map +1 -0
  471. package/dist/tools/webFetch.js +444 -0
  472. package/dist/tools/webFetch.js.map +1 -0
  473. package/dist/tools/webSearch.js +130 -0
  474. package/dist/tools/webSearch.js.map +1 -0
  475. package/dist/tools/workspace.js +212 -0
  476. package/dist/tools/workspace.js.map +1 -0
  477. package/dist/tools/workspaceDiscover.js +216 -0
  478. package/dist/tools/workspaceDiscover.js.map +1 -0
  479. package/dist/tools/writeFile.js +162 -0
  480. package/dist/tools/writeFile.js.map +1 -0
  481. package/package.json +74 -28
@@ -0,0 +1,450 @@
1
+ /**
2
+ * grep.ts — search file contents with a regular expression.
3
+ *
4
+ * Primary engine is ripgrep: precise, fast, .gitignore-aware,
5
+ * and it never loads the project into the agent — only matches come back. When
6
+ * `rg` isn't installed we fall back to a pure-Node walk so search still works.
7
+ *
8
+ * The interface is a familiar, predictable search shape — `pattern`, `path`, `glob`,
9
+ * `output_mode`, `ignore_case`, `context` — so any model can drive it reliably.
10
+ *
11
+ * That flag was literally named `-i` until an audit pointed out it was the only
12
+ * parameter in the whole registry whose name started with a dash. JSON Schema permits
13
+ * it, but function-calling implementations vary in how they handle a property name
14
+ * that looks like a CLI flag, and a parameter the model cannot reliably send is worse
15
+ * than a slightly longer name. It reads better spelled out anyway.
16
+ */
17
+ import { promises as fs } from "node:fs";
18
+ import { join } from "node:path";
19
+ import { isMultiRoot, nextTouch, relativize, resolvePath, rootLabel, rootsOf, searchUnits, markScope } from "./paths.js";
20
+ import { addFocus } from "./focus.js";
21
+ import { DEFAULT_IGNORES, globToRegExp, walkFiles } from "./walk.js";
22
+ import { SEARCH_EXCLUDE_GLOBS, excludedFromSearch } from "./guard.js";
23
+ import { ripgrepAvailable, runRipgrep } from "./ripgrep.js";
24
+ import { fail, failQuietly } from "./results.js";
25
+ const MAX_FILES = 5_000;
26
+ /** Cap on matching lines returned. Exported so the merged `search` tool states the
27
+ * same number in its description instead of drifting from it. */
28
+ export const GREP_MAX_OUTPUT_LINES = 250;
29
+ const MAX_OUTPUT_LINES = GREP_MAX_OUTPUT_LINES;
30
+ const MAX_FILE_BYTES = 5 * 1024 * 1024;
31
+ export const grepDef = {
32
+ name: "grep",
33
+ readOnly: true,
34
+ // The old description named the modes and stopped, which left the model to read an
35
+ // empty result as "that string is not in this codebase". It often is: .gitignore is
36
+ // respected, so build output and generated code are invisible, and secrets and other
37
+ // agents' data are refused outright. A wrong "it does not exist" is worse than a slow
38
+ // search, because the model acts on it. The regex-flavour line matters for the same
39
+ // reason: a lookahead pattern fails with an error the model reads as "no matches".
40
+ description: "Search file contents with a regular expression. `output_mode` is " +
41
+ "'files_with_matches' (default, just paths), 'content' (matching lines), or " +
42
+ "'count'. Searches every session root unless `path` (a file, directory, or root label) is given. " +
43
+ "WHAT IS NOT SEARCHED, so an empty result is NOT proof a string is absent: anything " +
44
+ "the project's .gitignore excludes (build output, dist, generated code), node_modules " +
45
+ "and .git always, and secrets (.env, keys) plus other coding agents' data, which are " +
46
+ "refused rather than missing. If what you need lives in one of those, read the file " +
47
+ "directly instead of concluding it is not there. " +
48
+ "Avoid lookahead, lookbehind and backreferences; the search engine rejects them. " +
49
+ "Character classes, groups, alternation and anchors are all fine. " +
50
+ `Output stops after ${MAX_OUTPUT_LINES} matching lines. When it does it tells you the ` +
51
+ "`offset` to pass for the next page, so a capped search is something to continue, not " +
52
+ "a reason to start reading whole files. " +
53
+ "`multiline` lets a pattern cross line breaks, which is how you find a construct that " +
54
+ "is not on one line. " +
55
+ "To find the uses of a symbol you can NAME, try references first: it reads parsed " +
56
+ "code rather than raw text, so a mention in a comment or a string is not a match. " +
57
+ "Come back here when it reports a name-level answer and exact identity matters.",
58
+ parameters: {
59
+ type: "object",
60
+ additionalProperties: false,
61
+ required: ["pattern"],
62
+ properties: {
63
+ pattern: { type: "string", description: "The regular expression to search for." },
64
+ path: {
65
+ type: "string",
66
+ description: "File, directory, or root label to search. Defaults to all session roots.",
67
+ },
68
+ glob: {
69
+ type: "string",
70
+ description: 'Only search files whose path matches this glob (e.g. "*.ts").',
71
+ },
72
+ output_mode: {
73
+ type: "string",
74
+ enum: ["files_with_matches", "content", "count"],
75
+ description: "What to return. Defaults to files_with_matches.",
76
+ },
77
+ ignore_case: { type: "boolean", description: "Case-insensitive search." },
78
+ context: {
79
+ type: "integer",
80
+ minimum: 0,
81
+ description: "Lines of context to show before and after each match (content mode).",
82
+ },
83
+ before: {
84
+ type: "integer",
85
+ minimum: 0,
86
+ description: "Lines to show BEFORE each match (content mode). Overrides `context` on that side.",
87
+ },
88
+ after: {
89
+ type: "integer",
90
+ minimum: 0,
91
+ description: "Lines to show AFTER each match (content mode). Overrides `context` on that side.",
92
+ },
93
+ multiline: {
94
+ type: "boolean",
95
+ description: "Let the pattern span line breaks, with `.` matching newlines too. Off by default. " +
96
+ "Use it for constructs that are not on one line — a function signature and its body, " +
97
+ "an object literal, a JSX block.",
98
+ },
99
+ head_limit: {
100
+ type: "integer",
101
+ minimum: 0,
102
+ description: "Return at most this many results. 0 means no limit. Defaults to the cap below.",
103
+ },
104
+ offset: {
105
+ type: "integer",
106
+ minimum: 0,
107
+ description: "Skip this many results first — page through a capped search instead of narrowing it. " +
108
+ "The result tells you the offset to pass next.",
109
+ },
110
+ },
111
+ },
112
+ async execute(args, ctx) {
113
+ const pattern = typeof args.pattern === "string" ? args.pattern : "";
114
+ if (!pattern)
115
+ return failQuietly("`pattern` is required.");
116
+ const mode = args.output_mode === "content" || args.output_mode === "count"
117
+ ? args.output_mode
118
+ : "files_with_matches";
119
+ // Context is asymmetric. A symmetric window is the wrong shape for the commonest
120
+ // question a search asks — "what IS this thing" — where the answer is the lines
121
+ // AFTER the declaration and the lines before are the end of something unrelated.
122
+ const context = nonNegative(args.context);
123
+ const before = nonNegative(args.before) || context;
124
+ const after = nonNegative(args.after) || context;
125
+ const multiline = args.multiline === true;
126
+ // Paging. Without it, a search that hits the cap could only be narrowed — and when
127
+ // the model could not narrow it, its remaining move was to read whole files, which
128
+ // is the expensive habit this tool exists to prevent.
129
+ const headLimit = typeof args.head_limit === "number" && args.head_limit >= 0 ? Math.floor(args.head_limit) : undefined;
130
+ const offset = nonNegative(args.offset);
131
+ const caseInsensitive = args.ignore_case === true;
132
+ const glob = typeof args.glob === "string" && args.glob.trim() ? args.glob.trim() : undefined;
133
+ const rawPath = typeof args.path === "string" && args.path.trim() ? args.path.trim() : undefined;
134
+ const units = searchUnits(ctx, rawPath);
135
+ const haveRg = await ripgrepAvailable();
136
+ // Gather labeled result lines across every root, then format once.
137
+ const lines = [];
138
+ for (const unit of units) {
139
+ const target = unit.sub ? join(unit.root, unit.sub) : unit.root;
140
+ let stat;
141
+ try {
142
+ stat = await fs.stat(target);
143
+ }
144
+ catch {
145
+ if (rawPath)
146
+ return fail(`path not found: ${rawPath}`);
147
+ continue; // a missing root in a multi-root sweep is skipped, not fatal
148
+ }
149
+ const o = { pattern, mode, before, after, multiline, caseInsensitive, glob, ctx, unit, isFile: stat.isFile() };
150
+ const got = haveRg ? await grepViaRipgrep(o) : await grepViaWalk(o);
151
+ if (got.invalid)
152
+ return failQuietly(got.invalid);
153
+ lines.push(...got.lines);
154
+ }
155
+ // Keep what the search found. Without this a grep is the one useful thing the model
156
+ // can do that leaves NOTHING behind: its result lives only in the transcript, which
157
+ // keeps the last 8 tool results and sweeps to 2 at a task boundary, while a read is
158
+ // re-rendered from disk into <working_files> on every step, forever. The harness was
159
+ // teaching, mechanically, that reading sticks and searching does not — so the model
160
+ // read, narrowly and repeatedly, where one search would have answered it.
161
+ if (mode === "content" && lines.length > 0)
162
+ await recordSearchHits(ctx, lines);
163
+ return formatGrep(mode, pattern, lines, headLimit, offset);
164
+ },
165
+ };
166
+ /** How many distinct files one search may put into the working set. */
167
+ const SEARCH_FOCUS_FILES = 5;
168
+ /** How many hits per file are worth keeping — beyond a handful it is a read, not a hit. */
169
+ const SEARCH_FOCUS_SPANS = 4;
170
+ /** Lines of context kept either side of a hit, so the match is readable in place. */
171
+ const SEARCH_FOCUS_PAD = 2;
172
+ /** `path:LINE:text` — a ripgrep/walk content hit. Context rows use `-` and are skipped. */
173
+ const CONTENT_HIT = /^(.+?):(\d+):/;
174
+ /**
175
+ * Record a bounded focus span around each hit, so the regions a search found ride in the
176
+ * working set the same way a read's do.
177
+ *
178
+ * BOUNDED on both axes: a broad search must not swamp the block with regions the model
179
+ * never asked to keep. And marked `viaSearch`, because a grep shows matching lines, never
180
+ * the file — the read-before-write gates must not open on the strength of it.
181
+ */
182
+ async function recordSearchHits(ctx, lines) {
183
+ const hits = new Map();
184
+ for (const line of lines) {
185
+ const m = CONTENT_HIT.exec(line);
186
+ if (!m)
187
+ continue;
188
+ const at = hits.get(m[1]);
189
+ if (at) {
190
+ if (at.length < SEARCH_FOCUS_SPANS)
191
+ at.push(Number(m[2]));
192
+ }
193
+ else if (hits.size < SEARCH_FOCUS_FILES) {
194
+ hits.set(m[1], [Number(m[2])]);
195
+ }
196
+ }
197
+ for (const [display, at] of hits) {
198
+ let abs;
199
+ try {
200
+ abs = resolvePath(ctx, display);
201
+ }
202
+ catch {
203
+ continue; // a label that doesn't round-trip is not worth guessing at
204
+ }
205
+ const prior = ctx.reads.get(abs);
206
+ let focus = prior?.focus;
207
+ for (const n of at) {
208
+ focus = addFocus(focus, { start: Math.max(1, n - SEARCH_FOCUS_PAD), end: n + SEARCH_FOCUS_PAD });
209
+ }
210
+ if (prior) {
211
+ // The recorded stat says what the model was last SHOWN, and matching inside a file
212
+ // does not change that — leave it alone so read_file's freshness check stays true.
213
+ prior.touchedAt = nextTouch();
214
+ if (focus)
215
+ prior.focus = focus;
216
+ continue;
217
+ }
218
+ try {
219
+ const st = await fs.stat(abs);
220
+ if (!st.isFile())
221
+ continue;
222
+ markScope(ctx, abs);
223
+ ctx.reads.set(abs, {
224
+ mtimeMs: st.mtimeMs,
225
+ size: st.size,
226
+ full: false,
227
+ touchedAt: nextTouch(),
228
+ viaSearch: true,
229
+ ...(focus ? { focus } : {}),
230
+ });
231
+ }
232
+ catch {
233
+ // Gone between the search and now — nothing to carry.
234
+ }
235
+ }
236
+ }
237
+ /** Combine all roots' labeled lines into the final tool result, capped per mode. */
238
+ /**
239
+ * Render the gathered lines, honouring the caller's window.
240
+ *
241
+ * The window is the point. Before it existed, a search that hit the cap could only say
242
+ * "narrow the search" — and when the model could not narrow it (a common identifier, a
243
+ * broad question), its remaining move was to read whole files. Being able to ask for the
244
+ * NEXT page turns a capped result from a dead end into a continuation, which is the
245
+ * difference between locating something and giving up and reading everything.
246
+ */
247
+ function formatGrep(mode, pattern, lines, headLimit, offset) {
248
+ if (lines.length === 0) {
249
+ return { output: "No matches found.", summary: `grep ${pattern} — no matches` };
250
+ }
251
+ if (mode === "count") {
252
+ let total = 0;
253
+ for (const line of lines) {
254
+ const n = parseInt(line.slice(line.lastIndexOf(":") + 1), 10);
255
+ if (!isNaN(n))
256
+ total += n;
257
+ }
258
+ return { output: lines.join("\n"), summary: `grep ${pattern} (${total} in ${lines.length} files)` };
259
+ }
260
+ // `head_limit: 0` means "no limit" and must not collapse into the default, so unset
261
+ // and zero stay distinguishable rather than being defaulted away.
262
+ const ceiling = mode === "content" ? MAX_OUTPUT_LINES : 100;
263
+ const limit = headLimit === undefined ? ceiling : headLimit === 0 ? lines.length : Math.min(headLimit, ceiling);
264
+ const page = lines.slice(offset, offset + limit);
265
+ const shown = offset + page.length;
266
+ const noun = mode === "content" ? "line" : "file";
267
+ if (page.length === 0) {
268
+ return {
269
+ output: `No further matches: offset ${offset} is past the ${lines.length} ${noun}s found.`,
270
+ summary: `grep ${pattern} — offset past the end`,
271
+ };
272
+ }
273
+ const out = [...page];
274
+ // Say what is left AND how to reach it. "Narrow the search" on its own was advice the
275
+ // model frequently could not take.
276
+ if (shown < lines.length) {
277
+ out.push(`… (${lines.length - shown} more ${noun}s — pass offset: ${shown} for the next page, or narrow the search)`);
278
+ }
279
+ return {
280
+ output: out.join("\n"),
281
+ summary: `grep ${pattern} (${lines.length} ${noun}${lines.length === 1 ? "" : "s"})`,
282
+ };
283
+ }
284
+ // ── ripgrep path (primary) ────────────────────────────────────────────────────
285
+ async function grepViaRipgrep(o) {
286
+ const args = ["--hidden", "--path-separator", "/"];
287
+ // ORDER IS LOAD-BEARING: ripgrep's `-g` rules are last-match-wins. The caller's own
288
+ // glob therefore has to be registered BEFORE the exclusions, or a filter as ordinary
289
+ // as `**/*` matches last and cancels every guard below it.
290
+ if (o.glob)
291
+ args.push("-g", o.glob);
292
+ // Skip the same noise directories the walk does, regardless of .gitignore.
293
+ for (const dir of DEFAULT_IGNORES)
294
+ args.push("-g", `!${dir}`);
295
+ // `--hidden` above means ripgrep would otherwise descend into dot-directories,
296
+ // which is exactly where secrets and other agents' saved sessions live. Exclude
297
+ // them so a search can't print what a direct read would refuse.
298
+ for (const pattern of SEARCH_EXCLUDE_GLOBS)
299
+ args.push("-g", `!${pattern}`);
300
+ if (o.caseInsensitive)
301
+ args.push("-i");
302
+ if (o.mode === "files_with_matches")
303
+ args.push("-l");
304
+ else if (o.mode === "count")
305
+ args.push("-c");
306
+ else {
307
+ args.push("-n", "--max-columns", "500");
308
+ if (o.before > 0)
309
+ args.push("-B", String(o.before));
310
+ if (o.after > 0)
311
+ args.push("-A", String(o.after));
312
+ }
313
+ // `--multiline-dotall` is what makes the flag useful: without it `.` still stops at a
314
+ // newline, so a pattern spanning lines only matches if it spells out every break.
315
+ if (o.multiline)
316
+ args.push("-U", "--multiline-dotall");
317
+ args.push("-e", o.pattern);
318
+ // Run FROM the unit's root so emitted paths are root-relative; we label them below.
319
+ args.push("--", o.unit.sub || ".");
320
+ const res = await runRipgrep(args, o.unit.root);
321
+ if (res.code === 2) {
322
+ return { lines: [], invalid: `invalid regular expression or search options: ${res.stderr || o.pattern}` };
323
+ }
324
+ if (res.code !== 0 && res.code !== 1) {
325
+ return grepViaWalk(o); // some other failure — fall back to the pure-Node walk
326
+ }
327
+ // Multi-root: prefix the root label so every path round-trips (a `--` group
328
+ // separator is left alone). Single-root: the lines are already cwd-relative.
329
+ // Searching `.` makes ripgrep emit `./a.txt`, so labelling produced `rootA/./a.txt`
330
+ // and the path no longer round-tripped back to a root. The walk path never had the
331
+ // `./`, so the two engines also printed different paths for the same hit.
332
+ const prefix = isMultiRoot(o.ctx) ? `${rootLabel(rootsOf(o.ctx), o.unit.root)}/` : "";
333
+ const clean = res.lines.map((l) => (l === "--" ? l : l.replace(/^\.\//, "")));
334
+ const lines = prefix ? clean.map((l) => (l === "--" ? l : prefix + l)) : clean;
335
+ return { lines };
336
+ }
337
+ // ── pure-Node walk (fallback when rg is unavailable) ──────────────────────────
338
+ async function grepViaWalk(o) {
339
+ let regexp;
340
+ try {
341
+ // `s` (dotAll) alongside `g` is what makes multiline useful: without dotAll `.` still
342
+ // refuses to cross a newline, so the flag would be accepted and quietly do nothing —
343
+ // a capability the tool claims and does not have.
344
+ const flags = `${o.caseInsensitive ? "i" : ""}${o.multiline ? "gs" : ""}`;
345
+ regexp = new RegExp(o.pattern, flags || undefined);
346
+ }
347
+ catch (error) {
348
+ return { lines: [], invalid: `invalid regular expression: ${error instanceof Error ? error.message : String(error)}` };
349
+ }
350
+ const target = o.unit.sub ? join(o.unit.root, o.unit.sub) : o.unit.root;
351
+ let files;
352
+ if (o.isFile) {
353
+ files = excludedFromSearch(target) ? [] : [{ abs: target, rel: relativize(o.ctx, target) }];
354
+ }
355
+ else {
356
+ const walked = await walkFiles(target, MAX_FILES);
357
+ // Same exclusions the ripgrep path applies, for the no-ripgrep fallback.
358
+ files = walked.files.filter((f) => !excludedFromSearch(f.abs));
359
+ if (o.glob) {
360
+ const g = globToRegExp(o.glob);
361
+ files = files.filter((f) => g.test(f.rel));
362
+ }
363
+ }
364
+ const out = [];
365
+ let truncated = false;
366
+ for (const file of files) {
367
+ if (truncated)
368
+ break;
369
+ let text;
370
+ try {
371
+ const buf = await fs.readFile(file.abs);
372
+ if (buf.length > MAX_FILE_BYTES || isBinary(buf))
373
+ continue;
374
+ text = buf.toString("utf8");
375
+ }
376
+ catch {
377
+ continue;
378
+ }
379
+ const lines = text.split("\n");
380
+ let fileCount = 0;
381
+ // MULTILINE: match against the WHOLE file, then map each match's character offset
382
+ // back to a line number. Matching line by line cannot see a construct that spans a
383
+ // break at all, which is the entire reason the flag exists.
384
+ if (o.multiline) {
385
+ regexp.lastIndex = 0;
386
+ for (let m = regexp.exec(text); m !== null; m = regexp.exec(text)) {
387
+ fileCount++;
388
+ if (o.mode === "content") {
389
+ const startLine = text.slice(0, m.index).split("\n").length - 1;
390
+ const endLine = startLine + (m[0].split("\n").length - 1);
391
+ const lo = Math.max(0, startLine - o.before);
392
+ const hi = Math.min(lines.length - 1, endLine + o.after);
393
+ for (let j = lo; j <= hi; j++) {
394
+ out.push(`${relativize(o.ctx, file.abs)}:${j + 1}:${lines[j]}`);
395
+ if (out.length >= MAX_OUTPUT_LINES) {
396
+ truncated = true;
397
+ break;
398
+ }
399
+ }
400
+ if (truncated)
401
+ break;
402
+ }
403
+ // A zero-width match never advances lastIndex, so this would spin forever.
404
+ if (m[0].length === 0)
405
+ regexp.lastIndex++;
406
+ }
407
+ if (fileCount > 0 && o.mode === "files_with_matches")
408
+ out.push(relativize(o.ctx, file.abs));
409
+ if (fileCount > 0 && o.mode === "count")
410
+ out.push(`${relativize(o.ctx, file.abs)}:${fileCount}`);
411
+ continue;
412
+ }
413
+ for (let i = 0; i < lines.length; i++) {
414
+ if (!regexp.test(lines[i]))
415
+ continue;
416
+ fileCount++;
417
+ if (o.mode === "content") {
418
+ const lo = Math.max(0, i - o.before);
419
+ const hi = Math.min(lines.length - 1, i + o.after);
420
+ for (let j = lo; j <= hi; j++) {
421
+ out.push(`${relativize(o.ctx, file.abs)}:${j + 1}:${lines[j]}`);
422
+ if (out.length >= MAX_OUTPUT_LINES) {
423
+ truncated = true;
424
+ break;
425
+ }
426
+ }
427
+ if (truncated)
428
+ break;
429
+ }
430
+ }
431
+ if (fileCount > 0 && o.mode === "files_with_matches")
432
+ out.push(relativize(o.ctx, file.abs));
433
+ if (fileCount > 0 && o.mode === "count")
434
+ out.push(`${relativize(o.ctx, file.abs)}:${fileCount}`);
435
+ }
436
+ return { lines: out };
437
+ }
438
+ /** A NUL byte in the first chunk is a cheap, reliable "not text" signal. */
439
+ function isBinary(buf) {
440
+ const n = Math.min(buf.length, 8192);
441
+ for (let i = 0; i < n; i++)
442
+ if (buf[i] === 0)
443
+ return true;
444
+ return false;
445
+ }
446
+ /** A non-negative whole number from a tool argument, or 0. */
447
+ function nonNegative(v) {
448
+ return typeof v === "number" && v > 0 ? Math.floor(v) : 0;
449
+ }
450
+ //# sourceMappingURL=grep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}