codex-orchestrator 2.0.11 → 2.0.13

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 (262) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +25 -51
  3. package/dist/src/index.d.ts +2 -8
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +1 -4
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/v2/acceptance-proof.d.ts +46 -31
  8. package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
  9. package/dist/src/v2/acceptance-proof.js +157 -195
  10. package/dist/src/v2/acceptance-proof.js.map +1 -1
  11. package/dist/src/v2/active-attempt.d.ts +94 -0
  12. package/dist/src/v2/active-attempt.d.ts.map +1 -0
  13. package/dist/src/v2/active-attempt.js +200 -0
  14. package/dist/src/v2/active-attempt.js.map +1 -0
  15. package/dist/src/v2/adapters/command.d.ts +6 -0
  16. package/dist/src/v2/adapters/command.d.ts.map +1 -1
  17. package/dist/src/v2/adapters/command.js +43 -2
  18. package/dist/src/v2/adapters/command.js.map +1 -1
  19. package/dist/src/v2/candidate.d.ts +15 -31
  20. package/dist/src/v2/candidate.d.ts.map +1 -1
  21. package/dist/src/v2/candidate.js +7 -29
  22. package/dist/src/v2/candidate.js.map +1 -1
  23. package/dist/src/v2/checked-change.d.ts +3 -2
  24. package/dist/src/v2/checked-change.d.ts.map +1 -1
  25. package/dist/src/v2/checked-change.js +4 -3
  26. package/dist/src/v2/checked-change.js.map +1 -1
  27. package/dist/src/v2/cli-contract.d.ts +1 -1
  28. package/dist/src/v2/cli-contract.d.ts.map +1 -1
  29. package/dist/src/v2/cli-contract.js +4 -6
  30. package/dist/src/v2/cli-contract.js.map +1 -1
  31. package/dist/src/v2/cli.d.ts +8 -0
  32. package/dist/src/v2/cli.d.ts.map +1 -1
  33. package/dist/src/v2/cli.js +13 -0
  34. package/dist/src/v2/cli.js.map +1 -1
  35. package/dist/src/v2/code-review-report.d.ts +10 -18
  36. package/dist/src/v2/code-review-report.d.ts.map +1 -1
  37. package/dist/src/v2/code-review-report.js +63 -60
  38. package/dist/src/v2/code-review-report.js.map +1 -1
  39. package/dist/src/v2/codex-process.d.ts +6 -2
  40. package/dist/src/v2/codex-process.d.ts.map +1 -1
  41. package/dist/src/v2/codex-process.js +25 -9
  42. package/dist/src/v2/codex-process.js.map +1 -1
  43. package/dist/src/v2/config.d.ts +0 -2
  44. package/dist/src/v2/config.d.ts.map +1 -1
  45. package/dist/src/v2/config.js +3 -6
  46. package/dist/src/v2/config.js.map +1 -1
  47. package/dist/src/v2/contained-report-operation.d.ts +41 -196
  48. package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
  49. package/dist/src/v2/contained-report-operation.js +139 -466
  50. package/dist/src/v2/contained-report-operation.js.map +1 -1
  51. package/dist/src/v2/containment.d.ts +1 -0
  52. package/dist/src/v2/containment.d.ts.map +1 -1
  53. package/dist/src/v2/containment.js +12 -2
  54. package/dist/src/v2/containment.js.map +1 -1
  55. package/dist/src/v2/delivery-authority.d.ts +26 -0
  56. package/dist/src/v2/delivery-authority.d.ts.map +1 -0
  57. package/dist/src/v2/delivery-authority.js +44 -0
  58. package/dist/src/v2/delivery-authority.js.map +1 -0
  59. package/dist/src/v2/direct-delivery.d.ts +16 -36
  60. package/dist/src/v2/direct-delivery.d.ts.map +1 -1
  61. package/dist/src/v2/direct-delivery.js +135 -122
  62. package/dist/src/v2/direct-delivery.js.map +1 -1
  63. package/dist/src/v2/immutable-workflow-publisher.d.ts.map +1 -1
  64. package/dist/src/v2/immutable-workflow-publisher.js +3 -1
  65. package/dist/src/v2/immutable-workflow-publisher.js.map +1 -1
  66. package/dist/src/v2/implementation-report.d.ts +3 -1
  67. package/dist/src/v2/implementation-report.d.ts.map +1 -1
  68. package/dist/src/v2/implementation-report.js +28 -10
  69. package/dist/src/v2/implementation-report.js.map +1 -1
  70. package/dist/src/v2/implementation-reviewer.d.ts +41 -12
  71. package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
  72. package/dist/src/v2/implementation-reviewer.js +114 -42
  73. package/dist/src/v2/implementation-reviewer.js.map +1 -1
  74. package/dist/src/v2/pending-effect-settlement.d.ts +44 -0
  75. package/dist/src/v2/pending-effect-settlement.d.ts.map +1 -0
  76. package/dist/src/v2/pending-effect-settlement.js +69 -0
  77. package/dist/src/v2/pending-effect-settlement.js.map +1 -0
  78. package/dist/src/v2/process-identity.d.ts +45 -0
  79. package/dist/src/v2/process-identity.d.ts.map +1 -0
  80. package/dist/src/v2/process-identity.js +118 -0
  81. package/dist/src/v2/process-identity.js.map +1 -0
  82. package/dist/src/v2/proof-report.d.ts +2 -1
  83. package/dist/src/v2/proof-report.d.ts.map +1 -1
  84. package/dist/src/v2/proof-report.js +10 -4
  85. package/dist/src/v2/proof-report.js.map +1 -1
  86. package/dist/src/v2/review-feedback-coordinator.d.ts +1 -1
  87. package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
  88. package/dist/src/v2/review-feedback-coordinator.js +1 -1
  89. package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
  90. package/dist/src/v2/review-feedback.d.ts +14 -20
  91. package/dist/src/v2/review-feedback.d.ts.map +1 -1
  92. package/dist/src/v2/review-feedback.js +45 -87
  93. package/dist/src/v2/review-feedback.js.map +1 -1
  94. package/dist/src/v2/run-issue.d.ts +129 -88
  95. package/dist/src/v2/run-issue.d.ts.map +1 -1
  96. package/dist/src/v2/run-issue.js +1965 -2381
  97. package/dist/src/v2/run-issue.js.map +1 -1
  98. package/dist/src/v2/run-state-projections.d.ts +84 -0
  99. package/dist/src/v2/run-state-projections.d.ts.map +1 -0
  100. package/dist/src/v2/run-state-projections.js +142 -0
  101. package/dist/src/v2/run-state-projections.js.map +1 -0
  102. package/dist/src/v2/run-store.d.ts +99 -81
  103. package/dist/src/v2/run-store.d.ts.map +1 -1
  104. package/dist/src/v2/run-store.js +245 -542
  105. package/dist/src/v2/run-store.js.map +1 -1
  106. package/dist/src/v2/runtime-assets.d.ts +3 -0
  107. package/dist/src/v2/runtime-assets.d.ts.map +1 -1
  108. package/dist/src/v2/runtime-assets.js +104 -0
  109. package/dist/src/v2/runtime-assets.js.map +1 -1
  110. package/dist/src/v2/runtime.d.ts +56 -44
  111. package/dist/src/v2/runtime.d.ts.map +1 -1
  112. package/dist/src/v2/runtime.js +383 -503
  113. package/dist/src/v2/runtime.js.map +1 -1
  114. package/dist/src/v2/setup.js +0 -2
  115. package/dist/src/v2/setup.js.map +1 -1
  116. package/dist/src/v2/validation-progression.d.ts +70 -0
  117. package/dist/src/v2/validation-progression.d.ts.map +1 -0
  118. package/dist/src/v2/validation-progression.js +247 -0
  119. package/dist/src/v2/validation-progression.js.map +1 -0
  120. package/dist/src/v2/workflow-assets.d.ts +9 -3
  121. package/dist/src/v2/workflow-assets.d.ts.map +1 -1
  122. package/dist/src/v2/workflow-assets.js +256 -43
  123. package/dist/src/v2/workflow-assets.js.map +1 -1
  124. package/internal-workflow/docs/agents/bug-workflow-routing.md +9 -7
  125. package/internal-workflow/docs/agents/coding-skill-routing.md +170 -120
  126. package/internal-workflow/docs/agents/tool-usage.md +23 -12
  127. package/internal-workflow/manifest.json +1 -1
  128. package/internal-workflow/operations/code-review/SKILL.md +34 -15
  129. package/internal-workflow/operations/implementation/SKILL.md +21 -16
  130. package/internal-workflow/profiles/implementer.toml +9 -0
  131. package/internal-workflow/profiles/review_coordinator.toml +9 -0
  132. package/internal-workflow/profiles/spec_reviewer.toml +9 -0
  133. package/internal-workflow/profiles/standards_reviewer.toml +9 -0
  134. package/internal-workflow/schemas/code-review-v1.json +1 -1
  135. package/internal-workflow/schemas/implementation-report-v1.json +1 -1
  136. package/internal-workflow/schemas/proof-report-v1.json +1 -1
  137. package/internal-workflow/skills/bug-root-cause-explainer/SKILL.md +114 -0
  138. package/internal-workflow/skills/bug-root-cause-explainer/agents/openai.yaml +7 -0
  139. package/internal-workflow/skills/bug-root-cause-explainer/evals/evals.json +18 -0
  140. package/internal-workflow/skills/code-review/SKILL.md +84 -306
  141. package/internal-workflow/skills/code-review/agents/openai.yaml +5 -3
  142. package/internal-workflow/skills/code-review/evals/evals.json +83 -0
  143. package/internal-workflow/skills/code-review/references/standards-smells.md +41 -0
  144. package/internal-workflow/skills/diagnosing-bugs/SKILL.md +69 -32
  145. package/internal-workflow/skills/diagnosing-bugs/agents/openai.yaml +2 -2
  146. package/internal-workflow/skills/diagnosing-bugs/evals/evals.json +63 -0
  147. package/internal-workflow/skills/grilling/SKILL.md +51 -0
  148. package/internal-workflow/skills/grilling/agents/openai.yaml +6 -0
  149. package/internal-workflow/skills/grilling/evals/evals.json +47 -0
  150. package/internal-workflow/skills/implement/SKILL.md +135 -0
  151. package/internal-workflow/skills/implement/agents/openai.yaml +6 -0
  152. package/internal-workflow/skills/implement/evals/evals.json +150 -0
  153. package/internal-workflow/skills/plan/SKILL.md +59 -0
  154. package/internal-workflow/skills/plan/agents/openai.yaml +6 -0
  155. package/internal-workflow/skills/plan/evals/evals.json +36 -0
  156. package/internal-workflow/skills/prototype/LOGIC.md +130 -0
  157. package/internal-workflow/skills/prototype/SKILL.md +69 -0
  158. package/internal-workflow/skills/prototype/UI.md +157 -0
  159. package/internal-workflow/skills/prototype/agents/openai.yaml +6 -0
  160. package/internal-workflow/skills/prototype/evals/evals.json +67 -0
  161. package/internal-workflow/skills/research/SKILL.md +110 -0
  162. package/internal-workflow/skills/research/agents/openai.yaml +6 -0
  163. package/internal-workflow/skills/research/evals/evals.json +49 -0
  164. package/internal-workflow/skills/tdd/SKILL.md +72 -67
  165. package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
  166. package/internal-workflow/skills/tdd/evals/evals.json +12 -0
  167. package/internal-workflow/skills/tdd/mocking.md +48 -1
  168. package/internal-workflow/skills/tdd/refactoring.md +3 -3
  169. package/internal-workflow/skills/tickets-orchestrator/SKILL.md +199 -0
  170. package/internal-workflow/skills/tickets-orchestrator/agents/openai.yaml +6 -0
  171. package/internal-workflow/skills/tickets-orchestrator/evals/evals.json +126 -0
  172. package/internal-workflow/skills/tickets-orchestrator/references/delegate-integrate.md +83 -0
  173. package/internal-workflow/skills/tickets-orchestrator/references/finish-delivery.md +69 -0
  174. package/internal-workflow/skills/tickets-orchestrator/references/stop-completion.md +63 -0
  175. package/internal-workflow/skills/to-spec/SKILL.md +133 -0
  176. package/internal-workflow/skills/to-spec/agents/openai.yaml +6 -0
  177. package/internal-workflow/skills/to-spec/evals/evals.json +24 -0
  178. package/internal-workflow/skills/to-tickets/SKILL.md +189 -0
  179. package/internal-workflow/skills/to-tickets/agents/openai.yaml +6 -0
  180. package/internal-workflow/skills/to-tickets/evals/evals.json +79 -0
  181. package/internal-workflow/skills/to-tickets/references/publishing-details.md +117 -0
  182. package/package.json +1 -1
  183. package/dist/src/v2/proof-store.d.ts +0 -54
  184. package/dist/src/v2/proof-store.d.ts.map +0 -1
  185. package/dist/src/v2/proof-store.js +0 -301
  186. package/dist/src/v2/proof-store.js.map +0 -1
  187. package/dist/src/v2/route-continuations.d.ts +0 -32
  188. package/dist/src/v2/route-continuations.d.ts.map +0 -1
  189. package/dist/src/v2/route-continuations.js +0 -2
  190. package/dist/src/v2/route-continuations.js.map +0 -1
  191. package/dist/src/v2/route-coordinator.d.ts +0 -72
  192. package/dist/src/v2/route-coordinator.d.ts.map +0 -1
  193. package/dist/src/v2/route-coordinator.js +0 -275
  194. package/dist/src/v2/route-coordinator.js.map +0 -1
  195. package/dist/src/v2/route-decision.d.ts +0 -120
  196. package/dist/src/v2/route-decision.d.ts.map +0 -1
  197. package/dist/src/v2/route-decision.js +0 -380
  198. package/dist/src/v2/route-decision.js.map +0 -1
  199. package/dist/src/v2/spec-coordinator.d.ts +0 -73
  200. package/dist/src/v2/spec-coordinator.d.ts.map +0 -1
  201. package/dist/src/v2/spec-coordinator.js +0 -126
  202. package/dist/src/v2/spec-coordinator.js.map +0 -1
  203. package/dist/src/v2/spec-delivery.d.ts +0 -112
  204. package/dist/src/v2/spec-delivery.d.ts.map +0 -1
  205. package/dist/src/v2/spec-delivery.js +0 -336
  206. package/dist/src/v2/spec-delivery.js.map +0 -1
  207. package/dist/src/v2/triage-route.d.ts +0 -68
  208. package/dist/src/v2/triage-route.d.ts.map +0 -1
  209. package/dist/src/v2/triage-route.js +0 -223
  210. package/dist/src/v2/triage-route.js.map +0 -1
  211. package/dist/src/v2/waiting-human-coordinator.d.ts +0 -49
  212. package/dist/src/v2/waiting-human-coordinator.d.ts.map +0 -1
  213. package/dist/src/v2/waiting-human-coordinator.js +0 -509
  214. package/dist/src/v2/waiting-human-coordinator.js.map +0 -1
  215. package/dist/src/v2/waiting-human.d.ts +0 -143
  216. package/dist/src/v2/waiting-human.d.ts.map +0 -1
  217. package/dist/src/v2/waiting-human.js +0 -408
  218. package/dist/src/v2/waiting-human.js.map +0 -1
  219. package/internal-workflow/docs/agents/contract-test-ledger.md +0 -71
  220. package/internal-workflow/docs/agents/review-gates.md +0 -42
  221. package/internal-workflow/docs/agents/review-protocol.md +0 -98
  222. package/internal-workflow/evals/coding-skill-evals.json +0 -373
  223. package/internal-workflow/operations/ambiguity-review/SKILL.md +0 -5
  224. package/internal-workflow/operations/qualification-repair/SKILL.md +0 -17
  225. package/internal-workflow/operations/spec-author/SKILL.md +0 -12
  226. package/internal-workflow/operations/spec-review/SKILL.md +0 -12
  227. package/internal-workflow/operations/triage/SKILL.md +0 -12
  228. package/internal-workflow/profiles/analyst_deep.toml +0 -9
  229. package/internal-workflow/profiles/implementer_standard.toml +0 -9
  230. package/internal-workflow/profiles/proof_agent.toml +0 -8
  231. package/internal-workflow/profiles/reviewer_deep.toml +0 -9
  232. package/internal-workflow/profiles/reviewer_standard.toml +0 -9
  233. package/internal-workflow/schemas/ambiguity-review-v1.json +0 -1
  234. package/internal-workflow/schemas/spec-author-v1.json +0 -1
  235. package/internal-workflow/schemas/spec-review-v1.json +0 -30
  236. package/internal-workflow/schemas/triage-route-v1.json +0 -1
  237. package/internal-workflow/skills/agent-auto/SKILL.md +0 -19
  238. package/internal-workflow/skills/agent-auto/agents/openai.yaml +0 -6
  239. package/internal-workflow/skills/code-debugger/SKILL.md +0 -122
  240. package/internal-workflow/skills/code-debugger/agents/openai.yaml +0 -7
  241. package/internal-workflow/skills/code-review/references/bug-classes.md +0 -56
  242. package/internal-workflow/skills/code-review/references/cleanup-lens.md +0 -52
  243. package/internal-workflow/skills/code-review/references/framework-lenses.md +0 -34
  244. package/internal-workflow/skills/code-review/references/targeted-recipes.md +0 -49
  245. package/internal-workflow/skills/implementation-spec-maker/SKILL.md +0 -107
  246. package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +0 -6
  247. package/internal-workflow/skills/implementation-spec-maker/references/source-modes.md +0 -32
  248. package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +0 -146
  249. package/internal-workflow/skills/implementation-spec-review/SKILL.md +0 -131
  250. package/internal-workflow/skills/implementation-spec-review/agents/openai.yaml +0 -6
  251. package/internal-workflow/skills/implementation-spec-review/evals/evals.json +0 -78
  252. package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +0 -121
  253. package/internal-workflow/skills/small-task-implementer/SKILL.md +0 -112
  254. package/internal-workflow/skills/small-task-implementer/agents/openai.yaml +0 -6
  255. package/internal-workflow/skills/spec-implementer/SKILL.md +0 -133
  256. package/internal-workflow/skills/spec-implementer/agents/openai.yaml +0 -6
  257. package/internal-workflow/skills/spec-implementer/evals/evals.json +0 -30
  258. package/internal-workflow/skills/spec-implementer/references/review-loop.md +0 -100
  259. package/internal-workflow/skills/triage/AGENT-BRIEF.md +0 -192
  260. package/internal-workflow/skills/triage/OUT-OF-SCOPE.md +0 -101
  261. package/internal-workflow/skills/triage/SKILL.md +0 -134
  262. package/internal-workflow/skills/triage/agents/openai.yaml +0 -6
