helixmind 0.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.

Potentially problematic release.


This version of helixmind might be problematic. Click here for more details.

Files changed (479) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +207 -0
  3. package/dist/cli/agent/autonomous.d.ts +10 -0
  4. package/dist/cli/agent/autonomous.d.ts.map +1 -0
  5. package/dist/cli/agent/autonomous.js +172 -0
  6. package/dist/cli/agent/autonomous.js.map +1 -0
  7. package/dist/cli/agent/loop.d.ts +76 -0
  8. package/dist/cli/agent/loop.d.ts.map +1 -0
  9. package/dist/cli/agent/loop.js +333 -0
  10. package/dist/cli/agent/loop.js.map +1 -0
  11. package/dist/cli/agent/permissions.d.ts +28 -0
  12. package/dist/cli/agent/permissions.d.ts.map +1 -0
  13. package/dist/cli/agent/permissions.js +180 -0
  14. package/dist/cli/agent/permissions.js.map +1 -0
  15. package/dist/cli/agent/sandbox.d.ts +17 -0
  16. package/dist/cli/agent/sandbox.d.ts.map +1 -0
  17. package/dist/cli/agent/sandbox.js +124 -0
  18. package/dist/cli/agent/sandbox.js.map +1 -0
  19. package/dist/cli/agent/tools/edit-file.d.ts +2 -0
  20. package/dist/cli/agent/tools/edit-file.d.ts.map +1 -0
  21. package/dist/cli/agent/tools/edit-file.js +49 -0
  22. package/dist/cli/agent/tools/edit-file.js.map +1 -0
  23. package/dist/cli/agent/tools/find.d.ts +2 -0
  24. package/dist/cli/agent/tools/find.d.ts.map +1 -0
  25. package/dist/cli/agent/tools/find.js +35 -0
  26. package/dist/cli/agent/tools/find.js.map +1 -0
  27. package/dist/cli/agent/tools/git-commit.d.ts +2 -0
  28. package/dist/cli/agent/tools/git-commit.d.ts.map +1 -0
  29. package/dist/cli/agent/tools/git-commit.js +51 -0
  30. package/dist/cli/agent/tools/git-commit.js.map +1 -0
  31. package/dist/cli/agent/tools/git-diff.d.ts +2 -0
  32. package/dist/cli/agent/tools/git-diff.d.ts.map +1 -0
  33. package/dist/cli/agent/tools/git-diff.js +36 -0
  34. package/dist/cli/agent/tools/git-diff.js.map +1 -0
  35. package/dist/cli/agent/tools/git-log.d.ts +2 -0
  36. package/dist/cli/agent/tools/git-log.d.ts.map +1 -0
  37. package/dist/cli/agent/tools/git-log.js +32 -0
  38. package/dist/cli/agent/tools/git-log.js.map +1 -0
  39. package/dist/cli/agent/tools/git-status.d.ts +2 -0
  40. package/dist/cli/agent/tools/git-status.d.ts.map +1 -0
  41. package/dist/cli/agent/tools/git-status.js +38 -0
  42. package/dist/cli/agent/tools/git-status.js.map +1 -0
  43. package/dist/cli/agent/tools/list-dir.d.ts +2 -0
  44. package/dist/cli/agent/tools/list-dir.d.ts.map +1 -0
  45. package/dist/cli/agent/tools/list-dir.js +73 -0
  46. package/dist/cli/agent/tools/list-dir.js.map +1 -0
  47. package/dist/cli/agent/tools/read-file.d.ts +2 -0
  48. package/dist/cli/agent/tools/read-file.d.ts.map +1 -0
  49. package/dist/cli/agent/tools/read-file.js +45 -0
  50. package/dist/cli/agent/tools/read-file.js.map +1 -0
  51. package/dist/cli/agent/tools/registry.d.ts +18 -0
  52. package/dist/cli/agent/tools/registry.d.ts.map +1 -0
  53. package/dist/cli/agent/tools/registry.js +31 -0
  54. package/dist/cli/agent/tools/registry.js.map +1 -0
  55. package/dist/cli/agent/tools/run-command.d.ts +2 -0
  56. package/dist/cli/agent/tools/run-command.d.ts.map +1 -0
  57. package/dist/cli/agent/tools/run-command.js +79 -0
  58. package/dist/cli/agent/tools/run-command.js.map +1 -0
  59. package/dist/cli/agent/tools/search.d.ts +2 -0
  60. package/dist/cli/agent/tools/search.d.ts.map +1 -0
  61. package/dist/cli/agent/tools/search.js +104 -0
  62. package/dist/cli/agent/tools/search.js.map +1 -0
  63. package/dist/cli/agent/tools/spiral-query.d.ts +2 -0
  64. package/dist/cli/agent/tools/spiral-query.d.ts.map +1 -0
  65. package/dist/cli/agent/tools/spiral-query.js +52 -0
  66. package/dist/cli/agent/tools/spiral-query.js.map +1 -0
  67. package/dist/cli/agent/tools/spiral-store.d.ts +2 -0
  68. package/dist/cli/agent/tools/spiral-store.d.ts.map +1 -0
  69. package/dist/cli/agent/tools/spiral-store.js +37 -0
  70. package/dist/cli/agent/tools/spiral-store.js.map +1 -0
  71. package/dist/cli/agent/tools/web-research.d.ts +2 -0
  72. package/dist/cli/agent/tools/web-research.d.ts.map +1 -0
  73. package/dist/cli/agent/tools/web-research.js +96 -0
  74. package/dist/cli/agent/tools/web-research.js.map +1 -0
  75. package/dist/cli/agent/tools/write-file.d.ts +2 -0
  76. package/dist/cli/agent/tools/write-file.d.ts.map +1 -0
  77. package/dist/cli/agent/tools/write-file.js +91 -0
  78. package/dist/cli/agent/tools/write-file.js.map +1 -0
  79. package/dist/cli/agent/undo.d.ts +30 -0
  80. package/dist/cli/agent/undo.d.ts.map +1 -0
  81. package/dist/cli/agent/undo.js +48 -0
  82. package/dist/cli/agent/undo.js.map +1 -0
  83. package/dist/cli/auth/callback-server.d.ts +15 -0
  84. package/dist/cli/auth/callback-server.d.ts.map +1 -0
  85. package/dist/cli/auth/callback-server.js +168 -0
  86. package/dist/cli/auth/callback-server.js.map +1 -0
  87. package/dist/cli/auth/feature-gate.d.ts +19 -0
  88. package/dist/cli/auth/feature-gate.d.ts.map +1 -0
  89. package/dist/cli/auth/feature-gate.js +74 -0
  90. package/dist/cli/auth/feature-gate.js.map +1 -0
  91. package/dist/cli/auth/guard.d.ts +10 -0
  92. package/dist/cli/auth/guard.d.ts.map +1 -0
  93. package/dist/cli/auth/guard.js +46 -0
  94. package/dist/cli/auth/guard.js.map +1 -0
  95. package/dist/cli/auth/login.d.ts +22 -0
  96. package/dist/cli/auth/login.d.ts.map +1 -0
  97. package/dist/cli/auth/login.js +194 -0
  98. package/dist/cli/auth/login.js.map +1 -0
  99. package/dist/cli/auth/logout.d.ts +6 -0
  100. package/dist/cli/auth/logout.d.ts.map +1 -0
  101. package/dist/cli/auth/logout.js +36 -0
  102. package/dist/cli/auth/logout.js.map +1 -0
  103. package/dist/cli/bench/dataset.d.ts +13 -0
  104. package/dist/cli/bench/dataset.d.ts.map +1 -0
  105. package/dist/cli/bench/dataset.js +97 -0
  106. package/dist/cli/bench/dataset.js.map +1 -0
  107. package/dist/cli/bench/harness.d.ts +7 -0
  108. package/dist/cli/bench/harness.d.ts.map +1 -0
  109. package/dist/cli/bench/harness.js +135 -0
  110. package/dist/cli/bench/harness.js.map +1 -0
  111. package/dist/cli/bench/metrics.d.ts +15 -0
  112. package/dist/cli/bench/metrics.d.ts.map +1 -0
  113. package/dist/cli/bench/metrics.js +98 -0
  114. package/dist/cli/bench/metrics.js.map +1 -0
  115. package/dist/cli/bench/output.d.ts +42 -0
  116. package/dist/cli/bench/output.d.ts.map +1 -0
  117. package/dist/cli/bench/output.js +140 -0
  118. package/dist/cli/bench/output.js.map +1 -0
  119. package/dist/cli/bench/prompt.d.ts +13 -0
  120. package/dist/cli/bench/prompt.d.ts.map +1 -0
  121. package/dist/cli/bench/prompt.js +106 -0
  122. package/dist/cli/bench/prompt.js.map +1 -0
  123. package/dist/cli/bench/runner.d.ts +14 -0
  124. package/dist/cli/bench/runner.d.ts.map +1 -0
  125. package/dist/cli/bench/runner.js +334 -0
  126. package/dist/cli/bench/runner.js.map +1 -0
  127. package/dist/cli/bench/types.d.ts +109 -0
  128. package/dist/cli/bench/types.d.ts.map +1 -0
  129. package/dist/cli/bench/types.js +2 -0
  130. package/dist/cli/bench/types.js.map +1 -0
  131. package/dist/cli/bench/ui.d.ts +12 -0
  132. package/dist/cli/bench/ui.d.ts.map +1 -0
  133. package/dist/cli/bench/ui.js +126 -0
  134. package/dist/cli/bench/ui.js.map +1 -0
  135. package/dist/cli/brain/archive.d.ts +33 -0
  136. package/dist/cli/brain/archive.d.ts.map +1 -0
  137. package/dist/cli/brain/archive.js +159 -0
  138. package/dist/cli/brain/archive.js.map +1 -0
  139. package/dist/cli/brain/control-protocol.d.ts +159 -0
  140. package/dist/cli/brain/control-protocol.d.ts.map +1 -0
  141. package/dist/cli/brain/control-protocol.js +41 -0
  142. package/dist/cli/brain/control-protocol.js.map +1 -0
  143. package/dist/cli/brain/exporter.d.ts +34 -0
  144. package/dist/cli/brain/exporter.d.ts.map +1 -0
  145. package/dist/cli/brain/exporter.js +37 -0
  146. package/dist/cli/brain/exporter.js.map +1 -0
  147. package/dist/cli/brain/generator.d.ts +67 -0
  148. package/dist/cli/brain/generator.d.ts.map +1 -0
  149. package/dist/cli/brain/generator.js +239 -0
  150. package/dist/cli/brain/generator.js.map +1 -0
  151. package/dist/cli/brain/relay-client.d.ts +8 -0
  152. package/dist/cli/brain/relay-client.d.ts.map +1 -0
  153. package/dist/cli/brain/relay-client.js +173 -0
  154. package/dist/cli/brain/relay-client.js.map +1 -0
  155. package/dist/cli/brain/server.d.ts +34 -0
  156. package/dist/cli/brain/server.d.ts.map +1 -0
  157. package/dist/cli/brain/server.js +425 -0
  158. package/dist/cli/brain/server.js.map +1 -0
  159. package/dist/cli/brain/template.d.ts +3 -0
  160. package/dist/cli/brain/template.d.ts.map +1 -0
  161. package/dist/cli/brain/template.js +2072 -0
  162. package/dist/cli/brain/template.js.map +1 -0
  163. package/dist/cli/checkpoints/browser.d.ts +27 -0
  164. package/dist/cli/checkpoints/browser.d.ts.map +1 -0
  165. package/dist/cli/checkpoints/browser.js +238 -0
  166. package/dist/cli/checkpoints/browser.js.map +1 -0
  167. package/dist/cli/checkpoints/keybinding.d.ts +22 -0
  168. package/dist/cli/checkpoints/keybinding.d.ts.map +1 -0
  169. package/dist/cli/checkpoints/keybinding.js +43 -0
  170. package/dist/cli/checkpoints/keybinding.js.map +1 -0
  171. package/dist/cli/checkpoints/revert.d.ts +37 -0
  172. package/dist/cli/checkpoints/revert.d.ts.map +1 -0
  173. package/dist/cli/checkpoints/revert.js +144 -0
  174. package/dist/cli/checkpoints/revert.js.map +1 -0
  175. package/dist/cli/checkpoints/store.d.ts +48 -0
  176. package/dist/cli/checkpoints/store.d.ts.map +1 -0
  177. package/dist/cli/checkpoints/store.js +188 -0
  178. package/dist/cli/checkpoints/store.js.map +1 -0
  179. package/dist/cli/commands/archive.d.ts +7 -0
  180. package/dist/cli/commands/archive.d.ts.map +1 -0
  181. package/dist/cli/commands/archive.js +66 -0
  182. package/dist/cli/commands/archive.js.map +1 -0
  183. package/dist/cli/commands/auth.d.ts +10 -0
  184. package/dist/cli/commands/auth.d.ts.map +1 -0
  185. package/dist/cli/commands/auth.js +44 -0
  186. package/dist/cli/commands/auth.js.map +1 -0
  187. package/dist/cli/commands/bench.d.ts +25 -0
  188. package/dist/cli/commands/bench.d.ts.map +1 -0
  189. package/dist/cli/commands/bench.js +114 -0
  190. package/dist/cli/commands/bench.js.map +1 -0
  191. package/dist/cli/commands/chat.d.ts +11 -0
  192. package/dist/cli/commands/chat.d.ts.map +1 -0
  193. package/dist/cli/commands/chat.js +2321 -0
  194. package/dist/cli/commands/chat.js.map +1 -0
  195. package/dist/cli/commands/config.d.ts +4 -0
  196. package/dist/cli/commands/config.d.ts.map +1 -0
  197. package/dist/cli/commands/config.js +41 -0
  198. package/dist/cli/commands/config.js.map +1 -0
  199. package/dist/cli/commands/feed.d.ts +6 -0
  200. package/dist/cli/commands/feed.d.ts.map +1 -0
  201. package/dist/cli/commands/feed.js +95 -0
  202. package/dist/cli/commands/feed.js.map +1 -0
  203. package/dist/cli/commands/helix-menu.d.ts +4 -0
  204. package/dist/cli/commands/helix-menu.d.ts.map +1 -0
  205. package/dist/cli/commands/helix-menu.js +400 -0
  206. package/dist/cli/commands/helix-menu.js.map +1 -0
  207. package/dist/cli/commands/init.d.ts +2 -0
  208. package/dist/cli/commands/init.d.ts.map +1 -0
  209. package/dist/cli/commands/init.js +26 -0
  210. package/dist/cli/commands/init.js.map +1 -0
  211. package/dist/cli/commands/setup.d.ts +20 -0
  212. package/dist/cli/commands/setup.d.ts.map +1 -0
  213. package/dist/cli/commands/setup.js +314 -0
  214. package/dist/cli/commands/setup.js.map +1 -0
  215. package/dist/cli/commands/spiral.d.ts +4 -0
  216. package/dist/cli/commands/spiral.d.ts.map +1 -0
  217. package/dist/cli/commands/spiral.js +81 -0
  218. package/dist/cli/commands/spiral.js.map +1 -0
  219. package/dist/cli/config/store.d.ts +72 -0
  220. package/dist/cli/config/store.d.ts.map +1 -0
  221. package/dist/cli/config/store.js +241 -0
  222. package/dist/cli/config/store.js.map +1 -0
  223. package/dist/cli/context/assembler.d.ts +8 -0
  224. package/dist/cli/context/assembler.d.ts.map +1 -0
  225. package/dist/cli/context/assembler.js +124 -0
  226. package/dist/cli/context/assembler.js.map +1 -0
  227. package/dist/cli/context/project.d.ts +13 -0
  228. package/dist/cli/context/project.d.ts.map +1 -0
  229. package/dist/cli/context/project.js +126 -0
  230. package/dist/cli/context/project.js.map +1 -0
  231. package/dist/cli/context/session-buffer.d.ts +57 -0
  232. package/dist/cli/context/session-buffer.d.ts.map +1 -0
  233. package/dist/cli/context/session-buffer.js +268 -0
  234. package/dist/cli/context/session-buffer.js.map +1 -0
  235. package/dist/cli/context/trimmer.d.ts +26 -0
  236. package/dist/cli/context/trimmer.d.ts.map +1 -0
  237. package/dist/cli/context/trimmer.js +105 -0
  238. package/dist/cli/context/trimmer.js.map +1 -0
  239. package/dist/cli/feed/analyzer.d.ts +17 -0
  240. package/dist/cli/feed/analyzer.d.ts.map +1 -0
  241. package/dist/cli/feed/analyzer.js +220 -0
  242. package/dist/cli/feed/analyzer.js.map +1 -0
  243. package/dist/cli/feed/intent.d.ts +8 -0
  244. package/dist/cli/feed/intent.d.ts.map +1 -0
  245. package/dist/cli/feed/intent.js +70 -0
  246. package/dist/cli/feed/intent.js.map +1 -0
  247. package/dist/cli/feed/parser.d.ts +23 -0
  248. package/dist/cli/feed/parser.d.ts.map +1 -0
  249. package/dist/cli/feed/parser.js +166 -0
  250. package/dist/cli/feed/parser.js.map +1 -0
  251. package/dist/cli/feed/pipeline.d.ts +32 -0
  252. package/dist/cli/feed/pipeline.d.ts.map +1 -0
  253. package/dist/cli/feed/pipeline.js +242 -0
  254. package/dist/cli/feed/pipeline.js.map +1 -0
  255. package/dist/cli/feed/reader.d.ts +10 -0
  256. package/dist/cli/feed/reader.d.ts.map +1 -0
  257. package/dist/cli/feed/reader.js +61 -0
  258. package/dist/cli/feed/reader.js.map +1 -0
  259. package/dist/cli/feed/scanner.d.ts +10 -0
  260. package/dist/cli/feed/scanner.d.ts.map +1 -0
  261. package/dist/cli/feed/scanner.js +124 -0
  262. package/dist/cli/feed/scanner.js.map +1 -0
  263. package/dist/cli/feed/watcher.d.ts +14 -0
  264. package/dist/cli/feed/watcher.d.ts.map +1 -0
  265. package/dist/cli/feed/watcher.js +76 -0
  266. package/dist/cli/feed/watcher.js.map +1 -0
  267. package/dist/cli/index.d.ts +3 -0
  268. package/dist/cli/index.d.ts.map +1 -0
  269. package/dist/cli/index.js +204 -0
  270. package/dist/cli/index.js.map +1 -0
  271. package/dist/cli/providers/anthropic.d.ts +10 -0
  272. package/dist/cli/providers/anthropic.d.ts.map +1 -0
  273. package/dist/cli/providers/anthropic.js +117 -0
  274. package/dist/cli/providers/anthropic.js.map +1 -0
  275. package/dist/cli/providers/ollama.d.ts +37 -0
  276. package/dist/cli/providers/ollama.d.ts.map +1 -0
  277. package/dist/cli/providers/ollama.js +151 -0
  278. package/dist/cli/providers/ollama.js.map +1 -0
  279. package/dist/cli/providers/openai.d.ts +13 -0
  280. package/dist/cli/providers/openai.d.ts.map +1 -0
  281. package/dist/cli/providers/openai.js +283 -0
  282. package/dist/cli/providers/openai.js.map +1 -0
  283. package/dist/cli/providers/rate-limiter.d.ts +51 -0
  284. package/dist/cli/providers/rate-limiter.d.ts.map +1 -0
  285. package/dist/cli/providers/rate-limiter.js +164 -0
  286. package/dist/cli/providers/rate-limiter.js.map +1 -0
  287. package/dist/cli/providers/registry.d.ts +16 -0
  288. package/dist/cli/providers/registry.d.ts.map +1 -0
  289. package/dist/cli/providers/registry.js +99 -0
  290. package/dist/cli/providers/registry.js.map +1 -0
  291. package/dist/cli/providers/types.d.ts +61 -0
  292. package/dist/cli/providers/types.d.ts.map +1 -0
  293. package/dist/cli/providers/types.js +2 -0
  294. package/dist/cli/providers/types.js.map +1 -0
  295. package/dist/cli/sessions/manager.d.ts +69 -0
  296. package/dist/cli/sessions/manager.d.ts.map +1 -0
  297. package/dist/cli/sessions/manager.js +200 -0
  298. package/dist/cli/sessions/manager.js.map +1 -0
  299. package/dist/cli/sessions/session.d.ts +54 -0
  300. package/dist/cli/sessions/session.d.ts.map +1 -0
  301. package/dist/cli/sessions/session.js +70 -0
  302. package/dist/cli/sessions/session.js.map +1 -0
  303. package/dist/cli/sessions/tab-view.d.ts +18 -0
  304. package/dist/cli/sessions/tab-view.d.ts.map +1 -0
  305. package/dist/cli/sessions/tab-view.js +134 -0
  306. package/dist/cli/sessions/tab-view.js.map +1 -0
  307. package/dist/cli/ui/activity.d.ts +82 -0
  308. package/dist/cli/ui/activity.d.ts.map +1 -0
  309. package/dist/cli/ui/activity.js +309 -0
  310. package/dist/cli/ui/activity.js.map +1 -0
  311. package/dist/cli/ui/chat-view.d.ts +10 -0
  312. package/dist/cli/ui/chat-view.d.ts.map +1 -0
  313. package/dist/cli/ui/chat-view.js +165 -0
  314. package/dist/cli/ui/chat-view.js.map +1 -0
  315. package/dist/cli/ui/command-suggest.d.ts +22 -0
  316. package/dist/cli/ui/command-suggest.d.ts.map +1 -0
  317. package/dist/cli/ui/command-suggest.js +115 -0
  318. package/dist/cli/ui/command-suggest.js.map +1 -0
  319. package/dist/cli/ui/logo.d.ts +3 -0
  320. package/dist/cli/ui/logo.d.ts.map +1 -0
  321. package/dist/cli/ui/logo.js +25 -0
  322. package/dist/cli/ui/logo.js.map +1 -0
  323. package/dist/cli/ui/progress.d.ts +21 -0
  324. package/dist/cli/ui/progress.d.ts.map +1 -0
  325. package/dist/cli/ui/progress.js +125 -0
  326. package/dist/cli/ui/progress.js.map +1 -0
  327. package/dist/cli/ui/select-menu.d.ts +22 -0
  328. package/dist/cli/ui/select-menu.d.ts.map +1 -0
  329. package/dist/cli/ui/select-menu.js +152 -0
  330. package/dist/cli/ui/select-menu.js.map +1 -0
  331. package/dist/cli/ui/spinner.d.ts +3 -0
  332. package/dist/cli/ui/spinner.d.ts.map +1 -0
  333. package/dist/cli/ui/spinner.js +14 -0
  334. package/dist/cli/ui/spinner.js.map +1 -0
  335. package/dist/cli/ui/statusbar.d.ts +65 -0
  336. package/dist/cli/ui/statusbar.d.ts.map +1 -0
  337. package/dist/cli/ui/statusbar.js +272 -0
  338. package/dist/cli/ui/statusbar.js.map +1 -0
  339. package/dist/cli/ui/theme.d.ts +20 -0
  340. package/dist/cli/ui/theme.d.ts.map +1 -0
  341. package/dist/cli/ui/theme.js +25 -0
  342. package/dist/cli/ui/theme.js.map +1 -0
  343. package/dist/cli/ui/tool-output.d.ts +25 -0
  344. package/dist/cli/ui/tool-output.d.ts.map +1 -0
  345. package/dist/cli/ui/tool-output.js +171 -0
  346. package/dist/cli/ui/tool-output.js.map +1 -0
  347. package/dist/cli/validation/autofix.d.ts +32 -0
  348. package/dist/cli/validation/autofix.d.ts.map +1 -0
  349. package/dist/cli/validation/autofix.js +148 -0
  350. package/dist/cli/validation/autofix.js.map +1 -0
  351. package/dist/cli/validation/classifier.d.ts +17 -0
  352. package/dist/cli/validation/classifier.d.ts.map +1 -0
  353. package/dist/cli/validation/classifier.js +174 -0
  354. package/dist/cli/validation/classifier.js.map +1 -0
  355. package/dist/cli/validation/criteria.d.ts +22 -0
  356. package/dist/cli/validation/criteria.d.ts.map +1 -0
  357. package/dist/cli/validation/criteria.js +188 -0
  358. package/dist/cli/validation/criteria.js.map +1 -0
  359. package/dist/cli/validation/dynamic-checks.d.ts +16 -0
  360. package/dist/cli/validation/dynamic-checks.d.ts.map +1 -0
  361. package/dist/cli/validation/dynamic-checks.js +109 -0
  362. package/dist/cli/validation/dynamic-checks.js.map +1 -0
  363. package/dist/cli/validation/model.d.ts +16 -0
  364. package/dist/cli/validation/model.d.ts.map +1 -0
  365. package/dist/cli/validation/model.js +59 -0
  366. package/dist/cli/validation/model.js.map +1 -0
  367. package/dist/cli/validation/reporter.d.ts +18 -0
  368. package/dist/cli/validation/reporter.d.ts.map +1 -0
  369. package/dist/cli/validation/reporter.js +167 -0
  370. package/dist/cli/validation/reporter.js.map +1 -0
  371. package/dist/cli/validation/spiral-checks.d.ts +12 -0
  372. package/dist/cli/validation/spiral-checks.d.ts.map +1 -0
  373. package/dist/cli/validation/spiral-checks.js +167 -0
  374. package/dist/cli/validation/spiral-checks.js.map +1 -0
  375. package/dist/cli/validation/static-checks.d.ts +26 -0
  376. package/dist/cli/validation/static-checks.d.ts.map +1 -0
  377. package/dist/cli/validation/static-checks.js +492 -0
  378. package/dist/cli/validation/static-checks.js.map +1 -0
  379. package/dist/cli/validation/stats.d.ts +29 -0
  380. package/dist/cli/validation/stats.d.ts.map +1 -0
  381. package/dist/cli/validation/stats.js +137 -0
  382. package/dist/cli/validation/stats.js.map +1 -0
  383. package/dist/index.d.ts +3 -0
  384. package/dist/index.d.ts.map +1 -0
  385. package/dist/index.js +35 -0
  386. package/dist/index.js.map +1 -0
  387. package/dist/server.d.ts +8 -0
  388. package/dist/server.d.ts.map +1 -0
  389. package/dist/server.js +43 -0
  390. package/dist/server.js.map +1 -0
  391. package/dist/spiral/cloud/content-extractor.d.ts +27 -0
  392. package/dist/spiral/cloud/content-extractor.d.ts.map +1 -0
  393. package/dist/spiral/cloud/content-extractor.js +175 -0
  394. package/dist/spiral/cloud/content-extractor.js.map +1 -0
  395. package/dist/spiral/cloud/search-provider.d.ts +22 -0
  396. package/dist/spiral/cloud/search-provider.d.ts.map +1 -0
  397. package/dist/spiral/cloud/search-provider.js +212 -0
  398. package/dist/spiral/cloud/search-provider.js.map +1 -0
  399. package/dist/spiral/cloud/topic-detector.d.ts +25 -0
  400. package/dist/spiral/cloud/topic-detector.d.ts.map +1 -0
  401. package/dist/spiral/cloud/topic-detector.js +196 -0
  402. package/dist/spiral/cloud/topic-detector.js.map +1 -0
  403. package/dist/spiral/cloud/web-enricher.d.ts +58 -0
  404. package/dist/spiral/cloud/web-enricher.d.ts.map +1 -0
  405. package/dist/spiral/cloud/web-enricher.js +170 -0
  406. package/dist/spiral/cloud/web-enricher.js.map +1 -0
  407. package/dist/spiral/compression.d.ts +54 -0
  408. package/dist/spiral/compression.d.ts.map +1 -0
  409. package/dist/spiral/compression.js +175 -0
  410. package/dist/spiral/compression.js.map +1 -0
  411. package/dist/spiral/embeddings.d.ts +24 -0
  412. package/dist/spiral/embeddings.d.ts.map +1 -0
  413. package/dist/spiral/embeddings.js +69 -0
  414. package/dist/spiral/embeddings.js.map +1 -0
  415. package/dist/spiral/engine.d.ts +95 -0
  416. package/dist/spiral/engine.d.ts.map +1 -0
  417. package/dist/spiral/engine.js +271 -0
  418. package/dist/spiral/engine.js.map +1 -0
  419. package/dist/spiral/injection.d.ts +29 -0
  420. package/dist/spiral/injection.d.ts.map +1 -0
  421. package/dist/spiral/injection.js +164 -0
  422. package/dist/spiral/injection.js.map +1 -0
  423. package/dist/spiral/relevance.d.ts +37 -0
  424. package/dist/spiral/relevance.d.ts.map +1 -0
  425. package/dist/spiral/relevance.js +75 -0
  426. package/dist/spiral/relevance.js.map +1 -0
  427. package/dist/storage/database.d.ts +11 -0
  428. package/dist/storage/database.d.ts.map +1 -0
  429. package/dist/storage/database.js +141 -0
  430. package/dist/storage/database.js.map +1 -0
  431. package/dist/storage/edges.d.ts +25 -0
  432. package/dist/storage/edges.d.ts.map +1 -0
  433. package/dist/storage/edges.js +69 -0
  434. package/dist/storage/edges.js.map +1 -0
  435. package/dist/storage/nodes.d.ts +45 -0
  436. package/dist/storage/nodes.d.ts.map +1 -0
  437. package/dist/storage/nodes.js +124 -0
  438. package/dist/storage/nodes.js.map +1 -0
  439. package/dist/storage/vectors.d.ts +25 -0
  440. package/dist/storage/vectors.d.ts.map +1 -0
  441. package/dist/storage/vectors.js +110 -0
  442. package/dist/storage/vectors.js.map +1 -0
  443. package/dist/tools/spiral-compact.d.ts +14 -0
  444. package/dist/tools/spiral-compact.d.ts.map +1 -0
  445. package/dist/tools/spiral-compact.js +14 -0
  446. package/dist/tools/spiral-compact.js.map +1 -0
  447. package/dist/tools/spiral-query.d.ts +18 -0
  448. package/dist/tools/spiral-query.d.ts.map +1 -0
  449. package/dist/tools/spiral-query.js +16 -0
  450. package/dist/tools/spiral-query.js.map +1 -0
  451. package/dist/tools/spiral-relate.d.ts +21 -0
  452. package/dist/tools/spiral-relate.d.ts.map +1 -0
  453. package/dist/tools/spiral-relate.js +21 -0
  454. package/dist/tools/spiral-relate.js.map +1 -0
  455. package/dist/tools/spiral-status.d.ts +8 -0
  456. package/dist/tools/spiral-status.d.ts.map +1 -0
  457. package/dist/tools/spiral-status.js +10 -0
  458. package/dist/tools/spiral-status.js.map +1 -0
  459. package/dist/tools/spiral-store.d.ts +41 -0
  460. package/dist/tools/spiral-store.d.ts.map +1 -0
  461. package/dist/tools/spiral-store.js +22 -0
  462. package/dist/tools/spiral-store.js.map +1 -0
  463. package/dist/types.d.ts +92 -0
  464. package/dist/types.d.ts.map +1 -0
  465. package/dist/types.js +9 -0
  466. package/dist/types.js.map +1 -0
  467. package/dist/utils/config.d.ts +14 -0
  468. package/dist/utils/config.d.ts.map +1 -0
  469. package/dist/utils/config.js +44 -0
  470. package/dist/utils/config.js.map +1 -0
  471. package/dist/utils/logger.d.ts +10 -0
  472. package/dist/utils/logger.d.ts.map +1 -0
  473. package/dist/utils/logger.js +40 -0
  474. package/dist/utils/logger.js.map +1 -0
  475. package/dist/utils/tokens.d.ts +21 -0
  476. package/dist/utils/tokens.d.ts.map +1 -0
  477. package/dist/utils/tokens.js +33 -0
  478. package/dist/utils/tokens.js.map +1 -0
  479. package/package.json +90 -0
