oh-my-super-agent 0.1.0

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 (461) hide show
  1. package/.agents/agents/advisor.md +15 -0
  2. package/.agents/agents/conductor.md +32 -0
  3. package/.agents/agents/dreamer.md +13 -0
  4. package/.agents/agents/executor.md +17 -0
  5. package/.agents/agents/grader.md +15 -0
  6. package/.agents/config/endurance-policy.json +8 -0
  7. package/.agents/config/oms-config.json +119 -0
  8. package/.agents/config/release-policy.json +12 -0
  9. package/.agents/config/secret-scan-policy.json +7 -0
  10. package/.agents/config/verification-plan.json +33 -0
  11. package/.agents/registry.json +11 -0
  12. package/.agents/rules/constitution.md +7 -0
  13. package/.agents/skills/conductor/SKILL.md +23 -0
  14. package/.agents/skills/dream/SKILL.md +14 -0
  15. package/.agents/skills/executor/SKILL.md +13 -0
  16. package/.agents/skills/oms/SKILL.md +52 -0
  17. package/.agents/skills/quota-aware/SKILL.md +12 -0
  18. package/.agents/skills/schedule/SKILL.md +13 -0
  19. package/.agents/skills/team-protocol/SKILL.md +20 -0
  20. package/LICENSE +21 -0
  21. package/README.md +146 -0
  22. package/dist/src/audit/run-ledger.d.ts +183 -0
  23. package/dist/src/audit/run-ledger.js +1655 -0
  24. package/dist/src/audit/run-ledger.js.map +1 -0
  25. package/dist/src/cli.d.ts +61 -0
  26. package/dist/src/cli.js +2096 -0
  27. package/dist/src/cli.js.map +1 -0
  28. package/dist/src/commands/github-queue-probe.d.ts +26 -0
  29. package/dist/src/commands/github-queue-probe.js +51 -0
  30. package/dist/src/commands/github-queue-probe.js.map +1 -0
  31. package/dist/src/commands/trace-fixture.d.ts +20 -0
  32. package/dist/src/commands/trace-fixture.js +72 -0
  33. package/dist/src/commands/trace-fixture.js.map +1 -0
  34. package/dist/src/conductor/activity.d.ts +46 -0
  35. package/dist/src/conductor/activity.js +224 -0
  36. package/dist/src/conductor/activity.js.map +1 -0
  37. package/dist/src/conductor/bridge.d.ts +53 -0
  38. package/dist/src/conductor/bridge.js +652 -0
  39. package/dist/src/conductor/bridge.js.map +1 -0
  40. package/dist/src/conductor/notifications.d.ts +59 -0
  41. package/dist/src/conductor/notifications.js +381 -0
  42. package/dist/src/conductor/notifications.js.map +1 -0
  43. package/dist/src/conductor/recovery.d.ts +29 -0
  44. package/dist/src/conductor/recovery.js +198 -0
  45. package/dist/src/conductor/recovery.js.map +1 -0
  46. package/dist/src/conductor/start.d.ts +73 -0
  47. package/dist/src/conductor/start.js +519 -0
  48. package/dist/src/conductor/start.js.map +1 -0
  49. package/dist/src/conductor/waiter.d.ts +88 -0
  50. package/dist/src/conductor/waiter.js +427 -0
  51. package/dist/src/conductor/waiter.js.map +1 -0
  52. package/dist/src/config.d.ts +9 -0
  53. package/dist/src/config.js +40 -0
  54. package/dist/src/config.js.map +1 -0
  55. package/dist/src/dispatch/advice-source.d.ts +61 -0
  56. package/dist/src/dispatch/advice-source.js +198 -0
  57. package/dist/src/dispatch/advice-source.js.map +1 -0
  58. package/dist/src/dispatch/advice-store.d.ts +41 -0
  59. package/dist/src/dispatch/advice-store.js +201 -0
  60. package/dist/src/dispatch/advice-store.js.map +1 -0
  61. package/dist/src/dispatch/advice.d.ts +34 -0
  62. package/dist/src/dispatch/advice.js +371 -0
  63. package/dist/src/dispatch/advice.js.map +1 -0
  64. package/dist/src/dispatch/authority.d.ts +124 -0
  65. package/dist/src/dispatch/authority.js +1202 -0
  66. package/dist/src/dispatch/authority.js.map +1 -0
  67. package/dist/src/dispatch/intent.d.ts +66 -0
  68. package/dist/src/dispatch/intent.js +71 -0
  69. package/dist/src/dispatch/intent.js.map +1 -0
  70. package/dist/src/dispatch/runtime-authority.d.ts +42 -0
  71. package/dist/src/dispatch/runtime-authority.js +52 -0
  72. package/dist/src/dispatch/runtime-authority.js.map +1 -0
  73. package/dist/src/doctor.d.ts +20 -0
  74. package/dist/src/doctor.js +85 -0
  75. package/dist/src/doctor.js.map +1 -0
  76. package/dist/src/domain/records.d.ts +44 -0
  77. package/dist/src/domain/records.js +138 -0
  78. package/dist/src/domain/records.js.map +1 -0
  79. package/dist/src/domain/role-policy.d.ts +67 -0
  80. package/dist/src/domain/role-policy.js +547 -0
  81. package/dist/src/domain/role-policy.js.map +1 -0
  82. package/dist/src/events/bus.d.ts +32 -0
  83. package/dist/src/events/bus.js +115 -0
  84. package/dist/src/events/bus.js.map +1 -0
  85. package/dist/src/events/kinds.d.ts +126 -0
  86. package/dist/src/events/kinds.js +14 -0
  87. package/dist/src/events/kinds.js.map +1 -0
  88. package/dist/src/evidence/immutable-file.d.ts +12 -0
  89. package/dist/src/evidence/immutable-file.js +141 -0
  90. package/dist/src/evidence/immutable-file.js.map +1 -0
  91. package/dist/src/evidence/store.d.ts +125 -0
  92. package/dist/src/evidence/store.js +1189 -0
  93. package/dist/src/evidence/store.js.map +1 -0
  94. package/dist/src/evidence/verdict.d.ts +17 -0
  95. package/dist/src/evidence/verdict.js +23 -0
  96. package/dist/src/evidence/verdict.js.map +1 -0
  97. package/dist/src/generation/agent.d.ts +5 -0
  98. package/dist/src/generation/agent.js +34 -0
  99. package/dist/src/generation/agent.js.map +1 -0
  100. package/dist/src/generation/frontmatter.d.ts +7 -0
  101. package/dist/src/generation/frontmatter.js +33 -0
  102. package/dist/src/generation/frontmatter.js.map +1 -0
  103. package/dist/src/github/adapter.d.ts +44 -0
  104. package/dist/src/github/adapter.js +592 -0
  105. package/dist/src/github/adapter.js.map +1 -0
  106. package/dist/src/github/dispatch-eligibility.d.ts +9 -0
  107. package/dist/src/github/dispatch-eligibility.js +94 -0
  108. package/dist/src/github/dispatch-eligibility.js.map +1 -0
  109. package/dist/src/github/projector.d.ts +23 -0
  110. package/dist/src/github/projector.js +181 -0
  111. package/dist/src/github/projector.js.map +1 -0
  112. package/dist/src/github/review.d.ts +39 -0
  113. package/dist/src/github/review.js +1450 -0
  114. package/dist/src/github/review.js.map +1 -0
  115. package/dist/src/github/sync.d.ts +21 -0
  116. package/dist/src/github/sync.js +518 -0
  117. package/dist/src/github/sync.js.map +1 -0
  118. package/dist/src/github/types.d.ts +134 -0
  119. package/dist/src/github/types.js +11 -0
  120. package/dist/src/github/types.js.map +1 -0
  121. package/dist/src/goals/artifact-store.d.ts +31 -0
  122. package/dist/src/goals/artifact-store.js +241 -0
  123. package/dist/src/goals/artifact-store.js.map +1 -0
  124. package/dist/src/goals/authority.d.ts +112 -0
  125. package/dist/src/goals/authority.js +621 -0
  126. package/dist/src/goals/authority.js.map +1 -0
  127. package/dist/src/goals/native-snapshot.d.ts +12 -0
  128. package/dist/src/goals/native-snapshot.js +53 -0
  129. package/dist/src/goals/native-snapshot.js.map +1 -0
  130. package/dist/src/goals/runtime-authority.d.ts +7 -0
  131. package/dist/src/goals/runtime-authority.js +20 -0
  132. package/dist/src/goals/runtime-authority.js.map +1 -0
  133. package/dist/src/health/release-assessment.d.ts +11 -0
  134. package/dist/src/health/release-assessment.js +83 -0
  135. package/dist/src/health/release-assessment.js.map +1 -0
  136. package/dist/src/health/release-policy.d.ts +16 -0
  137. package/dist/src/health/release-policy.js +40 -0
  138. package/dist/src/health/release-policy.js.map +1 -0
  139. package/dist/src/hooks/native.d.ts +30 -0
  140. package/dist/src/hooks/native.js +495 -0
  141. package/dist/src/hooks/native.js.map +1 -0
  142. package/dist/src/hooks/provider-runtime.d.ts +55 -0
  143. package/dist/src/hooks/provider-runtime.js +479 -0
  144. package/dist/src/hooks/provider-runtime.js.map +1 -0
  145. package/dist/src/hooks/provider.d.ts +102 -0
  146. package/dist/src/hooks/provider.js +358 -0
  147. package/dist/src/hooks/provider.js.map +1 -0
  148. package/dist/src/live/contact-journal.d.ts +73 -0
  149. package/dist/src/live/contact-journal.js +439 -0
  150. package/dist/src/live/contact-journal.js.map +1 -0
  151. package/dist/src/live-probes/gh-adapter.d.ts +28 -0
  152. package/dist/src/live-probes/gh-adapter.js +188 -0
  153. package/dist/src/live-probes/gh-adapter.js.map +1 -0
  154. package/dist/src/live-probes/github-queue.d.ts +1 -0
  155. package/dist/src/live-probes/github-queue.js +2 -0
  156. package/dist/src/live-probes/github-queue.js.map +1 -0
  157. package/dist/src/notifications/slack-request.d.ts +13 -0
  158. package/dist/src/notifications/slack-request.js +40 -0
  159. package/dist/src/notifications/slack-request.js.map +1 -0
  160. package/dist/src/outbox/processor.d.ts +27 -0
  161. package/dist/src/outbox/processor.js +63 -0
  162. package/dist/src/outbox/processor.js.map +1 -0
  163. package/dist/src/outbox/store.d.ts +158 -0
  164. package/dist/src/outbox/store.js +834 -0
  165. package/dist/src/outbox/store.js.map +1 -0
  166. package/dist/src/package-root.d.ts +1 -0
  167. package/dist/src/package-root.js +26 -0
  168. package/dist/src/package-root.js.map +1 -0
  169. package/dist/src/project.d.ts +12 -0
  170. package/dist/src/project.js +60 -0
  171. package/dist/src/project.js.map +1 -0
  172. package/dist/src/projection/generated-file.d.ts +15 -0
  173. package/dist/src/projection/generated-file.js +72 -0
  174. package/dist/src/projection/generated-file.js.map +1 -0
  175. package/dist/src/projection/project-workspace.d.ts +11 -0
  176. package/dist/src/projection/project-workspace.js +94 -0
  177. package/dist/src/projection/project-workspace.js.map +1 -0
  178. package/dist/src/projection/registry.d.ts +15 -0
  179. package/dist/src/projection/registry.js +59 -0
  180. package/dist/src/projection/registry.js.map +1 -0
  181. package/dist/src/projection/safe-path.d.ts +4 -0
  182. package/dist/src/projection/safe-path.js +106 -0
  183. package/dist/src/projection/safe-path.js.map +1 -0
  184. package/dist/src/providers/claude-interactive.d.ts +38 -0
  185. package/dist/src/providers/claude-interactive.js +287 -0
  186. package/dist/src/providers/claude-interactive.js.map +1 -0
  187. package/dist/src/providers/claude-structured-bridge.d.ts +32 -0
  188. package/dist/src/providers/claude-structured-bridge.js +215 -0
  189. package/dist/src/providers/claude-structured-bridge.js.map +1 -0
  190. package/dist/src/providers/claude-structured-completion.d.ts +23 -0
  191. package/dist/src/providers/claude-structured-completion.js +229 -0
  192. package/dist/src/providers/claude-structured-completion.js.map +1 -0
  193. package/dist/src/providers/claude-structured-pane.d.ts +23 -0
  194. package/dist/src/providers/claude-structured-pane.js +156 -0
  195. package/dist/src/providers/claude-structured-pane.js.map +1 -0
  196. package/dist/src/providers/claude-structured-store.d.ts +48 -0
  197. package/dist/src/providers/claude-structured-store.js +212 -0
  198. package/dist/src/providers/claude-structured-store.js.map +1 -0
  199. package/dist/src/providers/claude-structured.d.ts +56 -0
  200. package/dist/src/providers/claude-structured.js +250 -0
  201. package/dist/src/providers/claude-structured.js.map +1 -0
  202. package/dist/src/providers/codex-exec.d.ts +29 -0
  203. package/dist/src/providers/codex-exec.js +127 -0
  204. package/dist/src/providers/codex-exec.js.map +1 -0
  205. package/dist/src/providers/grading.d.ts +2 -0
  206. package/dist/src/providers/grading.js +20 -0
  207. package/dist/src/providers/grading.js.map +1 -0
  208. package/dist/src/providers/native-dispatch.d.ts +24 -0
  209. package/dist/src/providers/native-dispatch.js +34 -0
  210. package/dist/src/providers/native-dispatch.js.map +1 -0
  211. package/dist/src/providers/preflight.d.ts +65 -0
  212. package/dist/src/providers/preflight.js +256 -0
  213. package/dist/src/providers/preflight.js.map +1 -0
  214. package/dist/src/providers/process.d.ts +18 -0
  215. package/dist/src/providers/process.js +21 -0
  216. package/dist/src/providers/process.js.map +1 -0
  217. package/dist/src/queue/model.d.ts +37 -0
  218. package/dist/src/queue/model.js +51 -0
  219. package/dist/src/queue/model.js.map +1 -0
  220. package/dist/src/queue/service.d.ts +1 -0
  221. package/dist/src/queue/service.js +2 -0
  222. package/dist/src/queue/service.js.map +1 -0
  223. package/dist/src/reflections/store.d.ts +21 -0
  224. package/dist/src/reflections/store.js +60 -0
  225. package/dist/src/reflections/store.js.map +1 -0
  226. package/dist/src/reports/daily-trust.d.ts +11 -0
  227. package/dist/src/reports/daily-trust.js +98 -0
  228. package/dist/src/reports/daily-trust.js.map +1 -0
  229. package/dist/src/runs/controller.d.ts +187 -0
  230. package/dist/src/runs/controller.js +1182 -0
  231. package/dist/src/runs/controller.js.map +1 -0
  232. package/dist/src/runtime/composition.d.ts +9 -0
  233. package/dist/src/runtime/composition.js +35 -0
  234. package/dist/src/runtime/composition.js.map +1 -0
  235. package/dist/src/runtime/endurance-authorities.d.ts +44 -0
  236. package/dist/src/runtime/endurance-authorities.js +101 -0
  237. package/dist/src/runtime/endurance-authorities.js.map +1 -0
  238. package/dist/src/runtime/endurance-policy.d.ts +12 -0
  239. package/dist/src/runtime/endurance-policy.js +13 -0
  240. package/dist/src/runtime/endurance-policy.js.map +1 -0
  241. package/dist/src/runtime/lock.d.ts +63 -0
  242. package/dist/src/runtime/lock.js +577 -0
  243. package/dist/src/runtime/lock.js.map +1 -0
  244. package/dist/src/runtime/process-identity.d.ts +10 -0
  245. package/dist/src/runtime/process-identity.js +43 -0
  246. package/dist/src/runtime/process-identity.js.map +1 -0
  247. package/dist/src/runtime/quota.d.ts +130 -0
  248. package/dist/src/runtime/quota.js +590 -0
  249. package/dist/src/runtime/quota.js.map +1 -0
  250. package/dist/src/runtime/record-store.d.ts +45 -0
  251. package/dist/src/runtime/record-store.js +272 -0
  252. package/dist/src/runtime/record-store.js.map +1 -0
  253. package/dist/src/runtime/schema.d.ts +28 -0
  254. package/dist/src/runtime/schema.js +194 -0
  255. package/dist/src/runtime/schema.js.map +1 -0
  256. package/dist/src/runtime/stable-id.d.ts +3 -0
  257. package/dist/src/runtime/stable-id.js +27 -0
  258. package/dist/src/runtime/stable-id.js.map +1 -0
  259. package/dist/src/runtime/system-clock.d.ts +8 -0
  260. package/dist/src/runtime/system-clock.js +35 -0
  261. package/dist/src/runtime/system-clock.js.map +1 -0
  262. package/dist/src/schedule/service-plan.d.ts +58 -0
  263. package/dist/src/schedule/service-plan.js +327 -0
  264. package/dist/src/schedule/service-plan.js.map +1 -0
  265. package/dist/src/schedule/user-installation.d.ts +62 -0
  266. package/dist/src/schedule/user-installation.js +701 -0
  267. package/dist/src/schedule/user-installation.js.map +1 -0
  268. package/dist/src/schedule/user-plan.d.ts +47 -0
  269. package/dist/src/schedule/user-plan.js +286 -0
  270. package/dist/src/schedule/user-plan.js.map +1 -0
  271. package/dist/src/scheduler/minute.d.ts +31 -0
  272. package/dist/src/scheduler/minute.js +441 -0
  273. package/dist/src/scheduler/minute.js.map +1 -0
  274. package/dist/src/schemas/registry.d.ts +10 -0
  275. package/dist/src/schemas/registry.js +36 -0
  276. package/dist/src/schemas/registry.js.map +1 -0
  277. package/dist/src/security/secret-scan.d.ts +50 -0
  278. package/dist/src/security/secret-scan.js +384 -0
  279. package/dist/src/security/secret-scan.js.map +1 -0
  280. package/dist/src/sessions/registry.d.ts +89 -0
  281. package/dist/src/sessions/registry.js +443 -0
  282. package/dist/src/sessions/registry.js.map +1 -0
  283. package/dist/src/state.d.ts +27 -0
  284. package/dist/src/state.js +235 -0
  285. package/dist/src/state.js.map +1 -0
  286. package/dist/src/status/hud.d.ts +37 -0
  287. package/dist/src/status/hud.js +88 -0
  288. package/dist/src/status/hud.js.map +1 -0
  289. package/dist/src/team/plan.d.ts +31 -0
  290. package/dist/src/team/plan.js +184 -0
  291. package/dist/src/team/plan.js.map +1 -0
  292. package/dist/src/team/projection.d.ts +24 -0
  293. package/dist/src/team/projection.js +79 -0
  294. package/dist/src/team/projection.js.map +1 -0
  295. package/dist/src/tickets/admission.d.ts +34 -0
  296. package/dist/src/tickets/admission.js +169 -0
  297. package/dist/src/tickets/admission.js.map +1 -0
  298. package/dist/src/tickets/materializer.d.ts +1 -0
  299. package/dist/src/tickets/materializer.js +2 -0
  300. package/dist/src/tickets/materializer.js.map +1 -0
  301. package/dist/src/tickets/runtime-authority.d.ts +32 -0
  302. package/dist/src/tickets/runtime-authority.js +46 -0
  303. package/dist/src/tickets/runtime-authority.js.map +1 -0
  304. package/dist/src/tickets/store.d.ts +221 -0
  305. package/dist/src/tickets/store.js +2025 -0
  306. package/dist/src/tickets/store.js.map +1 -0
  307. package/dist/src/tracer/one-ticket.d.ts +58 -0
  308. package/dist/src/tracer/one-ticket.js +578 -0
  309. package/dist/src/tracer/one-ticket.js.map +1 -0
  310. package/dist/src/trust/assessment.d.ts +24 -0
  311. package/dist/src/trust/assessment.js +124 -0
  312. package/dist/src/trust/assessment.js.map +1 -0
  313. package/dist/src/trust/runs.d.ts +13 -0
  314. package/dist/src/trust/runs.js +46 -0
  315. package/dist/src/trust/runs.js.map +1 -0
  316. package/dist/src/types.d.ts +6 -0
  317. package/dist/src/types.js +2 -0
  318. package/dist/src/types.js.map +1 -0
  319. package/dist/src/utils/fs.d.ts +13 -0
  320. package/dist/src/utils/fs.js +188 -0
  321. package/dist/src/utils/fs.js.map +1 -0
  322. package/dist/src/verification/authority.d.ts +28 -0
  323. package/dist/src/verification/authority.js +153 -0
  324. package/dist/src/verification/authority.js.map +1 -0
  325. package/dist/src/verification/grade-source.d.ts +17 -0
  326. package/dist/src/verification/grade-source.js +30 -0
  327. package/dist/src/verification/grade-source.js.map +1 -0
  328. package/dist/src/verification/plan.d.ts +20 -0
  329. package/dist/src/verification/plan.js +128 -0
  330. package/dist/src/verification/plan.js.map +1 -0
  331. package/dist/src/verification/protected-runner.d.ts +50 -0
  332. package/dist/src/verification/protected-runner.js +171 -0
  333. package/dist/src/verification/protected-runner.js.map +1 -0
  334. package/dist/src/verification/result-gate-store.d.ts +72 -0
  335. package/dist/src/verification/result-gate-store.js +193 -0
  336. package/dist/src/verification/result-gate-store.js.map +1 -0
  337. package/dist/src/verification/result-gate.d.ts +41 -0
  338. package/dist/src/verification/result-gate.js +731 -0
  339. package/dist/src/verification/result-gate.js.map +1 -0
  340. package/dist/src/verification/runner.d.ts +38 -0
  341. package/dist/src/verification/runner.js +143 -0
  342. package/dist/src/verification/runner.js.map +1 -0
  343. package/dist/src/verification/sandbox.d.ts +16 -0
  344. package/dist/src/verification/sandbox.js +199 -0
  345. package/dist/src/verification/sandbox.js.map +1 -0
  346. package/dist/src/verify.d.ts +8 -0
  347. package/dist/src/verify.js +35 -0
  348. package/dist/src/verify.js.map +1 -0
  349. package/dist/src/watchdog/reconcile.d.ts +42 -0
  350. package/dist/src/watchdog/reconcile.js +440 -0
  351. package/dist/src/watchdog/reconcile.js.map +1 -0
  352. package/dist/src/workers/bridge.d.ts +35 -0
  353. package/dist/src/workers/bridge.js +426 -0
  354. package/dist/src/workers/bridge.js.map +1 -0
  355. package/dist/src/workers/delivery.d.ts +31 -0
  356. package/dist/src/workers/delivery.js +876 -0
  357. package/dist/src/workers/delivery.js.map +1 -0
  358. package/dist/src/workers/panes.d.ts +32 -0
  359. package/dist/src/workers/panes.js +212 -0
  360. package/dist/src/workers/panes.js.map +1 -0
  361. package/dist/src/workers/registry.d.ts +80 -0
  362. package/dist/src/workers/registry.js +351 -0
  363. package/dist/src/workers/registry.js.map +1 -0
  364. package/dist/src/workers/runtime.d.ts +44 -0
  365. package/dist/src/workers/runtime.js +21 -0
  366. package/dist/src/workers/runtime.js.map +1 -0
  367. package/dist/src/worktrees/manager.d.ts +35 -0
  368. package/dist/src/worktrees/manager.js +315 -0
  369. package/dist/src/worktrees/manager.js.map +1 -0
  370. package/docs/ARCHITECTURE.md +323 -0
  371. package/docs/PLAN.md +216 -0
  372. package/docs/REFERENCES.md +42 -0
  373. package/docs/ROADMAP.md +327 -0
  374. package/docs/SECURITY.md +242 -0
  375. package/docs/adr/0001-tracer-first-file-backed-certification.md +41 -0
  376. package/docs/adr/0002-conductor-first-typed-dispatch.md +102 -0
  377. package/docs/adr/0003-mandatory-pre-dispatch-advice.md +59 -0
  378. package/docs/compatibility/claude-code-2.1.207.md +25 -0
  379. package/loop/contract.md +102 -0
  380. package/package.json +54 -0
  381. package/schemas/advisor-evidence.schema.json +54 -0
  382. package/schemas/advisor-output.schema.json +31 -0
  383. package/schemas/conductor-activity-payload.schema.json +38 -0
  384. package/schemas/conductor-decision.schema.json +29 -0
  385. package/schemas/conductor-dispatch-intent.schema.json +71 -0
  386. package/schemas/conductor-dispatch-preparation.schema.json +46 -0
  387. package/schemas/conductor-dispatch-proposal.schema.json +82 -0
  388. package/schemas/conductor-goal-proposal.schema.json +30 -0
  389. package/schemas/conductor-manage-worker.schema.json +17 -0
  390. package/schemas/conductor-notification-payload.schema.json +39 -0
  391. package/schemas/conductor-process-result.schema.json +14 -0
  392. package/schemas/conductor-route.schema.json +51 -0
  393. package/schemas/conductor-start-team.schema.json +16 -0
  394. package/schemas/conductor-waiter-payload.schema.json +68 -0
  395. package/schemas/deterministic-check.schema.json +107 -0
  396. package/schemas/dispatch-acknowledgement.schema.json +15 -0
  397. package/schemas/dispatch-advice-payload.schema.json +64 -0
  398. package/schemas/dispatch-payload.schema.json +131 -0
  399. package/schemas/dispatch-result.schema.json +28 -0
  400. package/schemas/endurance-policy.schema.json +16 -0
  401. package/schemas/events/dispatch-delivery-requested.schema.json +17 -0
  402. package/schemas/events/github-observed.schema.json +28 -0
  403. package/schemas/events/native-hook-observed.schema.json +35 -0
  404. package/schemas/events/provider-observed.schema.json +64 -0
  405. package/schemas/events/run-heartbeat-due.schema.json +10 -0
  406. package/schemas/events/slack-notification-requested.schema.json +14 -0
  407. package/schemas/events/structured-role-completed.schema.json +54 -0
  408. package/schemas/events/ticket-resume-due.schema.json +28 -0
  409. package/schemas/events/watchdog-lease-expired.schema.json +14 -0
  410. package/schemas/events/watchdog-outbox-stalled.schema.json +12 -0
  411. package/schemas/events/watchdog-session-stalled.schema.json +11 -0
  412. package/schemas/evidence-record.schema.json +37 -0
  413. package/schemas/executor-result.schema.json +17 -0
  414. package/schemas/github-observation.schema.json +33 -0
  415. package/schemas/github-watermark.schema.json +66 -0
  416. package/schemas/goal-artifact.schema.json +19 -0
  417. package/schemas/goal-create-input.schema.json +14 -0
  418. package/schemas/goal-executor-result.schema.json +18 -0
  419. package/schemas/goal-payload.schema.json +95 -0
  420. package/schemas/grader-output.schema.json +33 -0
  421. package/schemas/lease-expiry.schema.json +19 -0
  422. package/schemas/live-disclosure.schema.json +16 -0
  423. package/schemas/live-outcome.schema.json +52 -0
  424. package/schemas/native-goal-snapshot.schema.json +27 -0
  425. package/schemas/provider-observed.schema.json +64 -0
  426. package/schemas/quota-observation.schema.json +72 -0
  427. package/schemas/reflection-evidence.schema.json +61 -0
  428. package/schemas/reflection.schema.json +13 -0
  429. package/schemas/regression-request.schema.json +54 -0
  430. package/schemas/release-assessment.schema.json +34 -0
  431. package/schemas/release-policy.schema.json +30 -0
  432. package/schemas/result-gate-payload.schema.json +244 -0
  433. package/schemas/review-delivery-payload.schema.json +42 -0
  434. package/schemas/role-policy.schema.json +111 -0
  435. package/schemas/run-abort-input.schema.json +11 -0
  436. package/schemas/run-completion-proof.schema.json +62 -0
  437. package/schemas/run-ledger-entry.schema.json +78 -0
  438. package/schemas/run-manifest.schema.json +74 -0
  439. package/schemas/run-start-intent.schema.json +74 -0
  440. package/schemas/runtime-record.schema.json +111 -0
  441. package/schemas/service-plan.schema.json +35 -0
  442. package/schemas/session-payload.schema.json +80 -0
  443. package/schemas/structured-role-read-request.schema.json +14 -0
  444. package/schemas/structured-role-request.schema.json +44 -0
  445. package/schemas/structured-role-result.schema.json +38 -0
  446. package/schemas/structured-role-submit-result.schema.json +15 -0
  447. package/schemas/team-checkpoint.schema.json +42 -0
  448. package/schemas/team-plan.schema.json +30 -0
  449. package/schemas/ticket-content.schema.json +38 -0
  450. package/schemas/ticket-queue-payload.schema.json +191 -0
  451. package/schemas/trust-report.schema.json +68 -0
  452. package/schemas/trust-run.schema.json +47 -0
  453. package/schemas/ultragoal-checkpoint.schema.json +49 -0
  454. package/schemas/user-schedule-installation-v1.schema.json +32 -0
  455. package/schemas/user-schedule-installation.schema.json +38 -0
  456. package/schemas/user-schedule-plan.schema.json +39 -0
  457. package/schemas/verification-plan-evidence.schema.json +37 -0
  458. package/schemas/worker-acknowledge-dispatch.schema.json +12 -0
  459. package/schemas/worker-payload.schema.json +47 -0
  460. package/schemas/worker-read-dispatch.schema.json +11 -0
  461. package/schemas/worker-record-dispatch-result.schema.json +14 -0
