@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
@@ -1,3 +1,18 @@
1
+ /** close() reasons that mean "paused, not dead" — the underlying condition
2
+ * (a budget cap) can be raised by an operator, unlike a crash/terminal
3
+ * close. Checked before re-closing a checkpointed mailbox on resume: a
4
+ * mailbox checkpointed with one of these reasons is left open instead of
5
+ * being re-closed, or the idle watchdog's "raise the budget and resume
6
+ * from checkpoint" remedy would silently do nothing — nothing in this
7
+ * codebase ever reopens a closed mailbox otherwise. The only production
8
+ * resume path is daemon.ts's inline spawnRole logic (where `new Mailbox()`
9
+ * is constructed for a role with a roleCheckpoint); checkpoint.ts's
10
+ * mergeCheckpoint() applies the same check but isn't currently called
11
+ * outside tests — keep both in sync if either changes. */
12
+ const BUDGET_CLOSE_REASONS = new Set(['token-budget', 'usd-budget']);
13
+ export function isRecoverableCloseReason(reason) {
14
+ return reason !== undefined && BUDGET_CLOSE_REASONS.has(reason);
15
+ }
1
16
  /**
2
17
  * Async message queue feeding one persistent SDK session.
3
18
  * push() from the daemon (deliveries from other agents / the user);
@@ -12,11 +27,21 @@ export class Mailbox {
12
27
  queue = [];
13
28
  wake = null;
14
29
  closed = false;
30
+ /** Why close() was called — e.g. 'token-budget' / 'usd-budget' — distinct
31
+ * from a crash/terminal close (undefined). Lets callers like the idle
32
+ * watchdog tell a recoverable budget pause from genuine unreachability. */
33
+ closeReasonValue;
15
34
  /** Bumped when a new stream() starts; stale generators see the mismatch and exit. */
16
35
  generation = 0;
17
36
  /** Monotonic count of REAL (non-continuation) messages consumed by stream().
18
37
  * The restart loop snapshots this around a session to tell progress from spin. */
19
38
  consumedReal = 0;
39
+ /** The most recently shift()ed-but-not-yet-confirmed-processed message: set
40
+ * right before stream() yields it, cleared once the generator is resumed
41
+ * for the next pull (proof the runner asked for more, i.e. the prior turn
42
+ * finished). If a session dies with this still set, the generator was
43
+ * abandoned mid-yield — see reclaimInFlight(). */
44
+ inFlight = null;
20
45
  /** Number of real (non-continuation) messages consumed so far across all sessions. */
21
46
  get consumedRealCount() { return this.consumedReal; }
