@monoes/monomindcli 2.9.21 → 2.9.23

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 (505) hide show
  1. package/.claude/agents/consensus/quorum-manager.md +35 -54
  2. package/.claude/agents/core/coordinator.md +14 -18
  3. package/.claude/agents/core/researcher.md +1 -1
  4. package/.claude/agents/github/issue-tracker.md +3 -3
  5. package/.claude/agents/github/{code-review-swarm.md → monoswarm-code-review.md} +1 -1
  6. package/.claude/agents/github/{swarm-issue.md → monoswarm-issue.md} +1 -1
  7. package/.claude/agents/github/{multi-repo-swarm.md → monoswarm-multi-repo.md} +1 -1
  8. package/.claude/agents/github/{swarm-pr.md → monoswarm-pr.md} +1 -1
  9. package/.claude/agents/github/pr-manager.md +1 -1
  10. package/.claude/agents/github/release-manager.md +1 -1
  11. package/.claude/agents/github/repo-architect.md +1 -1
  12. package/.claude/agents/github/sync-coordinator.md +4 -4
  13. package/.claude/agents/{hive-mind → monoswarm}/collective-intelligence-coordinator.md +9 -16
  14. package/.claude/agents/{swarm → monoswarm}/mesh-coordinator.md +19 -24
  15. package/.claude/agents/{hive-mind/swarm-memory-manager.md → monoswarm/monoswarm-memory-manager.md} +1 -1
  16. package/.claude/agents/templates/{coordinator-swarm-init.md → coordinator-monoswarm-init.md} +1 -1
  17. package/.claude/agents/testing/{tdd-london-swarm.md → tdd-london-monoswarm.md} +2 -2
  18. package/.claude/commands/agents/agent-coordination.md +3 -3
  19. package/.claude/commands/agents/agent-types.md +1 -1
  20. package/.claude/commands/automation/self-healing.md +1 -1
  21. package/.claude/commands/automation/smart-spawn.md +1 -1
  22. package/.claude/commands/coordination/README.md +1 -1
  23. package/.claude/commands/coordination/{swarm-init.md → monoswarm-init.md} +2 -2
  24. package/.claude/commands/coordination/task-orchestrate.md +4 -4
  25. package/.claude/commands/github/README.md +1 -1
  26. package/.claude/commands/github/issue-tracker.md +2 -2
  27. package/.claude/commands/github/pr-manager.md +1 -1
  28. package/.claude/commands/github/release-manager.md +1 -1
  29. package/.claude/commands/github/repo-architect.md +1 -1
  30. package/.claude/commands/github/sync-coordinator.md +2 -2
  31. package/.claude/commands/hooks/README.md +1 -2
  32. package/.claude/commands/hooks/overview.md +1 -2
  33. package/.claude/commands/hooks/setup.md +0 -3
  34. package/.claude/commands/mastermind/createtask.md +2 -2
  35. package/.claude/commands/mastermind/do.md +3 -3
  36. package/.claude/commands/mastermind/help.md +2 -2
  37. package/.claude/commands/mastermind/ideate.md +1 -1
  38. package/.claude/commands/mastermind/improve.md +1 -1
  39. package/.claude/commands/mastermind/memory.md +2 -2
  40. package/.claude/commands/mastermind/{swarm.md → monoswarm.md} +13 -26
  41. package/.claude/commands/mastermind/topology.md +1 -1
  42. package/.claude/commands/memory/README.md +2 -2
  43. package/.claude/commands/memory/memory-search.md +1 -1
  44. package/.claude/commands/monoswarm/README.md +59 -0
  45. package/.claude/commands/monoswarm/consensus.md +61 -0
  46. package/.claude/commands/monoswarm/init.md +68 -0
  47. package/.claude/commands/monoswarm/memory.md +55 -0
  48. package/.claude/commands/monoswarm/monoswarm.md +139 -0
  49. package/.claude/commands/{swarm → monoswarm}/research.md +2 -2
  50. package/.claude/commands/monoswarm/spawn.md +49 -0
  51. package/.claude/commands/monoswarm/status.md +48 -0
  52. package/.claude/commands/monoswarm/stop.md +46 -0
  53. package/.claude/commands/optimization/auto-topology.md +9 -9
  54. package/.claude/commands/stream-chain/run.md +1 -1
  55. package/.claude/commands/workflows/development.md +1 -1
  56. package/.claude/commands/workflows/research.md +2 -2
  57. package/.claude/helpers/audit-log-writer.cjs +72 -0
  58. package/.claude/helpers/control-start.cjs +84 -26
  59. package/.claude/helpers/handlers/agent-start-handler.cjs +5 -5
  60. package/.claude/helpers/handlers/gates-handler.cjs +31 -10
  61. package/.claude/helpers/handlers/session-restore-handler.cjs +1 -1
  62. package/.claude/helpers/handlers/task-handler.cjs +4 -4
  63. package/.claude/helpers/skill-registry.json +4718 -3669
  64. package/.claude/helpers/statusline.cjs +21 -21
  65. package/.claude/helpers/token-tracker.cjs +0 -6
  66. package/.claude/settings.json +2 -3
  67. package/.claude/skills/hooks-automation/SKILL.md +5 -5
  68. package/.claude/skills/mastermind-createorg/SKILL.md +26 -3
  69. package/.claude/skills/mastermind-protocol/SKILL.md +3 -3
  70. package/.claude/skills/memory-toolkit/SKILL.md +2 -2
  71. package/.claude/skills/{swarm-orchestration → monoswarm}/SKILL.md +106 -42
  72. package/.claude/skills/specialagent/SKILL.md +1 -1
  73. package/README.md +31 -12
  74. package/dist/src/autopilot-state.d.ts +0 -16
  75. package/dist/src/autopilot-state.d.ts.map +1 -1
  76. package/dist/src/autopilot-state.js +0 -15
  77. package/dist/src/autopilot-state.js.map +1 -1
  78. package/dist/src/browser/dashboard/server.js +3 -3
  79. package/dist/src/browser/dashboard/server.js.map +1 -1
  80. package/dist/src/browser/dashboard/ui.html +2 -2
  81. package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
  82. package/dist/src/capabilities/cap-documents.js +49 -38
  83. package/dist/src/capabilities/cap-documents.js.map +1 -1
  84. package/dist/src/commands/agent-lifecycle.d.ts.map +1 -1
  85. package/dist/src/commands/agent-lifecycle.js +4 -9
  86. package/dist/src/commands/agent-lifecycle.js.map +1 -1
  87. package/dist/src/commands/agent-ops.d.ts.map +1 -1
  88. package/dist/src/commands/agent-ops.js +37 -24
  89. package/dist/src/commands/agent-ops.js.map +1 -1
  90. package/dist/src/commands/analyze-ast.d.ts +1 -1
  91. package/dist/src/commands/analyze-ast.d.ts.map +1 -1
  92. package/dist/src/commands/analyze-ast.js +8 -27
  93. package/dist/src/commands/analyze-ast.js.map +1 -1
  94. package/dist/src/commands/analyze-imports.d.ts.map +1 -1
  95. package/dist/src/commands/analyze-imports.js +18 -17
  96. package/dist/src/commands/analyze-imports.js.map +1 -1
  97. package/dist/src/commands/analyze-symbols.d.ts.map +1 -1
  98. package/dist/src/commands/analyze-symbols.js +10 -24
  99. package/dist/src/commands/analyze-symbols.js.map +1 -1
  100. package/dist/src/commands/analyze.d.ts +19 -6
  101. package/dist/src/commands/analyze.d.ts.map +1 -1
  102. package/dist/src/commands/analyze.js +61 -15
  103. package/dist/src/commands/analyze.js.map +1 -1
  104. package/dist/src/commands/autopilot.d.ts.map +1 -1
  105. package/dist/src/commands/autopilot.js +4 -89
  106. package/dist/src/commands/autopilot.js.map +1 -1
  107. package/dist/src/commands/browse.d.ts +1 -1
  108. package/dist/src/commands/cleanup.d.ts.map +1 -1
  109. package/dist/src/commands/cleanup.js +4 -2
  110. package/dist/src/commands/cleanup.js.map +1 -1
  111. package/dist/src/commands/completions.d.ts.map +1 -1
  112. package/dist/src/commands/completions.js +0 -1
  113. package/dist/src/commands/completions.js.map +1 -1
  114. package/dist/src/commands/config.js +7 -7
  115. package/dist/src/commands/config.js.map +1 -1
  116. package/dist/src/commands/doctor-project-checks.d.ts +7 -0
  117. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  118. package/dist/src/commands/doctor-project-checks.js +37 -5
  119. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  120. package/dist/src/commands/doctor.d.ts.map +1 -1
  121. package/dist/src/commands/doctor.js +9 -3
  122. package/dist/src/commands/doctor.js.map +1 -1
  123. package/dist/src/commands/events.d.ts +9 -0
  124. package/dist/src/commands/events.d.ts.map +1 -0
  125. package/dist/src/commands/events.js +89 -0
  126. package/dist/src/commands/events.js.map +1 -0
  127. package/dist/src/commands/hooks-routing-commands.d.ts +1 -2
  128. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -1
  129. package/dist/src/commands/hooks-routing-commands.js +1 -101
  130. package/dist/src/commands/hooks-routing-commands.js.map +1 -1
  131. package/dist/src/commands/hooks-workers.d.ts.map +1 -1
  132. package/dist/src/commands/hooks-workers.js +19 -71
  133. package/dist/src/commands/hooks-workers.js.map +1 -1
  134. package/dist/src/commands/hooks.d.ts +1 -1
  135. package/dist/src/commands/hooks.d.ts.map +1 -1
  136. package/dist/src/commands/hooks.js +4 -7
  137. package/dist/src/commands/hooks.js.map +1 -1
  138. package/dist/src/commands/index.d.ts +2 -2
  139. package/dist/src/commands/index.d.ts.map +1 -1
  140. package/dist/src/commands/index.js +4 -3
  141. package/dist/src/commands/index.js.map +1 -1
  142. package/dist/src/commands/init-subcommands.d.ts.map +1 -1
  143. package/dist/src/commands/init-subcommands.js +4 -0
  144. package/dist/src/commands/init-subcommands.js.map +1 -1
  145. package/dist/src/commands/init-wizard.d.ts.map +1 -1
  146. package/dist/src/commands/init-wizard.js +0 -8
  147. package/dist/src/commands/init-wizard.js.map +1 -1
  148. package/dist/src/commands/init.d.ts.map +1 -1
  149. package/dist/src/commands/init.js +53 -23
  150. package/dist/src/commands/init.js.map +1 -1
  151. package/dist/src/commands/mcp.d.ts +1 -0
  152. package/dist/src/commands/mcp.d.ts.map +1 -1
  153. package/dist/src/commands/mcp.js +111 -60
  154. package/dist/src/commands/mcp.js.map +1 -1
  155. package/dist/src/commands/memory-crud.d.ts.map +1 -1
  156. package/dist/src/commands/memory-crud.js +33 -20
  157. package/dist/src/commands/memory-crud.js.map +1 -1
  158. package/dist/src/commands/monoswarm.d.ts +8 -0
  159. package/dist/src/commands/monoswarm.d.ts.map +1 -0
  160. package/dist/src/commands/{swarm.js → monoswarm.js} +83 -297
  161. package/dist/src/commands/monoswarm.js.map +1 -0
  162. package/dist/src/commands/neural-core.d.ts.map +1 -1
  163. package/dist/src/commands/neural-core.js +9 -1
  164. package/dist/src/commands/neural-core.js.map +1 -1
  165. package/dist/src/commands/neural-optimize.d.ts.map +1 -1
  166. package/dist/src/commands/neural-optimize.js +30 -110
  167. package/dist/src/commands/neural-optimize.js.map +1 -1
  168. package/dist/src/commands/neural-registry.d.ts +1 -2
  169. package/dist/src/commands/neural-registry.d.ts.map +1 -1
  170. package/dist/src/commands/neural-registry.js +21 -168
  171. package/dist/src/commands/neural-registry.js.map +1 -1
  172. package/dist/src/commands/org-observe.d.ts +34 -3
  173. package/dist/src/commands/org-observe.d.ts.map +1 -1
  174. package/dist/src/commands/org-observe.js +213 -45
  175. package/dist/src/commands/org-observe.js.map +1 -1
  176. package/dist/src/commands/org.d.ts +14 -0
  177. package/dist/src/commands/org.d.ts.map +1 -1
  178. package/dist/src/commands/org.js +118 -20
  179. package/dist/src/commands/org.js.map +1 -1
  180. package/dist/src/commands/performance.d.ts.map +1 -1
  181. package/dist/src/commands/performance.js +38 -31
  182. package/dist/src/commands/performance.js.map +1 -1
  183. package/dist/src/commands/security-misc.d.ts.map +1 -1
  184. package/dist/src/commands/security-misc.js +220 -90
  185. package/dist/src/commands/security-misc.js.map +1 -1
  186. package/dist/src/commands/security-scan.d.ts +13 -0
  187. package/dist/src/commands/security-scan.d.ts.map +1 -1
  188. package/dist/src/commands/security-scan.js +96 -27
  189. package/dist/src/commands/security-scan.js.map +1 -1
  190. package/dist/src/commands/security.js +1 -1
  191. package/dist/src/commands/security.js.map +1 -1
  192. package/dist/src/commands/start.d.ts.map +1 -1
  193. package/dist/src/commands/start.js +17 -96
  194. package/dist/src/commands/start.js.map +1 -1
  195. package/dist/src/commands/status.d.ts.map +1 -1
  196. package/dist/src/commands/status.js +72 -64
  197. package/dist/src/commands/status.js.map +1 -1
  198. package/dist/src/commands/tokens.d.ts.map +1 -1
  199. package/dist/src/commands/tokens.js +4 -5
  200. package/dist/src/commands/tokens.js.map +1 -1
  201. package/dist/src/consensus/audit-writer.d.ts +2 -2
  202. package/dist/src/consensus/audit-writer.d.ts.map +1 -1
  203. package/dist/src/consensus/audit-writer.js +1 -1
  204. package/dist/src/index.d.ts +2 -2
  205. package/dist/src/index.d.ts.map +1 -1
  206. package/dist/src/index.js +12 -10
  207. package/dist/src/index.js.map +1 -1
  208. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  209. package/dist/src/init/claudemd-generator.js +32 -31
  210. package/dist/src/init/claudemd-generator.js.map +1 -1
  211. package/dist/src/init/codex-generator.d.ts +10 -0
  212. package/dist/src/init/codex-generator.d.ts.map +1 -0
  213. package/dist/src/init/codex-generator.js +67 -0
  214. package/dist/src/init/codex-generator.js.map +1 -0
  215. package/dist/src/init/copy-assets.d.ts.map +1 -1
  216. package/dist/src/init/copy-assets.js +4 -8
  217. package/dist/src/init/copy-assets.js.map +1 -1
  218. package/dist/src/init/executor.d.ts.map +1 -1
  219. package/dist/src/init/executor.js +9 -2
  220. package/dist/src/init/executor.js.map +1 -1
  221. package/dist/src/init/helpers-generator.js +1 -1
  222. package/dist/src/init/index.d.ts +1 -0
  223. package/dist/src/init/index.d.ts.map +1 -1
  224. package/dist/src/init/index.js +1 -0
  225. package/dist/src/init/index.js.map +1 -1
  226. package/dist/src/init/opencode-generator.js +2 -2
  227. package/dist/src/init/opencode-generator.js.map +1 -1
  228. package/dist/src/init/settings-generator.d.ts.map +1 -1
  229. package/dist/src/init/settings-generator.js +1 -2
  230. package/dist/src/init/settings-generator.js.map +1 -1
  231. package/dist/src/init/shared.d.ts.map +1 -1
  232. package/dist/src/init/shared.js +3 -7
  233. package/dist/src/init/shared.js.map +1 -1
  234. package/dist/src/init/statusline-generator.js +19 -19
  235. package/dist/src/init/types.d.ts +9 -10
  236. package/dist/src/init/types.d.ts.map +1 -1
  237. package/dist/src/init/types.js +8 -6
  238. package/dist/src/init/types.js.map +1 -1
  239. package/dist/src/init/upgrade.js +5 -5
  240. package/dist/src/init/upgrade.js.map +1 -1
  241. package/dist/src/init/write-capabilities.d.ts.map +1 -1
  242. package/dist/src/init/write-capabilities.js +36 -49
  243. package/dist/src/init/write-capabilities.js.map +1 -1
  244. package/dist/src/init/write-claude.js +1 -1
  245. package/dist/src/init/write-claude.js.map +1 -1
  246. package/dist/src/init/write-codex.d.ts +4 -0
  247. package/dist/src/init/write-codex.d.ts.map +1 -0
  248. package/dist/src/init/write-codex.js +57 -0
  249. package/dist/src/init/write-codex.js.map +1 -0
  250. package/dist/src/init/write-runtime-config.d.ts.map +1 -1
  251. package/dist/src/init/write-runtime-config.js +4 -5
  252. package/dist/src/init/write-runtime-config.js.map +1 -1
  253. package/dist/src/knowledge/eval/golden-set.js +15 -15
  254. package/dist/src/knowledge/eval/golden-set.js.map +1 -1
  255. package/dist/src/mcp-client.d.ts.map +1 -1
  256. package/dist/src/mcp-client.js +1 -2
  257. package/dist/src/mcp-client.js.map +1 -1
  258. package/dist/src/mcp-server.js +1 -1
  259. package/dist/src/mcp-server.js.map +1 -1
  260. package/dist/src/mcp-tools/agent-tools.d.ts +1 -1
  261. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  262. package/dist/src/mcp-tools/agent-tools.js +3 -3
  263. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  264. package/dist/src/mcp-tools/autopilot-tools.d.ts +1 -1
  265. package/dist/src/mcp-tools/autopilot-tools.d.ts.map +1 -1
  266. package/dist/src/mcp-tools/autopilot-tools.js +4 -62
  267. package/dist/src/mcp-tools/autopilot-tools.js.map +1 -1
  268. package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
  269. package/dist/src/mcp-tools/guidance-tools.js +21 -31
  270. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  271. package/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -1
  272. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
  273. package/dist/src/mcp-tools/hooks-intelligence.js +56 -103
  274. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
  275. package/dist/src/mcp-tools/hooks-routing.d.ts +1 -2
  276. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  277. package/dist/src/mcp-tools/hooks-routing.js +78 -152
  278. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  279. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  280. package/dist/src/mcp-tools/hooks-tools.js +2 -4
  281. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  282. package/dist/src/mcp-tools/index.d.ts +1 -2
  283. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  284. package/dist/src/mcp-tools/index.js +1 -2
  285. package/dist/src/mcp-tools/index.js.map +1 -1
  286. package/dist/src/mcp-tools/memory-tools.js +10 -10
  287. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  288. package/dist/src/mcp-tools/monograph/query-tools.js +9 -9
  289. package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -1
  290. package/dist/src/mcp-tools/monoswarm-tools.d.ts +17 -0
  291. package/dist/src/mcp-tools/monoswarm-tools.d.ts.map +1 -0
  292. package/dist/src/mcp-tools/monoswarm-tools.js +1153 -0
  293. package/dist/src/mcp-tools/monoswarm-tools.js.map +1 -0
  294. package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
  295. package/dist/src/mcp-tools/performance-tools.js +32 -25
  296. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  297. package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
  298. package/dist/src/mcp-tools/system-tools.js +30 -13
  299. package/dist/src/mcp-tools/system-tools.js.map +1 -1
  300. package/dist/src/mcp-tools/transfer-tools.d.ts +8 -12
  301. package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
  302. package/dist/src/mcp-tools/transfer-tools.js +9 -13
  303. package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
  304. package/dist/src/memory/embedding-operations.d.ts.map +1 -1
  305. package/dist/src/memory/embedding-operations.js +0 -37
  306. package/dist/src/memory/embedding-operations.js.map +1 -1
  307. package/dist/src/memory/hnsw-operations.d.ts +14 -74
  308. package/dist/src/memory/hnsw-operations.d.ts.map +1 -1
  309. package/dist/src/memory/hnsw-operations.js +22 -262
  310. package/dist/src/memory/hnsw-operations.js.map +1 -1
  311. package/dist/src/memory/intelligence.d.ts +2 -2
  312. package/dist/src/memory/intelligence.d.ts.map +1 -1
  313. package/dist/src/memory/intelligence.js +8 -7
  314. package/dist/src/memory/intelligence.js.map +1 -1
  315. package/dist/src/memory/memory-bridge.d.ts +24 -24
  316. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  317. package/dist/src/memory/memory-bridge.js +33 -34
  318. package/dist/src/memory/memory-bridge.js.map +1 -1
  319. package/dist/src/memory/memory-crud.d.ts.map +1 -1
  320. package/dist/src/memory/memory-crud.js +0 -20
  321. package/dist/src/memory/memory-crud.js.map +1 -1
  322. package/dist/src/memory/memory-initializer.d.ts +2 -3
  323. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  324. package/dist/src/memory/memory-initializer.js +2 -3
  325. package/dist/src/memory/memory-initializer.js.map +1 -1
  326. package/dist/src/memory/memory-read.d.ts.map +1 -1
  327. package/dist/src/memory/memory-read.js +5 -14
  328. package/dist/src/memory/memory-read.js.map +1 -1
  329. package/dist/src/memory/sona-optimizer.d.ts +1 -1
  330. package/dist/src/memory/sona-optimizer.js +1 -1
  331. package/dist/src/monovector/model-outcomes.d.ts +25 -0
  332. package/dist/src/monovector/model-outcomes.d.ts.map +1 -0
  333. package/dist/src/monovector/model-outcomes.js +113 -0
  334. package/dist/src/monovector/model-outcomes.js.map +1 -0
  335. package/dist/src/orgrt/agent-runner.d.ts +8 -2
  336. package/dist/src/orgrt/agent-runner.d.ts.map +1 -1
  337. package/dist/src/orgrt/agent-runner.js.map +1 -1
  338. package/dist/src/orgrt/antigravity-runner.d.ts +25 -2
  339. package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
  340. package/dist/src/orgrt/antigravity-runner.js +265 -124
  341. package/dist/src/orgrt/antigravity-runner.js.map +1 -1
  342. package/dist/src/orgrt/approvals.d.ts +16 -1
  343. package/dist/src/orgrt/approvals.d.ts.map +1 -1
  344. package/dist/src/orgrt/approvals.js +47 -2
  345. package/dist/src/orgrt/approvals.js.map +1 -1
  346. package/dist/src/orgrt/checkpoint-ops.d.ts +10 -16
  347. package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
  348. package/dist/src/orgrt/checkpoint-ops.js +12 -18
  349. package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
  350. package/dist/src/orgrt/checkpoint.d.ts +12 -1
  351. package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
  352. package/dist/src/orgrt/checkpoint.js +19 -3
  353. package/dist/src/orgrt/checkpoint.js.map +1 -1
  354. package/dist/src/orgrt/codex-runner.d.ts +26 -2
  355. package/dist/src/orgrt/codex-runner.d.ts.map +1 -1
  356. package/dist/src/orgrt/codex-runner.js +359 -128
  357. package/dist/src/orgrt/codex-runner.js.map +1 -1
  358. package/dist/src/orgrt/copilot-runner.d.ts +14 -0
  359. package/dist/src/orgrt/copilot-runner.d.ts.map +1 -0
  360. package/dist/src/orgrt/copilot-runner.js +260 -0
  361. package/dist/src/orgrt/copilot-runner.js.map +1 -0
  362. package/dist/src/orgrt/cross-org.d.ts.map +1 -1
  363. package/dist/src/orgrt/cross-org.js +11 -0
  364. package/dist/src/orgrt/cross-org.js.map +1 -1
  365. package/dist/src/orgrt/crush-runner.d.ts +27 -0
  366. package/dist/src/orgrt/crush-runner.d.ts.map +1 -0
  367. package/dist/src/orgrt/crush-runner.js +263 -0
  368. package/dist/src/orgrt/crush-runner.js.map +1 -0
  369. package/dist/src/orgrt/daemon.d.ts +68 -16
  370. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  371. package/dist/src/orgrt/daemon.js +212 -29
  372. package/dist/src/orgrt/daemon.js.map +1 -1
  373. package/dist/src/orgrt/decisions.d.ts +1 -0
  374. package/dist/src/orgrt/decisions.d.ts.map +1 -1
  375. package/dist/src/orgrt/decisions.js +20 -0
  376. package/dist/src/orgrt/decisions.js.map +1 -1
  377. package/dist/src/orgrt/grok-runner.d.ts +18 -0
  378. package/dist/src/orgrt/grok-runner.d.ts.map +1 -0
  379. package/dist/src/orgrt/grok-runner.js +348 -0
  380. package/dist/src/orgrt/grok-runner.js.map +1 -0
  381. package/dist/src/orgrt/kimicode-runner.d.ts +53 -7
  382. package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
  383. package/dist/src/orgrt/kimicode-runner.js +246 -144
  384. package/dist/src/orgrt/kimicode-runner.js.map +1 -1
  385. package/dist/src/orgrt/mailbox.d.ts +26 -1
  386. package/dist/src/orgrt/mailbox.d.ts.map +1 -1
  387. package/dist/src/orgrt/mailbox.js +74 -2
  388. package/dist/src/orgrt/mailbox.js.map +1 -1
  389. package/dist/src/orgrt/pi-rpc-runner.d.ts +68 -0
  390. package/dist/src/orgrt/pi-rpc-runner.d.ts.map +1 -0
  391. package/dist/src/orgrt/pi-rpc-runner.js +385 -0
  392. package/dist/src/orgrt/pi-rpc-runner.js.map +1 -0
  393. package/dist/src/orgrt/pi-runner.d.ts +16 -0
  394. package/dist/src/orgrt/pi-runner.d.ts.map +1 -0
  395. package/dist/src/orgrt/pi-runner.js +264 -0
  396. package/dist/src/orgrt/pi-runner.js.map +1 -0
  397. package/dist/src/orgrt/policy.d.ts +11 -0
  398. package/dist/src/orgrt/policy.d.ts.map +1 -1
  399. package/dist/src/orgrt/policy.js +25 -2
  400. package/dist/src/orgrt/policy.js.map +1 -1
  401. package/dist/src/orgrt/provider.d.ts +29 -1
  402. package/dist/src/orgrt/provider.d.ts.map +1 -1
  403. package/dist/src/orgrt/provider.js +62 -2
  404. package/dist/src/orgrt/provider.js.map +1 -1
  405. package/dist/src/orgrt/qwen-rpc-runner.d.ts +56 -0
  406. package/dist/src/orgrt/qwen-rpc-runner.d.ts.map +1 -0
  407. package/dist/src/orgrt/qwen-rpc-runner.js +346 -0
  408. package/dist/src/orgrt/qwen-rpc-runner.js.map +1 -0
  409. package/dist/src/orgrt/qwen-runner.d.ts +18 -0
  410. package/dist/src/orgrt/qwen-runner.d.ts.map +1 -0
  411. package/dist/src/orgrt/qwen-runner.js +270 -0
  412. package/dist/src/orgrt/qwen-runner.js.map +1 -0
  413. package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -1
  414. package/dist/src/orgrt/scheduler-integration.js +7 -0
  415. package/dist/src/orgrt/scheduler-integration.js.map +1 -1
  416. package/dist/src/orgrt/session.d.ts +29 -1
  417. package/dist/src/orgrt/session.d.ts.map +1 -1
  418. package/dist/src/orgrt/session.js +87 -18
  419. package/dist/src/orgrt/session.js.map +1 -1
  420. package/dist/src/orgrt/task-dag.d.ts +29 -1
  421. package/dist/src/orgrt/task-dag.d.ts.map +1 -1
  422. package/dist/src/orgrt/task-dag.js +54 -0
  423. package/dist/src/orgrt/task-dag.js.map +1 -1
  424. package/dist/src/orgrt/test-loop.d.ts.map +1 -1
  425. package/dist/src/orgrt/test-loop.js +86 -9
  426. package/dist/src/orgrt/test-loop.js.map +1 -1
  427. package/dist/src/orgrt/tool-fence.d.ts.map +1 -1
  428. package/dist/src/orgrt/tool-fence.js +15 -0
  429. package/dist/src/orgrt/tool-fence.js.map +1 -1
  430. package/dist/src/orgrt/types.d.ts +50 -1
  431. package/dist/src/orgrt/types.d.ts.map +1 -1
  432. package/dist/src/orgrt/types.js +47 -4
  433. package/dist/src/orgrt/types.js.map +1 -1
  434. package/dist/src/orgrt/usage-proxy.d.ts +32 -0
  435. package/dist/src/orgrt/usage-proxy.d.ts.map +1 -0
  436. package/dist/src/orgrt/usage-proxy.js +226 -0
  437. package/dist/src/orgrt/usage-proxy.js.map +1 -0
  438. package/dist/src/pricing/model-pricing.d.ts.map +1 -1
  439. package/dist/src/pricing/model-pricing.js +0 -4
  440. package/dist/src/pricing/model-pricing.js.map +1 -1
  441. package/dist/src/security/audit-log.d.ts +47 -0
  442. package/dist/src/security/audit-log.d.ts.map +1 -0
  443. package/dist/src/security/audit-log.js +84 -0
  444. package/dist/src/security/audit-log.js.map +1 -0
  445. package/dist/src/services/config-file-manager.d.ts +2 -2
  446. package/dist/src/services/config-file-manager.d.ts.map +1 -1
  447. package/dist/src/services/config-file-manager.js +6 -7
  448. package/dist/src/services/config-file-manager.js.map +1 -1
  449. package/dist/src/suggest.d.ts.map +1 -1
  450. package/dist/src/suggest.js +4 -5
  451. package/dist/src/suggest.js.map +1 -1
  452. package/dist/src/transfer/anonymization/index.d.ts +1 -1
  453. package/dist/src/transfer/anonymization/index.js +1 -1
  454. package/dist/src/types.d.ts +3 -3
  455. package/dist/src/types.d.ts.map +1 -1
  456. package/dist/src/ui/collector.mjs +9 -13
  457. package/dist/src/ui/dashboard.html +93 -10
  458. package/dist/src/ui/data/agent-avatars.html +0 -12
  459. package/dist/src/ui/data/agent-avatars.json +10 -26
  460. package/dist/src/ui/orgs.html +8 -1
  461. package/dist/src/ui/routes-org.mjs +85 -16
  462. package/dist/src/ui/server.mjs +50 -23
  463. package/dist/src/utils/json-file.d.ts +12 -0
  464. package/dist/src/utils/json-file.d.ts.map +1 -1
  465. package/dist/src/utils/json-file.js +11 -0
  466. package/dist/src/utils/json-file.js.map +1 -1
  467. package/dist/tsconfig.tsbuildinfo +1 -1
  468. package/package.json +5 -5
  469. package/.claude/agents/consensus/crdt-synchronizer.md +0 -977
  470. package/.claude/commands/hive-mind/README.md +0 -42
  471. package/.claude/commands/hive-mind/hive-mind-consensus.md +0 -72
  472. package/.claude/commands/hive-mind/hive-mind-init.md +0 -68
  473. package/.claude/commands/hive-mind/hive-mind-memory.md +0 -73
  474. package/.claude/commands/hive-mind/hive-mind-spawn.md +0 -82
  475. package/.claude/commands/hive-mind/hive-mind-status.md +0 -56
  476. package/.claude/commands/hive-mind/hive-mind-stop.md +0 -55
  477. package/.claude/commands/hive-mind/hive-mind.md +0 -87
  478. package/.claude/commands/swarm/README.md +0 -40
  479. package/.claude/commands/swarm/swarm.md +0 -79
  480. package/.claude/skills/hive-mind-advanced/SKILL.md +0 -347
  481. package/.claude/skills/swarm-advanced/SKILL.md +0 -936
  482. package/dist/src/commands/swarm.d.ts +0 -8
  483. package/dist/src/commands/swarm.d.ts.map +0 -1
  484. package/dist/src/commands/swarm.js.map +0 -1
  485. package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -17
  486. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +0 -1
  487. package/dist/src/mcp-tools/hive-mind-tools.js +0 -1239
  488. package/dist/src/mcp-tools/hive-mind-tools.js.map +0 -1
  489. package/dist/src/mcp-tools/swarm-tools.d.ts +0 -9
  490. package/dist/src/mcp-tools/swarm-tools.d.ts.map +0 -1
  491. package/dist/src/mcp-tools/swarm-tools.js +0 -411
  492. package/dist/src/mcp-tools/swarm-tools.js.map +0 -1
  493. package/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -53
  494. package/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -54
  495. package/scripts/deploy-ipfs-node.sh +0 -153
  496. package/scripts/setup-ipfs-registry.md +0 -365
  497. /package/.claude/agents/{hive-mind → monoswarm}/scout-explorer.md +0 -0
  498. /package/.claude/agents/{hive-mind → monoswarm}/worker-specialist.md +0 -0
  499. /package/.claude/commands/{swarm → monoswarm}/analysis.md +0 -0
  500. /package/.claude/commands/{swarm → monoswarm}/development.md +0 -0
  501. /package/.claude/commands/{swarm → monoswarm}/examples.md +0 -0
  502. /package/.claude/commands/{swarm → monoswarm}/maintenance.md +0 -0
  503. /package/.claude/commands/{swarm → monoswarm}/optimization.md +0 -0
  504. /package/.claude/commands/{swarm → monoswarm}/testing.md +0 -0
  505. /package/dist/src/ui/data/avatars/{code-review-swarm.svg → monoswarm-code-review.svg} +0 -0