@@ -0,0 +1,79 @@
1
+ import { join } from "node:path";
2
+ import { assertOpaqueId, assertRecordId } from "../domain/records.js";
3
+ import { findPackageRoot } from "../package-root.js";
4
+ import { assertSchema, loadJsonSchema } from "../runtime/schema.js";
5
+ const TEAM_PROJECTIONS = new WeakSet();
6
+ export function projectReadOnlyTeamState(value, packageRoot = findPackageRoot()) {
7
+ const detached = cloneJson(value);
8
+ const schema = loadJsonSchema(join(packageRoot, "schemas", "team-checkpoint.schema.json"));
9
+ assertSchema(detached, schema, "Team state projection");
10
+ const candidate = detached;
11
+ validateTeamCheckpointSemantics(candidate);
12
+ const normalized = {
13
+ ...candidate,
14
+ delivery_wave: {
15
+ ...candidate.delivery_wave,
16
+ workers: [...candidate.delivery_wave.workers].sort((left, right) => compareText(left.worker_id, right.worker_id)),
17
+ },
18
+ };
19
+ const projection = deepFreeze(normalized);
20
+ TEAM_PROJECTIONS.add(projection);
21
+ return projection;
22
+ }
23
+ export function validateTeamCheckpointSemantics(candidate) {
24
+ assertRecordId(candidate.goal_id, "Team goal id");
25
+ assertOpaqueId(candidate.delivery_wave.wave_id, "delivery wave id");
26
+ timestampEpoch(candidate.delivery_wave.completed_at, "delivery wave completed_at");
27
+ const workerIds = new Set();
28
+ const worktreeIds = new Set();
29
+ const evidenceHashes = new Set();
30
+ for (const worker of candidate.delivery_wave.workers) {
31
+ assertOpaqueId(worker.worker_id, "Team worker id");
32
+ assertOpaqueId(worker.worktree_id, "Team worktree id");
33
+ if (workerIds.has(worker.worker_id))
34
+ throw new Error(`duplicate Team worker evidence: ${worker.worker_id}`);
35
+ if (worktreeIds.has(worker.worktree_id))
36
+ throw new Error(`Team workers must use isolated worktrees: ${worker.worktree_id}`);
37
+ if (evidenceHashes.has(worker.evidence_sha256))
38
+ throw new Error("duplicate Team worker evidence digest");
39
+ if (worker.test_sha256 !== candidate.test_sha256)
40
+ throw new Error("conflicting Team worker test hashes");
41
+ workerIds.add(worker.worker_id);
42
+ worktreeIds.add(worker.worktree_id);
43
+ evidenceHashes.add(worker.evidence_sha256);
44
+ }
45
+ }
46
+ export function assertTeamCheckpointProjection(value) {
47
+ if (typeof value !== "object" || value === null || !TEAM_PROJECTIONS.has(value)) {
48
+ throw new Error("Team checkpoint was not created by the read-only projection boundary");
49
+ }
50
+ }
51
+ function timestampEpoch(value, label) {
52
+ const epoch = Date.parse(value);
53
+ const normalized = value.includes(".") ? value : value.replace("Z", ".000Z");
54
+ if (!Number.isFinite(epoch) || new Date(epoch).toISOString() !== normalized)
55
+ throw new Error(`${label} is invalid`);
56
+ return epoch;
57
+ }
58
+ function compareText(left, right) {
59
+ return left < right ? -1 : left > right ? 1 : 0;
60
+ }
61
+ function cloneJson(value) {
62
+ try {
63
+ const raw = JSON.stringify(value);
64
+ if (raw === undefined)
65
+ throw new Error("not JSON serializable");
66
+ return JSON.parse(raw);
67
+ }
68
+ catch (error) {
69
+ throw new Error("Team state must be JSON serializable", { cause: error });
70
+ }
71
+ }
72
+ function deepFreeze(value) {
73
+ if (typeof value !== "object" || value === null || Object.isFrozen(value))
74
+ return value;
75
+ for (const child of Object.values(value))
76
+ deepFreeze(child);
77
+ return Object.freeze(value);
78
+ }
79
+ //# sourceMappingURL=projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/team/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { EvidenceReference } from "../evidence/store.js";
2
+ import { type ProcessRunner } from "../providers/process.js";
3
+ import type { createRuntimeTicketAuthorities } from "./runtime-authority.js";
4
+ type TicketAuthorities = ReturnType<typeof createRuntimeTicketAuthorities>;
5
+ export interface TicketAdmission {
6
+ readonly ticket_id: string;
7
+ readonly ticket_version: number;
8
+ readonly attempt: number;
9
+ readonly worker_id: string;
10
+ readonly session_id: string;
11
+ readonly lease_token: string;
12
+ readonly worktree_id: string;
13
+ readonly worktree_path: string;
14
+ readonly worktree_branch: string;
15
+ readonly worktree_base_commit: string;
16
+ readonly verification_plan: EvidenceReference;
17
+ }
18
+ /**
19
+ * Deterministically prepares and leases ready GitHub tickets. The conductor still
20
+ * chooses role, model, task, and which admitted ticket to dispatch.
21
+ */
22
+ export declare function admitReadyGithubTickets(options: {
23
+ readonly packageRoot: string;
24
+ readonly configRoot?: string;
25
+ readonly workspaceRoot: string;
26
+ readonly stateRoot: string;
27
+ readonly tickets: TicketAuthorities;
28
+ readonly ticketIds: readonly string[];
29
+ readonly at: string;
30
+ readonly env?: NodeJS.ProcessEnv;
31
+ readonly runner?: ProcessRunner;
32
+ readonly limit?: number;
33
+ }): readonly TicketAdmission[];
34
+ export {};
@@ -0,0 +1,169 @@
1
+ import { join } from "node:path";
2
+ import { deriveWorktreeId } from "../dispatch/authority.js";
3
+ import { runProcess } from "../providers/process.js";
4
+ import { createStableId } from "../runtime/stable-id.js";
5
+ import { validateExistingDirectory } from "../utils/fs.js";
6
+ import { freezeTrackedVerificationPlan } from "../verification/plan.js";
7
+ import { createTicketWorktree } from "../worktrees/manager.js";
8
+ const MAX_ADMISSIONS = 20;
9
+ const LEASE_DURATION_MS = 24 * 60 * 60 * 1_000;
10
+ /**
11
+ * Deterministically prepares and leases ready GitHub tickets. The conductor still
12
+ * chooses role, model, task, and which admitted ticket to dispatch.
13
+ */
14
+ export function admitReadyGithubTickets(options) {
15
+ const packageRoot = validateExistingDirectory(options.packageRoot, "package root");
16
+ const configRoot = validateExistingDirectory(options.configRoot ?? packageRoot, "configuration root");
17
+ const workspaceRoot = validateExistingDirectory(options.workspaceRoot, "ticket admission workspace root");
18
+ const stateRoot = validateExistingDirectory(options.stateRoot, "OMS state root");
19
+ const limit = options.limit ?? MAX_ADMISSIONS;
20
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > MAX_ADMISSIONS) {
21
+ throw new Error(`ticket admission limit must be between 1 and ${MAX_ADMISSIONS}`);
22
+ }
23
+ const runner = options.runner ?? runProcess;
24
+ const plan = freezeTrackedVerificationPlan(configRoot);
25
+ const ticketIds = new Set(options.ticketIds.map(String));
26
+ if (ticketIds.size !== options.ticketIds.length)
27
+ throw new Error("ticket admission input contains duplicate ticket IDs");
28
+ const candidates = options.tickets.queue.list()
29
+ .filter((ticket) => ticketIds.has(String(ticket.record_id)) && ticket.payload.source === "github" && (ticket.state === "pending"
30
+ || ticket.state === "retryable"
31
+ || ticket.state === "leased"))
32
+ .sort((left, right) => {
33
+ const stateOrder = Number(left.state === "leased") - Number(right.state === "leased");
34
+ return stateOrder || String(left.record_id).localeCompare(String(right.record_id));
35
+ })
36
+ .slice(0, limit);
37
+ return Object.freeze(candidates.map((candidate) => admitOne({
38
+ candidate,
39
+ workspaceRoot,
40
+ stateRoot,
41
+ tickets: options.tickets,
42
+ at: options.at,
43
+ plan,
44
+ env: options.env,
45
+ runner,
46
+ })));
47
+ }
48
+ function admitOne(options) {
49
+ let ticket = options.tickets.lifecycle.read(options.candidate.record_id);
50
+ if (ticket.version !== options.candidate.version || ticket.state !== options.candidate.state) {
51
+ throw new Error("ticket admission candidate changed before preparation");
52
+ }
53
+ if (options.tickets.lifecycle.authorityStatus(ticket.record_id) !== "current") {
54
+ throw new Error("ticket admission requires current policy and verification authority");
55
+ }
56
+ const planRef = ensurePlan(options.tickets, ticket, options.plan, options.at);
57
+ const worktree = createTicketWorktree({
58
+ repositoryRoot: options.workspaceRoot,
59
+ worktreesRoot: join(options.stateRoot, "worktrees"),
60
+ recordsRoot: join(options.stateRoot, "worktree-records"),
61
+ locksRoot: join(options.stateRoot, "locks"),
62
+ ticketId: ticket.record_id,
63
+ actorId: "oms-system",
64
+ transitionNonce: createStableId("admit-worktree", ticket.record_id),
65
+ baseRef: "main",
66
+ env: options.env,
67
+ runner: options.runner,
68
+ }).record;
69
+ if (ticket.state === "pending" && ticket.payload.verification_plan_ref === null) {
70
+ ticket = options.tickets.lifecycle.prepare({
71
+ ticketId: ticket.record_id,
72
+ operationId: createStableId("admit-prepare", ticket.record_id, options.plan.digest),
73
+ ownerId: "oms-system",
74
+ expectedVersion: ticket.version,
75
+ expectedAttempt: ticket.attempt,
76
+ expectedActor: ticket.actor,
77
+ expectedLeaseToken: ticket.lease_token,
78
+ at: nextTimestamp(ticket.payload.lifecycle_updated_at, options.at),
79
+ verificationPlanRef: planRef,
80
+ worktree: { branch: worktree.branch, base_commit: worktree.base_commit },
81
+ }).record;
82
+ }
83
+ else {
84
+ assertPrepared(ticket, planRef, worktree.branch, worktree.base_commit);
85
+ }
86
+ const leaseAttempt = ticket.state === "retryable" ? ticket.attempt + 1 : ticket.attempt;
87
+ const workerId = createStableId("worker", ticket.record_id, String(leaseAttempt));
88
+ const sessionId = createStableId("session", ticket.record_id, String(leaseAttempt));
89
+ if (ticket.state === "pending" || ticket.state === "retryable") {
90
+ const leaseAt = nextTimestamp(ticket.payload.lifecycle_updated_at, options.at);
91
+ ticket = options.tickets.lifecycle.lease({
92
+ ticketId: ticket.record_id,
93
+ operationId: createStableId("admit-lease", ticket.record_id, String(leaseAttempt)),
94
+ ownerId: "oms-system",
95
+ expectedVersion: ticket.version,
96
+ expectedAttempt: ticket.attempt,
97
+ expectedActor: ticket.actor,
98
+ expectedLeaseToken: ticket.lease_token,
99
+ at: leaseAt,
100
+ workerId,
101
+ sessionId,
102
+ leaseExpiresAt: new Date(Date.parse(leaseAt) + LEASE_DURATION_MS).toISOString(),
103
+ }).record;
104
+ }
105
+ else if (ticket.actor !== workerId
106
+ || ticket.payload.session_id !== sessionId
107
+ || ticket.payload.worktree?.branch !== worktree.branch
108
+ || ticket.payload.worktree.base_commit !== worktree.base_commit) {
109
+ throw new Error("ticket admission found a conflicting existing lease");
110
+ }
111
+ if (ticket.lease_token === null)
112
+ throw new Error("ticket admission did not create a lease token");
113
+ if (ticket.payload.lease_expires_at === null || Date.parse(ticket.payload.lease_expires_at) <= Date.parse(options.at)) {
114
+ throw new Error("ticket admission found an expired lease");
115
+ }
116
+ return Object.freeze({
117
+ ticket_id: ticket.record_id,
118
+ ticket_version: ticket.version,
119
+ attempt: ticket.attempt,
120
+ worker_id: workerId,
121
+ session_id: sessionId,
122
+ lease_token: ticket.lease_token,
123
+ worktree_id: deriveWorktreeId(worktree),
124
+ worktree_path: worktree.worktree_root,
125
+ worktree_branch: worktree.branch,
126
+ worktree_base_commit: worktree.base_commit,
127
+ verification_plan: planRef,
128
+ });
129
+ }
130
+ function ensurePlan(tickets, ticket, plan, at) {
131
+ const evidenceId = createStableId("ticket-plan", ticket.record_id, plan.digest);
132
+ const existing = tickets.evidenceStore.references("verification-plan")
133
+ .find((reference) => reference.evidence_id === evidenceId);
134
+ if (existing) {
135
+ const stored = tickets.evidenceStore.read(existing);
136
+ if (stored.ticket_id !== ticket.record_id || stored.payload.digest !== plan.digest) {
137
+ throw new Error("stored ticket admission verification plan conflicts with the current ticket");
138
+ }
139
+ return existing;
140
+ }
141
+ return tickets.evidenceStore.write({
142
+ schema_version: 1,
143
+ evidence_id: evidenceId,
144
+ evidence_kind: "verification-plan",
145
+ ticket_id: ticket.record_id,
146
+ producer_role: "oms.system",
147
+ created_at: nextTimestamp(ticket.payload.lifecycle_updated_at, at),
148
+ payload: { plan: plan.plan, digest: plan.digest },
149
+ }).ref;
150
+ }
151
+ function assertPrepared(ticket, plan, branch, baseCommit) {
152
+ const actual = ticket.payload.verification_plan_ref;
153
+ if (actual === null
154
+ || actual.evidence_id !== plan.evidence_id
155
+ || actual.sha256 !== plan.sha256
156
+ || actual.file_name !== plan.file_name
157
+ || ticket.payload.gate_digest === null
158
+ || ticket.payload.worktree?.branch !== branch
159
+ || ticket.payload.worktree.base_commit !== baseCommit)
160
+ throw new Error("ticket admission found conflicting prepared authority");
161
+ }
162
+ function nextTimestamp(previous, proposed) {
163
+ const previousMs = Date.parse(previous);
164
+ const proposedMs = Date.parse(proposed);
165
+ if (!Number.isFinite(previousMs) || !Number.isFinite(proposedMs))
166
+ throw new Error("ticket admission timestamp is invalid");
167
+ return new Date(Math.max(proposedMs, previousMs + 1)).toISOString();
168
+ }
169
+ //# sourceMappingURL=admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.js","sourceRoot":"","sources":["../../../src/tickets/admission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { assertTicketMaterializer, assertTicketMaterializerEvidenceStore, createTicketMaterializer, type TicketMaterializer, } from "./store.js";
@@ -0,0 +1,2 @@
1
+ export { assertTicketMaterializer, assertTicketMaterializerEvidenceStore, createTicketMaterializer, } from "./store.js";
2
+ //# sourceMappingURL=materializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materializer.js","sourceRoot":"","sources":["../../../src/tickets/materializer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,qCAAqC,EACrC,wBAAwB,GAEzB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,32 @@
1
+ export declare const OMS_SYSTEM_ACTORS: readonly ["oms-system", "github-sync", "oms-scheduler", "oms-watchdog"];
2
+ export type OmsSystemActor = (typeof OMS_SYSTEM_ACTORS)[number];
3
+ export declare function createRuntimeTicketAuthorities(options: {
4
+ packageRoot: string;
5
+ configRoot?: string;
6
+ stateRoot: string;
7
+ actorId: OmsSystemActor;
8
+ }): Readonly<{
9
+ evidenceStore: import("../evidence/store.js").EvidenceStore;
10
+ queue: import("./store.js").TicketQueueStore;
11
+ materializer: import("./store.js").TicketMaterializer;
12
+ lifecycle: Readonly<{
13
+ read: (ticketId: string) => import("./store.js").TicketQueueRecord;
14
+ authorityStatus(ticketId: string): "current" | "stale-policy" | "stale-gate";
15
+ prepare(input: import("./store.js").PrepareTicketInput): import("./store.js").QueueMutationResult;
16
+ lease(input: import("./store.js").LeaseTicketInput): import("./store.js").QueueMutationResult;
17
+ renew(input: import("./store.js").ExpectedTicketMutation & {
18
+ leaseExpiresAt: string;
19
+ }): import("./store.js").QueueMutationResult;
20
+ start(input: import("./store.js").ExpectedTicketMutation): import("./store.js").QueueMutationResult;
21
+ beginVerification(input: import("./store.js").BeginVerificationInput): import("./store.js").QueueMutationResult;
22
+ complete(input: import("./store.js").CompleteTicketInput): import("./store.js").QueueMutationResult;
23
+ failAttempt(input: import("./store.js").FailAttemptInput): import("./store.js").QueueMutationResult;
24
+ blockVerification(input: import("./store.js").BlockVerificationInput): import("./store.js").QueueMutationResult;
25
+ attachRetryReflection(input: import("./store.js").AttachRetryReflectionInput): import("./store.js").QueueMutationResult;
26
+ park(input: import("./store.js").ParkTicketInput): import("./store.js").QueueMutationResult;
27
+ resume(input: import("./store.js").ResumeTicketInput): import("./store.js").QueueMutationResult;
28
+ quarantineStaleAuthority(input: import("./store.js").QuarantineTicketInput): import("./store.js").QueueMutationResult;
29
+ rebindUnpreparedAuthority(input: import("./store.js").ExpectedTicketMutation): import("./store.js").QueueMutationResult;
30
+ recoverExpiredLease(input: import("./store.js").ExpectedTicketMutation): import("./store.js").QueueMutationResult;
31
+ }>;
32
+ }>;
@@ -0,0 +1,46 @@
1
+ import { join } from "node:path";
2
+ import { assertActorId } from "../domain/records.js";
3
+ import { loadTrackedRolePolicyGate } from "../domain/role-policy.js";
4
+ import { createEvidenceStore } from "../evidence/store.js";
5
+ import { validateExistingDirectory } from "../utils/fs.js";
6
+ import { createTicketContentStore, createTicketLifecycleService, createTicketMaterializer, createTicketQueueStore, } from "./store.js";
7
+ export const OMS_SYSTEM_ACTORS = Object.freeze([
8
+ "oms-system",
9
+ "github-sync",
10
+ "oms-scheduler",
11
+ "oms-watchdog",
12
+ ]);
13
+ export function createRuntimeTicketAuthorities(options) {
14
+ const suppliedPackageRoot = options.packageRoot;
15
+ const supplied = {
16
+ packageRoot: suppliedPackageRoot,
17
+ configRoot: options.configRoot ?? suppliedPackageRoot,
18
+ stateRoot: options.stateRoot,
19
+ actorId: options.actorId,
20
+ };
21
+ const packageRoot = validateExistingDirectory(supplied.packageRoot, "package root");
22
+ const configRoot = validateExistingDirectory(supplied.configRoot, "configuration root");
23
+ const stateRoot = validateExistingDirectory(supplied.stateRoot, "runtime state root");
24
+ const actorId = assertActorId(supplied.actorId, "runtime ticket actor");
25
+ if (!OMS_SYSTEM_ACTORS.includes(supplied.actorId)) {
26
+ throw new Error("runtime ticket actor is not a shipped OMS system actor");
27
+ }
28
+ const evidenceStore = createEvidenceStore({ evidenceRoot: join(stateRoot, "evidence"), packageRoot });
29
+ const queueStore = createTicketQueueStore({
30
+ recordsRoot: join(stateRoot, "queue"),
31
+ locksRoot: join(stateRoot, "locks"),
32
+ systemActors: OMS_SYSTEM_ACTORS,
33
+ policyGate: loadTrackedRolePolicyGate(configRoot),
34
+ packageRoot,
35
+ policyRoot: configRoot,
36
+ evidenceStore,
37
+ });
38
+ const ticketStore = createTicketContentStore({ ticketsRoot: join(stateRoot, "tickets"), packageRoot });
39
+ return Object.freeze({
40
+ evidenceStore,
41
+ queue: queueStore,
42
+ materializer: createTicketMaterializer({ queueStore, ticketStore, actorId }),
43
+ lifecycle: createTicketLifecycleService(queueStore),
44
+ });
45
+ }
46
+ //# sourceMappingURL=runtime-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-authority.js","sourceRoot":"","sources":["../../../src/tickets/runtime-authority.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,YAAY;IACZ,aAAa;IACb,eAAe;IACf,cAAc;CACN,CAAC,CAAC;AAIZ,MAAM,UAAU,8BAA8B,CAAC,OAK9C;IACC,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAChD,MAAM,QAAQ,GAAG;QACf,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,mBAAmB;QACrD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;IACF,MAAM,WAAW,GAAG,yBAAyB,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,yBAAyB,CAAC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;IACxF,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;IACxE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACtG,MAAM,UAAU,GAAG,sBAAsB,CAAC;QACxC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;QACrC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;QACnC,YAAY,EAAE,iBAAiB;QAC/B,UAAU,EAAE,yBAAyB,CAAC,UAAU,CAAC;QACjD,WAAW;QACX,UAAU,EAAE,UAAU;QACtB,aAAa;KACd,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACvG,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa;QACb,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,wBAAwB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAC5E,SAAS,EAAE,4BAA4B,CAAC,UAAU,CAAC;KACpD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,221 @@
1
+ import { type RuntimeRecord } from "../domain/records.js";
2
+ import { type EvidenceReference, type EvidenceStore } from "../evidence/store.js";
3
+ import { type TrackedRolePolicyGate } from "../domain/role-policy.js";
4
+ import { type QueueLifecycleFields, type TicketState } from "../queue/model.js";
5
+ import { type ExhaustedQuotaGate, type FreshQuotaGate } from "../runtime/quota.js";
6
+ import { type TransitionResult } from "../runtime/record-store.js";
7
+ declare const TICKET_QUEUE_STORE: unique symbol;
8
+ export type TicketSource = "github" | "local";
9
+ export type { TicketState } from "../queue/model.js";
10
+ export type TicketSyncStatus = "created" | "refreshed" | "unchanged";
11
+ export interface GitHubTicketInput {
12
+ repository: string;
13
+ issue_node_id: string;
14
+ title: string;
15
+ body: string | null;
16
+ labels: string[];
17
+ url: string;
18
+ updated_at: string;
19
+ }
20
+ export interface LocalTicketInput {
21
+ ticket_id: string;
22
+ title: string;
23
+ body: string | null;
24
+ labels: string[];
25
+ url: string | null;
26
+ updated_at: string;
27
+ }
28
+ export type TicketContent = {
29
+ schema_version: 1;
30
+ ticket_id: string;
31
+ source: TicketSource;
32
+ repository: string | null;
33
+ issue_node_id: string | null;
34
+ title: string;
35
+ body: string | null;
36
+ labels: string[];
37
+ url: string | null;
38
+ updated_at: string;
39
+ };
40
+ export interface TicketWorktreeRef {
41
+ branch: string;
42
+ base_commit: string;
43
+ }
44
+ export interface TicketSyncOutcome {
45
+ nonce: string;
46
+ operation_sha256: string;
47
+ status: TicketSyncStatus;
48
+ content_sha256: string;
49
+ content_file: string;
50
+ record_version: number;
51
+ }
52
+ export type TicketQueuePayload = Record<string, unknown> & QueueLifecycleFields & {
53
+ ticket_id: string;
54
+ source: TicketSource;
55
+ source_ref_sha256: string;
56
+ content_sha256: string;
57
+ content_file: string;
58
+ source_updated_at: string;
59
+ ready_intent: true;
60
+ policy_version: number;
61
+ policy_digest: string;
62
+ gate_digest: string | null;
63
+ verification_plan_ref: EvidenceReference | null;
64
+ worktree: TicketWorktreeRef | null;
65
+ executor_evidence: EvidenceReference | null;
66
+ verification_evidence: EvidenceReference | null;
67
+ grade_evidence: EvidenceReference | null;
68
+ prior_failure_evidence: EvidenceReference | null;
69
+ prior_reflection_evidence: EvidenceReference | null;
70
+ merge_disposition: "human_hold";
71
+ sync_outcomes: TicketSyncOutcome[];
72
+ };
73
+ export interface TicketContentRef {
74
+ ticket_id: string;
75
+ sha256: string;
76
+ file_name: string;
77
+ }
78
+ export interface PreparedTicketContent {
79
+ content: TicketContent;
80
+ ref: TicketContentRef;
81
+ source_ref_sha256: string;
82
+ bytes: Buffer;
83
+ }
84
+ export interface TicketContentStore {
85
+ prepareGitHub(input: GitHubTicketInput): PreparedTicketContent;
86
+ prepareLocal(input: LocalTicketInput): PreparedTicketContent;
87
+ write(prepared: PreparedTicketContent): "created" | "replayed";
88
+ read(ref: TicketContentRef): TicketContent;
89
+ }
90
+ export interface TicketQueueStore {
91
+ readonly [TICKET_QUEUE_STORE]: true;
92
+ read(recordId: string): RuntimeRecord<TicketState, TicketQueuePayload>;
93
+ readIfExists(recordId: string): RuntimeRecord<TicketState, TicketQueuePayload> | undefined;
94
+ list(): readonly RuntimeRecord<TicketState, TicketQueuePayload>[];
95
+ }
96
+ export declare function assertTicketQueueStore(value: unknown): asserts value is TicketQueueStore;
97
+ export interface TicketMaterializer {
98
+ syncGitHub(input: GitHubTicketInput): SyncTicketResult;
99
+ syncLocal(input: LocalTicketInput): SyncTicketResult;
100
+ readContent(ref: TicketContentRef): TicketContent;
101
+ read(recordId: string): TicketQueueRecord;
102
+ readIfExists(recordId: string): TicketQueueRecord | undefined;
103
+ }
104
+ interface SyncTicketOptions {
105
+ ticketStore: TicketContentStore;
106
+ queueStore: TicketQueueStore;
107
+ actorId: string;
108
+ maxAttempts?: number;
109
+ }
110
+ export interface SyncGitHubTicketOptions extends SyncTicketOptions {
111
+ input: GitHubTicketInput;
112
+ }
113
+ export interface SyncLocalTicketOptions extends SyncTicketOptions {
114
+ input: LocalTicketInput;
115
+ }
116
+ export type SyncTicketResult = {
117
+ status: TicketSyncStatus;
118
+ ref: TicketContentRef;
119
+ record: RuntimeRecord<TicketState, TicketQueuePayload>;
120
+ };
121
+ export type TicketQueueRecord = RuntimeRecord<TicketState, TicketQueuePayload>;
122
+ export type QueueMutationResult = TransitionResult<TicketState, TicketQueuePayload>;
123
+ export interface ExpectedTicketMutation {
124
+ ticketId: string;
125
+ operationId: string;
126
+ ownerId: string;
127
+ expectedVersion: number;
128
+ expectedAttempt: number;
129
+ expectedActor: string;
130
+ expectedLeaseToken: string | null;
131
+ at: string;
132
+ }
133
+ export interface PrepareTicketInput extends ExpectedTicketMutation {
134
+ verificationPlanRef: EvidenceReference;
135
+ worktree: TicketWorktreeRef;
136
+ }
137
+ export interface LeaseTicketInput extends ExpectedTicketMutation {
138
+ workerId: string;
139
+ sessionId: string;
140
+ leaseExpiresAt: string;
141
+ }
142
+ export interface BeginVerificationInput extends ExpectedTicketMutation {
143
+ executorEvidence: EvidenceReference;
144
+ }
145
+ export interface CompleteTicketInput extends ExpectedTicketMutation {
146
+ verificationEvidence: EvidenceReference;
147
+ gradeEvidence: EvidenceReference;
148
+ }
149
+ export interface FailAttemptInput extends ExpectedTicketMutation {
150
+ error: string;
151
+ executorEvidence?: EvidenceReference;
152
+ verificationEvidence?: EvidenceReference;
153
+ gradeEvidence?: EvidenceReference;
154
+ failureEvidence?: EvidenceReference;
155
+ reflectionEvidence?: EvidenceReference;
156
+ }
157
+ export interface BlockVerificationInput extends ExpectedTicketMutation {
158
+ error: string;
159
+ verificationEvidence?: EvidenceReference;
160
+ gradeEvidence?: EvidenceReference;
161
+ }
162
+ export interface AttachRetryReflectionInput extends ExpectedTicketMutation {
163
+ reflectionEvidence: EvidenceReference;
164
+ }
165
+ export interface ParkTicketInput extends ExpectedTicketMutation {
166
+ resumeAt: string;
167
+ reason: string;
168
+ quotaGate?: ExhaustedQuotaGate;
169
+ }
170
+ export interface ResumeTicketInput extends ExpectedTicketMutation {
171
+ quotaGate?: FreshQuotaGate;
172
+ }
173
+ export interface QuarantineTicketInput extends ExpectedTicketMutation {
174
+ reason: string;
175
+ }
176
+ export declare function deriveGitHubTicketIdentity(input: Pick<GitHubTicketInput, "issue_node_id">): {
177
+ ticket_id: string;
178
+ source_ref_sha256: string;
179
+ };
180
+ export declare function createTicketQueueStore(options: {
181
+ recordsRoot: string;
182
+ locksRoot: string;
183
+ systemActors: readonly string[];
184
+ policyGate: TrackedRolePolicyGate;
185
+ packageRoot?: string;
186
+ policyRoot?: string;
187
+ evidenceStore?: EvidenceStore;
188
+ }): TicketQueueStore;
189
+ export declare function createTicketLifecycleService(store: TicketQueueStore): Readonly<{
190
+ read: (ticketId: string) => TicketQueueRecord;
191
+ authorityStatus(ticketId: string): "current" | "stale-policy" | "stale-gate";
192
+ prepare(input: PrepareTicketInput): QueueMutationResult;
193
+ lease(input: LeaseTicketInput): QueueMutationResult;
194
+ renew(input: ExpectedTicketMutation & {
195
+ leaseExpiresAt: string;
196
+ }): QueueMutationResult;
197
+ start(input: ExpectedTicketMutation): QueueMutationResult;
198
+ beginVerification(input: BeginVerificationInput): QueueMutationResult;
199
+ complete(input: CompleteTicketInput): QueueMutationResult;
200
+ failAttempt(input: FailAttemptInput): QueueMutationResult;
201
+ blockVerification(input: BlockVerificationInput): QueueMutationResult;
202
+ attachRetryReflection(input: AttachRetryReflectionInput): QueueMutationResult;
203
+ park(input: ParkTicketInput): QueueMutationResult;
204
+ resume(input: ResumeTicketInput): QueueMutationResult;
205
+ quarantineStaleAuthority(input: QuarantineTicketInput): QueueMutationResult;
206
+ rebindUnpreparedAuthority(input: ExpectedTicketMutation): QueueMutationResult;
207
+ recoverExpiredLease(input: ExpectedTicketMutation): QueueMutationResult;
208
+ }>;
209
+ export declare function createTicketMaterializer(options: {
210
+ queueStore: TicketQueueStore;
211
+ ticketStore: TicketContentStore;
212
+ actorId: string;
213
+ }): TicketMaterializer;
214
+ export declare function assertTicketMaterializer(value: unknown): asserts value is TicketMaterializer;
215
+ export declare function assertTicketMaterializerEvidenceStore(materializer: TicketMaterializer, evidenceStore: EvidenceStore): void;
216
+ export declare function createTicketContentStore(options: {
217
+ ticketsRoot: string;
218
+ packageRoot?: string;
219
+ }): TicketContentStore;
220
+ export declare function syncGitHubTicket(options: SyncGitHubTicketOptions): SyncTicketResult;
221
+ export declare function syncLocalTicket(options: SyncLocalTicketOptions): SyncTicketResult;