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,124 @@
1
+ const RUN_ID_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;
2
+ const DIGEST_PATTERN = /^[0-9a-f]{64}$/;
3
+ export const TRUST_MINIMUM_MATCHING_RUNS = 20;
4
+ export const TRUST_REQUIRED_PASS_RATE_BASIS_POINTS = 9_500;
5
+ export function assessTrust(value) {
6
+ const input = parseAssessmentInput(value);
7
+ let matchingRuns = 0;
8
+ let passedRuns = 0;
9
+ for (const run of input.runs) {
10
+ if (run.policy_version !== input.policy_version
11
+ || run.policy_digest !== input.policy_digest
12
+ || run.gate_digest !== input.gate_digest) {
13
+ continue;
14
+ }
15
+ matchingRuns += 1;
16
+ if (run.deterministic_passed)
17
+ passedRuns += 1;
18
+ }
19
+ const passRateBasisPoints = matchingRuns === 0
20
+ ? 0
21
+ : Math.floor((passedRuns * 10_000) / matchingRuns);
22
+ const eligibleForReview = matchingRuns >= TRUST_MINIMUM_MATCHING_RUNS
23
+ && passedRuns * 10_000 >= matchingRuns * TRUST_REQUIRED_PASS_RATE_BASIS_POINTS;
24
+ return Object.freeze({
25
+ status: eligibleForReview ? "eligible_for_review" : "manual",
26
+ matching_runs: matchingRuns,
27
+ passed_runs: passedRuns,
28
+ pass_rate_basis_points: passRateBasisPoints,
29
+ minimum_matching_runs: TRUST_MINIMUM_MATCHING_RUNS,
30
+ required_pass_rate_basis_points: TRUST_REQUIRED_PASS_RATE_BASIS_POINTS,
31
+ });
32
+ }
33
+ function parseAssessmentInput(value) {
34
+ assertExactJsonObject(value, ["policy_version", "policy_digest", "gate_digest", "runs"], "trust assessment input");
35
+ const identity = parseIdentity(value, "trust assessment input");
36
+ assertExactJsonArray(value.runs, "trust assessment input runs");
37
+ const runIds = new Set();
38
+ const runs = value.runs.map((run, index) => {
39
+ const parsed = parseRunSummary(run, `trust assessment input run ${index + 1}`);
40
+ if (runIds.has(parsed.run_id))
41
+ throw new Error(`duplicate trust run id: ${parsed.run_id}`);
42
+ runIds.add(parsed.run_id);
43
+ return parsed;
44
+ });
45
+ return {
46
+ ...identity,
47
+ runs,
48
+ };
49
+ }
50
+ function parseRunSummary(value, label) {
51
+ assertExactJsonObject(value, ["run_id", "policy_version", "policy_digest", "gate_digest", "deterministic_passed"], label);
52
+ if (typeof value.run_id !== "string" || !RUN_ID_PATTERN.test(value.run_id)) {
53
+ throw new Error(`${label} run_id is invalid`);
54
+ }
55
+ if (typeof value.deterministic_passed !== "boolean") {
56
+ throw new Error(`${label} deterministic_passed must be a boolean`);
57
+ }
58
+ return {
59
+ run_id: value.run_id,
60
+ ...parseIdentity(value, label),
61
+ deterministic_passed: value.deterministic_passed,
62
+ };
63
+ }
64
+ function parseIdentity(value, label) {
65
+ if (!Number.isSafeInteger(value.policy_version) || value.policy_version < 1) {
66
+ throw new Error(`${label} policy_version must be a positive integer`);
67
+ }
68
+ if (typeof value.policy_digest !== "string" || !DIGEST_PATTERN.test(value.policy_digest)) {
69
+ throw new Error(`${label} policy_digest is invalid`);
70
+ }
71
+ if (typeof value.gate_digest !== "string" || !DIGEST_PATTERN.test(value.gate_digest)) {
72
+ throw new Error(`${label} gate_digest is invalid`);
73
+ }
74
+ return {
75
+ policy_version: value.policy_version,
76
+ policy_digest: value.policy_digest,
77
+ gate_digest: value.gate_digest,
78
+ };
79
+ }
80
+ function assertExactJsonObject(value, keys, label) {
81
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
82
+ throw new Error(`${label} must be an object`);
83
+ }
84
+ const prototype = Object.getPrototypeOf(value);
85
+ if (prototype !== Object.prototype && prototype !== null) {
86
+ throw new Error(`${label} must be a plain JSON object`);
87
+ }
88
+ if (Object.getOwnPropertySymbols(value).length !== 0) {
89
+ throw new Error(`${label} must not contain symbol properties`);
90
+ }
91
+ const descriptors = Object.getOwnPropertyDescriptors(value);
92
+ const expected = new Set(keys);
93
+ for (const key of keys) {
94
+ const descriptor = descriptors[key];
95
+ if (!descriptor)
96
+ throw new Error(`${label} is missing ${key}`);
97
+ if (!("value" in descriptor) || !descriptor.enumerable) {
98
+ throw new Error(`${label} ${key} must be a JSON data property`);
99
+ }
100
+ }
101
+ for (const key of Object.keys(descriptors)) {
102
+ if (!expected.has(key))
103
+ throw new Error(`${label} has unexpected property: ${key}`);
104
+ }
105
+ }
106
+ function assertExactJsonArray(value, label) {
107
+ if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype) {
108
+ throw new Error(`${label} must be a JSON array`);
109
+ }
110
+ if (Object.getOwnPropertySymbols(value).length !== 0) {
111
+ throw new Error(`${label} must not contain symbol properties`);
112
+ }
113
+ const names = Object.getOwnPropertyNames(value);
114
+ if (names.length !== value.length + 1 || !names.includes("length")) {
115
+ throw new Error(`${label} must not be sparse or contain extra properties`);
116
+ }
117
+ for (let index = 0; index < value.length; index += 1) {
118
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
119
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable) {
120
+ throw new Error(`${label} must not be sparse or contain non-data entries`);
121
+ }
122
+ }
123
+ }
124
+ //# sourceMappingURL=assessment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assessment.js","sourceRoot":"","sources":["../../../src/trust/assessment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type EvidenceReference, type EvidenceStore, type EvidenceWriteResult } from "../evidence/store.js";
2
+ import { type TicketMaterializer } from "../tickets/materializer.js";
3
+ export interface TrustPolicyIdentity {
4
+ readonly policy_version: number;
5
+ readonly policy_digest: string;
6
+ }
7
+ export interface RecordTrustRunOptions {
8
+ evidenceStore: EvidenceStore;
9
+ deterministicEvidence: EvidenceReference;
10
+ ticketMaterializer: TicketMaterializer;
11
+ }
12
+ export declare function recordTrustRun(options: RecordTrustRunOptions): EvidenceWriteResult;
13
+ export declare function loadTrackedTrustPolicyIdentity(packageRoot?: string): Readonly<TrustPolicyIdentity>;
@@ -0,0 +1,46 @@
1
+ import { loadTrackedRolePolicyGate } from "../domain/role-policy.js";
2
+ import { readDeterministicVerdict } from "../evidence/verdict.js";
3
+ import { assertEvidenceStore, writeTicketBoundEvidence, } from "../evidence/store.js";
4
+ import { findPackageRoot } from "../package-root.js";
5
+ import { createStableId } from "../runtime/stable-id.js";
6
+ import { assertTicketMaterializer, } from "../tickets/materializer.js";
7
+ export function recordTrustRun(options) {
8
+ assertEvidenceStore(options.evidenceStore);
9
+ assertTicketMaterializer(options.ticketMaterializer);
10
+ const verdict = readDeterministicVerdict(options);
11
+ if (verdict.certification !== "live") {
12
+ throw new Error("non-certifying deterministic evidence cannot create canonical trust evidence");
13
+ }
14
+ const evidenceId = createStableId("trust-run", verdict.deterministic_evidence.evidence_id, verdict.deterministic_evidence.sha256);
15
+ return writeTicketBoundEvidence({
16
+ evidenceStore: options.evidenceStore,
17
+ ticketMaterializer: options.ticketMaterializer,
18
+ record: {
19
+ schema_version: 1,
20
+ evidence_id: evidenceId,
21
+ evidence_kind: "trust-run",
22
+ ticket_id: verdict.ticket_id,
23
+ producer_role: "oms.system",
24
+ created_at: verdict.created_at,
25
+ payload: {
26
+ schema_version: 1,
27
+ run_id: evidenceId,
28
+ ticket_id: verdict.ticket_id,
29
+ deterministic_evidence: verdict.deterministic_evidence,
30
+ attempt: verdict.attempt,
31
+ deterministic_passed: verdict.passed,
32
+ policy_version: verdict.policy_version,
33
+ policy_digest: verdict.policy_digest,
34
+ gate_digest: verdict.gate_digest,
35
+ },
36
+ },
37
+ });
38
+ }
39
+ export function loadTrackedTrustPolicyIdentity(packageRoot = findPackageRoot()) {
40
+ const policy = loadTrackedRolePolicyGate(packageRoot);
41
+ return Object.freeze({
42
+ policy_version: policy.version,
43
+ policy_digest: policy.digest,
44
+ });
45
+ }
46
+ //# sourceMappingURL=runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/trust/runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EACL,mBAAmB,EAInB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AAapC,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,wBAAwB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,UAAU,GAAG,cAAc,CAC/B,WAAW,EACX,OAAO,CAAC,sBAAsB,CAAC,WAAW,EAC1C,OAAO,CAAC,sBAAsB,CAAC,MAAM,CACtC,CAAC;IAEF,OAAO,wBAAwB,CAAC;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,MAAM,EAAE;YACN,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,UAAU;YACvB,aAAa,EAAE,WAAW;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,YAAY;YAC3B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE;gBACP,cAAc,EAAE,CAAC;gBACjB,MAAM,EAAE,UAAU;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;gBACtD,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,oBAAoB,EAAE,OAAO,CAAC,MAAM;gBACpC,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,WAAW,GAAG,eAAe,EAAE;IAC5E,MAAM,MAAM,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC,OAAO;QAC9B,aAAa,EAAE,MAAM,CAAC,MAAM;KAC7B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface CliResult {
2
+ ok: boolean;
3
+ exitCode: number;
4
+ message?: string;
5
+ output?: unknown;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { lstatSync } from "node:fs";
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
3
+ export declare function readJsonFile(path: string): unknown;
4
+ export declare function readJsonFileNoFollow(path: string, maxBytes?: number): unknown;
5
+ export declare function lstatIfExists(path: string): ReturnType<typeof lstatSync> | undefined;
6
+ export declare function validateExistingDirectory(path: string, label: string): string;
7
+ export declare function canonicalizePath(input: string, cwd?: string): string;
8
+ export declare function writeFileAtomic(destination: string, content: string, requestedMode?: number): void;
9
+ export declare function writeFileAtomicNoReplace(destination: string, content: string, requestedMode?: number): void;
10
+ export declare function writeJsonAtomic(destination: string, value: unknown): void;
11
+ export declare function writeJsonAtomicNoReplace(destination: string, value: unknown): void;
12
+ export declare function fsyncDirectory(path: string): void;
13
+ export declare function errorMessage(error: unknown): string;
@@ -0,0 +1,188 @@
1
+ import { chmodSync, closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync, mkdirSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { randomUUID } from "node:crypto";
3
+ import { basename, dirname, resolve } from "node:path";
4
+ export function isRecord(value) {
5
+ return typeof value === "object" && value !== null && !Array.isArray(value);
6
+ }
7
+ export function readJsonFile(path) {
8
+ let raw;
9
+ try {
10
+ raw = readFileSync(path, "utf8");
11
+ }
12
+ catch (error) {
13
+ throw new Error(`unable to read JSON file ${path}: ${errorMessage(error)}`);
14
+ }
15
+ try {
16
+ return JSON.parse(raw);
17
+ }
18
+ catch (error) {
19
+ throw new Error(`invalid JSON in ${path}: ${errorMessage(error)}`);
20
+ }
21
+ }
22
+ export function readJsonFileNoFollow(path, maxBytes) {
23
+ let descriptor;
24
+ try {
25
+ const before = lstatSync(path);
26
+ if (before.isSymbolicLink() || !before.isFile()) {
27
+ throw new Error("path is not a regular file");
28
+ }
29
+ const noFollow = typeof constants.O_NOFOLLOW === "number" ? constants.O_NOFOLLOW : 0;
30
+ descriptor = openSync(path, constants.O_RDONLY | noFollow);
31
+ const opened = fstatSync(descriptor);
32
+ if (!opened.isFile() || opened.dev !== before.dev || opened.ino !== before.ino) {
33
+ throw new Error("path changed while opening");
34
+ }
35
+ if (maxBytes !== undefined && (!Number.isSafeInteger(maxBytes) || maxBytes < 1)) {
36
+ throw new Error("maxBytes must be a positive integer");
37
+ }
38
+ if (maxBytes !== undefined && opened.size > maxBytes)
39
+ throw new Error(`file exceeds ${maxBytes} bytes`);
40
+ const raw = readFileSync(descriptor, "utf8");
41
+ if (maxBytes !== undefined && Buffer.byteLength(raw, "utf8") > maxBytes) {
42
+ throw new Error(`file exceeds ${maxBytes} bytes`);
43
+ }
44
+ closeSync(descriptor);
45
+ descriptor = undefined;
46
+ return JSON.parse(raw);
47
+ }
48
+ catch (error) {
49
+ if (descriptor !== undefined)
50
+ closeSync(descriptor);
51
+ throw new Error(`unable to safely read JSON file ${path}: ${errorMessage(error)}`);
52
+ }
53
+ }
54
+ export function lstatIfExists(path) {
55
+ try {
56
+ return lstatSync(path);
57
+ }
58
+ catch (error) {
59
+ if (isErrorCode(error, "ENOENT"))
60
+ return undefined;
61
+ throw error;
62
+ }
63
+ }
64
+ export function validateExistingDirectory(path, label) {
65
+ const absolute = resolve(path);
66
+ let entry;
67
+ try {
68
+ entry = lstatSync(absolute);
69
+ }
70
+ catch (error) {
71
+ throw new Error(`${label} does not exist: ${absolute}: ${errorMessage(error)}`);
72
+ }
73
+ if (entry.isSymbolicLink())
74
+ throw new Error(`${label} must not be a symbolic link: ${absolute}`);
75
+ if (!entry.isDirectory())
76
+ throw new Error(`${label} is not a directory: ${absolute}`);
77
+ const real = realpathSync.native(absolute);
78
+ const canonical = lstatSync(real);
79
+ if (!canonical.isDirectory() || canonical.dev !== entry.dev || canonical.ino !== entry.ino) {
80
+ throw new Error(`${label} changed while resolving: ${absolute}`);
81
+ }
82
+ return real;
83
+ }
84
+ export function canonicalizePath(input, cwd = process.cwd()) {
85
+ const absolute = resolve(cwd, input);
86
+ let existing = absolute;
87
+ const missingSegments = [];
88
+ while (!existsSync(existing)) {
89
+ const parent = dirname(existing);
90
+ if (parent === existing)
91
+ break;
92
+ missingSegments.unshift(basename(existing));
93
+ existing = parent;
94
+ }
95
+ const canonicalBase = existsSync(existing) ? realpathSync.native(existing) : existing;
96
+ return resolve(canonicalBase, ...missingSegments);
97
+ }
98
+ export function writeFileAtomic(destination, content, requestedMode = 0o600) {
99
+ mkdirSync(dirname(destination), { recursive: true });
100
+ const destinationEntry = lstatIfExists(destination);
101
+ if (destinationEntry?.isSymbolicLink()) {
102
+ throw new Error(`refusing to replace symbolic link: ${destination}`);
103
+ }
104
+ const mode = destinationEntry ? statSync(destination).mode & 0o777 : requestedMode;
105
+ const temporary = `${destination}.tmp.${process.pid}.${randomUUID()}`;
106
+ let descriptor;
107
+ try {
108
+ descriptor = openSync(temporary, "wx", mode);
109
+ writeFileSync(descriptor, content, "utf8");
110
+ fsyncSync(descriptor);
111
+ closeSync(descriptor);
112
+ descriptor = undefined;
113
+ chmodSync(temporary, mode);
114
+ renameSync(temporary, destination);
115
+ fsyncDirectory(dirname(destination));
116
+ }
117
+ catch (error) {
118
+ if (descriptor !== undefined)
119
+ closeSync(descriptor);
120
+ if (lstatIfExists(temporary))
121
+ unlinkSync(temporary);
122
+ throw error;
123
+ }
124
+ }
125
+ export function writeFileAtomicNoReplace(destination, content, requestedMode = 0o600) {
126
+ const parent = validateExistingDirectory(dirname(destination), "destination directory");
127
+ if (parent !== dirname(destination))
128
+ throw new Error(`destination directory is not canonical: ${dirname(destination)}`);
129
+ const temporary = `${destination}.tmp.${process.pid}.${randomUUID()}`;
130
+ let descriptor;
131
+ let linked = false;
132
+ try {
133
+ descriptor = openSync(temporary, "wx", requestedMode);
134
+ writeFileSync(descriptor, content, "utf8");
135
+ fsyncSync(descriptor);
136
+ closeSync(descriptor);
137
+ descriptor = undefined;
138
+ chmodSync(temporary, requestedMode);
139
+ linkSync(temporary, destination);
140
+ linked = true;
141
+ fsyncDirectory(parent);
142
+ unlinkSync(temporary);
143
+ fsyncDirectory(parent);
144
+ }
145
+ catch (error) {
146
+ if (descriptor !== undefined)
147
+ closeSync(descriptor);
148
+ if (lstatIfExists(temporary))
149
+ unlinkSync(temporary);
150
+ if (linked && !lstatIfExists(destination)) {
151
+ throw new Error(`atomic no-replace destination disappeared: ${destination}`);
152
+ }
153
+ throw error;
154
+ }
155
+ }
156
+ export function writeJsonAtomic(destination, value) {
157
+ writeFileAtomic(destination, `${JSON.stringify(value, null, 2)}\n`, 0o600);
158
+ }
159
+ export function writeJsonAtomicNoReplace(destination, value) {
160
+ writeFileAtomicNoReplace(destination, `${JSON.stringify(value, null, 2)}\n`, 0o600);
161
+ }
162
+ export function fsyncDirectory(path) {
163
+ let descriptor;
164
+ try {
165
+ descriptor = openSync(path, constants.O_RDONLY);
166
+ fsyncSync(descriptor);
167
+ }
168
+ catch (error) {
169
+ if (!isUnsupportedDirectorySync(error))
170
+ throw error;
171
+ }
172
+ finally {
173
+ if (descriptor !== undefined)
174
+ closeSync(descriptor);
175
+ }
176
+ }
177
+ export function errorMessage(error) {
178
+ return error instanceof Error ? error.message : String(error);
179
+ }
180
+ function isErrorCode(error, code) {
181
+ return typeof error === "object" && error !== null && "code" in error && error.code === code;
182
+ }
183
+ function isUnsupportedDirectorySync(error) {
184
+ if (typeof error !== "object" || error === null || !("code" in error))
185
+ return false;
186
+ return ["EINVAL", "ENOTSUP", "EISDIR", "EBADF", "EPERM"].includes(String(error.code));
187
+ }
188
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type EvidenceRecord, type EvidenceReference, type EvidenceStore, type EvidenceWriteResult } from "../evidence/store.js";
2
+ import { type ProtectedVerificationBinding, type WorktreeVerificationProof } from "./protected-runner.js";
3
+ import { type ProtectedGradeSource } from "./grade-source.js";
4
+ import type { VerificationResult } from "./runner.js";
5
+ declare const PROTECTED_VERIFICATION_AUTHORITY: unique symbol;
6
+ export interface ProtectedVerificationOutcome {
7
+ readonly status: "created" | "replayed";
8
+ readonly ref: EvidenceReference;
9
+ readonly record: EvidenceRecord;
10
+ readonly verification: VerificationResult;
11
+ readonly preflight: WorktreeVerificationProof;
12
+ readonly postflight: WorktreeVerificationProof;
13
+ }
14
+ export interface ProtectedVerificationAuthority {
15
+ readonly [PROTECTED_VERIFICATION_AUTHORITY]: true;
16
+ readonly policyVersion: number;
17
+ readonly policyDigest: string;
18
+ readonly planDigest: string;
19
+ verify(subject: ProtectedVerificationBinding): ProtectedVerificationOutcome;
20
+ writeGrade(record: EvidenceRecord, source: ProtectedGradeSource): EvidenceWriteResult;
21
+ }
22
+ export declare function createProtectedVerificationAuthority(options: {
23
+ packageRoot: string;
24
+ configRoot: string;
25
+ evidenceStore: EvidenceStore;
26
+ }): ProtectedVerificationAuthority;
27
+ export declare function assertProtectedVerificationAuthority(value: unknown): asserts value is ProtectedVerificationAuthority;
28
+ export {};
@@ -0,0 +1,153 @@
1
+ import { assertTrackedRolePolicyGate, loadTrackedRolePolicyGate, } from "../domain/role-policy.js";
2
+ import { assertEvidenceStore, createProtectedResultGateEvidenceWriter, } from "../evidence/store.js";
3
+ import { createStableId } from "../runtime/stable-id.js";
4
+ import { validateExistingDirectory } from "../utils/fs.js";
5
+ import { freezeTrackedVerificationPlan } from "./plan.js";
6
+ import { captureProtectedVerificationBinding, probeProtectedVerificationWorktree, runProtectedVerification, } from "./protected-runner.js";
7
+ import { captureProtectedGradeSource, } from "./grade-source.js";
8
+ const PROTECTED_VERIFICATION_AUTHORITY = Symbol("OMS protected verification authority");
9
+ const PROTECTED_VERIFICATION_AUTHORITIES = new WeakSet();
10
+ export function createProtectedVerificationAuthority(options) {
11
+ const packageRoot = validateExistingDirectory(options.packageRoot, "installed OMS package root");
12
+ const configRoot = validateExistingDirectory(options.configRoot, "protected verification config root");
13
+ const evidenceStore = options.evidenceStore;
14
+ assertEvidenceStore(evidenceStore);
15
+ const policy = loadTrackedRolePolicyGate(configRoot);
16
+ const plan = freezeTrackedVerificationPlan(configRoot);
17
+ const writer = createProtectedResultGateEvidenceWriter(evidenceStore);
18
+ const authority = Object.freeze({
19
+ [PROTECTED_VERIFICATION_AUTHORITY]: true,
20
+ policyVersion: policy.version,
21
+ policyDigest: policy.digest,
22
+ planDigest: plan.digest,
23
+ verify(subject) {
24
+ assertCurrentProtection(configRoot, policy, plan.digest);
25
+ const binding = captureProtectedVerificationBinding(subject);
26
+ validateExecutorEvidence(evidenceStore, binding);
27
+ const evidenceId = createStableId("det-check", binding.goal_id, String(binding.goal_version), binding.dispatch_id, String(binding.dispatch_version), String(binding.attempt), binding.lease_token, binding.worker_record_id, binding.expected_commit);
28
+ const existing = evidenceStore.references("deterministic-check")
29
+ .find((reference) => reference.evidence_id === evidenceId);
30
+ if (existing) {
31
+ probeProtectedVerificationWorktree(binding);
32
+ const record = evidenceStore.read(existing);
33
+ validateReplay(record, binding, policy.version, policy.digest, plan.digest);
34
+ return outcomeFromRecord("replayed", existing, record);
35
+ }
36
+ const run = runProtectedVerification({
37
+ packageRoot,
38
+ frozenPlan: plan,
39
+ policyVersion: policy.version,
40
+ policyDigest: policy.digest,
41
+ binding,
42
+ });
43
+ const written = writer.writeDeterministic({
44
+ evidenceId,
45
+ createdAt: new Date().toISOString(),
46
+ run,
47
+ });
48
+ return {
49
+ status: written.status,
50
+ ref: written.ref,
51
+ record: written.record,
52
+ verification: run.verification,
53
+ preflight: run.preflight,
54
+ postflight: run.postflight,
55
+ };
56
+ },
57
+ writeGrade(record, source) {
58
+ assertCurrentProtection(configRoot, policy, plan.digest);
59
+ const deterministic = evidenceStore.read(record.payload.deterministic_evidence);
60
+ if (deterministic.evidence_kind !== "deterministic-check"
61
+ || deterministic.payload.certification !== "live"
62
+ || deterministic.payload.policy_version !== policy.version
63
+ || deterministic.payload.policy_digest !== policy.digest
64
+ || deterministic.payload.plan_digest !== plan.digest) {
65
+ throw new Error("protected grade does not reference this authority's live deterministic check");
66
+ }
67
+ for (const reserved of ["provider_request_id", "grader_engine", "fresh_session_id"]) {
68
+ if (reserved in record.payload)
69
+ throw new Error(`grader output contains reserved provider field: ${reserved}`);
70
+ }
71
+ const identity = captureProtectedGradeSource(source);
72
+ const executorEngine = deterministic.payload.binding.executor_engine;
73
+ const expectedRole = executorEngine === "claude" ? "oms.grader.codex" : "oms.grader.claude";
74
+ const expectedRequestId = createStableId("grade-request", record.payload.deterministic_evidence.evidence_id, record.payload.deterministic_evidence.sha256);
75
+ if (identity.role_id !== expectedRole
76
+ || record.producer_role !== expectedRole
77
+ || identity.request_id !== expectedRequestId)
78
+ throw new Error("protected grade does not match the gate's exact opposite-engine request");
79
+ const protectedRecord = {
80
+ ...record,
81
+ payload: {
82
+ ...record.payload,
83
+ provider_request_id: identity.request_id,
84
+ grader_engine: identity.engine,
85
+ fresh_session_id: identity.fresh_session_id,
86
+ },
87
+ };
88
+ return writer.writeGrade(protectedRecord, source);
89
+ },
90
+ });
91
+ PROTECTED_VERIFICATION_AUTHORITIES.add(authority);
92
+ return authority;
93
+ }
94
+ export function assertProtectedVerificationAuthority(value) {
95
+ if (typeof value !== "object" || value === null || !PROTECTED_VERIFICATION_AUTHORITIES.has(value)) {
96
+ throw new Error("verification requires a real OMS protected authority");
97
+ }
98
+ if (!Object.isFrozen(value))
99
+ throw new Error("protected verification authority lost its frozen boundary");
100
+ }
101
+ function assertCurrentProtection(configRoot, policy, planDigest) {
102
+ assertTrackedRolePolicyGate(policy, configRoot);
103
+ if (freezeTrackedVerificationPlan(configRoot).digest !== planDigest) {
104
+ throw new Error("protected verification plan changed after authority creation");
105
+ }
106
+ }
107
+ function validateExecutorEvidence(store, binding) {
108
+ const record = store.read(binding.executor_evidence);
109
+ const expectedKind = binding.executor_role === "oms.ticket-executor" ? "executor-result" : "goal-executor-result";
110
+ if (record.evidence_kind !== expectedKind
111
+ || record.producer_role !== binding.executor_role
112
+ || record.ticket_id !== binding.ticket_id
113
+ || record.payload.attempt !== binding.attempt
114
+ || record.payload.lease_token !== binding.lease_token) {
115
+ throw new Error("executor evidence does not match the protected verification binding");
116
+ }
117
+ if (binding.executor_role === "oms.ticket-executor") {
118
+ if (record.payload.status !== "done" || record.payload.ticket_id !== binding.ticket_id) {
119
+ throw new Error("ticket executor did not produce a completed result");
120
+ }
121
+ }
122
+ else if (record.payload.status !== "complete" || record.payload.goal_id !== binding.goal_id) {
123
+ throw new Error("goal executor did not produce a completed result");
124
+ }
125
+ }
126
+ function validateReplay(record, binding, policyVersion, policyDigest, planDigest) {
127
+ if (record.evidence_kind !== "deterministic-check"
128
+ || record.ticket_id !== binding.ticket_id
129
+ || record.payload.certification !== "live"
130
+ || record.payload.policy_version !== policyVersion
131
+ || record.payload.policy_digest !== policyDigest
132
+ || record.payload.plan_digest !== planDigest
133
+ || JSON.stringify(record.payload.binding) !== JSON.stringify(binding)) {
134
+ throw new Error("stored protected verification evidence does not match this run");
135
+ }
136
+ }
137
+ function outcomeFromRecord(status, ref, record) {
138
+ return {
139
+ status,
140
+ ref,
141
+ record,
142
+ verification: {
143
+ schema_version: 1,
144
+ plan_digest: record.payload.plan_digest,
145
+ passed: record.payload.passed,
146
+ failed_step: record.payload.failed_step,
147
+ steps: structuredClone(record.payload.steps),
148
+ },
149
+ preflight: structuredClone(record.payload.preflight),
150
+ postflight: structuredClone(record.payload.postflight),
151
+ };
152
+ }
153
+ //# sourceMappingURL=authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authority.js","sourceRoot":"","sources":["../../../src/verification/authority.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ClaudeStructuredResult } from "../providers/claude-structured-store.js";
2
+ import { type CodexStructuredResult } from "../providers/codex-exec.js";
3
+ export type ProtectedGradeSource = Readonly<{
4
+ engine: "codex";
5
+ result: CodexStructuredResult<Record<string, unknown>>;
6
+ }> | Readonly<{
7
+ engine: "claude";
8
+ result: ClaudeStructuredResult;
9
+ }>;
10
+ export interface ProtectedGradeSourceIdentity {
11
+ readonly engine: "codex" | "claude";
12
+ readonly role_id: "oms.grader.codex" | "oms.grader.claude";
13
+ readonly request_id: string;
14
+ readonly fresh_session_id: string;
15
+ readonly output: Readonly<Record<string, unknown>>;
16
+ }
17
+ export declare function captureProtectedGradeSource(source: ProtectedGradeSource): ProtectedGradeSourceIdentity;