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,333 @@
1
+ import { getTool, getAllToolDefinitions } from './tools/registry.js';
2
+ import { renderToolCall, renderToolResult, renderToolDenied, resetToolCounter, renderToolBlockStart, renderToolBlockEnd } from '../ui/tool-output.js';
3
+ import { renderAssistantEnd } from '../ui/chat-view.js';
4
+ import { captureFileSnapshots, fillSnapshotAfter } from '../checkpoints/revert.js';
5
+ import { isRateLimitError, handleRateLimitError, detectCreditsExhausted } from '../providers/rate-limiter.js';
6
+ export class AgentAbortError extends Error {
7
+ constructor(message = 'Agent aborted') {
8
+ super(message);
9
+ this.name = 'AgentAbortError';
10
+ }
11
+ }
12
+ /**
13
+ * The agent loop: sends messages to the LLM, executes tool calls,
14
+ * feeds results back, and repeats until the model is done.
15
+ *
16
+ * Supports pause/resume/abort via the AgentController.
17
+ * AbortController cancels in-flight HTTP requests on emergency stop.
18
+ */
19
+ export async function runAgentLoop(userMessage, conversationHistory, options, controller) {
20
+ const { provider, systemPrompt, permissions, toolContext, checkpointStore, sessionBuffer, onTokensUsed, onToolCall, onStepStart, onStepEnd, onThinking, onBeforeAnswer, maxIterations = 200, } = options;
21
+ const tools = getAllToolDefinitions();
22
+ resetToolCounter();
23
+ const messages = [...conversationHistory];
24
+ // Add user message
25
+ messages.push({ role: 'user', content: userMessage });
26
+ let totalText = '';
27
+ let totalToolCalls = 0;
28
+ let totalInputTokens = 0;
29
+ let totalOutputTokens = 0;
30
+ let iterations = 0;
31
+ const steps = [];
32
+ const errors = [];
33
+ let consecutiveErrors = 0;
34
+ let toolBlockStarted = false;
35
+ let toolBlockStartTime = 0;
36
+ while (iterations < maxIterations) {
37
+ iterations++;
38
+ // Check for abort before LLM call
39
+ if (controller?.isAborted) {
40
+ throw new AgentAbortError();
41
+ }
42
+ // Signal activity indicator: we're about to call the LLM
43
+ onThinking?.();
44
+ // Call the LLM with tools — pass abort signal for hard cancellation
45
+ let response;
46
+ try {
47
+ const signal = controller?.signal;
48
+ response = await provider.chatWithTools(messages, systemPrompt, tools, signal);
49
+ }
50
+ catch (apiErr) {
51
+ // If aborted, throw clean error
52
+ if (controller?.isAborted) {
53
+ throw new AgentAbortError();
54
+ }
55
+ // Check if it's an abort error from the SDK
56
+ if (apiErr instanceof Error && apiErr.name === 'AbortError') {
57
+ throw new AgentAbortError();
58
+ }
59
+ const errMsg = apiErr instanceof Error ? apiErr.message : String(apiErr);
60
+ // Credits exhausted — don't retry, give clear message with free model hint
61
+ const creditsReason = detectCreditsExhausted(apiErr);
62
+ if (creditsReason) {
63
+ sessionBuffer?.addToolError('credits_exhausted', creditsReason);
64
+ const freeHint = provider.name === 'zai'
65
+ ? ' Switch to a free model: /model → glm-4.7-flash or glm-4.5-flash'
66
+ : '';
67
+ throw new Error(`\u274C ${creditsReason}.${freeHint}`);
68
+ }
69
+ // Rate limit errors — smart backoff (provider already retried, but handle edge cases)
70
+ if (isRateLimitError(apiErr) && iterations < maxIterations && consecutiveErrors < 4) {
71
+ const waitMs = handleRateLimitError(apiErr);
72
+ consecutiveErrors++;
73
+ errors.push(`Rate limited (waiting ${Math.ceil(waitMs / 1000)}s)`);
74
+ sessionBuffer?.addToolError('rate_limit', errMsg);
75
+ process.stdout.write(`\r\x1b[K \u23F3 Rate limited \u2014 waiting ${Math.ceil(waitMs / 1000)}s...\n`);
76
+ await new Promise(r => setTimeout(r, waitMs));
77
+ continue;
78
+ }
79
+ // Other API errors — brief retry
80
+ if (iterations < maxIterations && consecutiveErrors < 2) {
81
+ consecutiveErrors++;
82
+ errors.push(`API error (retrying): ${errMsg}`);
83
+ sessionBuffer?.addToolError('api_call', errMsg);
84
+ await new Promise(r => setTimeout(r, 2000));
85
+ continue;
86
+ }
87
+ throw apiErr;
88
+ }
89
+ consecutiveErrors = 0;
90
+ if (response.usage) {
91
+ totalInputTokens += response.usage.input_tokens;
92
+ totalOutputTokens += response.usage.output_tokens;
93
+ onTokensUsed?.(response.usage.input_tokens, response.usage.output_tokens);
94
+ }
95
+ // Process response content blocks
96
+ // IMPORTANT: Collect ALL tool_use blocks first, execute them, then push
97
+ // ONE assistant message + ONE user message with ALL tool_results.
98
+ // This is required by the Anthropic API format.
99
+ const assistantContent = [...response.content];
100
+ let hasToolUse = false;
101
+ const toolUseBlocks = [];
102
+ // Buffer all text — rendered formatted at the end (no inline streaming)
103
+ for (const block of response.content) {
104
+ if (block.type === 'text' && block.text) {
105
+ totalText += block.text;
106
+ }
107
+ if (block.type === 'tool_use') {
108
+ hasToolUse = true;
109
+ toolUseBlocks.push(block);
110
+ }
111
+ }
112
+ // Execute all tool calls and collect results
113
+ if (toolUseBlocks.length > 0) {
114
+ // Start visual tool block on first tool execution
115
+ if (!toolBlockStarted) {
116
+ renderToolBlockStart();
117
+ toolBlockStarted = true;
118
+ toolBlockStartTime = Date.now();
119
+ }
120
+ const toolResults = [];
121
+ for (const block of toolUseBlocks) {
122
+ // Check abort between tools
123
+ if (controller?.isAborted) {
124
+ throw new AgentAbortError();
125
+ }
126
+ totalToolCalls++;
127
+ const stepNum = totalToolCalls;
128
+ const stepLabel = summarizeToolForStep(block.name, block.input);
129
+ onToolCall?.(block.name);
130
+ onStepStart?.(stepNum, block.name, stepLabel);
131
+ sessionBuffer?.addToolCall(block.name, block.input);
132
+ renderToolCall(block.name, block.input);
133
+ // Check permission
134
+ const allowed = await permissions.check(block.name, block.input, (msg) => process.stdout.write(msg));
135
+ if (allowed) {
136
+ const snapshots = checkpointStore
137
+ ? captureFileSnapshots(block.name, block.input, toolContext.projectRoot)
138
+ : undefined;
139
+ const tool = getTool(block.name);
140
+ let result;
141
+ let stepStatus = 'done';
142
+ let stepError;
143
+ if (tool) {
144
+ try {
145
+ result = await tool.execute(block.input, toolContext);
146
+ }
147
+ catch (err) {
148
+ const errMsg = err instanceof Error ? err.message : String(err);
149
+ result = `Error: ${errMsg}`;
150
+ stepStatus = 'error';
151
+ stepError = errMsg;
152
+ errors.push(`${block.name}: ${errMsg}`);
153
+ consecutiveErrors++;
154
+ sessionBuffer?.addToolError(block.name, errMsg);
155
+ }
156
+ }
157
+ else {
158
+ result = `Error: Unknown tool "${block.name}"`;
159
+ stepStatus = 'error';
160
+ stepError = `Unknown tool "${block.name}"`;
161
+ }
162
+ steps.push({ num: stepNum, tool: block.name, label: stepLabel, status: stepStatus, error: stepError });
163
+ onStepEnd?.(stepNum, block.name, stepStatus, stepError);
164
+ if (snapshots)
165
+ fillSnapshotAfter(snapshots);
166
+ if (checkpointStore) {
167
+ checkpointStore.createForTool(block.name, block.input, result, messages.length, snapshots);
168
+ }
169
+ renderToolResult(block.name, result);
170
+ // Build tool_result entry
171
+ if (stepStatus === 'error' && consecutiveErrors < 3) {
172
+ toolResults.push({
173
+ type: 'tool_result',
174
+ tool_use_id: block.id,
175
+ content: `${result}\n\n[Auto-recovery hint: The above tool call failed. Analyze the error, adjust your approach, and try again. Do not repeat the exact same failing call.]`,
176
+ is_error: true,
177
+ });
178
+ }
179
+ else {
180
+ toolResults.push({
181
+ type: 'tool_result',
182
+ tool_use_id: block.id,
183
+ content: result,
184
+ is_error: stepStatus === 'error',
185
+ });
186
+ }
187
+ if (stepStatus === 'done')
188
+ consecutiveErrors = 0;
189
+ // Store in spiral (fire-and-forget)
190
+ if (toolContext.spiralEngine) {
191
+ const insight = `Tool ${block.name}: ${JSON.stringify(block.input).slice(0, 200)}`;
192
+ toolContext.spiralEngine.store(insight, 'code', { tags: ['tool_use', block.name] }).catch(() => { });
193
+ }
194
+ }
195
+ else {
196
+ // User denied
197
+ renderToolDenied(block.name);
198
+ steps.push({ num: stepNum, tool: block.name, label: stepLabel, status: 'error', error: 'denied' });
199
+ onStepEnd?.(stepNum, block.name, 'error', 'denied by user');
200
+ toolResults.push({
201
+ type: 'tool_result',
202
+ tool_use_id: block.id,
203
+ content: 'User denied this action.',
204
+ is_error: true,
205
+ });
206
+ }
207
+ }
208
+ // Push ONE assistant message with ALL content blocks,
209
+ // then ONE user message with ALL tool_results
210
+ messages.push({ role: 'assistant', content: assistantContent });
211
+ messages.push({ role: 'user', content: toolResults });
212
+ }
213
+ // If no tool use, the model is done
214
+ if (!hasToolUse || response.stop_reason !== 'tool_use') {
215
+ // Stop activity indicator (writes colorful "Done" line)
216
+ onBeforeAnswer?.();
217
+ // Close tool block if open
218
+ if (toolBlockStarted) {
219
+ renderToolBlockEnd(totalToolCalls, Date.now() - toolBlockStartTime);
220
+ toolBlockStarted = false;
221
+ }
222
+ // Render final formatted answer
223
+ if (totalText) {
224
+ renderAssistantEnd(totalText);
225
+ }
226
+ break;
227
+ }
228
+ }
229
+ if (iterations >= maxIterations) {
230
+ process.stdout.write(`\n [Agent reached maximum iterations (${maxIterations}). Use --max-iterations to increase.]\n`);
231
+ }
232
+ return {
233
+ text: totalText,
234
+ toolCalls: totalToolCalls,
235
+ tokensUsed: { input: totalInputTokens, output: totalOutputTokens },
236
+ aborted: false,
237
+ steps,
238
+ errors,
239
+ updatedHistory: messages,
240
+ };
241
+ }
242
+ /** Summarize a tool call for the step display */
243
+ function summarizeToolForStep(name, input) {
244
+ switch (name) {
245
+ case 'read_file': return `reading ${basename(String(input.path || ''))}`;
246
+ case 'write_file': return `writing ${basename(String(input.path || ''))}`;
247
+ case 'edit_file': return `editing ${basename(String(input.path || ''))}`;
248
+ case 'list_directory': return `listing ${input.path || '.'}`;
249
+ case 'search_files': return `searching "${input.pattern}"`;
250
+ case 'find_files': return `finding "${input.pattern}"`;
251
+ case 'run_command': return `running command`;
252
+ case 'git_status': return 'git status';
253
+ case 'git_diff': return 'git diff';
254
+ case 'git_commit': return 'git commit';
255
+ case 'git_log': return 'git log';
256
+ case 'spiral_query': return 'querying spiral';
257
+ case 'spiral_store': return 'storing in spiral';
258
+ default: return name;
259
+ }
260
+ }
261
+ function basename(path) {
262
+ const parts = path.replace(/\\/g, '/').split('/');
263
+ return parts[parts.length - 1] || path;
264
+ }
265
+ /**
266
+ * Controller for pausing/resuming/aborting the agent loop.
267
+ *
268
+ * Uses an AbortController for hard cancellation of in-flight HTTP requests.
269
+ * ESC → abort() → AbortController.abort() → HTTP request cancelled immediately.
270
+ */
271
+ export class AgentController {
272
+ _paused = false;
273
+ _aborted = false;
274
+ _abortController = new AbortController();
275
+ pauseResolve = null;
276
+ get isPaused() {
277
+ return this._paused;
278
+ }
279
+ get isAborted() {
280
+ return this._aborted;
281
+ }
282
+ /** AbortSignal to pass to HTTP requests for hard cancellation */
283
+ get signal() {
284
+ return this._abortController.signal;
285
+ }
286
+ pause() {
287
+ this._paused = true;
288
+ }
289
+ resume() {
290
+ this._paused = false;
291
+ this._aborted = false;
292
+ if (this.pauseResolve) {
293
+ this.pauseResolve();
294
+ this.pauseResolve = null;
295
+ }
296
+ }
297
+ /**
298
+ * EMERGENCY STOP — aborts immediately:
299
+ * 1. Sets abort flag (checked between steps)
300
+ * 2. Cancels AbortController (kills in-flight HTTP requests)
301
+ * 3. Resolves any pending pause promise
302
+ */
303
+ abort() {
304
+ this._aborted = true;
305
+ this._paused = false;
306
+ this._abortController.abort();
307
+ if (this.pauseResolve) {
308
+ this.pauseResolve();
309
+ this.pauseResolve = null;
310
+ }
311
+ }
312
+ async checkPause() {
313
+ if (this._aborted) {
314
+ throw new AgentAbortError();
315
+ }
316
+ if (this._paused) {
317
+ await new Promise((resolve) => {
318
+ this.pauseResolve = resolve;
319
+ });
320
+ if (this._aborted) {
321
+ throw new AgentAbortError();
322
+ }
323
+ }
324
+ }
325
+ /** Reset state for a new round — creates fresh AbortController */
326
+ reset() {
327
+ this._paused = false;
328
+ this._aborted = false;
329
+ this._abortController = new AbortController();
330
+ this.pauseResolve = null;
331
+ }
332
+ }
333
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/cli/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as readline from 'node:readline';
2
+ export type PermissionLevel = 'auto' | 'ask' | 'dangerous';
3
+ export declare class PermissionManager {
4
+ private yoloMode;
5
+ private skipPermissionsMode;
6
+ private rl;
7
+ private onPromptActive?;
8
+ setReadline(rl: readline.Interface): void;
9
+ /** Callback to suppress statusbar while permission prompt is active */
10
+ setPromptCallback(cb: (active: boolean) => void): void;
11
+ setYolo(enabled: boolean): void;
12
+ isYolo(): boolean;
13
+ setSkipPermissions(enabled: boolean): void;
14
+ isSkipPermissions(): boolean;
15
+ /** Get the current mode label for display */
16
+ getModeLabel(): 'safe' | 'skip' | 'yolo';
17
+ /**
18
+ * Check if a tool call is allowed.
19
+ * Returns true if allowed, false if denied.
20
+ */
21
+ check(toolName: string, input: Record<string, unknown>, displayFn: (msg: string) => void): Promise<boolean>;
22
+ private promptUser;
23
+ /** Ask a single question via readline, suppressing statusbar during input */
24
+ private ask;
25
+ /** Format a human-readable description of what a tool call does */
26
+ private formatToolDetail;
27
+ }
28
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/cli/agent/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAG1C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;AAwB3D,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,cAAc,CAAC,CAA4B;IAEnD,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI;IAIzC,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAItD,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI/B,MAAM,IAAI,OAAO;IAIjB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAI1C,iBAAiB,IAAI,OAAO;IAI5B,6CAA6C;IAC7C,YAAY,IAAI,MAAM,GAAG,MAAM,GAAG,MAAM;IAMxC;;;OAGG;IACG,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,OAAO,CAAC;YAuBL,UAAU;IAoExB,6EAA6E;IAC7E,OAAO,CAAC,GAAG;IAUX,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;CA8BzB"}
@@ -0,0 +1,180 @@
1
+ import { classifyCommand } from './sandbox.js';
2
+ /** Map tools to their default permission level */
3
+ const TOOL_PERMISSIONS = {
4
+ // Auto-allow (read-only operations)
5
+ read_file: 'auto',
6
+ list_directory: 'auto',
7
+ search_files: 'auto',
8
+ find_files: 'auto',
9
+ git_status: 'auto',
10
+ git_log: 'auto',
11
+ git_diff: 'auto',
12
+ spiral_query: 'auto',
13
+ // Ask user (write operations)
14
+ edit_file: 'ask',
15
+ write_file: 'ask',
16
+ git_commit: 'ask',
17
+ spiral_store: 'auto', // Auto — spiral stores are low-risk
18
+ // Dangerous (shell execution)
19
+ run_command: 'ask', // Upgraded to 'dangerous' based on command content
20
+ };
21
+ export class PermissionManager {
22
+ yoloMode = false;
23
+ skipPermissionsMode = false;
24
+ rl = null;
25
+ onPromptActive;
26
+ setReadline(rl) {
27
+ this.rl = rl;
28
+ }
29
+ /** Callback to suppress statusbar while permission prompt is active */
30
+ setPromptCallback(cb) {
31
+ this.onPromptActive = cb;
32
+ }
33
+ setYolo(enabled) {
34
+ this.yoloMode = enabled;
35
+ }
36
+ isYolo() {
37
+ return this.yoloMode;
38
+ }
39
+ setSkipPermissions(enabled) {
40
+ this.skipPermissionsMode = enabled;
41
+ }
42
+ isSkipPermissions() {
43
+ return this.skipPermissionsMode;
44
+ }
45
+ /** Get the current mode label for display */
46
+ getModeLabel() {
47
+ if (this.yoloMode)
48
+ return 'yolo';
49
+ if (this.skipPermissionsMode)
50
+ return 'skip';
51
+ return 'safe';
52
+ }
53
+ /**
54
+ * Check if a tool call is allowed.
55
+ * Returns true if allowed, false if denied.
56
+ */
57
+ async check(toolName, input, displayFn) {
58
+ let level = TOOL_PERMISSIONS[toolName] ?? 'ask';
59
+ // Upgrade run_command based on command content
60
+ if (toolName === 'run_command' && typeof input.command === 'string') {
61
+ const cmdLevel = classifyCommand(input.command);
62
+ if (cmdLevel === 'dangerous')
63
+ level = 'dangerous';
64
+ else if (cmdLevel === 'ask')
65
+ level = 'ask';
66
+ }
67
+ // Auto-allow
68
+ if (level === 'auto')
69
+ return true;
70
+ // YOLO mode: auto-allow everything, even dangerous
71
+ if (this.yoloMode)
72
+ return true;
73
+ // Skip-permissions mode: auto-allow 'ask' level, still prompt for 'dangerous'
74
+ if (this.skipPermissionsMode && level !== 'dangerous')
75
+ return true;
76
+ // Ask user with full context about what's being done
77
+ return this.promptUser(toolName, input, level, displayFn);
78
+ }
79
+ async promptUser(toolName, input, level, displayFn) {
80
+ if (!this.rl)
81
+ return true; // No readline = non-interactive, allow
82
+ const defaultYes = level !== 'dangerous';
83
+ // Build detailed context about what the tool wants to do
84
+ const detail = this.formatToolDetail(toolName, input);
85
+ const levelTag = level === 'dangerous' ? '\x1b[31m\u26A0 DANGEROUS\x1b[0m' : '\x1b[33m\u270F\uFE0F WRITE\x1b[0m';
86
+ process.stdout.write('\n');
87
+ process.stdout.write(` \x1b[2m\u250C\u2500 ${levelTag} \x1b[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1b[0m\n`);
88
+ process.stdout.write(` \x1b[2m\u2502\x1b[0m ${detail}\n`);
89
+ process.stdout.write(` \x1b[2m\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1b[0m\n`);
90
+ // Show options
91
+ const yKey = defaultYes ? 'Y' : 'y';
92
+ const nKey = defaultYes ? 'n' : 'N';
93
+ process.stdout.write(` [${yKey}] Allow [${nKey}] Deny \x1b[2m[s] Skip once [a] Always skip\x1b[0m\n`);
94
+ process.stdout.write(` \x1b[2m[!s] --skip-permissions [!y] --yolo mode\x1b[0m\n`);
95
+ const answer = await this.ask(' > ');
96
+ const trimmed = answer.trim().toLowerCase();
97
+ switch (trimmed) {
98
+ case '':
99
+ return defaultYes;
100
+ case 'y':
101
+ case 'yes':
102
+ return true;
103
+ case 'n':
104
+ case 'no':
105
+ return false;
106
+ case 's':
107
+ // Skip once — allow just this one
108
+ return true;
109
+ case 'a':
110
+ // Always skip — enable skip-permissions for this session
111
+ this.skipPermissionsMode = true;
112
+ process.stdout.write(' \x1b[33m\u26A1 Skip-permissions enabled for this session\x1b[0m\n');
113
+ return true;
114
+ case '!s': {
115
+ // Double confirmation for skip-permissions mode
116
+ const confirm = await this.ask(' \x1b[33m\u26A0 Enable --skip-permissions? (y/N)\x1b[0m > ');
117
+ if (confirm.trim().toLowerCase() === 'y') {
118
+ this.skipPermissionsMode = true;
119
+ process.stdout.write(' \x1b[33m\u26A1 --skip-permissions mode enabled\x1b[0m\n');
120
+ return true;
121
+ }
122
+ return false;
123
+ }
124
+ case '!y': {
125
+ // Double confirmation for YOLO mode
126
+ const confirm = await this.ask(' \x1b[31m\u26A0 Enable --yolo (ALL permissions skipped)? (y/N)\x1b[0m > ');
127
+ if (confirm.trim().toLowerCase() === 'y') {
128
+ this.yoloMode = true;
129
+ process.stdout.write(' \x1b[31m\u{1F525} YOLO mode enabled \u2014 no more confirmations\x1b[0m\n');
130
+ return true;
131
+ }
132
+ return false;
133
+ }
134
+ default:
135
+ return defaultYes;
136
+ }
137
+ }
138
+ /** Ask a single question via readline, suppressing statusbar during input */
139
+ ask(prompt) {
140
+ return new Promise((resolve) => {
141
+ this.onPromptActive?.(true);
142
+ this.rl.question(prompt, (answer) => {
143
+ this.onPromptActive?.(false);
144
+ resolve(answer);
145
+ });
146
+ });
147
+ }
148
+ /** Format a human-readable description of what a tool call does */
149
+ formatToolDetail(name, input) {
150
+ switch (name) {
151
+ case 'write_file': {
152
+ const path = String(input.path || '');
153
+ const content = String(input.content || '');
154
+ const lines = content.split('\n').length;
155
+ return `\x1b[1mWrite file\x1b[0m \x1b[36m${path}\x1b[0m \x1b[2m(${lines} lines)\x1b[0m`;
156
+ }
157
+ case 'edit_file': {
158
+ const path = String(input.path || '');
159
+ const oldStr = String(input.old_string || '').slice(0, 60).replace(/\n/g, '\\n');
160
+ const newStr = String(input.new_string || '').slice(0, 60).replace(/\n/g, '\\n');
161
+ return `\x1b[1mEdit file\x1b[0m \x1b[36m${path}\x1b[0m\n \x1b[2m\u2502\x1b[0m \x1b[31m- ${oldStr}${String(input.old_string || '').length > 60 ? '\u2026' : ''}\x1b[0m\n \x1b[2m\u2502\x1b[0m \x1b[32m+ ${newStr}${String(input.new_string || '').length > 60 ? '\u2026' : ''}\x1b[0m`;
162
+ }
163
+ case 'run_command': {
164
+ const cmd = String(input.command || '');
165
+ return `\x1b[1mRun command\x1b[0m \x1b[33m$ ${cmd}\x1b[0m`;
166
+ }
167
+ case 'git_commit': {
168
+ const msg = String(input.message || '');
169
+ return `\x1b[1mGit commit\x1b[0m \x1b[36m"${msg}"\x1b[0m`;
170
+ }
171
+ default: {
172
+ const summary = Object.entries(input)
173
+ .map(([k, v]) => `${k}: ${String(v).slice(0, 50)}`)
174
+ .join(', ');
175
+ return `\x1b[1m${name}\x1b[0m \x1b[2m${summary.slice(0, 100)}\x1b[0m`;
176
+ }
177
+ }
178
+ }
179
+ }
180
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/cli/agent/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare class SecurityError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ /**
5
+ * Validate that a requested path is within the project root
6
+ * and not a sensitive file. Returns the resolved absolute path.
7
+ */
8
+ export declare function validatePath(requestedPath: string, projectRoot: string): string;
9
+ /**
10
+ * Classify a shell command's danger level.
11
+ */
12
+ export declare function classifyCommand(cmd: string): 'safe' | 'ask' | 'dangerous';
13
+ /**
14
+ * Check if a command is blocked entirely (should never run).
15
+ */
16
+ export declare function isBlockedCommand(cmd: string): boolean;
17
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/cli/agent/sandbox.ts"],"names":[],"mappings":"AAmCA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAkD/E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,CA2BzE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMrD"}