clinkx 0.3.0 → 1.0.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 (555) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +10 -0
  3. package/README.md +82 -26
  4. package/clinkx-workflows/dist/allowed-roots.d.ts +1 -0
  5. package/clinkx-workflows/dist/allowed-roots.js +5 -0
  6. package/clinkx-workflows/dist/allowed-roots.js.map +1 -0
  7. package/clinkx-workflows/dist/artifacts.d.ts +20 -1
  8. package/clinkx-workflows/dist/artifacts.js +38 -9
  9. package/clinkx-workflows/dist/artifacts.js.map +1 -1
  10. package/clinkx-workflows/dist/backend.d.ts +4 -0
  11. package/clinkx-workflows/dist/citation-check.d.ts +40 -0
  12. package/clinkx-workflows/dist/citation-check.js +348 -0
  13. package/clinkx-workflows/dist/citation-check.js.map +1 -0
  14. package/clinkx-workflows/dist/clink-client.d.ts +2 -1
  15. package/clinkx-workflows/dist/clink-client.js +17 -4
  16. package/clinkx-workflows/dist/clink-client.js.map +1 -1
  17. package/clinkx-workflows/dist/config.d.ts +145 -16
  18. package/clinkx-workflows/dist/config.js +384 -26
  19. package/clinkx-workflows/dist/config.js.map +1 -1
  20. package/clinkx-workflows/dist/contained-file.d.ts +172 -0
  21. package/clinkx-workflows/dist/contained-file.js +483 -0
  22. package/clinkx-workflows/dist/contained-file.js.map +1 -0
  23. package/clinkx-workflows/dist/context-builder-lifecycle-contract.d.ts +416 -0
  24. package/clinkx-workflows/dist/context-builder-lifecycle-contract.js +328 -0
  25. package/clinkx-workflows/dist/context-builder-lifecycle-contract.js.map +1 -0
  26. package/clinkx-workflows/dist/context-builder-lifecycle-router.d.ts +24 -0
  27. package/clinkx-workflows/dist/context-builder-lifecycle-router.js +39 -0
  28. package/clinkx-workflows/dist/context-builder-lifecycle-router.js.map +1 -0
  29. package/clinkx-workflows/dist/context-cache-key.d.ts +53 -0
  30. package/clinkx-workflows/dist/context-cache-key.js +91 -0
  31. package/clinkx-workflows/dist/context-cache-key.js.map +1 -0
  32. package/clinkx-workflows/dist/context-mode-resolver.d.ts +27 -0
  33. package/clinkx-workflows/dist/context-mode-resolver.js +126 -0
  34. package/clinkx-workflows/dist/context-mode-resolver.js.map +1 -0
  35. package/clinkx-workflows/dist/context-preflight.d.ts +184 -0
  36. package/clinkx-workflows/dist/context-preflight.js +91 -0
  37. package/clinkx-workflows/dist/context-preflight.js.map +1 -0
  38. package/clinkx-workflows/dist/council-expander.d.ts +1 -1
  39. package/clinkx-workflows/dist/council-expander.js +2 -1
  40. package/clinkx-workflows/dist/council-expander.js.map +1 -1
  41. package/clinkx-workflows/dist/dashboard/activity-contract.d.ts +165 -0
  42. package/clinkx-workflows/dist/dashboard/activity-contract.js +105 -0
  43. package/clinkx-workflows/dist/dashboard/activity-contract.js.map +1 -0
  44. package/clinkx-workflows/dist/dashboard/activity-lease.d.ts +25 -0
  45. package/clinkx-workflows/dist/dashboard/activity-lease.js +34 -0
  46. package/clinkx-workflows/dist/dashboard/activity-lease.js.map +1 -0
  47. package/clinkx-workflows/dist/dashboard/activity-reader.d.ts +86 -0
  48. package/clinkx-workflows/dist/dashboard/activity-reader.js +480 -0
  49. package/clinkx-workflows/dist/dashboard/activity-reader.js.map +1 -0
  50. package/clinkx-workflows/dist/dashboard/api-routes.d.ts +36 -0
  51. package/clinkx-workflows/dist/dashboard/api-routes.js +1047 -0
  52. package/clinkx-workflows/dist/dashboard/api-routes.js.map +1 -0
  53. package/clinkx-workflows/dist/dashboard/artifact-index.d.ts +37 -0
  54. package/clinkx-workflows/dist/dashboard/artifact-index.js +145 -0
  55. package/clinkx-workflows/dist/dashboard/artifact-index.js.map +1 -0
  56. package/clinkx-workflows/dist/dashboard/auth/challenge-store.d.ts +31 -0
  57. package/clinkx-workflows/dist/dashboard/auth/challenge-store.js +65 -0
  58. package/clinkx-workflows/dist/dashboard/auth/challenge-store.js.map +1 -0
  59. package/clinkx-workflows/dist/dashboard/auth/controller.d.ts +26 -0
  60. package/clinkx-workflows/dist/dashboard/auth/controller.js +596 -0
  61. package/clinkx-workflows/dist/dashboard/auth/controller.js.map +1 -0
  62. package/clinkx-workflows/dist/dashboard/auth/credential-store.d.ts +60 -0
  63. package/clinkx-workflows/dist/dashboard/auth/credential-store.js +776 -0
  64. package/clinkx-workflows/dist/dashboard/auth/credential-store.js.map +1 -0
  65. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.d.ts +9 -0
  66. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js +44 -0
  67. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js.map +1 -0
  68. package/clinkx-workflows/dist/dashboard/auth/session-store.d.ts +17 -0
  69. package/clinkx-workflows/dist/dashboard/auth/session-store.js +77 -0
  70. package/clinkx-workflows/dist/dashboard/auth/session-store.js.map +1 -0
  71. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.d.ts +25 -0
  72. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js +71 -0
  73. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js.map +1 -0
  74. package/clinkx-workflows/dist/dashboard/context-run-liveness.d.ts +37 -0
  75. package/clinkx-workflows/dist/dashboard/context-run-liveness.js +49 -0
  76. package/clinkx-workflows/dist/dashboard/context-run-liveness.js.map +1 -0
  77. package/clinkx-workflows/dist/dashboard/context-run-reader.d.ts +222 -0
  78. package/clinkx-workflows/dist/dashboard/context-run-reader.js +1178 -0
  79. package/clinkx-workflows/dist/dashboard/context-run-reader.js.map +1 -0
  80. package/clinkx-workflows/dist/dashboard/contracts.d.ts +8936 -0
  81. package/clinkx-workflows/dist/dashboard/contracts.js +1157 -0
  82. package/clinkx-workflows/dist/dashboard/contracts.js.map +1 -0
  83. package/clinkx-workflows/dist/dashboard/generation.d.ts +14 -0
  84. package/clinkx-workflows/dist/dashboard/generation.js +41 -0
  85. package/clinkx-workflows/dist/dashboard/generation.js.map +1 -0
  86. package/clinkx-workflows/dist/dashboard/index.d.ts +28 -0
  87. package/clinkx-workflows/dist/dashboard/index.js +16 -0
  88. package/clinkx-workflows/dist/dashboard/index.js.map +1 -0
  89. package/clinkx-workflows/dist/dashboard/lazy-content.d.ts +101 -0
  90. package/clinkx-workflows/dist/dashboard/lazy-content.js +748 -0
  91. package/clinkx-workflows/dist/dashboard/lazy-content.js.map +1 -0
  92. package/clinkx-workflows/dist/dashboard/progress-report-contract.d.ts +303 -0
  93. package/clinkx-workflows/dist/dashboard/progress-report-contract.js +221 -0
  94. package/clinkx-workflows/dist/dashboard/progress-report-contract.js.map +1 -0
  95. package/clinkx-workflows/dist/dashboard/progress-report-reader.d.ts +50 -0
  96. package/clinkx-workflows/dist/dashboard/progress-report-reader.js +581 -0
  97. package/clinkx-workflows/dist/dashboard/progress-report-reader.js.map +1 -0
  98. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.d.ts +89 -0
  99. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js +71 -0
  100. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js.map +1 -0
  101. package/clinkx-workflows/dist/dashboard/progress-report-status-store.d.ts +28 -0
  102. package/clinkx-workflows/dist/dashboard/progress-report-status-store.js +110 -0
  103. package/clinkx-workflows/dist/dashboard/progress-report-status-store.js.map +1 -0
  104. package/clinkx-workflows/dist/dashboard/read-model.d.ts +86 -0
  105. package/clinkx-workflows/dist/dashboard/read-model.js +440 -0
  106. package/clinkx-workflows/dist/dashboard/read-model.js.map +1 -0
  107. package/clinkx-workflows/dist/dashboard/request-admission.d.ts +31 -0
  108. package/clinkx-workflows/dist/dashboard/request-admission.js +126 -0
  109. package/clinkx-workflows/dist/dashboard/request-admission.js.map +1 -0
  110. package/clinkx-workflows/dist/dashboard/scanner.d.ts +75 -0
  111. package/clinkx-workflows/dist/dashboard/scanner.js +1110 -0
  112. package/clinkx-workflows/dist/dashboard/scanner.js.map +1 -0
  113. package/clinkx-workflows/dist/dashboard/server-factory.d.ts +50 -0
  114. package/clinkx-workflows/dist/dashboard/server-factory.js +431 -0
  115. package/clinkx-workflows/dist/dashboard/server-factory.js.map +1 -0
  116. package/clinkx-workflows/dist/dashboard/session-log-contract.d.ts +2611 -0
  117. package/clinkx-workflows/dist/dashboard/session-log-contract.js +480 -0
  118. package/clinkx-workflows/dist/dashboard/session-log-contract.js.map +1 -0
  119. package/clinkx-workflows/dist/dashboard/session-log-identity.d.ts +21 -0
  120. package/clinkx-workflows/dist/dashboard/session-log-identity.js +101 -0
  121. package/clinkx-workflows/dist/dashboard/session-log-identity.js.map +1 -0
  122. package/clinkx-workflows/dist/dashboard/session-log-journal.d.ts +43 -0
  123. package/clinkx-workflows/dist/dashboard/session-log-journal.js +522 -0
  124. package/clinkx-workflows/dist/dashboard/session-log-journal.js.map +1 -0
  125. package/clinkx-workflows/dist/dashboard/session-log-reader.d.ts +61 -0
  126. package/clinkx-workflows/dist/dashboard/session-log-reader.js +378 -0
  127. package/clinkx-workflows/dist/dashboard/session-log-reader.js.map +1 -0
  128. package/clinkx-workflows/dist/dashboard/session-log-redaction.d.ts +6 -0
  129. package/clinkx-workflows/dist/dashboard/session-log-redaction.js +367 -0
  130. package/clinkx-workflows/dist/dashboard/session-log-redaction.js.map +1 -0
  131. package/clinkx-workflows/dist/dashboard/session-log-retention.d.ts +23 -0
  132. package/clinkx-workflows/dist/dashboard/session-log-retention.js +212 -0
  133. package/clinkx-workflows/dist/dashboard/session-log-retention.js.map +1 -0
  134. package/clinkx-workflows/dist/dashboard/static-responses.d.ts +10 -0
  135. package/clinkx-workflows/dist/dashboard/static-responses.js +94 -0
  136. package/clinkx-workflows/dist/dashboard/static-responses.js.map +1 -0
  137. package/clinkx-workflows/dist/dashboard/worker-lock-observer.d.ts +28 -0
  138. package/clinkx-workflows/dist/dashboard/worker-lock-observer.js +241 -0
  139. package/clinkx-workflows/dist/dashboard/worker-lock-observer.js.map +1 -0
  140. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  141. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  142. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  143. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  144. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  145. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  146. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  147. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  148. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  149. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  150. package/clinkx-workflows/dist/dashboard-ui/assets/index-DOkMXTfB.js +25 -0
  151. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  152. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  153. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  154. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  155. package/clinkx-workflows/dist/dashboard-ui/assets/style-ChJsn0KD.css +1 -0
  156. package/clinkx-workflows/dist/dashboard-ui/contracts/council-plan-review-input-v1.json +158 -0
  157. package/clinkx-workflows/dist/dashboard-ui/index.html +15 -0
  158. package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Mono-OFL.txt +93 -0
  159. package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Sans-OFL.txt +93 -0
  160. package/clinkx-workflows/dist/dashboard-ui/licenses/JetBrains-Mono-OFL.txt +93 -0
  161. package/clinkx-workflows/dist/dashboard-ui/licenses/NOTICE.md +32 -0
  162. package/clinkx-workflows/dist/dashboard-ui/theme-init.js +8 -0
  163. package/clinkx-workflows/dist/definition-normalizer.d.ts +19 -0
  164. package/clinkx-workflows/dist/definition-normalizer.js.map +1 -1
  165. package/clinkx-workflows/dist/delegate-validate.d.ts +78 -0
  166. package/clinkx-workflows/dist/delegate-validate.js +97 -0
  167. package/clinkx-workflows/dist/delegate-validate.js.map +1 -0
  168. package/clinkx-workflows/dist/engine.d.ts +141 -0
  169. package/clinkx-workflows/dist/engine.js +882 -28
  170. package/clinkx-workflows/dist/engine.js.map +1 -1
  171. package/clinkx-workflows/dist/errors.d.ts +2 -0
  172. package/clinkx-workflows/dist/errors.js.map +1 -1
  173. package/clinkx-workflows/dist/fingerprint.d.ts +1 -1
  174. package/clinkx-workflows/dist/fingerprint.js +1 -1
  175. package/clinkx-workflows/dist/index.d.ts +19 -0
  176. package/clinkx-workflows/dist/index.js +15 -0
  177. package/clinkx-workflows/dist/index.js.map +1 -1
  178. package/clinkx-workflows/dist/loader.d.ts +9 -3
  179. package/clinkx-workflows/dist/loader.js +92 -21
  180. package/clinkx-workflows/dist/loader.js.map +1 -1
  181. package/clinkx-workflows/dist/plan-review/admission.d.ts +160 -0
  182. package/clinkx-workflows/dist/plan-review/admission.js +290 -0
  183. package/clinkx-workflows/dist/plan-review/admission.js.map +1 -0
  184. package/clinkx-workflows/dist/plan-review/context-policy.d.ts +55 -0
  185. package/clinkx-workflows/dist/plan-review/context-policy.js +146 -0
  186. package/clinkx-workflows/dist/plan-review/context-policy.js.map +1 -0
  187. package/clinkx-workflows/dist/plan-review/contract.d.ts +763 -0
  188. package/clinkx-workflows/dist/plan-review/contract.js +289 -0
  189. package/clinkx-workflows/dist/plan-review/contract.js.map +1 -0
  190. package/clinkx-workflows/dist/plan-review/digest.d.ts +68 -0
  191. package/clinkx-workflows/dist/plan-review/digest.js +241 -0
  192. package/clinkx-workflows/dist/plan-review/digest.js.map +1 -0
  193. package/clinkx-workflows/dist/plan-review/discovery.d.ts +45 -0
  194. package/clinkx-workflows/dist/plan-review/discovery.js +36 -0
  195. package/clinkx-workflows/dist/plan-review/discovery.js.map +1 -0
  196. package/clinkx-workflows/dist/plan-review/execution-contract.d.ts +298 -0
  197. package/clinkx-workflows/dist/plan-review/execution-contract.js +194 -0
  198. package/clinkx-workflows/dist/plan-review/execution-contract.js.map +1 -0
  199. package/clinkx-workflows/dist/plan-review/expander.d.ts +48 -0
  200. package/clinkx-workflows/dist/plan-review/expander.js +243 -0
  201. package/clinkx-workflows/dist/plan-review/expander.js.map +1 -0
  202. package/clinkx-workflows/dist/plan-review/projector.d.ts +126 -0
  203. package/clinkx-workflows/dist/plan-review/projector.js +437 -0
  204. package/clinkx-workflows/dist/plan-review/projector.js.map +1 -0
  205. package/clinkx-workflows/dist/plan-review/publication.d.ts +95 -0
  206. package/clinkx-workflows/dist/plan-review/publication.js +182 -0
  207. package/clinkx-workflows/dist/plan-review/publication.js.map +1 -0
  208. package/clinkx-workflows/dist/plan-review/ranking-reducer.d.ts +34 -0
  209. package/clinkx-workflows/dist/plan-review/ranking-reducer.js +139 -0
  210. package/clinkx-workflows/dist/plan-review/ranking-reducer.js.map +1 -0
  211. package/clinkx-workflows/dist/plan-review/resume.d.ts +38 -0
  212. package/clinkx-workflows/dist/plan-review/resume.js +122 -0
  213. package/clinkx-workflows/dist/plan-review/resume.js.map +1 -0
  214. package/clinkx-workflows/dist/plan-review/rubric.d.ts +7 -0
  215. package/clinkx-workflows/dist/plan-review/rubric.js +24 -0
  216. package/clinkx-workflows/dist/plan-review/rubric.js.map +1 -0
  217. package/clinkx-workflows/dist/plan-review/run-state.d.ts +398 -0
  218. package/clinkx-workflows/dist/plan-review/run-state.js +183 -0
  219. package/clinkx-workflows/dist/plan-review/run-state.js.map +1 -0
  220. package/clinkx-workflows/dist/plan-review/runtime-policy.d.ts +74 -0
  221. package/clinkx-workflows/dist/plan-review/runtime-policy.js +186 -0
  222. package/clinkx-workflows/dist/plan-review/runtime-policy.js.map +1 -0
  223. package/clinkx-workflows/dist/plan-review/snapshot.d.ts +81 -0
  224. package/clinkx-workflows/dist/plan-review/snapshot.js +170 -0
  225. package/clinkx-workflows/dist/plan-review/snapshot.js.map +1 -0
  226. package/clinkx-workflows/dist/plan-review/stage-error.d.ts +19 -0
  227. package/clinkx-workflows/dist/plan-review/stage-error.js +20 -0
  228. package/clinkx-workflows/dist/plan-review/stage-error.js.map +1 -0
  229. package/clinkx-workflows/dist/post-processors/index.d.ts +20 -0
  230. package/clinkx-workflows/dist/post-processors/index.js +21 -0
  231. package/clinkx-workflows/dist/post-processors/index.js.map +1 -0
  232. package/clinkx-workflows/dist/prompt-budget.d.ts +7 -0
  233. package/clinkx-workflows/dist/prompt-budget.js +7 -1
  234. package/clinkx-workflows/dist/prompt-budget.js.map +1 -1
  235. package/clinkx-workflows/dist/reducers/index.js +2 -0
  236. package/clinkx-workflows/dist/reducers/index.js.map +1 -1
  237. package/clinkx-workflows/dist/run-lock-heartbeat.d.ts +2 -0
  238. package/clinkx-workflows/dist/run-lock-heartbeat.js +3 -0
  239. package/clinkx-workflows/dist/run-lock-heartbeat.js.map +1 -0
  240. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.d.ts +34 -0
  241. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js +74 -0
  242. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js.map +1 -0
  243. package/clinkx-workflows/dist/run-summary/cards/index.js +5 -0
  244. package/clinkx-workflows/dist/run-summary/cards/index.js.map +1 -1
  245. package/clinkx-workflows/dist/run-summary.d.ts +13 -0
  246. package/clinkx-workflows/dist/run-summary.js +29 -1
  247. package/clinkx-workflows/dist/run-summary.js.map +1 -1
  248. package/clinkx-workflows/dist/schema.d.ts +76 -21
  249. package/clinkx-workflows/dist/schema.js +10 -1
  250. package/clinkx-workflows/dist/schema.js.map +1 -1
  251. package/clinkx-workflows/dist/seed-terms.d.ts +30 -0
  252. package/clinkx-workflows/dist/seed-terms.js +176 -0
  253. package/clinkx-workflows/dist/seed-terms.js.map +1 -0
  254. package/clinkx-workflows/dist/server.d.ts +5 -2
  255. package/clinkx-workflows/dist/server.js +82 -52
  256. package/clinkx-workflows/dist/server.js.map +1 -1
  257. package/clinkx-workflows/dist/shutdown.d.ts +18 -20
  258. package/clinkx-workflows/dist/shutdown.js +43 -61
  259. package/clinkx-workflows/dist/shutdown.js.map +1 -1
  260. package/clinkx-workflows/dist/state-schema.d.ts +38 -0
  261. package/clinkx-workflows/dist/state.d.ts +170 -3
  262. package/clinkx-workflows/dist/state.js +1275 -28
  263. package/clinkx-workflows/dist/state.js.map +1 -1
  264. package/clinkx-workflows/dist/transport.d.ts +15 -0
  265. package/clinkx-workflows/dist/transport.js +19 -10
  266. package/clinkx-workflows/dist/transport.js.map +1 -1
  267. package/clinkx-workflows/dist/types.d.ts +14 -2
  268. package/clinkx-workflows/dist/validators/council.d.ts +318 -85
  269. package/clinkx-workflows/dist/validators/council.js +52 -13
  270. package/clinkx-workflows/dist/validators/council.js.map +1 -1
  271. package/clinkx-workflows/dist/validators/index.d.ts +1 -0
  272. package/clinkx-workflows/dist/validators/index.js +3 -0
  273. package/clinkx-workflows/dist/validators/index.js.map +1 -1
  274. package/clinkx-workflows/dist/validators/plan-review.d.ts +398 -0
  275. package/clinkx-workflows/dist/validators/plan-review.js +316 -0
  276. package/clinkx-workflows/dist/validators/plan-review.js.map +1 -0
  277. package/clinkx-workflows/dist/workflow-receipt.js +188 -4
  278. package/clinkx-workflows/dist/workflow-receipt.js.map +1 -1
  279. package/clinkx-workflows/dist/workflow-tools.d.ts +48 -3
  280. package/clinkx-workflows/dist/workflow-tools.js +1402 -59
  281. package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
  282. package/clinkx-workflows/dist/workspace-signature.d.ts +16 -0
  283. package/clinkx-workflows/dist/workspace-signature.js +388 -0
  284. package/clinkx-workflows/dist/workspace-signature.js.map +1 -0
  285. package/clinkx-workflows/templates/council/answer-specialist.txt +2 -1
  286. package/clinkx-workflows/templates/council/code-review-chairman.txt +13 -0
  287. package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +4 -1
  288. package/clinkx-workflows/templates/council/code-review-reviewer.txt +19 -3
  289. package/clinkx-workflows/templates/council/debug-debugger.txt +2 -1
  290. package/clinkx-workflows/templates/council/discover-analyst.txt +2 -1
  291. package/clinkx-workflows/templates/council/member.txt +2 -1
  292. package/clinkx-workflows/templates/council/plan-review-chairman.txt +68 -0
  293. package/clinkx-workflows/templates/council/plan-review-cross-reviewer.txt +51 -0
  294. package/clinkx-workflows/templates/council/plan-review-reviewer.txt +60 -0
  295. package/clinkx-workflows/templates/plan-review/chairman.txt +48 -0
  296. package/clinkx-workflows/templates/plan-review/cross-review.txt +52 -0
  297. package/clinkx-workflows/templates/plan-review/ranking.txt +16 -0
  298. package/clinkx-workflows/templates/plan-review/reviewer.txt +57 -0
  299. package/clinkx-workflows/workflows/council-answer.yaml +97 -8
  300. package/clinkx-workflows/workflows/council-code-review.yaml +103 -8
  301. package/clinkx-workflows/workflows/council-debug.yaml +97 -8
  302. package/clinkx-workflows/workflows/council-default.yaml +97 -8
  303. package/clinkx-workflows/workflows/council-discover.yaml +97 -8
  304. package/clinkx-workflows/workflows/council-plan-review.yaml +250 -0
  305. package/clinkx-workflows/workflows/plan-review-receipts.yaml +230 -0
  306. package/conf/adapters/agy.json +49 -0
  307. package/conf/adapters/claude.json +5 -0
  308. package/conf/adapters/codex-app-server.json +44 -0
  309. package/conf/adapters/codex.json +7 -2
  310. package/conf/adapters/glm.json +5 -0
  311. package/conf/adapters/grok.json +60 -0
  312. package/conf/adapters/hapi/agy.json +52 -0
  313. package/conf/adapters/hapi/claude.json +5 -0
  314. package/conf/adapters/hapi/codex.json +7 -2
  315. package/conf/adapters/hapi/glm.json +5 -0
  316. package/dist/activity-journal.d.ts +42 -0
  317. package/dist/activity-journal.js +381 -0
  318. package/dist/activity-journal.js.map +1 -0
  319. package/dist/allowed-roots.d.ts +41 -0
  320. package/dist/allowed-roots.js +125 -3
  321. package/dist/allowed-roots.js.map +1 -1
  322. package/dist/codex/activity-session-log.d.ts +14 -0
  323. package/dist/codex/activity-session-log.js +206 -0
  324. package/dist/codex/activity-session-log.js.map +1 -0
  325. package/dist/codex/agent-tools.d.ts +23 -0
  326. package/dist/codex/agent-tools.js +1270 -0
  327. package/dist/codex/agent-tools.js.map +1 -0
  328. package/dist/codex/app-server-client.d.ts +76 -0
  329. package/dist/codex/app-server-client.js +582 -0
  330. package/dist/codex/app-server-client.js.map +1 -0
  331. package/dist/codex/app-server-registry.d.ts +389 -0
  332. package/dist/codex/app-server-registry.js +1407 -0
  333. package/dist/codex/app-server-registry.js.map +1 -0
  334. package/dist/codex/client-types.d.ts +109 -0
  335. package/dist/codex/client-types.js +2 -0
  336. package/dist/codex/client-types.js.map +1 -0
  337. package/dist/codex/protocol.d.ts +5375 -0
  338. package/dist/codex/protocol.js +614 -0
  339. package/dist/codex/protocol.js.map +1 -0
  340. package/dist/codex/session.d.ts +263 -0
  341. package/dist/codex/session.js +466 -0
  342. package/dist/codex/session.js.map +1 -0
  343. package/dist/config.d.ts +185 -19
  344. package/dist/config.js +82 -16
  345. package/dist/config.js.map +1 -1
  346. package/dist/context-builder/anchors.d.ts +1 -0
  347. package/dist/context-builder/anchors.js +3 -0
  348. package/dist/context-builder/anchors.js.map +1 -1
  349. package/dist/context-builder/bundle.d.ts +35 -2
  350. package/dist/context-builder/bundle.js +342 -2417
  351. package/dist/context-builder/bundle.js.map +1 -1
  352. package/dist/context-builder/codemap.d.ts +5 -0
  353. package/dist/context-builder/codemap.js +387 -13
  354. package/dist/context-builder/codemap.js.map +1 -1
  355. package/dist/context-builder/config.d.ts +1 -0
  356. package/dist/context-builder/config.js +12 -0
  357. package/dist/context-builder/config.js.map +1 -1
  358. package/dist/context-builder/context-run-catalog.d.ts +17 -0
  359. package/dist/context-builder/context-run-catalog.js +99 -0
  360. package/dist/context-builder/context-run-catalog.js.map +1 -0
  361. package/dist/context-builder/delegate-packet.d.ts +37 -0
  362. package/dist/context-builder/delegate-packet.js +359 -67
  363. package/dist/context-builder/delegate-packet.js.map +1 -1
  364. package/dist/context-builder/delegate-validation.d.ts +10 -1
  365. package/dist/context-builder/delegate-validation.js +153 -41
  366. package/dist/context-builder/delegate-validation.js.map +1 -1
  367. package/dist/context-builder/delegate.d.ts +2 -0
  368. package/dist/context-builder/delegate.js +1 -0
  369. package/dist/context-builder/delegate.js.map +1 -1
  370. package/dist/context-builder/diagnostics.d.ts +11 -2
  371. package/dist/context-builder/diagnostics.js +39 -6
  372. package/dist/context-builder/diagnostics.js.map +1 -1
  373. package/dist/context-builder/discovery.d.ts +29 -1
  374. package/dist/context-builder/discovery.js +475 -175
  375. package/dist/context-builder/discovery.js.map +1 -1
  376. package/dist/context-builder/globs.js +10 -10
  377. package/dist/context-builder/globs.js.map +1 -1
  378. package/dist/context-builder/handler.d.ts +26 -2
  379. package/dist/context-builder/handler.js +1158 -2416
  380. package/dist/context-builder/handler.js.map +1 -1
  381. package/dist/context-builder/lifecycle-contract.d.ts +424 -0
  382. package/dist/context-builder/lifecycle-contract.js +523 -0
  383. package/dist/context-builder/lifecycle-contract.js.map +1 -0
  384. package/dist/context-builder/lifecycle-journal.d.ts +62 -0
  385. package/dist/context-builder/lifecycle-journal.js +88 -0
  386. package/dist/context-builder/lifecycle-journal.js.map +1 -0
  387. package/dist/context-builder/lifecycle-observer.d.ts +102 -0
  388. package/dist/context-builder/lifecycle-observer.js +258 -0
  389. package/dist/context-builder/lifecycle-observer.js.map +1 -0
  390. package/dist/context-builder/lifecycle-reconcile.d.ts +32 -0
  391. package/dist/context-builder/lifecycle-reconcile.js +191 -0
  392. package/dist/context-builder/lifecycle-reconcile.js.map +1 -0
  393. package/dist/context-builder/lifecycle-recovery.d.ts +2 -0
  394. package/dist/context-builder/lifecycle-recovery.js +14 -0
  395. package/dist/context-builder/lifecycle-recovery.js.map +1 -0
  396. package/dist/context-builder/path-signals.js +9 -5
  397. package/dist/context-builder/path-signals.js.map +1 -1
  398. package/dist/context-builder/progress.d.ts +3 -1
  399. package/dist/context-builder/progress.js +23 -0
  400. package/dist/context-builder/progress.js.map +1 -1
  401. package/dist/context-builder/receipt.d.ts +6 -4
  402. package/dist/context-builder/receipt.js +12 -1
  403. package/dist/context-builder/receipt.js.map +1 -1
  404. package/dist/context-builder/refine-handler.d.ts +14 -0
  405. package/dist/context-builder/refine-handler.js +790 -0
  406. package/dist/context-builder/refine-handler.js.map +1 -0
  407. package/dist/context-builder/review-coverage.d.ts +84 -0
  408. package/dist/context-builder/review-coverage.js +437 -0
  409. package/dist/context-builder/review-coverage.js.map +1 -0
  410. package/dist/context-builder/schema.d.ts +239 -1
  411. package/dist/context-builder/schema.js +112 -6
  412. package/dist/context-builder/schema.js.map +1 -1
  413. package/dist/context-builder/secrets.d.ts +28 -0
  414. package/dist/context-builder/secrets.js +1473 -44
  415. package/dist/context-builder/secrets.js.map +1 -1
  416. package/dist/context-builder/selection.d.ts +7 -3
  417. package/dist/context-builder/selection.js +200 -738
  418. package/dist/context-builder/selection.js.map +1 -1
  419. package/dist/context-builder/session-log-identity.d.ts +1 -0
  420. package/dist/context-builder/session-log-identity.js +66 -0
  421. package/dist/context-builder/session-log-identity.js.map +1 -0
  422. package/dist/context-builder/slice-range-math.d.ts +16 -0
  423. package/dist/context-builder/slice-range-math.js +137 -0
  424. package/dist/context-builder/slice-range-math.js.map +1 -0
  425. package/dist/context-builder/status.d.ts +22 -1
  426. package/dist/context-builder/status.js +59 -4
  427. package/dist/context-builder/status.js.map +1 -1
  428. package/dist/context-builder/storage.d.ts +35 -2
  429. package/dist/context-builder/storage.js +271 -14
  430. package/dist/context-builder/storage.js.map +1 -1
  431. package/dist/context-builder/token-estimate.d.ts +13 -2
  432. package/dist/context-builder/token-estimate.js +77 -4
  433. package/dist/context-builder/token-estimate.js.map +1 -1
  434. package/dist/context-builder/versions.d.ts +29 -0
  435. package/dist/context-builder/versions.js +30 -0
  436. package/dist/context-builder/versions.js.map +1 -0
  437. package/dist/context-builder/workflow-runner.d.ts +69 -0
  438. package/dist/context-builder/workflow-runner.js +1051 -0
  439. package/dist/context-builder/workflow-runner.js.map +1 -0
  440. package/dist/context-builder/write-watchdog.d.ts +14 -0
  441. package/dist/context-builder/write-watchdog.js +38 -0
  442. package/dist/context-builder/write-watchdog.js.map +1 -0
  443. package/dist/dashboard-adapter-catalog.d.ts +9 -0
  444. package/dist/dashboard-adapter-catalog.js +46 -0
  445. package/dist/dashboard-adapter-catalog.js.map +1 -0
  446. package/dist/dashboard-cli.d.ts +79 -0
  447. package/dist/dashboard-cli.js +585 -0
  448. package/dist/dashboard-cli.js.map +1 -0
  449. package/dist/dashboard-companion/client.d.ts +36 -0
  450. package/dist/dashboard-companion/client.js +210 -0
  451. package/dist/dashboard-companion/client.js.map +1 -0
  452. package/dist/dashboard-companion/config.d.ts +8 -0
  453. package/dist/dashboard-companion/config.js +52 -0
  454. package/dist/dashboard-companion/config.js.map +1 -0
  455. package/dist/dashboard-companion/http-proxy.d.ts +10 -0
  456. package/dist/dashboard-companion/http-proxy.js +234 -0
  457. package/dist/dashboard-companion/http-proxy.js.map +1 -0
  458. package/dist/dashboard-companion/protocol.d.ts +80 -0
  459. package/dist/dashboard-companion/protocol.js +455 -0
  460. package/dist/dashboard-companion/protocol.js.map +1 -0
  461. package/dist/dashboard-companion/standalone-assets.d.ts +12 -0
  462. package/dist/dashboard-companion/standalone-assets.js +72 -0
  463. package/dist/dashboard-companion/standalone-assets.js.map +1 -0
  464. package/dist/dashboard-companion/standalone-entry.d.ts +1 -0
  465. package/dist/dashboard-companion/standalone-entry.js +17 -0
  466. package/dist/dashboard-companion/standalone-entry.js.map +1 -0
  467. package/dist/dashboard-gateway/config.d.ts +9 -0
  468. package/dist/dashboard-gateway/config.js +44 -0
  469. package/dist/dashboard-gateway/config.js.map +1 -0
  470. package/dist/dashboard-gateway/index.d.ts +11 -0
  471. package/dist/dashboard-gateway/index.js +755 -0
  472. package/dist/dashboard-gateway/index.js.map +1 -0
  473. package/dist/dashboard-gateway/main.d.ts +1 -0
  474. package/dist/dashboard-gateway/main.js +25 -0
  475. package/dist/dashboard-gateway/main.js.map +1 -0
  476. package/dist/dashboard-pairing-token.d.ts +1 -0
  477. package/dist/dashboard-pairing-token.js +5 -0
  478. package/dist/dashboard-pairing-token.js.map +1 -0
  479. package/dist/elaris/client.d.ts +73 -0
  480. package/dist/elaris/client.js +825 -0
  481. package/dist/elaris/client.js.map +1 -0
  482. package/dist/elaris/config.d.ts +18 -0
  483. package/dist/elaris/config.js +75 -0
  484. package/dist/elaris/config.js.map +1 -0
  485. package/dist/elaris/errors.d.ts +41 -0
  486. package/dist/elaris/errors.js +205 -0
  487. package/dist/elaris/errors.js.map +1 -0
  488. package/dist/elaris/github-repo.d.ts +18 -0
  489. package/dist/elaris/github-repo.js +89 -0
  490. package/dist/elaris/github-repo.js.map +1 -0
  491. package/dist/elaris/index.d.ts +10 -0
  492. package/dist/elaris/index.js +11 -0
  493. package/dist/elaris/index.js.map +1 -0
  494. package/dist/elaris/redact.d.ts +89 -0
  495. package/dist/elaris/redact.js +423 -0
  496. package/dist/elaris/redact.js.map +1 -0
  497. package/dist/elaris/run-id.d.ts +5 -0
  498. package/dist/elaris/run-id.js +20 -0
  499. package/dist/elaris/run-id.js.map +1 -0
  500. package/dist/elaris/status.d.ts +45 -0
  501. package/dist/elaris/status.js +122 -0
  502. package/dist/elaris/status.js.map +1 -0
  503. package/dist/elaris/tool-schemas.d.ts +314 -0
  504. package/dist/elaris/tool-schemas.js +208 -0
  505. package/dist/elaris/tool-schemas.js.map +1 -0
  506. package/dist/elaris/tools.d.ts +73 -0
  507. package/dist/elaris/tools.js +1065 -0
  508. package/dist/elaris/tools.js.map +1 -0
  509. package/dist/elaris/types.d.ts +1541 -0
  510. package/dist/elaris/types.js +252 -0
  511. package/dist/elaris/types.js.map +1 -0
  512. package/dist/errors.d.ts +16 -0
  513. package/dist/errors.js +19 -0
  514. package/dist/errors.js.map +1 -1
  515. package/dist/handler.d.ts +4 -0
  516. package/dist/handler.js +10 -1
  517. package/dist/handler.js.map +1 -1
  518. package/dist/index.d.ts +2 -1
  519. package/dist/index.js +13 -3
  520. package/dist/index.js.map +1 -1
  521. package/dist/local-clink-backend.d.ts +3 -0
  522. package/dist/local-clink-backend.js +4 -0
  523. package/dist/local-clink-backend.js.map +1 -1
  524. package/dist/package-info.d.ts +2 -0
  525. package/dist/package-info.js +18 -0
  526. package/dist/package-info.js.map +1 -0
  527. package/dist/parsers/codex-jsonl.js +48 -3
  528. package/dist/parsers/codex-jsonl.js.map +1 -1
  529. package/dist/parsers/extract.d.ts +10 -1
  530. package/dist/parsers/extract.js +11 -3
  531. package/dist/parsers/extract.js.map +1 -1
  532. package/dist/pipeline.d.ts +4 -0
  533. package/dist/pipeline.js +129 -8
  534. package/dist/pipeline.js.map +1 -1
  535. package/dist/run-dir.d.ts +24 -0
  536. package/dist/run-dir.js +201 -2
  537. package/dist/run-dir.js.map +1 -1
  538. package/dist/runner.d.ts +13 -0
  539. package/dist/runner.js +184 -15
  540. package/dist/runner.js.map +1 -1
  541. package/dist/safety.d.ts +4 -4
  542. package/dist/safety.js +4 -4
  543. package/dist/schema.d.ts +7 -7
  544. package/dist/server.d.ts +1 -0
  545. package/dist/server.js +359 -17
  546. package/dist/server.js.map +1 -1
  547. package/dist/session-log-stream.d.ts +18 -0
  548. package/dist/session-log-stream.js +319 -0
  549. package/dist/session-log-stream.js.map +1 -0
  550. package/package.json +46 -5
  551. package/conf/adapters/gemini.json +0 -44
  552. package/conf/adapters/hapi/gemini.json +0 -47
  553. package/dist/parsers/gemini-json.d.ts +0 -2
  554. package/dist/parsers/gemini-json.js +0 -72
  555. package/dist/parsers/gemini-json.js.map +0 -1
