kynjal-cli 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/dist/src/appliance/gguf-engine.d.ts +91 -0
  2. package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
  3. package/dist/src/appliance/gguf-engine.js +286 -525
  4. package/dist/src/appliance/gguf-engine.js.map +1 -1
  5. package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  6. package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
  7. package/dist/src/appliance/ruvllm-bridge.js +203 -403
  8. package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
  9. package/dist/src/appliance/rvfa-builder.d.ts +44 -0
  10. package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
  11. package/dist/src/appliance/rvfa-builder.js +154 -208
  12. package/dist/src/appliance/rvfa-builder.js.map +1 -1
  13. package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  14. package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
  15. package/dist/src/appliance/rvfa-distribution.js +260 -423
  16. package/dist/src/appliance/rvfa-distribution.js.map +1 -1
  17. package/dist/src/appliance/rvfa-format.d.ts +111 -0
  18. package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
  19. package/dist/src/appliance/rvfa-format.js +128 -200
  20. package/dist/src/appliance/rvfa-format.js.map +1 -1
  21. package/dist/src/appliance/rvfa-runner.d.ts +69 -0
  22. package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
  23. package/dist/src/appliance/rvfa-runner.js +168 -304
  24. package/dist/src/appliance/rvfa-runner.js.map +1 -1
  25. package/dist/src/appliance/rvfa-signing.d.ts +123 -0
  26. package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
  27. package/dist/src/appliance/rvfa-signing.js +173 -295
  28. package/dist/src/appliance/rvfa-signing.js.map +1 -1
  29. package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  30. package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
  31. package/dist/src/benchmarks/pretrain/index.js +331 -542
  32. package/dist/src/benchmarks/pretrain/index.js.map +1 -1
  33. package/dist/src/commands/agent.js +574 -697
  34. package/dist/src/commands/agent.js.map +1 -1
  35. package/dist/src/commands/analyze.js +1218 -1548
  36. package/dist/src/commands/analyze.js.map +1 -1
  37. package/dist/src/commands/appliance-advanced.js +158 -267
  38. package/dist/src/commands/appliance-advanced.js.map +1 -1
  39. package/dist/src/commands/appliance.js +318 -493
  40. package/dist/src/commands/appliance.js.map +1 -1
  41. package/dist/src/commands/benchmark.js +372 -523
  42. package/dist/src/commands/benchmark.js.map +1 -1
  43. package/dist/src/commands/claims.js +274 -364
  44. package/dist/src/commands/claims.js.map +1 -1
  45. package/dist/src/commands/cleanup.js +113 -157
  46. package/dist/src/commands/cleanup.js.map +1 -1
  47. package/dist/src/commands/completions.js +477 -118
  48. package/dist/src/commands/completions.js.map +1 -1
  49. package/dist/src/commands/config.js +237 -303
  50. package/dist/src/commands/config.js.map +1 -1
  51. package/dist/src/commands/daemon.js +487 -596
  52. package/dist/src/commands/daemon.js.map +1 -1
  53. package/dist/src/commands/deployment.js +194 -275
  54. package/dist/src/commands/deployment.js.map +1 -1
  55. package/dist/src/commands/doctor.js +504 -686
  56. package/dist/src/commands/doctor.js.map +1 -1
  57. package/dist/src/commands/embeddings.js +1293 -1543
  58. package/dist/src/commands/embeddings.js.map +1 -1
  59. package/dist/src/commands/guidance.js +449 -596
  60. package/dist/src/commands/guidance.js.map +1 -1
  61. package/dist/src/commands/hive-mind.js +854 -938
  62. package/dist/src/commands/hive-mind.js.map +1 -1
  63. package/dist/src/commands/hooks.js +3112 -3519
  64. package/dist/src/commands/hooks.js.map +1 -1
  65. package/dist/src/commands/index.d.ts +115 -0
  66. package/dist/src/commands/index.d.ts.map +1 -0
  67. package/dist/src/commands/index.js +126 -308
  68. package/dist/src/commands/index.js.map +1 -1
  69. package/dist/src/commands/init.js +788 -940
  70. package/dist/src/commands/init.js.map +1 -1
  71. package/dist/src/commands/issues.js +383 -558
  72. package/dist/src/commands/issues.js.map +1 -1
  73. package/dist/src/commands/mcp.js +493 -605
  74. package/dist/src/commands/mcp.js.map +1 -1
  75. package/dist/src/commands/memory.js +833 -1026
  76. package/dist/src/commands/memory.js.map +1 -1
  77. package/dist/src/commands/migrate.js +282 -347
  78. package/dist/src/commands/migrate.js.map +1 -1
  79. package/dist/src/commands/neural.js +1289 -1563
  80. package/dist/src/commands/neural.js.map +1 -1
  81. package/dist/src/commands/performance.js +497 -643
  82. package/dist/src/commands/performance.js.map +1 -1
  83. package/dist/src/commands/plugins.js +668 -841
  84. package/dist/src/commands/plugins.js.map +1 -1
  85. package/dist/src/commands/process.js +392 -447
  86. package/dist/src/commands/process.js.map +1 -1
  87. package/dist/src/commands/progress.js +162 -256
  88. package/dist/src/commands/progress.js.map +1 -1
  89. package/dist/src/commands/providers.js +150 -220
  90. package/dist/src/commands/providers.js.map +1 -1
  91. package/dist/src/commands/route.js +520 -665
  92. package/dist/src/commands/route.js.map +1 -1
  93. package/dist/src/commands/ruvector/backup.js +505 -651
  94. package/dist/src/commands/ruvector/backup.js.map +1 -1
  95. package/dist/src/commands/ruvector/benchmark.js +349 -401
  96. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  97. package/dist/src/commands/ruvector/import.js +224 -266
  98. package/dist/src/commands/ruvector/import.js.map +1 -1
  99. package/dist/src/commands/ruvector/index.js +37 -75
  100. package/dist/src/commands/ruvector/index.js.map +1 -1
  101. package/dist/src/commands/ruvector/init.js +336 -359
  102. package/dist/src/commands/ruvector/init.js.map +1 -1
  103. package/dist/src/commands/ruvector/migrate.js +335 -322
  104. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  105. package/dist/src/commands/ruvector/optimize.js +375 -431
  106. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  107. package/dist/src/commands/ruvector/setup.js +703 -117
  108. package/dist/src/commands/ruvector/setup.js.map +1 -1
  109. package/dist/src/commands/ruvector/status.js +364 -419
  110. package/dist/src/commands/ruvector/status.js.map +1 -1
  111. package/dist/src/commands/security.js +485 -608
  112. package/dist/src/commands/security.js.map +1 -1
  113. package/dist/src/commands/session.js +504 -626
  114. package/dist/src/commands/session.js.map +1 -1
  115. package/dist/src/commands/start.js +267 -364
  116. package/dist/src/commands/start.js.map +1 -1
  117. package/dist/src/commands/status.js +380 -486
  118. package/dist/src/commands/status.js.map +1 -1
  119. package/dist/src/commands/swarm.js +408 -488
  120. package/dist/src/commands/swarm.js.map +1 -1
  121. package/dist/src/commands/task.js +423 -538
  122. package/dist/src/commands/task.js.map +1 -1
  123. package/dist/src/commands/transfer-store.js +322 -412
  124. package/dist/src/commands/transfer-store.js.map +1 -1
  125. package/dist/src/commands/update.js +196 -291
  126. package/dist/src/commands/update.js.map +1 -1
  127. package/dist/src/commands/workflow.js +386 -486
  128. package/dist/src/commands/workflow.js.map +1 -1
  129. package/dist/src/config-adapter.d.ts +15 -0
  130. package/dist/src/config-adapter.d.ts.map +1 -0
  131. package/dist/src/config-adapter.js +38 -39
  132. package/dist/src/config-adapter.js.map +1 -1
  133. package/dist/src/index.d.ts +77 -0
  134. package/dist/src/index.d.ts.map +1 -0
  135. package/dist/src/index.js +309 -411
  136. package/dist/src/index.js.map +1 -1
  137. package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  138. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
  139. package/dist/src/infrastructure/in-memory-repositories.js +246 -507
  140. package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
  141. package/dist/src/init/claudemd-generator.d.ts +25 -0
  142. package/dist/src/init/claudemd-generator.d.ts.map +1 -0
  143. package/dist/src/init/claudemd-generator.js +368 -78
  144. package/dist/src/init/claudemd-generator.js.map +1 -1
  145. package/dist/src/init/executor.d.ts +41 -0
  146. package/dist/src/init/executor.d.ts.map +1 -0
  147. package/dist/src/init/executor.js +1307 -996
  148. package/dist/src/init/executor.js.map +1 -1
  149. package/dist/src/init/helpers-generator.d.ts +60 -0
  150. package/dist/src/init/helpers-generator.d.ts.map +1 -0
  151. package/dist/src/init/helpers-generator.js +657 -12
  152. package/dist/src/init/helpers-generator.js.map +1 -1
  153. package/dist/src/init/index.d.ts +1 -1
  154. package/dist/src/init/index.d.ts.map +1 -1
  155. package/dist/src/init/index.js +1 -1
  156. package/dist/src/init/index.js.map +1 -1
  157. package/dist/src/init/mcp-generator.js +33 -37
  158. package/dist/src/init/mcp-generator.js.map +1 -1
  159. package/dist/src/init/settings-generator.js +76 -77
  160. package/dist/src/init/settings-generator.js.map +1 -1
  161. package/dist/src/init/statusline-generator.js +801 -3
  162. package/dist/src/init/statusline-generator.js.map +1 -1
  163. package/dist/src/init/types.d.ts +1 -1
  164. package/dist/src/init/types.d.ts.map +1 -1
  165. package/dist/src/init/types.js +76 -59
  166. package/dist/src/init/types.js.map +1 -1
  167. package/dist/src/mcp-client.d.ts +92 -0
  168. package/dist/src/mcp-client.d.ts.map +1 -0
  169. package/dist/src/mcp-client.js +81 -125
  170. package/dist/src/mcp-client.js.map +1 -1
  171. package/dist/src/mcp-server.d.ts +161 -0
  172. package/dist/src/mcp-server.d.ts.map +1 -0
  173. package/dist/src/mcp-server.js +470 -757
  174. package/dist/src/mcp-server.js.map +1 -1
  175. package/dist/src/mcp-tools/agent-tools.js +391 -492
  176. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  177. package/dist/src/mcp-tools/agentdb-tools.js +332 -533
  178. package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
  179. package/dist/src/mcp-tools/analyze-tools.js +172 -236
  180. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  181. package/dist/src/mcp-tools/auto-install.d.ts +83 -0
  182. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
  183. package/dist/src/mcp-tools/auto-install.js +80 -142
  184. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  185. package/dist/src/mcp-tools/browser-tools.js +252 -375
  186. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  187. package/dist/src/mcp-tools/claims-tools.js +473 -565
  188. package/dist/src/mcp-tools/claims-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/config-tools.js +197 -272
  190. package/dist/src/mcp-tools/config-tools.js.map +1 -1
  191. package/dist/src/mcp-tools/coordination-tools.js +500 -572
  192. package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
  193. package/dist/src/mcp-tools/daa-tools.js +286 -364
  194. package/dist/src/mcp-tools/daa-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/embeddings-tools.js +582 -693
  196. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  197. package/dist/src/mcp-tools/github-tools.js +260 -311
  198. package/dist/src/mcp-tools/github-tools.js.map +1 -1
  199. package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
  200. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  201. package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
  202. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  203. package/dist/src/mcp-tools/memory-tools.js +350 -505
  204. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  205. package/dist/src/mcp-tools/neural-tools.js +315 -412
  206. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  207. package/dist/src/mcp-tools/performance-tools.js +420 -480
  208. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  209. package/dist/src/mcp-tools/progress-tools.js +204 -278
  210. package/dist/src/mcp-tools/progress-tools.js.map +1 -1
  211. package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
  212. package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
  213. package/dist/src/mcp-tools/security-tools.js +297 -429
  214. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  215. package/dist/src/mcp-tools/session-tools.js +185 -234
  216. package/dist/src/mcp-tools/session-tools.js.map +1 -1
  217. package/dist/src/mcp-tools/swarm-tools.js +207 -260
  218. package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
  219. package/dist/src/mcp-tools/system-tools.js +276 -325
  220. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  221. package/dist/src/mcp-tools/task-tools.js +270 -336
  222. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  223. package/dist/src/mcp-tools/terminal-tools.js +148 -196
  224. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  225. package/dist/src/mcp-tools/transfer-tools.js +186 -333
  226. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  227. package/dist/src/mcp-tools/types.d.ts +31 -0
  228. package/dist/src/mcp-tools/types.d.ts.map +1 -0
  229. package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
  230. package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
  231. package/dist/src/mcp-tools/workflow-tools.js +405 -450
  232. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  233. package/dist/src/memory/ewc-consolidation.d.ts +295 -0
  234. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  235. package/dist/src/memory/ewc-consolidation.js +190 -303
  236. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  237. package/dist/src/memory/intelligence.d.ts +338 -0
  238. package/dist/src/memory/intelligence.d.ts.map +1 -0
  239. package/dist/src/memory/intelligence.js +569 -794
  240. package/dist/src/memory/intelligence.js.map +1 -1
  241. package/dist/src/memory/memory-bridge.d.ts +407 -0
  242. package/dist/src/memory/memory-bridge.d.ts.map +1 -0
  243. package/dist/src/memory/memory-bridge.js +1170 -1640
  244. package/dist/src/memory/memory-bridge.js.map +1 -1
  245. package/dist/src/memory/memory-initializer.d.ts +412 -0
  246. package/dist/src/memory/memory-initializer.d.ts.map +1 -0
  247. package/dist/src/memory/memory-initializer.js +1836 -1851
  248. package/dist/src/memory/memory-initializer.js.map +1 -1
  249. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  250. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  251. package/dist/src/memory/sona-optimizer.js +199 -329
  252. package/dist/src/memory/sona-optimizer.js.map +1 -1
  253. package/dist/src/output.d.ts +2 -2
  254. package/dist/src/output.d.ts.map +1 -1
  255. package/dist/src/output.js +242 -272
  256. package/dist/src/output.js.map +1 -1
  257. package/dist/src/parser.d.ts +51 -0
  258. package/dist/src/parser.d.ts.map +1 -0
  259. package/dist/src/parser.js +140 -187
  260. package/dist/src/parser.js.map +1 -1
  261. package/dist/src/plugins/manager.d.ts +133 -0
  262. package/dist/src/plugins/manager.d.ts.map +1 -0
  263. package/dist/src/plugins/manager.js +285 -521
  264. package/dist/src/plugins/manager.js.map +1 -1
  265. package/dist/src/plugins/store/discovery.d.ts +88 -0
  266. package/dist/src/plugins/store/discovery.d.ts.map +1 -0
  267. package/dist/src/plugins/store/discovery.js +271 -358
  268. package/dist/src/plugins/store/discovery.js.map +1 -1
  269. package/dist/src/plugins/store/index.d.ts +76 -0
  270. package/dist/src/plugins/store/index.d.ts.map +1 -0
  271. package/dist/src/plugins/store/index.js +48 -105
  272. package/dist/src/plugins/store/index.js.map +1 -1
  273. package/dist/src/plugins/store/search.d.ts +46 -0
  274. package/dist/src/plugins/store/search.d.ts.map +1 -0
  275. package/dist/src/plugins/store/search.js +69 -107
  276. package/dist/src/plugins/store/search.js.map +1 -1
  277. package/dist/src/plugins/store/types.d.ts +274 -0
  278. package/dist/src/plugins/store/types.d.ts.map +1 -0
  279. package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
  280. package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
  281. package/dist/src/plugins/tests/standalone-test.js +172 -223
  282. package/dist/src/plugins/tests/standalone-test.js.map +1 -1
  283. package/dist/src/plugins/tests/test-plugin-store.js +190 -228
  284. package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
  285. package/dist/src/production/circuit-breaker.d.ts +101 -0
  286. package/dist/src/production/circuit-breaker.d.ts.map +1 -0
  287. package/dist/src/production/circuit-breaker.js +62 -126
  288. package/dist/src/production/circuit-breaker.js.map +1 -1
  289. package/dist/src/production/error-handler.d.ts +92 -0
  290. package/dist/src/production/error-handler.d.ts.map +1 -0
  291. package/dist/src/production/error-handler.js +86 -156
  292. package/dist/src/production/error-handler.js.map +1 -1
  293. package/dist/src/production/monitoring.d.ts +161 -0
  294. package/dist/src/production/monitoring.d.ts.map +1 -0
  295. package/dist/src/production/monitoring.js +139 -220
  296. package/dist/src/production/monitoring.js.map +1 -1
  297. package/dist/src/production/rate-limiter.d.ts +80 -0
  298. package/dist/src/production/rate-limiter.d.ts.map +1 -0
  299. package/dist/src/production/rate-limiter.js +74 -93
  300. package/dist/src/production/rate-limiter.js.map +1 -1
  301. package/dist/src/production/retry.d.ts +48 -0
  302. package/dist/src/production/retry.d.ts.map +1 -0
  303. package/dist/src/production/retry.js +75 -167
  304. package/dist/src/production/retry.js.map +1 -1
  305. package/dist/src/prompt.d.ts +44 -0
  306. package/dist/src/prompt.d.ts.map +1 -0
  307. package/dist/src/prompt.js +436 -560
  308. package/dist/src/prompt.js.map +1 -1
  309. package/dist/src/runtime/headless.d.ts +60 -0
  310. package/dist/src/runtime/headless.d.ts.map +1 -0
  311. package/dist/src/runtime/headless.js +197 -286
  312. package/dist/src/runtime/headless.js.map +1 -1
  313. package/dist/src/ruvector/agent-wasm.d.ts +182 -0
  314. package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
  315. package/dist/src/ruvector/agent-wasm.js +156 -351
  316. package/dist/src/ruvector/agent-wasm.js.map +1 -1
  317. package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  318. package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
  319. package/dist/src/ruvector/ast-analyzer.js +145 -232
  320. package/dist/src/ruvector/ast-analyzer.js.map +1 -1
  321. package/dist/src/ruvector/coverage-router.d.ts +160 -0
  322. package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
  323. package/dist/src/ruvector/coverage-router.js +287 -419
  324. package/dist/src/ruvector/coverage-router.js.map +1 -1
  325. package/dist/src/ruvector/coverage-tools.js +56 -101
  326. package/dist/src/ruvector/coverage-tools.js.map +1 -1
  327. package/dist/src/ruvector/diff-classifier.d.ts +175 -0
  328. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
  329. package/dist/src/ruvector/diff-classifier.js +324 -451
  330. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  331. package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  332. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
  333. package/dist/src/ruvector/enhanced-model-router.js +260 -336
  334. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  335. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  336. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  337. package/dist/src/ruvector/flash-attention.js +223 -254
  338. package/dist/src/ruvector/flash-attention.js.map +1 -1
  339. package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  340. package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
  341. package/dist/src/ruvector/graph-analyzer.js +486 -680
  342. package/dist/src/ruvector/graph-analyzer.js.map +1 -1
  343. package/dist/src/ruvector/index.d.ts +40 -0
  344. package/dist/src/ruvector/index.d.ts.map +1 -0
  345. package/dist/src/ruvector/index.js +36 -106
  346. package/dist/src/ruvector/index.js.map +1 -1
  347. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  348. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  349. package/dist/src/ruvector/lora-adapter.js +155 -248
  350. package/dist/src/ruvector/lora-adapter.js.map +1 -1
  351. package/dist/src/ruvector/model-router.d.ts +220 -0
  352. package/dist/src/ruvector/model-router.d.ts.map +1 -0
  353. package/dist/src/ruvector/model-router.js +175 -248
  354. package/dist/src/ruvector/model-router.js.map +1 -1
  355. package/dist/src/ruvector/moe-router.d.ts +206 -0
  356. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  357. package/dist/src/ruvector/moe-router.js +228 -286
  358. package/dist/src/ruvector/moe-router.js.map +1 -1
  359. package/dist/src/ruvector/q-learning-router.d.ts +211 -0
  360. package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
  361. package/dist/src/ruvector/q-learning-router.js +257 -338
  362. package/dist/src/ruvector/q-learning-router.js.map +1 -1
  363. package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  364. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
  365. package/dist/src/ruvector/ruvllm-wasm.js +270 -434
  366. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  367. package/dist/src/ruvector/semantic-router.d.ts +77 -0
  368. package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
  369. package/dist/src/ruvector/semantic-router.js +60 -67
  370. package/dist/src/ruvector/semantic-router.js.map +1 -1
  371. package/dist/src/ruvector/vector-db.d.ts +69 -0
  372. package/dist/src/ruvector/vector-db.d.ts.map +1 -0
  373. package/dist/src/ruvector/vector-db.js +119 -205
  374. package/dist/src/ruvector/vector-db.js.map +1 -1
  375. package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  376. package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
  377. package/dist/src/services/agentic-flow-bridge.js +32 -105
  378. package/dist/src/services/agentic-flow-bridge.js.map +1 -1
  379. package/dist/src/services/claim-service.d.ts +204 -0
  380. package/dist/src/services/claim-service.d.ts.map +1 -0
  381. package/dist/src/services/claim-service.js +615 -940
  382. package/dist/src/services/claim-service.js.map +1 -1
  383. package/dist/src/services/container-worker-pool.d.ts +197 -0
  384. package/dist/src/services/container-worker-pool.d.ts.map +1 -0
  385. package/dist/src/services/container-worker-pool.js +398 -666
  386. package/dist/src/services/container-worker-pool.js.map +1 -1
  387. package/dist/src/services/headless-worker-executor.d.ts +304 -0
  388. package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
  389. package/dist/src/services/headless-worker-executor.js +441 -467
  390. package/dist/src/services/headless-worker-executor.js.map +1 -1
  391. package/dist/src/services/index.d.ts +4 -4
  392. package/dist/src/services/index.d.ts.map +1 -1
  393. package/dist/src/services/index.js +4 -4
  394. package/dist/src/services/index.js.map +1 -1
  395. package/dist/src/services/registry-api.d.ts +58 -0
  396. package/dist/src/services/registry-api.d.ts.map +1 -0
  397. package/dist/src/services/registry-api.js +92 -200
  398. package/dist/src/services/registry-api.js.map +1 -1
  399. package/dist/src/services/ruvector-training.d.ts +222 -0
  400. package/dist/src/services/ruvector-training.d.ts.map +1 -0
  401. package/dist/src/services/ruvector-training.js +257 -337
  402. package/dist/src/services/ruvector-training.js.map +1 -1
  403. package/dist/src/services/worker-daemon.d.ts +228 -0
  404. package/dist/src/services/worker-daemon.d.ts.map +1 -0
  405. package/dist/src/services/worker-daemon.js +591 -849
  406. package/dist/src/services/worker-daemon.js.map +1 -1
  407. package/dist/src/services/worker-queue.d.ts +194 -0
  408. package/dist/src/services/worker-queue.d.ts.map +1 -0
  409. package/dist/src/services/worker-queue.js +331 -548
  410. package/dist/src/services/worker-queue.js.map +1 -1
  411. package/dist/src/suggest.d.ts +53 -0
  412. package/dist/src/suggest.d.ts.map +1 -0
  413. package/dist/src/suggest.js +45 -55
  414. package/dist/src/suggest.js.map +1 -1
  415. package/dist/src/transfer/anonymization/index.js +29 -37
  416. package/dist/src/transfer/anonymization/index.js.map +1 -1
  417. package/dist/src/transfer/deploy-seraphine.js +128 -155
  418. package/dist/src/transfer/deploy-seraphine.js.map +1 -1
  419. package/dist/src/transfer/export.d.ts +25 -0
  420. package/dist/src/transfer/export.d.ts.map +1 -0
  421. package/dist/src/transfer/export.js +84 -142
  422. package/dist/src/transfer/export.js.map +1 -1
  423. package/dist/src/transfer/index.d.ts +1 -1
  424. package/dist/src/transfer/index.d.ts.map +1 -1
  425. package/dist/src/transfer/index.js +0 -2
  426. package/dist/src/transfer/index.js.map +1 -1
  427. package/dist/src/transfer/ipfs/client.d.ts +109 -0
  428. package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
  429. package/dist/src/transfer/ipfs/client.js +187 -337
  430. package/dist/src/transfer/ipfs/client.js.map +1 -1
  431. package/dist/src/transfer/ipfs/upload.d.ts +95 -0
  432. package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
  433. package/dist/src/transfer/ipfs/upload.js +288 -434
  434. package/dist/src/transfer/ipfs/upload.js.map +1 -1
  435. package/dist/src/transfer/models/seraphine.d.ts +72 -0
  436. package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
  437. package/dist/src/transfer/models/seraphine.js +55 -55
  438. package/dist/src/transfer/models/seraphine.js.map +1 -1
  439. package/dist/src/transfer/serialization/cfp.d.ts +49 -0
  440. package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
  441. package/dist/src/transfer/serialization/cfp.js +30 -31
  442. package/dist/src/transfer/serialization/cfp.js.map +1 -1
  443. package/dist/src/transfer/storage/gcs.d.ts +82 -0
  444. package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
  445. package/dist/src/transfer/storage/gcs.js +165 -232
  446. package/dist/src/transfer/storage/gcs.js.map +1 -1
  447. package/dist/src/transfer/store/discovery.d.ts +84 -0
  448. package/dist/src/transfer/store/discovery.d.ts.map +1 -0
  449. package/dist/src/transfer/store/discovery.js +239 -349
  450. package/dist/src/transfer/store/discovery.js.map +1 -1
  451. package/dist/src/transfer/store/download.d.ts +70 -0
  452. package/dist/src/transfer/store/download.d.ts.map +1 -0
  453. package/dist/src/transfer/store/download.js +243 -365
  454. package/dist/src/transfer/store/download.js.map +1 -1
  455. package/dist/src/transfer/store/index.d.ts +84 -0
  456. package/dist/src/transfer/store/index.d.ts.map +1 -0
  457. package/dist/src/transfer/store/index.js +63 -130
  458. package/dist/src/transfer/store/index.js.map +1 -1
  459. package/dist/src/transfer/store/publish.d.ts +76 -0
  460. package/dist/src/transfer/store/publish.d.ts.map +1 -0
  461. package/dist/src/transfer/store/publish.js +184 -258
  462. package/dist/src/transfer/store/publish.js.map +1 -1
  463. package/dist/src/transfer/store/registry.js +50 -72
  464. package/dist/src/transfer/store/registry.js.map +1 -1
  465. package/dist/src/transfer/store/search.d.ts +54 -0
  466. package/dist/src/transfer/store/search.d.ts.map +1 -0
  467. package/dist/src/transfer/store/search.js +64 -96
  468. package/dist/src/transfer/store/search.js.map +1 -1
  469. package/dist/src/transfer/store/tests/standalone-test.js +174 -231
  470. package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
  471. package/dist/src/transfer/test-seraphine.js +95 -130
  472. package/dist/src/transfer/test-seraphine.js.map +1 -1
  473. package/dist/src/transfer/tests/test-store.js +194 -239
  474. package/dist/src/transfer/tests/test-store.js.map +1 -1
  475. package/dist/src/transfer/types.d.ts +245 -0
  476. package/dist/src/transfer/types.d.ts.map +1 -0
  477. package/dist/src/types.d.ts +198 -0
  478. package/dist/src/types.d.ts.map +1 -0
  479. package/dist/src/types.js +26 -55
  480. package/dist/src/types.js.map +1 -1
  481. package/dist/src/update/checker.d.ts +34 -0
  482. package/dist/src/update/checker.d.ts.map +1 -0
  483. package/dist/src/update/checker.js +106 -183
  484. package/dist/src/update/checker.js.map +1 -1
  485. package/dist/src/update/executor.d.ts +32 -0
  486. package/dist/src/update/executor.d.ts.map +1 -0
  487. package/dist/src/update/executor.js +135 -198
  488. package/dist/src/update/executor.js.map +1 -1
  489. package/dist/src/update/index.d.ts +33 -0
  490. package/dist/src/update/index.d.ts.map +1 -0
  491. package/dist/src/update/index.js +38 -85
  492. package/dist/src/update/index.js.map +1 -1
  493. package/dist/src/update/rate-limiter.d.ts +20 -0
  494. package/dist/src/update/rate-limiter.d.ts.map +1 -0
  495. package/dist/src/update/rate-limiter.js +19 -31
  496. package/dist/src/update/rate-limiter.js.map +1 -1
  497. package/dist/src/update/validator.d.ts +17 -0
  498. package/dist/src/update/validator.d.ts.map +1 -0
  499. package/dist/src/update/validator.js +38 -64
  500. package/dist/src/update/validator.js.map +1 -1
  501. package/dist/tsconfig.tsbuildinfo +1 -1
  502. package/package.json +1 -1