@@ -0,0 +1,124 @@
1
+ import { resolve, normalize, sep } from 'node:path';
2
+ import { statSync } from 'node:fs';
3
+ /** Maximum file size in bytes (10MB) */
4
+ const MAX_FILE_SIZE = 10 * 1024 * 1024;
5
+ /** Maximum content length in characters (5MB) */
6
+ const MAX_CONTENT_LENGTH = 5 * 1024 * 1024;
7
+ /** Sensitive files that should never be read or written by the agent */
8
+ const BLOCKED_FILES = [
9
+ '.env', '.env.local', '.env.production', '.env.staging',
10
+ 'id_rsa', 'id_ed25519', 'id_ecdsa',
11
+ '.ssh/config', '.npmrc', '.pypirc',
12
+ 'credentials.json', 'serviceAccountKey.json',
13
+ ];
14
+ /** Dangerous command patterns that require extra confirmation */
15
+ const DANGEROUS_PATTERNS = [
16
+ /\brm\s+(-rf?|--recursive)/,
17
+ /\bsudo\b/,
18
+ /\bchmod\b.*777/,
19
+ /\bdd\b\s/,
20
+ /\b>\s*\/dev\//,
21
+ /\bcurl\b.*\|\s*(ba)?sh/,
22
+ /\bwget\b.*\|\s*(ba)?sh/,
23
+ /\bnpm\s+publish/,
24
+ /\bgit\s+push\s+.*--force/,
25
+ /\bdrop\s+(database|table)/i,
26
+ /\btruncate\s+table/i,
27
+ /\bformat\s+[a-z]:/i,
28
+ /\bdel\s+\/[sq]/i,
29
+ /\brmdir\s+\/s/i,
30
+ ];
31
+ export class SecurityError extends Error {
32
+ constructor(message) {
33
+ super(message);
34
+ this.name = 'SecurityError';
35
+ }
36
+ }
37
+ /**
38
+ * Validate that a requested path is within the project root
39
+ * and not a sensitive file. Returns the resolved absolute path.
40
+ */
41
+ export function validatePath(requestedPath, projectRoot) {
42
+ // Normalize the requested path to handle . and .. sequences
43
+ let normalizedPath = normalize(requestedPath);
44
+ // Resolve against project root
45
+ const resolved = resolve(projectRoot, normalizedPath);
46
+ // Ensure the resolved path starts with the normalized project root
47
+ const normalizedRoot = normalize(projectRoot);
48
+ if (!resolved.startsWith(normalizedRoot)) {
49
+ throw new SecurityError(`Access denied: ${requestedPath} is outside the project directory`);
50
+ }
51
+ // Check for path traversal attempts (multiple consecutive separators)
52
+ if (normalizedPath.split(sep).length > 10) {
53
+ throw new SecurityError(`Access denied: Path too deep: ${requestedPath}`);
54
+ }
55
+ // Normalize for case-insensitive blocked file check
56
+ const lower = resolved.toLowerCase().replace(/\\/g, '/');
57
+ for (const blocked of BLOCKED_FILES) {
58
+ if (lower.endsWith('/' + blocked) || lower.endsWith('\\' + blocked) || lower === blocked) {
59
+ throw new SecurityError(`Access denied: ${requestedPath} is a sensitive file`);
60
+ }
61
+ }
62
+ // Check if path exists and is not a symlink (follow symlinks could bypass security)
63
+ try {
64
+ const stats = statSync(resolved);
65
+ if (stats.isSymbolicLink()) {
66
+ throw new SecurityError(`Access denied: Symlinks are not allowed`);
67
+ }
68
+ }
69
+ catch (err) {
70
+ // Path doesn't exist yet, that's fine for new files
71
+ if (err.code !== 'ENOENT') {
72
+ throw new SecurityError(`Access denied: Invalid path: ${requestedPath}`);
73
+ }
74
+ }
75
+ // Verify the directory exists (or can be created)
76
+ try {
77
+ const dirStats = statSync(normalizedRoot);
78
+ if (!dirStats.isDirectory()) {
79
+ throw new SecurityError(`Access denied: Project root is not a directory`);
80
+ }
81
+ }
82
+ catch (err) {
83
+ throw new SecurityError(`Access denied: Project root not accessible: ${projectRoot}`);
84
+ }
85
+ return resolved;
86
+ }
87
+ /**
88
+ * Classify a shell command's danger level.
89
+ */
90
+ export function classifyCommand(cmd) {
91
+ // Sanitize command: remove shell metacharacters
92
+ const sanitized = cmd
93
+ .replace(/[^\w\s|;&<>()]/g, '') // Remove dangerous characters
94
+ .trim();
95
+ if (!sanitized || sanitized.length === 0) {
96
+ throw new SecurityError('Command cannot be empty');
97
+ }
98
+ // Check for command injection attempts
99
+ if (sanitized.length > 10000) {
100
+ throw new SecurityError('Command too long');
101
+ }
102
+ // Check for blocked commands
103
+ if (isBlockedCommand(sanitized)) {
104
+ throw new SecurityError('This command is blocked');
105
+ }
106
+ // Check for dangerous patterns
107
+ if (DANGEROUS_PATTERNS.some(p => p.test(sanitized)))
108
+ return 'dangerous';
109
+ // Check for potentially dangerous operations
110
+ if (/\brm\s/.test(sanitized) || /\bmv\s/.test(sanitized) || /\bgit\s+push/.test(sanitized))
111
+ return 'ask';
112
+ return 'safe';
113
+ }
114
+ /**
115
+ * Check if a command is blocked entirely (should never run).
116
+ */
117
+ export function isBlockedCommand(cmd) {
118
+ const blocked = [
119
+ /\bformat\s+c:/i,
120
+ /:\(\)\s*\{[^}]*\|\s*:.*&\s*\}\s*;/, // fork bomb
121
+ ];
122
+ return blocked.some(p => p.test(cmd));
123
+ }
124
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../../src/cli/agent/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=edit-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/edit-file.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { registerTool } from './registry.js';
4
+ import { validatePath } from '../sandbox.js';
5
+ registerTool({
6
+ definition: {
7
+ name: 'edit_file',
8
+ description: 'Make targeted edits to a file. Replaces a specific string with a new string. The old_string must appear exactly once in the file for a precise match.',
9
+ input_schema: {
10
+ type: 'object',
11
+ properties: {
12
+ path: { type: 'string', description: 'Relative path to the file' },
13
+ old_string: { type: 'string', description: 'The exact string to find and replace (must be unique in the file)' },
14
+ new_string: { type: 'string', description: 'The replacement string (empty string to delete)' },
15
+ },
16
+ required: ['path', 'old_string', 'new_string'],
17
+ },
18
+ },
19
+ async execute(input, ctx) {
20
+ const filePath = validatePath(input.path, ctx.projectRoot);
21
+ const oldStr = input.old_string;
22
+ const newStr = input.new_string;
23
+ const original = readFileSync(filePath, 'utf-8');
24
+ const occurrences = original.split(oldStr).length - 1;
25
+ if (occurrences === 0) {
26
+ return `Error: old_string not found in ${input.path}. The exact text does not exist in the file.`;
27
+ }
28
+ if (occurrences > 1) {
29
+ return `Error: old_string found ${occurrences} times in ${input.path}. It must be unique. Provide more surrounding context to make it unique.`;
30
+ }
31
+ const updated = original.replace(oldStr, newStr);
32
+ // Write the file
33
+ writeFileSync(filePath, updated, 'utf-8');
34
+ // Push to undo stack
35
+ ctx.undoStack.push({
36
+ id: randomUUID(),
37
+ timestamp: Date.now(),
38
+ tool: 'edit_file',
39
+ path: filePath,
40
+ originalContent: original,
41
+ newContent: updated,
42
+ });
43
+ // Generate a simple diff description
44
+ const oldLines = oldStr.split('\n');
45
+ const newLines = newStr.split('\n');
46
+ return `File edited: ${input.path}\n Replaced ${oldLines.length} line(s) with ${newLines.length} line(s).`;
47
+ },
48
+ });
49
+ //# sourceMappingURL=edit-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/edit-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uJAAuJ;QACpK,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBAClE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mEAAmE,EAAE;gBAChH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;aAC/F;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC;SAC/C;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAoB,CAAC;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,UAAoB,CAAC;QAE1C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtD,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,kCAAkC,KAAK,CAAC,IAAI,8CAA8C,CAAC;QACpG,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,2BAA2B,WAAW,aAAa,KAAK,CAAC,IAAI,0EAA0E,CAAC;QACjJ,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjD,iBAAiB;QACjB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1C,qBAAqB;QACrB,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YACjB,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE,QAAQ;YACzB,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpC,OAAO,gBAAgB,KAAK,CAAC,IAAI,gBAAgB,QAAQ,CAAC,MAAM,iBAAiB,QAAQ,CAAC,MAAM,WAAW,CAAC;IAC9G,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/find.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import fg from 'fast-glob';
2
+ import { registerTool } from './registry.js';
3
+ import { validatePath } from '../sandbox.js';
4
+ registerTool({
5
+ definition: {
6
+ name: 'find_files',
7
+ description: 'Find files by name pattern using glob. For example "**/*.test.ts" finds all test files.',
8
+ input_schema: {
9
+ type: 'object',
10
+ properties: {
11
+ pattern: { type: 'string', description: 'Glob pattern (e.g. "**/*.ts", "src/**/*.test.ts")' },
12
+ path: { type: 'string', description: 'Base directory to search in (default: project root)' },
13
+ },
14
+ required: ['pattern'],
15
+ },
16
+ },
17
+ async execute(input, ctx) {
18
+ const baseDir = validatePath(input.path || '.', ctx.projectRoot);
19
+ const pattern = input.pattern;
20
+ const files = await fg(pattern, {
21
+ cwd: baseDir,
22
+ ignore: ['node_modules/**', '.git/**', 'dist/**', 'coverage/**'],
23
+ onlyFiles: true,
24
+ dot: false,
25
+ });
26
+ if (files.length === 0) {
27
+ return `No files found matching pattern: ${pattern}`;
28
+ }
29
+ const sorted = files.sort();
30
+ const display = sorted.slice(0, 100).join('\n');
31
+ const extra = sorted.length > 100 ? `\n... and ${sorted.length - 100} more` : '';
32
+ return `Found ${sorted.length} file(s) matching "${pattern}":\n\n${display}${extra}`;
33
+ },
34
+ });
35
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yFAAyF;QACtG,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC7F,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qDAAqD,EAAE;aAC7F;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,OAAO,GAAG,YAAY,CAAE,KAAK,CAAC,IAAe,IAAI,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE;YAC9B,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC;YAChE,SAAS,EAAE,IAAI;YACf,GAAG,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,oCAAoC,OAAO,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjF,OAAO,SAAS,MAAM,CAAC,MAAM,sBAAsB,OAAO,SAAS,OAAO,GAAG,KAAK,EAAE,CAAC;IACvF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-commit.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-commit.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { registerTool } from './registry.js';
3
+ registerTool({
4
+ definition: {
5
+ name: 'git_commit',
6
+ description: 'Stage files and create a git commit. If no files specified, stages all modified files.',
7
+ input_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ message: { type: 'string', description: 'Commit message' },
11
+ files: {
12
+ type: 'array',
13
+ items: { type: 'string' },
14
+ description: 'Specific files to stage (default: all modified files)',
15
+ },
16
+ },
17
+ required: ['message'],
18
+ },
19
+ },
20
+ async execute(input, ctx) {
21
+ try {
22
+ const message = input.message;
23
+ const files = input.files;
24
+ // Stage files
25
+ if (files && files.length > 0) {
26
+ for (const file of files) {
27
+ execSync(`git add "${file}"`, { cwd: ctx.projectRoot });
28
+ }
29
+ }
30
+ else {
31
+ execSync('git add -A', { cwd: ctx.projectRoot });
32
+ }
33
+ // Check if there's anything staged
34
+ const staged = execSync('git diff --cached --stat', { cwd: ctx.projectRoot, encoding: 'utf-8' }).trim();
35
+ if (!staged) {
36
+ return 'Nothing to commit (no staged changes).';
37
+ }
38
+ // Commit
39
+ execSync(`git commit -m "${message.replace(/"/g, '\\"')}"`, {
40
+ cwd: ctx.projectRoot,
41
+ encoding: 'utf-8',
42
+ });
43
+ const hash = execSync('git rev-parse --short HEAD', { cwd: ctx.projectRoot, encoding: 'utf-8' }).trim();
44
+ return `Committed: ${hash} — ${message}\n\n${staged}`;
45
+ }
46
+ catch (err) {
47
+ return `Error: ${err}`;
48
+ }
49
+ },
50
+ });
51
+ //# sourceMappingURL=git-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-commit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,wFAAwF;QACrG,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBAC1D,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,uDAAuD;iBACrE;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAiB,CAAC;YACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAA6B,CAAC;YAElD,cAAc;YACd,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,QAAQ,CAAC,YAAY,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,mCAAmC;YACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,wCAAwC,CAAC;YAClD,CAAC;YAED,SAAS;YACT,QAAQ,CAAC,kBAAkB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE;gBAC1D,GAAG,EAAE,GAAG,CAAC,WAAW;gBACpB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,4BAA4B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACxG,OAAO,cAAc,IAAI,MAAM,OAAO,OAAO,MAAM,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-diff.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { registerTool } from './registry.js';
3
+ registerTool({
4
+ definition: {
5
+ name: 'git_diff',
6
+ description: 'Show git diff for a specific file or all changes. Shows unified diff format.',
7
+ input_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ path: { type: 'string', description: 'Specific file to diff (optional, default: all)' },
11
+ staged: { type: 'boolean', description: 'Show staged changes (default: false)' },
12
+ },
13
+ required: [],
14
+ },
15
+ },
16
+ async execute(input, ctx) {
17
+ try {
18
+ const staged = input.staged ? '--cached' : '';
19
+ const filePath = input.path ? ` -- "${input.path}"` : '';
20
+ const cmd = `git diff ${staged}${filePath}`.trim();
21
+ const diff = execSync(cmd, { cwd: ctx.projectRoot, encoding: 'utf-8', maxBuffer: 1024 * 1024 }).trim();
22
+ if (!diff) {
23
+ return staged ? 'No staged changes.' : 'No unstaged changes.';
24
+ }
25
+ // Truncate very long diffs
26
+ if (diff.length > 15000) {
27
+ return diff.slice(0, 15000) + `\n\n... diff truncated (${diff.length} chars total)`;
28
+ }
29
+ return diff;
30
+ }
31
+ catch (err) {
32
+ return `Error: ${err}`;
33
+ }
34
+ },
35
+ });
36
+ //# sourceMappingURL=git-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,8EAA8E;QAC3F,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;gBACvF,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sCAAsC,EAAE;aACjF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAI,KAAK,CAAC,MAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,YAAY,MAAM,GAAG,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAEnD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAEvG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC;YAChE,CAAC;YAED,2BAA2B;YAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,2BAA2B,IAAI,CAAC,MAAM,eAAe,CAAC;YACtF,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-log.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-log.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { registerTool } from './registry.js';
3
+ registerTool({
4
+ definition: {
5
+ name: 'git_log',
6
+ description: 'Show recent git commit history with hash, message, author, and date.',
7
+ input_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ count: { type: 'number', description: 'Number of commits to show (default: 10)' },
11
+ file: { type: 'string', description: 'Show history for a specific file (optional)' },
12
+ },
13
+ required: [],
14
+ },
15
+ },
16
+ async execute(input, ctx) {
17
+ try {
18
+ const count = input.count ?? 10;
19
+ const filePath = input.file ? ` -- "${input.file}"` : '';
20
+ const format = '--format=%h %s (%ar) <%an>';
21
+ const log = execSync(`git log -${count} "${format}"${filePath}`, { cwd: ctx.projectRoot, encoding: 'utf-8' }).trim();
22
+ if (!log) {
23
+ return 'No commits found.';
24
+ }
25
+ return `Recent commits:\n\n${log}`;
26
+ }
27
+ catch (err) {
28
+ return `Error: ${err}`;
29
+ }
30
+ },
31
+ });
32
+ //# sourceMappingURL=git-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-log.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sEAAsE;QACnF,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;gBACjF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;aACrF;YACD,QAAQ,EAAE,EAAE;SACb;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgB,IAAI,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,+BAA+B,CAAC;YAE/C,MAAM,GAAG,GAAG,QAAQ,CAClB,YAAY,KAAK,KAAK,MAAM,IAAI,QAAQ,EAAE,EAC1C,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAC5C,CAAC,IAAI,EAAE,CAAC;YAET,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YAED,OAAO,sBAAsB,GAAG,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-status.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { execSync } from 'node:child_process';
2
+ import { registerTool } from './registry.js';
3
+ registerTool({
4
+ definition: {
5
+ name: 'git_status',
6
+ description: 'Show current git status — modified, added, deleted files, current branch, and tracking info.',
7
+ input_schema: {
8
+ type: 'object',
9
+ properties: {},
10
+ required: [],
11
+ },
12
+ },
13
+ async execute(_input, ctx) {
14
+ try {
15
+ const branch = execSync('git branch --show-current', { cwd: ctx.projectRoot, encoding: 'utf-8' }).trim();
16
+ const status = execSync('git status --short', { cwd: ctx.projectRoot, encoding: 'utf-8' }).trim();
17
+ const ahead = execSync('git rev-list --count @{upstream}..HEAD 2>/dev/null || echo 0', { cwd: ctx.projectRoot, encoding: 'utf-8', shell: 'bash' }).trim();
18
+ const behind = execSync('git rev-list --count HEAD..@{upstream} 2>/dev/null || echo 0', { cwd: ctx.projectRoot, encoding: 'utf-8', shell: 'bash' }).trim();
19
+ let result = `Branch: ${branch}`;
20
+ if (ahead !== '0')
21
+ result += ` (${ahead} ahead)`;
22
+ if (behind !== '0')
23
+ result += ` (${behind} behind)`;
24
+ result += '\n';
25
+ if (status) {
26
+ result += `\nChanges:\n${status}`;
27
+ }
28
+ else {
29
+ result += '\nWorking tree clean';
30
+ }
31
+ return result;
32
+ }
33
+ catch (err) {
34
+ return `Error: Not a git repository or git not available. ${err}`;
35
+ }
36
+ },
37
+ });
38
+ //# sourceMappingURL=git-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-status.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/git-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8FAA8F;QAC3G,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;IAED,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzG,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAClG,MAAM,KAAK,GAAG,QAAQ,CAAC,8DAA8D,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1J,MAAM,MAAM,GAAG,QAAQ,CAAC,8DAA8D,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAE3J,IAAI,MAAM,GAAG,WAAW,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,KAAK,SAAS,CAAC;YACjD,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,MAAM,UAAU,CAAC;YACpD,MAAM,IAAI,IAAI,CAAC;YAEf,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,eAAe,MAAM,EAAE,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,sBAAsB,CAAC;YACnC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,qDAAqD,GAAG,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dir.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/list-dir.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { readdirSync, statSync } from 'node:fs';
2
+ import { join, relative } from 'node:path';
3
+ import { registerTool } from './registry.js';
4
+ import { validatePath } from '../sandbox.js';
5
+ registerTool({
6
+ definition: {
7
+ name: 'list_directory',
8
+ description: 'List files and directories at the given path. Shows file sizes and types. Use for understanding project structure.',
9
+ input_schema: {
10
+ type: 'object',
11
+ properties: {
12
+ path: { type: 'string', description: 'Relative path to the directory (default: project root)' },
13
+ recursive: { type: 'boolean', description: 'List recursively (default: false)' },
14
+ max_depth: { type: 'number', description: 'Maximum recursion depth (default: 2)' },
15
+ },
16
+ required: [],
17
+ },
18
+ },
19
+ async execute(input, ctx) {
20
+ const dirPath = validatePath(input.path || '.', ctx.projectRoot);
21
+ const recursive = input.recursive ?? false;
22
+ const maxDepth = input.max_depth ?? 2;
23
+ // Check if the directory exists before listing
24
+ try {
25
+ const stat = statSync(dirPath);
26
+ if (!stat.isDirectory()) {
27
+ return `Error: "${input.path || '.'}" is not a directory (it's a file). Use read_file instead.`;
28
+ }
29
+ }
30
+ catch {
31
+ return `Error: Directory "${input.path || '.'}" does not exist in ${ctx.projectRoot}`;
32
+ }
33
+ const entries = [];
34
+ const IGNORE = new Set(['node_modules', '.git', 'dist', '.next', '__pycache__', '.venv', 'target']);
35
+ function listDir(dir, depth, prefix) {
36
+ if (depth > maxDepth)
37
+ return;
38
+ let items;
39
+ try {
40
+ items = readdirSync(dir).sort();
41
+ }
42
+ catch {
43
+ return;
44
+ }
45
+ for (const item of items) {
46
+ if (IGNORE.has(item))
47
+ continue;
48
+ const fullPath = join(dir, item);
49
+ let stat;
50
+ try {
51
+ stat = statSync(fullPath);
52
+ }
53
+ catch {
54
+ continue;
55
+ }
56
+ if (stat.isDirectory()) {
57
+ entries.push(`${prefix}${item}/`);
58
+ if (recursive && depth < maxDepth) {
59
+ listDir(fullPath, depth + 1, prefix + ' ');
60
+ }
61
+ }
62
+ else {
63
+ const sizeKB = (stat.size / 1024).toFixed(1);
64
+ entries.push(`${prefix}${item} (${sizeKB} KB)`);
65
+ }
66
+ }
67
+ }
68
+ listDir(dirPath, 0, '');
69
+ const relPath = relative(ctx.projectRoot, dirPath) || '.';
70
+ return `Directory: ${relPath}/\n${entries.length} entries\n\n${entries.join('\n')}`;
71
+ },
72
+ });
73
+ //# sourceMappingURL=list-dir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-dir.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/list-dir.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=read-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/read-file.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { readFileSync, statSync } from 'node:fs';
2
+ import { registerTool } from './registry.js';
3
+ import { validatePath } from '../sandbox.js';
4
+ registerTool({
5
+ definition: {
6
+ name: 'read_file',
7
+ description: 'Read the contents of a file. Returns content with line numbers. Can read specific line ranges.',
8
+ input_schema: {
9
+ type: 'object',
10
+ properties: {
11
+ path: { type: 'string', description: 'Relative path to the file' },
12
+ start_line: { type: 'number', description: 'Start line (1-based, optional)' },
13
+ end_line: { type: 'number', description: 'End line (inclusive, optional)' },
14
+ },
15
+ required: ['path'],
16
+ },
17
+ },
18
+ async execute(input, ctx) {
19
+ const filePath = validatePath(input.path, ctx.projectRoot);
20
+ const stat = statSync(filePath);
21
+ if (stat.isDirectory()) {
22
+ return `Error: ${input.path} is a directory, not a file. Use list_directory instead.`;
23
+ }
24
+ if (stat.size > 1024 * 1024) {
25
+ return `Error: File is too large (${(stat.size / 1024).toFixed(0)} KB). Use start_line/end_line to read a portion.`;
26
+ }
27
+ const content = readFileSync(filePath, 'utf-8');
28
+ const lines = content.split('\n');
29
+ const startLine = input.start_line ?? 1;
30
+ const endLine = input.end_line ?? lines.length;
31
+ const start = Math.max(1, startLine) - 1;
32
+ const end = Math.min(lines.length, endLine);
33
+ const selectedLines = lines.slice(start, end);
34
+ const numbered = selectedLines.map((line, i) => {
35
+ const lineNum = String(start + i + 1).padStart(4);
36
+ return `${lineNum} │ ${line}`;
37
+ }).join('\n');
38
+ const header = `File: ${input.path} (${lines.length} lines, ${(stat.size / 1024).toFixed(1)} KB)`;
39
+ if (start > 0 || end < lines.length) {
40
+ return `${header}\nShowing lines ${start + 1}-${end} of ${lines.length}\n\n${numbered}`;
41
+ }
42
+ return `${header}\n\n${numbered}`;
43
+ },
44
+ });
45
+ //# sourceMappingURL=read-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../../../src/cli/agent/tools/read-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,YAAY,CAAC;IACX,UAAU,EAAE;QACV,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,gGAAgG;QAC7G,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBAClE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBAC7E,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;aAC5E;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,UAAU,KAAK,CAAC,IAAI,0DAA0D,CAAC;QACxF,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YAC5B,OAAO,6BAA6B,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kDAAkD,CAAC;QACtH,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,SAAS,GAAI,KAAK,CAAC,UAAiC,IAAI,CAAC,CAAC;QAChE,MAAM,OAAO,GAAI,KAAK,CAAC,QAA+B,IAAI,KAAK,CAAC,MAAM,CAAC;QAEvE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,GAAG,OAAO,MAAM,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAClG,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,GAAG,MAAM,mBAAmB,KAAK,GAAG,CAAC,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,OAAO,QAAQ,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,GAAG,MAAM,OAAO,QAAQ,EAAE,CAAC;IACpC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ToolDefinition } from '../../providers/types.js';
2
+ import type { UndoStack } from '../undo.js';
3
+ export interface ToolContext {
4
+ projectRoot: string;
5
+ undoStack: UndoStack;
6
+ spiralEngine?: any;
7
+ }
8
+ export interface ToolHandler {
9
+ definition: ToolDefinition;
10
+ execute: (input: Record<string, unknown>, ctx: ToolContext) => Promise<string>;
11
+ }
12
+ export declare function registerTool(handler: ToolHandler): void;
13
+ export declare function getTool(name: string): ToolHandler | undefined;
14
+ export declare function getAllToolDefinitions(): ToolDefinition[];
15
+ export declare function getAllToolNames(): string[];
16
+ /** Initialize all tools by importing their modules */
17
+ export declare function initializeTools(): Promise<void>;
18
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/cli/agent/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAChF;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAEvD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE7D;AAED,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED,sDAAsD;AACtD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAerD"}