@@ -0,0 +1,289 @@
1
+ import { isAbsolute, win32 } from "node:path";
2
+ import { z } from "zod";
3
+ export const REVIEW_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$/;
4
+ export const REPOSITORY_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*(?:\/[A-Za-z0-9][A-Za-z0-9._-]*)*$/;
5
+ export const PLAN_ID_PATTERN = /^[a-z0-9][a-z0-9-]{0,62}$/;
6
+ export const SHA256_PATTERN = /^[0-9a-f]{64}$/;
7
+ export const MAX_PLAN_REVIEW_REPOSITORY_ID_CHARS = 128;
8
+ export const MAX_PLAN_REVIEW_SEATS = 10;
9
+ export const PLAN_REVIEW_STANCES = [
10
+ "strict",
11
+ "pragmatic",
12
+ "adversarial",
13
+ ];
14
+ export const MAX_RESULT_ENVELOPE_BYTES = 1_048_576;
15
+ export const ReviewIdSchema = z.string().regex(REVIEW_ID_PATTERN);
16
+ export const RepositoryIdSchema = z
17
+ .string()
18
+ .max(MAX_PLAN_REVIEW_REPOSITORY_ID_CHARS)
19
+ .regex(REPOSITORY_ID_PATTERN);
20
+ export const PlanIdSchema = z.string().regex(PLAN_ID_PATTERN);
21
+ export const DigestSchema = z.string().regex(SHA256_PATTERN);
22
+ const PositiveIntegerSchema = z.number().int().min(1).finite();
23
+ const ScoreSchema = z.number().min(0).max(10).finite();
24
+ export const CliNameSchema = z.enum(["codex", "claude", "glm", "agy", "grok"]);
25
+ /**
26
+ * The closed v1 plan-review provider set, derived from `CliNameSchema` so the
27
+ * enum stays the single source of truth: a seat's `cli_name` and the set
28
+ * discovery advertises cannot drift apart.
29
+ *
30
+ * Discovery filters configured adapters through this set. A custom adapter the
31
+ * host happens to have configured is NOT a v1 plan-review provider — admitting
32
+ * it into the roster would fail `CliNameSchema` at contract parse anyway, so
33
+ * advertising it would promise a seat that cannot be bound.
34
+ */
35
+ export const PLAN_REVIEW_V1_CLI_NAMES = CliNameSchema.options;
36
+ const PlanReviewSeatSchema = z
37
+ .object({
38
+ seat_id: ReviewIdSchema,
39
+ reviewer: z.string().min(1),
40
+ cli_name: CliNameSchema,
41
+ stance: z.enum(PLAN_REVIEW_STANCES),
42
+ })
43
+ .strict()
44
+ .refine((seat) => seat.reviewer === seat.cli_name, {
45
+ message: "reviewer must equal cli_name",
46
+ path: ["reviewer"],
47
+ });
48
+ export const CouncilPlanReviewInputSchema = z
49
+ .object({
50
+ schema_version: z.literal("council-plan-review-input-v1"),
51
+ workspace_schema: z.literal("plan-workspace-v1"),
52
+ digest_profile: z.literal("checkpoint-text-v1"),
53
+ review_id: ReviewIdSchema,
54
+ repository_id: RepositoryIdSchema,
55
+ iteration: PositiveIntegerSchema,
56
+ plan_id: PlanIdSchema,
57
+ revision: PositiveIntegerSchema,
58
+ digest: DigestSchema,
59
+ expected_execution_contract_digest: DigestSchema,
60
+ threshold: ScoreSchema,
61
+ designated_editor: z.string().min(1),
62
+ chairman_seat: ReviewIdSchema,
63
+ plan_file: z
64
+ .string()
65
+ .min(1)
66
+ .refine((value) => isAbsolute(value) || win32.isAbsolute(value), "plan_file must be absolute"),
67
+ seats: z.array(PlanReviewSeatSchema).min(1).max(MAX_PLAN_REVIEW_SEATS),
68
+ })
69
+ .strict()
70
+ .superRefine((input, ctx) => {
71
+ const seatIds = new Set();
72
+ for (const [index, seat] of input.seats.entries()) {
73
+ if (seatIds.has(seat.seat_id)) {
74
+ ctx.addIssue({
75
+ code: z.ZodIssueCode.custom,
76
+ message: `Duplicate seat_id: ${seat.seat_id}`,
77
+ path: ["seats", index, "seat_id"],
78
+ });
79
+ }
80
+ seatIds.add(seat.seat_id);
81
+ }
82
+ if (!seatIds.has(input.chairman_seat)) {
83
+ ctx.addIssue({
84
+ code: z.ZodIssueCode.custom,
85
+ message: "chairman_seat must identify one admitted seat",
86
+ path: ["chairman_seat"],
87
+ });
88
+ }
89
+ });
90
+ export const ReviewReceiptV1Schema = z
91
+ .object({
92
+ schema_version: z.literal("review-receipt-v1"),
93
+ workspace_schema: z.literal("plan-workspace-v1"),
94
+ digest_profile: z.literal("checkpoint-text-v1"),
95
+ review_id: ReviewIdSchema,
96
+ repository_id: RepositoryIdSchema,
97
+ iteration: PositiveIntegerSchema,
98
+ plan_id: PlanIdSchema,
99
+ revision: PositiveIntegerSchema,
100
+ digest: DigestSchema,
101
+ seat_id: ReviewIdSchema,
102
+ reviewer: z.string().min(1),
103
+ status: z.enum(["completed", "failed"]),
104
+ verdict: z.enum(["approve", "request_changes", "abstain"]),
105
+ score: ScoreSchema,
106
+ blockers: z.array(z.string().min(1)),
107
+ verification_gaps: z.array(z.string().min(1)),
108
+ findings: z.array(z.string().min(1)),
109
+ })
110
+ .strict();
111
+ const ResultBindingsSchema = z
112
+ .object({
113
+ repository_id: RepositoryIdSchema,
114
+ review_id: ReviewIdSchema,
115
+ plan_id: PlanIdSchema,
116
+ revision: PositiveIntegerSchema,
117
+ digest: DigestSchema,
118
+ threshold: ScoreSchema,
119
+ designated_editor: z.string().min(1),
120
+ chairman_seat: ReviewIdSchema,
121
+ })
122
+ .strict();
123
+ export const PlanReviewErrorReasonSchema = z.enum([
124
+ "timeout",
125
+ "nonzero_exit",
126
+ "invalid_output",
127
+ "schema_mismatch",
128
+ "no_artifact",
129
+ "cancelled",
130
+ "internal_error",
131
+ ]);
132
+ const SeatErrorSchema = z
133
+ .object({
134
+ reason: PlanReviewErrorReasonSchema,
135
+ detail: z.string().max(2_048).optional(),
136
+ })
137
+ .strict();
138
+ const ResultSeatIdentityShape = {
139
+ seat_id: ReviewIdSchema,
140
+ internal_call_id: z.string().regex(/^seat_[0-9]{3,}$/),
141
+ reviewer: z.string().min(1),
142
+ cli_name: CliNameSchema,
143
+ };
144
+ const ResultSeatSchema = z.discriminatedUnion("execution_status", [
145
+ z
146
+ .object({
147
+ ...ResultSeatIdentityShape,
148
+ execution_status: z.literal("completed"),
149
+ receipt_candidate: ReviewReceiptV1Schema,
150
+ })
151
+ .strict(),
152
+ z
153
+ .object({
154
+ ...ResultSeatIdentityShape,
155
+ execution_status: z.literal("failed"),
156
+ error: SeatErrorSchema,
157
+ })
158
+ .strict(),
159
+ z
160
+ .object({
161
+ ...ResultSeatIdentityShape,
162
+ execution_status: z.literal("missing"),
163
+ error: SeatErrorSchema,
164
+ })
165
+ .strict(),
166
+ ]);
167
+ const ChairmanIdentityShape = {
168
+ seat_id: ReviewIdSchema,
169
+ cli_name: CliNameSchema,
170
+ };
171
+ const ChairmanSchema = z.discriminatedUnion("execution_status", [
172
+ z
173
+ .object({
174
+ ...ChairmanIdentityShape,
175
+ execution_status: z.literal("completed"),
176
+ synthesis: z.string().max(65_536),
177
+ })
178
+ .strict(),
179
+ z
180
+ .object({
181
+ ...ChairmanIdentityShape,
182
+ execution_status: z.literal("failed"),
183
+ })
184
+ .strict(),
185
+ z
186
+ .object({
187
+ ...ChairmanIdentityShape,
188
+ execution_status: z.literal("skipped"),
189
+ })
190
+ .strict(),
191
+ ]);
192
+ export const CouncilPlanReviewResultSchema = z
193
+ .object({
194
+ schema_version: z.literal("council-plan-review-result-v1"),
195
+ execution_contract_digest: DigestSchema,
196
+ execution_status: z.enum(["complete", "partial"]),
197
+ bindings: ResultBindingsSchema,
198
+ seats: z.array(ResultSeatSchema).min(1).max(10),
199
+ chairman: ChairmanSchema,
200
+ })
201
+ .strict()
202
+ .superRefine((result, ctx) => {
203
+ const allSeatsCompleted = result.seats.every((seat) => seat.execution_status === "completed");
204
+ const expectedStatus = allSeatsCompleted ? "complete" : "partial";
205
+ if (result.execution_status !== expectedStatus) {
206
+ ctx.addIssue({
207
+ code: z.ZodIssueCode.custom,
208
+ message: `execution_status must be ${expectedStatus}`,
209
+ path: ["execution_status"],
210
+ });
211
+ }
212
+ const seatIds = new Set();
213
+ const callIds = new Set();
214
+ for (const [index, seat] of result.seats.entries()) {
215
+ if (seatIds.has(seat.seat_id)) {
216
+ ctx.addIssue({
217
+ code: z.ZodIssueCode.custom,
218
+ message: `Duplicate seat_id: ${seat.seat_id}`,
219
+ path: ["seats", index, "seat_id"],
220
+ });
221
+ }
222
+ seatIds.add(seat.seat_id);
223
+ if (callIds.has(seat.internal_call_id)) {
224
+ ctx.addIssue({
225
+ code: z.ZodIssueCode.custom,
226
+ message: `Duplicate internal_call_id: ${seat.internal_call_id}`,
227
+ path: ["seats", index, "internal_call_id"],
228
+ });
229
+ }
230
+ callIds.add(seat.internal_call_id);
231
+ if (seat.reviewer !== seat.cli_name) {
232
+ ctx.addIssue({
233
+ code: z.ZodIssueCode.custom,
234
+ message: "reviewer must equal cli_name",
235
+ path: ["seats", index, "reviewer"],
236
+ });
237
+ }
238
+ if (seat.execution_status === "completed") {
239
+ const receipt = seat.receipt_candidate;
240
+ const bindingMismatches = [
241
+ receipt.repository_id !== result.bindings.repository_id,
242
+ receipt.review_id !== result.bindings.review_id,
243
+ receipt.plan_id !== result.bindings.plan_id,
244
+ receipt.revision !== result.bindings.revision,
245
+ receipt.digest !== result.bindings.digest,
246
+ receipt.seat_id !== seat.seat_id,
247
+ receipt.reviewer !== seat.reviewer,
248
+ ];
249
+ if (bindingMismatches.some(Boolean)) {
250
+ ctx.addIssue({
251
+ code: z.ZodIssueCode.custom,
252
+ message: "receipt_candidate bindings must match the envelope seat and bindings",
253
+ path: ["seats", index, "receipt_candidate"],
254
+ });
255
+ }
256
+ }
257
+ }
258
+ const chairmanSeat = result.seats.find((seat) => seat.seat_id === result.bindings.chairman_seat);
259
+ if (chairmanSeat === undefined) {
260
+ ctx.addIssue({
261
+ code: z.ZodIssueCode.custom,
262
+ message: "bindings.chairman_seat must identify one result seat",
263
+ path: ["bindings", "chairman_seat"],
264
+ });
265
+ }
266
+ if (result.chairman.seat_id !== result.bindings.chairman_seat) {
267
+ ctx.addIssue({
268
+ code: z.ZodIssueCode.custom,
269
+ message: "chairman.seat_id must equal bindings.chairman_seat",
270
+ path: ["chairman", "seat_id"],
271
+ });
272
+ }
273
+ if (chairmanSeat !== undefined &&
274
+ result.chairman.cli_name !== chairmanSeat.cli_name) {
275
+ ctx.addIssue({
276
+ code: z.ZodIssueCode.custom,
277
+ message: "chairman.cli_name must match the bound chairman seat",
278
+ path: ["chairman", "cli_name"],
279
+ });
280
+ }
281
+ if (Buffer.byteLength(JSON.stringify(result), "utf8") >
282
+ MAX_RESULT_ENVELOPE_BYTES) {
283
+ ctx.addIssue({
284
+ code: z.ZodIssueCode.custom,
285
+ message: `Serialized result envelope must not exceed ${String(MAX_RESULT_ENVELOPE_BYTES)} bytes`,
286
+ });
287
+ }
288
+ });
289
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/plan-review/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AACrE,MAAM,CAAC,MAAM,qBAAqB,GAChC,+DAA+D,CAAC;AAClE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,CAAC;AACvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ;IACR,WAAW;IACX,aAAa;CACL,CAAC;AACX,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,EAAE;KACR,GAAG,CAAC,mCAAmC,CAAC;KACxC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC7D,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAC/D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/E;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CAAC,OAAO,CAAC;AAE9D,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;CACpC,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE;IACjD,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC;IACzD,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC/C,SAAS,EAAE,cAAc;IACzB,aAAa,EAAE,kBAAkB;IACjC,SAAS,EAAE,qBAAqB;IAChC,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,YAAY;IACpB,kCAAkC,EAAE,YAAY;IAChD,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,aAAa,EAAE,cAAc;IAC7B,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EACvD,4BAA4B,CAC7B;IACH,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC;CACvE,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,sBAAsB,IAAI,CAAC,OAAO,EAAE;gBAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,+CAA+C;YACxD,IAAI,EAAE,CAAC,eAAe,CAAC;SACxB,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAML,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAC9C,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAChD,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC/C,SAAS,EAAE,cAAc;IACzB,aAAa,EAAE,kBAAkB;IACjC,SAAS,EAAE,qBAAqB;IAChC,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC1D,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrC,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,aAAa,EAAE,kBAAkB;IACjC,SAAS,EAAE,cAAc;IACzB,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAE,YAAY;IACpB,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,aAAa,EAAE,cAAc;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC;IAChD,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC;KACtB,MAAM,CAAC;IACN,MAAM,EAAE,2BAA2B;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,uBAAuB,GAAG;IAC9B,OAAO,EAAE,cAAc;IACvB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACtD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,aAAa;CACf,CAAC;AAEX,MAAM,gBAAgB,GAAG,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;IAChE,CAAC;SACE,MAAM,CAAC;QACN,GAAG,uBAAuB;QAC1B,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACxC,iBAAiB,EAAE,qBAAqB;KACzC,CAAC;SACD,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,GAAG,uBAAuB;QAC1B,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrC,KAAK,EAAE,eAAe;KACvB,CAAC;SACD,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,GAAG,uBAAuB;QAC1B,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,KAAK,EAAE,eAAe;KACvB,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,cAAc;IACvB,QAAQ,EAAE,aAAa;CACf,CAAC;AAEX,MAAM,cAAc,GAAG,CAAC,CAAC,kBAAkB,CAAC,kBAAkB,EAAE;IAC9D,CAAC;SACE,MAAM,CAAC;QACN,GAAG,qBAAqB;QACxB,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;KAClC,CAAC;SACD,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,GAAG,qBAAqB;QACxB,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KACtC,CAAC;SACD,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,GAAG,qBAAqB;QACxB,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KACvC,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC;IACN,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC;IAC1D,yBAAyB,EAAE,YAAY;IACvC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACjD,QAAQ,EAAE,oBAAoB;IAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/C,QAAQ,EAAE,cAAc;CACzB,CAAC;KACD,MAAM,EAAE;KACR,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAC1C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,KAAK,WAAW,CAChD,CAAC;IACF,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,IAAI,MAAM,CAAC,gBAAgB,KAAK,cAAc,EAAE,CAAC;QAC/C,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,4BAA4B,cAAc,EAAE;YACrD,IAAI,EAAE,CAAC,kBAAkB,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,sBAAsB,IAAI,CAAC,OAAO,EAAE;gBAC7C,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;aAClC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,+BAA+B,IAAI,CAAC,gBAAgB,EAAE;gBAC/D,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,kBAAkB,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,8BAA8B;gBACvC,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACvC,MAAM,iBAAiB,GAAG;gBACxB,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,QAAQ,CAAC,aAAa;gBACvD,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,SAAS;gBAC/C,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAC3C,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBAC7C,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;gBACzC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;gBAChC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;aACnC,CAAC;YACF,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,GAAG,CAAC,QAAQ,CAAC;oBACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,sEAAsE;oBAC/E,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC;iBAC5C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,aAAa,CACzD,CAAC;IACF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC9D,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,oDAAoD;YAC7D,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,IACE,YAAY,KAAK,SAAS;QAC1B,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,EAClD,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,sDAAsD;YAC/D,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,IACE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACjD,yBAAyB,EACzB,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,8CAA8C,MAAM,CAAC,yBAAyB,CAAC,QAAQ;SACjG,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,68 @@
1
+ /** Why a body was rejected before it could be canonicalized. */
2
+ export type CheckpointTextRejection = "invalid_utf8" | "contains_nul";
3
+ /** Thrown when input is not admissible checkpoint text (invalid UTF-8 or NUL). */
4
+ export declare class CheckpointTextError extends Error {
5
+ readonly code: CheckpointTextRejection;
6
+ constructor(code: CheckpointTextRejection, message: string);
7
+ }
8
+ /**
9
+ * Canonicalize raw plan bytes into `checkpoint-text-v1` form.
10
+ *
11
+ * @throws {CheckpointTextError} `invalid_utf8` if not valid UTF-8; `contains_nul`
12
+ * if a NUL byte is present. A NUL is valid UTF-8 (U+0000), so it is checked
13
+ * separately from decoding.
14
+ */
15
+ export declare function canonicalizeCheckpointText(input: Uint8Array): Buffer;
16
+ /** Canonical bytes plus their framed digest, computed once. */
17
+ export interface CheckpointDigest {
18
+ canonicalBytes: Buffer;
19
+ digest: string;
20
+ }
21
+ /**
22
+ * Canonicalize `input` and return both the canonical bytes and the framed
23
+ * SHA-256 digest (lowercase hex). Runtime callers that persist the snapshot and
24
+ * bind the digest want both from a single canonicalization pass.
25
+ *
26
+ * @throws {CheckpointTextError} see {@link canonicalizeCheckpointText}.
27
+ */
28
+ export declare function computeCheckpointDigest(input: Uint8Array): CheckpointDigest;
29
+ /**
30
+ * Framed SHA-256 digest (lowercase hex) of `input`'s canonical form.
31
+ *
32
+ * @throws {CheckpointTextError} see {@link canonicalizeCheckpointText}.
33
+ */
34
+ export declare function checkpointTextDigest(input: Uint8Array): string;
35
+ declare const EXECUTION_CONTRACT_DECIMAL: unique symbol;
36
+ /** Explicit integer/decimal value; JavaScript numbers are never admissible. */
37
+ export interface ExecutionContractDecimal {
38
+ readonly value: string;
39
+ readonly [EXECUTION_CONTRACT_DECIMAL]: true;
40
+ }
41
+ /**
42
+ * Narrow recursive input accepted by the execution-contract encoder.
43
+ * `undefined` is allowed only as an object value, where it means an absent
44
+ * optional field. Arrays must contain values, and `null` is never admissible.
45
+ */
46
+ export type ExecutionContractValue = string | boolean | ExecutionContractDecimal | readonly ExecutionContractValue[] | ExecutionContractObject;
47
+ export interface ExecutionContractObject {
48
+ readonly [key: string]: ExecutionContractValue | undefined;
49
+ }
50
+ export type ExecutionContractRejection = "invalid_decimal" | "invalid_unicode" | "null" | "unsupported_type" | "undefined_array_element" | "cyclic_value" | "length_overflow";
51
+ export declare class ExecutionContractEncodingError extends Error {
52
+ readonly code: ExecutionContractRejection;
53
+ constructor(code: ExecutionContractRejection, message: string);
54
+ }
55
+ /**
56
+ * Construct a canonical integer/decimal value without admitting imprecise JS
57
+ * numbers. `-0` is the sole non-canonical spelling normalized on input.
58
+ */
59
+ export declare function executionContractDecimal(value: string): ExecutionContractDecimal;
60
+ /** Encode one normalized execution contract using the pinned recursive grammar. */
61
+ export declare function canonicalizeExecutionContract(input: ExecutionContractObject): Buffer;
62
+ export interface ExecutionContractDigest {
63
+ canonicalBytes: Buffer;
64
+ digest: string;
65
+ }
66
+ /** Return the canonical bytes and SHA-256 digest of one normalized contract. */
67
+ export declare function computeExecutionContractDigest(input: ExecutionContractObject): ExecutionContractDigest;
68
+ export {};
@@ -0,0 +1,241 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * `checkpoint-text-v1` plan-digest canonicalization and framing.
4
+ *
5
+ * Deep module: callers hand in the raw plan bytes and receive either the
6
+ * canonical bytes (what the runtime persists as the immutable snapshot) or the
7
+ * framed SHA-256 digest (what identity/admission compare against). All UTF-8
8
+ * decoding, control-byte rejection, and newline normalization are hidden here.
9
+ *
10
+ * Canonical form (byte-level; ASCII CR/LF cannot appear inside a multibyte
11
+ * UTF-8 sequence, so byte and code-point views agree):
12
+ * 1. reject if not valid UTF-8
13
+ * 2. reject if it contains a NUL (0x00)
14
+ * 3. CRLF -> LF, then any remaining lone CR -> LF
15
+ * 4. strip trailing LF bytes only (trailing spaces are preserved)
16
+ * 5. append exactly one LF
17
+ *
18
+ * Digest = SHA-256(FRAME || canonical_bytes), lowercase hex, where FRAME is the
19
+ * fixed 27 bytes "checkpoint-text-v1\0PLAN.md\0".
20
+ */
21
+ /** FRAME = "checkpoint-text-v1\0PLAN.md\0" — the exact 27-byte digest prefix. */
22
+ const CHECKPOINT_TEXT_V1_FRAME = Buffer.from("636865636b706f696e742d746578742d763100504c414e2e6d6400", "hex");
23
+ const LF = 0x0a;
24
+ const CR = 0x0d;
25
+ const NUL = 0x00;
26
+ /** Thrown when input is not admissible checkpoint text (invalid UTF-8 or NUL). */
27
+ export class CheckpointTextError extends Error {
28
+ code;
29
+ constructor(code, message) {
30
+ super(message);
31
+ this.name = "CheckpointTextError";
32
+ this.code = code;
33
+ }
34
+ }
35
+ /**
36
+ * Canonicalize raw plan bytes into `checkpoint-text-v1` form.
37
+ *
38
+ * @throws {CheckpointTextError} `invalid_utf8` if not valid UTF-8; `contains_nul`
39
+ * if a NUL byte is present. A NUL is valid UTF-8 (U+0000), so it is checked
40
+ * separately from decoding.
41
+ */
42
+ export function canonicalizeCheckpointText(input) {
43
+ // 1. Strict UTF-8 gate. A fresh fatal decoder throws on any invalid sequence;
44
+ // ignoreBOM keeps a leading BOM as data so canonical bytes stay faithful.
45
+ try {
46
+ new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(input);
47
+ }
48
+ catch {
49
+ throw new CheckpointTextError("invalid_utf8", "checkpoint text is not valid UTF-8");
50
+ }
51
+ // 2. Reject NUL (0x00) — valid UTF-8, so decoding does not catch it.
52
+ if (input.includes(NUL)) {
53
+ throw new CheckpointTextError("contains_nul", "checkpoint text contains a NUL byte");
54
+ }
55
+ // 3. CRLF -> LF and lone CR -> LF in a single pass.
56
+ const out = [];
57
+ for (let i = 0; i < input.length; i++) {
58
+ const byte = input[i];
59
+ if (byte === CR) {
60
+ out.push(LF);
61
+ if (input[i + 1] === LF) {
62
+ i++;
63
+ }
64
+ }
65
+ else {
66
+ out.push(byte);
67
+ }
68
+ }
69
+ // 4. Strip trailing LFs only (never trailing spaces).
70
+ while (out.length > 0 && out[out.length - 1] === LF) {
71
+ out.pop();
72
+ }
73
+ // 5. Append exactly one LF.
74
+ out.push(LF);
75
+ return Buffer.from(out);
76
+ }
77
+ /**
78
+ * Canonicalize `input` and return both the canonical bytes and the framed
79
+ * SHA-256 digest (lowercase hex). Runtime callers that persist the snapshot and
80
+ * bind the digest want both from a single canonicalization pass.
81
+ *
82
+ * @throws {CheckpointTextError} see {@link canonicalizeCheckpointText}.
83
+ */
84
+ export function computeCheckpointDigest(input) {
85
+ const canonicalBytes = canonicalizeCheckpointText(input);
86
+ const digest = createHash("sha256")
87
+ .update(CHECKPOINT_TEXT_V1_FRAME)
88
+ .update(canonicalBytes)
89
+ .digest("hex");
90
+ return { canonicalBytes, digest };
91
+ }
92
+ /**
93
+ * Framed SHA-256 digest (lowercase hex) of `input`'s canonical form.
94
+ *
95
+ * @throws {CheckpointTextError} see {@link canonicalizeCheckpointText}.
96
+ */
97
+ export function checkpointTextDigest(input) {
98
+ return computeCheckpointDigest(input).digest;
99
+ }
100
+ const EXECUTION_CONTRACT_TAG = {
101
+ string: 0x01,
102
+ decimal: 0x02,
103
+ bool: 0x03,
104
+ array: 0x04,
105
+ object: 0x05,
106
+ };
107
+ const EXECUTION_CONTRACT_DECIMAL = Symbol("execution-contract-decimal");
108
+ const MAX_U64 = (1n << 64n) - 1n;
109
+ const CANONICAL_DECIMAL = /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*[1-9])?$/;
110
+ export class ExecutionContractEncodingError extends Error {
111
+ code;
112
+ constructor(code, message) {
113
+ super(message);
114
+ this.name = "ExecutionContractEncodingError";
115
+ this.code = code;
116
+ }
117
+ }
118
+ function canonicalDecimalString(value) {
119
+ if (typeof value !== "string") {
120
+ throw new ExecutionContractEncodingError("invalid_decimal", "execution-contract decimals must be strings");
121
+ }
122
+ const canonical = value === "-0" ? "0" : value;
123
+ if (!CANONICAL_DECIMAL.test(canonical)) {
124
+ throw new ExecutionContractEncodingError("invalid_decimal", `invalid canonical execution-contract decimal: ${JSON.stringify(value)}`);
125
+ }
126
+ return canonical;
127
+ }
128
+ /**
129
+ * Construct a canonical integer/decimal value without admitting imprecise JS
130
+ * numbers. `-0` is the sole non-canonical spelling normalized on input.
131
+ */
132
+ export function executionContractDecimal(value) {
133
+ const canonical = canonicalDecimalString(value);
134
+ return Object.freeze({
135
+ value: canonical,
136
+ [EXECUTION_CONTRACT_DECIMAL]: true,
137
+ });
138
+ }
139
+ function u64(value) {
140
+ const bigint = BigInt(value);
141
+ if (!Number.isSafeInteger(value) || value < 0 || bigint > MAX_U64) {
142
+ throw new ExecutionContractEncodingError("length_overflow", "execution-contract frame length exceeds u64");
143
+ }
144
+ const encoded = Buffer.allocUnsafe(8);
145
+ encoded.writeBigUInt64BE(bigint);
146
+ return encoded;
147
+ }
148
+ function framed(tag, payload) {
149
+ return Buffer.concat([Buffer.from([tag]), u64(payload.length), payload]);
150
+ }
151
+ function assertUnicodeScalarString(value, label) {
152
+ for (let index = 0; index < value.length; index++) {
153
+ const code = value.charCodeAt(index);
154
+ if (code >= 0xd800 && code <= 0xdbff) {
155
+ const next = value.charCodeAt(index + 1);
156
+ if (next < 0xdc00 || next > 0xdfff) {
157
+ throw new ExecutionContractEncodingError("invalid_unicode", `${label} contains an unpaired UTF-16 surrogate`);
158
+ }
159
+ index++;
160
+ }
161
+ else if (code >= 0xdc00 && code <= 0xdfff) {
162
+ throw new ExecutionContractEncodingError("invalid_unicode", `${label} contains an unpaired UTF-16 surrogate`);
163
+ }
164
+ }
165
+ }
166
+ function isDecimal(value) {
167
+ return value[EXECUTION_CONTRACT_DECIMAL] === true;
168
+ }
169
+ function encodeExecutionContractValue(value, active) {
170
+ if (typeof value === "string") {
171
+ assertUnicodeScalarString(value, "execution-contract string");
172
+ return framed(EXECUTION_CONTRACT_TAG.string, Buffer.from(value, "utf8"));
173
+ }
174
+ if (typeof value === "boolean") {
175
+ return Buffer.from([EXECUTION_CONTRACT_TAG.bool, value ? 0x01 : 0x00]);
176
+ }
177
+ if (value === null) {
178
+ throw new ExecutionContractEncodingError("null", "null is not an execution-contract value; omit absent optional fields");
179
+ }
180
+ if (typeof value !== "object") {
181
+ throw new ExecutionContractEncodingError("unsupported_type", `unsupported execution-contract value type: ${typeof value}`);
182
+ }
183
+ if (isDecimal(value)) {
184
+ return framed(EXECUTION_CONTRACT_TAG.decimal, Buffer.from(canonicalDecimalString(value.value), "utf8"));
185
+ }
186
+ if (active.has(value)) {
187
+ throw new ExecutionContractEncodingError("cyclic_value", "execution-contract values must be acyclic");
188
+ }
189
+ active.add(value);
190
+ try {
191
+ if (Array.isArray(value)) {
192
+ const elements = [];
193
+ for (let index = 0; index < value.length; index++) {
194
+ const element = value[index];
195
+ if (!(index in value) || element === undefined) {
196
+ throw new ExecutionContractEncodingError("undefined_array_element", "undefined array elements are not execution-contract values");
197
+ }
198
+ const encoded = encodeExecutionContractValue(element, active);
199
+ elements.push(Buffer.concat([u64(encoded.length), encoded]));
200
+ }
201
+ return framed(EXECUTION_CONTRACT_TAG.array, Buffer.concat(elements));
202
+ }
203
+ const prototype = Object.getPrototypeOf(value);
204
+ if (prototype !== Object.prototype && prototype !== null) {
205
+ throw new ExecutionContractEncodingError("unsupported_type", "execution-contract objects must be plain records");
206
+ }
207
+ const pairs = Object.entries(value)
208
+ .filter((entry) => entry[1] !== undefined)
209
+ .map(([key, member]) => {
210
+ assertUnicodeScalarString(key, "execution-contract object key");
211
+ return { key, keyBytes: Buffer.from(key, "utf8"), member };
212
+ })
213
+ .sort((left, right) => Buffer.compare(left.keyBytes, right.keyBytes))
214
+ .map(({ key, member }) => {
215
+ const encodedKey = framed(EXECUTION_CONTRACT_TAG.string, Buffer.from(key, "utf8"));
216
+ const encodedValue = encodeExecutionContractValue(member, active);
217
+ return Buffer.concat([
218
+ u64(encodedKey.length),
219
+ encodedKey,
220
+ u64(encodedValue.length),
221
+ encodedValue,
222
+ ]);
223
+ });
224
+ const payload = Buffer.concat([u64(pairs.length), ...pairs]);
225
+ return framed(EXECUTION_CONTRACT_TAG.object, payload);
226
+ }
227
+ finally {
228
+ active.delete(value);
229
+ }
230
+ }
231
+ /** Encode one normalized execution contract using the pinned recursive grammar. */
232
+ export function canonicalizeExecutionContract(input) {
233
+ return encodeExecutionContractValue(input, new Set());
234
+ }
235
+ /** Return the canonical bytes and SHA-256 digest of one normalized contract. */
236
+ export function computeExecutionContractDigest(input) {
237
+ const canonicalBytes = canonicalizeExecutionContract(input);
238
+ const digest = createHash("sha256").update(canonicalBytes).digest("hex");
239
+ return { canonicalBytes, digest };
240
+ }
241
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/plan-review/digest.ts"],"names":[],"mappings":"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"}