monomind 1.10.0 → 1.10.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 (597) hide show
  1. package/.claude/commands/monomind/understand.md +111 -70
  2. package/.claude/settings.local.json +1 -2
  3. package/package.json +1 -1
  4. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.d.ts +32 -0
  5. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.d.ts.map +1 -0
  6. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.js +297 -0
  7. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.js.map +1 -0
  8. package/packages/@monomind/cli/bundled-graph/dist/src/build.d.ts +8 -0
  9. package/packages/@monomind/cli/bundled-graph/dist/src/build.d.ts.map +1 -0
  10. package/packages/@monomind/cli/bundled-graph/dist/src/build.js +73 -0
  11. package/packages/@monomind/cli/bundled-graph/dist/src/build.js.map +1 -0
  12. package/packages/@monomind/cli/bundled-graph/dist/src/cache.d.ts +12 -0
  13. package/packages/@monomind/cli/bundled-graph/dist/src/cache.d.ts.map +1 -0
  14. package/packages/@monomind/cli/bundled-graph/dist/src/cache.js +43 -0
  15. package/packages/@monomind/cli/bundled-graph/dist/src/cache.js.map +1 -0
  16. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.d.ts +5 -0
  17. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.d.ts.map +1 -0
  18. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.js +120 -0
  19. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.js.map +1 -0
  20. package/packages/@monomind/cli/bundled-graph/dist/src/detect.d.ts +21 -0
  21. package/packages/@monomind/cli/bundled-graph/dist/src/detect.d.ts.map +1 -0
  22. package/packages/@monomind/cli/bundled-graph/dist/src/detect.js +195 -0
  23. package/packages/@monomind/cli/bundled-graph/dist/src/detect.js.map +1 -0
  24. package/packages/@monomind/cli/bundled-graph/dist/src/export.d.ts +21 -0
  25. package/packages/@monomind/cli/bundled-graph/dist/src/export.d.ts.map +1 -0
  26. package/packages/@monomind/cli/bundled-graph/dist/src/export.js +68 -0
  27. package/packages/@monomind/cli/bundled-graph/dist/src/export.js.map +1 -0
  28. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.d.ts +20 -0
  29. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.d.ts.map +1 -0
  30. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.js +158 -0
  31. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.js.map +1 -0
  32. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.d.ts +3 -0
  33. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.d.ts.map +1 -0
  34. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.js +88 -0
  35. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.js.map +1 -0
  36. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.d.ts +3 -0
  37. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.d.ts.map +1 -0
  38. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.js +121 -0
  39. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.js.map +1 -0
  40. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.d.ts +3 -0
  41. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.d.ts.map +1 -0
  42. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.js +121 -0
  43. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.js.map +1 -0
  44. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.d.ts +3 -0
  45. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.d.ts.map +1 -0
  46. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.js +181 -0
  47. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.js.map +1 -0
  48. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.d.ts +3 -0
  49. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.d.ts.map +1 -0
  50. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.js +117 -0
  51. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.js.map +1 -0
  52. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.d.ts +3 -0
  53. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.d.ts.map +1 -0
  54. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.js +112 -0
  55. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.js.map +1 -0
  56. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.d.ts +3 -0
  57. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.d.ts.map +1 -0
  58. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.js +130 -0
  59. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.js.map +1 -0
  60. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.d.ts +3 -0
  61. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.d.ts.map +1 -0
  62. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.js +230 -0
  63. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.js.map +1 -0
  64. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.d.ts +3 -0
  65. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.d.ts.map +1 -0
  66. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.js +120 -0
  67. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.js.map +1 -0
  68. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.d.ts +3 -0
  69. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.d.ts.map +1 -0
  70. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.js +195 -0
  71. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.js.map +1 -0
  72. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.d.ts +3 -0
  73. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.d.ts.map +1 -0
  74. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.js +110 -0
  75. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.js.map +1 -0
  76. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.d.ts +3 -0
  77. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.d.ts.map +1 -0
  78. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.js +122 -0
  79. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.js.map +1 -0
  80. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.d.ts +3 -0
  81. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.d.ts.map +1 -0
  82. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.js +295 -0
  83. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.js.map +1 -0
  84. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.d.ts +38 -0
  85. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.d.ts.map +1 -0
  86. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.js +242 -0
  87. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.js.map +1 -0
  88. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts +48 -0
  89. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts.map +1 -0
  90. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.js +137 -0
  91. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.js.map +1 -0
  92. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.d.ts +7 -0
  93. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.d.ts.map +1 -0
  94. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.js +2 -0
  95. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.js.map +1 -0
  96. package/packages/@monomind/cli/bundled-graph/dist/src/index.d.ts +28 -0
  97. package/packages/@monomind/cli/bundled-graph/dist/src/index.d.ts.map +1 -0
  98. package/packages/@monomind/cli/bundled-graph/dist/src/index.js +26 -0
  99. package/packages/@monomind/cli/bundled-graph/dist/src/index.js.map +1 -0
  100. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.d.ts +27 -0
  101. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.d.ts.map +1 -0
  102. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.js +269 -0
  103. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.js.map +1 -0
  104. package/packages/@monomind/cli/bundled-graph/dist/src/report.d.ts +26 -0
  105. package/packages/@monomind/cli/bundled-graph/dist/src/report.d.ts.map +1 -0
  106. package/packages/@monomind/cli/bundled-graph/dist/src/report.js +214 -0
  107. package/packages/@monomind/cli/bundled-graph/dist/src/report.js.map +1 -0
  108. package/packages/@monomind/cli/bundled-graph/dist/src/types.d.ts +124 -0
  109. package/packages/@monomind/cli/bundled-graph/dist/src/types.d.ts.map +1 -0
  110. package/packages/@monomind/cli/bundled-graph/dist/src/types.js +2 -0
  111. package/packages/@monomind/cli/bundled-graph/dist/src/types.js.map +1 -0
  112. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.d.ts +4 -0
  113. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.d.ts.map +1 -0
  114. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.js +574 -0
  115. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.js.map +1 -0
  116. package/packages/@monomind/cli/dist/src/agents/halt-signal.d.ts +25 -0
  117. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +76 -0
  118. package/packages/@monomind/cli/dist/src/agents/index.d.ts +18 -0
  119. package/packages/@monomind/cli/dist/src/agents/index.js +13 -0
  120. package/packages/@monomind/cli/dist/src/agents/managed-agent.d.ts +41 -0
  121. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +69 -0
  122. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +23 -0
  123. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +49 -0
  124. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +22 -0
  125. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +80 -0
  126. package/packages/@monomind/cli/dist/src/agents/registry-builder.d.ts +36 -0
  127. package/packages/@monomind/cli/dist/src/agents/registry-builder.js +200 -0
  128. package/packages/@monomind/cli/dist/src/agents/registry-query.d.ts +71 -0
  129. package/packages/@monomind/cli/dist/src/agents/registry-query.js +125 -0
  130. package/packages/@monomind/cli/dist/src/agents/score-decay.d.ts +19 -0
  131. package/packages/@monomind/cli/dist/src/agents/score-decay.js +22 -0
  132. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.d.ts +13 -0
  133. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.js +40 -0
  134. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.d.ts +54 -0
  135. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +212 -0
  136. package/packages/@monomind/cli/dist/src/agents/termination-watcher.d.ts +30 -0
  137. package/packages/@monomind/cli/dist/src/agents/termination-watcher.js +84 -0
  138. package/packages/@monomind/cli/dist/src/agents/trigger-index.d.ts +20 -0
  139. package/packages/@monomind/cli/dist/src/agents/trigger-index.js +38 -0
  140. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +64 -0
  141. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +308 -0
  142. package/packages/@monomind/cli/dist/src/agents/version-diff.d.ts +18 -0
  143. package/packages/@monomind/cli/dist/src/agents/version-diff.js +64 -0
  144. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +60 -0
  145. package/packages/@monomind/cli/dist/src/agents/version-store.js +235 -0
  146. package/packages/@monomind/cli/dist/src/autopilot-state.d.ts +77 -0
  147. package/packages/@monomind/cli/dist/src/autopilot-state.js +330 -0
  148. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.d.ts +87 -0
  149. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +273 -0
  150. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.d.ts +36 -0
  151. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +114 -0
  152. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  153. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.js +404 -0
  154. package/packages/@monomind/cli/dist/src/commands/agent-wasm.d.ts +14 -0
  155. package/packages/@monomind/cli/dist/src/commands/agent-wasm.js +333 -0
  156. package/packages/@monomind/cli/dist/src/commands/agent.d.ts +8 -0
  157. package/packages/@monomind/cli/dist/src/commands/agent.js +943 -0
  158. package/packages/@monomind/cli/dist/src/commands/analyze.d.ts +19 -0
  159. package/packages/@monomind/cli/dist/src/commands/analyze.js +2048 -0
  160. package/packages/@monomind/cli/dist/src/commands/appliance-advanced.d.ts +9 -0
  161. package/packages/@monomind/cli/dist/src/commands/appliance-advanced.js +238 -0
  162. package/packages/@monomind/cli/dist/src/commands/appliance.d.ts +8 -0
  163. package/packages/@monomind/cli/dist/src/commands/appliance.js +406 -0
  164. package/packages/@monomind/cli/dist/src/commands/autopilot.d.ts +15 -0
  165. package/packages/@monomind/cli/dist/src/commands/autopilot.js +362 -0
  166. package/packages/@monomind/cli/dist/src/commands/benchmark.d.ts +10 -0
  167. package/packages/@monomind/cli/dist/src/commands/benchmark.js +571 -0
  168. package/packages/@monomind/cli/dist/src/commands/claims.d.ts +10 -0
  169. package/packages/@monomind/cli/dist/src/commands/claims.js +632 -0
  170. package/packages/@monomind/cli/dist/src/commands/cleanup.d.ts +13 -0
  171. package/packages/@monomind/cli/dist/src/commands/cleanup.js +218 -0
  172. package/packages/@monomind/cli/dist/src/commands/completions.d.ts +10 -0
  173. package/packages/@monomind/cli/dist/src/commands/completions.js +539 -0
  174. package/packages/@monomind/cli/dist/src/commands/config.d.ts +8 -0
  175. package/packages/@monomind/cli/dist/src/commands/config.js +460 -0
  176. package/packages/@monomind/cli/dist/src/commands/daemon.d.ts +8 -0
  177. package/packages/@monomind/cli/dist/src/commands/daemon.js +671 -0
  178. package/packages/@monomind/cli/dist/src/commands/deployment.d.ts +10 -0
  179. package/packages/@monomind/cli/dist/src/commands/deployment.js +691 -0
  180. package/packages/@monomind/cli/dist/src/commands/doctor.d.ts +10 -0
  181. package/packages/@monomind/cli/dist/src/commands/doctor.js +647 -0
  182. package/packages/@monomind/cli/dist/src/commands/embeddings.d.ts +18 -0
  183. package/packages/@monomind/cli/dist/src/commands/embeddings.js +1652 -0
  184. package/packages/@monomind/cli/dist/src/commands/guidance.d.ts +8 -0
  185. package/packages/@monomind/cli/dist/src/commands/guidance.js +560 -0
  186. package/packages/@monomind/cli/dist/src/commands/hive-mind.d.ts +11 -0
  187. package/packages/@monomind/cli/dist/src/commands/hive-mind.js +1238 -0
  188. package/packages/@monomind/cli/dist/src/commands/hooks.d.ts +8 -0
  189. package/packages/@monomind/cli/dist/src/commands/hooks.js +4446 -0
  190. package/packages/@monomind/cli/dist/src/commands/index.d.ts +119 -0
  191. package/packages/@monomind/cli/dist/src/commands/index.js +404 -0
  192. package/packages/@monomind/cli/dist/src/commands/init.d.ts +8 -0
  193. package/packages/@monomind/cli/dist/src/commands/init.js +853 -0
  194. package/packages/@monomind/cli/dist/src/commands/issues.d.ts +21 -0
  195. package/packages/@monomind/cli/dist/src/commands/issues.js +567 -0
  196. package/packages/@monomind/cli/dist/src/commands/mcp.d.ts +11 -0
  197. package/packages/@monomind/cli/dist/src/commands/mcp.js +705 -0
  198. package/packages/@monomind/cli/dist/src/commands/memory.d.ts +8 -0
  199. package/packages/@monomind/cli/dist/src/commands/memory.js +1596 -0
  200. package/packages/@monomind/cli/dist/src/commands/migrate.d.ts +8 -0
  201. package/packages/@monomind/cli/dist/src/commands/migrate.js +790 -0
  202. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +8 -0
  203. package/packages/@monomind/cli/dist/src/commands/monograph.js +526 -0
  204. package/packages/@monomind/cli/dist/src/commands/neural.d.ts +10 -0
  205. package/packages/@monomind/cli/dist/src/commands/neural.js +1494 -0
  206. package/packages/@monomind/cli/dist/src/commands/performance.d.ts +10 -0
  207. package/packages/@monomind/cli/dist/src/commands/performance.js +601 -0
  208. package/packages/@monomind/cli/dist/src/commands/plugins.d.ts +11 -0
  209. package/packages/@monomind/cli/dist/src/commands/plugins.js +796 -0
  210. package/packages/@monomind/cli/dist/src/commands/process.d.ts +10 -0
  211. package/packages/@monomind/cli/dist/src/commands/process.js +718 -0
  212. package/packages/@monomind/cli/dist/src/commands/progress.d.ts +11 -0
  213. package/packages/@monomind/cli/dist/src/commands/progress.js +259 -0
  214. package/packages/@monomind/cli/dist/src/commands/providers.d.ts +10 -0
  215. package/packages/@monomind/cli/dist/src/commands/providers.js +391 -0
  216. package/packages/@monomind/cli/dist/src/commands/replay.d.ts +8 -0
  217. package/packages/@monomind/cli/dist/src/commands/replay.js +60 -0
  218. package/packages/@monomind/cli/dist/src/commands/route.d.ts +16 -0
  219. package/packages/@monomind/cli/dist/src/commands/route.js +939 -0
  220. package/packages/@monomind/cli/dist/src/commands/ruvector/backup.d.ts +11 -0
  221. package/packages/@monomind/cli/dist/src/commands/ruvector/backup.js +746 -0
  222. package/packages/@monomind/cli/dist/src/commands/ruvector/benchmark.d.ts +11 -0
  223. package/packages/@monomind/cli/dist/src/commands/ruvector/benchmark.js +489 -0
  224. package/packages/@monomind/cli/dist/src/commands/ruvector/import.d.ts +18 -0
  225. package/packages/@monomind/cli/dist/src/commands/ruvector/import.js +359 -0
  226. package/packages/@monomind/cli/dist/src/commands/ruvector/index.d.ts +29 -0
  227. package/packages/@monomind/cli/dist/src/commands/ruvector/index.js +129 -0
  228. package/packages/@monomind/cli/dist/src/commands/ruvector/init.d.ts +11 -0
  229. package/packages/@monomind/cli/dist/src/commands/ruvector/init.js +481 -0
  230. package/packages/@monomind/cli/dist/src/commands/ruvector/migrate.d.ts +11 -0
  231. package/packages/@monomind/cli/dist/src/commands/ruvector/migrate.js +497 -0
  232. package/packages/@monomind/cli/dist/src/commands/ruvector/optimize.d.ts +11 -0
  233. package/packages/@monomind/cli/dist/src/commands/ruvector/optimize.js +504 -0
  234. package/packages/@monomind/cli/dist/src/commands/ruvector/setup.d.ts +18 -0
  235. package/packages/@monomind/cli/dist/src/commands/ruvector/setup.js +765 -0
  236. package/packages/@monomind/cli/dist/src/commands/ruvector/status.d.ts +11 -0
  237. package/packages/@monomind/cli/dist/src/commands/ruvector/status.js +491 -0
  238. package/packages/@monomind/cli/dist/src/commands/security.d.ts +10 -0
  239. package/packages/@monomind/cli/dist/src/commands/security.js +943 -0
  240. package/packages/@monomind/cli/dist/src/commands/session.d.ts +8 -0
  241. package/packages/@monomind/cli/dist/src/commands/session.js +793 -0
  242. package/packages/@monomind/cli/dist/src/commands/start.d.ts +8 -0
  243. package/packages/@monomind/cli/dist/src/commands/start.js +432 -0
  244. package/packages/@monomind/cli/dist/src/commands/status.d.ts +8 -0
  245. package/packages/@monomind/cli/dist/src/commands/status.js +591 -0
  246. package/packages/@monomind/cli/dist/src/commands/swarm.d.ts +8 -0
  247. package/packages/@monomind/cli/dist/src/commands/swarm.js +812 -0
  248. package/packages/@monomind/cli/dist/src/commands/task.d.ts +8 -0
  249. package/packages/@monomind/cli/dist/src/commands/task.js +671 -0
  250. package/packages/@monomind/cli/dist/src/commands/tokens.d.ts +8 -0
  251. package/packages/@monomind/cli/dist/src/commands/tokens.js +107 -0
  252. package/packages/@monomind/cli/dist/src/commands/transfer-store.d.ts +13 -0
  253. package/packages/@monomind/cli/dist/src/commands/transfer-store.js +428 -0
  254. package/packages/@monomind/cli/dist/src/commands/ui.js +68 -0
  255. package/packages/@monomind/cli/dist/src/commands/update.d.ts +8 -0
  256. package/packages/@monomind/cli/dist/src/commands/update.js +276 -0
  257. package/packages/@monomind/cli/dist/src/commands/workflow.d.ts +8 -0
  258. package/packages/@monomind/cli/dist/src/commands/workflow.js +644 -0
  259. package/packages/@monomind/cli/dist/src/config-adapter.d.ts +16 -0
  260. package/packages/@monomind/cli/dist/src/config-adapter.js +186 -0
  261. package/packages/@monomind/cli/dist/src/consensus/audit-writer.d.ts +50 -0
  262. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +142 -0
  263. package/packages/@monomind/cli/dist/src/consensus/index.d.ts +7 -0
  264. package/packages/@monomind/cli/dist/src/consensus/index.js +6 -0
  265. package/packages/@monomind/cli/dist/src/consensus/vote-signer.d.ts +36 -0
  266. package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +71 -0
  267. package/packages/@monomind/cli/dist/src/context/context-provider.d.ts +44 -0
  268. package/packages/@monomind/cli/dist/src/context/context-provider.js +25 -0
  269. package/packages/@monomind/cli/dist/src/context/git-state-provider.d.ts +12 -0
  270. package/packages/@monomind/cli/dist/src/context/git-state-provider.js +34 -0
  271. package/packages/@monomind/cli/dist/src/context/index.d.ts +12 -0
  272. package/packages/@monomind/cli/dist/src/context/index.js +12 -0
  273. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.d.ts +15 -0
  274. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.js +19 -0
  275. package/packages/@monomind/cli/dist/src/context/prompt-assembler.d.ts +26 -0
  276. package/packages/@monomind/cli/dist/src/context/prompt-assembler.js +93 -0
  277. package/packages/@monomind/cli/dist/src/context/task-history-provider.d.ts +24 -0
  278. package/packages/@monomind/cli/dist/src/context/task-history-provider.js +32 -0
  279. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.d.ts +14 -0
  280. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.js +27 -0
  281. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +31 -0
  282. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +81 -0
  283. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.d.ts +27 -0
  284. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.js +90 -0
  285. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.d.ts +24 -0
  286. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +65 -0
  287. package/packages/@monomind/cli/dist/src/dlq/index.d.ts +10 -0
  288. package/packages/@monomind/cli/dist/src/dlq/index.js +7 -0
  289. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +33 -0
  290. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +107 -0
  291. package/packages/@monomind/cli/dist/src/eval/dataset-runner.d.ts +23 -0
  292. package/packages/@monomind/cli/dist/src/eval/dataset-runner.js +59 -0
  293. package/packages/@monomind/cli/dist/src/eval/index.d.ts +10 -0
  294. package/packages/@monomind/cli/dist/src/eval/index.js +7 -0
  295. package/packages/@monomind/cli/dist/src/eval/trace-collector.d.ts +40 -0
  296. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +102 -0
  297. package/packages/@monomind/cli/dist/src/index.d.ts +82 -0
  298. package/packages/@monomind/cli/dist/src/index.js +580 -0
  299. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  300. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.js +264 -0
  301. package/packages/@monomind/cli/dist/src/init/claudemd-generator.d.ts +25 -0
  302. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +558 -0
  303. package/packages/@monomind/cli/dist/src/init/executor.d.ts +38 -0
  304. package/packages/@monomind/cli/dist/src/init/executor.js +2172 -0
  305. package/packages/@monomind/cli/dist/src/init/helpers-generator.d.ts +60 -0
  306. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +1235 -0
  307. package/packages/@monomind/cli/dist/src/init/index.d.ts +13 -0
  308. package/packages/@monomind/cli/dist/src/init/index.js +15 -0
  309. package/packages/@monomind/cli/dist/src/init/mcp-generator.d.ts +26 -0
  310. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +99 -0
  311. package/packages/@monomind/cli/dist/src/init/settings-generator.d.ts +14 -0
  312. package/packages/@monomind/cli/dist/src/init/settings-generator.js +417 -0
  313. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.d.ts +38 -0
  314. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +586 -0
  315. package/packages/@monomind/cli/dist/src/init/statusline-generator.d.ts +25 -0
  316. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +1171 -0
  317. package/packages/@monomind/cli/dist/src/init/types.d.ts +315 -0
  318. package/packages/@monomind/cli/dist/src/init/types.js +254 -0
  319. package/packages/@monomind/cli/dist/src/interactive/interrupt.d.ts +22 -0
  320. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +71 -0
  321. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.d.ts +25 -0
  322. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.js +48 -0
  323. package/packages/@monomind/cli/dist/src/mcp/tool-registry.d.ts +61 -0
  324. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +246 -0
  325. package/packages/@monomind/cli/dist/src/mcp-client.d.ts +92 -0
  326. package/packages/@monomind/cli/dist/src/mcp-client.js +270 -0
  327. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +170 -0
  328. package/packages/@monomind/cli/dist/src/mcp-server.js +829 -0
  329. package/packages/@monomind/cli/dist/src/mcp-tools/a2a-tools.d.ts +14 -0
  330. package/packages/@monomind/cli/dist/src/mcp-tools/a2a-tools.js +244 -0
  331. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.d.ts +9 -0
  332. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +607 -0
  333. package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.d.ts +30 -0
  334. package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.js +596 -0
  335. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
  336. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +326 -0
  337. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.d.ts +83 -0
  338. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +129 -0
  339. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
  340. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +237 -0
  341. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.d.ts +13 -0
  342. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +729 -0
  343. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.d.ts +12 -0
  344. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +797 -0
  345. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.d.ts +8 -0
  346. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +381 -0
  347. package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
  348. package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +728 -0
  349. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.d.ts +13 -0
  350. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +509 -0
  351. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
  352. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +823 -0
  353. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.d.ts +9 -0
  354. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +485 -0
  355. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.d.ts +10 -0
  356. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +49 -0
  357. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
  358. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +646 -0
  359. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
  360. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +957 -0
  361. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.d.ts +44 -0
  362. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +3440 -0
  363. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +39 -0
  364. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +41 -0
  365. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +14 -0
  366. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +530 -0
  367. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +9 -0
  368. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +6306 -0
  369. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.d.ts +16 -0
  370. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +718 -0
  371. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.d.ts +16 -0
  372. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +656 -0
  373. package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.d.ts +14 -0
  374. package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +350 -0
  375. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.d.ts +17 -0
  376. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +30 -0
  377. package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  378. package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.js +295 -0
  379. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.d.ts +18 -0
  380. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +434 -0
  381. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.d.ts +8 -0
  382. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +378 -0
  383. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.d.ts +9 -0
  384. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +317 -0
  385. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.d.ts +13 -0
  386. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +552 -0
  387. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.d.ts +8 -0
  388. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +446 -0
  389. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
  390. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +309 -0
  391. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
  392. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +401 -0
  393. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +37 -0
  394. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +14 -0
  395. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  396. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.js +230 -0
  397. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
  398. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +631 -0
  399. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.d.ts +295 -0
  400. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +632 -0
  401. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +338 -0
  402. package/packages/@monomind/cli/dist/src/memory/intelligence.js +1049 -0
  403. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +410 -0
  404. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +1654 -0
  405. package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +414 -0
  406. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +2284 -0
  407. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +234 -0
  408. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +650 -0
  409. package/packages/@monomind/cli/dist/src/model/complexity-scorer.d.ts +21 -0
  410. package/packages/@monomind/cli/dist/src/model/complexity-scorer.js +106 -0
  411. package/packages/@monomind/cli/dist/src/model/index.d.ts +4 -0
  412. package/packages/@monomind/cli/dist/src/model/index.js +4 -0
  413. package/packages/@monomind/cli/dist/src/model/model-settings.d.ts +22 -0
  414. package/packages/@monomind/cli/dist/src/model/model-settings.js +33 -0
  415. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.d.ts +24 -0
  416. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.js +65 -0
  417. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +40 -0
  418. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +138 -0
  419. package/packages/@monomind/cli/dist/src/orchestration/index.d.ts +7 -0
  420. package/packages/@monomind/cli/dist/src/orchestration/index.js +6 -0
  421. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.d.ts +11 -0
  422. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.js +31 -0
  423. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.d.ts +68 -0
  424. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +180 -0
  425. package/packages/@monomind/cli/dist/src/output.d.ts +133 -0
  426. package/packages/@monomind/cli/dist/src/output.js +514 -0
  427. package/packages/@monomind/cli/dist/src/parser.d.ts +59 -0
  428. package/packages/@monomind/cli/dist/src/parser.js +459 -0
  429. package/packages/@monomind/cli/dist/src/plugins/manager.d.ts +133 -0
  430. package/packages/@monomind/cli/dist/src/plugins/manager.js +493 -0
  431. package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +88 -0
  432. package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +859 -0
  433. package/packages/@monomind/cli/dist/src/plugins/store/index.d.ts +76 -0
  434. package/packages/@monomind/cli/dist/src/plugins/store/index.js +141 -0
  435. package/packages/@monomind/cli/dist/src/plugins/store/search.d.ts +46 -0
  436. package/packages/@monomind/cli/dist/src/plugins/store/search.js +230 -0
  437. package/packages/@monomind/cli/dist/src/plugins/store/types.d.ts +274 -0
  438. package/packages/@monomind/cli/dist/src/plugins/store/types.js +7 -0
  439. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  440. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  441. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  442. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +188 -0
  443. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  444. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +206 -0
  445. package/packages/@monomind/cli/dist/src/production/circuit-breaker.d.ts +101 -0
  446. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +248 -0
  447. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +94 -0
  448. package/packages/@monomind/cli/dist/src/production/error-handler.js +321 -0
  449. package/packages/@monomind/cli/dist/src/production/index.d.ts +23 -0
  450. package/packages/@monomind/cli/dist/src/production/index.js +18 -0
  451. package/packages/@monomind/cli/dist/src/production/monitoring.d.ts +161 -0
  452. package/packages/@monomind/cli/dist/src/production/monitoring.js +360 -0
  453. package/packages/@monomind/cli/dist/src/production/rate-limiter.d.ts +80 -0
  454. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +209 -0
  455. package/packages/@monomind/cli/dist/src/production/retry.d.ts +48 -0
  456. package/packages/@monomind/cli/dist/src/production/retry.js +179 -0
  457. package/packages/@monomind/cli/dist/src/prompt.d.ts +44 -0
  458. package/packages/@monomind/cli/dist/src/prompt.js +501 -0
  459. package/packages/@monomind/cli/dist/src/runtime/headless.d.ts +60 -0
  460. package/packages/@monomind/cli/dist/src/runtime/headless.js +284 -0
  461. package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.d.ts +182 -0
  462. package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.js +316 -0
  463. package/packages/@monomind/cli/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  464. package/packages/@monomind/cli/dist/src/ruvector/ast-analyzer.js +277 -0
  465. package/packages/@monomind/cli/dist/src/ruvector/coverage-router.d.ts +160 -0
  466. package/packages/@monomind/cli/dist/src/ruvector/coverage-router.js +539 -0
  467. package/packages/@monomind/cli/dist/src/ruvector/coverage-tools.d.ts +33 -0
  468. package/packages/@monomind/cli/dist/src/ruvector/coverage-tools.js +157 -0
  469. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +176 -0
  470. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +718 -0
  471. package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  472. package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.js +551 -0
  473. package/packages/@monomind/cli/dist/src/ruvector/flash-attention.d.ts +195 -0
  474. package/packages/@monomind/cli/dist/src/ruvector/flash-attention.js +643 -0
  475. package/packages/@monomind/cli/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  476. package/packages/@monomind/cli/dist/src/ruvector/graph-analyzer.js +929 -0
  477. package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +39 -0
  478. package/packages/@monomind/cli/dist/src/ruvector/index.js +76 -0
  479. package/packages/@monomind/cli/dist/src/ruvector/lora-adapter.d.ts +218 -0
  480. package/packages/@monomind/cli/dist/src/ruvector/lora-adapter.js +455 -0
  481. package/packages/@monomind/cli/dist/src/ruvector/model-router.d.ts +222 -0
  482. package/packages/@monomind/cli/dist/src/ruvector/model-router.js +512 -0
  483. package/packages/@monomind/cli/dist/src/ruvector/moe-router.d.ts +213 -0
  484. package/packages/@monomind/cli/dist/src/ruvector/moe-router.js +649 -0
  485. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.d.ts +217 -0
  486. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.js +712 -0
  487. package/packages/@monomind/cli/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  488. package/packages/@monomind/cli/dist/src/ruvector/ruvllm-wasm.js +363 -0
  489. package/packages/@monomind/cli/dist/src/ruvector/semantic-router.d.ts +77 -0
  490. package/packages/@monomind/cli/dist/src/ruvector/semantic-router.js +178 -0
  491. package/packages/@monomind/cli/dist/src/ruvector/vector-db.d.ts +69 -0
  492. package/packages/@monomind/cli/dist/src/ruvector/vector-db.js +243 -0
  493. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  494. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.js +95 -0
  495. package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +206 -0
  496. package/packages/@monomind/cli/dist/src/services/claim-service.js +849 -0
  497. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +51 -0
  498. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +312 -0
  499. package/packages/@monomind/cli/dist/src/services/container-worker-pool.d.ts +197 -0
  500. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +623 -0
  501. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.d.ts +311 -0
  502. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +1167 -0
  503. package/packages/@monomind/cli/dist/src/services/index.d.ts +13 -0
  504. package/packages/@monomind/cli/dist/src/services/index.js +11 -0
  505. package/packages/@monomind/cli/dist/src/services/registry-api.d.ts +58 -0
  506. package/packages/@monomind/cli/dist/src/services/registry-api.js +199 -0
  507. package/packages/@monomind/cli/dist/src/services/ruvector-training.d.ts +222 -0
  508. package/packages/@monomind/cli/dist/src/services/ruvector-training.js +696 -0
  509. package/packages/@monomind/cli/dist/src/services/worker-daemon.d.ts +248 -0
  510. package/packages/@monomind/cli/dist/src/services/worker-daemon.js +1083 -0
  511. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +201 -0
  512. package/packages/@monomind/cli/dist/src/services/worker-queue.js +594 -0
  513. package/packages/@monomind/cli/dist/src/suggest.d.ts +53 -0
  514. package/packages/@monomind/cli/dist/src/suggest.js +209 -0
  515. package/packages/@monomind/cli/dist/src/swarm/communication-graph.d.ts +25 -0
  516. package/packages/@monomind/cli/dist/src/swarm/communication-graph.js +77 -0
  517. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +31 -0
  518. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +61 -0
  519. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +19 -0
  520. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +68 -0
  521. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +25 -0
  522. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +177 -0
  523. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  524. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.js +205 -0
  525. package/packages/@monomind/cli/dist/src/transfer/export.d.ts +25 -0
  526. package/packages/@monomind/cli/dist/src/transfer/export.js +115 -0
  527. package/packages/@monomind/cli/dist/src/transfer/index.d.ts +12 -0
  528. package/packages/@monomind/cli/dist/src/transfer/index.js +31 -0
  529. package/packages/@monomind/cli/dist/src/transfer/ipfs/client.d.ts +109 -0
  530. package/packages/@monomind/cli/dist/src/transfer/ipfs/client.js +384 -0
  531. package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.d.ts +95 -0
  532. package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +420 -0
  533. package/packages/@monomind/cli/dist/src/transfer/models/seraphine.d.ts +72 -0
  534. package/packages/@monomind/cli/dist/src/transfer/models/seraphine.js +373 -0
  535. package/packages/@monomind/cli/dist/src/transfer/serialization/cfp.d.ts +49 -0
  536. package/packages/@monomind/cli/dist/src/transfer/serialization/cfp.js +183 -0
  537. package/packages/@monomind/cli/dist/src/transfer/storage/gcs.d.ts +82 -0
  538. package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +281 -0
  539. package/packages/@monomind/cli/dist/src/transfer/storage/index.d.ts +6 -0
  540. package/packages/@monomind/cli/dist/src/transfer/storage/index.js +6 -0
  541. package/packages/@monomind/cli/dist/src/transfer/store/discovery.d.ts +91 -0
  542. package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +437 -0
  543. package/packages/@monomind/cli/dist/src/transfer/store/download.d.ts +79 -0
  544. package/packages/@monomind/cli/dist/src/transfer/store/download.js +423 -0
  545. package/packages/@monomind/cli/dist/src/transfer/store/index.d.ts +84 -0
  546. package/packages/@monomind/cli/dist/src/transfer/store/index.js +153 -0
  547. package/packages/@monomind/cli/dist/src/transfer/store/publish.d.ts +76 -0
  548. package/packages/@monomind/cli/dist/src/transfer/store/publish.js +293 -0
  549. package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +58 -0
  550. package/packages/@monomind/cli/dist/src/transfer/store/registry.js +301 -0
  551. package/packages/@monomind/cli/dist/src/transfer/store/search.d.ts +54 -0
  552. package/packages/@monomind/cli/dist/src/transfer/store/search.js +232 -0
  553. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  554. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.js +190 -0
  555. package/packages/@monomind/cli/dist/src/transfer/store/types.d.ts +193 -0
  556. package/packages/@monomind/cli/dist/src/transfer/store/types.js +6 -0
  557. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.d.ts +6 -0
  558. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.js +105 -0
  559. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.d.ts +7 -0
  560. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.js +214 -0
  561. package/packages/@monomind/cli/dist/src/transfer/types.d.ts +245 -0
  562. package/packages/@monomind/cli/dist/src/transfer/types.js +6 -0
  563. package/packages/@monomind/cli/dist/src/types.d.ts +198 -0
  564. package/packages/@monomind/cli/dist/src/types.js +38 -0
  565. package/packages/@monomind/cli/dist/src/update/checker.d.ts +34 -0
  566. package/packages/@monomind/cli/dist/src/update/checker.js +198 -0
  567. package/packages/@monomind/cli/dist/src/update/executor.d.ts +32 -0
  568. package/packages/@monomind/cli/dist/src/update/executor.js +186 -0
  569. package/packages/@monomind/cli/dist/src/update/index.d.ts +33 -0
  570. package/packages/@monomind/cli/dist/src/update/index.js +64 -0
  571. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +31 -0
  572. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +116 -0
  573. package/packages/@monomind/cli/dist/src/update/validator.d.ts +17 -0
  574. package/packages/@monomind/cli/dist/src/update/validator.js +118 -0
  575. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +6 -0
  576. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +22 -0
  577. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.d.ts +10 -0
  578. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +82 -0
  579. package/packages/@monomind/cli/dist/src/workflow/context-resolver.d.ts +12 -0
  580. package/packages/@monomind/cli/dist/src/workflow/context-resolver.js +23 -0
  581. package/packages/@monomind/cli/dist/src/workflow/dag-builder.d.ts +17 -0
  582. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +129 -0
  583. package/packages/@monomind/cli/dist/src/workflow/dag-executor.d.ts +9 -0
  584. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +116 -0
  585. package/packages/@monomind/cli/dist/src/workflow/dag-types.d.ts +41 -0
  586. package/packages/@monomind/cli/dist/src/workflow/dag-types.js +8 -0
  587. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.d.ts +12 -0
  588. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.js +20 -0
  589. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +165 -0
  590. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +82 -0
  591. package/packages/@monomind/cli/dist/src/workflow/index.d.ts +13 -0
  592. package/packages/@monomind/cli/dist/src/workflow/index.js +11 -0
  593. package/packages/@monomind/cli/dist/src/workflow/template-engine.d.ts +11 -0
  594. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +40 -0
  595. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.d.ts +29 -0
  596. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +227 -0
  597. package/packages/@monomind/cli/package.json +2 -1
