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,849 @@
1
+ /**
2
+ * V1 Collaborative Issue Claims Service
3
+ *
4
+ * Implements ADR-016: Collaborative Issue Claims for Human-Agent Workflows
5
+ *
6
+ * Features:
7
+ * - Issue claiming/releasing for humans and agents
8
+ * - Handoff mechanisms between humans and agents
9
+ * - Work stealing for idle agents
10
+ * - Load balancing across swarm
11
+ * - GitHub integration
12
+ *
13
+ * @see /packages/implementation/adrs/ADR-016-collaborative-issue-claims.md
14
+ */
15
+ import { EventEmitter } from 'events';
16
+ import * as fs from 'fs';
17
+ import * as path from 'path';
18
+ import { execFileSync } from 'child_process';
19
+ // ============================================================================
20
+ // Default Configuration
21
+ // ============================================================================
22
+ const DEFAULT_CONFIG = {
23
+ staleThresholdMinutes: 30,
24
+ blockedThresholdMinutes: 60,
25
+ overloadThreshold: 5,
26
+ gracePeriodMinutes: 10,
27
+ minProgressToProtect: 75,
28
+ contestWindowMinutes: 5,
29
+ requireSameType: false,
30
+ allowCrossTypeSteal: [
31
+ ['coder', 'debugger'],
32
+ ['tester', 'reviewer'],
33
+ ],
34
+ };
35
+ // ============================================================================
36
+ // Claim Service Implementation
37
+ // ============================================================================
38
+ export class ClaimService extends EventEmitter {
39
+ claims = new Map();
40
+ stealableInfo = new Map();
41
+ storagePath;
42
+ config;
43
+ eventLog = [];
44
+ constructor(projectRoot, config) {
45
+ super();
46
+ this.storagePath = path.join(projectRoot, '.monomind', 'claims');
47
+ this.config = { ...DEFAULT_CONFIG, ...config };
48
+ }
49
+ // ==========================================================================
50
+ // Initialization
51
+ // ==========================================================================
52
+ async initialize() {
53
+ // Ensure storage directory exists
54
+ if (!fs.existsSync(this.storagePath)) {
55
+ fs.mkdirSync(this.storagePath, { recursive: true });
56
+ }
57
+ // Load existing claims
58
+ await this.loadClaims();
59
+ }
60
+ async loadClaims() {
61
+ const claimsFile = path.join(this.storagePath, 'claims.json');
62
+ if (fs.existsSync(claimsFile)) {
63
+ try {
64
+ const data = JSON.parse(fs.readFileSync(claimsFile, 'utf-8'));
65
+ for (const claim of data.claims || []) {
66
+ claim.claimedAt = new Date(claim.claimedAt);
67
+ claim.statusChangedAt = new Date(claim.statusChangedAt);
68
+ if (claim.expiresAt)
69
+ claim.expiresAt = new Date(claim.expiresAt);
70
+ this.claims.set(claim.issueId, claim);
71
+ }
72
+ }
73
+ catch {
74
+ // Start fresh if file is corrupted
75
+ }
76
+ }
77
+ }
78
+ // Single-flight save lock: serializes concurrent saveClaims() calls so that
79
+ // two writers cannot collide on the .tmp file or interleave their renames.
80
+ // Combined with the unique tmp suffix below, this defends against in-process
81
+ // corruption of claims.json. Cross-process safety still requires fcntl/flock
82
+ // around the read-modify-write at higher level.
83
+ _saveQueue = Promise.resolve();
84
+ async saveClaims() {
85
+ // CRITICAL: do NOT let a single rejection (ENOSPC / EROFS / EACCES)
86
+ // poison the entire chain. Previously every subsequent saveClaims would
87
+ // inherit the rejection and silently skip _doSaveClaims, causing the
88
+ // in-memory Map to drift from disk indefinitely — a permanent
89
+ // authorization-state desync. Catch the chain link so the next link runs;
90
+ // re-expose the real rejection to the caller via a separate promise.
91
+ const next = this._saveQueue
92
+ .catch(() => undefined)
93
+ .then(() => this._doSaveClaims());
94
+ this._saveQueue = next.catch(() => undefined);
95
+ return next;
96
+ }
97
+ async _doSaveClaims() {
98
+ const claimsFile = path.join(this.storagePath, 'claims.json');
99
+ const data = {
100
+ claims: Array.from(this.claims.values()),
101
+ savedAt: new Date().toISOString(),
102
+ };
103
+ // Unique tmp filename so a previous in-flight write cannot be clobbered
104
+ // by a concurrent fs.writeFileSync truncating the same .tmp path.
105
+ const { randomBytes } = await import('crypto');
106
+ const tmp = `${claimsFile}.${process.pid}.${Date.now()}.${randomBytes(4).toString('hex')}.tmp`;
107
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2));
108
+ fs.renameSync(tmp, claimsFile);
109
+ }
110
+ // ==========================================================================
111
+ // Core Claiming
112
+ // ==========================================================================
113
+ async claim(issueId, claimant) {
114
+ // Check if already claimed
115
+ const existing = this.claims.get(issueId);
116
+ if (existing && existing.status !== 'stealable') {
117
+ return {
118
+ success: false,
119
+ error: `Issue ${issueId} is already claimed by ${this.formatClaimant(existing.claimant)}`,
120
+ };
121
+ }
122
+ const now = new Date();
123
+ const claim = {
124
+ issueId,
125
+ claimant,
126
+ claimedAt: now,
127
+ status: 'active',
128
+ statusChangedAt: now,
129
+ progress: 0,
130
+ };
131
+ this.claims.set(issueId, claim);
132
+ await this.saveClaims();
133
+ this.emitEvent({
134
+ type: 'issue:claimed',
135
+ timestamp: now,
136
+ issueId,
137
+ claimant,
138
+ previousClaimant: existing?.claimant,
139
+ });
140
+ return { success: true, claim };
141
+ }
142
+ async release(issueId, claimant) {
143
+ const claim = this.claims.get(issueId);
144
+ if (!claim) {
145
+ throw new Error(`Issue ${issueId} is not claimed`);
146
+ }
147
+ if (!this.isSameClaimant(claim.claimant, claimant)) {
148
+ throw new Error(`Issue ${issueId} is not claimed by ${this.formatClaimant(claimant)}`);
149
+ }
150
+ this.claims.delete(issueId);
151
+ this.stealableInfo.delete(issueId);
152
+ await this.saveClaims();
153
+ this.emitEvent({
154
+ type: 'issue:released',
155
+ timestamp: new Date(),
156
+ issueId,
157
+ claimant,
158
+ });
159
+ }
160
+ // ==========================================================================
161
+ // Handoffs
162
+ // ==========================================================================
163
+ async requestHandoff(issueId, from, to, reason) {
164
+ const claim = this.claims.get(issueId);
165
+ if (!claim) {
166
+ throw new Error(`Issue ${issueId} is not claimed`);
167
+ }
168
+ if (!this.isSameClaimant(claim.claimant, from)) {
169
+ throw new Error(`Issue ${issueId} is not claimed by ${this.formatClaimant(from)}`);
170
+ }
171
+ claim.status = 'handoff-pending';
172
+ claim.statusChangedAt = new Date();
173
+ claim.handoffTo = to;
174
+ claim.handoffReason = reason;
175
+ await this.saveClaims();
176
+ this.emitEvent({
177
+ type: 'issue:handoff:requested',
178
+ timestamp: new Date(),
179
+ issueId,
180
+ claimant: from,
181
+ data: { to, reason },
182
+ });
183
+ }
184
+ async acceptHandoff(issueId, claimant) {
185
+ const claim = this.claims.get(issueId);
186
+ if (!claim || claim.status !== 'handoff-pending') {
187
+ throw new Error(`No pending handoff for issue ${issueId}`);
188
+ }
189
+ if (!claim.handoffTo || !this.isSameClaimant(claim.handoffTo, claimant)) {
190
+ throw new Error(`Handoff not addressed to ${this.formatClaimant(claimant)}`);
191
+ }
192
+ const previousClaimant = claim.claimant;
193
+ claim.claimant = claimant;
194
+ claim.status = 'active';
195
+ claim.statusChangedAt = new Date();
196
+ delete claim.handoffTo;
197
+ delete claim.handoffReason;
198
+ await this.saveClaims();
199
+ this.emitEvent({
200
+ type: 'issue:handoff:accepted',
201
+ timestamp: new Date(),
202
+ issueId,
203
+ claimant,
204
+ previousClaimant,
205
+ });
206
+ }
207
+ async rejectHandoff(issueId, claimant, reason) {
208
+ const claim = this.claims.get(issueId);
209
+ if (!claim || claim.status !== 'handoff-pending') {
210
+ throw new Error(`No pending handoff for issue ${issueId}`);
211
+ }
212
+ if (!claim.handoffTo || !this.isSameClaimant(claim.handoffTo, claimant)) {
213
+ throw new Error(`Handoff not addressed to ${this.formatClaimant(claimant)}`);
214
+ }
215
+ claim.status = 'active';
216
+ claim.statusChangedAt = new Date();
217
+ delete claim.handoffTo;
218
+ delete claim.handoffReason;
219
+ await this.saveClaims();
220
+ this.emitEvent({
221
+ type: 'issue:handoff:rejected',
222
+ timestamp: new Date(),
223
+ issueId,
224
+ claimant,
225
+ data: { reason },
226
+ });
227
+ }
228
+ // ==========================================================================
229
+ // Status Updates
230
+ // ==========================================================================
231
+ async updateStatus(issueId, status, note) {
232
+ const claim = this.claims.get(issueId);
233
+ if (!claim) {
234
+ throw new Error(`Issue ${issueId} is not claimed`);
235
+ }
236
+ const previousStatus = claim.status;
237
+ claim.status = status;
238
+ claim.statusChangedAt = new Date();
239
+ if (status === 'blocked' && note) {
240
+ claim.blockReason = note;
241
+ }
242
+ if (status === 'completed') {
243
+ claim.progress = 100;
244
+ // Evict completed claims after saving to prevent unbounded Map growth
245
+ await this.saveClaims();
246
+ this.claims.delete(issueId);
247
+ return;
248
+ }
249
+ await this.saveClaims();
250
+ this.emitEvent({
251
+ type: 'issue:status:changed',
252
+ timestamp: new Date(),
253
+ issueId,
254
+ data: { previousStatus, newStatus: status, note },
255
+ });
256
+ }
257
+ async updateProgress(issueId, progress) {
258
+ const claim = this.claims.get(issueId);
259
+ if (!claim) {
260
+ throw new Error(`Issue ${issueId} is not claimed`);
261
+ }
262
+ claim.progress = Math.min(100, Math.max(0, progress));
263
+ await this.saveClaims();
264
+ }
265
+ async requestReview(issueId, reviewers) {
266
+ const claim = this.claims.get(issueId);
267
+ if (!claim) {
268
+ throw new Error(`Issue ${issueId} is not claimed`);
269
+ }
270
+ claim.status = 'review-requested';
271
+ claim.statusChangedAt = new Date();
272
+ await this.saveClaims();
273
+ this.emitEvent({
274
+ type: 'issue:review:requested',
275
+ timestamp: new Date(),
276
+ issueId,
277
+ claimant: claim.claimant,
278
+ data: { reviewers },
279
+ });
280
+ }
281
+ // ==========================================================================
282
+ // Work Stealing
283
+ // ==========================================================================
284
+ async markStealable(issueId, info, claimant) {
285
+ const claim = this.claims.get(issueId);
286
+ if (!claim) {
287
+ throw new Error(`Issue ${issueId} is not claimed`);
288
+ }
289
+ if (claimant !== undefined && !this.isSameClaimant(claim.claimant, claimant)) {
290
+ throw new Error(`Issue ${issueId} is not owned by ${this.formatClaimant(claimant)}`);
291
+ }
292
+ claim.status = 'stealable';
293
+ claim.statusChangedAt = new Date();
294
+ claim.context = info.context;
295
+ claim.progress = info.progress;
296
+ this.stealableInfo.set(issueId, info);
297
+ await this.saveClaims();
298
+ this.emitEvent({
299
+ type: 'issue:stealable',
300
+ timestamp: new Date(),
301
+ issueId,
302
+ claimant: claim.claimant,
303
+ data: { info },
304
+ });
305
+ }
306
+ async steal(issueId, stealer) {
307
+ const claim = this.claims.get(issueId);
308
+ if (!claim) {
309
+ return { success: false, error: `Issue ${issueId} is not claimed` };
310
+ }
311
+ if (claim.status !== 'stealable') {
312
+ return { success: false, error: `Issue ${issueId} is not stealable` };
313
+ }
314
+ const info = this.stealableInfo.get(issueId);
315
+ const previousOwner = claim.claimant;
316
+ // Check if steal is allowed
317
+ if (this.config.requireSameType && stealer.type === 'agent' && previousOwner.type === 'agent') {
318
+ if (stealer.agentType !== previousOwner.agentType) {
319
+ const allowed = this.config.allowCrossTypeSteal.some(pair => pair.includes(stealer.agentType) && pair.includes(previousOwner.agentType));
320
+ if (!allowed) {
321
+ return { success: false, error: `Cross-type steal not allowed` };
322
+ }
323
+ }
324
+ }
325
+ // Execute steal
326
+ claim.claimant = stealer;
327
+ claim.status = 'active';
328
+ claim.statusChangedAt = new Date();
329
+ claim.claimedAt = new Date();
330
+ this.stealableInfo.delete(issueId);
331
+ await this.saveClaims();
332
+ this.emitEvent({
333
+ type: 'issue:stolen',
334
+ timestamp: new Date(),
335
+ issueId,
336
+ claimant: stealer,
337
+ previousClaimant: previousOwner,
338
+ data: { context: info },
339
+ });
340
+ return { success: true, claim, previousOwner, context: info };
341
+ }
342
+ async getStealable(agentType) {
343
+ const stealable = [];
344
+ for (const claim of this.claims.values()) {
345
+ if (claim.status !== 'stealable')
346
+ continue;
347
+ const info = this.stealableInfo.get(claim.issueId);
348
+ if (agentType && info?.preferredTypes?.length) {
349
+ if (!info.preferredTypes.includes(agentType))
350
+ continue;
351
+ }
352
+ stealable.push(claim);
353
+ }
354
+ return stealable;
355
+ }
356
+ async contestSteal(issueId, originalClaimant, reason) {
357
+ const claim = this.claims.get(issueId);
358
+ if (!claim) {
359
+ throw new Error(`Issue ${issueId} is not claimed`);
360
+ }
361
+ this.emitEvent({
362
+ type: 'issue:steal:contested',
363
+ timestamp: new Date(),
364
+ issueId,
365
+ claimant: originalClaimant,
366
+ data: { reason, currentOwner: claim.claimant },
367
+ });
368
+ // Contest resolution would typically be handled by a coordinator or human
369
+ }
370
+ // ==========================================================================
371
+ // Load Balancing
372
+ // ==========================================================================
373
+ async getAgentLoad(agentId) {
374
+ const claims = [];
375
+ let blockedCount = 0;
376
+ for (const claim of this.claims.values()) {
377
+ if (claim.claimant.type === 'agent' && claim.claimant.agentId === agentId) {
378
+ claims.push(claim);
379
+ if (claim.status === 'blocked')
380
+ blockedCount++;
381
+ }
382
+ }
383
+ const agentType = claims[0]?.claimant.type === 'agent' ? claims[0].claimant.agentType : 'unknown';
384
+ return {
385
+ agentId,
386
+ agentType,
387
+ claimCount: claims.length,
388
+ maxClaims: this.config.overloadThreshold,
389
+ utilization: claims.length / this.config.overloadThreshold,
390
+ claims,
391
+ avgCompletionTime: 0, // Would need historical data
392
+ currentBlockedCount: blockedCount,
393
+ };
394
+ }
395
+ async rebalance(swarmId) {
396
+ const result = { moved: [], suggested: [] };
397
+ // Get all agent loads
398
+ const agentLoads = new Map();
399
+ const agentTypes = new Set();
400
+ for (const claim of this.claims.values()) {
401
+ if (claim.claimant.type !== 'agent')
402
+ continue;
403
+ const agentId = claim.claimant.agentId;
404
+ if (!agentLoads.has(agentId)) {
405
+ const load = await this.getAgentLoad(agentId);
406
+ agentLoads.set(agentId, load);
407
+ agentTypes.add(load.agentType);
408
+ }
409
+ }
410
+ // For each agent type, calculate average load
411
+ for (const agentType of agentTypes) {
412
+ const typeLoads = Array.from(agentLoads.values()).filter(l => l.agentType === agentType);
413
+ const avgLoad = typeLoads.reduce((sum, l) => sum + l.utilization, 0) / typeLoads.length;
414
+ const overloaded = typeLoads.filter(l => l.utilization > avgLoad * 1.5);
415
+ const underloaded = typeLoads.filter(l => l.utilization < avgLoad * 0.5);
416
+ // Generate suggestions
417
+ for (const over of overloaded) {
418
+ const lowProgressClaims = over.claims
419
+ .filter(c => c.progress < 25)
420
+ .sort((a, b) => a.progress - b.progress);
421
+ for (const claim of lowProgressClaims) {
422
+ const target = underloaded.find(u => u.claimCount < u.maxClaims);
423
+ if (target) {
424
+ result.suggested.push({
425
+ issueId: claim.issueId,
426
+ currentOwner: claim.claimant,
427
+ suggestedOwner: {
428
+ type: 'agent',
429
+ agentId: target.agentId,
430
+ agentType: target.agentType,
431
+ },
432
+ reason: 'Load balancing: redistributing work across swarm',
433
+ });
434
+ }
435
+ }
436
+ }
437
+ }
438
+ return result;
439
+ }
440
+ // ==========================================================================
441
+ // Queries
442
+ // ==========================================================================
443
+ async getClaimedBy(claimant) {
444
+ return Array.from(this.claims.values()).filter(c => this.isSameClaimant(c.claimant, claimant));
445
+ }
446
+ async getAvailableIssues(_filters) {
447
+ // This would integrate with GitHub API
448
+ // For now, return issues that are not claimed
449
+ return [];
450
+ }
451
+ async getIssueStatus(issueId) {
452
+ return this.claims.get(issueId) || null;
453
+ }
454
+ async getAllClaims() {
455
+ return Array.from(this.claims.values());
456
+ }
457
+ async getByStatus(status) {
458
+ return Array.from(this.claims.values()).filter(c => c.status === status);
459
+ }
460
+ // ==========================================================================
461
+ // Auto-Management
462
+ // ==========================================================================
463
+ async expireStale(maxAgeMinutes) {
464
+ const threshold = maxAgeMinutes ?? this.config.staleThresholdMinutes;
465
+ const now = Date.now();
466
+ const expired = [];
467
+ for (const claim of this.claims.values()) {
468
+ if (claim.status === 'stealable' || claim.status === 'completed')
469
+ continue;
470
+ const age = (now - claim.statusChangedAt.getTime()) / 60000;
471
+ if (age > threshold) {
472
+ // Mark as stealable
473
+ await this.markStealable(claim.issueId, {
474
+ reason: 'stale',
475
+ stealableAt: new Date(),
476
+ progress: claim.progress,
477
+ context: `Stale: No activity for ${Math.round(age)} minutes`,
478
+ });
479
+ expired.push(claim);
480
+ }
481
+ }
482
+ return expired;
483
+ }
484
+ // ==========================================================================
485
+ // Helpers
486
+ // ==========================================================================
487
+ formatClaimant(claimant) {
488
+ return claimant.type === 'human'
489
+ ? `human:${claimant.name}`
490
+ : `agent:${claimant.agentType}:${claimant.agentId}`;
491
+ }
492
+ isSameClaimant(a, b) {
493
+ if (a.type !== b.type)
494
+ return false;
495
+ if (a.type === 'human' && b.type === 'human') {
496
+ return a.userId === b.userId;
497
+ }
498
+ if (a.type === 'agent' && b.type === 'agent') {
499
+ return a.agentId === b.agentId;
500
+ }
501
+ return false;
502
+ }
503
+ emitEvent(event) {
504
+ this.eventLog.push(event);
505
+ if (this.eventLog.length > 1000) {
506
+ this.eventLog = this.eventLog.slice(-500);
507
+ }
508
+ this.emit(event.type, event);
509
+ }
510
+ getEventLog(limit = 100) {
511
+ return this.eventLog.slice(-limit);
512
+ }
513
+ }
514
+ // ============================================================================
515
+ // GitHub Sync Implementation
516
+ // ============================================================================
517
+ const DEFAULT_GITHUB_CONFIG = {
518
+ enabled: false,
519
+ syncLabels: true,
520
+ claimLabel: 'claimed',
521
+ autoAssign: true,
522
+ commentOnClaim: true,
523
+ commentOnRelease: true,
524
+ };
525
+ // ============================================================================
526
+ // Input Validation (Security)
527
+ // ============================================================================
528
+ /**
529
+ * Validate GitHub repository format (owner/repo)
530
+ * Prevents command injection via malicious repo names
531
+ */
532
+ function isValidRepo(repo) {
533
+ // owner/repo format: alphanumeric, hyphens, underscores, dots
534
+ return /^[\w.-]+\/[\w.-]+$/.test(repo) && repo.length <= 100;
535
+ }
536
+ /**
537
+ * Validate issue number (positive integer)
538
+ */
539
+ function isValidIssueNumber(num) {
540
+ return Number.isInteger(num) && num > 0 && num < 1000000000;
541
+ }
542
+ /**
543
+ * Validate claimant name (GitHub username format)
544
+ * Prevents command injection via malicious usernames
545
+ */
546
+ function isValidClaimantName(name) {
547
+ // GitHub usernames: alphanumeric, hyphens, max 39 chars
548
+ return /^[\w-]+$/.test(name) && name.length >= 1 && name.length <= 39;
549
+ }
550
+ /**
551
+ * Validate label name
552
+ * Prevents command injection via malicious label names
553
+ */
554
+ function isValidLabel(label) {
555
+ // Labels: alphanumeric, hyphens, underscores, spaces, max 50 chars
556
+ return /^[\w\s-]+$/.test(label) && label.length >= 1 && label.length <= 50;
557
+ }
558
+ /**
559
+ * Sanitize error messages to prevent information disclosure
560
+ */
561
+ function sanitizeError(error) {
562
+ const msg = error.message || 'Unknown error';
563
+ // Remove paths and sensitive details
564
+ return msg.replace(/\/[\w./-]+/g, '[path]').substring(0, 200);
565
+ }
566
+ export class GitHubSync {
567
+ config;
568
+ claimService;
569
+ constructor(claimService, config) {
570
+ this.claimService = claimService;
571
+ this.config = { ...DEFAULT_GITHUB_CONFIG, ...config };
572
+ }
573
+ /**
574
+ * Check if GitHub CLI is available
575
+ */
576
+ isGhAvailable() {
577
+ try {
578
+ execFileSync('gh', ['--version'], { stdio: 'ignore' });
579
+ return true;
580
+ }
581
+ catch {
582
+ return false;
583
+ }
584
+ }
585
+ /**
586
+ * Get the current repository from git remote
587
+ */
588
+ getRepo() {
589
+ if (this.config.repo) {
590
+ return isValidRepo(this.config.repo) ? this.config.repo : null;
591
+ }
592
+ try {
593
+ const remote = execFileSync('git', ['remote', 'get-url', 'origin'], { encoding: 'utf-8' }).trim();
594
+ const match = remote.match(/github\.com[/:]([\w.-]+\/[\w.-]+)/);
595
+ const repo = match ? match[1].replace('.git', '') : null;
596
+ return repo && isValidRepo(repo) ? repo : null;
597
+ }
598
+ catch {
599
+ return null;
600
+ }
601
+ }
602
+ /**
603
+ * Sync issues from GitHub
604
+ */
605
+ async syncIssues(state = 'open') {
606
+ const errors = [];
607
+ const issues = [];
608
+ if (!this.isGhAvailable()) {
609
+ return { success: false, synced: 0, errors: ['GitHub CLI (gh) not installed'] };
610
+ }
611
+ const repo = this.getRepo();
612
+ if (!repo) {
613
+ return { success: false, synced: 0, errors: ['Could not determine GitHub repository'] };
614
+ }
615
+ // Validate state parameter (whitelist)
616
+ const validStates = ['open', 'closed', 'all'];
617
+ if (!validStates.includes(state)) {
618
+ return { success: false, synced: 0, errors: ['Invalid state parameter'] };
619
+ }
620
+ try {
621
+ const issuesJson = execFileSync('gh', [
622
+ 'issue', 'list',
623
+ '--repo', repo,
624
+ '--state', state,
625
+ '--json', 'number,title,body,state,labels,assignees,url,createdAt,updatedAt',
626
+ '--limit', '100'
627
+ ], { encoding: 'utf-8' });
628
+ const rawIssues = JSON.parse(issuesJson);
629
+ for (const raw of rawIssues) {
630
+ issues.push({
631
+ number: raw.number,
632
+ title: raw.title,
633
+ body: raw.body || '',
634
+ state: raw.state === 'OPEN' ? 'open' : 'closed',
635
+ labels: raw.labels?.map((l) => l.name) || [],
636
+ assignees: raw.assignees?.map((a) => a.login) || [],
637
+ url: raw.url,
638
+ createdAt: new Date(raw.createdAt),
639
+ updatedAt: new Date(raw.updatedAt),
640
+ });
641
+ }
642
+ return { success: true, synced: issues.length, errors, issues };
643
+ }
644
+ catch (error) {
645
+ errors.push(`Failed to fetch issues: ${sanitizeError(error)}`);
646
+ return { success: false, synced: 0, errors };
647
+ }
648
+ }
649
+ /**
650
+ * Sync a local claim to GitHub (add label/assignee/comment)
651
+ */
652
+ async claimOnGitHub(issueNumber, claimant) {
653
+ const errors = [];
654
+ if (!this.config.enabled) {
655
+ return { success: true, synced: 0, errors: ['GitHub sync not enabled'] };
656
+ }
657
+ if (!this.isGhAvailable()) {
658
+ return { success: false, synced: 0, errors: ['GitHub CLI (gh) not installed'] };
659
+ }
660
+ // Validate issue number
661
+ if (!isValidIssueNumber(issueNumber)) {
662
+ return { success: false, synced: 0, errors: ['Invalid issue number'] };
663
+ }
664
+ const repo = this.getRepo();
665
+ if (!repo) {
666
+ return { success: false, synced: 0, errors: ['Could not determine repository'] };
667
+ }
668
+ // Validate claim label
669
+ if (!isValidLabel(this.config.claimLabel)) {
670
+ return { success: false, synced: 0, errors: ['Invalid claim label configuration'] };
671
+ }
672
+ try {
673
+ // Add claim label
674
+ if (this.config.syncLabels) {
675
+ try {
676
+ execFileSync('gh', [
677
+ 'issue', 'edit', String(issueNumber),
678
+ '--repo', repo,
679
+ '--add-label', this.config.claimLabel
680
+ ], { stdio: 'ignore' });
681
+ }
682
+ catch {
683
+ errors.push('Failed to add claim label (label may not exist)');
684
+ }
685
+ }
686
+ // Auto-assign if human claimant
687
+ if (this.config.autoAssign && claimant.type === 'human') {
688
+ if (!isValidClaimantName(claimant.name)) {
689
+ errors.push('Invalid claimant name format');
690
+ }
691
+ else {
692
+ try {
693
+ execFileSync('gh', [
694
+ 'issue', 'edit', String(issueNumber),
695
+ '--repo', repo,
696
+ '--add-assignee', claimant.name
697
+ ], { stdio: 'ignore' });
698
+ }
699
+ catch {
700
+ errors.push('Failed to assign issue');
701
+ }
702
+ }
703
+ }
704
+ // Add comment
705
+ if (this.config.commentOnClaim) {
706
+ const claimantStr = claimant.type === 'human'
707
+ ? `@${claimant.name.replace(/[^a-zA-Z0-9_-]/g, '')}`
708
+ : `Agent: ${(claimant.agentType || 'unknown').replace(/[^a-zA-Z0-9_-]/g, '')}`;
709
+ const comment = `🤖 **Issue claimed** by ${claimantStr}\n\n_Coordinated by Monomind_`;
710
+ try {
711
+ execFileSync('gh', [
712
+ 'issue', 'comment', String(issueNumber),
713
+ '--repo', repo,
714
+ '--body', comment
715
+ ], { stdio: 'ignore' });
716
+ }
717
+ catch {
718
+ errors.push('Failed to add comment');
719
+ }
720
+ }
721
+ return { success: errors.length === 0, synced: 1, errors };
722
+ }
723
+ catch (error) {
724
+ errors.push(`GitHub sync failed: ${sanitizeError(error)}`);
725
+ return { success: false, synced: 0, errors };
726
+ }
727
+ }
728
+ /**
729
+ * Release claim on GitHub (remove label/assignee/comment)
730
+ */
731
+ async releaseOnGitHub(issueNumber, claimant) {
732
+ const errors = [];
733
+ if (!this.config.enabled) {
734
+ return { success: true, synced: 0, errors: ['GitHub sync not enabled'] };
735
+ }
736
+ if (!this.isGhAvailable()) {
737
+ return { success: false, synced: 0, errors: ['GitHub CLI (gh) not installed'] };
738
+ }
739
+ // Validate issue number
740
+ if (!isValidIssueNumber(issueNumber)) {
741
+ return { success: false, synced: 0, errors: ['Invalid issue number'] };
742
+ }
743
+ const repo = this.getRepo();
744
+ if (!repo) {
745
+ return { success: false, synced: 0, errors: ['Could not determine repository'] };
746
+ }
747
+ // Validate claim label
748
+ if (!isValidLabel(this.config.claimLabel)) {
749
+ return { success: false, synced: 0, errors: ['Invalid claim label configuration'] };
750
+ }
751
+ try {
752
+ // Remove claim label
753
+ if (this.config.syncLabels) {
754
+ try {
755
+ execFileSync('gh', [
756
+ 'issue', 'edit', String(issueNumber),
757
+ '--repo', repo,
758
+ '--remove-label', this.config.claimLabel
759
+ ], { stdio: 'ignore' });
760
+ }
761
+ catch {
762
+ // Label might not exist
763
+ }
764
+ }
765
+ // Remove assignee if human claimant
766
+ if (this.config.autoAssign && claimant.type === 'human') {
767
+ if (isValidClaimantName(claimant.name)) {
768
+ try {
769
+ execFileSync('gh', [
770
+ 'issue', 'edit', String(issueNumber),
771
+ '--repo', repo,
772
+ '--remove-assignee', claimant.name
773
+ ], { stdio: 'ignore' });
774
+ }
775
+ catch {
776
+ errors.push('Failed to remove assignee');
777
+ }
778
+ }
779
+ }
780
+ // Add release comment
781
+ if (this.config.commentOnRelease) {
782
+ const claimantStr = claimant.type === 'human'
783
+ ? `@${claimant.name.replace(/[^a-zA-Z0-9_-]/g, '')}`
784
+ : `Agent: ${(claimant.agentType || 'unknown').replace(/[^a-zA-Z0-9_-]/g, '')}`;
785
+ const comment = `🔓 **Issue released** by ${claimantStr}\n\n_This issue is now available for others to claim._`;
786
+ try {
787
+ execFileSync('gh', [
788
+ 'issue', 'comment', String(issueNumber),
789
+ '--repo', repo,
790
+ '--body', comment
791
+ ], { stdio: 'ignore' });
792
+ }
793
+ catch {
794
+ errors.push('Failed to add release comment');
795
+ }
796
+ }
797
+ return { success: errors.length === 0, synced: 1, errors };
798
+ }
799
+ catch (error) {
800
+ errors.push(`GitHub release sync failed: ${sanitizeError(error)}`);
801
+ return { success: false, synced: 0, errors };
802
+ }
803
+ }
804
+ /**
805
+ * Bulk sync all local claims to GitHub
806
+ */
807
+ async syncAllClaimsToGitHub() {
808
+ const errors = [];
809
+ let synced = 0;
810
+ const claims = await this.claimService.getAllClaims();
811
+ for (const claim of claims) {
812
+ // Extract issue number from issueId (assumes format like "123" or "issue-123")
813
+ const issueMatch = claim.issueId.match(/(\d+)/);
814
+ if (issueMatch) {
815
+ const result = await this.claimOnGitHub(parseInt(issueMatch[1], 10), claim.claimant);
816
+ if (result.success)
817
+ synced++;
818
+ else
819
+ errors.push(...result.errors);
820
+ }
821
+ }
822
+ return { success: errors.length === 0, synced, errors };
823
+ }
824
+ /**
825
+ * Get GitHub issues that are claimed locally
826
+ */
827
+ async getClaimedGitHubIssues() {
828
+ const syncResult = await this.syncIssues('open');
829
+ if (!syncResult.success || !syncResult.issues)
830
+ return [];
831
+ const localClaims = await this.claimService.getAllClaims();
832
+ const claimedIds = new Set(localClaims.map(c => {
833
+ const match = c.issueId.match(/(\d+)/);
834
+ return match ? parseInt(match[1], 10) : null;
835
+ }).filter(Boolean));
836
+ return syncResult.issues.filter(issue => claimedIds.has(issue.number));
837
+ }
838
+ }
839
+ // ============================================================================
840
+ // Factory
841
+ // ============================================================================
842
+ export function createClaimService(projectRoot, config) {
843
+ return new ClaimService(projectRoot, config);
844
+ }
845
+ export function createGitHubSync(claimService, config) {
846
+ return new GitHubSync(claimService, config);
847
+ }
848
+ export default ClaimService;
849
+ //# sourceMappingURL=claim-service.js.map