@revisium/orchestrator 0.0.0 → 0.1.0-alpha.10

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 (547) hide show
  1. package/README.md +202 -1
  2. package/control-plane/bootstrap.config.json +104 -2
  3. package/control-plane/default-playbook/catalog/pipelines.json +657 -0
  4. package/control-plane/default-playbook/catalog/roles.json +65 -0
  5. package/control-plane/default-playbook/package.json +5 -0
  6. package/control-plane/default-playbook/playbook.json +13 -0
  7. package/control-plane/default-playbook/prompts/analyst.md +29 -0
  8. package/control-plane/default-playbook/prompts/developer.md +26 -0
  9. package/control-plane/default-playbook/prompts/integrator.md +20 -0
  10. package/control-plane/default-playbook/prompts/orchestrator.md +23 -0
  11. package/control-plane/default-playbook/prompts/reviewer.md +28 -0
  12. package/control-plane/default-playbook/prompts/triager.md +51 -0
  13. package/control-plane/default-playbook/prompts/watcher.md +24 -0
  14. package/dist/api/graphql-api/filters/agent-observability-exception.filter.js +24 -0
  15. package/dist/api/graphql-api/filters/agent-observability-exception.filter.js.map +1 -0
  16. package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js +36 -0
  17. package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js.map +1 -0
  18. package/dist/api/graphql-api/graphql-api.module.js +77 -0
  19. package/dist/api/graphql-api/graphql-api.module.js.map +1 -0
  20. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js +296 -0
  21. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js.map +1 -0
  22. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js +64 -0
  23. package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js.map +1 -0
  24. package/dist/api/graphql-api/graphql-ws/constants.js +11 -0
  25. package/dist/api/graphql-api/graphql-ws/constants.js.map +1 -0
  26. package/dist/api/graphql-api/graphql-ws/pubsub.module.js +32 -0
  27. package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -0
  28. package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js +101 -0
  29. package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js.map +1 -0
  30. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js +115 -0
  31. package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js.map +1 -0
  32. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +85 -0
  33. package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -0
  34. package/dist/api/graphql-api/graphql-ws/ws.js +22 -0
  35. package/dist/api/graphql-api/graphql-ws/ws.js.map +1 -0
  36. package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js +56 -0
  37. package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js.map +1 -0
  38. package/dist/api/graphql-api/inbox/inbox.resolver.js +125 -0
  39. package/dist/api/graphql-api/inbox/inbox.resolver.js.map +1 -0
  40. package/dist/api/graphql-api/inbox/inputs/answer-question.input.js +33 -0
  41. package/dist/api/graphql-api/inbox/inputs/answer-question.input.js.map +1 -0
  42. package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js +27 -0
  43. package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js.map +1 -0
  44. package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js +28 -0
  45. package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js.map +1 -0
  46. package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js +38 -0
  47. package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js.map +1 -0
  48. package/dist/api/graphql-api/inbox/model/gate-risk.model.js +53 -0
  49. package/dist/api/graphql-api/inbox/model/gate-risk.model.js.map +1 -0
  50. package/dist/api/graphql-api/inbox/model/inbox-connection.model.js +16 -0
  51. package/dist/api/graphql-api/inbox/model/inbox-connection.model.js.map +1 -0
  52. package/dist/api/graphql-api/inbox/model/inbox-item.model.js +88 -0
  53. package/dist/api/graphql-api/inbox/model/inbox-item.model.js.map +1 -0
  54. package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js +48 -0
  55. package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js.map +1 -0
  56. package/dist/api/graphql-api/method/inputs/list-method.input.js +15 -0
  57. package/dist/api/graphql-api/method/inputs/list-method.input.js.map +1 -0
  58. package/dist/api/graphql-api/method/method.resolver.js +90 -0
  59. package/dist/api/graphql-api/method/method.resolver.js.map +1 -0
  60. package/dist/api/graphql-api/method/model/alternative-role-group.model.js +32 -0
  61. package/dist/api/graphql-api/method/model/alternative-role-group.model.js.map +1 -0
  62. package/dist/api/graphql-api/method/model/pipeline-connection.model.js +16 -0
  63. package/dist/api/graphql-api/method/model/pipeline-connection.model.js.map +1 -0
  64. package/dist/api/graphql-api/method/model/pipeline.model.js +69 -0
  65. package/dist/api/graphql-api/method/model/pipeline.model.js.map +1 -0
  66. package/dist/api/graphql-api/method/model/playbook-connection.model.js +16 -0
  67. package/dist/api/graphql-api/method/model/playbook-connection.model.js.map +1 -0
  68. package/dist/api/graphql-api/method/model/playbook.model.js +47 -0
  69. package/dist/api/graphql-api/method/model/playbook.model.js.map +1 -0
  70. package/dist/api/graphql-api/method/model/role-connection.model.js +16 -0
  71. package/dist/api/graphql-api/method/model/role-connection.model.js.map +1 -0
  72. package/dist/api/graphql-api/method/model/role.model.js +98 -0
  73. package/dist/api/graphql-api/method/model/role.model.js.map +1 -0
  74. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +52 -0
  75. package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -0
  76. package/dist/api/graphql-api/pr/model/pr-readiness.model.js +403 -0
  77. package/dist/api/graphql-api/pr/model/pr-readiness.model.js.map +1 -0
  78. package/dist/api/graphql-api/pr/pr.resolver.js +76 -0
  79. package/dist/api/graphql-api/pr/pr.resolver.js.map +1 -0
  80. package/dist/api/graphql-api/registerGraphqlEnums.js +9 -0
  81. package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -0
  82. package/dist/api/graphql-api/runs/inputs/create-run.input.js +63 -0
  83. package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -0
  84. package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js +48 -0
  85. package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js.map +1 -0
  86. package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js +32 -0
  87. package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js.map +1 -0
  88. package/dist/api/graphql-api/runs/inputs/get-run-events.input.js +28 -0
  89. package/dist/api/graphql-api/runs/inputs/get-run-events.input.js.map +1 -0
  90. package/dist/api/graphql-api/runs/inputs/list-runs.input.js +23 -0
  91. package/dist/api/graphql-api/runs/inputs/list-runs.input.js.map +1 -0
  92. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js +43 -0
  93. package/dist/api/graphql-api/runs/inputs/simulate-route.input.js.map +1 -0
  94. package/dist/api/graphql-api/runs/model/agent-activity.model.js +367 -0
  95. package/dist/api/graphql-api/runs/model/agent-activity.model.js.map +1 -0
  96. package/dist/api/graphql-api/runs/model/create-run-result.model.js +53 -0
  97. package/dist/api/graphql-api/runs/model/create-run-result.model.js.map +1 -0
  98. package/dist/api/graphql-api/runs/model/run-attempt.model.js +114 -0
  99. package/dist/api/graphql-api/runs/model/run-attempt.model.js.map +1 -0
  100. package/dist/api/graphql-api/runs/model/run-connection.model.js +16 -0
  101. package/dist/api/graphql-api/runs/model/run-connection.model.js.map +1 -0
  102. package/dist/api/graphql-api/runs/model/run-cost.model.js +67 -0
  103. package/dist/api/graphql-api/runs/model/run-cost.model.js.map +1 -0
  104. package/dist/api/graphql-api/runs/model/run-digest.model.js +41 -0
  105. package/dist/api/graphql-api/runs/model/run-digest.model.js.map +1 -0
  106. package/dist/api/graphql-api/runs/model/run-event-connection.model.js +16 -0
  107. package/dist/api/graphql-api/runs/model/run-event-connection.model.js.map +1 -0
  108. package/dist/api/graphql-api/runs/model/run-event.model.js +58 -0
  109. package/dist/api/graphql-api/runs/model/run-event.model.js.map +1 -0
  110. package/dist/api/graphql-api/runs/model/run-progress.model.js +33 -0
  111. package/dist/api/graphql-api/runs/model/run-progress.model.js.map +1 -0
  112. package/dist/api/graphql-api/runs/model/run-workflow.model.js +287 -0
  113. package/dist/api/graphql-api/runs/model/run-workflow.model.js.map +1 -0
  114. package/dist/api/graphql-api/runs/model/run.model.js +57 -0
  115. package/dist/api/graphql-api/runs/model/run.model.js.map +1 -0
  116. package/dist/api/graphql-api/runs/model/usage.model.js +32 -0
  117. package/dist/api/graphql-api/runs/model/usage.model.js.map +1 -0
  118. package/dist/api/graphql-api/runs/run-digest.resolver.js +40 -0
  119. package/dist/api/graphql-api/runs/run-digest.resolver.js.map +1 -0
  120. package/dist/api/graphql-api/runs/run-events.resolver.js +45 -0
  121. package/dist/api/graphql-api/runs/run-events.resolver.js.map +1 -0
  122. package/dist/api/graphql-api/runs/run-progress.resolver.js +53 -0
  123. package/dist/api/graphql-api/runs/run-progress.resolver.js.map +1 -0
  124. package/dist/api/graphql-api/runs/runs-subscription.resolver.js +124 -0
  125. package/dist/api/graphql-api/runs/runs-subscription.resolver.js.map +1 -0
  126. package/dist/api/graphql-api/runs/runs.resolver.js +165 -0
  127. package/dist/api/graphql-api/runs/runs.resolver.js.map +1 -0
  128. package/dist/api/graphql-api/share/graphql-param-types.js +6 -0
  129. package/dist/api/graphql-api/share/graphql-param-types.js.map +1 -0
  130. package/dist/api/graphql-api/share/inputs/connection.input.js +27 -0
  131. package/dist/api/graphql-api/share/inputs/connection.input.js.map +1 -0
  132. package/dist/api/graphql-api/share/inputs/run-subscription.input.js +22 -0
  133. package/dist/api/graphql-api/share/inputs/run-subscription.input.js.map +1 -0
  134. package/dist/api/graphql-api/share/model/paginated.model.js +75 -0
  135. package/dist/api/graphql-api/share/model/paginated.model.js.map +1 -0
  136. package/dist/api/graphql-api/system/model/daemon-status.model.js +47 -0
  137. package/dist/api/graphql-api/system/model/daemon-status.model.js.map +1 -0
  138. package/dist/api/graphql-api/system/model/doctor-result.model.js +33 -0
  139. package/dist/api/graphql-api/system/model/doctor-result.model.js.map +1 -0
  140. package/dist/api/graphql-api/system/model/project.model.js +37 -0
  141. package/dist/api/graphql-api/system/model/project.model.js.map +1 -0
  142. package/dist/api/graphql-api/system/model/repository-context.model.js +70 -0
  143. package/dist/api/graphql-api/system/model/repository-context.model.js.map +1 -0
  144. package/dist/api/graphql-api/system/model/repository-validation.model.js +62 -0
  145. package/dist/api/graphql-api/system/model/repository-validation.model.js.map +1 -0
  146. package/dist/api/graphql-api/system/model/system-status.model.js +29 -0
  147. package/dist/api/graphql-api/system/model/system-status.model.js.map +1 -0
  148. package/dist/api/graphql-api/system/system.resolver.js +83 -0
  149. package/dist/api/graphql-api/system/system.resolver.js.map +1 -0
  150. package/dist/cli/commands/doctor-report.js +70 -0
  151. package/dist/cli/commands/doctor-report.js.map +1 -0
  152. package/dist/cli/commands/lifecycle.js +463 -0
  153. package/dist/cli/commands/lifecycle.js.map +1 -0
  154. package/dist/cli/commands/mcp.js +53 -8
  155. package/dist/cli/commands/mcp.js.map +1 -1
  156. package/dist/cli/commands/process-tree.js +87 -0
  157. package/dist/cli/commands/process-tree.js.map +1 -0
  158. package/dist/cli/commands/revisium-helpers.js +2 -2
  159. package/dist/cli/commands/rogue-reaper.js +63 -0
  160. package/dist/cli/commands/rogue-reaper.js.map +1 -0
  161. package/dist/cli/index.js +5 -29
  162. package/dist/cli/index.js.map +1 -1
  163. package/dist/cli/program.js +7 -23
  164. package/dist/cli/program.js.map +1 -1
  165. package/dist/config.js +79 -1
  166. package/dist/config.js.map +1 -1
  167. package/dist/control-plane/bootstrap.js +101 -0
  168. package/dist/control-plane/bootstrap.js.map +1 -0
  169. package/dist/control-plane/change-notifications.js +35 -0
  170. package/dist/control-plane/change-notifications.js.map +1 -0
  171. package/dist/control-plane/client-transport.js +74 -41
  172. package/dist/control-plane/client-transport.js.map +1 -1
  173. package/dist/control-plane/data-access.js +13 -5
  174. package/dist/control-plane/data-access.js.map +1 -1
  175. package/dist/control-plane/definitions.js +1 -1
  176. package/dist/control-plane/definitions.js.map +1 -1
  177. package/dist/control-plane/inbox.js +5 -31
  178. package/dist/control-plane/inbox.js.map +1 -1
  179. package/dist/control-plane/index.js +1 -1
  180. package/dist/control-plane/index.js.map +1 -1
  181. package/dist/control-plane/json-fields.js +2 -0
  182. package/dist/control-plane/json-fields.js.map +1 -1
  183. package/dist/control-plane/resolve-cwd.js +76 -8
  184. package/dist/control-plane/resolve-cwd.js.map +1 -1
  185. package/dist/control-plane/schema-migration.js +82 -0
  186. package/dist/control-plane/schema-migration.js.map +1 -0
  187. package/dist/control-plane/seed-default-playbook.js +141 -0
  188. package/dist/control-plane/seed-default-playbook.js.map +1 -0
  189. package/dist/control-plane/steps.js +15 -349
  190. package/dist/control-plane/steps.js.map +1 -1
  191. package/dist/control-plane/tables.js +1 -0
  192. package/dist/control-plane/tables.js.map +1 -1
  193. package/dist/e2e/kit/agents.js +148 -0
  194. package/dist/e2e/kit/agents.js.map +1 -0
  195. package/dist/e2e/kit/assertions.js +163 -0
  196. package/dist/e2e/kit/assertions.js.map +1 -0
  197. package/dist/e2e/kit/crash.js +44 -0
  198. package/dist/e2e/kit/crash.js.map +1 -0
  199. package/dist/e2e/kit/drive.js +45 -0
  200. package/dist/e2e/kit/drive.js.map +1 -0
  201. package/dist/e2e/kit/env.js +16 -0
  202. package/dist/e2e/kit/env.js.map +1 -0
  203. package/dist/e2e/kit/fake-integrator.js +57 -0
  204. package/dist/e2e/kit/fake-integrator.js.map +1 -0
  205. package/dist/e2e/kit/gh-emulator.js +213 -0
  206. package/dist/e2e/kit/gh-emulator.js.map +1 -0
  207. package/dist/e2e/kit/git-target-repo.js +115 -0
  208. package/dist/e2e/kit/git-target-repo.js.map +1 -0
  209. package/dist/e2e/kit/harness.js +72 -0
  210. package/dist/e2e/kit/harness.js.map +1 -0
  211. package/dist/e2e/kit/index.js +14 -0
  212. package/dist/e2e/kit/index.js.map +1 -0
  213. package/dist/e2e/kit/mcp.js +32 -0
  214. package/dist/e2e/kit/mcp.js.map +1 -0
  215. package/dist/e2e/kit/scenarios.js +196 -0
  216. package/dist/e2e/kit/scenarios.js.map +1 -0
  217. package/dist/e2e/recovery-crash-child.js +29 -0
  218. package/dist/e2e/recovery-crash-child.js.map +1 -0
  219. package/dist/e2e/recovery-dd-crash-child.js +43 -0
  220. package/dist/e2e/recovery-dd-crash-child.js.map +1 -0
  221. package/dist/engine/dbos.module.js +2 -1
  222. package/dist/engine/dbos.module.js.map +1 -1
  223. package/dist/engine/dbos.service.js +89 -18
  224. package/dist/engine/dbos.service.js.map +1 -1
  225. package/dist/engine/ensure-postgres.js +18 -4
  226. package/dist/engine/ensure-postgres.js.map +1 -1
  227. package/dist/features/inbox/commands/handlers/inbox-command.handlers.js +80 -0
  228. package/dist/features/inbox/commands/handlers/inbox-command.handlers.js.map +1 -0
  229. package/dist/features/inbox/commands/impl/answer-question.command.js +7 -0
  230. package/dist/features/inbox/commands/impl/answer-question.command.js.map +1 -0
  231. package/dist/features/inbox/commands/impl/approve-gate.command.js +7 -0
  232. package/dist/features/inbox/commands/impl/approve-gate.command.js.map +1 -0
  233. package/dist/features/inbox/commands/impl/reject-gate.command.js +7 -0
  234. package/dist/features/inbox/commands/impl/reject-gate.command.js.map +1 -0
  235. package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js +7 -0
  236. package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js.map +1 -0
  237. package/dist/features/inbox/commands/index.js +8 -0
  238. package/dist/features/inbox/commands/index.js.map +1 -0
  239. package/dist/features/inbox/inbox-api.module.js +23 -0
  240. package/dist/features/inbox/inbox-api.module.js.map +1 -0
  241. package/dist/features/inbox/inbox-api.service.js +63 -0
  242. package/dist/features/inbox/inbox-api.service.js.map +1 -0
  243. package/dist/features/inbox/queries/handlers/inbox-query.handlers.js +111 -0
  244. package/dist/features/inbox/queries/handlers/inbox-query.handlers.js.map +1 -0
  245. package/dist/features/inbox/queries/impl/get-inbox-item.query.js +7 -0
  246. package/dist/features/inbox/queries/impl/get-inbox-item.query.js.map +1 -0
  247. package/dist/features/inbox/queries/impl/get-pending-decisions.query.js +7 -0
  248. package/dist/features/inbox/queries/impl/get-pending-decisions.query.js.map +1 -0
  249. package/dist/features/inbox/queries/impl/list-inbox.query.js +7 -0
  250. package/dist/features/inbox/queries/impl/list-inbox.query.js.map +1 -0
  251. package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js +7 -0
  252. package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js.map +1 -0
  253. package/dist/features/inbox/queries/index.js +8 -0
  254. package/dist/features/inbox/queries/index.js.map +1 -0
  255. package/dist/features/method/commands/index.js +2 -0
  256. package/dist/features/method/commands/index.js.map +1 -0
  257. package/dist/features/method/method-api.module.js +23 -0
  258. package/dist/features/method/method-api.module.js.map +1 -0
  259. package/dist/features/method/method-api.service.js +47 -0
  260. package/dist/features/method/method-api.service.js.map +1 -0
  261. package/dist/features/method/queries/handlers/method-query.handlers.js +115 -0
  262. package/dist/features/method/queries/handlers/method-query.handlers.js.map +1 -0
  263. package/dist/features/method/queries/impl/get-pipeline.query.js +7 -0
  264. package/dist/features/method/queries/impl/get-pipeline.query.js.map +1 -0
  265. package/dist/features/method/queries/impl/get-role.query.js +7 -0
  266. package/dist/features/method/queries/impl/get-role.query.js.map +1 -0
  267. package/dist/features/method/queries/impl/list-pipelines.query.js +7 -0
  268. package/dist/features/method/queries/impl/list-pipelines.query.js.map +1 -0
  269. package/dist/features/method/queries/impl/list-playbooks.query.js +7 -0
  270. package/dist/features/method/queries/impl/list-playbooks.query.js.map +1 -0
  271. package/dist/features/method/queries/impl/list-roles.query.js +7 -0
  272. package/dist/features/method/queries/impl/list-roles.query.js.map +1 -0
  273. package/dist/features/method/queries/index.js +9 -0
  274. package/dist/features/method/queries/index.js.map +1 -0
  275. package/dist/features/pr/commands/index.js +2 -0
  276. package/dist/features/pr/commands/index.js.map +1 -0
  277. package/dist/features/pr/pr-api.module.js +23 -0
  278. package/dist/features/pr/pr-api.module.js.map +1 -0
  279. package/dist/features/pr/pr-api.service.js +35 -0
  280. package/dist/features/pr/pr-api.service.js.map +1 -0
  281. package/dist/features/pr/queries/handlers/pr-query.handlers.js +48 -0
  282. package/dist/features/pr/queries/handlers/pr-query.handlers.js.map +1 -0
  283. package/dist/features/pr/queries/impl/get-pr-readiness.query.js +7 -0
  284. package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -0
  285. package/dist/features/pr/queries/impl/list-pr-feedback.query.js +7 -0
  286. package/dist/features/pr/queries/impl/list-pr-feedback.query.js.map +1 -0
  287. package/dist/features/pr/queries/index.js +3 -0
  288. package/dist/features/pr/queries/index.js.map +1 -0
  289. package/dist/features/runs/commands/handlers/runs-command.handlers.js +32 -0
  290. package/dist/features/runs/commands/handlers/runs-command.handlers.js.map +1 -0
  291. package/dist/features/runs/commands/impl/create-run.command.js +7 -0
  292. package/dist/features/runs/commands/impl/create-run.command.js.map +1 -0
  293. package/dist/features/runs/commands/index.js +3 -0
  294. package/dist/features/runs/commands/index.js.map +1 -0
  295. package/dist/features/runs/queries/handlers/runs-query.handlers.js +359 -0
  296. package/dist/features/runs/queries/handlers/runs-query.handlers.js.map +1 -0
  297. package/dist/features/runs/queries/impl/get-agent-activity.query.js +7 -0
  298. package/dist/features/runs/queries/impl/get-agent-activity.query.js.map +1 -0
  299. package/dist/features/runs/queries/impl/get-agent-attempts.query.js +7 -0
  300. package/dist/features/runs/queries/impl/get-agent-attempts.query.js.map +1 -0
  301. package/dist/features/runs/queries/impl/get-agent-log.query.js +7 -0
  302. package/dist/features/runs/queries/impl/get-agent-log.query.js.map +1 -0
  303. package/dist/features/runs/queries/impl/get-run-attempts.query.js +7 -0
  304. package/dist/features/runs/queries/impl/get-run-attempts.query.js.map +1 -0
  305. package/dist/features/runs/queries/impl/get-run-digest.query.js +7 -0
  306. package/dist/features/runs/queries/impl/get-run-digest.query.js.map +1 -0
  307. package/dist/features/runs/queries/impl/get-run-events.query.js +7 -0
  308. package/dist/features/runs/queries/impl/get-run-events.query.js.map +1 -0
  309. package/dist/features/runs/queries/impl/get-run-progress.query.js +7 -0
  310. package/dist/features/runs/queries/impl/get-run-progress.query.js.map +1 -0
  311. package/dist/features/runs/queries/impl/get-run-workflow.query.js +7 -0
  312. package/dist/features/runs/queries/impl/get-run-workflow.query.js.map +1 -0
  313. package/dist/features/runs/queries/impl/get-run.query.js +7 -0
  314. package/dist/features/runs/queries/impl/get-run.query.js.map +1 -0
  315. package/dist/features/runs/queries/impl/list-runs.query.js +7 -0
  316. package/dist/features/runs/queries/impl/list-runs.query.js.map +1 -0
  317. package/dist/features/runs/queries/impl/simulate-route.query.js +7 -0
  318. package/dist/features/runs/queries/impl/simulate-route.query.js.map +1 -0
  319. package/dist/features/runs/queries/index.js +15 -0
  320. package/dist/features/runs/queries/index.js.map +1 -0
  321. package/dist/features/runs/runs-api.module.js +23 -0
  322. package/dist/features/runs/runs-api.module.js.map +1 -0
  323. package/dist/features/runs/runs-api.service.js +79 -0
  324. package/dist/features/runs/runs-api.service.js.map +1 -0
  325. package/dist/features/shared/connection.js +39 -0
  326. package/dist/features/shared/connection.js.map +1 -0
  327. package/dist/features/system/commands/index.js +2 -0
  328. package/dist/features/system/commands/index.js.map +1 -0
  329. package/dist/features/system/queries/handlers/system-query.handlers.js +96 -0
  330. package/dist/features/system/queries/handlers/system-query.handlers.js.map +1 -0
  331. package/dist/features/system/queries/impl/doctor.query.js +4 -0
  332. package/dist/features/system/queries/impl/doctor.query.js.map +1 -0
  333. package/dist/features/system/queries/impl/get-project.query.js +4 -0
  334. package/dist/features/system/queries/impl/get-project.query.js.map +1 -0
  335. package/dist/features/system/queries/impl/get-repository-context.query.js +7 -0
  336. package/dist/features/system/queries/impl/get-repository-context.query.js.map +1 -0
  337. package/dist/features/system/queries/impl/get-status.query.js +4 -0
  338. package/dist/features/system/queries/impl/get-status.query.js.map +1 -0
  339. package/dist/features/system/queries/impl/validate-repository.query.js +7 -0
  340. package/dist/features/system/queries/impl/validate-repository.query.js.map +1 -0
  341. package/dist/features/system/queries/index.js +9 -0
  342. package/dist/features/system/queries/index.js.map +1 -0
  343. package/dist/features/system/system-api.module.js +23 -0
  344. package/dist/features/system/system-api.module.js.map +1 -0
  345. package/dist/features/system/system-api.service.js +47 -0
  346. package/dist/features/system/system-api.service.js.map +1 -0
  347. package/dist/host/daemon.js +99 -0
  348. package/dist/host/daemon.js.map +1 -0
  349. package/dist/host/dbos-identity.js +42 -0
  350. package/dist/host/dbos-identity.js.map +1 -0
  351. package/dist/host/ensure-host.js +120 -0
  352. package/dist/host/ensure-host.js.map +1 -0
  353. package/dist/host/host-runtime.js +90 -0
  354. package/dist/host/host-runtime.js.map +1 -0
  355. package/dist/host/host.lifecycle.js +16 -3
  356. package/dist/host/host.lifecycle.js.map +1 -1
  357. package/dist/host/queue-ownership.js +70 -0
  358. package/dist/host/queue-ownership.js.map +1 -0
  359. package/dist/host/queue-poller-census.js +47 -0
  360. package/dist/host/queue-poller-census.js.map +1 -0
  361. package/dist/http/graphql-host.js +56 -0
  362. package/dist/http/graphql-host.js.map +1 -0
  363. package/dist/{mcp/mcp.module.js → http/graphql-host.module.js} +12 -10
  364. package/dist/http/graphql-host.module.js.map +1 -0
  365. package/dist/infrastructure/metrics/graphql/graphql-metrics.js +91 -0
  366. package/dist/infrastructure/metrics/graphql/graphql-metrics.js.map +1 -0
  367. package/dist/mcp/mcp-capabilities.js +9 -1
  368. package/dist/mcp/mcp-capabilities.js.map +1 -1
  369. package/dist/mcp/mcp-facade.service.js +68 -5
  370. package/dist/mcp/mcp-facade.service.js.map +1 -1
  371. package/dist/mcp/mcp-http.service.js +95 -0
  372. package/dist/mcp/mcp-http.service.js.map +1 -0
  373. package/dist/mcp/mcp-tools.js +93 -7
  374. package/dist/mcp/mcp-tools.js.map +1 -1
  375. package/dist/observability/agent-activity-reporter.js +185 -0
  376. package/dist/observability/agent-activity-reporter.js.map +1 -0
  377. package/dist/observability/agent-observability.service.js +1142 -0
  378. package/dist/observability/agent-observability.service.js.map +1 -0
  379. package/dist/observability/index.js +4 -0
  380. package/dist/observability/index.js.map +1 -0
  381. package/dist/observability/types.js +11 -0
  382. package/dist/observability/types.js.map +1 -0
  383. package/dist/pipeline/await-human.js +8 -4
  384. package/dist/pipeline/await-human.js.map +1 -1
  385. package/dist/pipeline/data-driven-task.workflow.js +667 -0
  386. package/dist/pipeline/data-driven-task.workflow.js.map +1 -0
  387. package/dist/pipeline/data-driven-template.js +57 -0
  388. package/dist/pipeline/data-driven-template.js.map +1 -0
  389. package/dist/pipeline/pipeline.module.js +2 -2
  390. package/dist/pipeline/pipeline.module.js.map +1 -1
  391. package/dist/pipeline/pipeline.service.js +412 -0
  392. package/dist/pipeline/pipeline.service.js.map +1 -0
  393. package/dist/pipeline/route-contract.js +82 -0
  394. package/dist/pipeline/route-contract.js.map +1 -0
  395. package/dist/pipeline-core/index.js +16 -0
  396. package/dist/pipeline-core/index.js.map +1 -0
  397. package/dist/pipeline-core/interpret.js +353 -0
  398. package/dist/pipeline-core/interpret.js.map +1 -0
  399. package/dist/pipeline-core/kit/assertions.js +61 -0
  400. package/dist/pipeline-core/kit/assertions.js.map +1 -0
  401. package/dist/pipeline-core/kit/builders.js +138 -0
  402. package/dist/pipeline-core/kit/builders.js.map +1 -0
  403. package/dist/pipeline-core/kit/drive.js +96 -0
  404. package/dist/pipeline-core/kit/drive.js.map +1 -0
  405. package/dist/pipeline-core/kit/fixtures.js +342 -0
  406. package/dist/pipeline-core/kit/fixtures.js.map +1 -0
  407. package/dist/pipeline-core/kit/index.js +13 -0
  408. package/dist/pipeline-core/kit/index.js.map +1 -0
  409. package/dist/pipeline-core/types.js +134 -0
  410. package/dist/pipeline-core/types.js.map +1 -0
  411. package/dist/pipeline-core/validate-capability.js +23 -0
  412. package/dist/pipeline-core/validate-capability.js.map +1 -0
  413. package/dist/pipeline-core/validate-conflicts.js +37 -0
  414. package/dist/pipeline-core/validate-conflicts.js.map +1 -0
  415. package/dist/pipeline-core/validate-dataflow.js +212 -0
  416. package/dist/pipeline-core/validate-dataflow.js.map +1 -0
  417. package/dist/pipeline-core/validate-diff.js +158 -0
  418. package/dist/pipeline-core/validate-diff.js.map +1 -0
  419. package/dist/pipeline-core/validate-edges.js +44 -0
  420. package/dist/pipeline-core/validate-edges.js.map +1 -0
  421. package/dist/pipeline-core/validate-graph.js +123 -0
  422. package/dist/pipeline-core/validate-graph.js.map +1 -0
  423. package/dist/pipeline-core/validate-loops.js +226 -0
  424. package/dist/pipeline-core/validate-loops.js.map +1 -0
  425. package/dist/pipeline-core/validate-parallel.js +132 -0
  426. package/dist/pipeline-core/validate-parallel.js.map +1 -0
  427. package/dist/pipeline-core/validate-sink.js +27 -0
  428. package/dist/pipeline-core/validate-sink.js.map +1 -0
  429. package/dist/pipeline-core/validate-topology.js +140 -0
  430. package/dist/pipeline-core/validate-topology.js.map +1 -0
  431. package/dist/pipeline-core/validate-verdict.js +72 -0
  432. package/dist/pipeline-core/validate-verdict.js.map +1 -0
  433. package/dist/pipeline-core/validate.js +119 -0
  434. package/dist/pipeline-core/validate.js.map +1 -0
  435. package/dist/playbook/catalog-loader.js +14 -1
  436. package/dist/playbook/catalog-loader.js.map +1 -1
  437. package/dist/playbook/import-mapper.js +14 -38
  438. package/dist/playbook/import-mapper.js.map +1 -1
  439. package/dist/playbook/manifest.js +1 -1
  440. package/dist/revisium/playbooks.service.js +107 -19
  441. package/dist/revisium/playbooks.service.js.map +1 -1
  442. package/dist/revisium/roles.service.js +1 -1
  443. package/dist/revisium/roles.service.js.map +1 -1
  444. package/dist/revisium/run.service.js +55 -8
  445. package/dist/revisium/run.service.js.map +1 -1
  446. package/dist/run/append-event.js +24 -1
  447. package/dist/run/append-event.js.map +1 -1
  448. package/dist/run/block-run.js +17 -0
  449. package/dist/run/block-run.js.map +1 -0
  450. package/dist/run/complete-run.js +18 -0
  451. package/dist/run/complete-run.js.map +1 -0
  452. package/dist/run/create-run.js +33 -36
  453. package/dist/run/create-run.js.map +1 -1
  454. package/dist/run/inspect-run.js +31 -30
  455. package/dist/run/inspect-run.js.map +1 -1
  456. package/dist/run/run-outputs.js +88 -0
  457. package/dist/run/run-outputs.js.map +1 -0
  458. package/dist/run/terminal-run-status.js +66 -7
  459. package/dist/run/terminal-run-status.js.map +1 -1
  460. package/dist/runners/claude-code.service.js +5 -0
  461. package/dist/runners/claude-code.service.js.map +1 -1
  462. package/dist/runners/codex.service.js +51 -0
  463. package/dist/runners/codex.service.js.map +1 -0
  464. package/dist/runners/integrator-branch-naming.js +39 -0
  465. package/dist/runners/integrator-branch-naming.js.map +1 -0
  466. package/dist/runners/integrator-git.js +84 -0
  467. package/dist/runners/integrator-git.js.map +1 -0
  468. package/dist/runners/integrator-remote.js +34 -0
  469. package/dist/runners/integrator-remote.js.map +1 -0
  470. package/dist/runners/integrator-types.js +9 -0
  471. package/dist/runners/integrator-types.js.map +1 -0
  472. package/dist/runners/integrator.js +327 -147
  473. package/dist/runners/integrator.js.map +1 -1
  474. package/dist/runners/runner.module.js +7 -3
  475. package/dist/runners/runner.module.js.map +1 -1
  476. package/dist/runners/worktree.service.js +63 -0
  477. package/dist/runners/worktree.service.js.map +1 -0
  478. package/dist/smoke/cli.js +47 -0
  479. package/dist/smoke/cli.js.map +1 -0
  480. package/dist/smoke/isolation.js +113 -0
  481. package/dist/smoke/isolation.js.map +1 -0
  482. package/dist/task-control-plane/run-watch.service.js +281 -0
  483. package/dist/task-control-plane/run-watch.service.js.map +1 -0
  484. package/dist/task-control-plane/task-control-plane-api.service.js +569 -23
  485. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  486. package/dist/task-control-plane/task-control-plane.module.js +22 -3
  487. package/dist/task-control-plane/task-control-plane.module.js.map +1 -1
  488. package/dist/worker/artifact-store.js +116 -0
  489. package/dist/worker/artifact-store.js.map +1 -0
  490. package/dist/worker/build-context.js +169 -2
  491. package/dist/worker/build-context.js.map +1 -1
  492. package/dist/worker/claude-code-runner.js +159 -68
  493. package/dist/worker/claude-code-runner.js.map +1 -1
  494. package/dist/worker/codex-runner.js +474 -0
  495. package/dist/worker/codex-runner.js.map +1 -0
  496. package/dist/worker/git-worktree-manager.js +129 -65
  497. package/dist/worker/git-worktree-manager.js.map +1 -1
  498. package/dist/worker/process-executor.js +23 -2
  499. package/dist/worker/process-executor.js.map +1 -1
  500. package/dist/worker/result-envelope.js +115 -57
  501. package/dist/worker/result-envelope.js.map +1 -1
  502. package/dist/worker/runner-common.js +106 -0
  503. package/dist/worker/runner-common.js.map +1 -0
  504. package/dist/worker/runner-dispatch.js +4 -1
  505. package/dist/worker/runner-dispatch.js.map +1 -1
  506. package/dist/worker/runner.js +11 -1
  507. package/dist/worker/runner.js.map +1 -1
  508. package/dist/worker/stub-runner.js +7 -45
  509. package/dist/worker/stub-runner.js.map +1 -1
  510. package/package.json +32 -7
  511. package/dist/app.module.js +0 -28
  512. package/dist/app.module.js.map +0 -1
  513. package/dist/cli/commands/bootstrap.js +0 -39
  514. package/dist/cli/commands/bootstrap.js.map +0 -1
  515. package/dist/cli/commands/dev.js +0 -143
  516. package/dist/cli/commands/dev.js.map +0 -1
  517. package/dist/cli/commands/inbox.js +0 -288
  518. package/dist/cli/commands/inbox.js.map +0 -1
  519. package/dist/cli/commands/playbook.js +0 -74
  520. package/dist/cli/commands/playbook.js.map +0 -1
  521. package/dist/cli/commands/poll-workflow-state.js +0 -144
  522. package/dist/cli/commands/poll-workflow-state.js.map +0 -1
  523. package/dist/cli/commands/revisium-context.js +0 -23
  524. package/dist/cli/commands/revisium-context.js.map +0 -1
  525. package/dist/cli/commands/revisium.js +0 -89
  526. package/dist/cli/commands/revisium.js.map +0 -1
  527. package/dist/cli/commands/run.js +0 -426
  528. package/dist/cli/commands/run.js.map +0 -1
  529. package/dist/cli/commands/work.js +0 -149
  530. package/dist/cli/commands/work.js.map +0 -1
  531. package/dist/cli/live-guard.js +0 -49
  532. package/dist/cli/live-guard.js.map +0 -1
  533. package/dist/cli/needs-host.js +0 -78
  534. package/dist/cli/needs-host.js.map +0 -1
  535. package/dist/mcp/mcp-stdio.service.js +0 -48
  536. package/dist/mcp/mcp-stdio.service.js.map +0 -1
  537. package/dist/mcp/mcp.module.js.map +0 -1
  538. package/dist/pipeline/develop-task.workflow.js +0 -497
  539. package/dist/pipeline/develop-task.workflow.js.map +0 -1
  540. package/dist/worker/loop.js +0 -122
  541. package/dist/worker/loop.js.map +0 -1
  542. package/dist/worker/script-runner.js +0 -28
  543. package/dist/worker/script-runner.js.map +0 -1
  544. package/dist/worker/worker-id.js +0 -18
  545. package/dist/worker/worker-id.js.map +0 -1
  546. package/dist/worker/worktree-manager.js +0 -7
  547. package/dist/worker/worktree-manager.js.map +0 -1
