@monoes/monomindcli 2.8.3 → 2.9.1

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 (377) hide show
  1. package/.claude/helpers/auto-memory-hook.mjs +0 -0
  2. package/.claude/helpers/handlers/route-handler.cjs +12 -0
  3. package/.claude/helpers/handlers/session-restore-handler.cjs +28 -7
  4. package/.claude/helpers/hook-handler.cjs +0 -0
  5. package/.claude/helpers/utils/micro-agents.cjs +22 -0
  6. package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +11 -6
  7. package/.claude/skills/monodesign/scripts/live-inject.mjs +20 -7
  8. package/.claude/skills/monodesign/scripts/live-server.mjs +38 -2
  9. package/LICENSE +191 -0
  10. package/README.md +8 -6
  11. package/dist/src/browser/dashboard/server.d.ts +5 -0
  12. package/dist/src/browser/dashboard/server.d.ts.map +1 -1
  13. package/dist/src/browser/dashboard/server.js +59 -4
  14. package/dist/src/browser/dashboard/server.js.map +1 -1
  15. package/dist/src/browser/dashboard/ui.html +18 -8
  16. package/dist/src/browser/workflow/store.d.ts.map +1 -1
  17. package/dist/src/browser/workflow/store.js +3 -2
  18. package/dist/src/browser/workflow/store.js.map +1 -1
  19. package/dist/src/capabilities/cap-documents.d.ts.map +1 -1
  20. package/dist/src/capabilities/cap-documents.js +14 -9
  21. package/dist/src/capabilities/cap-documents.js.map +1 -1
  22. package/dist/src/commands/design-palette.d.ts +5 -0
  23. package/dist/src/commands/design-palette.d.ts.map +1 -1
  24. package/dist/src/commands/design-palette.js +8 -5
  25. package/dist/src/commands/design-palette.js.map +1 -1
  26. package/dist/src/commands/doctor.d.ts.map +1 -1
  27. package/dist/src/commands/doctor.js +22 -18
  28. package/dist/src/commands/doctor.js.map +1 -1
  29. package/dist/src/commands/download-embeddings.d.ts +8 -0
  30. package/dist/src/commands/download-embeddings.d.ts.map +1 -0
  31. package/dist/src/commands/download-embeddings.js +34 -0
  32. package/dist/src/commands/download-embeddings.js.map +1 -0
  33. package/dist/src/commands/hooks.d.ts.map +1 -1
  34. package/dist/src/commands/hooks.js +14 -0
  35. package/dist/src/commands/hooks.js.map +1 -1
  36. package/dist/src/commands/index.d.ts.map +1 -1
  37. package/dist/src/commands/index.js +4 -0
  38. package/dist/src/commands/index.js.map +1 -1
  39. package/dist/src/commands/init-wizard.js +1 -1
  40. package/dist/src/commands/init-wizard.js.map +1 -1
  41. package/dist/src/commands/init.d.ts.map +1 -1
  42. package/dist/src/commands/init.js +48 -1
  43. package/dist/src/commands/init.js.map +1 -1
  44. package/dist/src/commands/monograph.d.ts.map +1 -1
  45. package/dist/src/commands/monograph.js +35 -1
  46. package/dist/src/commands/monograph.js.map +1 -1
  47. package/dist/src/commands/org-observe.d.ts +10 -0
  48. package/dist/src/commands/org-observe.d.ts.map +1 -1
  49. package/dist/src/commands/org-observe.js +195 -31
  50. package/dist/src/commands/org-observe.js.map +1 -1
  51. package/dist/src/commands/org.d.ts +1 -0
  52. package/dist/src/commands/org.d.ts.map +1 -1
  53. package/dist/src/commands/org.js +139 -3
  54. package/dist/src/commands/org.js.map +1 -1
  55. package/dist/src/commands/route.d.ts +1 -9
  56. package/dist/src/commands/route.d.ts.map +1 -1
  57. package/dist/src/commands/route.js +42 -65
  58. package/dist/src/commands/route.js.map +1 -1
  59. package/dist/src/commands/security-cve.d.ts.map +1 -1
  60. package/dist/src/commands/security-cve.js +2 -1
  61. package/dist/src/commands/security-cve.js.map +1 -1
  62. package/dist/src/index.d.ts +0 -10
  63. package/dist/src/index.d.ts.map +1 -1
  64. package/dist/src/index.js +4 -15
  65. package/dist/src/index.js.map +1 -1
  66. package/dist/src/init/copy-assets.d.ts +17 -0
  67. package/dist/src/init/copy-assets.d.ts.map +1 -0
  68. package/dist/src/init/copy-assets.js +271 -0
  69. package/dist/src/init/copy-assets.js.map +1 -0
  70. package/dist/src/init/executor.d.ts +2 -30
  71. package/dist/src/init/executor.d.ts.map +1 -1
  72. package/dist/src/init/executor.js +56 -2493
  73. package/dist/src/init/executor.js.map +1 -1
  74. package/dist/src/init/geminimd-generator.js +2 -2
  75. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  76. package/dist/src/init/helpers-generator.js +9 -0
  77. package/dist/src/init/helpers-generator.js.map +1 -1
  78. package/dist/src/init/kimi-generator.js +3 -3
  79. package/dist/src/init/kimi-generator.js.map +1 -1
  80. package/dist/src/init/settings-generator.d.ts.map +1 -1
  81. package/dist/src/init/settings-generator.js +0 -4
  82. package/dist/src/init/settings-generator.js.map +1 -1
  83. package/dist/src/init/shared.d.ts +112 -0
  84. package/dist/src/init/shared.d.ts.map +1 -0
  85. package/dist/src/init/shared.js +475 -0
  86. package/dist/src/init/shared.js.map +1 -0
  87. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  88. package/dist/src/init/statusline-generator.js +37 -0
  89. package/dist/src/init/statusline-generator.js.map +1 -1
  90. package/dist/src/init/types.d.ts +1 -1
  91. package/dist/src/init/types.d.ts.map +1 -1
  92. package/dist/src/init/upgrade.d.ts +34 -0
  93. package/dist/src/init/upgrade.d.ts.map +1 -0
  94. package/dist/src/init/upgrade.js +477 -0
  95. package/dist/src/init/upgrade.js.map +1 -0
  96. package/dist/src/init/write-antigravity.d.ts +13 -0
  97. package/dist/src/init/write-antigravity.d.ts.map +1 -0
  98. package/dist/src/init/write-antigravity.js +117 -0
  99. package/dist/src/init/write-antigravity.js.map +1 -0
  100. package/dist/src/init/write-capabilities.d.ts +9 -0
  101. package/dist/src/init/write-capabilities.d.ts.map +1 -0
  102. package/dist/src/init/write-capabilities.js +392 -0
  103. package/dist/src/init/write-capabilities.js.map +1 -0
  104. package/dist/src/init/write-claude.d.ts +25 -0
  105. package/dist/src/init/write-claude.d.ts.map +1 -0
  106. package/dist/src/init/write-claude.js +279 -0
  107. package/dist/src/init/write-claude.js.map +1 -0
  108. package/dist/src/init/write-kimicode.d.ts +19 -0
  109. package/dist/src/init/write-kimicode.d.ts.map +1 -0
  110. package/dist/src/init/write-kimicode.js +223 -0
  111. package/dist/src/init/write-kimicode.js.map +1 -0
  112. package/dist/src/init/write-opencode.d.ts +14 -0
  113. package/dist/src/init/write-opencode.d.ts.map +1 -0
  114. package/dist/src/init/write-opencode.js +130 -0
  115. package/dist/src/init/write-opencode.js.map +1 -0
  116. package/dist/src/init/write-runtime-config.d.ts +14 -0
  117. package/dist/src/init/write-runtime-config.d.ts.map +1 -0
  118. package/dist/src/init/write-runtime-config.js +214 -0
  119. package/dist/src/init/write-runtime-config.js.map +1 -0
  120. package/dist/src/init/write-sample-org.d.ts +9 -0
  121. package/dist/src/init/write-sample-org.d.ts.map +1 -0
  122. package/dist/src/init/write-sample-org.js +39 -0
  123. package/dist/src/init/write-sample-org.js.map +1 -0
  124. package/dist/src/knowledge/eval/golden-set.js +1 -1
  125. package/dist/src/knowledge/eval/golden-set.js.map +1 -1
  126. package/dist/src/mcp-client.d.ts.map +1 -1
  127. package/dist/src/mcp-client.js +7 -3
  128. package/dist/src/mcp-client.js.map +1 -1
  129. package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
  130. package/dist/src/mcp-tools/analyze-tools.js +2 -25
  131. package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
  132. package/dist/src/mcp-tools/auto-install.d.ts.map +1 -1
  133. package/dist/src/mcp-tools/auto-install.js +2 -1
  134. package/dist/src/mcp-tools/auto-install.js.map +1 -1
  135. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  136. package/dist/src/mcp-tools/hooks-routing.js +26 -0
  137. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  138. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  139. package/dist/src/mcp-tools/memory-tools.js +2 -37
  140. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  141. package/dist/src/mcp-tools/monodesign-tools.d.ts +19 -0
  142. package/dist/src/mcp-tools/monodesign-tools.d.ts.map +1 -0
  143. package/dist/src/mcp-tools/monodesign-tools.js +233 -0
  144. package/dist/src/mcp-tools/monodesign-tools.js.map +1 -0
  145. package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts +5 -0
  146. package/dist/src/mcp-tools/monograph/agent-history-tools.d.ts.map +1 -0
  147. package/dist/src/mcp-tools/monograph/agent-history-tools.js +177 -0
  148. package/dist/src/mcp-tools/monograph/agent-history-tools.js.map +1 -0
  149. package/dist/src/mcp-tools/monograph/build-tools.d.ts +9 -0
  150. package/dist/src/mcp-tools/monograph/build-tools.d.ts.map +1 -0
  151. package/dist/src/mcp-tools/monograph/build-tools.js +299 -0
  152. package/dist/src/mcp-tools/monograph/build-tools.js.map +1 -0
  153. package/dist/src/mcp-tools/monograph/group-tools.d.ts +10 -0
  154. package/dist/src/mcp-tools/monograph/group-tools.d.ts.map +1 -0
  155. package/dist/src/mcp-tools/monograph/group-tools.js +225 -0
  156. package/dist/src/mcp-tools/monograph/group-tools.js.map +1 -0
  157. package/dist/src/mcp-tools/monograph/health-tools.d.ts +6 -0
  158. package/dist/src/mcp-tools/monograph/health-tools.d.ts.map +1 -0
  159. package/dist/src/mcp-tools/monograph/health-tools.js +113 -0
  160. package/dist/src/mcp-tools/monograph/health-tools.js.map +1 -0
  161. package/dist/src/mcp-tools/monograph/impact-tools.d.ts +9 -0
  162. package/dist/src/mcp-tools/monograph/impact-tools.d.ts.map +1 -0
  163. package/dist/src/mcp-tools/monograph/impact-tools.js +532 -0
  164. package/dist/src/mcp-tools/monograph/impact-tools.js.map +1 -0
  165. package/dist/src/mcp-tools/monograph/index.d.ts +10 -0
  166. package/dist/src/mcp-tools/monograph/index.d.ts.map +1 -0
  167. package/dist/src/mcp-tools/monograph/index.js +73 -0
  168. package/dist/src/mcp-tools/monograph/index.js.map +1 -0
  169. package/dist/src/mcp-tools/monograph/query-tools.d.ts +11 -0
  170. package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -0
  171. package/dist/src/mcp-tools/monograph/query-tools.js +500 -0
  172. package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -0
  173. package/dist/src/mcp-tools/monograph/shared.d.ts +64 -0
  174. package/dist/src/mcp-tools/monograph/shared.d.ts.map +1 -0
  175. package/dist/src/mcp-tools/monograph/shared.js +215 -0
  176. package/dist/src/mcp-tools/monograph/shared.js.map +1 -0
  177. package/dist/src/mcp-tools/monograph/visualize-tools.d.ts +10 -0
  178. package/dist/src/mcp-tools/monograph/visualize-tools.d.ts.map +1 -0
  179. package/dist/src/mcp-tools/monograph/visualize-tools.js +382 -0
  180. package/dist/src/mcp-tools/monograph/visualize-tools.js.map +1 -0
  181. package/dist/src/mcp-tools/monograph-tools.d.ts +4 -23
  182. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  183. package/dist/src/mcp-tools/monograph-tools.js +4 -2439
  184. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  185. package/dist/src/mcp-tools/monomind-tools.d.ts +8 -0
  186. package/dist/src/mcp-tools/monomind-tools.d.ts.map +1 -1
  187. package/dist/src/mcp-tools/monomind-tools.js +13 -1
  188. package/dist/src/mcp-tools/monomind-tools.js.map +1 -1
  189. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -1
  190. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +31 -2
  191. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js.map +1 -1
  192. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
  193. package/dist/src/mcp-tools/terminal-tools.js +31 -1
  194. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  195. package/dist/src/mcp-tools/types.d.ts +8 -27
  196. package/dist/src/mcp-tools/types.d.ts.map +1 -1
  197. package/dist/src/mcp-tools/types.js +9 -91
  198. package/dist/src/mcp-tools/types.js.map +1 -1
  199. package/dist/src/memory/file-permissions.d.ts +15 -0
  200. package/dist/src/memory/file-permissions.d.ts.map +1 -0
  201. package/dist/src/memory/file-permissions.js +25 -0
  202. package/dist/src/memory/file-permissions.js.map +1 -0
  203. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  204. package/dist/src/memory/memory-bridge.js +94 -34
  205. package/dist/src/memory/memory-bridge.js.map +1 -1
  206. package/dist/src/memory/memory-crud.d.ts.map +1 -1
  207. package/dist/src/memory/memory-crud.js +298 -275
  208. package/dist/src/memory/memory-crud.js.map +1 -1
  209. package/dist/src/memory/memory-initializer.d.ts +2 -4
  210. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  211. package/dist/src/memory/memory-initializer.js +53 -76
  212. package/dist/src/memory/memory-initializer.js.map +1 -1
  213. package/dist/src/memory/memory-migrations.d.ts +1 -14
  214. package/dist/src/memory/memory-migrations.d.ts.map +1 -1
  215. package/dist/src/memory/memory-migrations.js +52 -105
  216. package/dist/src/memory/memory-migrations.js.map +1 -1
  217. package/dist/src/memory/sona-optimizer.d.ts +1 -1
  218. package/dist/src/memory/sona-optimizer.js +1 -1
  219. package/dist/src/monovector/index.d.ts +16 -19
  220. package/dist/src/monovector/index.d.ts.map +1 -1
  221. package/dist/src/monovector/index.js +50 -8
  222. package/dist/src/monovector/index.js.map +1 -1
  223. package/dist/src/orgrt/approvals.d.ts +16 -0
  224. package/dist/src/orgrt/approvals.d.ts.map +1 -0
  225. package/dist/src/orgrt/approvals.js +72 -0
  226. package/dist/src/orgrt/approvals.js.map +1 -0
  227. package/dist/src/orgrt/bus.d.ts.map +1 -1
  228. package/dist/src/orgrt/bus.js +21 -0
  229. package/dist/src/orgrt/bus.js.map +1 -1
  230. package/dist/src/orgrt/checkpoint-ops.d.ts +19 -0
  231. package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -0
  232. package/dist/src/orgrt/checkpoint-ops.js +219 -0
  233. package/dist/src/orgrt/checkpoint-ops.js.map +1 -0
  234. package/dist/src/orgrt/checkpoint.d.ts +33 -1
  235. package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
  236. package/dist/src/orgrt/checkpoint.js +50 -6
  237. package/dist/src/orgrt/checkpoint.js.map +1 -1
  238. package/dist/src/orgrt/cross-org.d.ts +32 -0
  239. package/dist/src/orgrt/cross-org.d.ts.map +1 -0
  240. package/dist/src/orgrt/cross-org.js +256 -0
  241. package/dist/src/orgrt/cross-org.js.map +1 -0
  242. package/dist/src/orgrt/daemon.d.ts +131 -157
  243. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  244. package/dist/src/orgrt/daemon.js +356 -966
  245. package/dist/src/orgrt/daemon.js.map +1 -1
  246. package/dist/src/orgrt/decisions.d.ts +33 -0
  247. package/dist/src/orgrt/decisions.d.ts.map +1 -0
  248. package/dist/src/orgrt/decisions.js +169 -0
  249. package/dist/src/orgrt/decisions.js.map +1 -0
  250. package/dist/src/orgrt/kimicode-runner.d.ts.map +1 -1
  251. package/dist/src/orgrt/kimicode-runner.js +5 -1
  252. package/dist/src/orgrt/kimicode-runner.js.map +1 -1
  253. package/dist/src/orgrt/opencode-runner.d.ts.map +1 -1
  254. package/dist/src/orgrt/opencode-runner.js +10 -2
  255. package/dist/src/orgrt/opencode-runner.js.map +1 -1
  256. package/dist/src/orgrt/org-memory.d.ts +45 -0
  257. package/dist/src/orgrt/org-memory.d.ts.map +1 -0
  258. package/dist/src/orgrt/org-memory.js +220 -0
  259. package/dist/src/orgrt/org-memory.js.map +1 -0
  260. package/dist/src/orgrt/policy.d.ts +4 -0
  261. package/dist/src/orgrt/policy.d.ts.map +1 -1
  262. package/dist/src/orgrt/policy.js +13 -1
  263. package/dist/src/orgrt/policy.js.map +1 -1
  264. package/dist/src/orgrt/prechecks.d.ts +15 -0
  265. package/dist/src/orgrt/prechecks.d.ts.map +1 -0
  266. package/dist/src/orgrt/prechecks.js +21 -0
  267. package/dist/src/orgrt/prechecks.js.map +1 -0
  268. package/dist/src/orgrt/questions.d.ts +39 -0
  269. package/dist/src/orgrt/questions.d.ts.map +1 -0
  270. package/dist/src/orgrt/questions.js +135 -0
  271. package/dist/src/orgrt/questions.js.map +1 -0
  272. package/dist/src/orgrt/remote.d.ts +25 -0
  273. package/dist/src/orgrt/remote.d.ts.map +1 -0
  274. package/dist/src/orgrt/remote.js +73 -0
  275. package/dist/src/orgrt/remote.js.map +1 -0
  276. package/dist/src/orgrt/scheduler-integration.d.ts +19 -0
  277. package/dist/src/orgrt/scheduler-integration.d.ts.map +1 -0
  278. package/dist/src/orgrt/scheduler-integration.js +90 -0
  279. package/dist/src/orgrt/scheduler-integration.js.map +1 -0
  280. package/dist/src/orgrt/server.d.ts.map +1 -1
  281. package/dist/src/orgrt/server.js +70 -2
  282. package/dist/src/orgrt/server.js.map +1 -1
  283. package/dist/src/orgrt/session.d.ts +30 -1
  284. package/dist/src/orgrt/session.d.ts.map +1 -1
  285. package/dist/src/orgrt/session.js +184 -53
  286. package/dist/src/orgrt/session.js.map +1 -1
  287. package/dist/src/orgrt/state-detector.d.ts +19 -0
  288. package/dist/src/orgrt/state-detector.d.ts.map +1 -0
  289. package/dist/src/orgrt/state-detector.js +59 -0
  290. package/dist/src/orgrt/state-detector.js.map +1 -0
  291. package/dist/src/orgrt/task-dag.d.ts +27 -0
  292. package/dist/src/orgrt/task-dag.d.ts.map +1 -0
  293. package/dist/src/orgrt/task-dag.js +100 -0
  294. package/dist/src/orgrt/task-dag.js.map +1 -0
  295. package/dist/src/orgrt/tool-fence.d.ts +7 -4
  296. package/dist/src/orgrt/tool-fence.d.ts.map +1 -1
  297. package/dist/src/orgrt/tool-fence.js +47 -6
  298. package/dist/src/orgrt/tool-fence.js.map +1 -1
  299. package/dist/src/orgrt/types.d.ts +57 -2
  300. package/dist/src/orgrt/types.d.ts.map +1 -1
  301. package/dist/src/orgrt/types.js +34 -3
  302. package/dist/src/orgrt/types.js.map +1 -1
  303. package/dist/src/routing/model-download.d.ts +49 -0
  304. package/dist/src/routing/model-download.d.ts.map +1 -0
  305. package/dist/src/routing/model-download.js +106 -0
  306. package/dist/src/routing/model-download.js.map +1 -0
  307. package/dist/src/services/crash-reporter.d.ts +5 -0
  308. package/dist/src/services/crash-reporter.d.ts.map +1 -1
  309. package/dist/src/services/crash-reporter.js +49 -0
  310. package/dist/src/services/crash-reporter.js.map +1 -1
  311. package/dist/src/transfer/anonymization/index.d.ts +18 -15
  312. package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
  313. package/dist/src/transfer/anonymization/index.js +7 -119
  314. package/dist/src/transfer/anonymization/index.js.map +1 -1
  315. package/dist/src/ui/dashboard.html +606 -7
  316. package/dist/src/ui/orgs.html +7 -1
  317. package/dist/src/ui/routes-monograph.mjs +6 -0
  318. package/dist/src/ui/server.mjs +327 -7
  319. package/dist/src/update/checker.d.ts.map +1 -1
  320. package/dist/src/update/checker.js +2 -1
  321. package/dist/src/update/checker.js.map +1 -1
  322. package/dist/src/update/executor.d.ts.map +1 -1
  323. package/dist/src/update/executor.js +7 -3
  324. package/dist/src/update/executor.js.map +1 -1
  325. package/dist/src/update/index.d.ts +0 -1
  326. package/dist/src/update/index.d.ts.map +1 -1
  327. package/dist/src/update/index.js +5 -24
  328. package/dist/src/update/index.js.map +1 -1
  329. package/dist/src/utils/db-mutex.d.ts +11 -0
  330. package/dist/src/utils/db-mutex.d.ts.map +1 -0
  331. package/dist/src/utils/db-mutex.js +23 -0
  332. package/dist/src/utils/db-mutex.js.map +1 -0
  333. package/dist/src/utils/input-guards.d.ts +23 -0
  334. package/dist/src/utils/input-guards.d.ts.map +1 -1
  335. package/dist/src/utils/input-guards.js +72 -0
  336. package/dist/src/utils/input-guards.js.map +1 -1
  337. package/dist/src/utils/npm-command.d.ts +10 -0
  338. package/dist/src/utils/npm-command.d.ts.map +1 -0
  339. package/dist/src/utils/npm-command.js +12 -0
  340. package/dist/src/utils/npm-command.js.map +1 -0
  341. package/dist/src/utils/paths.d.ts +28 -0
  342. package/dist/src/utils/paths.d.ts.map +1 -0
  343. package/dist/src/utils/paths.js +108 -0
  344. package/dist/src/utils/paths.js.map +1 -0
  345. package/dist/tsconfig.tsbuildinfo +1 -1
  346. package/package.json +17 -17
  347. package/scripts/download-embedding-model.mjs +97 -0
  348. package/scripts/publish.sh +0 -0
  349. package/scripts/sync-claude-assets.sh +0 -0
  350. package/dist/src/production/circuit-breaker.d.ts +0 -121
  351. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  352. package/dist/src/production/circuit-breaker.js +0 -262
  353. package/dist/src/production/circuit-breaker.js.map +0 -1
  354. package/dist/src/production/error-handler.d.ts +0 -119
  355. package/dist/src/production/error-handler.d.ts.map +0 -1
  356. package/dist/src/production/error-handler.js +0 -324
  357. package/dist/src/production/error-handler.js.map +0 -1
  358. package/dist/src/production/index.d.ts +0 -6
  359. package/dist/src/production/index.d.ts.map +0 -1
  360. package/dist/src/production/index.js +0 -6
  361. package/dist/src/production/index.js.map +0 -1
  362. package/dist/src/production/monitoring.d.ts +0 -181
  363. package/dist/src/production/monitoring.d.ts.map +0 -1
  364. package/dist/src/production/monitoring.js +0 -375
  365. package/dist/src/production/monitoring.js.map +0 -1
  366. package/dist/src/production/rate-limiter.d.ts +0 -125
  367. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  368. package/dist/src/production/rate-limiter.js +0 -218
  369. package/dist/src/production/rate-limiter.js.map +0 -1
  370. package/dist/src/production/retry.d.ts +0 -48
  371. package/dist/src/production/retry.d.ts.map +0 -1
  372. package/dist/src/production/retry.js +0 -189
  373. package/dist/src/production/retry.js.map +0 -1
  374. package/dist/src/transfer/types.d.ts +0 -245
  375. package/dist/src/transfer/types.d.ts.map +0 -1
  376. package/dist/src/transfer/types.js +0 -6
  377. package/dist/src/transfer/types.js.map +0 -1
