@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
@@ -2,7 +2,7 @@
2
2
  * SONA (Self-Optimizing Neural Architecture) Optimizer
3
3
  *
4
4
  * Processes trajectory outcomes to learn optimal routing patterns.
5
- * Integrates with Q-learning router and persistence layer.
5
+ * Integrates with keyword router and persistence layer.
6
6
  *
7
7
  * Features:
8
8
  * - Processes trajectory outcomes from hooksTrajectoryEnd
@@ -2,7 +2,7 @@
2
2
  * SONA (Self-Optimizing Neural Architecture) Optimizer
3
3
  *
4
4
  * Processes trajectory outcomes to learn optimal routing patterns.
5
- * Integrates with Q-learning router and persistence layer.
5
+ * Integrates with keyword router and persistence layer.
6
6
  *
7
7
  * Features:
8
8
  * - Processes trajectory outcomes from hooksTrajectoryEnd
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * @module @monomind/cli/monovector
11
11
  */
12
+ import { type RouteOutcomeRecord } from './route-outcomes.js';
12
13
  export { createInitState, type InitState, type InitStatus } from './init-state.js';
13
14
  export { recordRoute, joinOutcome, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, type RouteOutcomeRecord, type RoutingAccuracy, } from './route-outcomes.js';
14
15
  export { DiffClassifier, createDiffClassifier, analyzeDiff, analyzeDiffSync, assessFileRisk, assessOverallRisk, classifyDiff, suggestReviewers, getGitDiffNumstat, getGitDiffNumstatAsync, clearDiffCache, clearAllDiffCaches, type DiffClassification, type DiffHunk, type DiffChange, type FileDiff, type DiffAnalysis, type DiffClassifierConfig, type DiffFile, type RiskLevel, type FileRisk, type OverallRisk, type DiffAnalysisResult, } from './diff-classifier.js';
@@ -17,38 +18,34 @@ export interface RouteAlternative {
17
18
  route: string;
18
19
  score?: number;
19
20
  }
20
- /** Statistics surfaced by the keyword router (stub fields for CLI display). */
21
+ /** Statistics from the route-outcomes store. */
21
22
  export interface KeywordRouterStats {
22
- updateCount: number;
23
- qTableSize: number;
24
- stepCount: number;
25
- epsilon: number;
26
- avgTDError: number;
27
- useNative: number;
28
- [key: string]: unknown;
23
+ outcomeCount: number;
24
+ accuracy: number | null;
25
+ adherence: number | null;
26
+ trend: number | null;
27
+ byMode: {
28
+ native: number | null;
29
+ js: number | null;
30
+ };
29
31
  }
30
32
  export interface KeywordRouter {
31
- route: (task: string, useExploration?: boolean) => Promise<RouteDecision>;
33
+ route: (task: string) => Promise<RouteDecision>;
32
34
  initialize: () => Promise<void>;
33
- getStats: () => KeywordRouterStats;
34
- /** Record feedback; returns the TD-error (0 in the lean keyword stub). */
35
- update: (task: string, agentId: string, reward: number, nextTask?: string) => number;
36
- reset: () => void;
37
- export: () => unknown;
38
- import: (data: unknown) => void;
35
+ getStats: () => Promise<KeywordRouterStats>;
36
+ update: (task: string, agentId: string, reward: number, nextTask?: string) => Promise<void>;
37
+ reset: () => Promise<void>;
38
+ export: () => Promise<RouteOutcomeRecord[]>;
39
+ import: (data: RouteOutcomeRecord[]) => Promise<void>;
39
40
  }
40
41
  export interface RouteDecision {
41
42
  agentType: string;
42
43
  confidence: number;
43
44
  reasoning?: string;
44
45
  route: string;
45
- qValues?: number[];
46
- explored?: boolean;
47
46
  alternatives?: RouteAlternative[];
48
47
  }
49
48
  export interface KeywordRouterConfig {
50
- learningRate?: number;
51
- discountFactor?: number;
52
49
  }