@@ -0,0 +1,196 @@
1
+ import assert from 'node:assert/strict';
2
+ import { PLAYBOOK_SOURCE } from './env.js';
3
+ import { waitForGate } from './drive.js';
4
+ /** Playbook id installed by {@link givenInstalledPlaybook}. */
5
+ export const PLAYBOOK_ID = 'revisium-agent-playbook';
6
+ /**
7
+ * Playbook id of the BUILT-IN DEFAULT playbook (slice 5) that `revo bootstrap` seeds out-of-the-box.
8
+ * Distinct from {@link PLAYBOOK_ID} (the e2e fixture) — Group M targets THIS to prove the shipped default.
9
+ */
10
+ export const DEFAULT_PLAYBOOK_ID = 'revisium-default';
11
+ const STUB_OVERRIDE = { runnerOverrides: { 'claude-code': 'stub-agent' } };
12
+ /** Stub BOTH the agent and the (script) integrator — a self-contained run with no real git/gh. */
13
+ const STUB_OVERRIDE_FULL = { runnerOverrides: { 'claude-code': 'stub-agent', 'revo-integrator': 'stub-agent' } };
14
+ /**
15
+ * Create + start a run on the SEEDED DEFAULT playbook's `feature-development` pipeline (slice 5). Both
16
+ * the agent and the integrator are stubbed so the run reaches the plan + merge gates without real
17
+ * claude/git/gh; the default `feature-development` routes top-level domain verdicts past both the
18
+ * code-review and post-integrator-watcher routers, so the deterministic agent drives it to completion.
19
+ */
20
+ export async function startDefaultFeatureRun(h, repo = process.cwd()) {
21
+ const created = await h.api.createRun({
22
+ repo,
23
+ title: 'E2E seeded default feature-development run',
24
+ description: 'Group M — the bootstrap-SEEDED default pipeline on real DBOS/Revisium.',
25
+ scope: 'seeded-default e2e',
26
+ playbookId: DEFAULT_PLAYBOOK_ID,
27
+ pipelineId: 'feature-development',
28
+ executionProfile: STUB_OVERRIDE_FULL,
29
+ start: true,
30
+ });
31
+ if (!('workflow' in created))
32
+ throw new Error('start:true must return workflow metadata');
33
+ return created;
34
+ }
35
+ /** Create + start a run on the SEEDED DEFAULT playbook's `local-change` pipeline (developer-only, no gate). */
36
+ export async function startDefaultLocalChangeRun(h, repo = process.cwd()) {
37
+ const created = await h.api.createRun({
38
+ repo,
39
+ title: 'E2E seeded default local-change run',
40
+ description: 'Group M — the bootstrap-SEEDED local-change pipeline on real DBOS/Revisium.',
41
+ scope: 'seeded-default e2e',
42
+ playbookId: DEFAULT_PLAYBOOK_ID,
43
+ pipelineId: 'local-change',
44
+ executionProfile: STUB_OVERRIDE,
45
+ start: true,
46
+ });
47
+ if (!('workflow' in created))
48
+ throw new Error('start:true must return workflow metadata');
49
+ return created;
50
+ }
51
+ /**
52
+ * Install the agent playbook into the control-plane (roles + pipelines).
53
+ *
54
+ * The control-plane is shared across e2e files (and persists between local runs). On a fresh
55
+ * control-plane the first caller installs + commits it; a later caller re-committing the same
56
+ * playbook fails with "revision is not a draft" (a benign no-op), which we swallow. Any other
57
+ * failure is re-thrown. NB: a seeded pipeline is NOT proof the playbook is installed (bootstrap
58
+ * seeds pipeline rows), so we must not gate on getPipeline — we install and tolerate re-install.
59
+ */
60
+ export async function givenInstalledPlaybook(h) {
61
+ // `listPlaybooks` is the accurate presence signal: bootstrap seeds pipeline/role rows but NOT a
62
+ // playbook record, so this is empty until installed. Shared control-plane + sequential files →
63
+ // the first run installs once, the rest skip (no redundant commit, no race).
64
+ const installed = await h.api.listPlaybooks();
65
+ if (installed.some((p) => p.id === PLAYBOOK_ID))
66
+ return;
67
+ try {
68
+ const install = await h.api.installPlaybook({ source: PLAYBOOK_SOURCE, name: PLAYBOOK_ID, commit: true });
69
+ assert.equal(install.playbookId, PLAYBOOK_ID);
70
+ assert.ok(install.roles > 0, 'playbook install must load roles');
71
+ assert.ok(install.pipelines > 0, 'playbook install must load pipelines');
72
+ }
73
+ catch (err) {
74
+ // Belt-and-suspenders: tolerate a concurrent/duplicate commit ("revision is not a draft");
75
+ // re-throw anything that is not an already-installed signal.
76
+ if (!/not a draft|already|nothing to commit|ROW_CONFLICT/i.test(String(err)))
77
+ throw err;
78
+ }
79
+ }
80
+ /**
81
+ * Ensure the BUILT-IN DEFAULT playbook (slice 5) is installed. `revo bootstrap` seeds it
82
+ * out-of-the-box (so a fresh e2e control-plane already has it), but a REUSED test home that predates
83
+ * this slice may not — so this self-heals by installing from the committed source if absent. It does
84
+ * NOT install the e2e fixture: Group M tests the SHIPPED default, distinct from {@link PLAYBOOK_ID}.
85
+ */
86
+ export async function givenSeededDefaultPlaybook(h) {
87
+ const installed = await h.api.listPlaybooks();
88
+ if (installed.some((p) => p.id === DEFAULT_PLAYBOOK_ID))
89
+ return;
90
+ const { repoRoot } = await import('../../config.js');
91
+ const { join } = await import('node:path');
92
+ const source = join(repoRoot, 'control-plane', 'default-playbook');
93
+ try {
94
+ const install = await h.api.installPlaybook({ source, name: DEFAULT_PLAYBOOK_ID, commit: true });
95
+ assert.equal(install.playbookId, DEFAULT_PLAYBOOK_ID);
96
+ assert.ok(install.pipelines >= 2, 'default playbook install must load the seeded pipelines');
97
+ }
98
+ catch (err) {
99
+ if (!/not a draft|already|nothing to commit|ROW_CONFLICT/i.test(String(err)))
100
+ throw err;
101
+ }
102
+ }
103
+ /** Create + start a `local-change` run (developer-only, stub agent). Returns the started run. */
104
+ export async function startLocalChangeRun(h, repo = process.cwd()) {
105
+ const created = await h.api.createRun({
106
+ repo,
107
+ title: 'E2E local-change deterministic agent',
108
+ description: 'Real DBOS/Revisium run; deterministic test agent replaces claude-code only.',
109
+ scope: 'No source changes.',
110
+ playbookId: PLAYBOOK_ID,
111
+ pipelineId: 'local-change',
112
+ executionProfile: STUB_OVERRIDE,
113
+ start: true,
114
+ });
115
+ if (!('workflow' in created))
116
+ throw new Error('start:true must return workflow metadata');
117
+ return created;
118
+ }
119
+ /** Create + start a `feature-development` run against `target`, registering the developer write. */
120
+ export async function startFeatureRun(h, target) {
121
+ const created = await h.api.createRun({
122
+ repo: target.worktree,
123
+ title: 'E2E feature-development deterministic agent',
124
+ description: 'Real DBOS/Revisium gates, real git integrator, deterministic agent and fake GitHub.',
125
+ scope: 'Only mutate the temporary e2e target repository.',
126
+ playbookId: PLAYBOOK_ID,
127
+ pipelineId: 'feature-development',
128
+ executionProfile: STUB_OVERRIDE,
129
+ start: true,
130
+ });
131
+ if (!('workflow' in created))
132
+ throw new Error('start:true must return workflow metadata');
133
+ h.developerWrites.set(created.runId, target.worktree);
134
+ return created;
135
+ }
136
+ /**
137
+ * Create + start a feature run with BOTH the agent and the integrator stubbed (script mode — no git
138
+ * or gh). Used by the durability/recovery suite where integration is irrelevant and the run must
139
+ * reach plan + merge gates and complete without external effects. `target` is only a valid repo path
140
+ * (the stub integrator never touches it). Does NOT register a developer write (stub integrate ignores it).
141
+ */
142
+ export async function startStubbedFeatureRun(h, target) {
143
+ const created = await h.api.createRun({
144
+ repo: target.worktree,
145
+ title: 'E2E recovery feature run',
146
+ description: 'Group F — durability/crash-recovery (stubbed agent + integrator).',
147
+ scope: 'recovery e2e',
148
+ playbookId: PLAYBOOK_ID,
149
+ pipelineId: 'feature-development',
150
+ executionProfile: { runnerOverrides: { 'claude-code': 'stub-agent', 'revo-integrator': 'stub-agent' } },
151
+ start: true,
152
+ });
153
+ if (!('workflow' in created))
154
+ throw new Error('start:true must return workflow metadata');
155
+ return { runId: created.runId, taskId: created.taskId };
156
+ }
157
+ /** Pipeline id of the DATA-DRIVEN feature pipeline (0015 slice 2) — embeds a state-machine template. */
158
+ export const DATA_DRIVEN_PIPELINE = 'feature-development-dd';
159
+ /**
160
+ * Create + start a DATA-DRIVEN feature run (0015 slice 2) against `target`. Routes to the
161
+ * data-driven DBOS adapter (the pipeline carries a template_json), with the agent + integrator stubbed
162
+ * so the run reaches the plan + merge gates without real git/gh. `spec` is registered (when provided)
163
+ * BEFORE start so the scripted agent reads this run's per-node verdicts (needs a routedScriptedAgent
164
+ * harness). The data-driven watcher node routes on a `clean` DOMAIN verdict — the caller scripts it.
165
+ */
166
+ export async function startDataDrivenRun(h, target, specs, spec) {
167
+ const created = await h.api.createRun({
168
+ repo: target.worktree,
169
+ title: 'E2E data-driven feature run',
170
+ description: 'Group L — data-driven pipeline (pipeline-core graph) on real DBOS.',
171
+ scope: 'data-driven e2e',
172
+ playbookId: PLAYBOOK_ID,
173
+ pipelineId: DATA_DRIVEN_PIPELINE,
174
+ executionProfile: { runnerOverrides: { 'claude-code': 'stub-agent', 'revo-integrator': 'stub-agent' } },
175
+ start: false,
176
+ });
177
+ if (specs && spec)
178
+ specs.set(created.runId, spec);
179
+ const started = await h.api.startRun({ runId: created.runId });
180
+ return { runId: created.runId, taskId: created.taskId, started };
181
+ }
182
+ /** Feature run driven to the `plan` gate (parked, awaiting decision). */
183
+ export async function givenFeatureRunAtPlanGate(h, target) {
184
+ const run = await startFeatureRun(h, target);
185
+ const gate = await waitForGate(h.api, run.runId, 'plan');
186
+ return { runId: run.runId, taskId: run.taskId, inboxId: gate.inboxId };
187
+ }
188
+ /** Feature run with `plan` approved, driven to the `merge` gate (parked, awaiting decision). */
189
+ export async function givenFeatureRunAtMergeGate(h, target) {
190
+ const run = await startFeatureRun(h, target);
191
+ const plan = await waitForGate(h.api, run.runId, 'plan');
192
+ await h.api.approveGate({ inboxId: plan.inboxId, resolvedBy: 'e2e' });
193
+ const merge = await waitForGate(h.api, run.runId, 'merge');
194
+ return { runId: run.runId, taskId: run.taskId, inboxId: merge.inboxId };
195
+ }
196
+ //# sourceMappingURL=scenarios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.js","sourceRoot":"","sources":["../../../src/e2e/kit/scenarios.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ // recovery-crash-child.ts — Group F crash simulator.
2
+ //
3
+ // Boots a host, starts a stubbed feature run, drives it to a durable stop point (plan or merge gate),
4
+ // prints `RUNID=<id>`, then exits ABRUPTLY without draining DBOS — exactly as if the host process
5
+ // were killed. The in-flight workflow is left PENDING in Postgres; the parent test then boots a fresh
6
+ // host whose DBOS.launch() recovers + replays it. A separate process is required: DBOS is a
7
+ // process-global singleton, so true crash-recovery cannot be simulated in-process.
8
+ //
9
+ // Spawned by `crashRunAt` (kit/crash.ts) via tsx, inheriting the REVO_DATA_DIR/REVO_PORT env so it
10
+ // targets the isolated test daemon. argv[2] = stop point: 'plan-gate' (default) | 'merge-gate'.
11
+ import 'reflect-metadata';
12
+ import { createRunHarness, givenInstalledPlaybook, createTargetRepo, startStubbedFeatureRun, waitForGate, } from './kit/index.js';
13
+ const stopAt = process.argv[2] ?? 'plan-gate';
14
+ const h = await createRunHarness();
15
+ await givenInstalledPlaybook(h);
16
+ // A clean throwaway repo path; the stub integrator never touches it. Intentionally NOT cleaned up —
17
+ // the process is about to "crash", and the OS reaps the temp dir. Leaking one /tmp dir per crash is
18
+ // cheaper than wiring a teardown that a crash would skip anyway.
19
+ const target = createTargetRepo();
20
+ const run = await startStubbedFeatureRun(h, target);
21
+ const plan = await waitForGate(h.api, run.runId, 'plan');
22
+ if (stopAt === 'merge-gate') {
23
+ await h.api.approveGate({ inboxId: plan.inboxId, resolvedBy: 'crash-child' });
24
+ await waitForGate(h.api, run.runId, 'merge');
25
+ }
26
+ // Flush the run id, then exit WITHOUT h.close() — no DBOS drain → the workflow stays PENDING in
27
+ // Postgres (the crash). exit(0) inside the write callback guarantees the parent reads RUNID first.
28
+ process.stdout.write(`RUNID=${run.runId}\n`, () => process.exit(0));
29
+ //# sourceMappingURL=recovery-crash-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-crash-child.js","sourceRoot":"","sources":["../../src/e2e/recovery-crash-child.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,sGAAsG;AACtG,kGAAkG;AAClG,sGAAsG;AACtG,4FAA4F;AAC5F,mFAAmF;AACnF,EAAE;AACF,mGAAmG;AACnG,gGAAgG;AAChG,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;AAE9C,MAAM,CAAC,GAAG,MAAM,gBAAgB,EAAE,CAAC;AACnC,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAChC,oGAAoG;AACpG,oGAAoG;AACpG,iEAAiE;AACjE,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;AAClC,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;IAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9E,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED,gGAAgG;AAChG,mGAAmG;AACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,43 @@
1
+ // recovery-dd-crash-child.ts — Group L crash simulator for the DATA-DRIVEN pipeline (0015 slice 2).
2
+ //
3
+ // Mirrors recovery-crash-child.ts but starts a run on the data-driven `feature-development-dd` pipeline
4
+ // (the pipeline-core graph executed by the DBOS effect-adapter). Boots a host, drives the run to a
5
+ // durable stop point (plan or merge gate), prints `RUNID=<id>`, then exits ABRUPTLY without draining
6
+ // DBOS — exactly as if the host were killed. The in-flight DATA-DRIVEN workflow is left PENDING in
7
+ // Postgres; the parent test boots a fresh host whose DBOS.launch() recovers + replays it. A separate
8
+ // process is mandatory: DBOS is a process-global singleton, so a true crash cannot be faked in-process.
9
+ //
10
+ // Spawned by `crashDataDrivenRunAt` (kit/crash.ts) via tsx, inheriting REVO_DATA_DIR/REVO_PORT.
11
+ // argv[2] = stop point: 'plan-gate' (default) | 'merge-gate'.
12
+ //
13
+ // Uses a SINGLE scriptedAgent (not per-run routed) so the data-driven watcher node always emits the
14
+ // `clean` DOMAIN verdict it needs to reach the merge gate — independent of runId and process. The
15
+ // default agent may not carry the watcher-specific `clean` verdict across process boundaries; a per-run
16
+ // spec map cannot cross the crash->recovery process boundary, so a constant spec is the deterministic
17
+ // choice here.
18
+ import 'reflect-metadata';
19
+ import { createRunHarness, givenInstalledPlaybook, createTargetRepo, DATA_DRIVEN_PIPELINE, waitForGate, scriptedAgent, } from './kit/index.js';
20
+ const stopAt = process.argv[2] ?? 'plan-gate';
21
+ const CLEAN_WATCHER = { byRole: { watcher: { kind: 'domainVerdict', verdict: 'clean' } } };
22
+ const h = await createRunHarness({ agent: (sink) => scriptedAgent(CLEAN_WATCHER, sink) });
23
+ await givenInstalledPlaybook(h);
24
+ const target = createTargetRepo(); // clean throwaway repo; the stub integrator never touches it
25
+ const created = await h.api.createRun({
26
+ repo: target.worktree,
27
+ title: 'E2E data-driven recovery run',
28
+ description: 'Group L — data-driven crash-recovery (stubbed agent + integrator).',
29
+ scope: 'data-driven recovery e2e',
30
+ playbookId: 'revisium-agent-playbook',
31
+ pipelineId: DATA_DRIVEN_PIPELINE,
32
+ executionProfile: { runnerOverrides: { 'claude-code': 'stub-agent', 'revo-integrator': 'stub-agent' } },
33
+ start: true,
34
+ });
35
+ const runId = created.runId;
36
+ const plan = await waitForGate(h.api, runId, 'plan');
37
+ if (stopAt === 'merge-gate') {
38
+ await h.api.approveGate({ inboxId: plan.inboxId, resolvedBy: 'crash-child' });
39
+ await waitForGate(h.api, runId, 'merge');
40
+ }
41
+ // Flush the run id, then exit WITHOUT h.close() — no DBOS drain → the workflow stays PENDING (the crash).
42
+ process.stdout.write(`RUNID=${runId}\n`, () => process.exit(0));
43
+ //# sourceMappingURL=recovery-dd-crash-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery-dd-crash-child.js","sourceRoot":"","sources":["../../src/e2e/recovery-dd-crash-child.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,EAAE;AACF,wGAAwG;AACxG,mGAAmG;AACnG,qGAAqG;AACrG,mGAAmG;AACnG,qGAAqG;AACrG,wGAAwG;AACxG,EAAE;AACF,gGAAgG;AAChG,8DAA8D;AAC9D,EAAE;AACF,oGAAoG;AACpG,kGAAkG;AAClG,wGAAwG;AACxG,sGAAsG;AACtG,eAAe;AACf,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;AAE9C,MAAM,aAAa,GAAc,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAEtG,MAAM,CAAC,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1F,MAAM,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC,CAAC,6DAA6D;AAEhG,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC,QAAQ;IACrB,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,oEAAoE;IACjF,KAAK,EAAE,0BAA0B;IACjC,UAAU,EAAE,yBAAyB;IACrC,UAAU,EAAE,oBAAoB;IAChC,gBAAgB,EAAE,EAAE,eAAe,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE;IACvG,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AAE5B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACrD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;IAC5B,MAAM,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9E,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,0GAA0G;AAC1G,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -4,11 +4,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Module } from '@nestjs/common';
7
+ import { Global, Module } from '@nestjs/common';
8
8
  import { DbosService } from './dbos.service.js';