@@ -0,0 +1,943 @@
1
+ /**
2
+ * CLI Security Command
3
+ * Security scanning, CVE detection, threat modeling, vulnerability management
4
+ *
5
+ * github.com/nokhodian/monomind
6
+ */
7
+ import { output } from '../output.js';
8
+ import { existsSync, statSync, readFileSync, writeFileSync, renameSync, mkdirSync, realpathSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { execFile } from 'child_process';
11
+ import { promisify } from 'util';
12
+ import * as https from 'https';
13
+ // Scan subcommand
14
+ const scanCommand = {
15
+ name: 'scan',
16
+ description: 'Run security scan on target (code, dependencies, containers)',
17
+ options: [
18
+ { name: 'target', short: 't', type: 'string', description: 'Target path or URL to scan', default: '.' },
19
+ { name: 'depth', short: 'd', type: 'string', description: 'Scan depth: quick, standard, deep', default: 'standard' },
20
+ { name: 'type', type: 'string', description: 'Scan type: code, deps, container, all', default: 'all' },
21
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json, sarif', default: 'text' },
22
+ { name: 'fix', short: 'f', type: 'boolean', description: 'Auto-fix vulnerabilities where possible' },
23
+ ],
24
+ examples: [
25
+ { command: 'monomind security scan -t ./src', description: 'Scan source directory' },
26
+ { command: 'monomind security scan --depth deep --fix', description: 'Deep scan with auto-fix' },
27
+ ],
28
+ action: async (ctx) => {
29
+ const target = ctx.flags.target || '.';
30
+ const depth = ctx.flags.depth || 'standard';
31
+ const scanType = ctx.flags.type || 'all';
32
+ const fix = ctx.flags.fix;
33
+ output.writeln();
34
+ output.writeln(output.bold('Security Scan'));
35
+ output.writeln(output.dim('─'.repeat(50)));
36
+ const spinner = output.createSpinner({ text: `Scanning ${target}...`, spinner: 'dots' });
37
+ spinner.start();
38
+ const findings = [];
39
+ let criticalCount = 0, highCount = 0, mediumCount = 0, lowCount = 0;
40
+ try {
41
+ const fs = await import('fs');
42
+ const path = await import('path');
43
+ const { execSync } = await import('child_process');
44
+ // Phase 1: npm audit for dependency vulnerabilities
45
+ if (scanType === 'all' || scanType === 'deps') {
46
+ spinner.setText('Checking dependencies with npm audit...');
47
+ try {
48
+ const packageJsonPath = path.resolve(target, 'package.json');
49
+ if (fs.existsSync(packageJsonPath)) {
50
+ let auditResult;
51
+ try {
52
+ auditResult = execSync('npm audit --json', {
53
+ cwd: path.resolve(target),
54
+ encoding: 'utf-8',
55
+ maxBuffer: 10 * 1024 * 1024,
56
+ stdio: ['pipe', 'pipe', 'pipe'],
57
+ timeout: 30_000,
58
+ });
59
+ }
60
+ catch (auditErr) {
61
+ // npm audit exits non-zero when vulnerabilities found — stdout still has JSON
62
+ auditResult = auditErr.stdout || '{}';
63
+ }
64
+ try {
65
+ const audit = JSON.parse(auditResult);
66
+ if (audit.vulnerabilities) {
67
+ for (const [pkg, vuln] of Object.entries(audit.vulnerabilities)) {
68
+ const sev = vuln.severity || 'low';
69
+ const firstVia = Array.isArray(vuln.via) ? vuln.via[0] : undefined;
70
+ const title = firstVia && typeof firstVia === 'object' && firstVia.title ? firstVia.title : 'Vulnerability';
71
+ if (sev === 'critical')
72
+ criticalCount++;
73
+ else if (sev === 'high')
74
+ highCount++;
75
+ else if (sev === 'moderate' || sev === 'medium')
76
+ mediumCount++;
77
+ else
78
+ lowCount++;
79
+ findings.push({
80
+ severity: sev === 'critical' ? output.error('CRITICAL') :
81
+ sev === 'high' ? output.warning('HIGH') :
82
+ sev === 'moderate' || sev === 'medium' ? output.warning('MEDIUM') : output.info('LOW'),
83
+ type: 'Dependency CVE',
84
+ location: `package.json:${pkg}`,
85
+ description: title.substring(0, 35),
86
+ });
87
+ }
88
+ }
89
+ }
90
+ catch { /* JSON parse failed, no vulns */ }
91
+ }
92
+ }
93
+ catch { /* npm audit failed */ }
94
+ }
95
+ // Phase 2: Scan for hardcoded secrets
96
+ if (scanType === 'all' || scanType === 'code') {
97
+ spinner.setText('Scanning for hardcoded secrets...');
98
+ const secretPatterns = [
99
+ { pattern: /['"](?:sk-|sk_live_|sk_test_)[a-zA-Z0-9]{20,}['"]/g, type: 'API Key (Stripe/OpenAI)' },
100
+ { pattern: /['"]AKIA[A-Z0-9]{16}['"]/g, type: 'AWS Access Key' },
101
+ { pattern: /['"]ghp_[a-zA-Z0-9]{36}['"]/g, type: 'GitHub Token' },
102
+ { pattern: /['"]xox[baprs]-[a-zA-Z0-9-]+['"]/g, type: 'Slack Token' },
103
+ { pattern: /password\s*[:=]\s*['"][^'"]{8,}['"]/gi, type: 'Hardcoded Password' },
104
+ ];
105
+ const scanDir = (dir, depthLimit) => {
106
+ if (depthLimit <= 0)
107
+ return;
108
+ try {
109
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
110
+ for (const entry of entries) {
111
+ const isDotEnv = /^\.env(\..+)?$/.test(entry.name);
112
+ if ((entry.name.startsWith('.') && !isDotEnv) || entry.name === 'node_modules' || entry.name === 'dist')
113
+ continue;
114
+ const fullPath = path.join(dir, entry.name);
115
+ if (entry.isDirectory()) {
116
+ scanDir(fullPath, depthLimit - 1);
117
+ }
118
+ else if (entry.isFile() && (/\.(ts|js|json|yml|yaml)$/.test(entry.name) || isDotEnv) && !entry.name.endsWith('.d.ts')) {
119
+ try {
120
+ const content = fs.readFileSync(fullPath, 'utf-8');
121
+ const lines = content.split('\n');
122
+ for (let i = 0; i < lines.length; i++) {
123
+ for (const { pattern, type } of secretPatterns) {
124
+ if (pattern.test(lines[i])) {
125
+ highCount++;
126
+ findings.push({
127
+ severity: output.warning('HIGH'),
128
+ type: 'Hardcoded Secret',
129
+ location: `${path.relative(target, fullPath)}:${i + 1}`,
130
+ description: type,
131
+ });
132
+ pattern.lastIndex = 0;
133
+ }
134
+ }
135
+ }
136
+ }
137
+ catch { /* file read error */ }
138
+ }
139
+ }
140
+ }
141
+ catch { /* dir read error */ }
142
+ };
143
+ const scanDepth = depth === 'deep' ? 10 : depth === 'standard' ? 5 : 3;
144
+ scanDir(path.resolve(target), scanDepth);
145
+ }
146
+ // Phase 3: Check for common security issues in code
147
+ if ((scanType === 'all' || scanType === 'code') && depth !== 'quick') {
148
+ spinner.setText('Analyzing code patterns...');
149
+ const codePatterns = [
150
+ { pattern: /eval\s*\(/g, type: 'Eval Usage', severity: 'medium', desc: 'eval() can execute arbitrary code' },
151
+ { pattern: /innerHTML\s*=/g, type: 'innerHTML', severity: 'medium', desc: 'XSS risk with innerHTML' },
152
+ { pattern: /dangerouslySetInnerHTML/g, type: 'React XSS', severity: 'medium', desc: 'React XSS risk' },
153
+ { pattern: /child_process.*exec[^S]/g, type: 'Command Injection', severity: 'high', desc: 'Possible command injection' },
154
+ { pattern: /\$\{.*\}.*sql|sql.*\$\{/gi, type: 'SQL Injection', severity: 'high', desc: 'Possible SQL injection' },
155
+ ];
156
+ const scanCodeDir = (dir, depthLimit) => {
157
+ if (depthLimit <= 0)
158
+ return;
159
+ try {
160
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
161
+ for (const entry of entries) {
162
+ if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist')
163
+ continue;
164
+ const fullPath = path.join(dir, entry.name);
165
+ if (entry.isDirectory()) {
166
+ scanCodeDir(fullPath, depthLimit - 1);
167
+ }
168
+ else if (entry.isFile() && /\.(ts|js|tsx|jsx)$/.test(entry.name) && !entry.name.endsWith('.d.ts')) {
169
+ try {
170
+ const content = fs.readFileSync(fullPath, 'utf-8');
171
+ const lines = content.split('\n');
172
+ for (let i = 0; i < lines.length; i++) {
173
+ for (const { pattern, type, severity, desc } of codePatterns) {
174
+ if (pattern.test(lines[i])) {
175
+ if (severity === 'high')
176
+ highCount++;
177
+ else
178
+ mediumCount++;
179
+ findings.push({
180
+ severity: severity === 'high' ? output.warning('HIGH') : output.warning('MEDIUM'),
181
+ type,
182
+ location: `${path.relative(target, fullPath)}:${i + 1}`,
183
+ description: desc,
184
+ });
185
+ pattern.lastIndex = 0;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ catch { /* file read error */ }
191
+ }
192
+ }
193
+ }
194
+ catch { /* dir read error */ }
195
+ };
196
+ const scanDepth = depth === 'deep' ? 10 : 5;
197
+ scanCodeDir(path.resolve(target), scanDepth);
198
+ }
199
+ spinner.succeed('Scan complete');
200
+ // Display results
201
+ output.writeln();
202
+ if (findings.length > 0) {
203
+ output.printTable({
204
+ columns: [
205
+ { key: 'severity', header: 'Severity', width: 12 },
206
+ { key: 'type', header: 'Type', width: 18 },
207
+ { key: 'location', header: 'Location', width: 25 },
208
+ { key: 'description', header: 'Description', width: 35 },
209
+ ],
210
+ data: findings.slice(0, 20), // Show first 20
211
+ });
212
+ if (findings.length > 20) {
213
+ output.writeln(output.dim(`... and ${findings.length - 20} more issues`));
214
+ }
215
+ }
216
+ else {
217
+ output.writeln(output.success('No security issues found!'));
218
+ }
219
+ output.writeln();
220
+ output.printBox([
221
+ `Target: ${target}`,
222
+ `Depth: ${depth}`,
223
+ `Type: ${scanType}`,
224
+ ``,
225
+ `Critical: ${criticalCount} High: ${highCount} Medium: ${mediumCount} Low: ${lowCount}`,
226
+ `Total Issues: ${findings.length}`,
227
+ ].join('\n'), 'Scan Summary');
228
+ // Auto-fix if requested
229
+ if (fix && criticalCount + highCount > 0) {
230
+ // Refuse --fix when target is outside cwd: `npm audit fix` runs lifecycle scripts
231
+ // (pre/post-install) from the target directory's package.json, allowing arbitrary
232
+ // code execution if the target was attacker-controlled.
233
+ const resolvedTarget = realpathSync(path.resolve(target));
234
+ const cwd = realpathSync(process.cwd());
235
+ if (!resolvedTarget.startsWith(cwd + path.sep) && resolvedTarget !== cwd) {
236
+ output.writeln();
237
+ output.printError('--fix is only allowed when --target is within the current working directory');
238
+ return { success: false };
239
+ }
240
+ output.writeln();
241
+ const fixSpinner = output.createSpinner({ text: 'Attempting to fix vulnerabilities...', spinner: 'dots' });
242
+ fixSpinner.start();
243
+ try {
244
+ try {
245
+ execSync('npm audit fix', { cwd: resolvedTarget, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
246
+ }
247
+ catch { /* npm audit fix may exit non-zero */ }
248
+ fixSpinner.succeed('Applied available fixes (run scan again to verify)');
249
+ }
250
+ catch {
251
+ fixSpinner.fail('Some fixes could not be applied automatically');
252
+ }
253
+ }
254
+ return { success: findings.length === 0 || (criticalCount === 0 && highCount === 0) };
255
+ }
256
+ catch (error) {
257
+ spinner.fail('Scan failed');
258
+ output.printError(`Error: ${error}`);
259
+ return { success: false };
260
+ }
261
+ },
262
+ };
263
+ // ─── CVE helpers ────────────────────────────────────────────────────────────
264
+ const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
265
+ function getCveCache(cveId, cacheDir) {
266
+ const filePath = join(cacheDir, `${cveId.toUpperCase()}.json`);
267
+ if (!existsSync(filePath))
268
+ return null;
269
+ const stat = statSync(filePath);
270
+ if (Date.now() - stat.mtimeMs > CACHE_TTL_MS)
271
+ return null;
272
+ try {
273
+ return JSON.parse(readFileSync(filePath, 'utf8'));
274
+ }
275
+ catch {
276
+ return null;
277
+ }
278
+ }
279
+ const CVE_ID_RE = /^CVE-\d{4}-\d{4,}$/i;
280
+ function saveCveCache(cveId, cacheDir, data) {
281
+ if (!CVE_ID_RE.test(cveId))
282
+ throw new Error('Invalid CVE ID');
283
+ mkdirSync(cacheDir, { recursive: true });
284
+ const dest = join(cacheDir, `${cveId.toUpperCase()}.json`);
285
+ const tmp = dest + '.tmp';
286
+ writeFileSync(tmp, JSON.stringify(data));
287
+ renameSync(tmp, dest);
288
+ }
289
+ function httpsGet(url, timeoutMs = 10_000) {
290
+ return new Promise((resolve, reject) => {
291
+ const req = https.get(url, { headers: { 'User-Agent': 'monomind-cli/1.0' }, timeout: timeoutMs }, (res) => {
292
+ if (res.statusCode !== 200) {
293
+ req.destroy();
294
+ reject(new Error(`HTTP ${res.statusCode}`));
295
+ return;
296
+ }
297
+ let data = '';
298
+ res.on('data', (chunk) => { data += chunk; });
299
+ res.on('end', () => resolve(data));
300
+ });
301
+ req.on('timeout', () => req.destroy(new Error(`Request timed out after ${timeoutMs}ms`)));
302
+ req.on('error', reject);
303
+ });
304
+ }
305
+ function severityColor(severity, score) {
306
+ const s = (severity || '').toUpperCase();
307
+ const label = s + (score !== undefined ? ` (${score})` : '');
308
+ if (s === 'CRITICAL')
309
+ return output.error(label);
310
+ if (s === 'HIGH')
311
+ return output.warning(label);
312
+ if (s === 'MEDIUM')
313
+ return output.info(label);
314
+ return output.dim(label || 'UNKNOWN');
315
+ }
316
+ const execFileAsync = promisify(execFile);
317
+ // ─── CVE subcommand ──────────────────────────────────────────────────────────
318
+ const cveCommand = {
319
+ name: 'cve',
320
+ description: 'Check CVEs via NVD/OSV or list project vulnerabilities via npm audit',
321
+ options: [
322
+ { name: 'check', short: 'c', type: 'string', description: 'Check specific CVE ID (e.g. CVE-2024-1234)' },
323
+ { name: 'list', short: 'l', type: 'boolean', description: 'List all vulnerabilities via npm audit' },
324
+ { name: 'severity', short: 's', type: 'string', description: 'Filter by severity: critical, high, medium, low' },
325
+ { name: 'json', type: 'boolean', description: 'Output as JSON' },
326
+ { name: 'no-cache', type: 'boolean', description: 'Skip cache and fetch fresh data' },
327
+ ],
328
+ examples: [
329
+ { command: 'monomind security cve --list', description: 'List vulnerabilities from npm audit' },
330
+ { command: 'monomind security cve -c CVE-2024-1234', description: 'Check specific CVE via NVD/OSV' },
331
+ { command: 'monomind security cve --list --severity high', description: 'Show only high-severity issues' },
332
+ ],
333
+ action: async (ctx) => {
334
+ const checkCve = ctx.flags.check;
335
+ const doList = ctx.flags.list;
336
+ const severityFilter = ctx.flags.severity?.toLowerCase();
337
+ const jsonOutput = ctx.flags.json;
338
+ const noCache = ctx.flags['no-cache'];
339
+ output.writeln();
340
+ output.writeln(output.bold('CVE / Vulnerability Scanner'));
341
+ output.writeln(output.dim('─'.repeat(50)));
342
+ // ── --check CVE-XXXX-YYYY ──────────────────────────────────────────────
343
+ if (checkCve) {
344
+ const CVE_PATTERN = /^CVE-\d{4}-\d{4,}$/i;
345
+ if (!CVE_PATTERN.test(checkCve)) {
346
+ output.writeln(output.error(`Invalid CVE ID format: "${checkCve}"`));
347
+ output.writeln(output.dim('Expected format: CVE-YYYY-NNNN (e.g. CVE-2024-12345)'));
348
+ return { success: false };
349
+ }
350
+ const cveId = checkCve.toUpperCase();
351
+ const cacheDir = join(ctx.cwd, '.monomind', 'cache', 'cve');
352
+ // Check cache first (unless --no-cache)
353
+ let cveData = noCache ? null : getCveCache(cveId, cacheDir);
354
+ let source = 'cache';
355
+ if (!cveData) {
356
+ const spinner = output.createSpinner({ text: `Fetching ${cveId} from NVD...`, spinner: 'dots' });
357
+ spinner.start();
358
+ // Try NVD first
359
+ try {
360
+ const nvdUrl = `https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=${cveId}`;
361
+ const nvdRaw = await httpsGet(nvdUrl);
362
+ cveData = { _source: 'nvd', ...JSON.parse(nvdRaw) };
363
+ source = 'NVD';
364
+ spinner.succeed(`Fetched from NVD`);
365
+ }
366
+ catch {
367
+ spinner.setText(`NVD unavailable — trying OSV...`);
368
+ // Fallback: OSV
369
+ try {
370
+ const osvUrl = `https://api.osv.dev/v1/vulns/${cveId}`;
371
+ const osvRaw = await httpsGet(osvUrl);
372
+ cveData = { _source: 'osv', ...JSON.parse(osvRaw) };
373
+ source = 'OSV';
374
+ spinner.succeed(`Fetched from OSV`);
375
+ }
376
+ catch {
377
+ spinner.fail('Could not fetch CVE data');
378
+ output.writeln(output.error('Could not fetch CVE data — check your network connection'));
379
+ return { success: false };
380
+ }
381
+ }
382
+ // Cache the result — only cache non-empty NVD responses
383
+ const nvdVulns = cveData.vulnerabilities;
384
+ if (!Array.isArray(nvdVulns) || nvdVulns.length > 0) {
385
+ saveCveCache(cveId, cacheDir, cveData);
386
+ }
387
+ }
388
+ // Parse and display
389
+ const raw = cveData;
390
+ if (jsonOutput) {
391
+ output.writeln(JSON.stringify(raw, null, 2));
392
+ return { success: true };
393
+ }
394
+ if (raw._source === 'nvd') {
395
+ // NVD v2 parsing
396
+ const vulns = raw.vulnerabilities;
397
+ if (!vulns || vulns.length === 0) {
398
+ output.writeln(output.warning(`No data found for ${cveId}`));
399
+ return { success: true };
400
+ }
401
+ const cve = vulns[0].cve;
402
+ const published = (cve.published || '').split('T')[0];
403
+ const lastMod = (cve.lastModified || '').split('T')[0];
404
+ const descriptions = cve.descriptions;
405
+ const desc = descriptions?.find(d => d.lang === 'en')?.value || 'No description available';
406
+ const metrics = cve.metrics;
407
+ const cvssV31 = metrics?.cvssMetricV31;
408
+ const cvssData = cvssV31?.[0]?.cvssData;
409
+ const score = cvssData?.baseScore;
410
+ const severity = cvssData?.baseSeverity || 'N/A';
411
+ const references = cve.references;
412
+ output.writeln();
413
+ output.printBox([
414
+ `CVE ID: ${cveId}`,
415
+ `Source: ${source}`,
416
+ `Published: ${published}`,
417
+ `Last Modified: ${lastMod}`,
418
+ `Severity: ${severityColor(severity, score)}`,
419
+ ``,
420
+ `Description:`,
421
+ ` ${desc}`,
422
+ ``,
423
+ `References:`,
424
+ ...(references || []).slice(0, 3).map(r => ` - ${r.url}`),
425
+ ].join('\n'), 'CVE Details');
426
+ }
427
+ else {
428
+ // OSV parsing
429
+ const osv = raw;
430
+ const osvId = osv.id || cveId;
431
+ const summary = osv.summary || osv.details || 'No description available';
432
+ const affected = osv.affected;
433
+ const references = osv.references;
434
+ output.writeln();
435
+ const affectedLines = [];
436
+ if (affected && affected.length > 0) {
437
+ for (const a of affected.slice(0, 5)) {
438
+ const pkgName = a.package?.name || 'unknown';
439
+ const ecosystem = a.package?.ecosystem || '';
440
+ affectedLines.push(` - ${pkgName}${ecosystem ? ` (${ecosystem})` : ''}`);
441
+ }
442
+ }
443
+ output.printBox([
444
+ `CVE ID: ${osvId}`,
445
+ `Source: OSV (CVSS score: N/A)`,
446
+ `Severity: N/A`,
447
+ ``,
448
+ `Description:`,
449
+ ` ${summary}`,
450
+ ...(affectedLines.length > 0 ? ['', 'Affected packages:', ...affectedLines] : []),
451
+ ``,
452
+ `References:`,
453
+ ...(references || []).slice(0, 3).map(r => ` - ${r.url}`),
454
+ ].join('\n'), 'CVE Details');
455
+ }
456
+ return { success: true };
457
+ }
458
+ // ── --list ─────────────────────────────────────────────────────────────
459
+ if (doList) {
460
+ const spinner = output.createSpinner({ text: 'Running npm audit...', spinner: 'dots' });
461
+ spinner.start();
462
+ let auditOutput = '';
463
+ try {
464
+ const { stdout } = await execFileAsync('npm', ['audit', '--json'], {
465
+ cwd: ctx.cwd,
466
+ timeout: 30000,
467
+ });
468
+ auditOutput = stdout;
469
+ }
470
+ catch (err) {
471
+ // Exit code 1 means vulnerabilities found — stdout still has JSON
472
+ const execErr = err;
473
+ auditOutput = execErr.stdout || '';
474
+ if (!auditOutput) {
475
+ spinner.fail('npm audit failed');
476
+ output.writeln(output.warning('npm audit failed: ' + (execErr.message || 'unknown error')));
477
+ output.writeln(output.dim('Make sure package-lock.json exists (run `npm install` first).'));
478
+ return { success: false };
479
+ }
480
+ }
481
+ spinner.succeed('npm audit complete');
482
+ let auditJson;
483
+ try {
484
+ auditJson = JSON.parse(auditOutput);
485
+ }
486
+ catch {
487
+ output.writeln(output.error('Could not parse npm audit output'));
488
+ return { success: false };
489
+ }
490
+ if (jsonOutput) {
491
+ output.writeln(JSON.stringify(auditJson, null, 2));
492
+ return { success: true };
493
+ }
494
+ const vulnerabilities = auditJson.vulnerabilities;
495
+ const metadata = auditJson.metadata;
496
+ const counts = metadata?.vulnerabilities || {};
497
+ const rows = [];
498
+ if (vulnerabilities) {
499
+ for (const [pkgName, vuln] of Object.entries(vulnerabilities)) {
500
+ const sev = vuln.severity || 'unknown';
501
+ // Normalize severity filter: accept "medium" to match "moderate"
502
+ if (severityFilter) {
503
+ const normalizedSev = sev === 'moderate' ? 'medium' : sev;
504
+ if (normalizedSev !== severityFilter && sev !== severityFilter)
505
+ continue;
506
+ }
507
+ // Extract advisory/CVE info from first object-type via entry
508
+ const viaObj = vuln.via.find(v => typeof v === 'object');
509
+ let advisoryId = '—';
510
+ if (viaObj?.url) {
511
+ // Try to extract CVE or GHSA from URL
512
+ const cveMatch = viaObj.url.match(/CVE-\d{4}-\d+/i);
513
+ const ghsaMatch = viaObj.url.match(/GHSA-[a-z0-9-]+/i);
514
+ if (cveMatch)
515
+ advisoryId = cveMatch[0].toUpperCase();
516
+ else if (ghsaMatch)
517
+ advisoryId = ghsaMatch[0].toUpperCase();
518
+ else
519
+ advisoryId = viaObj.url.split('/').pop() || advisoryId;
520
+ }
521
+ const sevColored = sev === 'critical' ? output.error('CRITICAL') :
522
+ sev === 'high' ? output.warning('HIGH') :
523
+ sev === 'moderate' || sev === 'medium' ? output.info('MEDIUM') :
524
+ output.dim(sev.toUpperCase());
525
+ const fixAvail = vuln.fixAvailable === true ? output.success('Yes') :
526
+ vuln.fixAvailable && typeof vuln.fixAvailable === 'object' ?
527
+ output.success(`${vuln.fixAvailable.version}`) :
528
+ output.dim('No');
529
+ rows.push({
530
+ id: advisoryId,
531
+ severity: sevColored,
532
+ package: pkgName,
533
+ range: vuln.range || '—',
534
+ fix: fixAvail,
535
+ });
536
+ }
537
+ }
538
+ output.writeln();
539
+ if (rows.length === 0) {
540
+ output.writeln(output.success('No vulnerabilities found' + (severityFilter ? ` matching severity: ${severityFilter}` : '') + '.'));
541
+ }
542
+ else {
543
+ output.printTable({
544
+ columns: [
545
+ { key: 'id', header: 'CVE / Advisory', width: 22 },
546
+ { key: 'severity', header: 'Severity', width: 12 },
547
+ { key: 'package', header: 'Package', width: 22 },
548
+ { key: 'range', header: 'Affected Range', width: 20 },
549
+ { key: 'fix', header: 'Fix Available', width: 16 },
550
+ ],
551
+ data: rows,
552
+ });
553
+ }
554
+ // Summary line
555
+ const critical = counts['critical'] || 0;
556
+ const high = counts['high'] || 0;
557
+ const moderate = counts['moderate'] || 0;
558
+ const low = counts['low'] || 0;
559
+ output.writeln();
560
+ output.writeln(output.bold('Summary: ') +
561
+ output.error(`${critical} critical`) + ' ' +
562
+ output.warning(`${high} high`) + ' ' +
563
+ output.info(`${moderate} medium`) + ' ' +
564
+ output.dim(`${low} low`));
565
+ return { success: critical === 0 && high === 0 };
566
+ }
567
+ // No subcommand provided — show usage
568
+ output.writeln('Usage:');
569
+ output.printList([
570
+ '--check CVE-XXXX-YYYY Look up a specific CVE via NVD/OSV',
571
+ '--list List project vulnerabilities (npm audit)',
572
+ '--severity <level> Filter --list by: critical, high, medium, low',
573
+ '--json Output raw JSON',
574
+ '--no-cache Skip local cache (forces fresh fetch)',
575
+ ]);
576
+ output.writeln();
577
+ output.writeln(output.dim('Examples:'));
578
+ output.writeln(output.dim(' monomind security cve --check CVE-2021-44228'));
579
+ output.writeln(output.dim(' monomind security cve --list --severity critical'));
580
+ return { success: true };
581
+ },
582
+ };
583
+ // Threats subcommand
584
+ const threatsCommand = {
585
+ name: 'threats',
586
+ description: 'Threat modeling and analysis',
587
+ options: [
588
+ { name: 'model', short: 'm', type: 'string', description: 'Threat model: stride, dread, pasta', default: 'stride' },
589
+ { name: 'scope', short: 's', type: 'string', description: 'Analysis scope', default: '.' },
590
+ { name: 'export', short: 'e', type: 'string', description: 'Export format: json, md, html' },
591
+ ],
592
+ examples: [
593
+ { command: 'monomind security threats --model stride', description: 'Run STRIDE analysis' },
594
+ { command: 'monomind security threats -e md', description: 'Export as markdown' },
595
+ ],
596
+ action: async (ctx) => {
597
+ const model = ctx.flags.model || 'stride';
598
+ output.writeln();
599
+ output.writeln(output.bold(`Threat Model: ${model.toUpperCase()}`));
600
+ output.writeln(output.dim('─'.repeat(50)));
601
+ output.printTable({
602
+ columns: [
603
+ { key: 'category', header: 'Category', width: 20 },
604
+ { key: 'threat', header: 'Threat', width: 30 },
605
+ { key: 'risk', header: 'Risk', width: 10 },
606
+ { key: 'mitigation', header: 'Mitigation', width: 30 },
607
+ ],
608
+ data: [
609
+ { category: 'Spoofing', threat: 'API key theft', risk: output.error('High'), mitigation: 'Use secure key storage' },
610
+ { category: 'Tampering', threat: 'Data manipulation', risk: output.warning('Medium'), mitigation: 'Input validation' },
611
+ { category: 'Repudiation', threat: 'Action denial', risk: output.info('Low'), mitigation: 'Audit logging' },
612
+ { category: 'Info Disclosure', threat: 'Data leakage', risk: output.error('High'), mitigation: 'Encryption at rest' },
613
+ { category: 'DoS', threat: 'Resource exhaustion', risk: output.warning('Medium'), mitigation: 'Rate limiting' },
614
+ { category: 'Elevation', threat: 'Privilege escalation', risk: output.error('High'), mitigation: 'RBAC implementation' },
615
+ ],
616
+ });
617
+ return { success: true };
618
+ },
619
+ };
620
+ // Audit subcommand
621
+ const auditCommand = {
622
+ name: 'audit',
623
+ description: 'Security audit logging and compliance',
624
+ options: [
625
+ { name: 'action', short: 'a', type: 'string', description: 'Action: log, list, export, clear', default: 'list' },
626
+ { name: 'limit', short: 'l', type: 'number', description: 'Number of entries to show', default: '20' },
627
+ { name: 'filter', short: 'f', type: 'string', description: 'Filter by event type' },
628
+ ],
629
+ examples: [
630
+ { command: 'monomind security audit --action list', description: 'List audit logs' },
631
+ { command: 'monomind security audit -a export', description: 'Export audit trail' },
632
+ ],
633
+ action: async (ctx) => {
634
+ const action = ctx.flags.action || 'list';
635
+ output.writeln();
636
+ output.writeln(output.bold('Security Audit Log'));
637
+ output.writeln(output.dim('─'.repeat(60)));
638
+ // Generate real audit entries from .swarm/ state and session history
639
+ const { existsSync, readFileSync, readdirSync, statSync } = await import('fs');
640
+ const { join } = await import('path');
641
+ const auditEntries = [];
642
+ const swarmDir = join(process.cwd(), '.swarm');
643
+ // Check session files for real audit events
644
+ if (existsSync(swarmDir)) {
645
+ try {
646
+ const files = readdirSync(swarmDir).filter(f => f.endsWith('.json'));
647
+ for (const file of files.slice(-10)) {
648
+ try {
649
+ const stat = statSync(join(swarmDir, file));
650
+ const ts = stat.mtime.toISOString().replace('T', ' ').substring(0, 19);
651
+ auditEntries.push({
652
+ timestamp: ts,
653
+ event: file.includes('session') ? 'SESSION_UPDATE' :
654
+ file.includes('swarm') ? 'SWARM_ACTIVITY' :
655
+ file.includes('memory') ? 'MEMORY_WRITE' : 'CONFIG_CHANGE',
656
+ user: 'system',
657
+ status: output.success('Success')
658
+ });
659
+ }
660
+ catch { /* skip */ }
661
+ }
662
+ }
663
+ catch { /* ignore */ }
664
+ }
665
+ // Add current session entry
666
+ const now = new Date().toISOString().replace('T', ' ').substring(0, 19);
667
+ auditEntries.push({ timestamp: now, event: 'AUDIT_RUN', user: 'cli', status: output.success('Success') });
668
+ // Sort by timestamp desc
669
+ auditEntries.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
670
+ if (auditEntries.length === 0) {
671
+ output.writeln(output.dim('No audit events found. Initialize a project first: monomind init'));
672
+ }
673
+ else {
674
+ output.printTable({
675
+ columns: [
676
+ { key: 'timestamp', header: 'Timestamp', width: 22 },
677
+ { key: 'event', header: 'Event', width: 20 },
678
+ { key: 'user', header: 'User', width: 15 },
679
+ { key: 'status', header: 'Status', width: 12 },
680
+ ],
681
+ data: auditEntries.slice(0, parseInt(ctx.flags.limit || '20', 10)),
682
+ });
683
+ }
684
+ return { success: true };
685
+ },
686
+ };
687
+ // Secrets subcommand
688
+ const secretsCommand = {
689
+ name: 'secrets',
690
+ description: 'Detect and manage secrets in codebase',
691
+ options: [
692
+ { name: 'action', short: 'a', type: 'string', description: 'Action: scan, list, rotate', default: 'scan' },
693
+ { name: 'path', short: 'p', type: 'string', description: 'Path to scan', default: '.' },
694
+ { name: 'ignore', short: 'i', type: 'string', description: 'Patterns to ignore' },
695
+ ],
696
+ examples: [
697
+ { command: 'monomind security secrets --action scan', description: 'Scan for secrets' },
698
+ { command: 'monomind security secrets -a rotate', description: 'Rotate compromised secrets' },
699
+ ],
700
+ action: async (ctx) => {
701
+ const path = ctx.flags.path || '.';
702
+ output.writeln();
703
+ output.writeln(output.bold('Secret Detection'));
704
+ output.writeln(output.dim('─'.repeat(50)));
705
+ const spinner = output.createSpinner({ text: 'Scanning for secrets...', spinner: 'dots' });
706
+ spinner.start();
707
+ await new Promise(r => setTimeout(r, 800));
708
+ spinner.succeed('Scan complete');
709
+ output.writeln();
710
+ output.writeln(output.warning('⚠ No real secrets scan performed. Showing example findings.'));
711
+ output.writeln(output.dim('Run "monomind security scan --depth full" for real secret detection.'));
712
+ output.writeln();
713
+ output.printTable({
714
+ columns: [
715
+ { key: 'type', header: 'Secret Type (Example)', width: 25 },
716
+ { key: 'location', header: 'Location', width: 30 },
717
+ { key: 'risk', header: 'Risk', width: 12 },
718
+ { key: 'action', header: 'Recommended', width: 20 },
719
+ ],
720
+ data: [
721
+ { type: 'AWS Access Key', location: 'example/config.ts:15', risk: output.error('Critical'), action: 'Rotate immediately' },
722
+ { type: 'GitHub Token', location: 'example/.env:8', risk: output.warning('High'), action: 'Remove from repo' },
723
+ { type: 'JWT Secret', location: 'example/auth.ts:42', risk: output.warning('High'), action: 'Use env variable' },
724
+ { type: 'DB Password', location: 'example/compose.yml:23', risk: output.warning('Medium'), action: 'Use secrets mgmt' },
725
+ ],
726
+ });
727
+ return { success: true };
728
+ },
729
+ };
730
+ // Defend subcommand (AIDefence integration)
731
+ const defendCommand = {
732
+ name: 'defend',
733
+ description: 'AI manipulation defense - detect prompt injection, jailbreaks, and PII',
734
+ options: [
735
+ { name: 'input', short: 'i', type: 'string', description: 'Input text to scan for threats' },
736
+ { name: 'file', short: 'f', type: 'string', description: 'File to scan for threats' },
737
+ { name: 'quick', short: 'Q', type: 'boolean', description: 'Quick scan (faster, less detailed)' },
738
+ { name: 'learn', short: 'l', type: 'boolean', description: 'Enable learning mode', default: 'true' },
739
+ { name: 'stats', short: 's', type: 'boolean', description: 'Show detection statistics' },
740
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', default: 'text' },
741
+ ],
742
+ examples: [
743
+ { command: 'monomind security defend -i "ignore previous instructions"', description: 'Scan text for threats' },
744
+ { command: 'monomind security defend -f ./prompts.txt', description: 'Scan file for threats' },
745
+ { command: 'monomind security defend --stats', description: 'Show detection statistics' },
746
+ ],
747
+ action: async (ctx) => {
748
+ const inputText = ctx.flags.input;
749
+ const filePath = ctx.flags.file;
750
+ const quickMode = ctx.flags.quick;
751
+ const showStats = ctx.flags.stats;
752
+ const outputFormat = ctx.flags.output || 'text';
753
+ const enableLearning = ctx.flags.learn !== false;
754
+ output.writeln();
755
+ output.writeln(output.bold('🛡️ AIDefence - AI Manipulation Defense System'));
756
+ output.writeln(output.dim('─'.repeat(55)));
757
+ // Dynamic import of aidefence (allows package to be optional)
758
+ let createAIDefence;
759
+ try {
760
+ const aidefence = await import('@monomind/aidefence');
761
+ createAIDefence = aidefence.createAIDefence;
762
+ }
763
+ catch {
764
+ output.printError('AIDefence package not installed. Run: npm install @monomind/aidefence');
765
+ return { success: false, message: 'AIDefence not available' };
766
+ }
767
+ const defender = createAIDefence({ enableLearning });
768
+ // Show stats mode
769
+ if (showStats) {
770
+ const stats = await defender.getStats();
771
+ output.writeln();
772
+ output.printBox([
773
+ `Detection Count: ${stats.detectionCount}`,
774
+ `Avg Detection Time: ${stats.avgDetectionTimeMs.toFixed(3)}ms`,
775
+ `Learned Patterns: ${stats.learnedPatterns}`,
776
+ `Mitigation Strategies: ${stats.mitigationStrategies}`,
777
+ `Avg Mitigation Effectiveness: ${(stats.avgMitigationEffectiveness * 100).toFixed(1)}%`,
778
+ ].join('\n'), 'Detection Statistics');
779
+ return { success: true };
780
+ }
781
+ // Get input to scan
782
+ let textToScan = inputText;
783
+ if (filePath) {
784
+ try {
785
+ const fs = await import('fs/promises');
786
+ const MAX_DEFEND_FILE_BYTES = 10 * 1024 * 1024;
787
+ const { size } = await fs.stat(filePath);
788
+ if (size > MAX_DEFEND_FILE_BYTES) {
789
+ output.printError(`File too large (${(size / 1024 / 1024).toFixed(1)} MB). Maximum is 10 MB.`);
790
+ return { success: false, message: 'File too large' };
791
+ }
792
+ textToScan = await fs.readFile(filePath, 'utf-8');
793
+ output.writeln(output.dim(`Reading file: ${filePath}`));
794
+ }
795
+ catch (err) {
796
+ output.printError(`Failed to read file: ${filePath}`);
797
+ return { success: false, message: 'File not found' };
798
+ }
799
+ }
800
+ if (!textToScan) {
801
+ output.writeln('Usage: monomind security defend -i "<text>" or -f <file>');
802
+ output.writeln();
803
+ output.writeln('Options:');
804
+ output.printList([
805
+ '-i, --input Text to scan for AI manipulation attempts',
806
+ '-f, --file File path to scan',
807
+ '-q, --quick Quick scan mode (faster)',
808
+ '-s, --stats Show detection statistics',
809
+ '--learn Enable pattern learning (default: true)',
810
+ ]);
811
+ return { success: true };
812
+ }
813
+ const spinner = output.createSpinner({ text: 'Scanning for threats...', spinner: 'dots' });
814
+ spinner.start();
815
+ // Perform scan
816
+ const startTime = performance.now();
817
+ const result = quickMode
818
+ ? { ...defender.quickScan(textToScan), threats: [], piiFound: false, detectionTimeMs: 0, inputHash: '', safe: !defender.quickScan(textToScan).threat }
819
+ : await defender.detect(textToScan);
820
+ const scanTime = performance.now() - startTime;
821
+ spinner.stop();
822
+ // JSON output
823
+ if (outputFormat === 'json') {
824
+ output.writeln(JSON.stringify({
825
+ safe: result.safe,
826
+ threats: result.threats || [],
827
+ piiFound: result.piiFound,
828
+ detectionTimeMs: scanTime,
829
+ }, null, 2));
830
+ return { success: true };
831
+ }
832
+ // Text output
833
+ output.writeln();
834
+ if (result.safe && !result.piiFound) {
835
+ output.writeln(output.success('✅ No threats detected'));
836
+ }
837
+ else {
838
+ if (!result.safe && result.threats) {
839
+ output.writeln(output.error(`⚠️ ${result.threats.length} threat(s) detected:`));
840
+ output.writeln();
841
+ for (const threat of result.threats) {
842
+ const severityColor = {
843
+ critical: output.error,
844
+ high: output.warning,
845
+ medium: output.info,
846
+ low: output.dim,
847
+ }[threat.severity] || output.dim;
848
+ output.writeln(` ${severityColor(`[${threat.severity.toUpperCase()}]`)} ${threat.type}`);
849
+ output.writeln(` ${output.dim(threat.description)}`);
850
+ output.writeln(` Confidence: ${(threat.confidence * 100).toFixed(1)}%`);
851
+ output.writeln();
852
+ }
853
+ // Show mitigation recommendations
854
+ const criticalThreats = result.threats.filter(t => t.severity === 'critical');
855
+ if (criticalThreats.length > 0 && enableLearning) {
856
+ output.writeln(output.bold('Recommended Mitigations:'));
857
+ for (const threat of criticalThreats) {
858
+ const mitigation = await defender.getBestMitigation(threat.type);
859
+ if (mitigation) {
860
+ output.writeln(` ${threat.type}: ${output.bold(mitigation.strategy)} (${(mitigation.effectiveness * 100).toFixed(0)}% effective)`);
861
+ }
862
+ }
863
+ output.writeln();
864
+ }
865
+ }
866
+ if (result.piiFound) {
867
+ output.writeln(output.warning('⚠️ PII detected (emails, SSNs, API keys, etc.)'));
868
+ output.writeln();
869
+ }
870
+ }
871
+ output.writeln(output.dim(`Detection time: ${scanTime.toFixed(3)}ms`));
872
+ return { success: result.safe };
873
+ },
874
+ };
875
+ // Redteam subcommand (PyRIT-style adversarial testing)
876
+ // Source: https://github.com/Azure/PyRIT
877
+ const redteamCommand = {
878
+ name: 'redteam',
879
+ description: 'Adversarial red-team testing — prompt injection, jailbreak, and manipulation scenarios (PyRIT-style)',
880
+ options: [
881
+ { name: 'target', short: 't', type: 'string', description: 'Target agent ID or endpoint to test' },
882
+ { name: 'scenarios', short: 's', type: 'string', description: 'Comma-separated attack categories: injection,jailbreak,adversarial,pii,all', default: 'all' },
883
+ { name: 'iterations', short: 'n', type: 'number', description: 'Number of attack iterations per scenario', default: '5' },
884
+ { name: 'dry-run', type: 'boolean', description: 'Print attack prompts without executing them' },
885
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', default: 'text' },
886
+ { name: 'threshold', type: 'number', description: 'Failure threshold 0-1 — report when success rate exceeds this', default: '0.1' },
887
+ ],
888
+ examples: [
889
+ { command: 'monomind security redteam --target my-agent', description: 'Run all red-team scenarios against an agent' },
890
+ { command: 'monomind security redteam --target my-agent --scenarios injection,jailbreak', description: 'Test specific attack categories' },
891
+ { command: 'monomind security redteam --target my-agent --dry-run', description: 'Preview attack prompts without executing' },
892
+ { command: 'monomind security redteam --target my-agent --output json', description: 'JSON output for CI integration' },
893
+ ],
894
+ action: async (ctx) => {
895
+ const target = ctx.flags.target;
896
+ output.writeln();
897
+ output.writeln(output.warning('⚠ Red-team simulation not yet implemented.'));
898
+ output.writeln(output.dim('This command will contact the target agent and evaluate its real responses once implemented.'));
899
+ if (target) {
900
+ output.writeln(output.dim(`Target specified: ${target}`));
901
+ }
902
+ output.writeln();
903
+ output.writeln('To test prompt injection resistance manually:');
904
+ output.writeln(output.dim(' 1. Run the target agent'));
905
+ output.writeln(output.dim(' 2. Send adversarial prompts and evaluate responses'));
906
+ output.writeln(output.dim(' 3. Check agent logs for unexpected tool calls'));
907
+ return { success: false, exitCode: 1 };
908
+ },
909
+ };
910
+ // Main security command
911
+ export const securityCommand = {
912
+ name: 'security',
913
+ description: 'Security scanning, CVE detection, threat modeling, AI defense',
914
+ subcommands: [scanCommand, cveCommand, threatsCommand, auditCommand, secretsCommand, defendCommand, redteamCommand],
915
+ examples: [
916
+ { command: 'monomind security scan', description: 'Run security scan' },
917
+ { command: 'monomind security cve --list', description: 'List known CVEs' },
918
+ { command: 'monomind security threats', description: 'Run threat analysis' },
919
+ ],
920
+ action: async () => {
921
+ output.writeln();
922
+ output.writeln(output.bold('MonoMind Security Suite'));
923
+ output.writeln(output.dim('Comprehensive security scanning and vulnerability management'));
924
+ output.writeln();
925
+ output.writeln('Subcommands:');
926
+ output.printList([
927
+ 'scan - Run security scans on code, deps, containers',
928
+ 'cve - Check and manage CVE vulnerabilities',
929
+ 'threats - Threat modeling (STRIDE, DREAD, PASTA)',
930
+ 'audit - Security audit logging and compliance',
931
+ 'secrets - Detect and manage secrets in codebase',
932
+ 'defend - AI manipulation defense (prompt injection, jailbreaks, PII)',
933
+ 'redteam - Adversarial red-team testing (PyRIT-style attack orchestration)',
934
+ ]);
935
+ output.writeln();
936
+ output.writeln('Use --help with subcommands for more info');
937
+ output.writeln();
938
+ output.writeln(output.dim('github.com/nokhodian/monomind'));
939
+ return { success: true };
940
+ },
941
+ };
942
+ export default securityCommand;
943
+ //# sourceMappingURL=security.js.map