53
50
  export declare function createKeywordRouter(_config?: KeywordRouterConfig): KeywordRouter;
54
51
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAEpE,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1E,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,kBAAkB,CAAC;IACnC,0EAA0E;IAC1E,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrF,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACjC;AAGD,MAAM,WAAW,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAAE;AAEvL,MAAM,WAAW,mBAAmB;IAAG,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAAE;AAIxF,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAgChF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAEpE,gDAAgD;AAChD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAGD,MAAM,WAAW,aAAa;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAAE;AAG/I,MAAM,WAAW,mBAAmB;CAAkC;AAItE,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,aAAa,CAwEhF"}
@@ -9,11 +9,14 @@
9
9
  *
10
10
  * @module @monomind/cli/monovector
11
11
  */
12
+ import { join } from 'node:path';
13
+ import { recordRoute, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, } from './route-outcomes.js';
12
14
  export { createInitState } from './init-state.js';
13
15
  export { recordRoute, joinOutcome, joinLatestUnresolved, readOutcomes, computeRoutingAccuracy, computeAdherence, } from './route-outcomes.js';
14
16
  export { DiffClassifier, createDiffClassifier, analyzeDiff, analyzeDiffSync, assessFileRisk, assessOverallRisk, classifyDiff, suggestReviewers, getGitDiffNumstat, getGitDiffNumstatAsync, clearDiffCache, clearAllDiffCaches, } from './diff-classifier.js';