@@ -1,380 +0,0 @@
1
- import { canonicalJson, sha256 } from './containment.js';
2
- import { validateTriageRoute } from './triage-route.js';
3
- const SHA256_PATTERN = /^[0-9a-f]{64}$/;
4
- const MAX_STRING_LENGTH = 16 * 1024;
5
- const MAX_ARRAY_LENGTH = 256;
6
- const TRIAGE_ARTIFACT_DOMAIN = 'codex-orchestrator-triage-artifact-v1';
7
- const AMBIGUITY_REVIEW_DOMAIN = 'codex-orchestrator-ambiguity-review-v1';
8
- const ROUTE_DECISION_DOMAIN = 'codex-orchestrator-route-decision-v1';
9
- export function hashTriageArtifact(value) {
10
- return hashDomain(TRIAGE_ARTIFACT_DOMAIN, validateTriageRoute(value));
11
- }
12
- export function hashAmbiguityReviewArtifact(value) {
13
- return hashDomain(AMBIGUITY_REVIEW_DOMAIN, validateAmbiguityReviewArtifact(value));
14
- }
15
- export function hashRouteDecision(value) {
16
- const receipt = validateRouteReceiptCore(value, undefined, false);
17
- return hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
18
- }
19
- export function validateAmbiguityReviewArtifact(value) {
20
- assertExactObject(value, [
21
- 'version', 'candidateSha256', 'verdict', 'evidenceReviewed', 'findings', 'recommendation',
22
- ], 'ambiguity review artifact');
23
- if (value.version !== 1)
24
- throw new Error('ambiguity review artifact.version must be 1');
25
- assertSha256(value.candidateSha256, 'ambiguity review artifact.candidateSha256');
26
- if (!['approved', 'rejected', 'blocked'].includes(value.verdict)) {
27
- throw new Error('ambiguity review artifact.verdict is invalid');
28
- }
29
- assertStringArray(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed', 0);
30
- assertUnique(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed');
31
- assertStringArray(value.findings, 'ambiguity review artifact.findings', 0);
32
- assertUnique(value.findings, 'ambiguity review artifact.findings');
33
- assertString(value.recommendation, 'ambiguity review artifact.recommendation');
34
- return value;
35
- }
36
- export function validateRouteArtifactRef(value, expectedGenerationHash) {
37
- assertExactObject(value, ['operation', 'attemptId', 'artifactSha256', 'generationHash'], 'route triage ref');
38
- if (value.operation !== 'triage')
39
- throw new Error('route triage ref.operation must be triage');
40
- assertString(value.attemptId, 'route triage ref.attemptId');
41
- assertSha256(value.artifactSha256, 'route triage ref.artifactSha256');
42
- assertGeneration(value.generationHash, expectedGenerationHash, 'route triage ref.generationHash');
43
- return value;
44
- }
45
- export function validateAmbiguityReviewRef(value, expectedGenerationHash) {
46
- assertExactObject(value, [
47
- 'operation', 'attemptId', 'candidateSha256', 'artifactSha256', 'verdict', 'generationHash',
48
- ], 'ambiguity review ref');
49
- if (value.operation !== 'ambiguity-review')
50
- throw new Error('ambiguity review ref.operation must be ambiguity-review');
51
- assertString(value.attemptId, 'ambiguity review ref.attemptId');
52
- assertSha256(value.candidateSha256, 'ambiguity review ref.candidateSha256');
53
- assertSha256(value.artifactSha256, 'ambiguity review ref.artifactSha256');
54
- if (value.verdict !== 'approved' && value.verdict !== 'rejected')
55
- throw new Error('ambiguity review ref.verdict is invalid');
56
- assertGeneration(value.generationHash, expectedGenerationHash, 'ambiguity review ref.generationHash');
57
- return value;
58
- }
59
- export function validateRouteReceipt(value, expectedGenerationHash) {
60
- return validateRouteReceiptCore(value, expectedGenerationHash, true);
61
- }
62
- function validateRouteReceiptCore(value, expectedGenerationHash, verifyDecisionHash) {
63
- assertExactObject(value, [
64
- 'version', 'route', 'triage', 'review', 'artifact', 'decisionSha256', 'decidedAt', 'assumptions',
65
- ], 'route receipt');
66
- if (value.version !== 1)
67
- throw new Error('route receipt.version must be 1');
68
- if (!['direct', 'spec-required', 'awaiting-user'].includes(value.route)) {
69
- throw new Error('route receipt.route is invalid');
70
- }
71
- const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
72
- const artifact = validateTriageRoute(value.artifact);
73
- if (artifact.status === 'blocked' || artifact.status !== value.route) {
74
- throw new Error('route receipt.route does not match artifact status');
75
- }
76
- const artifactSha256 = hashTriageArtifact(artifact);
77
- if (triage.artifactSha256 !== artifactSha256)
78
- throw new Error('route receipt artifact hash mismatch');
79
- let review;
80
- if (value.review === null) {
81
- review = null;
82
- }
83
- else {
84
- review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
85
- if (review.generationHash !== triage.generationHash)
86
- throw new Error('route receipt review generation mismatch');
87
- }
88
- if (value.route === 'awaiting-user') {
89
- if (review === null || review.verdict !== 'approved')
90
- throw new Error('awaiting-user route requires an approved review');
91
- if (review.candidateSha256 !== triage.artifactSha256)
92
- throw new Error('awaiting-user review candidate hash mismatch');
93
- if (review.attemptId === triage.attemptId)
94
- throw new Error('triage and ambiguity review attempt IDs must be distinct');
95
- }
96
- else if (review !== null) {
97
- throw new Error(`${String(value.route)} route requires review null`);
98
- }
99
- if (verifyDecisionHash || value.decisionSha256 !== '') {
100
- assertSha256(value.decisionSha256, 'route receipt.decisionSha256');
101
- }
102
- assertTimestamp(value.decidedAt, 'route receipt.decidedAt');
103
- assertStringArray(value.assumptions, 'route receipt.assumptions', 0);
104
- assertUnique(value.assumptions, 'route receipt.assumptions');
105
- if (canonicalJson(value.assumptions) !== canonicalJson(artifact.assumptions)) {
106
- throw new Error('route receipt assumptions must equal artifact assumptions');
107
- }
108
- const receipt = value;
109
- const expectedDecisionSha256 = hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
110
- if (verifyDecisionHash && value.decisionSha256 !== expectedDecisionSha256) {
111
- throw new Error('route receipt decision hash mismatch');
112
- }
113
- return receipt;
114
- }
115
- export function validateRouteExecution(value, expectedGenerationHash) {
116
- assertRecord(value, 'route execution');
117
- validateBudgets(value);
118
- const budgetKeys = [
119
- 'version', 'triageRepairs', 'candidateReviews',
120
- ];
121
- if (value.phase === 'triage-ready') {
122
- assertExactObject(value, [...budgetKeys, 'phase'], 'route execution');
123
- }
124
- else if (value.phase === 'triage-in-flight') {
125
- assertExactObject(value, [...budgetKeys, 'phase'], 'route execution');
126
- }
127
- else if (value.phase === 'candidate-ready') {
128
- assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage'], 'route execution');
129
- validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
130
- if (value.candidateReviews !== 0)
131
- throw new Error('candidate-ready candidateReviews must be 0');
132
- }
133
- else if (value.phase === 'review-in-flight') {
134
- assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage'], 'route execution');
135
- const triage = validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
136
- if (value.candidateReviews !== 0)
137
- throw new Error('review-in-flight candidateReviews must be 0');
138
- }
139
- else if (value.phase === 'malformed-repair-ready') {
140
- assertExactObject(value, [...budgetKeys, 'phase', 'findings'], 'route execution');
141
- validateFindings(value.findings, 'route execution.findings');
142
- assertRepairConsumed(value);
143
- }
144
- else if (value.phase === 'candidate-repair-ready') {
145
- assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage', 'review', 'findings'], 'route execution');
146
- validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
147
- assertRejectedRepairBudgets(value);
148
- }
149
- else if (value.phase === 'repair-in-flight') {
150
- assertExactObject(value, [...budgetKeys, 'phase', 'repairInput'], 'route execution');
151
- validateRepairInput(value.repairInput, expectedGenerationHash);
152
- assertRepairConsumed(value);
153
- if (value.repairInput.kind === 'rejected-candidate') {
154
- if (value.candidateReviews !== 1)
155
- throw new Error('rejected-candidate repair requires candidateReviews 1');
156
- }
157
- else if (value.candidateReviews !== 0) {
158
- throw new Error('malformed repair requires candidateReviews 0');
159
- }
160
- }
161
- else if (value.phase === 'route-complete') {
162
- assertExactObject(value, [...budgetKeys, 'phase', 'triage', 'review'], 'route execution');
163
- const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
164
- if (value.review !== null) {
165
- const review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
166
- validateReviewBinding(triage, review);
167
- if (review.verdict !== 'approved')
168
- throw new Error('route-complete review must be approved');
169
- if (value.candidateReviews !== 1)
170
- throw new Error('reviewed route-complete requires candidateReviews 1');
171
- }
172
- }
173
- else {
174
- throw new Error('route execution.phase is invalid');
175
- }
176
- return value;
177
- }
178
- export function validateRouteStateInvariant(input) {
179
- assertSha256(input.generationHash, 'route state.generationHash');
180
- if (!ROUTE_LIFECYCLES.includes(input.lifecycle))
181
- throw new Error('route state lifecycle is invalid');
182
- const hasExecution = input.routeExecution !== undefined;
183
- const hasReceipt = input.routeReceipt !== undefined;
184
- if (input.lifecycle === 'claimed') {
185
- if (hasExecution || hasReceipt)
186
- throw new Error('claimed route state requires routeExecution and routeReceipt absent');
187
- return;
188
- }
189
- if (input.lifecycle === 'triaging') {
190
- if (!hasExecution || hasReceipt)
191
- throw new Error('triaging route state requires routeExecution and routeReceipt absent');
192
- const execution = validateRouteExecution(input.routeExecution, input.generationHash);
193
- if (execution.phase === 'route-complete')
194
- throw new Error('triaging route execution cannot be route-complete');
195
- return;
196
- }
197
- if (TERMINAL_LIFECYCLES.includes(input.lifecycle) && !hasExecution && !hasReceipt)
198
- return;
199
- if (!hasExecution || !hasReceipt)
200
- throw new Error(`${input.lifecycle} route execution and receipt are required as an exact pair`);
201
- const execution = validateRouteExecution(input.routeExecution, input.generationHash);
202
- if (execution.phase !== 'route-complete')
203
- throw new Error(`${input.lifecycle} route execution must be route-complete`);
204
- const receipt = validateRouteReceipt(input.routeReceipt, input.generationHash);
205
- if (canonicalJson(execution.triage) !== canonicalJson(receipt.triage)
206
- || canonicalJson(execution.review) !== canonicalJson(receipt.review)) {
207
- throw new Error('route-complete refs must equal route receipt refs');
208
- }
209
- if (input.lifecycle === 'implementing' && receipt.route !== 'direct') {
210
- throw new Error('implementing lifecycle requires direct route');
211
- }
212
- if (input.lifecycle === 'spec-authoring' && receipt.route !== 'spec-required') {
213
- throw new Error('direct route dispatch requires implementing lifecycle');
214
- }
215
- if (input.lifecycle === 'waiting-human' && receipt.route !== 'awaiting-user') {
216
- throw new Error('waiting-human lifecycle requires awaiting-user route');
217
- }
218
- }
219
- export function downstreamLifecycleForRoute(receiptValue, expectedGenerationHash) {
220
- const receipt = validateRouteReceipt(receiptValue, expectedGenerationHash);
221
- if (receipt.route === 'direct')
222
- return 'implementing';
223
- if (receipt.route === 'spec-required')
224
- return 'spec-authoring';
225
- return 'waiting-human';
226
- }
227
- export function validateRouteTransition(previous, next) {
228
- validateRouteStateInvariant(previous);
229
- validateRouteStateInvariant(next);
230
- if (previous.generationHash !== next.generationHash)
231
- throw new Error('route transition generation is immutable');
232
- if (previous.routeReceipt !== undefined) {
233
- if (next.routeReceipt === undefined
234
- || canonicalJson(previous.routeReceipt) !== canonicalJson(next.routeReceipt)) {
235
- throw new Error('route receipt is immutable after routing');
236
- }
237
- }
238
- if (previous.lifecycle === 'routed' && next.lifecycle !== 'routed') {
239
- const expected = downstreamLifecycleForRoute(previous.routeReceipt, previous.generationHash);
240
- if (next.lifecycle !== expected)
241
- throw new Error(`routed ${String(previous.routeReceipt.route)} must dispatch to ${expected}`);
242
- }
243
- }
244
- export function validateTrustedAnswerResumeTransition(previous, next, waitingHuman) {
245
- validateRouteStateInvariant(previous);
246
- validateRouteStateInvariant(next);
247
- if (previous.lifecycle !== 'waiting-human' || previous.routeReceipt.route !== 'awaiting-user') {
248
- throw new Error('trusted answer resume requires waiting-human awaiting-user authority');
249
- }
250
- if (waitingHuman.phase !== 'resume-ready')
251
- throw new Error('trusted answer resume requires resume-ready evidence');
252
- if (next.lifecycle !== 'triaging' || next.routeReceipt !== undefined)
253
- throw new Error('trusted answer resume must restart triage without a receipt');
254
- const execution = validateRouteExecution(next.routeExecution, next.generationHash);
255
- if (execution.phase !== 'triage-ready' || execution.triageRepairs !== 0 || execution.candidateReviews !== 0) {
256
- throw new Error('trusted answer resume requires initial route execution');
257
- }
258
- }
259
- const ROUTE_LIFECYCLES = [
260
- 'claimed', 'triaging', 'routed', 'implementing', 'waiting-human', 'spec-authoring', 'reworking', 'checking',
261
- 'proving', 'publishing', 'safe-halt', 'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
262
- ];
263
- const TERMINAL_LIFECYCLES = [
264
- 'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
265
- ];
266
- function validateBudgets(value) {
267
- if (value.version !== 1)
268
- throw new Error('route execution.version must be 1');
269
- for (const key of [
270
- 'triageRepairs', 'candidateReviews',
271
- ]) {
272
- if (value[key] !== 0 && value[key] !== 1)
273
- throw new Error(`route execution.${key} must be 0 or 1`);
274
- }
275
- }
276
- function validateWaitingCandidate(candidateValue, triageValue, expectedGenerationHash) {
277
- const candidate = validateTriageRoute(candidateValue);
278
- if (candidate.status !== 'awaiting-user')
279
- throw new Error('route execution candidate must be awaiting-user');
280
- const triage = validateRouteArtifactRef(triageValue, expectedGenerationHash);
281
- if (triage.artifactSha256 !== hashTriageArtifact(candidate))
282
- throw new Error('route execution candidate artifact hash mismatch');
283
- return triage;
284
- }
285
- function validateRejectedCandidate(candidate, triageValue, reviewValue, findings, expectedGenerationHash) {
286
- const triage = validateWaitingCandidate(candidate, triageValue, expectedGenerationHash);
287
- const review = validateAmbiguityReviewRef(reviewValue, expectedGenerationHash ?? triage.generationHash);
288
- validateReviewBinding(triage, review);
289
- if (review.verdict !== 'rejected')
290
- throw new Error('candidate repair review must be rejected');
291
- validateFindings(findings, 'route execution findings');
292
- }
293
- function validateRepairInput(value, expectedGenerationHash) {
294
- assertRecord(value, 'route execution.repairInput');
295
- if (value.kind === 'malformed') {
296
- assertExactObject(value, ['kind', 'findings'], 'route execution.repairInput');
297
- validateFindings(value.findings, 'route execution.repairInput.findings');
298
- return;
299
- }
300
- if (value.kind === 'rejected-candidate') {
301
- assertExactObject(value, ['kind', 'candidate', 'triage', 'review', 'findings'], 'route execution.repairInput');
302
- validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
303
- return;
304
- }
305
- throw new Error('route execution.repairInput.kind is invalid');
306
- }
307
- function validateReviewBinding(triage, review) {
308
- if (review.generationHash !== triage.generationHash)
309
- throw new Error('ambiguity review generation mismatch');
310
- if (review.candidateSha256 !== triage.artifactSha256)
311
- throw new Error('ambiguity review candidate hash mismatch');
312
- if (review.attemptId === triage.attemptId)
313
- throw new Error('ambiguity review attempt must be distinct from triage attempt');
314
- }
315
- function assertRepairConsumed(value) {
316
- if (value.triageRepairs !== 1)
317
- throw new Error('repair phase requires triageRepairs 1');
318
- }
319
- function assertRejectedRepairBudgets(value) {
320
- assertRepairConsumed(value);
321
- if (value.candidateReviews !== 1)
322
- throw new Error('rejected candidate requires candidateReviews 1');
323
- }
324
- function validateFindings(value, field) {
325
- assertStringArray(value, field, 1);
326
- assertUnique(value, field);
327
- }
328
- function hashDomain(domain, value) {
329
- return sha256(Buffer.concat([
330
- Buffer.from(domain, 'ascii'),
331
- Buffer.from([0]),
332
- Buffer.from(canonicalJson(value), 'utf8'),
333
- ]));
334
- }
335
- function assertGeneration(value, expected, field) {
336
- assertSha256(value, field);
337
- if (expected !== undefined) {
338
- assertSha256(expected, 'expected generation hash');
339
- if (value !== expected)
340
- throw new Error(`${field} generation mismatch`);
341
- }
342
- }
343
- function assertTimestamp(value, field) {
344
- if (typeof value !== 'string' || Number.isNaN(Date.parse(value)) || new Date(value).toISOString() !== value) {
345
- throw new Error(`${field} must be an ISO timestamp`);
346
- }
347
- }
348
- function assertSha256(value, field) {
349
- if (typeof value !== 'string' || !SHA256_PATTERN.test(value))
350
- throw new Error(`${field} must be lowercase SHA-256`);
351
- }
352
- function assertStringArray(value, field, minItems) {
353
- if (!Array.isArray(value) || value.length < minItems || value.length > MAX_ARRAY_LENGTH) {
354
- throw new Error(`${field} has invalid cardinality`);
355
- }
356
- for (const item of value)
357
- assertString(item, `${field} entry`);
358
- }
359
- function assertUnique(values, field) {
360
- if (new Set(values).size !== values.length)
361
- throw new Error(`${field} must be unique`);
362
- }
363
- function assertString(value, field) {
364
- if (typeof value !== 'string' || value.length === 0 || value.length > MAX_STRING_LENGTH) {
365
- throw new Error(`${field} must be a bounded non-empty string`);
366
- }
367
- }
368
- function assertRecord(value, field) {
369
- if (typeof value !== 'object' || value === null || Array.isArray(value))
370
- throw new Error(`${field} must be an object`);
371
- }
372
- function assertExactObject(value, keys, field) {
373
- assertRecord(value, field);
374
- const actual = Object.keys(value).sort();
375
- const expected = [...keys].sort();
376
- if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
377
- throw new Error(`${field} has unknown or missing keys`);
378
- }
379
- }
380
- //# sourceMappingURL=route-decision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-decision.js","sourceRoot":"","sources":["../../../src/v2/route-decision.ts"],"names":[],"mappings":"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"}
@@ -1,73 +0,0 @@
1
- import { type FrozenSpecReceiptV1, type SpecDeliveryV1, type SpecReviewReportV1, type SpecRevisionV1 } from './spec-delivery.js';
2
- import type { RoutedRunContext } from './route-continuations.js';
3
- import type { DurableReportInvocationState } from './contained-report-operation.js';
4
- export interface SpecDeliveryState {
5
- read(): Promise<SpecDeliveryV1 | undefined>;
6
- compareAndSwap(expected: SpecDeliveryV1 | undefined, next: SpecDeliveryV1): Promise<boolean>;
7
- authorInvocation(authorSessionId: string): DurableReportInvocationState;
8
- reviewInvocation(reviewerSessionId: string): DurableReportInvocationState;
9
- settleAuthor(expected: SpecDeliveryV1, next: SpecDeliveryV1, attemptId: string): Promise<boolean>;
10
- settleReview(expected: SpecDeliveryV1, next: SpecDeliveryV1, attemptId: string): Promise<boolean>;
11
- }
12
- export type SpecOperationResult<T> = {
13
- status: 'completed';
14
- value: T;
15
- reportSha256?: string;
16
- } | {
17
- status: 'invalid';
18
- code: string;
19
- attemptId: string;
20
- } | {
21
- status: 'retryable';
22
- code: string;
23
- } | {
24
- status: 'blocked';
25
- kind: 'external' | 'safety' | 'exhausted';
26
- code: string;
27
- } | {
28
- status: 'cancelled';
29
- };
30
- export interface SpecDeliveryOperation {
31
- author(input: {
32
- context: RoutedRunContext;
33
- state: SpecDeliveryV1;
34
- mode: 'author' | 'repair';
35
- authorSessionId: string;
36
- signal: AbortSignal;
37
- invocationState: DurableReportInvocationState;
38
- }): Promise<SpecOperationResult<SpecRevisionV1>>;
39
- review(input: {
40
- context: RoutedRunContext;
41
- state: SpecDeliveryV1;
42
- mode: 'full' | 'closure';
43
- reviewerSessionId: string;
44
- signal: AbortSignal;
45
- invocationState: DurableReportInvocationState;
46
- }): Promise<SpecOperationResult<SpecReviewReportV1>>;
47
- }
48
- export type SpecCoordinatorResult = {
49
- status: 'completed';
50
- receipt: FrozenSpecReceiptV1;
51
- } | {
52
- status: 'retryable';
53
- code: string;
54
- } | {
55
- status: 'blocked';
56
- kind: 'external' | 'safety' | 'exhausted';
57
- code: string;
58
- evidence: string[];
59
- } | {
60
- status: 'cancelled';
61
- };
62
- export declare class SpecCoordinator {
63
- private readonly dependencies;
64
- constructor(dependencies: {
65
- state: SpecDeliveryState;
66
- operation: SpecDeliveryOperation;
67
- createAuthorSessionId(): string;
68
- createReviewerSessionId(): string;
69
- });
70
- run(context: RoutedRunContext, signal: AbortSignal): Promise<SpecCoordinatorResult>;
71
- private settleInvalid;
72
- }
73
- //# sourceMappingURL=spec-coordinator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-coordinator.d.ts","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}
@@ -1,126 +0,0 @@
1
- import { acceptSpecReview, acceptSpecRevision, createInitialSpecDelivery, freezeApprovedSpec, recoverMalformedSpecReport, reserveSpecAuthorSession, reserveSpecReviewerSession, } from './spec-delivery.js';
2
- export class SpecCoordinator {
3
- dependencies;
4
- constructor(dependencies) {
5
- this.dependencies = dependencies;
6
- }
7
- async run(context, signal) {
8
- const observed = await this.dependencies.state.read();
9
- let current;
10
- if (!observed) {
11
- const initial = createInitialSpecDelivery({
12
- issueNumber: context.issue.number, runId: context.runId,
13
- workflowGenerationSha256: context.workflowGeneration.generationHash,
14
- });
15
- if (!await this.dependencies.state.compareAndSwap(undefined, initial))
16
- return { status: 'retryable', code: 'spec-state-conflict' };
17
- current = initial;
18
- }
19
- else
20
- current = observed;
21
- while (true) {
22
- if (signal.aborted)
23
- return { status: 'cancelled' };
24
- if (current.stage === 'frozen')
25
- return { status: 'completed', receipt: current.frozen };
26
- if (current.stage === 'rejected' || current.stage === 'exhausted') {
27
- return { status: 'blocked', kind: current.stage === 'rejected' ? 'safety' : 'exhausted', code: `spec-${current.stage}`, evidence: [] };
28
- }
29
- if (current.stage === 'approved') {
30
- const frozen = freezeApprovedSpec(current);
31
- if (!await this.dependencies.state.compareAndSwap(current, frozen))
32
- return { status: 'retryable', code: 'spec-freeze-state-conflict' };
33
- current = frozen;
34
- continue;
35
- }
36
- const author = current.stage === 'authoring' || current.stage === 'author-repair';
37
- const mode = author ? (current.stage === 'authoring' ? 'author' : 'repair')
38
- : (current.stage === 'review-full' ? 'full' : 'closure');
39
- let active = current;
40
- const authorSessionId = author ? current.authorSessionId ?? this.dependencies.createAuthorSessionId() : undefined;
41
- const reviewerSessionId = author ? undefined : current.review.reviewerSessionId ?? this.dependencies.createReviewerSessionId();
42
- const reviewState = author ? undefined : reserveSpecReviewerSession(current, reviewerSessionId);
43
- const authorState = author ? reserveSpecAuthorSession(current, authorSessionId) : undefined;
44
- const result = author
45
- ? await this.dependencies.operation.author({ context, state: authorState, mode: mode, authorSessionId: authorSessionId,
46
- signal, invocationState: this.dependencies.state.authorInvocation(authorSessionId) })
47
- : await this.dependencies.operation.review({ context, state: reviewState, mode: mode, reviewerSessionId: reviewerSessionId,
48
- signal, invocationState: this.dependencies.state.reviewInvocation(reviewerSessionId) });
49
- if (result.status === 'retryable') {
50
- return result;
51
- }
52
- if (result.status === 'invalid') {
53
- const settlement = await this.settleInvalid(author ? 'author' : 'review', result.attemptId);
54
- if (settlement.status === 'returned')
55
- return settlement.result;
56
- current = settlement.state;
57
- continue;
58
- }
59
- if (result.status !== 'completed')
60
- return result.status === 'blocked' ? { ...result, evidence: [] } : result;
61
- const refreshed = await this.dependencies.state.read();
62
- if (!refreshed)
63
- return { status: 'retryable', code: 'spec-state-missing' };
64
- active = refreshed;
65
- const attemptId = author
66
- ? result.value.author.attemptId
67
- : result.value.reviewer.attemptId;
68
- let next;
69
- try {
70
- next = author
71
- ? acceptSpecRevision(active, result.value)
72
- : acceptSpecReview(active, result.value, result.reportSha256 ?? '0'.repeat(64));
73
- }
74
- catch {
75
- const settlement = await this.settleInvalid(author ? 'author' : 'review', attemptId);
76
- if (settlement.status === 'returned')
77
- return settlement.result;
78
- current = settlement.state;
79
- continue;
80
- }
81
- let saved;
82
- try {
83
- saved = author
84
- ? await this.dependencies.state.settleAuthor(active, next, attemptId)
85
- : await this.dependencies.state.settleReview(active, next, attemptId);
86
- }
87
- catch {
88
- return { status: 'retryable', code: 'spec-result-state-conflict' };
89
- }
90
- if (!saved)
91
- return { status: 'retryable', code: 'spec-result-state-conflict' };
92
- current = next;
93
- }
94
- }
95
- async settleInvalid(owner, attemptId) {
96
- const active = await this.dependencies.state.read();
97
- if (!active)
98
- return { status: 'returned', result: { status: 'retryable', code: 'spec-state-missing' } };
99
- let next;
100
- let exhausted = false;
101
- try {
102
- next = recoverMalformedSpecReport(active, owner);
103
- }
104
- catch {
105
- next = { ...structuredClone(active), stage: 'exhausted' };
106
- exhausted = true;
107
- }
108
- let settled;
109
- try {
110
- settled = owner === 'author'
111
- ? await this.dependencies.state.settleAuthor(active, next, attemptId)
112
- : await this.dependencies.state.settleReview(active, next, attemptId);
113
- }
114
- catch {
115
- return { status: 'returned', result: { status: 'retryable', code: exhausted
116
- ? 'spec-exhaustion-state-conflict' : 'spec-recovery-state-conflict' } };
117
- }
118
- if (!settled)
119
- return { status: 'returned', result: { status: 'retryable', code: exhausted
120
- ? 'spec-exhaustion-state-conflict' : 'spec-recovery-state-conflict' } };
121
- return exhausted
122
- ? { status: 'returned', result: { status: 'blocked', kind: 'exhausted', code: 'spec-retry-budget-exhausted', evidence: [] } }
123
- : { status: 'continued', state: next };
124
- }
125
- }
126
- //# sourceMappingURL=spec-coordinator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-coordinator.js","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}