@@ -7,7 +7,7 @@ import { writeJsonFileAtomic } from '../utils/json-file.js';
7
7
  import { reapOrphanedSdkProcesses } from '../utils/resource-governor.js';
8
8
  import { OrgBus } from './bus.js';
9
9
  import { PolicyEngine } from './policy.js';
10
- import { Mailbox } from './mailbox.js';
10
+ import { Mailbox, isRecoverableCloseReason } from './mailbox.js';
11
11
  import { runAgentSession } from './session.js';
12
12
  import { attachForwarder } from './forwarder.js';
13
13
  import { BrokerLease, normalizeCredential } from './broker.js';
@@ -21,6 +21,13 @@ import { KimiCodeAgentRunner } from './kimicode-runner.js';
21
21
  import { VercelAgentRunner } from './vercel-runner.js';
22
22
  import { CodexAgentRunner } from './codex-runner.js';
23
23
  import { AntigravityAgentRunner } from './antigravity-runner.js';
24
+ import { GrokAgentRunner } from './grok-runner.js';
25
+ import { QwenAgentRunner } from './qwen-runner.js';
26
+ import { CrushAgentRunner } from './crush-runner.js';
27
+ import { CopilotAgentRunner } from './copilot-runner.js';
28
+ import { PiAgentRunner } from './pi-runner.js';
29
+ import { PiRpcAgentRunner } from './pi-rpc-runner.js';
30
+ import { QwenRpcAgentRunner } from './qwen-rpc-runner.js';
24
31
  import { captureCheckpoint, generateChecksum, validateCheckpoint, isCheckpointExpired, restoreMailboxQueue, } from './checkpoint.js';