22
47
  push(text) {
@@ -29,12 +54,26 @@ export class Mailbox {
29
54
  this.wake?.();
30
55
  this.wake = null;
31
56
  }
32
- close() {
57
+ close(reason) {
58
+ // First write wins. session.ts's result-message handler can call
59
+ // close() up to three times for one message (circuit-breaker trip,
60
+ // token-budget, USD-budget are independent sibling `if`s, not
61
+ // mutually exclusive) — without this guard the LAST call's reason
62
+ // silently overwrites the first, so a genuinely terminal
63
+ // circuit-breaker close could get misclassified as a recoverable
64
+ // budget close and the resume path would reopen a role that's
65
+ // supposed to require manual intervention.
66
+ if (this.closed)
67
+ return;
33
68
  this.closed = true;
69
+ this.closeReasonValue = reason;
34
70
  this.wake?.();
35
71
  this.wake = null;
36
72
  }
37
73
  get isClosed() { return this.closed; }
74
+ /** Why close() was called, if given a reason — undefined for a plain crash/
75
+ * terminal close. See the closeReasonValue field doc for intent. */
76
+ get closeReason() { return this.closeReasonValue; }
38
77
  /**
39
78
  * Detach the current waker WITHOUT resolving it. Called between sessions
40
79
  * (maxTurns restart, crash backoff): the dead session's generator may still
@@ -60,6 +99,10 @@ export class Mailbox {
60
99
  const gen = ++this.generation;
61
100
  // Drop (never resolve) any stale waker — see detach().
62
101
  this.wake = null;
102
+ // A fresh generator starts with nothing in flight — any prior value
103
+ // belonged to a now-dead generator and reclaimInFlight() (called from the
104
+ // crash-retry path, if at all) already had its chance to act on it.
105
+ this.inFlight = null;
63
106
  while (true) {
64
107
  while (this.queue.length > 0) {
65
108
  if (gen !== this.generation)
@@ -67,6 +110,7 @@ export class Mailbox {
67
110
  const content = this.queue.shift();
68
111
  if (!content.startsWith(Mailbox.CONTINUE_PREFIX))
69
112
  this.consumedReal++;
113
+ this.inFlight = content;
70
114
  yield {
71
115
  type: 'user',
72
116
  message: { role: 'user', content },
@@ -75,6 +119,10 @@ export class Mailbox {
75
119
  };
76
120
  if (gen !== this.generation)
77
121
  return;
122
+ // Resumed for another pull: the consumer asked for the next message,
123
+ // which only happens once it's done with this one — proof the prior
124
+ // turn completed rather than the session dying mid-processing.
125
+ this.inFlight = null;
78
126
  }
79
127
  if (this.closed || gen !== this.generation)
80
128
  return;
@@ -83,12 +131,33 @@ export class Mailbox {
83
131
  return;
84
132
  }
85
133
  }
134
+ /** Called by the crash-retry path right after a session dies abnormally. If
135
+ * a message was mid-flight — shifted for the crashed generator's yield but
136
+ * never confirmed processed, because the generator was abandoned at that
137
+ * yield rather than resumed for another pull — put it back at the front of
138
+ * the queue so the replacement session (built by the next stream() call)
139
+ * gets it first instead of the queue staying empty and the new session
140
+ * parking on the mailbox forever. A no-op when nothing was in flight
141
+ * (clean session end, or nothing was ever pulled). */
142
+ reclaimInFlight() {
143
+ if (this.inFlight === null)
144
+ return;
145
+ const content = this.inFlight;
146
+ this.inFlight = null;
147
+ this.queue.unshift(content);
148
+ // Undo the increment made when this message was shifted — it was never
149
+ // actually processed, so the restart loop's progress/spin detection
150
+ // should not count it as consumed.
151
+ if (!content.startsWith(Mailbox.CONTINUE_PREFIX))
152
+ this.consumedReal--;
153
+ }
86
154
  /** Serialize mailbox state for checkpoint/resume - Pattern 3 */
87
155
  serialize() {
88
156
  return {
89
157
  queue: [...this.queue], // Copy array - queue is public for checkpoint access
90
158
  closed: this.closed,
91
159
  consumedReal: this.consumedReal,
160
+ ...(this.closeReasonValue ? { closeReason: this.closeReasonValue } : {}),
92
161
  };
93
162
  }
94
163
  /** Deserialize mailbox state from checkpoint - Pattern 3 */
@@ -96,9 +165,12 @@ export class Mailbox {
96
165
  this.queue = [...state.queue]; // Restore queue content
97
166
  this.closed = state.closed;
98
167
  this.consumedReal = state.consumedReal;
99
- // Reset generation and wake - a new stream() call will set fresh values
168
+ this.closeReasonValue = state.closeReason; // undefined for checkpoints predating this field
169
+ // Reset generation, wake, and in-flight tracking - a new stream() call
170
+ // will set fresh values; nothing from a checkpointed run is "in flight".
100
171
  this.generation = 0;
101
172
  this.wake = null;
173
+ this.inFlight = null;
102
174
  }
103
175
  }
104
176
  //# sourceMappingURL=mailbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../src/orgrt/mailbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mailbox.js","sourceRoot":"","sources":["../../../src/orgrt/mailbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { AgentRunner, AgentRunArgs, AgentMessage } from './agent-runner.js';
2
+ interface PiContentBlock {
3
+ type: string;
4
+ text?: string;
5
+ thinking?: string;
6
+ id?: string;
7
+ name?: string;
8
+ arguments?: Record<string, unknown>;
9
+ }
10
+ interface PiRpcMessage {
11
+ content?: PiContentBlock[];
12
+ }
13
+ /** Pure, transport-independent JSONL line decoder — feed it raw string
14
+ * chunks, get back every complete parsed object found so far (silently
15
+ * skipping malformed lines rather than throwing, matching this repo's
16
+ * other subprocess parsers). Exported for unit testing without a real
17
+ * subprocess. */
18
+ export declare class JsonlDecoder {
19
+ private buf;
20
+ feed(chunk: string): Record<string, unknown>[];
21
+ }
22
+ /** Encode a client→server RPC command as one LF-terminated JSON line.
23
+ * Exported for unit testing the exact wire format. */
24
+ export declare function encodePiRpcCommand(cmd: {
25
+ type: string;
26
+ message?: string;
27
+ id?: string;
28
+ }): string;
29
+ /** Extract assistant-visible text and org tool_call fences from a
30
+ * message_end event's `message.content` array. `thinking` blocks are
31
+ * dropped (internal reasoning, not meant for the bus); `toolCall` blocks
32
+ * are pi's own native tool calls, executed autonomously by pi itself —
33
+ * this runner never sees their results and doesn't need to. Exported for
34
+ * unit testing against fixture content arrays. */
35
+ export declare function extractPiRpcText(message: PiRpcMessage): string;
36
+ /** The subset of a spawned child process this runner needs — narrower than
37
+ * node:child_process's real type, and deliberately duck-typed so tests can
38
+ * supply a fake implementation (an EventEmitter-backed fake process) to
39
+ * exercise the full turn-completion state machine without a real `pi`
40
+ * binary. Given the residual protocol-inference risk documented in this
41
+ * file's header, testing the orchestration logic itself — not just the
42
+ * pure JSONL/extraction helpers — is the point of this seam. */
43
+ export interface PiRpcProcess {
44
+ stdin: {
45
+ write(data: string): void;
46
+ } | null;
47
+ stdout: {
48
+ on(event: 'data', cb: (chunk: Buffer) => void): void;
49
+ } | null;
50
+ stderr: {
51
+ on(event: 'data', cb: (chunk: Buffer) => void): void;
52
+ } | null;
53
+ on(event: 'close', cb: (code: number | null) => void): void;
54
+ on(event: 'error', cb: (err: Error) => void): void;
55
+ kill(signal?: string): void;
56
+ }
57
+ export type SpawnPiRpc = (bin: string, args: string[], opts: {
58
+ cwd: string;
59
+ env: Record<string, string | undefined>;
60
+ }) => PiRpcProcess;
61
+ export declare class PiRpcAgentRunner implements AgentRunner {
62
+ private piBin?;
63
+ private spawnFn;
64
+ constructor(piBin?: string | undefined, spawnFn?: SpawnPiRpc);
65
+ run(args: AgentRunArgs): AsyncIterable<AgentMessage>;
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=pi-rpc-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-rpc-runner.d.ts","sourceRoot":"","sources":["../../../src/orgrt/pi-rpc-runner.ts"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWjF,UAAU,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAAE;AAC7I,UAAU,YAAY;IAAG,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAAE;AAEtD;;;;kBAIkB;AAClB,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAM;IACjB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAW7C;CACF;AAED;uDACuD;AACvD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/F;AAED;;;;;mDAKmD;AACnD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAK9D;AAED;;;;;;iEAMiE;AACjE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE;QAAE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,MAAM,EAAE;QAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,KAAK,YAAY,CAAC;AAKvI,qBAAa,gBAAiB,YAAW,WAAW;IACtC,OAAO,CAAC,KAAK,CAAC;IAAU,OAAO,CAAC,OAAO;IAAnD,YAAoB,KAAK,CAAC,EAAE,MAAM,YAAA,EAAU,OAAO,GAAE,UAA8B,EAAI;IAEhF,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,YAAY,CAAC,CAgQ1D;CACF"}
@@ -0,0 +1,385 @@
1
+ // packages/@monomind/cli/src/orgrt/pi-rpc-runner.ts
2
+ /**
3
+ * PiRpcAgentRunner — AgentRunner impl backed by the Pi coding agent CLI's
4
+ * `--mode rpc` (session-lifetime, bidirectional JSON-over-stdio), instead of
5
+ * the default PiAgentRunner (pi-runner.ts), which spawns a fresh `pi --mode
6
+ * json` process per mailbox turn.
7
+ *
8
+ * OPT-IN, not the default. Select via role/org `runtime: 'pi-rpc'`. Prefer
9
+ * plain `runtime: 'pi'` (PiAgentRunner) unless you specifically want the
10
+ * benefit this buys: the subprocess stays alive for the WHOLE mailbox
11
+ * session, so conversational context carries naturally (no --session-dir
12
+ * resume guessing) and there's no per-turn spawn/bootstrap cost.
13
+ *
14
+ * Protocol — JSON objects, one per line (LF-delimited). RESOLVED against a
15
+ * live pi v0.73.1 install (issue #179): pi's docs (docs/rpc.md, bundled with
16
+ * the package) define `agent_end` — "Emitted when the agent completes.
17
+ * Contains all messages generated during this run." — as a distinct event
18
+ * from `message_end`/`turn_end`, and it's exactly the "prompt is fully done"
19
+ * signal this runner needs. Confirmed live with a prompt that made pi run 3
20
+ * of its own native tools in sequence (read → edit → bash): the run produced
21
+ * 4 separate turn_start/turn_end cycles and many message_end events, but
22
+ * EXACTLY ONE agent_end, firing only after the last turn closed. This
23
+ * replaces the old get_state-polling heuristic entirely — no more `isStreaming`
24
+ * ambiguity to worry about.
25
+ *
26
+ * Client → server (this runner sends), each with an optional "id" for
27
+ * response correlation:
28
+ * {"type":"prompt","message":"<text>"} — new/continuing turn
29
+ * {"type":"abort"} — not used by this runner
30
+ *
31
+ * Server → client (only agent_end is acted on; everything else — agent_start,
32
+ * turn_start/turn_end, message_start/message_update/message_end,
33
+ * tool_execution_* — is drained and ignored):
34
+ * {"type":"response","command":"prompt","success":true}
35
+ * {"type":"agent_end","messages":[
36
+ * {"role":"user","content":[{"type":"text","text":"..."}]},
37
+ * {"role":"assistant","content":[
38
+ * {"type":"thinking","thinking":"..."},
39
+ * {"type":"text","text":"..."},
40
+ * {"type":"toolCall","id":"call_1","name":"bash","arguments":{...}}
41
+ * ],"usage":{"input":N,"output":N,"totalTokens":N,"cost":{"total":N}}},
42
+ * {"role":"toolResult","content":[{"type":"text","text":"..."}]},
43
+ * ... (repeats per internal turn — one "assistant" entry per turn,
44
+ * each with ITS OWN per-turn `usage`, not cumulative)
45
+ * ]}
46
+ *
47
+ * Usage accounting: `agent_end.messages` includes one `assistant` entry per
48
+ * internal turn, each carrying that turn's OWN `usage` (confirmed live: a
49
+ * 4-turn run had usage.output of 65/109/13/22 across the 4 assistant
50
+ * entries — small, turn-scoped numbers, not a running cumulative total).
51
+ * This runner sums `usage.input`/`usage.output` across every assistant
52
+ * entry in `agent_end.messages` to get the correct total for the prompt.
53
+ * The PREVIOUS implementation (overwriting from `message_update`'s running
54
+ * total, which only tracks the CURRENT assistant message) silently
55
+ * undercounted any prompt that triggered more than one internal turn —
56
+ * confirmed via the same live test above.
57
+ *
58
+ * Org tools (org_send, knowledge_search, ask_human, …) — FENCE PROTOCOL:
59
+ * Pi's own native tools (bash, file edits) execute autonomously inside pi
60
+ * itself and never reach this runner — only org tools ride the shared
61
+ * tool-fence protocol (tool-fence.ts), extracted from the assistant text
62
+ * in `agent_end.messages` and fed back as a new `prompt` command in the
63
+ * SAME session.
64
+ */
65
+ import { spawn } from 'node:child_process';
66
+ import { join } from 'node:path';
67
+ import { buildToolProtocol, parseToolCalls, executeToolCall, formatToolResults, MAX_TOOL_ROUNDS, TOOL_CALL_RE } from './tool-fence.js';
68
+ /** Upper bound on how long a single prompt's wait for `agent_end` may run
69
+ * before the mid-session silence watchdog (below) considers pi wedged.
70
+ * Distinct from a hard per-turn deadline — a long-running prompt that's
71
+ * still producing events well within this window is not a hang; only
72
+ * total SILENCE past this bound is. */
73
+ const SETTLE_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
74
+ const STARTUP_GRACE_MS = 45_000;
75
+ /** Pure, transport-independent JSONL line decoder — feed it raw string
76
+ * chunks, get back every complete parsed object found so far (silently
77
+ * skipping malformed lines rather than throwing, matching this repo's
78
+ * other subprocess parsers). Exported for unit testing without a real
79
+ * subprocess. */
80
+ export class JsonlDecoder {
81
+ buf = '';
82
+ feed(chunk) {
83
+ this.buf += chunk;
84
+ const parts = this.buf.split('\n');
85
+ this.buf = parts.pop() ?? '';
86
+ const out = [];
87
+ for (const line of parts) {
88
+ const trimmed = line.trim();
89
+ if (!trimmed)
90
+ continue;
91
+ try {
92
+ out.push(JSON.parse(trimmed));
93
+ }
94
+ catch { /* skip malformed line */ }
95
+ }
96
+ return out;
97
+ }
98
+ }
99
+ /** Encode a client→server RPC command as one LF-terminated JSON line.
100
+ * Exported for unit testing the exact wire format. */
101
+ export function encodePiRpcCommand(cmd) {
102
+ return JSON.stringify(cmd) + '\n';
103
+ }
104
+ /** Extract assistant-visible text and org tool_call fences from a
105
+ * message_end event's `message.content` array. `thinking` blocks are
106
+ * dropped (internal reasoning, not meant for the bus); `toolCall` blocks
107
+ * are pi's own native tool calls, executed autonomously by pi itself —
108
+ * this runner never sees their results and doesn't need to. Exported for
109
+ * unit testing against fixture content arrays. */
110
+ export function extractPiRpcText(message) {
111
+ return (message.content ?? [])
112
+ .filter((b) => b.type === 'text' && typeof b.text === 'string')
113
+ .map((b) => b.text)
114
+ .join('\n');
115
+ }
116
+ const defaultSpawnPiRpc = (bin, args, opts) => spawn(bin, args, { cwd: opts.cwd, env: opts.env, stdio: ['pipe', 'pipe', 'pipe'] });
117
+ export class PiRpcAgentRunner {
118
+ piBin;
119
+ spawnFn;
120
+ constructor(piBin, spawnFn = defaultSpawnPiRpc) {
121
+ this.piBin = piBin;
122
+ this.spawnFn = spawnFn;
123
+ }
124
+ async *run(args) {
125
+ const bin = this.piBin || process.env.PI_CLI_BIN || 'pi';
126
+ const sessionDir = join(args.cwd, '.monomind-pi-session');
127
+ // No --approve: confirmed against a live v0.73.1 install that pi rejects
128
+ // it outright ("Unknown option: --approve") — no such flag exists.
129
+ // Confirmed unnecessary too: built-in tools (read/edit/bash) execute
130
+ // autonomously in --mode rpc with zero confirmation gating (a live
131
+ // multi-tool prompt — read, edit, bash — ran end-to-end with no prompt
132
+ // or block). See #179.
133
+ const cliArgs = ['--mode', 'rpc', '--session-dir', sessionDir];
134
+ if (args.model)
135
+ cliArgs.push('--model', args.model);
136
+ const child = this.spawnFn(bin, cliArgs, {
137
+ cwd: args.cwd,
138
+ env: { ...process.env, PI_TELEMETRY: '0', PI_SKIP_VERSION_CHECK: '1', ...args.env },
139
+ });
140
+ let stderrTail = '';
141
+ child.stderr?.on('data', (c) => { stderrTail = (stderrTail + c.toString()).slice(-4000); });
142
+ const decoder = new JsonlDecoder();
143
+ const eventQueue = [];
144
+ const waiters = [];
145
+ let closed = false;
146
+ let closeCode = null;
147
+ // Bumped only by REAL stdout activity (not the synthetic __closed__/
148
+ // __error__/__hang__ events pushed below) — see silenceWatchdog further
149
+ // down, which uses this to detect a mid-session hang.
150
+ let lastEventAt = Date.now();
151
+ const pushEvents = (evs) => {
152
+ for (const ev of evs) {
153
+ const waiter = waiters.shift();
154
+ if (waiter)
155
+ waiter(ev);
156
+ else
157
+ eventQueue.push(ev);
158
+ }
159
+ };
160
+ child.stdout?.on('data', (c) => { lastEventAt = Date.now(); pushEvents(decoder.feed(c.toString())); });
161
+ // Distinct from `closed` (which WE set to stop routing new commands, e.g.
162
+ // as soon as a hang is suspected) — this is only true once the OS
163
+ // confirms the process actually exited. The finally block below uses it
164
+ // to decide whether a pending SIGKILL escalation is still needed.
165
+ let processExited = false;
166
+ child.on('close', (code) => { closed = true; processExited = true; closeCode = code; pushEvents([{ type: '__closed__', code }]); });
167
+ child.on('error', (err) => { closed = true; pushEvents([{ type: '__error__', error: err }]); });
168
+ const nextEvent = () => {
169
+ const queued = eventQueue.shift();
170
+ if (queued)
171
+ return Promise.resolve(queued);
172
+ if (closed)
173
+ return Promise.resolve({ type: '__closed__', code: closeCode });
174
+ return new Promise((resolve) => waiters.push(resolve));
175
+ };
176
+ const send = (cmd) => {
177
+ child.stdin?.write(encodePiRpcCommand(cmd));
178
+ };
179
+ // SIGTERM→SIGKILL escalation, matching the other subprocess runners'
180
+ // pattern — a hang detection that only ever sends SIGTERM would leave a
181
+ // zombie process behind if pi ignores it.
182
+ const KILL_GRACE_MS = 5000;
183
+ let killTimer;
184
+ const killChild = () => {
185
+ try {
186
+ child.kill('SIGTERM');
187
+ }
188
+ catch { /* already gone */ }
189
+ killTimer = setTimeout(() => { try {
190
+ child.kill('SIGKILL');
191
+ }
192
+ catch { /* already gone */ } }, KILL_GRACE_MS);
193
+ killTimer.unref?.();
194
+ };
195
+ // Startup-hang detection — same rationale as the other subprocess
196
+ // runners' STARTUP_GRACE_MS, applied once at process start rather than
197
+ // per turn since the process is long-lived here.
198
+ let sawAnyEvent = false;
199
+ let hangTimer = setTimeout(() => {
200
+ if (!sawAnyEvent) {
201
+ closed = true;
202
+ killChild();
203
+ pushEvents([{ type: '__hang__' }]);
204
+ }
205
+ }, STARTUP_GRACE_MS);
206
+ const disarmHang = () => { if (!sawAnyEvent) {
207
+ sawAnyEvent = true;
208
+ if (hangTimer) {
209
+ clearTimeout(hangTimer);
210
+ hangTimer = undefined;
211
+ }
212
+ } };
213
+ // Rolling watchdog — catches a hang AFTER the startup check has already
214
+ // passed (e.g. pi wedges mid-session on turn 5), which the one-shot
215
+ // startup timer above can't see since it disarms itself on the first
216
+ // event. Checked periodically rather than a single per-turn timer,
217
+ // since a turn's own wait can legitimately take a long time (real model
218
+ // latency) — what matters is total SILENCE from the process, not how
219
+ // long any one turn takes.
220
+ //
221
+ // PAUSED (not just clock-bumped) whenever this runner isn't actually
222
+ // waiting on pi — either an org tool call is in flight (executeToolCall
223
+ // can run ask_human, which waits on a real person and can legitimately
224
+ // take far longer than MID_SESSION_SILENCE_MS), or there's no turn in
225
+ // flight at all: `for await (const p of args.prompt)` blocks on the
226
+ // ROLE'S OWN MAILBOX (session.ts), which idles for as long as the role
227
+ // has nothing new to do — completely normal, and NOT "pi is wedged".
228
+ // A pure "bump lastEventAt" approach would still let the watchdog fire
229
+ // mid-wait for anything slower than the silence window itself; pausing
230
+ // the check entirely for the duration is the correct fix in both cases.
231
+ let toolCallInFlight = false;
232
+ let turnInFlight = false;
233
+ const MID_SESSION_SILENCE_MS = SETTLE_TIMEOUT_MS; // reuse the same bound as the ceiling for total event silence
234
+ const silenceWatchdog = setInterval(() => {
235
+ if (closed || toolCallInFlight || !turnInFlight)
236
+ return;
237
+ if (Date.now() - lastEventAt > MID_SESSION_SILENCE_MS) {
238
+ closed = true;
239
+ killChild();
240
+ pushEvents([{ type: '__hang__' }]);
241
+ }
242
+ }, 30_000);
243
+ silenceWatchdog.unref?.();
244
+ try {
245
+ let first = true;
246
+ for await (const p of args.prompt) {
247
+ const text = typeof p === 'string' ? p : (p?.message?.content ?? String(p ?? ''));
248
+ let nextMessage = first ? `${args.systemPrompt}${buildToolProtocol(args.tools)}\n\n---\n\n${text}` : text;
249
+ first = false;
250
+ let turnInputTokens = 0;
251
+ let turnOutputTokens = 0;
252
+ let round = 0;
253
+ // The silence watchdog only applies from here to the end of this
254
+ // turn's work — see its declaration above. Always cleared in
255
+ // `finally` so a thrown error (which exits the loop) can't leave it
256
+ // stuck true and permanently disable the watchdog for the rest of
257
+ // the session.
258
+ turnInFlight = true;
259
+ try {
260
+ turnLoop: for (;;) {
261
+ send({ type: 'prompt', message: nextMessage });
262
+ let agentEndMessages;
263
+ for (;;) {
264
+ const ev = await nextEvent();
265
+ disarmHang();
266
+ const kind = ev.type;
267
+ if (kind === '__closed__' || kind === '__error__' || kind === '__hang__') {
268
+ if (kind === '__error__') {
269
+ // Rethrow the ORIGINAL spawn error (not a fresh generic one)
270
+ // so the outer catch's `err.code === 'ENOENT'` check below
271
+ // can actually match it — a wrapped/re-created Error loses
272
+ // the .code property, which silently broke the "missing pi
273
+ // binary" install-instructions message.
274
+ throw ev.error;
275
+ }
276
+ const hangSuspected = kind === '__hang__';
277
+ throw new Error(hangSuspected
278
+ ? `PiRpcAgentRunner: pi produced no output within ${STARTUP_GRACE_MS / 1000}s and was killed. ` +
279
+ 'This usually means it is stuck on a prompt headless mode has no way to answer. Run `pi` ' +
280
+ `once manually in a real terminal in this project to check, then retry.${stderrTail ? `\nstderr: ${stderrTail.slice(-500)}` : ''}`
281
+ : `PiRpcAgentRunner: pi rpc process ended unexpectedly (${kind})` +
282
+ (stderrTail ? `\nstderr: ${stderrTail.slice(-500)}` : ''));
283
+ }
284
+ if (kind === 'agent_end') {
285
+ // See file header: agent_end is pi's own, confirmed-live,
286
+ // single unambiguous "this prompt is fully done" signal —
287
+ // fires exactly once even across multiple internal
288
+ // turn_start/turn_end cycles from pi's own native tool use.
289
+ agentEndMessages = ev.messages;
290
+ break;
291
+ }
292
+ // agent_start, turn_start/turn_end, message_start/message_update/
293
+ // message_end, tool_execution_* (pi's own native tools), other
294
+ // response acks — all drained and ignored; agent_end alone
295
+ // carries everything this runner needs (final text + usage).
296
+ }
297
+ if (!agentEndMessages)
298
+ break turnLoop; // process closed before agent_end — nothing to extract this round
299
+ const assistantMessages = agentEndMessages.filter((m) => m.role === 'assistant');
300
+ for (const m of assistantMessages) {
301
+ // Summed, not overwritten: each assistant entry carries ITS OWN
302
+ // per-turn usage (confirmed live — see file header), so summing
303
+ // across every internal turn in this agent_end is the correct
304
+ // total for the prompt just sent.
305
+ if (m.usage) {
306
+ turnInputTokens += m.usage.input ?? 0;
307
+ turnOutputTokens += m.usage.output ?? 0;
308
+ }
309
+ }
310
+ const rawText = assistantMessages.map((m) => extractPiRpcText(m)).filter(Boolean).join('\n');
311
+ const visibleText = rawText.replace(TOOL_CALL_RE, '').trim();
312
+ if (visibleText)
313
+ yield { type: 'assistant', text: visibleText };
314
+ const malformed = [];
315
+ const calls = parseToolCalls([rawText], (raw, err) => malformed.push(`[monomind] ignored malformed tool_call fence (${err}): ${raw.slice(0, 200)}`));
316
+ for (const note of malformed)
317
+ yield { type: 'assistant', text: note };
318
+ if (calls.length === 0)
319
+ break turnLoop;
320
+ round += 1;
321
+ if (round > MAX_TOOL_ROUNDS) {
322
+ yield { type: 'assistant', text: `[monomind] tool-call round cap (${MAX_TOOL_ROUNDS}) reached — dropping ${calls.length} pending tool call(s)` };
323
+ break turnLoop;
324
+ }
325
+ // Pause the silence watchdog for the duration — see its
326
+ // declaration above for why a call like ask_human blocking on a
327
+ // human isn't "pi is wedged". Always un-paused in `finally` so an
328
+ // exception out of executeToolCall can't leave it stuck off.
329
+ toolCallInFlight = true;
330
+ const results = [];
331
+ try {
332
+ for (const call of calls)
333
+ results.push(await executeToolCall(args.tools, call, args.canUseTool));
334
+ }
335
+ finally {
336
+ toolCallInFlight = false;
337
+ lastEventAt = Date.now(); // the post-tool-call silence window starts fresh, not already partway elapsed
338
+ }
339
+ nextMessage = formatToolResults(calls, results);
340
+ }
341
+ }
342
+ finally {
343
+ turnInFlight = false;
344
+ }
345
+ yield {
346
+ type: 'result',
347
+ subtype: 'success',
348
+ input_tokens: turnInputTokens,
349
+ output_tokens: turnOutputTokens,
350
+ };
351
+ }
352
+ }
353
+ catch (err) {
354
+ if (err.code === 'ENOENT') {
355
+ throw new Error('PiRpcAgentRunner requires the Pi coding agent CLI (pi) on PATH. ' +
356
+ 'Install it: npm install -g @mariozechner/pi-coding-agent, then configure a ' +
357
+ 'provider. Or unset the runtime to use Claude.');
358
+ }
359
+ throw err;
360
+ }
361
+ finally {
362
+ if (hangTimer)
363
+ clearTimeout(hangTimer);
364
+ clearInterval(silenceWatchdog);
365
+ if (processExited) {
366
+ // Process is confirmed dead — any pending SIGKILL escalation from
367
+ // killChild() is no longer needed.
368
+ if (killTimer)
369
+ clearTimeout(killTimer);
370
+ }
371
+ else {
372
+ // NOT confirmed dead (e.g. the hang/silence watchdog fired and
373
+ // sent SIGTERM, but the process hasn't closed yet). Clearing
374
+ // killTimer here would cancel the SIGKILL escalation mid-grace-
375
+ // period and orphan a process that's ignoring SIGTERM — exactly
376
+ // the wedged case these watchdogs exist to handle. Leave the
377
+ // existing (unref'd) escalation timer running, or arm a fresh one
378
+ // if we're exiting via a path that never called killChild() at all.
379
+ if (!killTimer)
380
+ killChild();
381
+ }
382
+ }
383
+ }
384
+ }
385
+ //# sourceMappingURL=pi-rpc-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-rpc-runner.js","sourceRoot":"","sources":["../../../src/orgrt/pi-rpc-runner.ts"],"names":[],"mappings":"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"}