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,243 @@
1
+ import { WorkflowError } from "../errors.js";
2
+ import { CouncilPlanReviewExecutionContractSchema, } from "./execution-contract.js";
3
+ const STAGE_IDS = [
4
+ "reviewers",
5
+ "cross_review",
6
+ "ranking_analysis",
7
+ "chairman",
8
+ ];
9
+ /**
10
+ * Delimits the inlined snapshot. Long and fixed on purpose: the plan is
11
+ * untrusted text that may itself contain markdown fences, and an actor must be
12
+ * able to tell where the bound revision ends and its instructions resume.
13
+ */
14
+ export const PLAN_SNAPSHOT_BEGIN = "-----BEGIN PLAN SNAPSHOT-----";
15
+ export const PLAN_SNAPSHOT_END = "-----END PLAN SNAPSHOT-----";
16
+ /**
17
+ * The exact snapshot block appended to every actor's prompt.
18
+ *
19
+ * Exported because it is the only thing a PERSISTED prepared input can be
20
+ * checked against on resume (D9). A resumed retry replays its persisted prompt
21
+ * verbatim — the expander never runs again for it — so the resume seam must
22
+ * re-derive these exact bytes and require them to be present. Two renderings
23
+ * would let the check pass against text no actor was ever sent.
24
+ *
25
+ * The result is appended by the ENGINE, after `renderCallPrompt` — never
26
+ * concatenated into a call's `prompt` template. See
27
+ * `NormalizedCall.plan_review_snapshot_text`: the plan is untrusted text that
28
+ * may contain `{{...}}`, and the renderer would rewrite or reject it.
29
+ */
30
+ export function renderPlanSnapshotBlock(planSnapshotText) {
31
+ return `\n\n## Plan snapshot (the bound revision under review)\n${PLAN_SNAPSHOT_BEGIN}\n${planSnapshotText}\n${PLAN_SNAPSHOT_END}`;
32
+ }
33
+ const NON_SEMANTIC_REVIEW_FIELDS = new Set([
34
+ "schema_version",
35
+ "workspace_schema",
36
+ "digest_profile",
37
+ "repository_id",
38
+ "review_id",
39
+ "iteration",
40
+ "plan_id",
41
+ "revision",
42
+ "digest",
43
+ "seat_id",
44
+ "reviewer",
45
+ "cli_name",
46
+ "internal_call_id",
47
+ "cross_review_call_id",
48
+ ]);
49
+ /** Remove plan/seat/provider bindings before a peer artifact is cross-reviewed. */
50
+ export function projectPlanReviewSemanticBody(value) {
51
+ if (value == null || typeof value !== "object")
52
+ return value;
53
+ if (Array.isArray(value)) {
54
+ return value.map((item) => projectPlanReviewSemanticBody(item));
55
+ }
56
+ const projected = {};
57
+ for (const [key, child] of Object.entries(value)) {
58
+ if (!NON_SEMANTIC_REVIEW_FIELDS.has(key)) {
59
+ projected[key] = projectPlanReviewSemanticBody(child);
60
+ }
61
+ }
62
+ return projected;
63
+ }
64
+ function requireSeedStage(definition, id) {
65
+ const stage = definition.stages.find((candidate) => candidate.id === id);
66
+ if (stage === undefined) {
67
+ throw new WorkflowError(`Plan-review expander: missing stage "${id}"`);
68
+ }
69
+ if (stage.calls.length !== 1) {
70
+ throw new WorkflowError(`Plan-review expander: stage "${id}" must contain exactly one seed call`);
71
+ }
72
+ return stage;
73
+ }
74
+ function copyStage(stage, calls, policy) {
75
+ return {
76
+ id: stage.id,
77
+ ...(stage.description !== undefined ? { description: stage.description } : {}),
78
+ parallel: policy?.parallel ?? stage.parallel,
79
+ retry: stage.retry,
80
+ on_failure: policy?.on_failure ?? stage.on_failure,
81
+ calls,
82
+ };
83
+ }
84
+ /**
85
+ * A RUNTIME shape check on the snapshot — deliberately not "belt and braces".
86
+ *
87
+ * Neither package typechecks its tests (both tsconfigs are `include: ["src"]`,
88
+ * and vitest transpiles without checking), so the parameter's type alone is
89
+ * IDE-only theater: a test could hand this function a pathname forever and the
90
+ * gate would stay green. That is not hypothetical — four test sites did exactly
91
+ * that. The type documents the contract for a reader; this guard is what makes
92
+ * a violation FAIL under `npm test`.
93
+ */
94
+ function assertVerifiedSnapshot(snapshot) {
95
+ if (snapshot === undefined)
96
+ return;
97
+ if (typeof snapshot !== "object" || snapshot === null ||
98
+ typeof snapshot.text !== "string" || snapshot.text.length === 0) {
99
+ throw new WorkflowError("Plan-review expander: planSnapshot must be a verified CanonicalPlanSnapshot " +
100
+ "with non-empty `text` (A-6/D9). A pathname or bare string is not a snapshot: " +
101
+ "the expander inlines the plan TEXT and never reads a file.");
102
+ }
103
+ if (!/^[0-9a-f]{64}$/.test(snapshot.planDigest)) {
104
+ throw new WorkflowError("Plan-review expander: planSnapshot.planDigest must be a 64-hex checkpoint-text-v1 " +
105
+ "digest — the snapshot must come from the verified read, never reconstructed.");
106
+ }
107
+ }
108
+ function reviewerPrompt(prompt, seat) {
109
+ return `${prompt}\n\n## Bound review seat\nseat_id: ${seat.seat_id}\nreviewer: ${seat.reviewer}\nstance: ${seat.stance}`;
110
+ }
111
+ /**
112
+ * Expand the isolated four-stage plan-review seed. Existing council expansion
113
+ * is intentionally not reused or mutated.
114
+ */
115
+ export function expandCouncilPlanReview(definition, contractInput,
116
+ /**
117
+ * The verified canonical plan snapshot (A-6/D9), inlined into every actor's
118
+ * prompt. Inlining TEXT rather than naming a path is what keeps D9 true now
119
+ * that actors run adapter-default: a path is a mutable thing an actor could
120
+ * re-read (or re-write) after verification, whereas the prompt bytes are
121
+ * fixed at dispatch.
122
+ *
123
+ * This takes the verified `CanonicalPlanSnapshot` rather than a bare `string`
124
+ * ON PURPOSE. A bare string accepts a PATHNAME just as happily as plan text,
125
+ * and a pathname would inline the path — reintroducing exactly the mutable
126
+ * indirection D9 exists to remove — while every existing test still passed,
127
+ * because none asserted on the rendered prompt. The nominal type makes that
128
+ * mistake unrepresentable for a reader; `assertVerifiedSnapshot` below makes
129
+ * it fail for the test suite.
130
+ */
131
+ planSnapshot) {
132
+ assertVerifiedSnapshot(planSnapshot);
133
+ if (definition.name !== "plan-review-receipts") {
134
+ throw new WorkflowError(`Plan-review expander cannot expand workflow "${definition.name}"`);
135
+ }
136
+ if (definition.stages.length !== STAGE_IDS.length ||
137
+ definition.stages.some((stage, index) => stage.id !== STAGE_IDS[index])) {
138
+ throw new WorkflowError(`Plan-review expander requires stages in order: ${STAGE_IDS.join(", ")}`);
139
+ }
140
+ const contract = CouncilPlanReviewExecutionContractSchema.parse(contractInput);
141
+ const reviewersSeed = requireSeedStage(definition, "reviewers");
142
+ const crossReviewSeed = requireSeedStage(definition, "cross_review");
143
+ const rankingSeed = requireSeedStage(definition, "ranking_analysis");
144
+ const chairmanSeed = requireSeedStage(definition, "chairman");
145
+ const reviewerBlueprint = reviewersSeed.calls[0];
146
+ const crossReviewBlueprint = crossReviewSeed.calls[0];
147
+ const rankingCall = rankingSeed.calls[0];
148
+ const chairmanBlueprint = chairmanSeed.calls[0];
149
+ if (rankingCall.reducer === undefined) {
150
+ throw new WorkflowError("Plan-review expander: ranking_analysis must use a deterministic reducer");
151
+ }
152
+ /**
153
+ * A-6/D9: the verified snapshot is the ONLY plan text an actor receives.
154
+ *
155
+ * `absolute_file_paths: []` is SET, not merged, and that is the load-bearing
156
+ * half of this function. A seed blueprint that named the original plan would
157
+ * otherwise be re-admitted here and hand actors a MUTABLE plan alongside the
158
+ * inlined snapshot — silently retracting the exact decision the inlining
159
+ * exists to preserve. Emptying the list is what makes the snapshot the only
160
+ * plan text, now that it no longer occupies the file slot itself.
161
+ *
162
+ * The snapshot is attached as `plan_review_snapshot_text` DATA and is
163
+ * deliberately NOT concatenated into `prompt`. `prompt` is a template the
164
+ * engine renders; a plan is untrusted text that may contain `{{...}}`, so
165
+ * splicing it in would let the renderer rewrite the verified bytes (D9
166
+ * violation) or throw on a legitimate plan. The engine appends the block
167
+ * after rendering, so the actor gets the snapshot verbatim. Both halves are
168
+ * set together here, keeping "this call is an actor" ONE decision made in ONE
169
+ * place.
170
+ *
171
+ * ## On-disk footprint: duplicated per actor, and that is NOT new
172
+ *
173
+ * State this honestly, because it is easy to get backwards. The snapshot text
174
+ * IS copied into every actor call, and the whole normalized definition IS
175
+ * persisted — `WorkflowStateStore.create` writes it to `workflow.snapshot.json`
176
+ * and `resume` reads it back hash-verified (`state.ts:696-700,803-808`). So at
177
+ * a 6-seat roster with a 512 KiB plan this is ~6.6 MB on disk. It is NOT the
178
+ * case that "the definition is not persisted".
179
+ *
180
+ * This is nonetheless not a regression: the previous design spliced the same
181
+ * snapshot bytes into each `call.prompt`, which lands in the same persisted
182
+ * definition. The footprint is BYTE-IDENTICAL — the bytes moved fields, not
183
+ * volume. That, and only that, is the justification for accepting it here.
184
+ */
185
+ const withSnapshotText = (call) => planSnapshot === undefined
186
+ ? call
187
+ : {
188
+ ...call,
189
+ absolute_file_paths: [],
190
+ plan_review_snapshot_text: planSnapshot.text,
191
+ };
192
+ const reviewerCalls = contract.seats.map((seat) => withSnapshotText({
193
+ ...reviewerBlueprint,
194
+ id: seat.internal_call_id,
195
+ cli_name: seat.cli_name,
196
+ prompt: reviewerPrompt(reviewerBlueprint.prompt, seat),
197
+ }));
198
+ const globalAliases = Object.fromEntries(contract.seats.map((seat, index) => [
199
+ `reviewers.${seat.internal_call_id}`,
200
+ `candidate_${String(index).padStart(3, "0")}`,
201
+ ]));
202
+ const crossReviewCalls = contract.seats.map((seat) => {
203
+ if (seat.cross_review_call_id === undefined) {
204
+ throw new WorkflowError(`Plan-review expander: seat "${seat.seat_id}" has no cross-review call mapping`);
205
+ }
206
+ return withSnapshotText({
207
+ ...crossReviewBlueprint,
208
+ id: seat.cross_review_call_id,
209
+ cli_name: seat.cli_name,
210
+ context_from: contract.seats
211
+ .filter((peer) => peer.seat_id !== seat.seat_id)
212
+ .map((peer) => `reviewers.${peer.internal_call_id}`),
213
+ anonymize_context: true,
214
+ plan_review_semantic_context: true,
215
+ plan_review_anonymous_aliases: Object.fromEntries(Object.entries(globalAliases).filter(([reference]) => reference !== `reviewers.${seat.internal_call_id}`)),
216
+ });
217
+ });
218
+ const chairmanSeat = contract.seats.find((seat) => seat.seat_id === contract.chairman_seat);
219
+ const chairmanCall = withSnapshotText({
220
+ ...chairmanBlueprint,
221
+ cli_name: chairmanSeat.cli_name,
222
+ });
223
+ return {
224
+ name: definition.name,
225
+ description: definition.description,
226
+ version: definition.version,
227
+ variables: definition.variables,
228
+ settings: definition.settings,
229
+ stages: [
230
+ copyStage(reviewersSeed, reviewerCalls, {
231
+ parallel: true,
232
+ on_failure: "continue",
233
+ }),
234
+ copyStage(crossReviewSeed, crossReviewCalls, {
235
+ parallel: true,
236
+ on_failure: "continue",
237
+ }),
238
+ copyStage(rankingSeed, [rankingCall]),
239
+ copyStage(chairmanSeed, [chairmanCall]),
240
+ ],
241
+ };
242
+ }
243
+ //# sourceMappingURL=expander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expander.js","sourceRoot":"","sources":["../../src/plan-review/expander.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * C-2/C-3 — the deterministic plan-review projector.
3
+ *
4
+ * This module answers exactly one question: given what a run DURABLY persisted,
5
+ * what `council-plan-review-result-v1` envelope does that run project? It never
6
+ * decides approval, never repairs a receipt, and never invents a seat.
7
+ *
8
+ * The split is load-bearing:
9
+ *
10
+ * - {@link projectCouncilPlanReviewResult} is PURE. It takes observations and
11
+ * returns an envelope. No filesystem, no clock, no adapter registry. Every
12
+ * projection rule (roster order, trusted identity, complete-vs-partial, the
13
+ * 1 MiB ceiling) is testable without touching disk.
14
+ * - {@link projectPlanReviewRun} is the bounded I/O adapter. It is the ONLY
15
+ * part that reads, and it reads exclusively through the shared C-1
16
+ * no-follow contained reader with a byte ceiling.
17
+ *
18
+ * Three invariants the shape enforces rather than documents:
19
+ *
20
+ * 1. IDENTITY IS NEVER MODEL-SOURCED. A seat's `seat_id`/`reviewer`/`cli_name`
21
+ * and every receipt binding come from the normalized execution contract and
22
+ * the persisted mappings. The model contributes only the six semantic fields
23
+ * that `PlanReviewReviewerBodySchema` admits; because that schema is
24
+ * non-strict, an echoed `seat_id`/`digest` is dropped before assembly and
25
+ * cannot reach a candidate.
26
+ * 2. UNREADABLE IS NOT UNTRUE, AND NEITHER IS FABRICATED. Containment, symlink,
27
+ * size, parse, schema, duplicate, and absence failures all project the seat
28
+ * as `missing`/`failed` with a reason. There is no code path from "the
29
+ * artifact was bad" to "here is a receipt".
30
+ * 3. DISPATCH IS NOT VALIDITY. `attemptsConsumed >= 1` is the durable witness
31
+ * that a reviewer was ever dispatched, and it decides ONLY publication
32
+ * eligibility ({@link isPlanReviewPublicationEligible}). It is structurally
33
+ * unavailable to the projection core, which never sees a `CallStateEntry`.
34
+ */
35
+ import { type CouncilPlanReviewResult } from "./contract.js";
36
+ import { type CouncilPlanReviewExecutionContract } from "./execution-contract.js";
37
+ import { type PlanReviewErrorReason } from "./stage-error.js";
38
+ import type { RunState } from "../state-schema.js";
39
+ /**
40
+ * What a run persisted about one seat. `body` is the RAW parsed artifact — the
41
+ * core, not the reader, decides whether it is a usable candidate, so a reader
42
+ * bug cannot promote junk to `completed`.
43
+ */
44
+ export type PlanReviewSeatOutcome = {
45
+ readonly kind: "artifact";
46
+ readonly body: unknown;
47
+ } | {
48
+ readonly kind: "failed";
49
+ readonly reason: PlanReviewErrorReason;
50
+ readonly detail?: string | undefined;
51
+ } | {
52
+ readonly kind: "missing";
53
+ readonly reason: PlanReviewErrorReason;
54
+ readonly detail?: string | undefined;
55
+ };
56
+ export interface PlanReviewSeatObservation {
57
+ readonly seat_id: string;
58
+ readonly outcome: PlanReviewSeatOutcome;
59
+ }
60
+ export type PlanReviewChairmanObservation = {
61
+ readonly kind: "artifact";
62
+ readonly body: unknown;
63
+ } | {
64
+ readonly kind: "failed";
65
+ } | {
66
+ readonly kind: "skipped";
67
+ };
68
+ export interface PlanReviewProjectionInput {
69
+ /** The normalized, digest-bound roster and bindings. The sole identity source. */
70
+ readonly contract: CouncilPlanReviewExecutionContract;
71
+ /**
72
+ * The identity the caller believes it is projecting. Asserted, not trusted:
73
+ * the core recomputes the P0-4 digest from `contract` and refuses to stamp an
74
+ * envelope whose digest the contract does not actually produce.
75
+ */
76
+ readonly execution_contract_digest: string;
77
+ readonly seats: readonly PlanReviewSeatObservation[];
78
+ readonly chairman: PlanReviewChairmanObservation;
79
+ }
80
+ /**
81
+ * Project the envelope from observations alone.
82
+ *
83
+ * Deterministic by construction: output depends only on `input`, and seat order
84
+ * is the contract's roster order — never observation arrival order. An
85
+ * observation for a seat outside the roster cannot appear in the output because
86
+ * the roster, not the observation list, drives iteration.
87
+ *
88
+ * @throws PlanReviewStageError on a digest that is not the contract identity, or
89
+ * an envelope that fails its own compiled contract (including the 1 MiB
90
+ * ceiling). Oversize is an explicit error — never truncation.
91
+ */
92
+ export declare function projectCouncilPlanReviewResult(input: PlanReviewProjectionInput): CouncilPlanReviewResult;
93
+ /**
94
+ * Whether this run ever dispatched a reviewer, and therefore owes a result
95
+ * sidecar (C-5 eligibility).
96
+ *
97
+ * Reads ONLY the durable `attemptsConsumed` witness, never the call's current
98
+ * state: a run that dispatched three seats and then had every one of them fail,
99
+ * time out, or be cancelled still owes an envelope reporting exactly that. The
100
+ * inverse — treating this witness as evidence a candidate exists — is precisely
101
+ * the fabrication this module forbids, which is why the projection core takes
102
+ * observations and cannot see a `CallStateEntry` at all.
103
+ */
104
+ export declare function isPlanReviewPublicationEligible(state: RunState): boolean;
105
+ export interface PlanReviewProjectionSource {
106
+ /** The run directory. Every read is contained to it. */
107
+ readonly runDir: string;
108
+ /** Final persisted state. The adapter reads it; it never writes. */
109
+ readonly state: RunState;
110
+ /** The restored, hash-verified contract (see `resume.ts`). */
111
+ readonly contract: CouncilPlanReviewExecutionContract;
112
+ /** The digest recomputed from that contract. */
113
+ readonly execution_contract_digest: string;
114
+ }
115
+ /**
116
+ * Project a run's envelope from its persisted state and artifacts.
117
+ *
118
+ * The contract is threaded in already-restored (`resume.ts` owns decode +
119
+ * hash-verify + recompute) but is NOT taken on faith: it must be the identity
120
+ * the run persisted, and its roster must agree with the persisted mappings.
121
+ * Otherwise this would happily project a run under a contract it never ran.
122
+ *
123
+ * @throws PlanReviewStageError when the persisted subtree is absent/corrupt, the
124
+ * contract is not the persisted identity, or the projection itself fails.
125
+ */
126
+ export declare function projectPlanReviewRun(source: PlanReviewProjectionSource): Promise<CouncilPlanReviewResult>;