15
17
  export function createKeywordRouter(_config) {
16
18
  const agentTypes = ['coder', 'tester', 'reviewer', 'architect', 'researcher', 'optimizer', 'debugger', 'documenter'];
19
+ const baseDir = join(process.cwd(), '.monomind');
17
20
  return {
18
21
  async route(task) {
19
22
  const lower = task.toLowerCase();
@@ -37,19 +40,58 @@ export function createKeywordRouter(_config) {
37
40
  confidence: 0.75,
38
41
  reasoning: 'keyword-based routing',
39
42
  route: agentType,
40
- qValues: [],
41
- explored: false,
42
43
  alternatives: agentTypes.filter(a => a !== agentType).slice(0, 3).map(a => ({ route: a, score: 0 })),
43
44
  };
44
45
  },
45
46
  async initialize() { },
46
- getStats() {
47
- return { updateCount: 0, qTableSize: 0, stepCount: 0, epsilon: 0, avgTDError: 0, useNative: 0 };
47
+ async getStats() {
48
+ const acc = await computeRoutingAccuracy(baseDir);
49
+ const adh = await computeAdherence(baseDir);
50
+ return {
51
+ outcomeCount: acc.totalWithOutcome,
52
+ accuracy: acc.accuracy,
53
+ adherence: adh.adherence,
54
+ trend: acc.recentVsPrior,
55
+ byMode: acc.byMode,
56
+ };
57
+ },
58
+ async update(task, agentId, reward) {
59
+ const outcome = {
60
+ agentActuallyUsed: agentId,
61
+ measuredSuccess: reward > 0,
62
+ quality: Math.max(-1, Math.min(1, reward)),
63
+ };
64
+ const joined = await joinLatestUnresolved(baseDir, outcome);
65
+ if (!joined) {
66
+ const { randomUUID } = await import('node:crypto');
67
+ const rec = {
68
+ routeId: randomUUID(),
69
+ ts: Date.now(),
70
+ task,
71
+ recommendedAgent: agentId,
72
+ routingMethod: 'manual-feedback',
73
+ confidence: 1,
74
+ learningMode: 'js',
75
+ ...outcome,
76
+ };
77
+ await recordRoute(baseDir, rec);
78
+ }
79
+ },
80
+ async reset() {
81
+ const { promises: fsp } = await import('node:fs');
82
+ await fsp.writeFile(join(baseDir, 'route-outcomes.jsonl'), '', 'utf8').catch(() => { });
83
+ },
84
+ async export() {
85
+ return readOutcomes(baseDir);
86
+ },
87
+ async import(data) {
88
+ if (!Array.isArray(data))
89
+ return;
90
+ const { promises: fsp } = await import('node:fs');
91
+ await fsp.mkdir(baseDir, { recursive: true });
92
+ const lines = data.map(r => JSON.stringify(r)).join('\n') + '\n';
93
+ await fsp.writeFile(join(baseDir, 'route-outcomes.jsonl'), lines, 'utf8');
48
94
  },
49
- update() { return 0; },
50
- reset() { },
51
- export() { return {}; },
52
- import() { },
53
95
  };
54
96
  }
55
97
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAmC,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EACL,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,kBAAkB,GAYnB,MAAM,sBAAsB,CAAC;AAmC9B,MAAM,UAAU,mBAAmB,CAAC,OAA6B;IAC/D,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACrH,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAY;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,SAAS,GAAG,OAAO,CAAC;YACxB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS,GAAG,QAAQ,CAAC;iBAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS,GAAG,UAAU,CAAC;iBACnF,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,SAAS,GAAG,WAAW,CAAC;iBACrF,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,SAAS,GAAG,YAAY,CAAC;iBACrF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,SAAS,GAAG,WAAW,CAAC;iBAClF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS,GAAG,UAAU,CAAC;iBACtG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS,GAAG,YAAY,CAAC;YACzD,OAAO;gBACL,SAAS;gBACT,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,uBAAuB;gBAClC,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aACrG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,UAAU,KAAI,CAAC;QACrB,QAAQ;YACN,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAClG,CAAC;QACD,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,KAAI,CAAC;QACV,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,KAAI,CAAC;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/monovector/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { OrgDaemon } from './daemon.js';
2
+ /** Check if an action requires human approval (beforeTool hook for guardrails). Returns
3
+ * the approval decision: true = approved, false = denied, null = pending (requires human input).
4
+ *
5
+ * R5: serialized per-org via withApprovalLock() — concurrent checkApproval and
6
+ * setApproval calls previously raced on this.approvals + approvals.json. */
7
+ export declare function checkApproval(daemon: OrgDaemon, org: string, role: string, action: string): Promise<boolean | null>;
8
+ /** Approve or deny a pending action (called by dashboard or CLI).
9
+ * R5: serialized per-org via withApprovalLock(). */
10
+ export declare function setApproval(daemon: OrgDaemon, org: string, role: string, action: string, approved: boolean): Promise<{
11
+ ok: true;
12
+ } | {
13
+ ok: false;
14
+ error: string;
15
+ }>;
16
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/orgrt/approvals.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;6EAI6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA6BnH;AAED;qDACqD;AACrD,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBvK"}
@@ -0,0 +1,72 @@
1
+ // packages/@monomind/cli/src/orgrt/approvals.ts
2
+ // Extracted from daemon.ts — approval checking and setting for org tool calls.
3
+ import { join } from 'node:path';
4
+ import { mkdirSync } from 'node:fs';
5
+ import { writeJsonFileAtomic } from '../utils/json-file.js';
6
+ import { ORG_DIR } from './types.js';
7
+ /** Check if an action requires human approval (beforeTool hook for guardrails). Returns
8
+ * the approval decision: true = approved, false = denied, null = pending (requires human input).
9
+ *
10
+ * R5: serialized per-org via withApprovalLock() — concurrent checkApproval and
11
+ * setApproval calls previously raced on this.approvals + approvals.json. */
12
+ export function checkApproval(daemon, org, role, action) {
13
+ return withApprovalLock(daemon, org, async () => {
14
+ const pending = daemon.approvals.get(org) ?? [];
15
+ const existing = pending.find(a => a.roleId === role && a.action === action);
16
+ // If already approved/denied, return that decision
17
+ if (existing && existing.approved !== null)
18
+ return existing.approved;
19
+ // Require human approval for sensitive actions
20
+ const sensitiveActions = ['Bash', 'WebFetch', 'WebSearch', 'org_complete'];
21
+ if (sensitiveActions.includes(action)) {
22
+ // Queue for approval
23
+ if (!existing) {
24
+ pending.push({ roleId: role, action, question: `Approve ${action} tool call?`, ts: Date.now(), approved: null });
25
+ daemon.approvals.set(org, pending);
26
+ }
27
+ // Persist to approvals.json (C4: atomic write)
28
+ const approvalsPath = join(daemon.root, ORG_DIR, org, 'approvals.json');
29
+ mkdirSync(join(daemon.root, ORG_DIR, org), { recursive: true });
30
+ writeJsonFileAtomic(approvalsPath, { approvals: pending });
31
+ // Emit a question event for the dashboard
32
+ const running = daemon.orgs.get(org);
33
+ running?.bus.emit({ type: 'question', from: role, data: { question: `Approval required for ${action}`, action } });
34
+ return null; // Pending human approval
35
+ }
36
+ return true; // Auto-approved for non-sensitive actions
37
+ });
38
+ }
39
+ /** Approve or deny a pending action (called by dashboard or CLI).
40
+ * R5: serialized per-org via withApprovalLock(). */
41
+ export async function setApproval(daemon, org, role, action, approved) {
42
+ return withApprovalLock(daemon, org, async () => {
43
+ const pending = daemon.approvals.get(org) ?? [];
44
+ const item = pending.find(a => a.roleId === role && a.action === action);
45
+ if (!item)
46
+ return { ok: false, error: `No pending approval found for ${role} action ${action}` };
47
+ item.approved = approved;
48
+ item.ts = Date.now();
49
+ // Persist updated approval state (C4: atomic write)
50
+ const approvalsPath = join(daemon.root, ORG_DIR, org, 'approvals.json');
51
+ writeJsonFileAtomic(approvalsPath, { approvals: pending });
52
+ // Notify the waiting agent via its mailbox
53
+ const running = daemon.orgs.get(org);
54
+ const agent = running?.agents.get(role);
55
+ if (agent && !agent.mailbox.isClosed) {
56
+ agent.mailbox.push(`[approval] ${action}: ${approved ? 'APPROVED' : 'DENIED'}`);
57
+ }
58
+ running?.bus.emit({ type: 'status', from: role, msg: `Approval ${approved ? 'granted' : 'denied'} for ${action}` });
59
+ return { ok: true };
60
+ });
61
+ }
62
+ /** R5: serialize approval mutations per org. Chains a Promise so concurrent
63
+ * callers run strictly in arrival order without blocking the daemon's
64
+ * event loop on unrelated orgs. Errors unwind the chain but don't poison
65
+ * future callers (the slot is reset to a resolved promise). */
66
+ function withApprovalLock(daemon, org, fn) {
67
+ const prev = daemon.approvalLocks.get(org) ?? Promise.resolve();
68
+ const next = prev.then(fn, fn);
69
+ daemon.approvalLocks.set(org, next.catch(() => { }));
70
+ return next;
71
+ }
72
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../../src/orgrt/approvals.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,+EAA+E;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC;;;;6EAI6E;AAC7E,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,GAAW,EAAE,IAAY,EAAE,MAAc;IACxF,OAAO,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE7E,mDAAmD;QACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;YAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAErE,+CAA+C;QAC/C,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAC3E,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,qBAAqB;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,MAAM,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjH,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,+CAA+C;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;YACxE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,mBAAmB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAE3D,0CAA0C;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,yBAAyB,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACnH,OAAO,IAAI,CAAC,CAAC,yBAAyB;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,0CAA0C;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;qDACqD;AACrD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAiB,EAAE,GAAW,EAAE,IAAY,EAAE,MAAc,EAAE,QAAiB;IAC/G,OAAO,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,IAAI,WAAW,MAAM,EAAE,EAAE,CAAC;QAEjG,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAErB,oDAAoD;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACxE,mBAAmB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3D,2CAA2C;QAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,QAAQ,MAAM,EAAE,EAAE,CAAC,CAAC;QACpH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;gEAGgE;AAChE,SAAS,gBAAgB,CAAI,MAAiB,EAAE,GAAW,EAAE,EAAoB;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAA+C,CAAC,CAAC,CAAC,CAAC;IACjG,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;IAOL,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAN5E,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAqB,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAE3E;IAED,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAiBnE;IAED;;;;4FAIwF;IACxF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAyB;IAE/C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAM1C;CACF"}
1
+ {"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEtC;;;GAGG;AACH,qBAAa,MAAM;IAOL,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM;IAN5E,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,QAAQ,CAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAqB,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAAW,GAAG,EAAE,MAAM,EAE3E;IAED,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlC;IAED,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,QAAQ,CAqCnE;IAED;;;;4FAIwF;IACxF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAyB;IAE/C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAM1C;CACF"}
@@ -41,8 +41,29 @@ export class OrgBus {
41
41
  }
42
42
  await appendFile(this.file, JSON.stringify(e) + '\n', 'utf8');
43
43
  }).catch((err) => {
44
+ // R7: surface durable-log failures instead of swallowing under DEBUG.
45
+ // Without this, summarizeRun() reads back a partial bus.jsonl and
46
+ // produces wrong run summaries while the dashboard looks healthy
47
+ // (in-memory listeners still got the event). Emit a follow-up audit
48
+ // event so the loss is visible in the next-history read.
44
49
  if (process.env.DEBUG || process.env.MONOMIND_DEBUG)
45
50
  console.error('[org-bus] event write failed:', err);
51
+ try {
52
+ const audit = {
53
+ id: `${this.run}-${Date.now()}-${this.seq++}-audit`,
54
+ ts: Date.now(),
55
+ org: this.org,
56
+ run: this.run,
57
+ type: 'audit',
58
+ from: 'system',
59
+ msg: `bus append failed: ${err instanceof Error ? err.message : String(err)}. Event id ${e.id} not persisted.`,
60
+ };
61
+ // best-effort second write — if the FS is genuinely down this also
62
+ // fails silently, but on transient SQLITE_BUSY-style hiccups the
63
+ // audit line lands and the lost event is at least attributable.
64
+ void appendFile(this.file, JSON.stringify(audit) + '\n', 'utf8').catch(() => { });
65
+ }
66
+ catch { /* nothing more we can do */ }
46
67
  });