25
32
  import { loadGlobalFenceConfig, mergeFenceConfigs, createFenceForRole, } from './fence.js';
26
33
  // ── Extracted module imports ────────────────────────────────────────────
@@ -73,7 +80,7 @@ function autoRuntimeFromProvider(kind) {
73
80
  return 'antigravity';
74
81
  return undefined;
75
82
  }
76
- export function resolveRunner(orgRuntime, providerKind) {
83
+ export function resolveRunner(orgRuntime, providerKind, provider) {
77
84
  const selected = orgRuntime ??
78
85
  autoRuntimeFromProvider(providerKind) ??
79
86
  process.env.MONOMIND_RUNTIME;
@@ -87,6 +94,30 @@ export function resolveRunner(orgRuntime, providerKind) {
87
94
  return new CodexAgentRunner();
88
95
  if (selected === 'antigravity')
89
96
  return new AntigravityAgentRunner();
97
+ if (selected === 'grok')
98
+ return new GrokAgentRunner();
99
+ if (selected === 'qwen')
100
+ return new QwenAgentRunner();
101
+ if (selected === 'crush') {
102
+ // Issue #177: usage-proxy accounting is opt-in via provider.usageProxy +
103
+ // provider.baseUrl (the upstream the crush CLI's own provider config
104
+ // points at). Absent either, CrushAgentRunner falls back to its
105
+ // documented 0-token behavior — this never blocks a turn either way.
106
+ if (provider?.usageProxy && provider.baseUrl) {
107
+ return new CrushAgentRunner({
108
+ usageProxy: { upstreamBaseUrl: provider.baseUrl, baseUrlEnvVar: provider.usageProxyEnvVar },
109
+ });
110
+ }
111
+ return new CrushAgentRunner();
112
+ }
113
+ if (selected === 'copilot')
114
+ return new CopilotAgentRunner();
115
+ if (selected === 'pi')
116
+ return new PiAgentRunner();
117
+ if (selected === 'pi-rpc')
118
+ return new PiRpcAgentRunner();
119
+ if (selected === 'qwen-rpc')
120
+ return new QwenRpcAgentRunner();
90
121
  return undefined;
91
122
  }
92
123
  /** Per-session variant: a role's own `runtime` field wins over the org-level
@@ -94,17 +125,46 @@ export function resolveRunner(orgRuntime, providerKind) {
94
125
  * the default Claude path even when the org/env select another runtime.
95
126
  * Roles without a `runtime` inherit the org-level resolution unchanged.
96
127
  * If no explicit runtime is set, auto-resolve from the provider kind. */
97
- export function resolveRoleRunner(roleRuntime, orgRuntime, roleProviderKind, orgProviderKind) {
128
+ export function resolveRoleRunner(roleRuntime, orgRuntime, roleProviderKind, orgProviderKind, roleProvider) {
98
129
  const explicit = roleRuntime ?? orgRuntime;
99
130
  if (explicit)
100
- return resolveRunner(explicit);
101
- return resolveRunner(undefined, roleProviderKind ?? orgProviderKind);
131
+ return resolveRunner(explicit, undefined, roleProvider);
132
+ return resolveRunner(undefined, roleProviderKind ?? orgProviderKind, roleProvider);
102
133
  }
103
134
  /** Per-role token budget: a role's own `budget_tokens` wins; otherwise the
104
135
  * even split of run_config.budget_tokens across all roles. */
105
136
  export function roleTokenBudget(role, def) {
106
137
  return (role.budget_tokens ?? Math.floor((def.run_config.budget_tokens ?? 1_000_000) / def.roles.length));
107
138
  }
139
+ /** Idle watchdog's per-tick recovery check: given the previous nudge timestamp,
140
+ * the cumulative nudge count, and the timestamp of the most recent real tool
141
+ * call, returns the nudge count that should carry forward now that fresh
142
+ * activity means the org is no longer idle.
143
+ *
144
+ * `nudgedAt !== 0` means we're recovering from an outstanding nudge. Resetting
145
+ * the counter here means it only ever tracks UNRESOLVED idle spells in a row,
146
+ * not a lifetime total — a long-running org that goes idle and recovers any
147
+ * number of times (e.g. periodic checkpoints on a slow background task) is
148
+ * never punished for having had several separate, healthy idle spells over
149
+ * its lifetime. Before this existed, `nudges` only ever incremented, so a run
150
+ * that answered every single nudge with real work still hit the "org idle
151
+ * again after 3 nudges" cap and got force-stopped on its 4th idle spell —
152
+ * observed live killing an in-progress 24h soak test under 90 minutes in.
153
+ *
154
+ * But "recovering" must mean genuine forward progress, not just any bus
155
+ * event — a bare, content-free reply to the nudge (a boss that answers with
156
+ * "✓ Complete" and calls no tools at all) still updates lastActivity, so the
157
+ * org isn't flagged as silent, but it accomplishes nothing: nobody outside
158
+ * the boss's own turn ever sees it, since role coordination only happens via
159
+ * tool calls (org_send, org_task, ...). Requiring `lastToolActivity >=
160
+ * nudgedAt` — a real tool call happened AFTER this nudge was sent — closes
161
+ * that gap: observed live, a boss stuck responding to four consecutive
162
+ * 10-minute nudges with one-line acknowledgments and zero tool calls looped
163
+ * indefinitely making no progress, because every trivial reply reset the cap
164
+ * that was supposed to catch exactly this. */
165
+ export function resolvedIdleNudgeCount(nudgedAt, nudges, lastToolActivity) {
166
+ return nudgedAt !== 0 && lastToolActivity >= nudgedAt ? 0 : nudges;
167
+ }
108
168
  /** Bounded ring buffer for agent terminal scrollback. */
109
169
  export class ScrollbackBuffer {
110
170
  maxLines;
@@ -370,16 +430,36 @@ export class OrgDaemon {
370
430
  }
371
431
  // Validate per-role providers before spawning anything (fail-fast: a
372
432
  // missing env var discovered 10 minutes into a run wastes the entire run).
373
- const { resolveProviderEnv: validateProvider } = await import('./provider.js');
433
+ const { resolveProviderEnv: validateProvider, resolveRoleProvider } = await import('./provider.js');
374
434
  for (const role of def.roles) {
375
- if (role.provider) {
376
- try {
435
+ try {
436
+ if (role.provider) {
377
437
  validateProvider(role.provider);
378
438
  }
379
- catch (err) {
380
- throw new Error(`org ${name}: role "${role.id}" provider validation failed — ${err instanceof Error ? err.message : err}`);
439
+ else if (role.adapter_config?.provider) {
440
+ // Named provider (`monomind providers configure`): resolve now so a
441
+ // missing/misconfigured entry fails the run at start, not mid-flight.
442
+ resolveRoleProvider(role, this.root);
381
443
  }
382
444
  }
445
+ catch (err) {
446
+ throw new Error(`org ${name}: role "${role.id}" provider validation failed — ${err instanceof Error ? err.message : err}`);
447
+ }
448
+ // provider.kind 'gemini'/'openai' only sets env vars (GEMINI_API_KEY /
449
+ // OPENAI_API_KEY — see provider.ts) for a CLI that never reads them:
450
+ // autoRuntimeFromProvider has no case for either kind, so
451
+ // resolveRoleRunner falls through to `undefined` and session.ts spawns
452
+ // the default ClaudeAgentRunner. The role silently runs on Claude while
453
+ // its config claims gemini/openai — surface that loudly at start time
454
+ // instead of leaving it to be discovered mid-run.
455
+ const kind = role.provider?.kind;
456
+ if ((kind === 'gemini' || kind === 'openai') &&
457
+ !resolveRoleRunner(role.runtime, def.runtime, kind, undefined, role.provider)) {
458
+ console.error(`org ${name}: role "${role.id}" sets provider.kind="${kind}" but no runtime honors it — ` +
459
+ `this role will actually run on the Claude Agent SDK, not ${kind}. ` +
460
+ `Set role.runtime (or the org's runtime) explicitly, or use provider.kind="vercel-api-key" ` +
461
+ `with vendor="${kind === 'gemini' ? 'google' : 'openai'}" to route through a real ${kind} model.`);
462
+ }
383
463
  }
384
464
  const bus = new OrgBus(name, run, dir);
385
465
  // Lightweight in-memory tail for busEvents() (test-loop, /api/history).
@@ -388,6 +468,16 @@ export class OrgDaemon {
388
468
  const MAX_COLLECTED = 1000;
389
469
  const collected = [];
390
470
  let lastActivity = Date.now();
471
+ // Separate from lastActivity: only real tool calls (org_send, org_task,
472
+ // Bash, ...) count here, not status pings or chat-only turns. The idle
473
+ // watchdog's nudge-recovery check (resolvedIdleNudgeCount) uses this to
474
+ // tell genuine forward progress apart from a boss that "answers" a nudge
475
+ // with a bare acknowledgment ("✓ Complete") and does nothing — a
476
+ // content-free reply still updates lastActivity (so the org isn't
477
+ // flagged as silent), but must not reset the cumulative nudge cap, or a
478
+ // boss that's genuinely out of ideas can loop forever making zero
479
+ // progress without ever tripping the watchdog.
480
+ let lastToolActivity = 0;
391
481
  bus.subscribe((e) => {
392
482
  const slim = e.data?.content != null ? { ...e, data: { ...e.data, content: undefined } } : e;
393
483
  collected.push(slim);
@@ -397,6 +487,8 @@ export class OrgDaemon {
397
487
  // hung boss would never trip the "nudge produced no activity" stop.
398
488
  if (e.reason !== 'idle-nudge')
399
489
  lastActivity = Date.now();
490
+ if (e.type === 'tool')
491
+ lastToolActivity = Date.now();
400
492
  // org_complete IS the end of the run — self-stop instead of sitting
401
493
  // "running" forever after a recorded outcome. Deferred (unref'd) so the
402
494
  // tool call's receipt reaches the boss and its final turn text still
@@ -404,7 +496,11 @@ export class OrgDaemon {
404
496
  // against a concurrent manual stop.
405
497
  if (e.type === 'status' && e.reason === 'org-complete') {
406
498
  const t = setTimeout(() => {
407
- this.stopOrg(name, { drainMs: COMPLETE_DRAIN_MS }).catch((err) => console.error(`org ${name}: auto-stop after org_complete failed:`, err instanceof Error ? err.message : err));
499
+ // #206: closedBy: 'org-complete' is the ONLY signal `org run`
500
+ // trusts to mean "the run ended cleanly, exit 0" — every other
501
+ // stop path (idle watchdog, boss-restart-exhausted, manual stop)
502
+ // leaves it unset.
503
+ this.stopOrg(name, { drainMs: COMPLETE_DRAIN_MS, closedBy: 'org-complete' }).catch((err) => console.error(`org ${name}: auto-stop after org_complete failed:`, err instanceof Error ? err.message : err));
408
504
  }, 1000);
409
505
  t.unref?.();
410
506
  }
@@ -543,13 +639,22 @@ export class OrgDaemon {
543
639
  if (roleCheckpoint?.mailboxQueue?.length) {
544
640
  restoreMailboxQueue({ mailbox }, roleCheckpoint.mailboxQueue);
545
641
  }
546
- if (roleCheckpoint?.mailboxClosed) {
547
- mailbox.close();
642
+ // A recoverable close (budget exhaustion) is left open on resume — see
643
+ // isRecoverableCloseReason's doc comment. Re-closing it here would
644
+ // make the idle watchdog's "raise the budget and resume" remedy a
645
+ // no-op, since nothing in this codebase ever reopens a closed mailbox.
646
+ if (roleCheckpoint?.mailboxClosed && !isRecoverableCloseReason(roleCheckpoint.mailboxCloseReason)) {
647
+ mailbox.close(roleCheckpoint.mailboxCloseReason);
548
648
  }
549
- const policy = new PolicyEngine(role.id, { maxTokens: role.budget_tokens ?? perRoleBudget, ...(role.policy ?? {}) }, bus, roleCwd);
649
+ const policy = new PolicyEngine(role.id, { maxTokens: role.budget_tokens ?? perRoleBudget, maxUsd: role.budget_usd, ...(role.policy ?? {}) }, bus, roleCwd);
550
650
  if (roleCheckpoint?.tokensUsed) {
551
651
  policy.setUsage(roleCheckpoint.tokensUsed);
552
652
  }
653
+ // ORG-7: restore accumulated USD spend across resume so a stop/resume
654
+ // cycle can't reset a role's USD budget back to zero.
655
+ if (roleCheckpoint?.costUsd) {
656
+ policy.setUsageUsd(roleCheckpoint.costUsd);
657
+ }
553
658
  const runtime = {
554
659
  mailbox,
555
660
  policy,
@@ -578,6 +683,9 @@ export class OrgDaemon {
578
683
  // (VercelAgentRunner session files) write under .monomind/orgs/<name>
579
684
  // instead of polluting the workspace cwd.
580
685
  orgDir: join(this.root, ORG_DIR, name),
686
+ // Project root for named-provider (`adapter_config.provider`) config
687
+ // lookup — role cwd may be an isolated workspace with no config file.
688
+ orgRoot: this.root,
581
689
  maxTurns: role.max_turns_per_message ?? def.run_config.max_turns_per_message,
582
690
  resumeSessionId: roleCheckpoint?.sessionId,
583
691
  lastMessageId: () => runtime.lastMessageId,
@@ -594,6 +702,20 @@ export class OrgDaemon {
594
702
  })(),
595
703
  beforeTool: (r, toolName) => this.checkApproval(name, r, toolName),
596
704
  fence: roleFences.get(role.id),
705
+ // ORG-1: gatedCanUseTool denials are a natural decision point — record them so
706
+ // `org decisions` shows real traces instead of always reporting none.
707
+ onDecision: (r, toolName, message) => {
708
+ this.recordDecision(name, r, {
709
+ type: 'tool',
710
+ context: `tool call: ${toolName}`,
711
+ reasoning: message,
712
+ outcome: 'denied',
713
+ });
714
+ },
715
+ // ORG-9: decision gates are documented as "hard-blocking" — make that
716
+ // true by actually denying tool use while this role has a pending gate,
717
+ // the same way pending approvals already do.
718
+ hasPendingGate: () => this.listGates(name, 'pending').some(g => g.roleId === role.id),
597
719
  onComplete: role.id === bossRole.id
598
720
  ? (r, outcome, summary) => {
599
721
  bus.emit({
@@ -678,6 +800,9 @@ export class OrgDaemon {
678
800
  cancelTask: (r, taskId, reason) => {
679
801
  return this.dagCancelTask(name, r, taskId, reason);
680
802
  },
803
+ blockTask: (r, taskId, untilIso, reason) => {
804
+ return this.dagBlockTask(name, r, taskId, untilIso, reason);
805
+ },
681
806
  planGraph: (r, specs) => {
682
807
  return this.dagPlanGraph(name, r, specs);
683
808
  },
@@ -689,7 +814,7 @@ export class OrgDaemon {
689
814
  // Claude/Antigravity orgs byte-for-byte unchanged. Session opts are
690
815
  // built per role here in spawnRole, so each role gets its own runner.
691
816
  runner: this.opts.runner ??
692
- resolveRoleRunner(role.runtime, def.runtime, role.provider?.kind, undefined),
817
+ resolveRoleRunner(role.runtime, def.runtime, role.provider?.kind, undefined, role.provider),
693
818
  };
694
819
  // Supervised session: transient crashes (provider blips, network) restart
695
820
  // with backoff; a crash with the mailbox already closed, or one that
@@ -712,6 +837,12 @@ export class OrgDaemon {
712
837
  // during the backoff window must queue for the NEXT session, not
713
838
  // wake the dead generator to swallow it.
714
839
  mailbox.detach();
840
+ // #203: if the crashed session's mailbox generator was abandoned
841
+ // mid-yield (message already shift()ed for it, turn never
842
+ // finished), put that message back on the queue — otherwise the
843
+ // replacement session's stream() finds an empty queue and parks
844
+ // forever, since the "delivered" message is gone for good.
845
+ mailbox.reclaimInFlight();
715
846
  const message = err instanceof Error ? err.message : String(err);
716
847
  const isTurnLimit = /Reached maximum number of turns|error_max_turns/i.test(message);
717
848
  // Bounded like every other recovery: attempt counts every pass
@@ -948,8 +1079,9 @@ export class OrgDaemon {
948
1079
  // org_complete) produces no bus events, and every agent just waits. After
949
1080
  // idle_minutes of silence, nudge the boss to complete or reassign; if the
950
1081
  // nudge itself produces no activity (boss hung/crashed), or the org keeps
951
- // going idle after MAX_IDLE_NUDGES nudges, stop the run instead of letting
952
- // it freeze forever. idle_minutes: 0 disables.
1082
+ // going idle after MAX_IDLE_NUDGES nudges in a row without ever recovering
1083
+ // (see resolvedIdleNudgeCount), stop the run instead of letting it freeze
1084
+ // forever. idle_minutes: 0 disables.
953
1085
  const idleMs = (def.run_config.idle_minutes ?? 10) * 60_000;
954
1086
  if (idleMs > 0) {
955
1087
  const MAX_IDLE_NUDGES = 3;
@@ -966,8 +1098,31 @@ export class OrgDaemon {
966
1098
  const pendingGates = this.readGates(name).gates.filter((g) => g.status === 'pending');
967
1099
  if (pendingGates.length > 0)
968
1100
  return;
1101
+ // Auto-resume any task whose org_task_block time has passed: flip it
1102
+ // back to 'running' and re-push it into the assignee's mailbox, same
1103
+ // as a fresh dispatch. This IS real activity, so fall through to the
1104
+ // normal idleFor check below rather than returning early — an
1105
+ // unblocked task should reset the idle clock, not just silently
1106
+ // update state nobody notices until the next nudge.
1107
+ const unblocked = running.taskDag?.unblockExpired(Date.now()) ?? [];
1108
+ for (const task of unblocked) {
1109
+ const agent = running.agents.get(task.assignee);
1110
+ if (agent && !agent.mailbox.isClosed) {
1111
+ agent.mailbox.push(`[task:${task.id}] Block expired — resuming: ${task.title}`);
1112
+ }
1113
+ bus.emit({
1114
+ type: 'status', from: 'dag', reason: 'task-unblocked',
1115
+ msg: `task ${task.id} block expired — resumed and re-dispatched to ${task.assignee}`,
1116
+ data: { taskId: task.id, assignee: task.assignee },
1117
+ });
1118
+ }
1119
+ // A task blocked on a real-world time still in the future is
1120
+ // legitimate waiting, same as a pending gate — don't nudge about it.
1121
+ if (running.taskDag?.hasActiveBlock(Date.now()))
1122
+ return;
969
1123
  const idleFor = Date.now() - lastActivity;
970
1124
  if (idleFor < idleMs) {
1125
+ nudges = resolvedIdleNudgeCount(nudgedAt, nudges, lastToolActivity);
971
1126
  nudgedAt = 0;
972
1127
  return;
973
1128
  }
@@ -977,6 +1132,18 @@ export class OrgDaemon {
977
1132
  return;
978
1133
  }
979
1134
  const bossRt = running.agents.get(bossRole.id);
1135
+ // #205: a budget-exhausted boss closed its own mailbox on
1136
+ // purpose (session.ts) — that's a recoverable pause, not the
1137
+ // same "unreachable" condition as a crash. Name it distinctly so
1138
+ // the operator's remedy (raise the budget, resume) is obvious
1139
+ // instead of reading like the run died.
1140
+ const budgetReason = bossRt?.mailbox.closeReason;
1141
+ if (budgetReason === 'token-budget' || budgetReason === 'usd-budget') {
1142
+ idleStop(`org idle for ${Math.round(idleFor / 60_000)}m and boss "${bossRole.id}" is over its ` +
1143
+ `${budgetReason === 'token-budget' ? 'token' : 'USD'} budget — raise the role's ` +
1144
+ `${budgetReason === 'token-budget' ? 'budget_tokens' : 'budget_usd'} (or run_config's) and resume from checkpoint — stopping run`);
1145
+ return;
1146
+ }
980
1147
  if (!bossRt || bossRt.status !== 'running' || bossRt.mailbox.isClosed) {
981
1148
  idleStop(`org idle for ${Math.round(idleFor / 60_000)}m and boss "${bossRole.id}" is unreachable — stopping run`);
982
1149
  return;
@@ -992,7 +1159,8 @@ export class OrgDaemon {
992
1159
  bossRt.mailbox.push(`[watchdog] No activity in org "${name}" for ${Math.round(idleFor / 60_000)} minute(s). ` +
993
1160
  `Check org_tasks first, then pick ONE: (1) the org's full stated goal is achieved or clearly cannot be — call org_complete now (this ends the run for good, not just this batch); ` +
994
1161
  `(2) someone has stalled or unstarted work — check on your team via org_send and reassign it; ` +
995
- `(3) the current task batch is done but the goal has more scope left — do NOT call org_complete for this case, instead dispatch the next batch of work with org_task/createTask so the org keeps making progress.`);
1162
+ `(3) the current task batch is done but the goal has more scope left — do NOT call org_complete for this case, instead dispatch the next batch of work with org_task/createTask so the org keeps making progress; ` +
1163
+ `(4) a task is stuck 'running' only because it's genuinely waiting on a real-world time (a scheduled process, a deadline) and there is nothing else to dispatch right now — do NOT just leave it and re-confirm this every time you get nudged, call org_task_block(taskId, untilIso, reason) instead so this watchdog stops nudging you about it and auto-resumes the task when the time arrives.`);
996
1164
  }
997
1165
  else if (Date.now() - nudgedAt >= idleMs) {
998
1166
  idleStop(`nudge produced no activity for another ${Math.round(idleMs / 60_000)}m — boss appears hung, stopping run`);
@@ -1043,7 +1211,12 @@ export class OrgDaemon {
1043
1211
  }
1044
1212
  /** @param opts.drainMs how long to let in-flight agent sessions finish before
1045
1213
  * reaping. Defaults to the short abort bound; the planned-completion path
1046
- * passes a far longer window (see COMPLETE_DRAIN_MS). */
1214
+ * passes a far longer window (see COMPLETE_DRAIN_MS).
1215
+ * @param opts.closedBy #206: tags WHY the run ended, persisted into
1216
+ * runtime.json so `org run` can tell a clean, goal-driven end
1217
+ * (closedBy: 'org-complete') from every other kind of stop (idle
1218
+ * watchdog, boss-restart-exhausted, manual `org stop`) and exit non-zero
1219
+ * for the latter. Only the org_complete auto-stop path passes this. */
1047
1220
  async stopOrg(name, opts) {
1048
1221
  // Join an in-flight stop instead of no-oping: the self-stop paths
1049
1222
  // (org_complete, idle watchdog) run detached, and a caller like
@@ -1063,7 +1236,7 @@ export class OrgDaemon {
1063
1236
  // shutdown via `stopping` instead of re-running the whole sequence and
1064
1237
  // double-emitting 'org stopped' (duplicate org:complete/session:complete).
1065
1238
  this.orgs.delete(name);
1066
- const p = this.finishStop(name, org, opts?.drainMs);
1239
+ const p = this.finishStop(name, org, opts?.drainMs, opts?.closedBy);
1067
1240
  this.stopping.set(name, p);
1068
1241
  try {
1069
1242
  await p;
@@ -1072,7 +1245,7 @@ export class OrgDaemon {
1072
1245
  this.stopping.delete(name);
1073
1246
  }
1074
1247
  }
1075
- async finishStop(name, org, drainMs) {
1248
+ async finishStop(name, org, drainMs, closedBy) {
1076
1249
  // Snapshot checkpoint BEFORE closing mailboxes / draining sessions — the
1077
1250
  // queue is emptied during the drain, so capturing afterwards loses all
1078
1251
  // unconsumed messages (the whole point of checkpoint-resume).
@@ -1190,7 +1363,7 @@ export class OrgDaemon {
1190
1363
  // 'running' record must not be overwritten with this old run's 'stopped'.
1191
1364
  // Pass the org directly since we already removed it from the map.
1192
1365
  if (!this.orgs.has(name))
1193
- this.persistState(name, 'stopped', org.run, org, stopCheckpoint);
1366
+ this.persistState(name, 'stopped', org.run, org, stopCheckpoint, closedBy);
1194
1367
  // Clean up git worktrees — shared (workspace: 'worktree') and per-role.
1195
1368
  try {
1196
1369
  const { execFileSync } = await import('node:child_process');
@@ -1231,8 +1404,13 @@ export class OrgDaemon {
1231
1404
  ...this.stopping.values(), // detached self-stops still flushing
1232
1405
  ]);
1233
1406
  }
1234
- /** @internal */
1235
- persistState(name, status, run, org, checkpointOverride) {
1407
+ /** @internal
1408
+ * @param closedBy #206: why the run ended — 'org-complete' for a clean,
1409
+ * goal-driven end (the only value any caller currently passes); absent for
1410
+ * every other stop (idle watchdog, boss-restart-exhausted, manual `org
1411
+ * stop`). Mirrors persistCrashStateAll()'s existing closedBy: 'crash-handler'
1412
+ * for the process-crash path, which org.ts already reads. */
1413
+ persistState(name, status, run, org, checkpointOverride, closedBy) {
1236
1414
  const p = join(this.root, ORG_DIR, name, 'runtime.json');
1237
1415
  const missing = [...(this.abandoned.get(name) ?? [])];
1238
1416
  const running = org ?? this.orgs.get(name);
@@ -1263,11 +1441,15 @@ export class OrgDaemon {
1263
1441
  updated: new Date().toISOString(),
1264
1442
  ...(missing.length ? { abandonedRoles: missing } : {}),
1265
1443
  ...(checkpoint ? { checkpoint } : {}),
1444
+ ...(closedBy ? { closedBy } : {}),
1266
1445
  });
1267
1446
  }
1268
1447
  /** Mark every currently-running org as crashed in runtime.json.
1269
- * Called from process-level crash handlers — must be synchronous and best-effort. */
1270
- persistCrashStateAll() {
1448
+ * Called from process-level crash handlers — must be synchronous and best-effort.
1449
+ * @param error the uncaught error/rejection reason, if known — without
1450
+ * this, `runOutcomeResult` (org.ts)'s "crashed: <error>" message always
1451
+ * read "crashed: unknown error" regardless of what actually happened. */
1452
+ persistCrashStateAll(error) {
1271
1453
  for (const [name, org] of this.orgs) {
1272
1454
  try {
1273
1455
  const p = join(this.root, ORG_DIR, name, 'runtime.json');
@@ -1279,6 +1461,7 @@ export class OrgDaemon {
1279
1461
  pid: process.pid,
1280
1462
  updated: new Date().toISOString(),
1281
1463
  closedBy: 'crash-handler',
1464
+ ...(error ? { error } : {}),
1282
1465
  });
1283
1466
  }
1284
1467
  catch {
@@ -1358,6 +1541,9 @@ export class OrgDaemon {
1358
1541
  dagCancelTask(org, role, taskId, reason) {
1359
1542
  return decisionOps.dagCancelTask(this, org, role, taskId, reason);
1360
1543
  }
1544
+ dagBlockTask(org, role, taskId, untilIso, reason) {
1545
+ return decisionOps.dagBlockTask(this, org, role, taskId, untilIso, reason);
1546
+ }
1361
1547
  dagPlanGraph(org, role, specs) {
1362
1548
  return decisionOps.dagPlanGraph(this, org, role, specs);
1363
1549
  }
@@ -1418,8 +1604,5 @@ export class OrgDaemon {
1418
1604
  async resumeOrg(name) {
1419
1605
  return checkpointOps.resumeOrg(this, name);
1420
1606
  }
1421
- branchCheckpoint(name, run, branchName) {
1422
- return checkpointOps.branchCheckpoint(this, name, run, branchName);
1423
- }
1424
1607
  }
1425
1608
  //# sourceMappingURL=daemon.js.map