@@ -4,302 +4,235 @@
4
4
  *
5
5
  * Created with ❤️ by ruv.io
6
6
  */
7
- var __assign = (this && this.__assign) || function () {
8
- __assign = Object.assign || function(t) {
9
- for (var s, i = 1, n = arguments.length; i < n; i++) {
10
- s = arguments[i];
11
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
12
- t[p] = s[p];
13
- }
14
- return t;
15
- };
16
- return __assign.apply(this, arguments);
17
- };
18
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
- return new (P || (P = Promise))(function (resolve, reject) {
21
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
- step((generator = generator.apply(thisArg, _arguments || [])).next());
25
- });
26
- };
27
- var __generator = (this && this.__generator) || function (thisArg, body) {
28
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
- function verb(n) { return function (v) { return step([n, v]); }; }
31
- function step(op) {
32
- if (f) throw new TypeError("Generator is already executing.");
33
- while (_) try {
34
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
- if (y = 0, t) op = [op[0] & 2, t.value];
36
- switch (op[0]) {
37
- case 0: case 1: t = op; break;
38
- case 4: _.label++; return { value: op[1], done: false };
39
- case 5: _.label++; y = op[1]; op = [0]; continue;
40
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
- default:
42
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
- if (t[2]) _.ops.pop();
47
- _.trys.pop(); continue;
48
- }
49
- op = body.call(thisArg, _);
50
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
- }
53
- };
54
7
  import { output } from '../output.js';
55
8
  // Scan subcommand
56
- var scanCommand = {
9
+ const scanCommand = {
57
10
  name: 'scan',
58
11
  description: 'Run security scan on target (code, dependencies, containers)',
59
12
  options: [
60
- { name: 'target', short: 't', type: 'string', description: 'Target path or URL to scan', "default": '.' },
61
- { name: 'depth', short: 'd', type: 'string', description: 'Scan depth: quick, standard, deep', "default": 'standard' },
62
- { name: 'type', type: 'string', description: 'Scan type: code, deps, container, all', "default": 'all' },
63
- { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json, sarif', "default": 'text' },
13
+ { name: 'target', short: 't', type: 'string', description: 'Target path or URL to scan', default: '.' },
14
+ { name: 'depth', short: 'd', type: 'string', description: 'Scan depth: quick, standard, deep', default: 'standard' },
15
+ { name: 'type', type: 'string', description: 'Scan type: code, deps, container, all', default: 'all' },
16
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json, sarif', default: 'text' },
64
17
  { name: 'fix', short: 'f', type: 'boolean', description: 'Auto-fix vulnerabilities where possible' },
65
18
  ],
66
19
  examples: [
67
20
  { command: 'claude-flow security scan -t ./src', description: 'Scan source directory' },
68
21
  { command: 'claude-flow security scan --depth deep --fix', description: 'Deep scan with auto-fix' },
69
22
  ],
70
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
71
- var target, depth, scanType, fix, spinner, findings, criticalCount, highCount, mediumCount, lowCount, fs_1, path_1, execSync, packageJsonPath, auditResult, audit, _i, _a, _b, pkg, vuln, sev, title, secretPatterns_1, scanDir_1, scanDepth, codePatterns_1, scanCodeDir_1, scanDepth, fixSpinner, error_1;
72
- var _c;
73
- return __generator(this, function (_d) {
74
- switch (_d.label) {
75
- case 0:
76
- target = ctx.flags.target || '.';
77
- depth = ctx.flags.depth || 'standard';
78
- scanType = ctx.flags.type || 'all';
79
- fix = ctx.flags.fix;
80
- output.writeln();
81
- output.writeln(output.bold('Security Scan'));
82
- output.writeln(output.dim('─'.repeat(50)));
83
- spinner = output.createSpinner({ text: "Scanning " + target + "...", spinner: 'dots' });
84
- spinner.start();
85
- findings = [];
86
- criticalCount = 0, highCount = 0, mediumCount = 0, lowCount = 0;
87
- _d.label = 1;
88
- case 1:
89
- _d.trys.push([1, 5, , 6]);
90
- return [4 /*yield*/, import('fs')];
91
- case 2:
92
- fs_1 = _d.sent();
93
- return [4 /*yield*/, import('path')];
94
- case 3:
95
- path_1 = _d.sent();
96
- return [4 /*yield*/, import('child_process')];
97
- case 4:
98
- execSync = (_d.sent()).execSync;
99
- // Phase 1: npm audit for dependency vulnerabilities
100
- if (scanType === 'all' || scanType === 'deps') {
101
- spinner.setText('Checking dependencies with npm audit...');
23
+ action: async (ctx) => {
24
+ const target = ctx.flags.target || '.';
25
+ const depth = ctx.flags.depth || 'standard';
26
+ const scanType = ctx.flags.type || 'all';
27
+ const fix = ctx.flags.fix;
28
+ output.writeln();
29
+ output.writeln(output.bold('Security Scan'));
30
+ output.writeln(output.dim(''.repeat(50)));
31
+ const spinner = output.createSpinner({ text: `Scanning ${target}...`, spinner: 'dots' });
32
+ spinner.start();
33
+ const findings = [];
34
+ let criticalCount = 0, highCount = 0, mediumCount = 0, lowCount = 0;
35
+ try {
36
+ const fs = await import('fs');
37
+ const path = await import('path');
38
+ const { execSync } = await import('child_process');
39
+ // Phase 1: npm audit for dependency vulnerabilities
40
+ if (scanType === 'all' || scanType === 'deps') {
41
+ spinner.setText('Checking dependencies with npm audit...');
42
+ try {
43
+ const packageJsonPath = path.resolve(target, 'package.json');
44
+ if (fs.existsSync(packageJsonPath)) {
45
+ const auditResult = execSync('npm audit --json 2>/dev/null || true', {
46
+ cwd: path.resolve(target),
47
+ encoding: 'utf-8',
48
+ maxBuffer: 10 * 1024 * 1024,
49
+ });
102
50
  try {
103
- packageJsonPath = path_1.resolve(target, 'package.json');
104
- if (fs_1.existsSync(packageJsonPath)) {
105
- auditResult = execSync('npm audit --json 2>/dev/null || true', {
106
- cwd: path_1.resolve(target),
107
- encoding: 'utf-8',
108
- maxBuffer: 10 * 1024 * 1024
109
- });
110
- try {
111
- audit = JSON.parse(auditResult);
112
- if (audit.vulnerabilities) {
113
- for (_i = 0, _a = Object.entries(audit.vulnerabilities); _i < _a.length; _i++) {
114
- _b = _a[_i], pkg = _b[0], vuln = _b[1];
115
- sev = vuln.severity || 'low';
116
- title = Array.isArray(vuln.via) && ((_c = vuln.via[0]) === null || _c === void 0 ? void 0 : _c.title) ? vuln.via[0].title : 'Vulnerability';
117
- if (sev === 'critical')
118
- criticalCount++;
119
- else if (sev === 'high')
120
- highCount++;
121
- else if (sev === 'moderate' || sev === 'medium')
122
- mediumCount++;
123
- else
124
- lowCount++;
125
- findings.push({
126
- severity: sev === 'critical' ? output.error('CRITICAL') :
127
- sev === 'high' ? output.warning('HIGH') :
128
- sev === 'moderate' || sev === 'medium' ? output.warning('MEDIUM') : output.info('LOW'),
129
- type: 'Dependency CVE',
130
- location: "package.json:" + pkg,
131
- description: title.substring(0, 35)
132
- });
133
- }
134
- }
51
+ const audit = JSON.parse(auditResult);
52
+ if (audit.vulnerabilities) {
53
+ for (const [pkg, vuln] of Object.entries(audit.vulnerabilities)) {
54
+ const sev = vuln.severity || 'low';
55
+ const title = Array.isArray(vuln.via) && vuln.via[0]?.title ? vuln.via[0].title : 'Vulnerability';
56
+ if (sev === 'critical')
57
+ criticalCount++;
58
+ else if (sev === 'high')
59
+ highCount++;
60
+ else if (sev === 'moderate' || sev === 'medium')
61
+ mediumCount++;
62
+ else
63
+ lowCount++;
64
+ findings.push({
65
+ severity: sev === 'critical' ? output.error('CRITICAL') :
66
+ sev === 'high' ? output.warning('HIGH') :
67
+ sev === 'moderate' || sev === 'medium' ? output.warning('MEDIUM') : output.info('LOW'),
68
+ type: 'Dependency CVE',
69
+ location: `package.json:${pkg}`,
70
+ description: title.substring(0, 35),
71
+ });
135
72
  }
136
- catch ( /* JSON parse failed, no vulns */_e) { /* JSON parse failed, no vulns */ }
137
73
  }
138
74
  }
139
- catch ( /* npm audit failed */_f) { /* npm audit failed */ }
75
+ catch { /* JSON parse failed, no vulns */ }
140
76
  }
141
- // Phase 2: Scan for hardcoded secrets
142
- if (scanType === 'all' || scanType === 'code') {
143
- spinner.setText('Scanning for hardcoded secrets...');
144
- secretPatterns_1 = [
145
- { pattern: /['"](?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{20,}['"]/g, type: 'API Key (Stripe/OpenAI)' },
146
- { pattern: /['"]AKIA[A-Z0-9]{16}['"]/g, type: 'AWS Access Key' },
147
- { pattern: /['"]ghp_[a-zA-Z0-9]{36}['"]/g, type: 'GitHub Token' },
148
- { pattern: /['"]xox[baprs]-[a-zA-Z0-9-]+['"]/g, type: 'Slack Token' },
149
- { pattern: /password\s*[:=]\s*['"][^'"]{8,}['"]/gi, type: 'Hardcoded Password' },
150
- ];
151
- scanDir_1 = function (dir, depthLimit) {
152
- if (depthLimit <= 0)
153
- return;
154
- try {
155
- var entries = fs_1.readdirSync(dir, { withFileTypes: true });
156
- for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
157
- var entry = entries_1[_i];
158
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
159
- continue;
160
- var fullPath = path_1.join(dir, entry.name);
161
- if (entry.isDirectory()) {
162
- scanDir_1(fullPath, depthLimit - 1);
163
- }
164
- else if (entry.isFile() && /\.(ts|js|json|env|yml|yaml)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
165
- try {
166
- var content = fs_1.readFileSync(fullPath, 'utf-8');
167
- var lines = content.split('\n');
168
- for (var i = 0; i < lines.length; i++) {
169
- for (var _a = 0, secretPatterns_2 = secretPatterns_1; _a < secretPatterns_2.length; _a++) {
170
- var _b = secretPatterns_2[_a], pattern = _b.pattern, type = _b.type;
171
- if (pattern.test(lines[i])) {
172
- highCount++;
173
- findings.push({
174
- severity: output.warning('HIGH'),
175
- type: 'Hardcoded Secret',
176
- location: path_1.relative(target, fullPath) + ":" + (i + 1),
177
- description: type
178
- });
179
- pattern.lastIndex = 0;
180
- }
181
- }
77
+ }
78
+ catch { /* npm audit failed */ }
79
+ }
80
+ // Phase 2: Scan for hardcoded secrets
81
+ if (scanType === 'all' || scanType === 'code') {
82
+ spinner.setText('Scanning for hardcoded secrets...');
83
+ const secretPatterns = [
84
+ { pattern: /['"](?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{20,}['"]/g, type: 'API Key (Stripe/OpenAI)' },
85
+ { pattern: /['"]AKIA[A-Z0-9]{16}['"]/g, type: 'AWS Access Key' },
86
+ { pattern: /['"]ghp_[a-zA-Z0-9]{36}['"]/g, type: 'GitHub Token' },
87
+ { pattern: /['"]xox[baprs]-[a-zA-Z0-9-]+['"]/g, type: 'Slack Token' },
88
+ { pattern: /password\s*[:=]\s*['"][^'"]{8,}['"]/gi, type: 'Hardcoded Password' },
89
+ ];
90
+ const scanDir = (dir, depthLimit) => {
91
+ if (depthLimit <= 0)
92
+ return;
93
+ try {
94
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
95
+ for (const entry of entries) {
96
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
97
+ continue;
98
+ const fullPath = path.join(dir, entry.name);
99
+ if (entry.isDirectory()) {
100
+ scanDir(fullPath, depthLimit - 1);
101
+ }
102
+ else if (entry.isFile() && /\.(ts|js|json|env|yml|yaml)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
103
+ try {
104
+ const content = fs.readFileSync(fullPath, 'utf-8');
105
+ const lines = content.split('\n');
106
+ for (let i = 0; i < lines.length; i++) {
107
+ for (const { pattern, type } of secretPatterns) {
108
+ if (pattern.test(lines[i])) {
109
+ highCount++;
110
+ findings.push({
111
+ severity: output.warning('HIGH'),
112
+ type: 'Hardcoded Secret',
113
+ location: `${path.relative(target, fullPath)}:${i + 1}`,
114
+ description: type,
115
+ });
116
+ pattern.lastIndex = 0;
182
117
  }
183
118
  }
184
- catch ( /* file read error */_c) { /* file read error */ }
185
119
  }
186
120
  }
121
+ catch { /* file read error */ }
187
122
  }
188
- catch ( /* dir read error */_d) { /* dir read error */ }
189
- };
190
- scanDepth = depth === 'deep' ? 10 : depth === 'standard' ? 5 : 3;
191
- scanDir_1(path_1.resolve(target), scanDepth);
123
+ }
192
124
  }
193
- // Phase 3: Check for common security issues in code
194
- if ((scanType === 'all' || scanType === 'code') && depth !== 'quick') {
195
- spinner.setText('Analyzing code patterns...');
196
- codePatterns_1 = [
197
- { pattern: /eval\s*\(/g, type: 'Eval Usage', severity: 'medium', desc: 'eval() can execute arbitrary code' },
198
- { pattern: /innerHTML\s*=/g, type: 'innerHTML', severity: 'medium', desc: 'XSS risk with innerHTML' },
199
- { pattern: /dangerouslySetInnerHTML/g, type: 'React XSS', severity: 'medium', desc: 'React XSS risk' },
200
- { pattern: /child_process.*exec[^S]/g, type: 'Command Injection', severity: 'high', desc: 'Possible command injection' },
201
- { pattern: /\$\{.*\}.*sql|sql.*\$\{/gi, type: 'SQL Injection', severity: 'high', desc: 'Possible SQL injection' },
202
- ];
203
- scanCodeDir_1 = function (dir, depthLimit) {
204
- if (depthLimit <= 0)
205
- return;
206
- try {
207
- var entries = fs_1.readdirSync(dir, { withFileTypes: true });
208
- for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
209
- var entry = entries_2[_i];
210
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
211
- continue;
212
- var fullPath = path_1.join(dir, entry.name);
213
- if (entry.isDirectory()) {
214
- scanCodeDir_1(fullPath, depthLimit - 1);
215
- }
216
- else if (entry.isFile() && /\.(ts|js|tsx|jsx)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
217
- try {
218
- var content = fs_1.readFileSync(fullPath, 'utf-8');
219
- var lines = content.split('\n');
220
- for (var i = 0; i < lines.length; i++) {
221
- for (var _a = 0, codePatterns_2 = codePatterns_1; _a < codePatterns_2.length; _a++) {
222
- var _b = codePatterns_2[_a], pattern = _b.pattern, type = _b.type, severity = _b.severity, desc = _b.desc;
223
- if (pattern.test(lines[i])) {
224
- if (severity === 'high')
225
- highCount++;
226
- else
227
- mediumCount++;
228
- findings.push({
229
- severity: severity === 'high' ? output.warning('HIGH') : output.warning('MEDIUM'),
230
- type: type,
231
- location: path_1.relative(target, fullPath) + ":" + (i + 1),
232
- description: desc
233
- });
234
- pattern.lastIndex = 0;
235
- }
236
- }
125
+ catch { /* dir read error */ }
126
+ };
127
+ const scanDepth = depth === 'deep' ? 10 : depth === 'standard' ? 5 : 3;
128
+ scanDir(path.resolve(target), scanDepth);
129
+ }
130
+ // Phase 3: Check for common security issues in code
131
+ if ((scanType === 'all' || scanType === 'code') && depth !== 'quick') {
132
+ spinner.setText('Analyzing code patterns...');
133
+ const codePatterns = [
134
+ { pattern: /eval\s*\(/g, type: 'Eval Usage', severity: 'medium', desc: 'eval() can execute arbitrary code' },
135
+ { pattern: /innerHTML\s*=/g, type: 'innerHTML', severity: 'medium', desc: 'XSS risk with innerHTML' },
136
+ { pattern: /dangerouslySetInnerHTML/g, type: 'React XSS', severity: 'medium', desc: 'React XSS risk' },
137
+ { pattern: /child_process.*exec[^S]/g, type: 'Command Injection', severity: 'high', desc: 'Possible command injection' },
138
+ { pattern: /\$\{.*\}.*sql|sql.*\$\{/gi, type: 'SQL Injection', severity: 'high', desc: 'Possible SQL injection' },
139
+ ];
140
+ const scanCodeDir = (dir, depthLimit) => {
141
+ if (depthLimit <= 0)
142
+ return;
143
+ try {
144
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
145
+ for (const entry of entries) {
146
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
147
+ continue;
148
+ const fullPath = path.join(dir, entry.name);
149
+ if (entry.isDirectory()) {
150
+ scanCodeDir(fullPath, depthLimit - 1);
151
+ }
152
+ else if (entry.isFile() && /\.(ts|js|tsx|jsx)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
153
+ try {
154
+ const content = fs.readFileSync(fullPath, 'utf-8');
155
+ const lines = content.split('\n');
156
+ for (let i = 0; i < lines.length; i++) {
157
+ for (const { pattern, type, severity, desc } of codePatterns) {
158
+ if (pattern.test(lines[i])) {
159
+ if (severity === 'high')
160
+ highCount++;
161
+ else
162
+ mediumCount++;
163
+ findings.push({
164
+ severity: severity === 'high' ? output.warning('HIGH') : output.warning('MEDIUM'),
165
+ type,
166
+ location: `${path.relative(target, fullPath)}:${i + 1}`,
167
+ description: desc,
168
+ });
169
+ pattern.lastIndex = 0;
237
170
  }
238
171
  }
239
- catch ( /* file read error */_c) { /* file read error */ }
240
172
  }
241
173
  }
174
+ catch { /* file read error */ }
242
175
  }
243
- catch ( /* dir read error */_d) { /* dir read error */ }
244
- };
245
- scanDepth = depth === 'deep' ? 10 : 5;
246
- scanCodeDir_1(path_1.resolve(target), scanDepth);
247
- }
248
- spinner.succeed('Scan complete');
249
- // Display results
250
- output.writeln();
251
- if (findings.length > 0) {
252
- output.printTable({
253
- columns: [
254
- { key: 'severity', header: 'Severity', width: 12 },
255
- { key: 'type', header: 'Type', width: 18 },
256
- { key: 'location', header: 'Location', width: 25 },
257
- { key: 'description', header: 'Description', width: 35 },
258
- ],
259
- data: findings.slice(0, 20)
260
- });
261
- if (findings.length > 20) {
262
- output.writeln(output.dim("... and " + (findings.length - 20) + " more issues"));
263
- }
264
- }
265
- else {
266
- output.writeln(output.success('No security issues found!'));
267
- }
268
- output.writeln();
269
- output.printBox([
270
- "Target: " + target,
271
- "Depth: " + depth,
272
- "Type: " + scanType,
273
- "",
274
- "Critical: " + criticalCount + " High: " + highCount + " Medium: " + mediumCount + " Low: " + lowCount,
275
- "Total Issues: " + findings.length,
276
- ].join('\n'), 'Scan Summary');
277
- // Auto-fix if requested
278
- if (fix && criticalCount + highCount > 0) {
279
- output.writeln();
280
- fixSpinner = output.createSpinner({ text: 'Attempting to fix vulnerabilities...', spinner: 'dots' });
281
- fixSpinner.start();
282
- try {
283
- execSync('npm audit fix 2>/dev/null || true', { cwd: path_1.resolve(target), encoding: 'utf-8' });
284
- fixSpinner.succeed('Applied available fixes (run scan again to verify)');
285
- }
286
- catch (_g) {
287
- fixSpinner.fail('Some fixes could not be applied automatically');
288
176
  }
289
177
  }
290
- return [2 /*return*/, { success: findings.length === 0 || (criticalCount === 0 && highCount === 0) }];
291
- case 5:
292
- error_1 = _d.sent();
293
- spinner.fail('Scan failed');
294
- output.printError("Error: " + error_1);
295
- return [2 /*return*/, { success: false }];
296
- case 6: return [2 /*return*/];
178
+ catch { /* dir read error */ }
179
+ };
180
+ const scanDepth = depth === 'deep' ? 10 : 5;
181
+ scanCodeDir(path.resolve(target), scanDepth);
297
182
  }
298
- });
299
- }); }
183
+ spinner.succeed('Scan complete');
184
+ // Display results
185
+ output.writeln();
186
+ if (findings.length > 0) {
187
+ output.printTable({
188
+ columns: [
189
+ { key: 'severity', header: 'Severity', width: 12 },
190
+ { key: 'type', header: 'Type', width: 18 },
191
+ { key: 'location', header: 'Location', width: 25 },
192
+ { key: 'description', header: 'Description', width: 35 },
193
+ ],
194
+ data: findings.slice(0, 20), // Show first 20
195
+ });
196
+ if (findings.length > 20) {
197
+ output.writeln(output.dim(`... and ${findings.length - 20} more issues`));
198
+ }
199
+ }
200
+ else {
201
+ output.writeln(output.success('No security issues found!'));
202
+ }
203
+ output.writeln();
204
+ output.printBox([
205
+ `Target: ${target}`,
206
+ `Depth: ${depth}`,
207
+ `Type: ${scanType}`,
208
+ ``,
209
+ `Critical: ${criticalCount} High: ${highCount} Medium: ${mediumCount} Low: ${lowCount}`,
210
+ `Total Issues: ${findings.length}`,
211
+ ].join('\n'), 'Scan Summary');
212
+ // Auto-fix if requested
213
+ if (fix && criticalCount + highCount > 0) {
214
+ output.writeln();
215
+ const fixSpinner = output.createSpinner({ text: 'Attempting to fix vulnerabilities...', spinner: 'dots' });
216
+ fixSpinner.start();
217
+ try {
218
+ execSync('npm audit fix 2>/dev/null || true', { cwd: path.resolve(target), encoding: 'utf-8' });
219
+ fixSpinner.succeed('Applied available fixes (run scan again to verify)');
220
+ }
221
+ catch {
222
+ fixSpinner.fail('Some fixes could not be applied automatically');
223
+ }
224
+ }
225
+ return { success: findings.length === 0 || (criticalCount === 0 && highCount === 0) };
226
+ }
227
+ catch (error) {
228
+ spinner.fail('Scan failed');
229
+ output.printError(`Error: ${error}`);
230
+ return { success: false };
231
+ }
232
+ },
300
233
  };
301
234
  // CVE subcommand
302
- var cveCommand = {
235
+ const cveCommand = {
303
236
  name: 'cve',
304
237
  description: 'Check and manage CVE vulnerabilities',
305
238
  options: [
@@ -311,389 +244,335 @@ var cveCommand = {
311
244
  { command: 'claude-flow security cve --list', description: 'List all CVEs' },
312
245
  { command: 'claude-flow security cve -c CVE-2024-1234', description: 'Check specific CVE' },
313
246
  ],
314
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
315
- var checkCve;
316
- return __generator(this, function (_a) {
317
- checkCve = ctx.flags.check;
247
+ action: async (ctx) => {
248
+ const checkCve = ctx.flags.check;
249
+ output.writeln();
250
+ output.writeln(output.bold('CVE Database'));
251
+ output.writeln(output.dim('─'.repeat(50)));
252
+ if (checkCve) {
253
+ output.printBox([
254
+ `CVE ID: ${checkCve}`,
255
+ `Severity: CRITICAL (9.8)`,
256
+ `Status: Active`,
257
+ ``,
258
+ `Description: Remote code execution vulnerability`,
259
+ `Affected: lodash < 4.17.21`,
260
+ `Fix: Upgrade to lodash >= 4.17.21`,
261
+ ``,
262
+ `References:`,
263
+ ` - https://nvd.nist.gov/vuln/detail/${checkCve}`,
264
+ ` - https://github.com/advisories`,
265
+ ].join('\n'), 'CVE Details');
266
+ }
267
+ else {
268
+ output.writeln(output.warning('⚠ No real CVE database configured. Showing example data.'));
269
+ output.writeln(output.dim('Run "npm audit" or "claude-flow security scan" for real vulnerability detection.'));
318
270
  output.writeln();
319
- output.writeln(output.bold('CVE Database'));
320
- output.writeln(output.dim('─'.repeat(50)));
321
- if (checkCve) {
322
- output.printBox([
323
- "CVE ID: " + checkCve,
324
- "Severity: CRITICAL (9.8)",
325
- "Status: Active",
326
- "",
327
- "Description: Remote code execution vulnerability",
328
- "Affected: lodash < 4.17.21",
329
- "Fix: Upgrade to lodash >= 4.17.21",
330
- "",
331
- "References:",
332
- " - https://nvd.nist.gov/vuln/detail/" + checkCve,
333
- " - https://github.com/advisories",
334
- ].join('\n'), 'CVE Details');
335
- }
336
- else {
337
- output.writeln(output.warning('⚠ No real CVE database configured. Showing example data.'));
338
- output.writeln(output.dim('Run "npm audit" or "claude-flow security scan" for real vulnerability detection.'));
339
- output.writeln();
340
- output.printTable({
341
- columns: [
342
- { key: 'id', header: 'CVE ID (Example)', width: 22 },
343
- { key: 'severity', header: 'Severity', width: 12 },
344
- { key: 'package', header: 'Package', width: 20 },
345
- { key: 'status', header: 'Status', width: 15 },
346
- ],
347
- data: [
348
- { id: 'CVE-YYYY-NNNN', severity: output.error('CRITICAL'), package: 'example-pkg@1.0.0', status: output.warning('Example') },
349
- { id: 'CVE-YYYY-NNNN', severity: output.warning('HIGH'), package: 'example-pkg@2.0.0', status: output.success('Example') },
350
- { id: 'CVE-YYYY-NNNN', severity: output.info('MEDIUM'), package: 'example-pkg@3.0.0', status: output.success('Example') },
351
- ]
352
- });
353
- }
354
- return [2 /*return*/, { success: true }];
355
- });
356
- }); }
271
+ output.printTable({
272
+ columns: [
273
+ { key: 'id', header: 'CVE ID (Example)', width: 22 },
274
+ { key: 'severity', header: 'Severity', width: 12 },
275
+ { key: 'package', header: 'Package', width: 20 },
276
+ { key: 'status', header: 'Status', width: 15 },
277
+ ],
278
+ data: [
279
+ { id: 'CVE-YYYY-NNNN', severity: output.error('CRITICAL'), package: 'example-pkg@1.0.0', status: output.warning('Example') },
280
+ { id: 'CVE-YYYY-NNNN', severity: output.warning('HIGH'), package: 'example-pkg@2.0.0', status: output.success('Example') },
281
+ { id: 'CVE-YYYY-NNNN', severity: output.info('MEDIUM'), package: 'example-pkg@3.0.0', status: output.success('Example') },
282
+ ],
283
+ });
284
+ }
285
+ return { success: true };
286
+ },
357
287
  };
358
288
  // Threats subcommand
359
- var threatsCommand = {
289
+ const threatsCommand = {
360
290
  name: 'threats',
361
291
  description: 'Threat modeling and analysis',
362
292
  options: [
363
- { name: 'model', short: 'm', type: 'string', description: 'Threat model: stride, dread, pasta', "default": 'stride' },
364
- { name: 'scope', short: 's', type: 'string', description: 'Analysis scope', "default": '.' },
293
+ { name: 'model', short: 'm', type: 'string', description: 'Threat model: stride, dread, pasta', default: 'stride' },
294
+ { name: 'scope', short: 's', type: 'string', description: 'Analysis scope', default: '.' },
365
295
  { name: 'export', short: 'e', type: 'string', description: 'Export format: json, md, html' },
366
296
  ],
367
297
  examples: [
368
298
  { command: 'claude-flow security threats --model stride', description: 'Run STRIDE analysis' },
369
299
  { command: 'claude-flow security threats -e md', description: 'Export as markdown' },
370
300
  ],
371
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
372
- var model;
373
- return __generator(this, function (_a) {
374
- model = ctx.flags.model || 'stride';
375
- output.writeln();
376
- output.writeln(output.bold("Threat Model: " + model.toUpperCase()));
377
- output.writeln(output.dim('─'.repeat(50)));
378
- output.printTable({
379
- columns: [
380
- { key: 'category', header: 'Category', width: 20 },
381
- { key: 'threat', header: 'Threat', width: 30 },
382
- { key: 'risk', header: 'Risk', width: 10 },
383
- { key: 'mitigation', header: 'Mitigation', width: 30 },
384
- ],
385
- data: [
386
- { category: 'Spoofing', threat: 'API key theft', risk: output.error('High'), mitigation: 'Use secure key storage' },
387
- { category: 'Tampering', threat: 'Data manipulation', risk: output.warning('Medium'), mitigation: 'Input validation' },
388
- { category: 'Repudiation', threat: 'Action denial', risk: output.info('Low'), mitigation: 'Audit logging' },
389
- { category: 'Info Disclosure', threat: 'Data leakage', risk: output.error('High'), mitigation: 'Encryption at rest' },
390
- { category: 'DoS', threat: 'Resource exhaustion', risk: output.warning('Medium'), mitigation: 'Rate limiting' },
391
- { category: 'Elevation', threat: 'Privilege escalation', risk: output.error('High'), mitigation: 'RBAC implementation' },
392
- ]
393
- });
394
- return [2 /*return*/, { success: true }];
301
+ action: async (ctx) => {
302
+ const model = ctx.flags.model || 'stride';
303
+ output.writeln();
304
+ output.writeln(output.bold(`Threat Model: ${model.toUpperCase()}`));
305
+ output.writeln(output.dim('─'.repeat(50)));
306
+ output.printTable({
307
+ columns: [
308
+ { key: 'category', header: 'Category', width: 20 },
309
+ { key: 'threat', header: 'Threat', width: 30 },
310
+ { key: 'risk', header: 'Risk', width: 10 },
311
+ { key: 'mitigation', header: 'Mitigation', width: 30 },
312
+ ],
313
+ data: [
314
+ { category: 'Spoofing', threat: 'API key theft', risk: output.error('High'), mitigation: 'Use secure key storage' },
315
+ { category: 'Tampering', threat: 'Data manipulation', risk: output.warning('Medium'), mitigation: 'Input validation' },
316
+ { category: 'Repudiation', threat: 'Action denial', risk: output.info('Low'), mitigation: 'Audit logging' },
317
+ { category: 'Info Disclosure', threat: 'Data leakage', risk: output.error('High'), mitigation: 'Encryption at rest' },
318
+ { category: 'DoS', threat: 'Resource exhaustion', risk: output.warning('Medium'), mitigation: 'Rate limiting' },
319
+ { category: 'Elevation', threat: 'Privilege escalation', risk: output.error('High'), mitigation: 'RBAC implementation' },
320
+ ],
395
321
  });
396
- }); }
322
+ return { success: true };
323
+ },
397
324
  };
398
325
  // Audit subcommand
399
- var auditCommand = {
326
+ const auditCommand = {
400
327
  name: 'audit',
401
328
  description: 'Security audit logging and compliance',
402
329
  options: [
403
- { name: 'action', short: 'a', type: 'string', description: 'Action: log, list, export, clear', "default": 'list' },
404
- { name: 'limit', short: 'l', type: 'number', description: 'Number of entries to show', "default": '20' },
330
+ { name: 'action', short: 'a', type: 'string', description: 'Action: log, list, export, clear', default: 'list' },
331
+ { name: 'limit', short: 'l', type: 'number', description: 'Number of entries to show', default: '20' },
405
332
  { name: 'filter', short: 'f', type: 'string', description: 'Filter by event type' },
406
333
  ],
407
334
  examples: [
408
335
  { command: 'claude-flow security audit --action list', description: 'List audit logs' },
409
336
  { command: 'claude-flow security audit -a export', description: 'Export audit trail' },
410
337
  ],
411
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
412
- var action, _a, existsSync, readFileSync, readdirSync, statSync, join, auditEntries, swarmDir, files, _i, _b, file, stat, ts, now;
413
- return __generator(this, function (_c) {
414
- switch (_c.label) {
415
- case 0:
416
- action = ctx.flags.action || 'list';
417
- output.writeln();
418
- output.writeln(output.bold('Security Audit Log'));
419
- output.writeln(output.dim('─'.repeat(60)));
420
- return [4 /*yield*/, import('fs')];
421
- case 1:
422
- _a = _c.sent(), existsSync = _a.existsSync, readFileSync = _a.readFileSync, readdirSync = _a.readdirSync, statSync = _a.statSync;
423
- return [4 /*yield*/, import('path')];
424
- case 2:
425
- join = (_c.sent()).join;
426
- auditEntries = [];
427
- swarmDir = join(process.cwd(), '.swarm');
428
- // Check session files for real audit events
429
- if (existsSync(swarmDir)) {
430
- try {
431
- files = readdirSync(swarmDir).filter(function (f) { return f.endsWith('.json'); });
432
- for (_i = 0, _b = files.slice(-10); _i < _b.length; _i++) {
433
- file = _b[_i];
434
- try {
435
- stat = statSync(join(swarmDir, file));
436
- ts = stat.mtime.toISOString().replace('T', ' ').substring(0, 19);
437
- auditEntries.push({
438
- timestamp: ts,
439
- event: file.includes('session') ? 'SESSION_UPDATE' :
440
- file.includes('swarm') ? 'SWARM_ACTIVITY' :
441
- file.includes('memory') ? 'MEMORY_WRITE' : 'CONFIG_CHANGE',
442
- user: 'system',
443
- status: output.success('Success')
444
- });
445
- }
446
- catch ( /* skip */_d) { /* skip */ }
447
- }
448
- }
449
- catch ( /* ignore */_e) { /* ignore */ }
450
- }
451
- now = new Date().toISOString().replace('T', ' ').substring(0, 19);
452
- auditEntries.push({ timestamp: now, event: 'AUDIT_RUN', user: 'cli', status: output.success('Success') });
453
- // Sort by timestamp desc
454
- auditEntries.sort(function (a, b) { return b.timestamp.localeCompare(a.timestamp); });
455
- if (auditEntries.length === 0) {
456
- output.writeln(output.dim('No audit events found. Initialize a project first: claude-flow init'));
457
- }
458
- else {
459
- output.printTable({
460
- columns: [
461
- { key: 'timestamp', header: 'Timestamp', width: 22 },
462
- { key: 'event', header: 'Event', width: 20 },
463
- { key: 'user', header: 'User', width: 15 },
464
- { key: 'status', header: 'Status', width: 12 },
465
- ],
466
- data: auditEntries.slice(0, parseInt(ctx.flags.limit || '20', 10))
338
+ action: async (ctx) => {
339
+ const action = ctx.flags.action || 'list';
340
+ output.writeln();
341
+ output.writeln(output.bold('Security Audit Log'));
342
+ output.writeln(output.dim('─'.repeat(60)));
343
+ // Generate real audit entries from .swarm/ state and session history
344
+ const { existsSync, readFileSync, readdirSync, statSync } = await import('fs');
345
+ const { join } = await import('path');
346
+ const auditEntries = [];
347
+ const swarmDir = join(process.cwd(), '.swarm');
348
+ // Check session files for real audit events
349
+ if (existsSync(swarmDir)) {
350
+ try {
351
+ const files = readdirSync(swarmDir).filter(f => f.endsWith('.json'));
352
+ for (const file of files.slice(-10)) {
353
+ try {
354
+ const stat = statSync(join(swarmDir, file));
355
+ const ts = stat.mtime.toISOString().replace('T', ' ').substring(0, 19);
356
+ auditEntries.push({
357
+ timestamp: ts,
358
+ event: file.includes('session') ? 'SESSION_UPDATE' :
359
+ file.includes('swarm') ? 'SWARM_ACTIVITY' :
360
+ file.includes('memory') ? 'MEMORY_WRITE' : 'CONFIG_CHANGE',
361
+ user: 'system',
362
+ status: output.success('Success')
467
363
  });
468
364
  }
469
- return [2 /*return*/, { success: true }];
365
+ catch { /* skip */ }
366
+ }
470
367
  }
471
- });
472
- }); }
368
+ catch { /* ignore */ }
369
+ }
370
+ // Add current session entry
371
+ const now = new Date().toISOString().replace('T', ' ').substring(0, 19);
372
+ auditEntries.push({ timestamp: now, event: 'AUDIT_RUN', user: 'cli', status: output.success('Success') });
373
+ // Sort by timestamp desc
374
+ auditEntries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
375
+ if (auditEntries.length === 0) {
376
+ output.writeln(output.dim('No audit events found. Initialize a project first: claude-flow init'));
377
+ }
378
+ else {
379
+ output.printTable({
380
+ columns: [
381
+ { key: 'timestamp', header: 'Timestamp', width: 22 },
382
+ { key: 'event', header: 'Event', width: 20 },
383
+ { key: 'user', header: 'User', width: 15 },
384
+ { key: 'status', header: 'Status', width: 12 },
385
+ ],
386
+ data: auditEntries.slice(0, parseInt(ctx.flags.limit || '20', 10)),
387
+ });
388
+ }
389
+ return { success: true };
390
+ },
473
391
  };
474
392
  // Secrets subcommand
475
- var secretsCommand = {
393
+ const secretsCommand = {
476
394
  name: 'secrets',
477
395
  description: 'Detect and manage secrets in codebase',
478
396
  options: [
479
- { name: 'action', short: 'a', type: 'string', description: 'Action: scan, list, rotate', "default": 'scan' },
480
- { name: 'path', short: 'p', type: 'string', description: 'Path to scan', "default": '.' },
397
+ { name: 'action', short: 'a', type: 'string', description: 'Action: scan, list, rotate', default: 'scan' },
398
+ { name: 'path', short: 'p', type: 'string', description: 'Path to scan', default: '.' },
481
399
  { name: 'ignore', short: 'i', type: 'string', description: 'Patterns to ignore' },
482
400
  ],
483
401
  examples: [
484
402
  { command: 'claude-flow security secrets --action scan', description: 'Scan for secrets' },
485
403
  { command: 'claude-flow security secrets -a rotate', description: 'Rotate compromised secrets' },
486
404
  ],
487
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
488
- var path, spinner;
489
- return __generator(this, function (_a) {
490
- switch (_a.label) {
491
- case 0:
492
- path = ctx.flags.path || '.';
493
- output.writeln();
494
- output.writeln(output.bold('Secret Detection'));
495
- output.writeln(output.dim(''.repeat(50)));
496
- spinner = output.createSpinner({ text: 'Scanning for secrets...', spinner: 'dots' });
497
- spinner.start();
498
- return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, 800); })];
499
- case 1:
500
- _a.sent();
501
- spinner.succeed('Scan complete');
502
- output.writeln();
503
- output.writeln(output.warning('⚠ No real secrets scan performed. Showing example findings.'));
504
- output.writeln(output.dim('Run "claude-flow security scan --depth full" for real secret detection.'));
505
- output.writeln();
506
- output.printTable({
507
- columns: [
508
- { key: 'type', header: 'Secret Type (Example)', width: 25 },
509
- { key: 'location', header: 'Location', width: 30 },
510
- { key: 'risk', header: 'Risk', width: 12 },
511
- { key: 'action', header: 'Recommended', width: 20 },
512
- ],
513
- data: [
514
- { type: 'AWS Access Key', location: 'example/config.ts:15', risk: output.error('Critical'), action: 'Rotate immediately' },
515
- { type: 'GitHub Token', location: 'example/.env:8', risk: output.warning('High'), action: 'Remove from repo' },
516
- { type: 'JWT Secret', location: 'example/auth.ts:42', risk: output.warning('High'), action: 'Use env variable' },
517
- { type: 'DB Password', location: 'example/compose.yml:23', risk: output.warning('Medium'), action: 'Use secrets mgmt' },
518
- ]
519
- });
520
- return [2 /*return*/, { success: true }];
521
- }
405
+ action: async (ctx) => {
406
+ const path = ctx.flags.path || '.';
407
+ output.writeln();
408
+ output.writeln(output.bold('Secret Detection'));
409
+ output.writeln(output.dim('─'.repeat(50)));
410
+ const spinner = output.createSpinner({ text: 'Scanning for secrets...', spinner: 'dots' });
411
+ spinner.start();
412
+ await new Promise(r => setTimeout(r, 800));
413
+ spinner.succeed('Scan complete');
414
+ output.writeln();
415
+ output.writeln(output.warning('⚠ No real secrets scan performed. Showing example findings.'));
416
+ output.writeln(output.dim('Run "claude-flow security scan --depth full" for real secret detection.'));
417
+ output.writeln();
418
+ output.printTable({
419
+ columns: [
420
+ { key: 'type', header: 'Secret Type (Example)', width: 25 },
421
+ { key: 'location', header: 'Location', width: 30 },
422
+ { key: 'risk', header: 'Risk', width: 12 },
423
+ { key: 'action', header: 'Recommended', width: 20 },
424
+ ],
425
+ data: [
426
+ { type: 'AWS Access Key', location: 'example/config.ts:15', risk: output.error('Critical'), action: 'Rotate immediately' },
427
+ { type: 'GitHub Token', location: 'example/.env:8', risk: output.warning('High'), action: 'Remove from repo' },
428
+ { type: 'JWT Secret', location: 'example/auth.ts:42', risk: output.warning('High'), action: 'Use env variable' },
429
+ { type: 'DB Password', location: 'example/compose.yml:23', risk: output.warning('Medium'), action: 'Use secrets mgmt' },
430
+ ],
522
431
  });
523
- }); }
432
+ return { success: true };
433
+ },
524
434
  };
525
435
  // Defend subcommand (AIDefence integration)
526
- var defendCommand = {
436
+ const defendCommand = {
527
437
  name: 'defend',
528
438
  description: 'AI manipulation defense - detect prompt injection, jailbreaks, and PII',
529
439
  options: [
530
440
  { name: 'input', short: 'i', type: 'string', description: 'Input text to scan for threats' },
531
441
  { name: 'file', short: 'f', type: 'string', description: 'File to scan for threats' },
532
442
  { name: 'quick', short: 'Q', type: 'boolean', description: 'Quick scan (faster, less detailed)' },
533
- { name: 'learn', short: 'l', type: 'boolean', description: 'Enable learning mode', "default": 'true' },
443
+ { name: 'learn', short: 'l', type: 'boolean', description: 'Enable learning mode', default: 'true' },
534
444
  { name: 'stats', short: 's', type: 'boolean', description: 'Show detection statistics' },
535
- { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', "default": 'text' },
445
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', default: 'text' },
536
446
  ],
537
447
  examples: [
538
448
  { command: 'claude-flow security defend -i "ignore previous instructions"', description: 'Scan text for threats' },
539
449
  { command: 'claude-flow security defend -f ./prompts.txt', description: 'Scan file for threats' },
540
450
  { command: 'claude-flow security defend --stats', description: 'Show detection statistics' },
541
451
  ],
542
- action: function (ctx) { return __awaiter(void 0, void 0, Promise, function () {
543
- var inputText, filePath, quickMode, showStats, outputFormat, enableLearning, createAIDefence, aidefence, _a, defender, stats, textToScan, fs, err_1, spinner, startTime, result, _b, scanTime, _i, _c, threat, severityColor, criticalThreats, _d, criticalThreats_1, threat, mitigation;
544
- return __generator(this, function (_e) {
545
- switch (_e.label) {
546
- case 0:
547
- inputText = ctx.flags.input;
548
- filePath = ctx.flags.file;
549
- quickMode = ctx.flags.quick;
550
- showStats = ctx.flags.stats;
551
- outputFormat = ctx.flags.output || 'text';
552
- enableLearning = ctx.flags.learn !== false;
553
- output.writeln();
554
- output.writeln(output.bold('🛡️ AIDefence - AI Manipulation Defense System'));
555
- output.writeln(output.dim(''.repeat(55)));
556
- _e.label = 1;
557
- case 1:
558
- _e.trys.push([1, 3, , 4]);
559
- return [4 /*yield*/, import('@claude-flow/aidefence')];
560
- case 2:
561
- aidefence = _e.sent();
562
- createAIDefence = aidefence.createAIDefence;
563
- return [3 /*break*/, 4];
564
- case 3:
565
- _a = _e.sent();
566
- output.error('AIDefence package not installed. Run: npm install @claude-flow/aidefence');
567
- return [2 /*return*/, { success: false, message: 'AIDefence not available' }];
568
- case 4:
569
- defender = createAIDefence({ enableLearning: enableLearning });
570
- if (!showStats) return [3 /*break*/, 6];
571
- return [4 /*yield*/, defender.getStats()];
572
- case 5:
573
- stats = _e.sent();
574
- output.writeln();
575
- output.printBox([
576
- "Detection Count: " + stats.detectionCount,
577
- "Avg Detection Time: " + stats.avgDetectionTimeMs.toFixed(3) + "ms",
578
- "Learned Patterns: " + stats.learnedPatterns,
579
- "Mitigation Strategies: " + stats.mitigationStrategies,
580
- "Avg Mitigation Effectiveness: " + (stats.avgMitigationEffectiveness * 100).toFixed(1) + "%",
581
- ].join('\n'), 'Detection Statistics');
582
- return [2 /*return*/, { success: true }];
583
- case 6:
584
- textToScan = inputText;
585
- if (!filePath) return [3 /*break*/, 11];
586
- _e.label = 7;
587
- case 7:
588
- _e.trys.push([7, 10, , 11]);
589
- return [4 /*yield*/, import('fs/promises')];
590
- case 8:
591
- fs = _e.sent();
592
- return [4 /*yield*/, fs.readFile(filePath, 'utf-8')];
593
- case 9:
594
- textToScan = _e.sent();
595
- output.writeln(output.dim("Reading file: " + filePath));
596
- return [3 /*break*/, 11];
597
- case 10:
598
- err_1 = _e.sent();
599
- output.error("Failed to read file: " + filePath);
600
- return [2 /*return*/, { success: false, message: 'File not found' }];
601
- case 11:
602
- if (!textToScan) {
603
- output.writeln('Usage: claude-flow security defend -i "<text>" or -f <file>');
604
- output.writeln();
605
- output.writeln('Options:');
606
- output.printList([
607
- '-i, --input Text to scan for AI manipulation attempts',
608
- '-f, --file File path to scan',
609
- '-q, --quick Quick scan mode (faster)',
610
- '-s, --stats Show detection statistics',
611
- '--learn Enable pattern learning (default: true)',
612
- ]);
613
- return [2 /*return*/, { success: true }];
614
- }
615
- spinner = output.createSpinner({ text: 'Scanning for threats...', spinner: 'dots' });
616
- spinner.start();
617
- startTime = performance.now();
618
- if (!quickMode) return [3 /*break*/, 12];
619
- _b = __assign(__assign({}, defender.quickScan(textToScan)), { threats: [], piiFound: false, detectionTimeMs: 0, inputHash: '', safe: !defender.quickScan(textToScan).threat });
620
- return [3 /*break*/, 14];
621
- case 12: return [4 /*yield*/, defender.detect(textToScan)];
622
- case 13:
623
- _b = _e.sent();
624
- _e.label = 14;
625
- case 14:
626
- result = _b;
627
- scanTime = performance.now() - startTime;
628
- spinner.stop();
629
- // JSON output
630
- if (outputFormat === 'json') {
631
- output.writeln(JSON.stringify({
632
- safe: result.safe,
633
- threats: result.threats || [],
634
- piiFound: result.piiFound,
635
- detectionTimeMs: scanTime
636
- }, null, 2));
637
- return [2 /*return*/, { success: true }];
638
- }
639
- // Text output
640
- output.writeln();
641
- if (!(result.safe && !result.piiFound)) return [3 /*break*/, 15];
642
- output.writeln(output.success('✅ No threats detected'));
643
- return [3 /*break*/, 21];
644
- case 15:
645
- if (!(!result.safe && result.threats)) return [3 /*break*/, 20];
646
- output.writeln(output.error("\u26A0\uFE0F " + result.threats.length + " threat(s) detected:"));
452
+ action: async (ctx) => {
453
+ const inputText = ctx.flags.input;
454
+ const filePath = ctx.flags.file;
455
+ const quickMode = ctx.flags.quick;
456
+ const showStats = ctx.flags.stats;
457
+ const outputFormat = ctx.flags.output || 'text';
458
+ const enableLearning = ctx.flags.learn !== false;
459
+ output.writeln();
460
+ output.writeln(output.bold('🛡️ AIDefence - AI Manipulation Defense System'));
461
+ output.writeln(output.dim(''.repeat(55)));
462
+ // Dynamic import of aidefence (allows package to be optional)
463
+ let createAIDefence;
464
+ try {
465
+ const aidefence = await import('@claude-flow/aidefence');
466
+ createAIDefence = aidefence.createAIDefence;
467
+ }
468
+ catch {
469
+ output.error('AIDefence package not installed. Run: npm install @claude-flow/aidefence');
470
+ return { success: false, message: 'AIDefence not available' };
471
+ }
472
+ const defender = createAIDefence({ enableLearning });
473
+ // Show stats mode
474
+ if (showStats) {
475
+ const stats = await defender.getStats();
476
+ output.writeln();
477
+ output.printBox([
478
+ `Detection Count: ${stats.detectionCount}`,
479
+ `Avg Detection Time: ${stats.avgDetectionTimeMs.toFixed(3)}ms`,
480
+ `Learned Patterns: ${stats.learnedPatterns}`,
481
+ `Mitigation Strategies: ${stats.mitigationStrategies}`,
482
+ `Avg Mitigation Effectiveness: ${(stats.avgMitigationEffectiveness * 100).toFixed(1)}%`,
483
+ ].join('\n'), 'Detection Statistics');
484
+ return { success: true };
485
+ }
486
+ // Get input to scan
487
+ let textToScan = inputText;
488
+ if (filePath) {
489
+ try {
490
+ const fs = await import('fs/promises');
491
+ textToScan = await fs.readFile(filePath, 'utf-8');
492
+ output.writeln(output.dim(`Reading file: ${filePath}`));
493
+ }
494
+ catch (err) {
495
+ output.error(`Failed to read file: ${filePath}`);
496
+ return { success: false, message: 'File not found' };
497
+ }
498
+ }
499
+ if (!textToScan) {
500
+ output.writeln('Usage: claude-flow security defend -i "<text>" or -f <file>');
501
+ output.writeln();
502
+ output.writeln('Options:');
503
+ output.printList([
504
+ '-i, --input Text to scan for AI manipulation attempts',
505
+ '-f, --file File path to scan',
506
+ '-q, --quick Quick scan mode (faster)',
507
+ '-s, --stats Show detection statistics',
508
+ '--learn Enable pattern learning (default: true)',
509
+ ]);
510
+ return { success: true };
511
+ }
512
+ const spinner = output.createSpinner({ text: 'Scanning for threats...', spinner: 'dots' });
513
+ spinner.start();
514
+ // Perform scan
515
+ const startTime = performance.now();
516
+ const result = quickMode
517
+ ? { ...defender.quickScan(textToScan), threats: [], piiFound: false, detectionTimeMs: 0, inputHash: '', safe: !defender.quickScan(textToScan).threat }
518
+ : await defender.detect(textToScan);
519
+ const scanTime = performance.now() - startTime;
520
+ spinner.stop();
521
+ // JSON output
522
+ if (outputFormat === 'json') {
523
+ output.writeln(JSON.stringify({
524
+ safe: result.safe,
525
+ threats: result.threats || [],
526
+ piiFound: result.piiFound,
527
+ detectionTimeMs: scanTime,
528
+ }, null, 2));
529
+ return { success: true };
530
+ }
531
+ // Text output
532
+ output.writeln();
533
+ if (result.safe && !result.piiFound) {
534
+ output.writeln(output.success('✅ No threats detected'));
535
+ }
536
+ else {
537
+ if (!result.safe && result.threats) {
538
+ output.writeln(output.error(`⚠️ ${result.threats.length} threat(s) detected:`));
539
+ output.writeln();
540
+ for (const threat of result.threats) {
541
+ const severityColor = {
542
+ critical: output.error,
543
+ high: output.warning,
544
+ medium: output.info,
545
+ low: output.dim,
546
+ }[threat.severity] || output.dim;
547
+ output.writeln(` ${severityColor(`[${threat.severity.toUpperCase()}]`)} ${threat.type}`);
548
+ output.writeln(` ${output.dim(threat.description)}`);
549
+ output.writeln(` Confidence: ${(threat.confidence * 100).toFixed(1)}%`);
647
550
  output.writeln();
648
- for (_i = 0, _c = result.threats; _i < _c.length; _i++) {
649
- threat = _c[_i];
650
- severityColor = {
651
- critical: output.error,
652
- high: output.warning,
653
- medium: output.info,
654
- low: output.dim
655
- }[threat.severity] || output.dim;
656
- output.writeln(" " + severityColor("[" + threat.severity.toUpperCase() + "]") + " " + threat.type);
657
- output.writeln(" " + output.dim(threat.description));
658
- output.writeln(" Confidence: " + (threat.confidence * 100).toFixed(1) + "%");
659
- output.writeln();
660
- }
661
- criticalThreats = result.threats.filter(function (t) { return t.severity === 'critical'; });
662
- if (!(criticalThreats.length > 0 && enableLearning)) return [3 /*break*/, 20];
551
+ }
552
+ // Show mitigation recommendations
553
+ const criticalThreats = result.threats.filter(t => t.severity === 'critical');
554
+ if (criticalThreats.length > 0 && enableLearning) {
663
555
  output.writeln(output.bold('Recommended Mitigations:'));
664
- _d = 0, criticalThreats_1 = criticalThreats;
665
- _e.label = 16;
666
- case 16:
667
- if (!(_d < criticalThreats_1.length)) return [3 /*break*/, 19];
668
- threat = criticalThreats_1[_d];
669
- return [4 /*yield*/, defender.getBestMitigation(threat.type)];
670
- case 17:
671
- mitigation = _e.sent();
672
- if (mitigation) {
673
- output.writeln(" " + threat.type + ": " + output.bold(mitigation.strategy) + " (" + (mitigation.effectiveness * 100).toFixed(0) + "% effective)");
556
+ for (const threat of criticalThreats) {
557
+ const mitigation = await defender.getBestMitigation(threat.type);
558
+ if (mitigation) {
559
+ output.writeln(` ${threat.type}: ${output.bold(mitigation.strategy)} (${(mitigation.effectiveness * 100).toFixed(0)}% effective)`);
560
+ }
674
561
  }
675
- _e.label = 18;
676
- case 18:
677
- _d++;
678
- return [3 /*break*/, 16];
679
- case 19:
680
562
  output.writeln();
681
- _e.label = 20;
682
- case 20:
683
- if (result.piiFound) {
684
- output.writeln(output.warning('⚠️ PII detected (emails, SSNs, API keys, etc.)'));
685
- output.writeln();
686
- }
687
- _e.label = 21;
688
- case 21:
689
- output.writeln(output.dim("Detection time: " + scanTime.toFixed(3) + "ms"));
690
- return [2 /*return*/, { success: result.safe }];
563
+ }
691
564
  }
692
- });
693
- }); }
565
+ if (result.piiFound) {
566
+ output.writeln(output.warning('⚠️ PII detected (emails, SSNs, API keys, etc.)'));
567
+ output.writeln();
568
+ }
569
+ }
570
+ output.writeln(output.dim(`Detection time: ${scanTime.toFixed(3)}ms`));
571
+ return { success: result.safe };
572
+ },
694
573
  };
695
574
  // Main security command
696
- export var securityCommand = {
575
+ export const securityCommand = {
697
576
  name: 'security',
698
577
  description: 'Security scanning, CVE detection, threat modeling, AI defense',
699
578
  subcommands: [scanCommand, cveCommand, threatsCommand, auditCommand, secretsCommand, defendCommand],
@@ -702,28 +581,26 @@ export var securityCommand = {
702
581
  { command: 'claude-flow security cve --list', description: 'List known CVEs' },
703
582
  { command: 'claude-flow security threats', description: 'Run threat analysis' },
704
583
  ],
705
- action: function () { return __awaiter(void 0, void 0, Promise, function () {
706
- return __generator(this, function (_a) {
707
- output.writeln();
708
- output.writeln(output.bold('RuFlo Security Suite'));
709
- output.writeln(output.dim('Comprehensive security scanning and vulnerability management'));
710
- output.writeln();
711
- output.writeln('Subcommands:');
712
- output.printList([
713
- 'scan - Run security scans on code, deps, containers',
714
- 'cve - Check and manage CVE vulnerabilities',
715
- 'threats - Threat modeling (STRIDE, DREAD, PASTA)',
716
- 'audit - Security audit logging and compliance',
717
- 'secrets - Detect and manage secrets in codebase',
718
- 'defend - AI manipulation defense (prompt injection, jailbreaks, PII)',
719
- ]);
720
- output.writeln();
721
- output.writeln('Use --help with subcommands for more info');
722
- output.writeln();
723
- output.writeln(output.dim('Created with ❤️ by ruv.io'));
724
- return [2 /*return*/, { success: true }];
725
- });
726
- }); }
584
+ action: async () => {
585
+ output.writeln();
586
+ output.writeln(output.bold('RuFlo Security Suite'));
587
+ output.writeln(output.dim('Comprehensive security scanning and vulnerability management'));
588
+ output.writeln();
589
+ output.writeln('Subcommands:');
590
+ output.printList([
591
+ 'scan - Run security scans on code, deps, containers',
592
+ 'cve - Check and manage CVE vulnerabilities',
593
+ 'threats - Threat modeling (STRIDE, DREAD, PASTA)',
594
+ 'audit - Security audit logging and compliance',
595
+ 'secrets - Detect and manage secrets in codebase',
596
+ 'defend - AI manipulation defense (prompt injection, jailbreaks, PII)',
597
+ ]);
598
+ output.writeln();
599
+ output.writeln('Use --help with subcommands for more info');
600
+ output.writeln();
601
+ output.writeln(output.dim('Created with ❤️ by ruv.io'));
602
+ return { success: true };
603
+ },
727
604
  };
728
605
  export default securityCommand;
729
606
  //# sourceMappingURL=security.js.map