47
68
  for (const fn of this.listeners) {
48
69
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bus.js","sourceRoot":"","sources":["../../../src/orgrt/bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { OrgDaemon, RunningOrg } from './daemon.js';
2
+ /** Time-travel debugging: replay from a specific checkpoint by run ID.
3
+ * Creates a fresh daemon instance and replays events from the target run's bus.jsonl. */
4
+ export declare function replayFrom(daemon: OrgDaemon, name: string, run: string): Promise<RunningOrg | null>;
5
+ /** Resume a previous run from its checkpoint (runtime.json state). Reconstructs
6
+ * the org's agents and mailboxes from the persisted state, enabling time-travel
7
+ * debugging and run recovery after crashes. Returns the resumed RunningOrg or null.
8
+ * Pattern 3: Full state restoration including mailbox queues, policy counters,
9
+ * and session state with TTL and validation. */
10
+ export declare function resumeOrg(daemon: OrgDaemon, name: string): Promise<RunningOrg | null>;
11
+ /** Create a branch from a checkpoint for "what-if" experiments */
12
+ export declare function branchCheckpoint(daemon: OrgDaemon, name: string, run: string, branchName: string): {
13
+ ok: true;
14
+ branchRun: string;
15
+ } | {
16
+ ok: false;
17
+ error: string;
18
+ };
19
+ //# sourceMappingURL=checkpoint-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-ops.d.ts","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAA0D,MAAM,aAAa,CAAC;AAGjH;0FAC0F;AAC1F,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAmDzG;AAED;;;;iDAIiD;AACjD,wBAAsB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA4I3F;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA4BjK"}
@@ -0,0 +1,219 @@
1
+ // packages/@monomind/cli/src/orgrt/checkpoint-ops.ts
2
+ // Extracted from daemon.ts — replay, resume, branch checkpoint operations.
3
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, renameSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { writeJsonFileAtomic } from '../utils/json-file.js';
6
+ import { OrgBus } from './bus.js';
7
+ import { Mailbox } from './mailbox.js';
8
+ import { PolicyEngine } from './policy.js';
9
+ import { OrgDefSchema, ORG_DIR } from './types.js';
10
+ import { validateCheckpoint, isCheckpointExpired, restoreMailboxQueue } from './checkpoint.js';
11
+ import { ScrollbackBuffer, roleTokenBudget } from './daemon.js';
12
+ /** Time-travel debugging: replay from a specific checkpoint by run ID.
13
+ * Creates a fresh daemon instance and replays events from the target run's bus.jsonl. */
14
+ export async function replayFrom(daemon, name, run) {
15
+ const runDir = join(daemon.root, ORG_DIR, name, run);
16
+ if (!existsSync(runDir))
17
+ return null;
18
+ const busFile = join(runDir, 'bus.jsonl');
19
+ if (!existsSync(busFile))
20
+ return null;
21
+ // Create a replay org with a fresh run ID
22
+ const replayRun = `replay-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}-${Math.random().toString(36).slice(2, 6)}`;
23
+ const replayDir = join(daemon.root, ORG_DIR, name, replayRun);
24
+ mkdirSync(replayDir, { recursive: true });
25
+ // Read original events
26
+ const events = readFileSync(busFile, 'utf8').split('\n').filter(Boolean)
27
+ .map(l => { try {
28
+ return JSON.parse(l);
29
+ }
30
+ catch {
31
+ return null;
32
+ } })
33
+ .filter((e) => e !== null);
34
+ if (!events.length)
35
+ return null;
36
+ // Load org definition
37
+ const defPath = join(daemon.root, ORG_DIR, `${name}.json`);
38
+ if (!existsSync(defPath))
39
+ return null;
40
+ const def = OrgDefSchema.parse(JSON.parse(readFileSync(defPath, 'utf8')));
41
+ // Create replay bus
42
+ const bus = new OrgBus(name, replayRun, replayDir);
43
+ const MAX_COLLECTED = 1000;
44
+ const collected = [];
45
+ bus.subscribe(e => {
46
+ const slim = e.data?.content != null
47
+ ? { ...e, data: { ...e.data, content: undefined } }
48
+ : e;
49
+ collected.push(slim);
50
+ if (collected.length > MAX_COLLECTED)
51
+ collected.splice(0, collected.length - MAX_COLLECTED);
52
+ for (const fn of daemon.globalSubscribers)
53
+ fn(e);
54
+ });
55
+ const running = { def, run: replayRun, bus, agents: new Map(), busEvents: () => [...collected] };
56
+ // Reemit events into the replay bus with updated timestamps
57
+ const startTime = Date.now();
58
+ for (const e of events) {
59
+ const replayEvent = { ...e, org: name, run: replayRun, ts: startTime };
60
+ bus.emit(replayEvent);
61
+ }
62
+ daemon.orgs.set(name, running);
63
+ bus.emit({ type: 'status', msg: `replay started from ${run} (${events.length} events replayed)` });
64
+ daemon.persistState(name, 'running', replayRun);
65
+ return running;
66
+ }
67
+ /** Resume a previous run from its checkpoint (runtime.json state). Reconstructs
68
+ * the org's agents and mailboxes from the persisted state, enabling time-travel
69
+ * debugging and run recovery after crashes. Returns the resumed RunningOrg or null.
70
+ * Pattern 3: Full state restoration including mailbox queues, policy counters,
71
+ * and session state with TTL and validation. */
72
+ export async function resumeOrg(daemon, name) {
73
+ const rtPath = join(daemon.root, ORG_DIR, name, 'runtime.json');
74
+ if (!existsSync(rtPath)) {
75
+ console.error('resumeOrg failed: runtime.json missing for', name);
76
+ return null;
77
+ }
78
+ let rt;
79
+ try {
80
+ rt = JSON.parse(readFileSync(rtPath, 'utf8'));
81
+ }
82
+ catch (err) {
83
+ console.error('resumeOrg failed: invalid JSON in runtime.json for', name, err instanceof Error ? err.message : err);
84
+ return null;
85
+ }
86
+ // Allow resume from 'stopped' orgs - the checkpoint contains the running state to restore
87
+ if (!rt?.run || !rt?.checkpoint) {
88
+ console.error('resumeOrg failed: invalid runtime state for', name, 'status:', rt?.status, 'run:', rt?.run, 'checkpoint:', !!rt?.checkpoint);
89
+ return null;
90
+ }
91
+ // Pattern 3: Checkpoint TTL validation - expire stale checkpoints
92
+ if (rt.checkpoint && isCheckpointExpired(rt.checkpoint)) {
93
+ console.error('resumeOrg failed: checkpoint expired for', name, 'updated:', rt.checkpoint.updated);
94
+ return null;
95
+ }
96
+ // Pattern 3: Checksum validation - detect corrupted state
97
+ if (rt.checkpoint && !validateCheckpoint(rt.checkpoint)) {
98
+ console.error('resumeOrg failed: checkpoint validation failed for', name);
99
+ return null;
100
+ }
101
+ // Load the org definition
102
+ const defPath = join(daemon.root, ORG_DIR, `${name}.json`);
103
+ if (!existsSync(defPath)) {
104
+ console.error('resumeOrg failed: org definition missing for', name);
105
+ return null;
106
+ }
107
+ const def = OrgDefSchema.parse(JSON.parse(readFileSync(defPath, 'utf8')));
108
+ const dir = join(daemon.root, ORG_DIR, name, rt.run);
109
+ // Check if run directory exists
110
+ if (!existsSync(dir)) {
111
+ console.error('resumeOrg failed: run directory missing', dir);
112
+ return null;
113
+ }
114
+ // Reconstruct the bus from history
115
+ const bus = new OrgBus(name, rt.run, dir);
116
+ const MAX_COLLECTED = 1000;
117
+ const collected = [];
118
+ bus.subscribe(e => {
119
+ const slim = e.data?.content != null
120
+ ? { ...e, data: { ...e.data, content: undefined } }
121
+ : e;
122
+ collected.push(slim);
123
+ if (collected.length > MAX_COLLECTED)
124
+ collected.splice(0, collected.length - MAX_COLLECTED);
125
+ for (const fn of daemon.globalSubscribers)
126
+ fn(e);
127
+ });
128
+ const running = { def, run: rt.run, bus, agents: new Map(), busEvents: () => [...collected] };
129
+ // Pattern 3: Full checkpoint restoration - reconstruct agents with complete state
130
+ if (rt.checkpoint) {
131
+ const checkpoint = rt.checkpoint;
132
+ // Reconstruct each role from checkpoint state
133
+ for (const [roleId, roleState] of Object.entries(checkpoint.roleState)) {
134
+ const role = def.roles.find(r => r.id === roleId);
135
+ if (!role)
136
+ continue; // Role no longer exists in org definition
137
+ const mailbox = new Mailbox();
138
+ const perRoleBudget = roleTokenBudget(role, def);
139
+ const policy = new PolicyEngine(roleId, { maxTokens: perRoleBudget, ...(role.policy ?? {}) }, bus, daemon.root);
140
+ const runtime = {
141
+ mailbox,
142
+ policy,
143
+ status: roleState.status,
144
+ done: Promise.resolve(),
145
+ metrics: { tokens: roleState.tokensUsed, costUsd: roleState.costUsd },
146
+ lastMessageId: roleState.lastMessageId,
147
+ error: roleState.error,
148
+ scrollback: new ScrollbackBuffer(),
149
+ };
150
+ // Restore scrollback from checkpoint if available
151
+ if (roleState.scrollback?.length) {
152
+ for (const line of roleState.scrollback)
153
+ runtime.scrollback.push(line);
154
+ }
155
+ // Pattern 3: Restore mailbox queue content (not just closed state)
156
+ if (roleState.mailboxQueue.length > 0) {
157
+ restoreMailboxQueue(runtime, roleState.mailboxQueue);
158
+ }
159
+ // Pattern 3: Restore mailbox closed state
160
+ if (roleState.mailboxClosed) {
161
+ mailbox.close();
162
+ }
163
+ // Pattern 3: Restore policy usage counters
164
+ if (roleState.tokensUsed > 0) {
165
+ policy.setUsage(roleState.tokensUsed);
166
+ }
167
+ running.agents.set(roleId, runtime);
168
+ }
169
+ // Set up pending roles for lazy spawn (roles not in checkpoint)
170
+ const reconstructedRoles = new Set(Object.keys(checkpoint.roleState));
171
+ const pendingRoles = new Map();
172
+ for (const role of def.roles) {
173
+ if (!reconstructedRoles.has(role.id)) {
174
+ pendingRoles.set(role.id, role);
175
+ }
176
+ }
177
+ if (pendingRoles.size > 0) {
178
+ running.pendingRoles = pendingRoles;
179
+ }
180
+ }
181
+ // Restore abandoned roles tracking
182
+ if (rt.abandonedRoles) {
183
+ daemon.abandoned.set(name, new Set(rt.abandonedRoles));
184
+ }
185
+ daemon.orgs.set(name, running);
186
+ bus.emit({ type: 'status', msg: `org resumed from checkpoint (${rt.run})` });
187
+ daemon.persistState(name, 'running', rt.run);
188
+ return running;
189
+ }
190
+ /** Create a branch from a checkpoint for "what-if" experiments */
191
+ export function branchCheckpoint(daemon, name, run, branchName) {
192
+ const runDir = join(daemon.root, ORG_DIR, name, run);
193
+ if (!existsSync(runDir)) {
194
+ return { ok: false, error: `run ${run} not found for org ${name}` };
195
+ }
196
+ const branchRun = `branch-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}-${Math.random().toString(36).slice(2, 6)}`;
197
+ const branchDir = join(daemon.root, ORG_DIR, name, branchRun);
198
+ try {
199
+ mkdirSync(branchDir, { recursive: true });
200
+ // Copy bus.jsonl to branch (C4: atomic — partial copy on crash leaves
201
+ // a branch that can't replay its event log).
202
+ const busFile = join(runDir, 'bus.jsonl');
203
+ if (existsSync(busFile)) {
204
+ const busContent = readFileSync(busFile, 'utf8');
205
+ const branchBusFile = join(branchDir, 'bus.jsonl');
206
+ // Atomic write for raw (non-JSON) content: tmp + rename.
207
+ const tmp = `${branchBusFile}.${process.pid}.${Date.now()}.tmp`;
208
+ writeFileSync(tmp, busContent, 'utf8');
209
+ renameSync(tmp, branchBusFile);
210
+ }
211
+ // Create branch marker file (atomic)
212
+ writeJsonFileAtomic(join(branchDir, '.branch-source'), { from: run, branchedAt: new Date().toISOString() });
213
+ return { ok: true, branchRun };
214
+ }
215
+ catch (err) {
216
+ return { ok: false, error: `failed to create branch: ${err instanceof Error ? err.message : String(err)}` };
217
+ }
218
+ }
219
+ //# sourceMappingURL=checkpoint-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-ops.js","sourceRoot":"","sources":["../../../src/orgrt/checkpoint-ops.ts"],"names":[],"mappings":"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"}