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,492 @@
1
+ /**
2
+ * Static validation checks — no LLM calls, pure algorithms.
3
+ * Fast (~50ms) pattern matching, parsing, and analysis.
4
+ */
5
+ // ── Void HTML elements (self-closing) ──
6
+ const VOID_ELEMENTS = new Set([
7
+ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
8
+ 'link', 'meta', 'param', 'source', 'track', 'wbr',
9
+ ]);
10
+ // ── Static Checkers ──
11
+ const checkers = {
12
+ 'html-valid': (output) => {
13
+ // Extract code blocks that contain HTML
14
+ const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue', 'svelte']);
15
+ if (!html)
16
+ return pass('html-valid', 'No HTML content found');
17
+ const stack = [];
18
+ const tagRegex = /<\/?([a-zA-Z][a-zA-Z0-9-]*)[^>]*\/?>/g;
19
+ let match;
20
+ while ((match = tagRegex.exec(html)) !== null) {
21
+ const fullTag = match[0];
22
+ const tagName = match[1].toLowerCase();
23
+ if (VOID_ELEMENTS.has(tagName))
24
+ continue;
25
+ if (fullTag.endsWith('/>'))
26
+ continue; // Self-closing
27
+ if (fullTag.startsWith('</')) {
28
+ // Closing tag
29
+ if (stack.length === 0) {
30
+ return fail('html-valid', `Unexpected closing tag </${tagName}>`, `Remove stray </${tagName}>`);
31
+ }
32
+ const expected = stack.pop();
33
+ if (expected !== tagName) {
34
+ return fail('html-valid', `Mismatched tags: expected </${expected}>, found </${tagName}>`, `Change </${tagName}> to </${expected}>`);
35
+ }
36
+ }
37
+ else {
38
+ // Opening tag
39
+ stack.push(tagName);
40
+ }
41
+ }
42
+ if (stack.length > 0) {
43
+ const unclosed = stack.reverse().map(t => `<${t}>`).join(', ');
44
+ return fail('html-valid', `Unclosed tags: ${unclosed}`, stack.map(t => `</${t}>`).join('\n'));
45
+ }
46
+ return pass('html-valid', 'HTML tags properly balanced');
47
+ },
48
+ 'links-valid': (output) => {
49
+ const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
50
+ if (!html)
51
+ return pass('links-valid', 'No HTML content found');
52
+ const hrefRegex = /(?:href|src|action)=["']([^"']*?)["']/gi;
53
+ const issues = [];
54
+ let match;
55
+ while ((match = hrefRegex.exec(html)) !== null) {
56
+ const value = match[1];
57
+ if (!value || value === '' || value === '#undefined' || value === 'undefined') {
58
+ issues.push(`Empty/invalid ${match[0]}`);
59
+ }
60
+ }
61
+ if (issues.length > 0) {
62
+ return fail('links-valid', issues.join('; '), undefined, 'error');
63
+ }
64
+ return pass('links-valid', 'All links valid');
65
+ },
66
+ 'ids-unique': (output) => {
67
+ const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
68
+ if (!html)
69
+ return pass('ids-unique', 'No HTML content found');
70
+ const idRegex = /\bid=["']([^"']+)["']/gi;
71
+ const seen = new Map();
72
+ let match;
73
+ while ((match = idRegex.exec(html)) !== null) {
74
+ const id = match[1];
75
+ seen.set(id, (seen.get(id) || 0) + 1);
76
+ }
77
+ const duplicates = [...seen.entries()].filter(([, count]) => count > 1);
78
+ if (duplicates.length > 0) {
79
+ const dupeList = duplicates.map(([id, count]) => `"${id}" (${count}x)`).join(', ');
80
+ return fail('ids-unique', `Duplicate IDs: ${dupeList}`, `Rename duplicate IDs to be unique`);
81
+ }
82
+ return pass('ids-unique', 'All IDs unique');
83
+ },
84
+ 'img-alt': (output) => {
85
+ const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
86
+ if (!html)
87
+ return pass('img-alt', 'No HTML content found');
88
+ const imgRegex = /<img\b[^>]*>/gi;
89
+ const images = html.match(imgRegex) || [];
90
+ const missingAlt = images.filter(img => !img.includes('alt='));
91
+ if (missingAlt.length > 0) {
92
+ return {
93
+ id: 'img-alt',
94
+ passed: false,
95
+ details: `${missingAlt.length} image(s) missing alt attribute`,
96
+ fix: 'Add alt="" to images',
97
+ severity: 'warning',
98
+ autofix: true,
99
+ };
100
+ }
101
+ return pass('img-alt', 'All images have alt attributes', 'warning');
102
+ },
103
+ 'syntax-valid': (output, ctx) => {
104
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'json', 'css']);
105
+ if (!code)
106
+ return pass('syntax-valid', 'No code content found');
107
+ const lang = ctx?.lang || detectLanguage(code);
108
+ if (lang === 'json') {
109
+ try {
110
+ JSON.parse(code);
111
+ return pass('syntax-valid', 'Valid JSON');
112
+ }
113
+ catch (e) {
114
+ return fail('syntax-valid', `Invalid JSON: ${e.message}`);
115
+ }
116
+ }
117
+ // Check bracket/brace/paren balance
118
+ const balance = checkBracketBalance(code);
119
+ if (!balance.balanced) {
120
+ return fail('syntax-valid', `Unbalanced ${balance.type}: ${balance.details}`, balance.fix);
121
+ }
122
+ // Check for obvious syntax errors
123
+ const syntaxIssues = checkBasicSyntax(code);
124
+ if (syntaxIssues) {
125
+ return fail('syntax-valid', syntaxIssues);
126
+ }
127
+ return pass('syntax-valid', 'Syntax appears valid');
128
+ },
129
+ 'imports-resolve': (output, ctx) => {
130
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
131
+ if (!code)
132
+ return pass('imports-resolve', 'No code content found');
133
+ const importRegex = /import\s+(?:.*?\s+from\s+)?['"]([^'"]+)['"]/g;
134
+ const issues = [];
135
+ let match;
136
+ while ((match = importRegex.exec(code)) !== null) {
137
+ const path = match[1];
138
+ // Skip node_modules imports
139
+ if (!path.startsWith('.') && !path.startsWith('/'))
140
+ continue;
141
+ if (ctx?.projectFiles && ctx.projectFiles.length > 0) {
142
+ // Check if file exists in known project files
143
+ const normalized = path.replace(/\.(js|ts|jsx|tsx)$/, '');
144
+ const found = ctx.projectFiles.some(f => f.includes(normalized) || f.includes(normalized + '.ts') || f.includes(normalized + '.js'));
145
+ if (!found) {
146
+ issues.push(`Import "${path}" may not exist`);
147
+ }
148
+ }
149
+ }
150
+ if (issues.length > 0) {
151
+ return fail('imports-resolve', issues.join('; '));
152
+ }
153
+ return pass('imports-resolve', 'All imports appear valid');
154
+ },
155
+ 'no-dead-code': (output) => {
156
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
157
+ if (!code)
158
+ return pass('no-dead-code', 'No code content found');
159
+ const issues = [];
160
+ // Check for unreachable code after return/throw/break/continue
161
+ const unreachableRegex = /\b(return|throw|break|continue)\b[^;]*;\s*\n\s*(?![\s}]|\/\/|\/\*|case\s|default:)([\w])/gm;
162
+ if (unreachableRegex.test(code)) {
163
+ issues.push('Possible unreachable code after return/throw');
164
+ }
165
+ // Check for unused imports (simple heuristic)
166
+ const importNames = extractImportNames(code);
167
+ for (const name of importNames) {
168
+ // Count occurrences after the import line
169
+ const afterImport = code.slice(code.indexOf(name) + name.length);
170
+ if (!afterImport.includes(name)) {
171
+ issues.push(`Possibly unused import: ${name}`);
172
+ }
173
+ }
174
+ if (issues.length > 0) {
175
+ return { id: 'no-dead-code', passed: false, details: issues.join('; '), severity: 'warning', autofix: true };
176
+ }
177
+ return pass('no-dead-code', 'No dead code detected', 'warning');
178
+ },
179
+ 'no-hardcoded': (output) => {
180
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
181
+ if (!code)
182
+ return pass('no-hardcoded', 'No code content found');
183
+ const issues = [];
184
+ // API keys / secrets patterns
185
+ const secretPatterns = [
186
+ /['"][A-Za-z0-9+/]{40,}['"]/, // Long base64-like strings
187
+ /(?:api[_-]?key|secret|password|token)\s*[:=]\s*['"][^'"]{8,}['"]/i,
188
+ /sk-[a-zA-Z0-9]{20,}/, // OpenAI key pattern
189
+ /ghp_[a-zA-Z0-9]{36}/, // GitHub PAT
190
+ /(?:AKIA|ASIA)[A-Z0-9]{16}/, // AWS access key
191
+ ];
192
+ for (const pattern of secretPatterns) {
193
+ if (pattern.test(code)) {
194
+ issues.push('Possible hardcoded secret/API key detected');
195
+ break;
196
+ }
197
+ }
198
+ // Hardcoded localhost URLs (not in comments/config)
199
+ if (/['"]https?:\/\/localhost:\d+/.test(code) && !code.includes('// dev') && !code.includes('development')) {
200
+ issues.push('Hardcoded localhost URL');
201
+ }
202
+ if (issues.length > 0) {
203
+ return { id: 'no-hardcoded', passed: false, details: issues.join('; '), severity: 'warning', autofix: false };
204
+ }
205
+ return pass('no-hardcoded', 'No hardcoded secrets detected', 'warning');
206
+ },
207
+ 'sql-injection': (output) => {
208
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
209
+ if (!code)
210
+ return pass('sql-injection', 'No code content found');
211
+ // Check for string concatenation in SQL queries
212
+ const sqlConcat = /(?:query|exec|execute|run|prepare)\s*\(\s*[`'"](?:SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)\b[^`'"]*\$\{/i;
213
+ const sqlPlus = /(?:query|exec|execute|run)\s*\(\s*['"](?:SELECT|INSERT|UPDATE|DELETE)\b[^'"]*['"]\s*\+/i;
214
+ if (sqlConcat.test(code) || sqlPlus.test(code)) {
215
+ return fail('sql-injection', 'SQL query with string interpolation/concatenation detected', 'Use parameterized queries instead');
216
+ }
217
+ return pass('sql-injection', 'No SQL injection vulnerabilities detected');
218
+ },
219
+ 'async-await': (output) => {
220
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
221
+ if (!code)
222
+ return pass('async-await', 'No async code found');
223
+ const issues = [];
224
+ // Check for floating promises: async function call without await
225
+ const asyncCallRegex = /(?<!await\s)(?<!return\s)(?<!\.catch\()(?<!\.then\()(\w+)\s*\([^)]*\)\s*;/g;
226
+ // This is a heuristic — too many false positives, so keep it simple
227
+ // Check for async function without any await
228
+ const asyncFuncRegex = /async\s+(?:function\s+)?(\w+)\s*\([^)]*\)\s*\{([^}]*)\}/g;
229
+ let match;
230
+ while ((match = asyncFuncRegex.exec(code)) !== null) {
231
+ const body = match[2];
232
+ if (!body.includes('await') && !body.includes('Promise')) {
233
+ issues.push(`Async function "${match[1]}" has no await`);
234
+ }
235
+ }
236
+ if (issues.length > 0) {
237
+ return fail('async-await', issues.join('; '));
238
+ }
239
+ return pass('async-await', 'Async/await usage appears correct');
240
+ },
241
+ 'error-handling': (output) => {
242
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
243
+ if (!code)
244
+ return pass('error-handling', 'No code content found');
245
+ // Check if there are async operations without try/catch
246
+ const hasAsync = code.includes('await ');
247
+ const hasTryCatch = code.includes('try {') || code.includes('try{');
248
+ const hasCatch = code.includes('.catch(');
249
+ if (hasAsync && !hasTryCatch && !hasCatch) {
250
+ return fail('error-handling', 'Async operations without error handling', 'Wrap in try/catch');
251
+ }
252
+ return pass('error-handling', 'Error handling present');
253
+ },
254
+ 'status-codes': (output) => {
255
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
256
+ if (!code)
257
+ return pass('status-codes', 'No HTTP status code usage found');
258
+ // Count status codes used
259
+ const statusRegex = /\.status\((\d{3})\)/g;
260
+ const codes = new Set();
261
+ let match;
262
+ while ((match = statusRegex.exec(code)) !== null) {
263
+ codes.add(match[1]);
264
+ }
265
+ if (codes.size > 0 && codes.size === 1 && codes.has('200')) {
266
+ return { id: 'status-codes', passed: false, details: 'Only status 200 used — use appropriate codes (201, 400, 404, 500)', severity: 'warning', autofix: true };
267
+ }
268
+ return pass('status-codes', 'HTTP status codes look appropriate', 'warning');
269
+ },
270
+ 'assertions-exist': (output) => {
271
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
272
+ if (!code)
273
+ return pass('assertions-exist', 'No test code found');
274
+ // Find test blocks
275
+ const testRegex = /(?:it|test)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:async\s*)?\(\s*\)\s*=>\s*\{([^]*?)(?=\n\s*(?:it|test|describe)\s*\(|\n\}\);\s*$)/g;
276
+ const issues = [];
277
+ let match;
278
+ while ((match = testRegex.exec(code)) !== null) {
279
+ const body = match[1];
280
+ if (!body.includes('expect(') && !body.includes('assert') && !body.includes('should')) {
281
+ // Extract test name for reporting
282
+ const nameMatch = code.slice(match.index).match(/['"]([^'"]+)['"]/);
283
+ issues.push(`Test "${nameMatch?.[1] || 'unknown'}" has no assertion`);
284
+ }
285
+ }
286
+ if (issues.length > 0) {
287
+ return fail('assertions-exist', issues.join('; '));
288
+ }
289
+ return pass('assertions-exist', 'All tests have assertions');
290
+ },
291
+ 'mocks-cleanup': (output) => {
292
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
293
+ if (!code)
294
+ return pass('mocks-cleanup', 'No test code found');
295
+ const hasMocks = code.includes('vi.mock') || code.includes('jest.mock') || code.includes('sinon');
296
+ const hasCleanup = code.includes('afterEach') || code.includes('afterAll') || code.includes('restoreAllMocks') || code.includes('resetAllMocks') || code.includes('clearAllMocks');
297
+ if (hasMocks && !hasCleanup) {
298
+ return { id: 'mocks-cleanup', passed: false, details: 'Mocks used without cleanup (afterEach/restoreAllMocks)', fix: 'Add afterEach(() => vi.restoreAllMocks())', severity: 'warning', autofix: true };
299
+ }
300
+ return pass('mocks-cleanup', 'Mocks properly cleaned up', 'warning');
301
+ },
302
+ 'input-handled': (output) => {
303
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
304
+ if (!code)
305
+ return pass('input-handled', 'No code content found');
306
+ // Check for array/object operations without null checks
307
+ const hasArrayOps = /\.\s*(?:map|filter|reduce|forEach|find)\s*\(/.test(code);
308
+ const hasNullCheck = /(?:if\s*\(\s*!?\s*\w+|[\w.]+\s*\?\.|[\w.]+\s*!==?\s*(?:null|undefined))/.test(code);
309
+ if (hasArrayOps && !hasNullCheck) {
310
+ return fail('input-handled', 'Array operations without null/undefined checks', 'Add input validation');
311
+ }
312
+ return pass('input-handled', 'Input handling appears adequate');
313
+ },
314
+ 'no-circular': (output) => {
315
+ const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
316
+ if (!code)
317
+ return pass('no-circular', 'No code content found');
318
+ // Simple heuristic: check if a file imports itself or has obvious circular patterns
319
+ const importRegex = /import\s+.*from\s+['"]([^'"]+)['"]/g;
320
+ const exportRegex = /export\s+.*from\s+['"]([^'"]+)['"]/g;
321
+ const imports = new Set();
322
+ let match;
323
+ while ((match = importRegex.exec(code)) !== null)
324
+ imports.add(match[1]);
325
+ while ((match = exportRegex.exec(code)) !== null)
326
+ imports.add(match[1]);
327
+ // Can't detect circular deps from a single output — pass
328
+ return pass('no-circular', 'No obvious circular dependencies');
329
+ },
330
+ 'no-secrets': (output) => {
331
+ const code = extractCodeContent(output, ['json', 'yaml', 'yml', 'toml', 'env', 'ini', 'cfg', 'ts', 'typescript', 'js', 'javascript']);
332
+ if (!code)
333
+ return pass('no-secrets', 'No config content found');
334
+ const secretKeys = /["']?(?:password|secret|api[_-]?key|token|private[_-]?key)["']?\s*[:=]\s*["']?[^\s"',}{]{5,}/i;
335
+ if (secretKeys.test(code)) {
336
+ return fail('no-secrets', 'Possible plaintext secret in configuration');
337
+ }
338
+ return pass('no-secrets', 'No plaintext secrets detected');
339
+ },
340
+ };
341
+ /**
342
+ * Run all applicable static checks on the output.
343
+ */
344
+ export function runStaticChecks(output, criterionIds, context) {
345
+ const results = [];
346
+ for (const id of criterionIds) {
347
+ const checker = checkers[id];
348
+ if (checker) {
349
+ try {
350
+ results.push(checker(output, context));
351
+ }
352
+ catch {
353
+ // If a checker throws, mark as passed to avoid false negatives
354
+ results.push(pass(id, 'Check skipped (internal error)'));
355
+ }
356
+ }
357
+ }
358
+ return results;
359
+ }
360
+ // ── Helpers ──
361
+ function pass(id, details, severity = 'error') {
362
+ return { id, passed: true, details, severity, autofix: false };
363
+ }
364
+ function fail(id, details, fix, severity = 'error') {
365
+ return { id, passed: false, details, fix, severity, autofix: !!fix };
366
+ }
367
+ /**
368
+ * Extract code from markdown code blocks with given language hints.
369
+ * Also handles raw code without blocks.
370
+ */
371
+ export function extractCodeContent(output, languages) {
372
+ // Try to find fenced code blocks with matching language tags
373
+ const langPattern = languages.join('|');
374
+ // Match code blocks WITH the specified language, or code blocks with no language tag
375
+ const fencedRegex = new RegExp('```(?:(' + langPattern + ')\\s*\\n|\\s*\\n)([\\s\\S]*?)```', 'gi');
376
+ const blocks = [];
377
+ let match;
378
+ while ((match = fencedRegex.exec(output)) !== null) {
379
+ // match[1] = language tag (when lang matched), match[2] = code content
380
+ blocks.push(match[2]);
381
+ }
382
+ if (blocks.length > 0) {
383
+ return blocks.join('\n\n');
384
+ }
385
+ // No code blocks — check if the output itself looks like code
386
+ if (output.includes('function ') || output.includes('import ') ||
387
+ output.includes('class ') || output.includes('const ') ||
388
+ output.includes('<div') || output.includes('<html')) {
389
+ return output;
390
+ }
391
+ return null;
392
+ }
393
+ function detectLanguage(code) {
394
+ if (code.trim().startsWith('{') || code.trim().startsWith('['))
395
+ return 'json';
396
+ if (code.includes('import ') || code.includes('export '))
397
+ return 'typescript';
398
+ if (code.includes('<html') || code.includes('<div'))
399
+ return 'html';
400
+ if ((code.includes('def ') && !code.includes('default')) || (code.includes('class ') && code.includes(':')))
401
+ return 'python';
402
+ return 'typescript';
403
+ }
404
+ function checkBracketBalance(code) {
405
+ const pairs = { '(': ')', '[': ']', '{': '}' };
406
+ const stack = [];
407
+ let inString = false;
408
+ let stringChar = '';
409
+ let escaped = false;
410
+ for (let i = 0; i < code.length; i++) {
411
+ const ch = code[i];
412
+ if (escaped) {
413
+ escaped = false;
414
+ continue;
415
+ }
416
+ if (ch === '\\') {
417
+ escaped = true;
418
+ continue;
419
+ }
420
+ if (inString) {
421
+ if (ch === stringChar)
422
+ inString = false;
423
+ continue;
424
+ }
425
+ if (ch === '"' || ch === "'" || ch === '`') {
426
+ inString = true;
427
+ stringChar = ch;
428
+ continue;
429
+ }
430
+ // Skip single-line comments
431
+ if (ch === '/' && code[i + 1] === '/') {
432
+ const nl = code.indexOf('\n', i);
433
+ i = nl === -1 ? code.length : nl;
434
+ continue;
435
+ }
436
+ // Skip multi-line comments
437
+ if (ch === '/' && code[i + 1] === '*') {
438
+ const end = code.indexOf('*/', i + 2);
439
+ i = end === -1 ? code.length : end + 1;
440
+ continue;
441
+ }
442
+ if (ch in pairs) {
443
+ stack.push(ch);
444
+ }
445
+ else if (ch === ')' || ch === ']' || ch === '}') {
446
+ const expected = stack.pop();
447
+ if (!expected) {
448
+ return { balanced: false, type: ch, details: `Unexpected '${ch}'`, fix: `Remove stray '${ch}'` };
449
+ }
450
+ if (pairs[expected] !== ch) {
451
+ return { balanced: false, type: ch, details: `Expected '${pairs[expected]}' but found '${ch}'`, fix: `Change '${ch}' to '${pairs[expected]}'` };
452
+ }
453
+ }
454
+ }
455
+ if (stack.length > 0) {
456
+ const unclosed = stack.map(s => pairs[s]).reverse().join('');
457
+ return { balanced: false, type: 'bracket', details: `Unclosed: ${stack.join(', ')}`, fix: `Add ${unclosed}` };
458
+ }
459
+ return { balanced: true };
460
+ }
461
+ function checkBasicSyntax(code) {
462
+ // Check for duplicate commas
463
+ if (/,,/.test(code))
464
+ return 'Duplicate commas found';
465
+ // Check for missing semicolons in obvious places (very conservative)
466
+ // Only flag if there's a clear pattern break
467
+ if (/\)\s*\n\s*(?:const|let|var|function|class|if|for|while)\b/.test(code)) {
468
+ // This is often valid (e.g., function call then statement), so don't flag
469
+ }
470
+ return null;
471
+ }
472
+ function extractImportNames(code) {
473
+ const names = [];
474
+ const regex = /import\s+(?:\{([^}]+)\}|(\w+))/g;
475
+ let match;
476
+ while ((match = regex.exec(code)) !== null) {
477
+ if (match[1]) {
478
+ // Named imports: { foo, bar as baz }
479
+ for (const part of match[1].split(',')) {
480
+ const name = part.trim().split(/\s+as\s+/).pop()?.trim();
481
+ if (name && name.length > 1)
482
+ names.push(name);
483
+ }
484
+ }
485
+ else if (match[2]) {
486
+ // Default import
487
+ names.push(match[2]);
488
+ }
489
+ }
490
+ return names;
491
+ }
492
+ //# sourceMappingURL=static-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-checks.js","sourceRoot":"","sources":["../../../src/cli/validation/static-checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { SpiralEngine } from '../../spiral/engine.js';
2
+ import type { ValidationResult } from './autofix.js';
3
+ export interface ValidationStats {
4
+ totalValidations: number;
5
+ totalChecks: number;
6
+ totalPassed: number;
7
+ totalFailed: number;
8
+ totalAutofixes: number;
9
+ averageDuration: number;
10
+ averageLoops: number;
11
+ autofixRate: number;
12
+ issueFrequency: Map<string, {
13
+ count: number;
14
+ autofixed: number;
15
+ }>;
16
+ }
17
+ /**
18
+ * Store validation result in spiral for long-term stats.
19
+ */
20
+ export declare function storeValidationResult(result: ValidationResult, taskCategory: string, engine: SpiralEngine | undefined): Promise<void>;
21
+ /**
22
+ * Query validation stats from spiral memory.
23
+ */
24
+ export declare function getValidationStats(engine: SpiralEngine | undefined): Promise<ValidationStats | null>;
25
+ /**
26
+ * Render validation stats for display.
27
+ */
28
+ export declare function renderValidationStats(stats: ValidationStats): string;
29
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/cli/validation/stats.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,YAAY,GAAG,SAAS,GAC/B,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiB1G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6BpE"}