9
9
  let EngineModule = class EngineModule {
10
10
  };
11
11
  EngineModule = __decorate([
12
+ Global(),
12
13
  Module({
13
14
  providers: [DbosService],
14
15
  exports: [DbosService],
@@ -1 +1 @@
1
- {"version":3,"file":"dbos.module.js","sourceRoot":"","sources":["../../src/engine/dbos.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMzC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAJxB,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,OAAO,EAAE,CAAC,WAAW,CAAC;KACvB,CAAC;GACW,YAAY,CAAG"}
1
+ {"version":3,"file":"dbos.module.js","sourceRoot":"","sources":["../../src/engine/dbos.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOzC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IALxB,MAAM,EAAE;IACR,MAAM,CAAC;QACN,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,OAAO,EAAE,CAAC,WAAW,CAAC;KACvB,CAAC;GACW,YAAY,CAAG"}
@@ -42,6 +42,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
42
42
  var __metadata = (this && this.__metadata) || function (k, v) {
43
43
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
44
44
  };
45
+ var DbosService_1;
45
46
  import { Injectable } from '@nestjs/common';
46
47
  import { DBOS, WorkflowQueue } from '@dbos-inc/dbos-sdk';
47
48
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
@@ -61,16 +62,22 @@ export const GATE_DEADLINE_EPOCH_MS = 4102444800000; // 2100-01-01T00:00:00Z
61
62
  */
62
63
  export const SHUTDOWN_DRAIN_TIMEOUT_MS = 8_000;
63
64
  let DbosService = class DbosService {
64
- launched = false;
65
+ static { DbosService_1 = this; }
66
+ static launched = false;
67
+ static launchPromise = null;
68
+ static configured = null;
65
69
  /** Registered WorkflowQueues — guarded map to ensure idempotent registration. */
66
- queues = new Map();
70
+ static queues = new Map();
71
+ static queueOptions = new Map();
72
+ static steps = new Map();
73
+ static workflows = new Map();
67
74
  // Registered DBOS functions — assigned in constructor before launch().
68
75
  pingWorkflow;
69
76
  markStep;
70
77
  sleepStep;
71
78
  constructor() {
72
79
  // Register steps first (workflows may call them; all must be registered before launch).
73
- this.markStep = DBOS.registerStep(async function markStepImpl(workflowID, markerFile) {
80
+ this.markStep = this.registerStep('DbosService.markStep', async function markStepImpl(workflowID, markerFile) {
74
81
  // Idempotent marker (F12): write exactly-once per workflowID by using 'wx' (exclusive
75
82
  // create). If the file already exists (step re-executed after a crash-before-checkpoint),
76
83
  // writeFileSync throws with EEXIST — we catch that and skip the write, ensuring the
@@ -87,20 +94,20 @@ let DbosService = class DbosService {
87
94
  }
88
95
  const content = existsSync(markerFile) ? readFileSync(markerFile, 'utf8') : '';
89
96
  return content.split('\n').filter((l) => l.trim() !== '').length;
90
- }, { name: 'markStep', className: 'DbosService' });
91
- this.sleepStep = DBOS.registerStep(async function sleepStepImpl(ms) {
97
+ });
98
+ this.sleepStep = this.registerStep('DbosService.sleepStep', async function sleepStepImpl(ms) {
92
99
  await DBOS.sleep(ms);
93
- }, { name: 'sleepStep', className: 'DbosService' });
100
+ });
94
101
  // Register the workflow (uses bound steps).
95
102
  // Capture step references via .bind(this) so DBOS sees stable registered functions,
96
103
  // not closures that close over `this` directly (avoids S7740 "do not assign this to self").
97
104
  const markStepBound = this.markStep.bind(this);
98
105
  const sleepStepBound = this.sleepStep.bind(this);
99
- this.pingWorkflow = DBOS.registerWorkflow(async function pingImpl(workflowID, sleepMs, markerFile) {
106
+ this.pingWorkflow = this.registerWorkflow('DbosService.pingImpl', async function pingImpl(workflowID, sleepMs, markerFile) {
100
107
  const markerCount = await markStepBound(workflowID, markerFile);
101
108
  await sleepStepBound(sleepMs);
102
109
  return { workflowID, markerCount };
103
- }, { name: 'pingImpl', className: 'DbosService' });
110
+ });
104
111
  }
105
112
  // ── Generic engine verbs (M1 — DBOS seal, TASK 0003) ───────────────────────
106
113
  //
@@ -118,10 +125,15 @@ let DbosService = class DbosService {
118
125
  * Call in the consumer's constructor, BEFORE DBOS.launch().
119
126
  */
120
127
  registerStep(name, fn) {
128
+ const cached = DbosService_1.steps.get(name);
129
+ if (cached)
130
+ return cached;
121
131
  const lastDot = name.lastIndexOf('.');
122
132
  const className = lastDot >= 0 ? name.slice(0, lastDot) : 'Pipeline';
123
133
  const methodName = lastDot >= 0 ? name.slice(lastDot + 1) : name;
124
- return DBOS.registerStep(fn, { name: methodName, className });
134
+ const registered = DBOS.registerStep(fn, { name: methodName, className });
135
+ DbosService_1.steps.set(name, registered);
136
+ return registered;
125
137
  }
126
138
  /**
127
139
  * Register a plain async function as a DBOS workflow.
@@ -129,10 +141,15 @@ let DbosService = class DbosService {
129
141
  * Call in the consumer's constructor, BEFORE DBOS.launch().
130
142
  */
131
143
  registerWorkflow(name, fn) {
144
+ const cached = DbosService_1.workflows.get(name);
145
+ if (cached)
146
+ return cached;
132
147
  const lastDot = name.lastIndexOf('.');
133
148
  const className = lastDot >= 0 ? name.slice(0, lastDot) : 'Pipeline';
134
149
  const methodName = lastDot >= 0 ? name.slice(lastDot + 1) : name;
135
- return DBOS.registerWorkflow(fn, { name: methodName, className });
150
+ const registered = DBOS.registerWorkflow(fn, { name: methodName, className });
151
+ DbosService_1.workflows.set(name, registered);
152
+ return registered;
136
153
  }
137
154
  /**
138
155
  * Construct and register a WorkflowQueue (idempotent — Map-guarded).
@@ -140,9 +157,16 @@ let DbosService = class DbosService {
140
157
  * Call before DBOS.launch().
141
158
  */
142
159
  registerQueue(name, opts) {
143
- if (!this.queues.has(name)) {
144
- this.queues.set(name, new WorkflowQueue(name, opts));
160
+ const existing = DbosService_1.queueOptions.get(name);
161
+ if (existing) {
162
+ if (existing.concurrency !== opts.concurrency ||
163
+ existing.workerConcurrency !== opts.workerConcurrency) {
164
+ throw new Error(`WorkflowQueue ${name} already registered with different options.`);
165
+ }
166
+ return;
145
167
  }
168
+ DbosService_1.queues.set(name, new WorkflowQueue(name, opts));
169
+ DbosService_1.queueOptions.set(name, { ...opts });
146
170
  }
147
171
  /**
148
172
  * Enqueue a registered workflow with a stable workflowID and queue name.
@@ -181,27 +205,74 @@ let DbosService = class DbosService {
181
205
  awaitDecision(topic, opts) {
182
206
  return DBOS.recv(topic, { deadlineEpochMS: opts?.deadlineEpochMS ?? GATE_DEADLINE_EPOCH_MS });
183
207
  }
208
+ setEvent(key, value) {
209
+ return DBOS.setEvent(key, value);
210
+ }
211
+ getEvent(workflowID, key, opts) {
212
+ return DBOS.getEvent(workflowID, key, opts);
213
+ }
214
+ /**
215
+ * Write a DBOS stream record. Valid from workflow bodies and DBOS steps; unlike setEvent,
216
+ * this is intentionally safe for the step-side agent observability bridge.
217
+ */
218
+ writeStream(key, value) {
219
+ return DBOS.writeStream(key, value);
220
+ }
221
+ /**
222
+ * Close a DBOS stream. DBOS 4.19 only permits close from a workflow body, so step-side
223
+ * reporters must not call this after an attempt.
224
+ */
225
+ closeStream(key) {
226
+ return DBOS.closeStream(key);
227
+ }
228
+ readStream(workflowID, key) {
229
+ return DBOS.readStream(workflowID, key);
230
+ }
184
231
  // ── end generic engine verbs ────────────────────────────────────────────────
185
232
  /**
186
233
  * Configure DBOS with the pid-proven system database URL.
187
234
  * Must be called before launch().
188
235
  */
189
236
  setConfig(systemDatabaseUrl, options = {}) {
237
+ const nextConfig = { systemDatabaseUrl, logLevel: options.logLevel };
238
+ if (DbosService_1.configured) {
239
+ if (DbosService_1.configured.systemDatabaseUrl === nextConfig.systemDatabaseUrl &&
240
+ DbosService_1.configured.logLevel === nextConfig.logLevel) {
241
+ return;
242
+ }
243
+ if (DbosService_1.launched) {
244
+ throw new Error('Cannot reconfigure DBOS after launch.');
245
+ }
246
+ }
247
+ // Admin server is unused (cancel patches a Revisium row, not the DBOS admin API); disabling it
248
+ // frees port 3001 so multiple profiles/hosts coexist without an admin-bind collision (ADR 0006).
190
249
  DBOS.setConfig({
191
250
  name: 'agent-orchestrator',
192
251
  systemDatabaseUrl,
252
+ runAdminServer: false,
193
253
  ...(options.logLevel ? { logLevel: options.logLevel } : {}),
194
254
  });
255
+ DbosService_1.configured = nextConfig;
195
256
  }
196
257
  /**
197
258
  * Launch DBOS (idempotent — guarded by `launched` flag).
198
259
  * Auto-recovers in-flight workflows.
199
260
  */
200
261
  async launch() {
201
- if (this.launched)
262
+ if (DbosService_1.launched)
202
263
  return;
203
- await DBOS.launch();
204
- this.launched = true;
264
+ if (DbosService_1.launchPromise)
265
+ return DbosService_1.launchPromise;
266
+ DbosService_1.launchPromise = (async () => {
267
+ await DBOS.launch();
268
+ DbosService_1.launched = true;
269
+ })();
270
+ try {
271
+ await DbosService_1.launchPromise;
272
+ }
273
+ finally {
274
+ DbosService_1.launchPromise = null;
275
+ }
205
276
  }
206
277
  /**
207
278
  * Shut down DBOS (no-op if never launched — E9).
@@ -216,10 +287,10 @@ let DbosService = class DbosService {
216
287
  * @param timeoutMs - drain bound (default SHUTDOWN_DRAIN_TIMEOUT_MS); pass 0/Infinity to disable.
217
288
  */
218
289
  async shutdown(timeoutMs = SHUTDOWN_DRAIN_TIMEOUT_MS) {
219
- if (!this.launched)
290
+ if (!DbosService_1.launched)
220
291
  return;
221
292
  // Mark not-launched up front so a timed-out drain cannot leave a re-entrant launch confused.
222
- this.launched = false;
293
+ DbosService_1.launched = false;
223
294
  const drain = DBOS.shutdown();
224
295
  if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
225
296
  await drain;
@@ -288,7 +359,7 @@ let DbosService = class DbosService {
288
359
  return handle.getResult();
289
360
  }
290
361
  };
291
- DbosService = __decorate([
362
+ DbosService = DbosService_1 = __decorate([
292
363
  Injectable(),
293
364
  __metadata("design:paramtypes", [])
294
365
  ], DbosService);
@@ -1 +1 @@
1
- {"version":3,"file":"dbos.service.js","sourceRoot":"","sources":["../../src/engine/dbos.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dbos.service.js","sourceRoot":"","sources":["../../src/engine/dbos.service.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,20 @@
17
17
  * live Postgres. The production default constructs a real `pg.Client`.
18
18
  */
19
19
  import pg from 'pg';
20
- const DBOS_DB_NAME = 'dbos';
20
+ import { PROFILES, resolveProfileName } from '../config.js';
21
+ /**
22
+ * DBOS system-database name. `REVO_DBOS_DB` overrides; otherwise it falls back to the active
23
+ * profile's db (default `dbos`, dev `dbos_dev`) so a profiled host keeps its DBOS progress separate.
24
+ * Validated to a safe identifier because the name is interpolated into a non-parameterizable
25
+ * `CREATE DATABASE` (CREATE DATABASE cannot bind params).
26
+ */
27
+ export function resolveDbosDbName() {
28
+ const name = process.env['REVO_DBOS_DB'] ?? PROFILES[resolveProfileName()].dbosDb;
29
+ if (!/^[a-z_][a-z0-9_]*$/i.test(name)) {
30
+ throw new Error(`Invalid REVO_DBOS_DB '${name}': must be a SQL identifier (/^[a-z_][a-z0-9_]*$/i)`);
31
+ }
32
+ return name;
33
+ }
21
34
  const MAINTENANCE_DB = 'postgres';
22
35
  /** PostgreSQL SQLSTATE for "database already exists" (duplicate_database). */
23
36
  const PG_SQLSTATE_DUPLICATE_DATABASE = '42P04';
@@ -33,6 +46,7 @@ const DEFAULT_CREDS = {
33
46
  * @param deps - Optional injectable dependencies for testing (F20).
34
47
  */
35
48
  export async function ensurePostgres(pgPort, opts = {}, deps = {}) {
49
+ const dbosDbName = resolveDbosDbName();
36
50
  const { user, password, adminDb } = { ...DEFAULT_CREDS, ...opts };
37
51
  // pg.Client.connect() returns Promise<Client> while ClientLike.connect() returns
38
52
  // Promise<void>; they are structurally compatible at the call sites used here, but
@@ -42,7 +56,7 @@ export async function ensurePostgres(pgPort, opts = {}, deps = {}) {
42
56
  const client = createClient();
43
57
  try {
44
58
  await client.connect();
45
- const result = await client.query(`SELECT count(*)::text AS count FROM pg_database WHERE datname = $1`, [DBOS_DB_NAME]);
59
+ const result = await client.query(`SELECT count(*)::text AS count FROM pg_database WHERE datname = $1`, [dbosDbName]);
46
60
  const exists = result.rows[0]?.count !== '0';
47
61
  if (!exists) {
48
62
  // CREATE DATABASE cannot be parameterized; `dbos` is a fixed literal with no injection surface.
@@ -50,7 +64,7 @@ export async function ensurePostgres(pgPort, opts = {}, deps = {}) {
50
64
  // PostgreSQL raises 42P04 (duplicate_database) for the loser. Treat it as success
51
65
  // (idempotent — the database now exists). Re-throw any other error.
52
66
  try {
53
- await client.query(`CREATE DATABASE ${DBOS_DB_NAME}`);
67
+ await client.query(`CREATE DATABASE ${dbosDbName}`);
54
68
  }
55
69
  catch (err) {
56
70
  if (err.code === PG_SQLSTATE_DUPLICATE_DATABASE) {
@@ -75,6 +89,6 @@ export async function ensurePostgres(pgPort, opts = {}, deps = {}) {
75
89
  * and encode to themselves, so existing behaviour is unchanged.
76
90
  */
77
91
  export function dbosSystemDatabaseUrl(pgPort, user = 'revisium', password = 'password') {
78
- return `postgresql://${encodeURIComponent(user)}:${encodeURIComponent(password)}@localhost:${pgPort}/${DBOS_DB_NAME}`;
92
+ return `postgresql://${encodeURIComponent(user)}:${encodeURIComponent(password)}@localhost:${pgPort}/${resolveDbosDbName()}`;
79
93
  }
80
94
  //# sourceMappingURL=ensure-postgres.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ensure-postgres.js","sourceRoot":"","sources":["../../src/engine/ensure-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,8EAA8E;AAC9E,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAQ/C,MAAM,aAAa,GAAwB;IACzC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,cAAc;CACxB,CAAC;AAkBF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAqC,EAAE,EACvC,OAA2B,EAAE;IAE7B,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC;IAClE,iFAAiF;IACjF,mFAAmF;IACnF,yFAAyF;IACzF,MAAM,eAAe,GAAG,GAAe,EAAE,CACvC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAA0B,CAAC;IACjH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC;IAE1D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,oEAAoE,EACpE,CAAC,YAAY,CAAC,CACf,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gGAAgG;YAChG,0FAA0F;YAC1F,kFAAkF;YAClF,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;YACxD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAyB,CAAC,IAAI,KAAK,8BAA8B,EAAE,CAAC;oBACvE,6DAA6D;oBAC7D,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,IAAI,GAAG,UAAU,EACjB,QAAQ,GAAG,UAAU;IAErB,OAAO,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,cAAc,MAAM,IAAI,YAAY,EAAE,CAAC;AACxH,CAAC"}
1
+ {"version":3,"file":"ensure-postgres.js","sourceRoot":"","sources":["../../src/engine/ensure-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC,MAAM,CAAC;IAClF,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,qDAAqD,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AACD,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,8EAA8E;AAC9E,MAAM,8BAA8B,GAAG,OAAO,CAAC;AAQ/C,MAAM,aAAa,GAAwB;IACzC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,cAAc;CACxB,CAAC;AAkBF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,OAAqC,EAAE,EACvC,OAA2B,EAAE;IAE7B,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,EAAE,CAAC;IAClE,iFAAiF;IACjF,mFAAmF;IACnF,yFAAyF;IACzF,MAAM,eAAe,GAAG,GAAe,EAAE,CACvC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAA0B,CAAC;IACjH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe,CAAC;IAE1D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,oEAAoE,EACpE,CAAC,UAAU,CAAC,CACb,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gGAAgG;YAChG,0FAA0F;YAC1F,kFAAkF;YAClF,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAyB,CAAC,IAAI,KAAK,8BAA8B,EAAE,CAAC;oBACvE,6DAA6D;oBAC7D,OAAO;gBACT,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,IAAI,GAAG,UAAU,EACjB,QAAQ,GAAG,UAAU;IAErB,OAAO,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,cAAc,MAAM,IAAI,iBAAiB,EAAE,EAAE,CAAC;AAC/H,CAAC"}