@@ -17,9 +17,15 @@ export interface RoleCheckpoint {
17
17
  status: 'running' | 'ended' | 'crashed';
18
18
  /** Error message if crashed */
19
19
  error?: string;
20
+ /** Terminal scrollback — last N lines of agent output. */
21
+ scrollback?: string[];
20
22
  }
21
23
  /** Full checkpoint state for an org */
22
24
  export interface OrgCheckpoint {
25
+ /** R6: schema version — bumped on any breaking shape change so a future
26
+ * resumeOrg can detect an old-shape checkpoint instead of failing the
27
+ * checksum and silently returning null. */
28
+ version: number;
23
29
  status: 'running' | 'stopped' | 'crashed';
24
30
  run: string;
25
31
  pid: number;
@@ -33,6 +39,8 @@ export interface OrgCheckpoint {
33
39
  /** Checksum for state validation */
34
40
  checksum: string;
35
41
  }
42
+ /** Current checkpoint format version. Bump on breaking shape changes. */
43
+ export declare const CHECKPOINT_VERSION = 1;
36
44
  /** Checkpoint TTL config */
37
45
  export declare const CHECKPOINT_TTL_MS: number;
38
46
  /**
@@ -42,7 +50,12 @@ export declare const CHECKPOINT_TTL_MS: number;
42
50
  export declare function captureCheckpoint(org: RunningOrg): OrgCheckpoint;
43
51
  /**
44
52
  * Validate checkpoint integrity using checksum
45
- * Returns true if checksum matches, false if corrupted
53
+ * Returns true if checksum matches AND the schema version is current.
54
+ *
55
+ * R6: a version field was added so future shape changes can be detected
56
+ * explicitly. Old checkpoints (no version field) fail with a clear cause
57
+ * instead of the silent checksum-mismatch → null return that masked the
58
+ * real reason resume was impossible.
46
59
  */
47
60
  export declare function validateCheckpoint(checkpoint: OrgCheckpoint): boolean;
48
61
  /**
@@ -50,6 +63,25 @@ export declare function validateCheckpoint(checkpoint: OrgCheckpoint): boolean;
50
63
  * Returns true if checkpoint is stale and should not be used
51
64
  */
52
65
  export declare function isCheckpointExpired(checkpoint: OrgCheckpoint, ttlMs?: number): boolean;
66
+ /**
67
+ * Generate checksum over checkpoint state.
68
+ *
69
+ * Uses a stable recursive stringify so semantically-equal checkpoints
70
+ * (same keys + values, regardless of insertion order) hash identically.
71
+ * Hashed with SHA-256 (truncated to 16 hex chars = 64 bits — plenty for
72
+ * tamper detection across realistic checkpoint counts).
73
+ *
74
+ * T3 (and a real latent bug): the previous implementation called
75
+ * `JSON.stringify(state, Object.keys(state).sort())`. Passing an array
76
+ * as the second argument makes it a *whitelist* — but JSON.stringify
77
+ * applies that whitelist at every level, not just the top. Since nested
78
+ * keys like `tokensUsed` / `mailboxQueue` aren't in the top-level keys
79
+ * list, they were silently stripped from the canonical form. Result: the
80
+ * checksum was identical for any two checkpoints sharing the same
81
+ * top-level shape, regardless of roleState values — validateCheckpoint
82
+ * provided ZERO integrity guarantee.
83
+ */
84
+ export declare function generateChecksum(state: Omit<OrgCheckpoint, 'checksum'>): string;
53
85
  /**
54
86
  * Restore mailbox queue from checkpoint
55
87
  * Replays messages into the mailbox in order
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,yCAAyC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,4BAA4B;AAC5B,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAuChE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAIrE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,GAAE,MAA0B,GAAG,OAAO,CAIzG;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAIhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,aAAa,EACzB,gBAAgB,GAAE,OAAc,EAChC,aAAa,GAAE,OAAc,GAC5B,IAAI,CA+BN"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B;;gDAE4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,yCAAyC;IACzC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,uDAAuD;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,4BAA4B;AAC5B,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAyChE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAUrE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,GAAE,MAA0B,GAAG,OAAO,CAIzG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,MAAM,CAG/E;AAeD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAIhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,UAAU,EAAE,aAAa,EACzB,gBAAgB,GAAE,OAAc,EAChC,aAAa,GAAE,OAAc,GAC5B,IAAI,CA+BN"}
@@ -1,3 +1,6 @@
1
+ import { createHash } from 'node:crypto';
2
+ /** Current checkpoint format version. Bump on breaking shape changes. */
3
+ export const CHECKPOINT_VERSION = 1;
1
4
  /** Checkpoint TTL config */
2
5
  export const CHECKPOINT_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours default
3
6
  /**
@@ -19,6 +22,7 @@ export function captureCheckpoint(org) {
19
22
  sessionId: undefined, // TODO: extract from session layer
20
23
  status: runtime.status,
21
24
  error: runtime.error,
25
+ scrollback: runtime.scrollback?.snapshot(),
22
26
  };
23
27
  }
24
28
  // Capture pending roles (lazy spawn list)
@@ -27,6 +31,7 @@ export function captureCheckpoint(org) {
27
31
  }
28
32
  // Build checkpoint without checksum first
29
33
  const partial = {
34
+ version: CHECKPOINT_VERSION,
30
35
  status: 'running',
31
36
  run: org.run,
32
37
  pid: process.pid,
@@ -41,9 +46,20 @@ export function captureCheckpoint(org) {
41
46
  }
42
47
  /**
43
48
  * Validate checkpoint integrity using checksum
44
- * Returns true if checksum matches, false if corrupted
49
+ * Returns true if checksum matches AND the schema version is current.
50
+ *
51
+ * R6: a version field was added so future shape changes can be detected
52
+ * explicitly. Old checkpoints (no version field) fail with a clear cause
53
+ * instead of the silent checksum-mismatch → null return that masked the
54
+ * real reason resume was impossible.
45
55
  */
46
56
  export function validateCheckpoint(checkpoint) {
57
+ if (checkpoint.version !== CHECKPOINT_VERSION) {
58
+ if (process.env.DEBUG || process.env.MONOMIND_DEBUG) {
59
+ console.error(`[checkpoint] version mismatch: file has ${checkpoint.version ?? 'none'}, current is ${CHECKPOINT_VERSION}`);
60
+ }
61
+ return false;
62
+ }
47
63
  const { checksum, ...state } = checkpoint;
48
64
  const recomputed = generateChecksum(state);
49
65
  return checksum === recomputed;
@@ -58,12 +74,40 @@ export function isCheckpointExpired(checkpoint, ttlMs = CHECKPOINT_TTL_MS) {
58
74
  return (now - updated) > ttlMs;
59
75
  }
60
76
  /**
61
- * Generate checksum over checkpoint state
62
- * Uses SHA-256 hash of JSON representation
77
+ * Generate checksum over checkpoint state.
78
+ *
79
+ * Uses a stable recursive stringify so semantically-equal checkpoints
80
+ * (same keys + values, regardless of insertion order) hash identically.
81
+ * Hashed with SHA-256 (truncated to 16 hex chars = 64 bits — plenty for
82
+ * tamper detection across realistic checkpoint counts).
83
+ *
84
+ * T3 (and a real latent bug): the previous implementation called
85
+ * `JSON.stringify(state, Object.keys(state).sort())`. Passing an array
86
+ * as the second argument makes it a *whitelist* — but JSON.stringify
87
+ * applies that whitelist at every level, not just the top. Since nested
88
+ * keys like `tokensUsed` / `mailboxQueue` aren't in the top-level keys
89
+ * list, they were silently stripped from the canonical form. Result: the
90
+ * checksum was identical for any two checkpoints sharing the same
91
+ * top-level shape, regardless of roleState values — validateCheckpoint
92
+ * provided ZERO integrity guarantee.
63
93
  */
64
- function generateChecksum(state) {
65
- const canonical = JSON.stringify(state, Object.keys(state).sort());
66
- return Buffer.from(canonical).toString('base64').slice(0, 16); // Simple checksum for now
94
+ export function generateChecksum(state) {
95
+ const canonical = JSON.stringify(stableNormalize(state));
96
+ return createHash('sha256').update(canonical).digest('hex').slice(0, 16);
97
+ }
98
+ /** Recursively produce a canonical form: object keys sorted at every depth,
99
+ * arrays preserved in order, primitives passed through. */
100
+ function stableNormalize(value) {
101
+ if (Array.isArray(value))
102
+ return value.map(stableNormalize);
103
+ if (value && typeof value === 'object') {
104
+ const sortedKeys = Object.keys(value).sort();
105
+ const out = {};
106
+ for (const k of sortedKeys)
107
+ out[k] = stableNormalize(value[k]);
108
+ return out;
109
+ }
110
+ return value;
67
111
  }
68
112
  /**
69
113
  * Restore mailbox queue from checkpoint
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { OrgDaemon, RunningOrg } from './daemon.js';
2
+ /**
3
+ * Resolves an org_send `to` address ("role" for same-org, "org:role" for
4
+ * cross-org) into its parts. Centralizes the one addressing rule that
5
+ * matters (an "own-org:role" self-prefix is intra-org, not cross-org) so
6
+ * deliver()/deliverRemote() don't each re-derive it — the qualified `to`
7
+ * string returned is always the canonical display form for that address.
8
+ */
9
+ export declare function resolveAddress(fromOrg: string, to: string): {
10
+ cross: boolean;
11
+ orgName: string;
12
+ role: string;
13
+ qualified: string;
14
+ };
15
+ /** Mailbox bodies are unbounded — a pasted 20KB file would persist in the
16
+ * recipient's context for the whole run. Bodies over MAIL_BODY_MAX are
17
+ * written to <org workdir>/.mail/<message-id>.md and replaced with a ~1KB
18
+ * digest plus a pointer; smaller messages stay byte-identical. */
19
+ export declare function mailBody(root: string, orgName: string, org: RunningOrg | undefined, header: string, body: string, id: string): string;
20
+ /** Route a message. to = "role" (same org) or "org:role" (cross-org). Returns a receipt string. */
21
+ export declare function deliver(daemon: OrgDaemon, fromOrg: string, fromRole: string, to: string, subject: string, body: string): Promise<string>;
22
+ /** Inbound handler for cross-process delivery — called by the server's POST /api/xdeliver route
23
+ * when ANOTHER process's deliverRemote() reaches this daemon. Pushes straight into the target
24
+ * agent's mailbox; the agent picks it up on its own next turn (see Mailbox — never interrupts). */
25
+ export declare function receiveRemote(daemon: OrgDaemon, toOrg: string, toRole: string, fromQualified: string, subject: string, body: string): {
26
+ ok: true;
27
+ receipt: string;
28
+ } | {
29
+ ok: false;
30
+ error: string;
31
+ };
32
+ //# sourceMappingURL=cross-org.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-org.d.ts","sourceRoot":"","sources":["../../../src/orgrt/cross-org.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMhI;AAED;;;mEAGmE;AACnE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAWrI;AAED,mGAAmG;AACnG,wBAAsB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0F9I;AA8DD;;oGAEoG;AACpG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GACrG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAiD9D"}
@@ -0,0 +1,256 @@
1
+ // packages/@monomind/cli/src/orgrt/cross-org.ts
2
+ // Extracted from daemon.ts — message delivery, cross-org routing, remote delivery.
3
+ import { mkdirSync, writeFileSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { lookupOrg } from './broker.js';
6
+ import { queueMessage } from './inbox.js';
7
+ import { checkResources, waitForCapacity } from '../utils/resource-governor.js';
8
+ import { ORG_DIR } from './types.js';
9
+ /** Bodies larger than this are digested to a .mail file (see mailBody). */
10
+ const MAIL_BODY_MAX = 4096;
11
+ /** How much of an oversized body stays inline in the digest. */
12
+ const MAIL_DIGEST_CHARS = 1024;
13
+ /**
14
+ * Resolves an org_send `to` address ("role" for same-org, "org:role" for
15
+ * cross-org) into its parts. Centralizes the one addressing rule that
16
+ * matters (an "own-org:role" self-prefix is intra-org, not cross-org) so
17
+ * deliver()/deliverRemote() don't each re-derive it — the qualified `to`
18
+ * string returned is always the canonical display form for that address.
19
+ */
20
+ export function resolveAddress(fromOrg, to) {
21
+ const cross = to.includes(':');
22
+ if (!cross)
23
+ return { cross: false, orgName: fromOrg, role: to, qualified: to };
24
+ const [orgName, role] = to.split(':', 2);
25
+ if (orgName === fromOrg)
26
+ return { cross: false, orgName, role, qualified: role }; // self-prefixed — still intra-org
27
+ return { cross: true, orgName, role, qualified: to };
28
+ }
29
+ /** Mailbox bodies are unbounded — a pasted 20KB file would persist in the
30
+ * recipient's context for the whole run. Bodies over MAIL_BODY_MAX are
31
+ * written to <org workdir>/.mail/<message-id>.md and replaced with a ~1KB
32
+ * digest plus a pointer; smaller messages stay byte-identical. */
33
+ export function mailBody(root, orgName, org, header, body, id) {
34
+ if (body.length <= MAIL_BODY_MAX)
35
+ return `${header}\n\n${body}`;
36
+ const mailDir = join(org?.workdir ?? join(root, ORG_DIR, orgName), '.mail');
37
+ const file = join(mailDir, `${id.replace(/[^a-zA-Z0-9_-]/g, '_')}.md`);
38
+ try {
39
+ mkdirSync(mailDir, { recursive: true });
40
+ writeFileSync(file, body);
41
+ return `${header}\n\n${body.slice(0, MAIL_DIGEST_CHARS)}\n\n[... truncated — full text at ${file} — Read it if needed]`;
42
+ }
43
+ catch {
44
+ return `${header}\n\n${body}`; // digest write failed — deliver in full rather than lose content
45
+ }
46
+ }
47
+ /** Route a message. to = "role" (same org) or "org:role" (cross-org). Returns a receipt string. */
48
+ export async function deliver(daemon, fromOrg, fromRole, to, subject, body) {
49
+ const { cross, orgName: targetOrgName, role: targetRole, qualified: toQualified } = resolveAddress(fromOrg, to);
50
+ const targetOrg = daemon.orgs.get(targetOrgName);
51
+ const src = daemon.orgs.get(fromOrg);
52
+ // Lazy spawn: if the role is pending (not yet spawned), spawn it now.
53
+ // ATOMIC GUARD: Check spawning Set to prevent duplicate spawns from concurrent messages
54
+ const spawning = daemon.spawning.get(targetOrgName) ?? new Set();
55
+ daemon.spawning.set(targetOrgName, spawning);
56
+ if (targetOrg && !targetOrg.agents.has(targetRole) && targetOrg.pendingRoles?.has(targetRole) && !spawning.has(targetRole)) {
57
+ const role = targetOrg.pendingRoles.get(targetRole);
58
+ targetOrg.pendingRoles.delete(targetRole);
59
+ spawning.add(targetRole); // Mark as spawning before async work
60
+ const check = checkResources();
61
+ if (!check.ok) {
62
+ const waited = await waitForCapacity(60_000);
63
+ spawning.delete(targetRole); // Clear spawning flag after check
64
+ if (!waited.ok) {
65
+ targetOrg.bus.emit({ type: 'audit', from: targetRole, reason: 'resource-skip',
66
+ msg: `deferring lazy spawn of "${targetRole}": ${waited.reason}` });
67
+ // Queue the triggering message so it survives the deferred spawn — without
68
+ // this the sender got "queued" but the message was silently lost.
69
+ // B5 FIX: Queue FIRST, then schedule spawn only if queue succeeds.
70
+ // If queueing fails, we return the error without modifying spawn state.
71
+ const queued = queueMessage(daemon.root, targetOrgName, {
72
+ fromQualified: cross ? `${fromOrg}:${fromRole}` : fromRole,
73
+ toRole: targetRole, subject, body, ts: Date.now(),
74
+ });
75
+ if (!queued) {
76
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `queue failed: ${subject}`, reason: 'queue-failed' });
77
+ return `ERROR: could not queue message for ${toQualified} (disk full or permissions)`;
78
+ }
79
+ daemon.scheduleDeferredSpawn(targetOrgName, targetOrg, role, targetOrg.spawnRole);
80
+ return `queued for ${toQualified} (role starting — waiting for resources)`;
81
+ }
82
+ }
83
+ targetOrg.spawnRole(role);
84
+ spawning.delete(targetRole); // Clear spawning flag after spawn completes
85
+ targetOrg.bus.emit({ type: 'status', from: targetRole, msg: `lazy-spawned on first message from ${fromRole}` });
86
+ }
87
+ if (!targetOrg || !targetOrg.agents.has(targetRole)) {
88
+ if (cross && daemon.opts.crossProcess)
89
+ return deliverRemote(daemon, fromOrg, fromRole, targetOrgName, targetRole, toQualified, subject, body, src);
90
+ // Queue + auto-wake: if the org definition exists locally but isn't running, spool the message and start it
91
+ if (cross && daemon.hasOrgDef(targetOrgName)) {
92
+ const queued = queueMessage(daemon.root, targetOrgName, { fromQualified: `${fromOrg}:${fromRole}`, toRole: targetRole, subject, body, ts: Date.now() });
93
+ if (!queued) {
94
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `queue failed: ${subject}`, reason: 'queue-failed' });
95
+ return `ERROR: could not queue message for ${toQualified} (disk full or permissions)`;
96
+ }
97
+ src?.bus.emit({ type: 'xorg', from: `${fromOrg}:${fromRole}`, to: toQualified, subject, msg: body, data: { queued: true } });
98
+ daemon.autoWake(targetOrgName);
99
+ return `queued for ${toQualified} (org starting)`;
100
+ }
101
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `undeliverable: ${subject}`, reason: 'unknown recipient' });
102
+ return `ERROR: unknown recipient "${toQualified}" (known: ${[...(targetOrg?.agents.keys() ?? daemon.orgs.keys())].join(', ')})`;
103
+ }
104
+ const targetAgent = targetOrg.agents.get(targetRole);
105
+ if (targetAgent.status === 'crashed') {
106
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `undeliverable: ${subject}`, reason: 'recipient crashed (retry budget exhausted)' });
107
+ return `ERROR: recipient "${toQualified}" crashed and will not recover this run — message not delivered (${targetAgent.error ?? 'unknown error'})`;
108
+ }
109
+ if (targetAgent.mailbox.isClosed) {
110
+ // Distinguish two cases that used to share one drop:
111
+ // - org mid-shutdown: nothing will ever read the queue again — the
112
+ // message genuinely can't be delivered, so report the real outcome.
113
+ // - agent session ended but the org is alive (budget exhaustion,
114
+ // turn limit, crash-restart in flight): the result is still
115
+ // valuable, so persist it to the inbox. The boss-restart/next-run
116
+ // drainInbox will deliver it instead of the work vanishing.
117
+ if (daemon.stopping.has(targetOrgName)) {
118
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `undeliverable: ${subject}`, reason: 'target mailbox closed (org shutting down)' });
119
+ return `ERROR: recipient "${toQualified}" is shutting down — message not delivered`;
120
+ }
121
+ const q = queueMessage(daemon.root, targetOrgName, { fromQualified: `${fromOrg}:${fromRole}`, toRole: targetRole, subject, body, ts: Date.now() });
122
+ src?.bus.emit({ type: 'audit', from: fromRole, to: toQualified, msg: `recipient session closed — queued to inbox: ${subject}`, data: { queued: q } });
123
+ return `queued to inbox for ${toQualified} (recipient session closed; will be delivered on restart)`;
124
+ }
125
+ // Track message chain: link this message to the target's last message (the one being responded to)
126
+ const targetAgentSrc = targetOrg === src ? src?.agents.get(targetRole) : undefined;
127
+ const parentId = targetAgentSrc?.lastMessageId;
128
+ const evt = { from: cross ? `${fromOrg}:${fromRole}` : fromRole, to: toQualified, subject, msg: body, parentId };
129
+ const emitted = src?.bus.emit({ type: cross ? 'xorg' : 'message', ...evt });
130
+ if (cross && targetOrg !== src)
131
+ targetOrg.bus.emit({ type: 'xorg', ...evt });
132
+ // Store message ID for the target (so responses can link to it)
133
+ if (targetAgentSrc && emitted)
134
+ targetAgentSrc.lastMessageId = emitted.id;
135
+ // Also track the source agent's last sent message for cross-org visibility
136
+ const srcAgent = src?.agents.get(fromRole);
137
+ if (srcAgent && emitted)
138
+ srcAgent.lastMessageId = emitted.id;
139
+ targetAgent.mailbox.push(mailBody(daemon.root, targetOrgName, targetOrg, `[message from ${evt.from}] subject: ${subject}`, body, emitted?.id ?? `mail-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`));
140
+ return `delivered to ${toQualified}`;
141
+ }
142
+ /** Cross-process leg of deliver(): ask the machine-local broker who hosts targetOrgName, then POST over HTTP.
143
+ * `to` here is always the fully-qualified "org:role" display form (resolveAddress already normalized it). */
144
+ async function deliverRemote(daemon, fromOrg, fromRole, targetOrgName, targetRole, to, subject, body, src) {
145
+ const remote = lookupOrg(targetOrgName, daemon.opts.brokerDir);
146
+ if (!remote) {
147
+ // No remote host either — queue + auto-wake if the org def exists locally
148
+ if (daemon.hasOrgDef(targetOrgName)) {
149
+ const queued = queueMessage(daemon.root, targetOrgName, { fromQualified: `${fromOrg}:${fromRole}`, toRole: targetRole, subject, body, ts: Date.now() });
150
+ if (!queued) {
151
+ src?.bus.emit({ type: 'audit', from: fromRole, to, msg: `queue failed: ${subject}`, reason: 'queue-failed' });
152
+ return `ERROR: could not queue message for ${to} (disk full or permissions)`;
153
+ }
154
+ src?.bus.emit({ type: 'xorg', from: `${fromOrg}:${fromRole}`, to, subject, msg: body, data: { queued: true } });
155
+ daemon.autoWake(targetOrgName);
156
+ return `queued for ${to} (org starting)`;
157
+ }
158
+ // Check SSH remote host registry before giving up
159
+ try {
160
+ const { lookupRemoteOrg, deliverRemote: sshDeliver } = await import('./remote.js');
161
+ const remoteHost = lookupRemoteOrg(targetOrgName, daemon.root);
162
+ if (remoteHost) {
163
+ const result = await sshDeliver(targetOrgName, `${fromOrg}:${fromRole}`, subject, body, remoteHost);
164
+ if (result.ok) {
165
+ src?.bus.emit({ type: 'xorg', from: `${fromOrg}:${fromRole}`, to, subject, msg: body, data: { remote: 'ssh', host: remoteHost.host } });
166
+ return `delivered to ${to} via SSH (${remoteHost.host})`;
167
+ }
168
+ src?.bus.emit({ type: 'audit', from: fromRole, to, msg: `SSH delivery failed: ${result.output}`, reason: 'ssh-delivery-failed' });
169
+ return `ERROR: SSH delivery to "${to}" on ${remoteHost.host} failed: ${result.output}`;
170
+ }
171
+ }
172
+ catch { /* remote.ts unavailable or SSH not configured — fall through */ }
173
+ src?.bus.emit({ type: 'audit', from: fromRole, to, msg: `undeliverable: ${subject}`, reason: 'unknown recipient' });
174
+ return `ERROR: unknown recipient "${to}" (no local org, no process on this machine, and no SSH remote configured for "${targetOrgName}")`;
175
+ }
176
+ try {
177
+ const res = await fetch(`${remote.url}/api/xdeliver`, {
178
+ method: 'POST',
179
+ headers: {
180
+ 'Content-Type': 'application/json',
181
+ ...(remote.credential ? { 'x-monomind-cred': remote.credential } : {}),
182
+ },
183
+ body: JSON.stringify({ fromOrg, fromRole, toOrg: targetOrgName, toRole: targetRole, subject, body }),
184
+ signal: AbortSignal.timeout(10_000),
185
+ });
186
+ const data = await res.json().catch(() => ({}));
187
+ if (res.ok && data.ok) {
188
+ src?.bus.emit({ type: 'xorg', from: `${fromOrg}:${fromRole}`, to, subject, msg: body });
189
+ return data.receipt ?? `delivered to ${to} (remote)`;
190
+ }
191
+ src?.bus.emit({ type: 'audit', from: fromRole, to, msg: `remote delivery rejected: ${data.error ?? res.status}`, reason: 'remote-delivery-rejected' });
192
+ return `ERROR: remote org "${to}" rejected delivery: ${data.error ?? res.status}`;
193
+ }
194
+ catch (err) {
195
+ const message = err instanceof Error ? err.message : String(err);
196
+ src?.bus.emit({ type: 'audit', from: fromRole, to, msg: `remote delivery failed: ${message}`, reason: 'remote-delivery-failed' });
197
+ return `ERROR: remote org "${targetOrgName}" unreachable: ${message}`;
198
+ }
199
+ }
200
+ /** Inbound handler for cross-process delivery — called by the server's POST /api/xdeliver route
201
+ * when ANOTHER process's deliverRemote() reaches this daemon. Pushes straight into the target
202
+ * agent's mailbox; the agent picks it up on its own next turn (see Mailbox — never interrupts). */
203
+ export function receiveRemote(daemon, toOrg, toRole, fromQualified, subject, body) {
204
+ const org = daemon.orgs.get(toOrg);
205
+ if (!org) {
206
+ // Org not running — queue the message and auto-wake if the def exists
207
+ if (daemon.hasOrgDef(toOrg)) {
208
+ const queued = queueMessage(daemon.root, toOrg, { fromQualified, toRole, subject, body, ts: Date.now() });
209
+ if (!queued) {
210
+ return { ok: false, error: `could not queue message for ${toOrg}:${toRole} (disk full or permissions)` };
211
+ }
212
+ daemon.autoWake(toOrg);
213
+ return { ok: true, receipt: `queued for ${toOrg}:${toRole} (org waking)` };
214
+ }
215
+ return { ok: false, error: `org "${toOrg}" not hosted here` };
216
+ }
217
+ // Lazy-spawn pending roles on cross-process delivery (matches deliver/answerQuestion)
218
+ // ATOMIC GUARD: Check spawning Set to prevent duplicate spawns from concurrent messages
219
+ const spawning = daemon.spawning.get(toOrg) ?? new Set();
220
+ daemon.spawning.set(toOrg, spawning);
221
+ if (!org.agents.has(toRole) && org.pendingRoles?.has(toRole) && !spawning.has(toRole)) {
222
+ const role = org.pendingRoles.get(toRole);
223
+ org.pendingRoles.delete(toRole);
224
+ spawning.add(toRole); // Mark as spawning before async work
225
+ // Resource gate check before spawning (prevents bypass in cross-process delivery)
226
+ const check = checkResources();
227
+ if (!check.ok) {
228
+ spawning.delete(toRole); // Clear spawning flag after check
229
+ org.bus.emit({ type: 'audit', from: toRole, reason: 'resource-pressure',
230
+ msg: `cross-process lazy spawn deferred: ${check.reason}` });
231
+ // B4 FIX: Queue the triggering message FIRST, then schedule spawn only if queue succeeds.
232
+ // This matches the pattern in deliver() and prevents message loss if queue fails.
233
+ const queued = queueMessage(daemon.root, toOrg, { fromQualified, toRole, subject, body, ts: Date.now() });
234
+ if (!queued) {
235
+ return { ok: false, error: `could not queue message for ${toOrg}:${toRole} (disk full or permissions)` };
236
+ }
237
+ daemon.scheduleDeferredSpawn(toOrg, org, role, org.spawnRole);
238
+ return { ok: true, receipt: `queued for ${toOrg}:${toRole} (role starting — waiting for resources)` };
239
+ }
240
+ org.spawnRole?.(role);
241
+ spawning.delete(toRole); // Clear spawning flag after spawn completes
242
+ org.bus.emit({ type: 'status', from: toRole, msg: `lazy-spawned on remote delivery from ${fromQualified}` });
243
+ }
244
+ const agent = org.agents.get(toRole);
245
+ if (!agent)
246
+ return { ok: false, error: `role "${toRole}" not found in org "${toOrg}"` };
247
+ if (agent.status === 'crashed')
248
+ return { ok: false, error: `role "${toRole}" in org "${toOrg}" crashed and will not recover this run` };
249
+ if (agent.mailbox.isClosed)
250
+ return { ok: false, error: `role "${toRole}" in org "${toOrg}" is shutting down` };
251
+ const messageEvent = org.bus.emit({ type: 'xorg', from: fromQualified, to: `${toOrg}:${toRole}`, subject, msg: body });
252
+ agent.lastMessageId = messageEvent.id; // Track last message ID for response threading
253
+ agent.mailbox.push(mailBody(daemon.root, toOrg, org, `[message from ${fromQualified}] subject: ${subject}`, body, messageEvent.id));
254
+ return { ok: true, receipt: `delivered to ${toOrg}:${toRole} (remote)` };
255
+ }
256
+ //# sourceMappingURL=cross-org.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-org.js","sourceRoot":"","sources":["../../../src/orgrt/cross-org.ts"],"names":[],"mappings":"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"}