clinkx 0.3.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (669) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/LICENSE +10 -0
  3. package/README.md +154 -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/chairman-knobs.d.ts +24 -0
  12. package/clinkx-workflows/dist/chairman-knobs.js +27 -0
  13. package/clinkx-workflows/dist/chairman-knobs.js.map +1 -0
  14. package/clinkx-workflows/dist/citation-check.d.ts +40 -0
  15. package/clinkx-workflows/dist/citation-check.js +348 -0
  16. package/clinkx-workflows/dist/citation-check.js.map +1 -0
  17. package/clinkx-workflows/dist/clink-client.d.ts +12 -1
  18. package/clinkx-workflows/dist/clink-client.js +56 -5
  19. package/clinkx-workflows/dist/clink-client.js.map +1 -1
  20. package/clinkx-workflows/dist/config.d.ts +173 -16
  21. package/clinkx-workflows/dist/config.js +417 -26
  22. package/clinkx-workflows/dist/config.js.map +1 -1
  23. package/clinkx-workflows/dist/contained-file.d.ts +172 -0
  24. package/clinkx-workflows/dist/contained-file.js +483 -0
  25. package/clinkx-workflows/dist/contained-file.js.map +1 -0
  26. package/clinkx-workflows/dist/context-builder-lifecycle-contract.d.ts +416 -0
  27. package/clinkx-workflows/dist/context-builder-lifecycle-contract.js +328 -0
  28. package/clinkx-workflows/dist/context-builder-lifecycle-contract.js.map +1 -0
  29. package/clinkx-workflows/dist/context-builder-lifecycle-router.d.ts +24 -0
  30. package/clinkx-workflows/dist/context-builder-lifecycle-router.js +39 -0
  31. package/clinkx-workflows/dist/context-builder-lifecycle-router.js.map +1 -0
  32. package/clinkx-workflows/dist/context-cache-key.d.ts +53 -0
  33. package/clinkx-workflows/dist/context-cache-key.js +91 -0
  34. package/clinkx-workflows/dist/context-cache-key.js.map +1 -0
  35. package/clinkx-workflows/dist/context-mode-resolver.d.ts +27 -0
  36. package/clinkx-workflows/dist/context-mode-resolver.js +126 -0
  37. package/clinkx-workflows/dist/context-mode-resolver.js.map +1 -0
  38. package/clinkx-workflows/dist/context-preflight.d.ts +189 -0
  39. package/clinkx-workflows/dist/context-preflight.js +91 -0
  40. package/clinkx-workflows/dist/context-preflight.js.map +1 -0
  41. package/clinkx-workflows/dist/council-execution-policy.d.ts +68 -0
  42. package/clinkx-workflows/dist/council-execution-policy.js +110 -0
  43. package/clinkx-workflows/dist/council-execution-policy.js.map +1 -0
  44. package/clinkx-workflows/dist/council-expander.d.ts +10 -9
  45. package/clinkx-workflows/dist/council-expander.js +20 -10
  46. package/clinkx-workflows/dist/council-expander.js.map +1 -1
  47. package/clinkx-workflows/dist/dashboard/activity-contract.d.ts +5718 -0
  48. package/clinkx-workflows/dist/dashboard/activity-contract.js +157 -0
  49. package/clinkx-workflows/dist/dashboard/activity-contract.js.map +1 -0
  50. package/clinkx-workflows/dist/dashboard/activity-lease.d.ts +25 -0
  51. package/clinkx-workflows/dist/dashboard/activity-lease.js +34 -0
  52. package/clinkx-workflows/dist/dashboard/activity-lease.js.map +1 -0
  53. package/clinkx-workflows/dist/dashboard/activity-reader.d.ts +90 -0
  54. package/clinkx-workflows/dist/dashboard/activity-reader.js +493 -0
  55. package/clinkx-workflows/dist/dashboard/activity-reader.js.map +1 -0
  56. package/clinkx-workflows/dist/dashboard/api-routes.d.ts +40 -0
  57. package/clinkx-workflows/dist/dashboard/api-routes.js +1155 -0
  58. package/clinkx-workflows/dist/dashboard/api-routes.js.map +1 -0
  59. package/clinkx-workflows/dist/dashboard/artifact-index.d.ts +37 -0
  60. package/clinkx-workflows/dist/dashboard/artifact-index.js +145 -0
  61. package/clinkx-workflows/dist/dashboard/artifact-index.js.map +1 -0
  62. package/clinkx-workflows/dist/dashboard/auth/challenge-store.d.ts +31 -0
  63. package/clinkx-workflows/dist/dashboard/auth/challenge-store.js +65 -0
  64. package/clinkx-workflows/dist/dashboard/auth/challenge-store.js.map +1 -0
  65. package/clinkx-workflows/dist/dashboard/auth/controller.d.ts +26 -0
  66. package/clinkx-workflows/dist/dashboard/auth/controller.js +596 -0
  67. package/clinkx-workflows/dist/dashboard/auth/controller.js.map +1 -0
  68. package/clinkx-workflows/dist/dashboard/auth/credential-store.d.ts +60 -0
  69. package/clinkx-workflows/dist/dashboard/auth/credential-store.js +776 -0
  70. package/clinkx-workflows/dist/dashboard/auth/credential-store.js.map +1 -0
  71. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.d.ts +9 -0
  72. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js +44 -0
  73. package/clinkx-workflows/dist/dashboard/auth/enrollment-gate.js.map +1 -0
  74. package/clinkx-workflows/dist/dashboard/auth/session-store.d.ts +17 -0
  75. package/clinkx-workflows/dist/dashboard/auth/session-store.js +77 -0
  76. package/clinkx-workflows/dist/dashboard/auth/session-store.js.map +1 -0
  77. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.d.ts +25 -0
  78. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js +71 -0
  79. package/clinkx-workflows/dist/dashboard/auth/webauthn-service.js.map +1 -0
  80. package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.d.ts +3865 -0
  81. package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.js +69 -0
  82. package/clinkx-workflows/dist/dashboard/context-builder-invocation-contract.js.map +1 -0
  83. package/clinkx-workflows/dist/dashboard/context-run-liveness.d.ts +37 -0
  84. package/clinkx-workflows/dist/dashboard/context-run-liveness.js +49 -0
  85. package/clinkx-workflows/dist/dashboard/context-run-liveness.js.map +1 -0
  86. package/clinkx-workflows/dist/dashboard/context-run-reader.d.ts +256 -0
  87. package/clinkx-workflows/dist/dashboard/context-run-reader.js +1301 -0
  88. package/clinkx-workflows/dist/dashboard/context-run-reader.js.map +1 -0
  89. package/clinkx-workflows/dist/dashboard/contracts.d.ts +28483 -0
  90. package/clinkx-workflows/dist/dashboard/contracts.js +1284 -0
  91. package/clinkx-workflows/dist/dashboard/contracts.js.map +1 -0
  92. package/clinkx-workflows/dist/dashboard/generation.d.ts +14 -0
  93. package/clinkx-workflows/dist/dashboard/generation.js +41 -0
  94. package/clinkx-workflows/dist/dashboard/generation.js.map +1 -0
  95. package/clinkx-workflows/dist/dashboard/index.d.ts +32 -0
  96. package/clinkx-workflows/dist/dashboard/index.js +20 -0
  97. package/clinkx-workflows/dist/dashboard/index.js.map +1 -0
  98. package/clinkx-workflows/dist/dashboard/invocation-contract.d.ts +786 -0
  99. package/clinkx-workflows/dist/dashboard/invocation-contract.js +201 -0
  100. package/clinkx-workflows/dist/dashboard/invocation-contract.js.map +1 -0
  101. package/clinkx-workflows/dist/dashboard/lazy-content.d.ts +114 -0
  102. package/clinkx-workflows/dist/dashboard/lazy-content.js +799 -0
  103. package/clinkx-workflows/dist/dashboard/lazy-content.js.map +1 -0
  104. package/clinkx-workflows/dist/dashboard/native-transcript/contract.d.ts +90 -0
  105. package/clinkx-workflows/dist/dashboard/native-transcript/contract.js +31 -0
  106. package/clinkx-workflows/dist/dashboard/native-transcript/contract.js.map +1 -0
  107. package/clinkx-workflows/dist/dashboard/native-transcript/projection.d.ts +12 -0
  108. package/clinkx-workflows/dist/dashboard/native-transcript/projection.js +286 -0
  109. package/clinkx-workflows/dist/dashboard/native-transcript/projection.js.map +1 -0
  110. package/clinkx-workflows/dist/dashboard/progress-report-contract.d.ts +446 -0
  111. package/clinkx-workflows/dist/dashboard/progress-report-contract.js +221 -0
  112. package/clinkx-workflows/dist/dashboard/progress-report-contract.js.map +1 -0
  113. package/clinkx-workflows/dist/dashboard/progress-report-reader.d.ts +50 -0
  114. package/clinkx-workflows/dist/dashboard/progress-report-reader.js +529 -0
  115. package/clinkx-workflows/dist/dashboard/progress-report-reader.js.map +1 -0
  116. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.d.ts +89 -0
  117. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js +71 -0
  118. package/clinkx-workflows/dist/dashboard/progress-report-status-overlay.js.map +1 -0
  119. package/clinkx-workflows/dist/dashboard/progress-report-status-store.d.ts +29 -0
  120. package/clinkx-workflows/dist/dashboard/progress-report-status-store.js +111 -0
  121. package/clinkx-workflows/dist/dashboard/progress-report-status-store.js.map +1 -0
  122. package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.d.ts +194 -0
  123. package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.js +89 -0
  124. package/clinkx-workflows/dist/dashboard/prompt-builder-library-contract.js.map +1 -0
  125. package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.d.ts +26 -0
  126. package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.js +102 -0
  127. package/clinkx-workflows/dist/dashboard/prompt-builder-library-store.js.map +1 -0
  128. package/clinkx-workflows/dist/dashboard/read-model.d.ts +86 -0
  129. package/clinkx-workflows/dist/dashboard/read-model.js +440 -0
  130. package/clinkx-workflows/dist/dashboard/read-model.js.map +1 -0
  131. package/clinkx-workflows/dist/dashboard/request-admission.d.ts +31 -0
  132. package/clinkx-workflows/dist/dashboard/request-admission.js +130 -0
  133. package/clinkx-workflows/dist/dashboard/request-admission.js.map +1 -0
  134. package/clinkx-workflows/dist/dashboard/scanner.d.ts +78 -0
  135. package/clinkx-workflows/dist/dashboard/scanner.js +1154 -0
  136. package/clinkx-workflows/dist/dashboard/scanner.js.map +1 -0
  137. package/clinkx-workflows/dist/dashboard/server-factory.d.ts +63 -0
  138. package/clinkx-workflows/dist/dashboard/server-factory.js +483 -0
  139. package/clinkx-workflows/dist/dashboard/server-factory.js.map +1 -0
  140. package/clinkx-workflows/dist/dashboard/session-log-contract.d.ts +2778 -0
  141. package/clinkx-workflows/dist/dashboard/session-log-contract.js +506 -0
  142. package/clinkx-workflows/dist/dashboard/session-log-contract.js.map +1 -0
  143. package/clinkx-workflows/dist/dashboard/session-log-identity.d.ts +21 -0
  144. package/clinkx-workflows/dist/dashboard/session-log-identity.js +101 -0
  145. package/clinkx-workflows/dist/dashboard/session-log-identity.js.map +1 -0
  146. package/clinkx-workflows/dist/dashboard/session-log-journal.d.ts +43 -0
  147. package/clinkx-workflows/dist/dashboard/session-log-journal.js +529 -0
  148. package/clinkx-workflows/dist/dashboard/session-log-journal.js.map +1 -0
  149. package/clinkx-workflows/dist/dashboard/session-log-reader.d.ts +61 -0
  150. package/clinkx-workflows/dist/dashboard/session-log-reader.js +378 -0
  151. package/clinkx-workflows/dist/dashboard/session-log-reader.js.map +1 -0
  152. package/clinkx-workflows/dist/dashboard/session-log-redaction.d.ts +14 -0
  153. package/clinkx-workflows/dist/dashboard/session-log-redaction.js +1101 -0
  154. package/clinkx-workflows/dist/dashboard/session-log-redaction.js.map +1 -0
  155. package/clinkx-workflows/dist/dashboard/session-log-retention.d.ts +23 -0
  156. package/clinkx-workflows/dist/dashboard/session-log-retention.js +212 -0
  157. package/clinkx-workflows/dist/dashboard/session-log-retention.js.map +1 -0
  158. package/clinkx-workflows/dist/dashboard/static-responses.d.ts +10 -0
  159. package/clinkx-workflows/dist/dashboard/static-responses.js +94 -0
  160. package/clinkx-workflows/dist/dashboard/static-responses.js.map +1 -0
  161. package/clinkx-workflows/dist/dashboard/worker-lock-observer.d.ts +28 -0
  162. package/clinkx-workflows/dist/dashboard/worker-lock-observer.js +241 -0
  163. package/clinkx-workflows/dist/dashboard/worker-lock-observer.js.map +1 -0
  164. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  165. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  166. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  167. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  168. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  169. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  170. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  171. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  172. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  173. package/clinkx-workflows/dist/dashboard-ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  174. package/clinkx-workflows/dist/dashboard-ui/assets/index-JPHQVtn9.js +106 -0
  175. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  176. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  177. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  178. package/clinkx-workflows/dist/dashboard-ui/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  179. package/clinkx-workflows/dist/dashboard-ui/assets/style-DOMHk-j6.css +1 -0
  180. package/clinkx-workflows/dist/dashboard-ui/contracts/council-plan-review-input-v1.json +158 -0
  181. package/clinkx-workflows/dist/dashboard-ui/index.html +15 -0
  182. package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Mono-OFL.txt +93 -0
  183. package/clinkx-workflows/dist/dashboard-ui/licenses/IBM-Plex-Sans-OFL.txt +93 -0
  184. package/clinkx-workflows/dist/dashboard-ui/licenses/JetBrains-Mono-OFL.txt +93 -0
  185. package/clinkx-workflows/dist/dashboard-ui/licenses/NOTICE.md +32 -0
  186. package/clinkx-workflows/dist/dashboard-ui/theme-init.js +8 -0
  187. package/clinkx-workflows/dist/definition-normalizer.d.ts +19 -0
  188. package/clinkx-workflows/dist/definition-normalizer.js.map +1 -1
  189. package/clinkx-workflows/dist/delegate-finalizer-policy.d.ts +26 -0
  190. package/clinkx-workflows/dist/delegate-finalizer-policy.js +72 -0
  191. package/clinkx-workflows/dist/delegate-finalizer-policy.js.map +1 -0
  192. package/clinkx-workflows/dist/delegate-signature.d.ts +14 -0
  193. package/clinkx-workflows/dist/delegate-signature.js +14 -0
  194. package/clinkx-workflows/dist/delegate-signature.js.map +1 -0
  195. package/clinkx-workflows/dist/delegate-validate.d.ts +108 -0
  196. package/clinkx-workflows/dist/delegate-validate.js +148 -0
  197. package/clinkx-workflows/dist/delegate-validate.js.map +1 -0
  198. package/clinkx-workflows/dist/engine.d.ts +251 -0
  199. package/clinkx-workflows/dist/engine.js +1342 -92
  200. package/clinkx-workflows/dist/engine.js.map +1 -1
  201. package/clinkx-workflows/dist/errors.d.ts +24 -2
  202. package/clinkx-workflows/dist/errors.js +30 -2
  203. package/clinkx-workflows/dist/errors.js.map +1 -1
  204. package/clinkx-workflows/dist/fidelity.d.ts +47 -1
  205. package/clinkx-workflows/dist/fidelity.js +54 -1
  206. package/clinkx-workflows/dist/fidelity.js.map +1 -1
  207. package/clinkx-workflows/dist/fingerprint.d.ts +25 -7
  208. package/clinkx-workflows/dist/fingerprint.js +33 -10
  209. package/clinkx-workflows/dist/fingerprint.js.map +1 -1
  210. package/clinkx-workflows/dist/index.d.ts +19 -0
  211. package/clinkx-workflows/dist/index.js +68 -1
  212. package/clinkx-workflows/dist/index.js.map +1 -1
  213. package/clinkx-workflows/dist/loader.d.ts +9 -3
  214. package/clinkx-workflows/dist/loader.js +92 -21
  215. package/clinkx-workflows/dist/loader.js.map +1 -1
  216. package/clinkx-workflows/dist/logger.d.ts +1 -1
  217. package/clinkx-workflows/dist/logger.js +17 -3
  218. package/clinkx-workflows/dist/logger.js.map +1 -1
  219. package/clinkx-workflows/dist/monotonic-clock.d.ts +19 -0
  220. package/clinkx-workflows/dist/monotonic-clock.js +22 -0
  221. package/clinkx-workflows/dist/monotonic-clock.js.map +1 -0
  222. package/clinkx-workflows/dist/plan-review/admission.d.ts +160 -0
  223. package/clinkx-workflows/dist/plan-review/admission.js +290 -0
  224. package/clinkx-workflows/dist/plan-review/admission.js.map +1 -0
  225. package/clinkx-workflows/dist/plan-review/context-policy.d.ts +55 -0
  226. package/clinkx-workflows/dist/plan-review/context-policy.js +146 -0
  227. package/clinkx-workflows/dist/plan-review/context-policy.js.map +1 -0
  228. package/clinkx-workflows/dist/plan-review/contract.d.ts +763 -0
  229. package/clinkx-workflows/dist/plan-review/contract.js +289 -0
  230. package/clinkx-workflows/dist/plan-review/contract.js.map +1 -0
  231. package/clinkx-workflows/dist/plan-review/digest.d.ts +68 -0
  232. package/clinkx-workflows/dist/plan-review/digest.js +241 -0
  233. package/clinkx-workflows/dist/plan-review/digest.js.map +1 -0
  234. package/clinkx-workflows/dist/plan-review/discovery.d.ts +45 -0
  235. package/clinkx-workflows/dist/plan-review/discovery.js +36 -0
  236. package/clinkx-workflows/dist/plan-review/discovery.js.map +1 -0
  237. package/clinkx-workflows/dist/plan-review/execution-contract.d.ts +298 -0
  238. package/clinkx-workflows/dist/plan-review/execution-contract.js +194 -0
  239. package/clinkx-workflows/dist/plan-review/execution-contract.js.map +1 -0
  240. package/clinkx-workflows/dist/plan-review/expander.d.ts +48 -0
  241. package/clinkx-workflows/dist/plan-review/expander.js +243 -0
  242. package/clinkx-workflows/dist/plan-review/expander.js.map +1 -0
  243. package/clinkx-workflows/dist/plan-review/projector.d.ts +126 -0
  244. package/clinkx-workflows/dist/plan-review/projector.js +437 -0
  245. package/clinkx-workflows/dist/plan-review/projector.js.map +1 -0
  246. package/clinkx-workflows/dist/plan-review/publication.d.ts +95 -0
  247. package/clinkx-workflows/dist/plan-review/publication.js +182 -0
  248. package/clinkx-workflows/dist/plan-review/publication.js.map +1 -0
  249. package/clinkx-workflows/dist/plan-review/ranking-reducer.d.ts +34 -0
  250. package/clinkx-workflows/dist/plan-review/ranking-reducer.js +139 -0
  251. package/clinkx-workflows/dist/plan-review/ranking-reducer.js.map +1 -0
  252. package/clinkx-workflows/dist/plan-review/resume.d.ts +38 -0
  253. package/clinkx-workflows/dist/plan-review/resume.js +122 -0
  254. package/clinkx-workflows/dist/plan-review/resume.js.map +1 -0
  255. package/clinkx-workflows/dist/plan-review/rubric.d.ts +7 -0
  256. package/clinkx-workflows/dist/plan-review/rubric.js +24 -0
  257. package/clinkx-workflows/dist/plan-review/rubric.js.map +1 -0
  258. package/clinkx-workflows/dist/plan-review/run-state.d.ts +398 -0
  259. package/clinkx-workflows/dist/plan-review/run-state.js +183 -0
  260. package/clinkx-workflows/dist/plan-review/run-state.js.map +1 -0
  261. package/clinkx-workflows/dist/plan-review/runtime-policy.d.ts +74 -0
  262. package/clinkx-workflows/dist/plan-review/runtime-policy.js +186 -0
  263. package/clinkx-workflows/dist/plan-review/runtime-policy.js.map +1 -0
  264. package/clinkx-workflows/dist/plan-review/snapshot.d.ts +81 -0
  265. package/clinkx-workflows/dist/plan-review/snapshot.js +170 -0
  266. package/clinkx-workflows/dist/plan-review/snapshot.js.map +1 -0
  267. package/clinkx-workflows/dist/plan-review/stage-error.d.ts +19 -0
  268. package/clinkx-workflows/dist/plan-review/stage-error.js +20 -0
  269. package/clinkx-workflows/dist/plan-review/stage-error.js.map +1 -0
  270. package/clinkx-workflows/dist/post-processors/index.d.ts +20 -0
  271. package/clinkx-workflows/dist/post-processors/index.js +21 -0
  272. package/clinkx-workflows/dist/post-processors/index.js.map +1 -0
  273. package/clinkx-workflows/dist/prompt-budget.d.ts +7 -0
  274. package/clinkx-workflows/dist/prompt-budget.js +7 -1
  275. package/clinkx-workflows/dist/prompt-budget.js.map +1 -1
  276. package/clinkx-workflows/dist/reducers/index.js +2 -0
  277. package/clinkx-workflows/dist/reducers/index.js.map +1 -1
  278. package/clinkx-workflows/dist/roster-contract.d.ts +889 -0
  279. package/clinkx-workflows/dist/roster-contract.js +180 -0
  280. package/clinkx-workflows/dist/roster-contract.js.map +1 -0
  281. package/clinkx-workflows/dist/rosters.d.ts +14 -0
  282. package/clinkx-workflows/dist/rosters.js +169 -0
  283. package/clinkx-workflows/dist/rosters.js.map +1 -0
  284. package/clinkx-workflows/dist/run-health.d.ts +7 -0
  285. package/clinkx-workflows/dist/run-health.js +25 -0
  286. package/clinkx-workflows/dist/run-health.js.map +1 -0
  287. package/clinkx-workflows/dist/run-lock-heartbeat.d.ts +2 -0
  288. package/clinkx-workflows/dist/run-lock-heartbeat.js +3 -0
  289. package/clinkx-workflows/dist/run-lock-heartbeat.js.map +1 -0
  290. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.d.ts +34 -0
  291. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js +74 -0
  292. package/clinkx-workflows/dist/run-summary/cards/council-plan-review.js.map +1 -0
  293. package/clinkx-workflows/dist/run-summary/cards/index.js +5 -0
  294. package/clinkx-workflows/dist/run-summary/cards/index.js.map +1 -1
  295. package/clinkx-workflows/dist/run-summary.d.ts +13 -0
  296. package/clinkx-workflows/dist/run-summary.js +29 -1
  297. package/clinkx-workflows/dist/run-summary.js.map +1 -1
  298. package/clinkx-workflows/dist/schema.d.ts +140 -21
  299. package/clinkx-workflows/dist/schema.js +34 -1
  300. package/clinkx-workflows/dist/schema.js.map +1 -1
  301. package/clinkx-workflows/dist/seed-terms.d.ts +30 -0
  302. package/clinkx-workflows/dist/seed-terms.js +176 -0
  303. package/clinkx-workflows/dist/seed-terms.js.map +1 -0
  304. package/clinkx-workflows/dist/server.d.ts +5 -2
  305. package/clinkx-workflows/dist/server.js +84 -52
  306. package/clinkx-workflows/dist/server.js.map +1 -1
  307. package/clinkx-workflows/dist/shutdown.d.ts +29 -18
  308. package/clinkx-workflows/dist/shutdown.js +90 -64
  309. package/clinkx-workflows/dist/shutdown.js.map +1 -1
  310. package/clinkx-workflows/dist/state-schema.d.ts +61 -0
  311. package/clinkx-workflows/dist/state.d.ts +175 -3
  312. package/clinkx-workflows/dist/state.js +1398 -44
  313. package/clinkx-workflows/dist/state.js.map +1 -1
  314. package/clinkx-workflows/dist/stdio-watchdog.d.ts +52 -0
  315. package/clinkx-workflows/dist/stdio-watchdog.js +212 -0
  316. package/clinkx-workflows/dist/stdio-watchdog.js.map +1 -0
  317. package/clinkx-workflows/dist/transport.d.ts +15 -0
  318. package/clinkx-workflows/dist/transport.js +19 -10
  319. package/clinkx-workflows/dist/transport.js.map +1 -1
  320. package/clinkx-workflows/dist/types.d.ts +20 -2
  321. package/clinkx-workflows/dist/validators/council.d.ts +334 -101
  322. package/clinkx-workflows/dist/validators/council.js +52 -13
  323. package/clinkx-workflows/dist/validators/council.js.map +1 -1
  324. package/clinkx-workflows/dist/validators/index.d.ts +1 -0
  325. package/clinkx-workflows/dist/validators/index.js +3 -0
  326. package/clinkx-workflows/dist/validators/index.js.map +1 -1
  327. package/clinkx-workflows/dist/validators/plan-review.d.ts +398 -0
  328. package/clinkx-workflows/dist/validators/plan-review.js +316 -0
  329. package/clinkx-workflows/dist/validators/plan-review.js.map +1 -0
  330. package/clinkx-workflows/dist/workflow-receipt.js +188 -4
  331. package/clinkx-workflows/dist/workflow-receipt.js.map +1 -1
  332. package/clinkx-workflows/dist/workflow-tools.d.ts +118 -3
  333. package/clinkx-workflows/dist/workflow-tools.js +2110 -175
  334. package/clinkx-workflows/dist/workflow-tools.js.map +1 -1
  335. package/clinkx-workflows/dist/workspace-signature.d.ts +16 -0
  336. package/clinkx-workflows/dist/workspace-signature.js +388 -0
  337. package/clinkx-workflows/dist/workspace-signature.js.map +1 -0
  338. package/clinkx-workflows/templates/council/answer-chairman.txt +3 -0
  339. package/clinkx-workflows/templates/council/answer-cross-reviewer.txt +3 -0
  340. package/clinkx-workflows/templates/council/answer-specialist.txt +5 -1
  341. package/clinkx-workflows/templates/council/chairman.txt +3 -0
  342. package/clinkx-workflows/templates/council/code-review-chairman.txt +16 -0
  343. package/clinkx-workflows/templates/council/code-review-cross-reviewer.txt +7 -1
  344. package/clinkx-workflows/templates/council/code-review-reviewer.txt +22 -3
  345. package/clinkx-workflows/templates/council/debug-chairman.txt +3 -0
  346. package/clinkx-workflows/templates/council/debug-cross-reviewer.txt +3 -0
  347. package/clinkx-workflows/templates/council/debug-debugger.txt +5 -1
  348. package/clinkx-workflows/templates/council/discover-analyst.txt +5 -1
  349. package/clinkx-workflows/templates/council/discover-chairman.txt +3 -0
  350. package/clinkx-workflows/templates/council/discover-cross-reviewer.txt +3 -0
  351. package/clinkx-workflows/templates/council/member.txt +5 -1
  352. package/clinkx-workflows/templates/council/plan-review-chairman.txt +71 -0
  353. package/clinkx-workflows/templates/council/plan-review-cross-reviewer.txt +54 -0
  354. package/clinkx-workflows/templates/council/plan-review-reviewer.txt +63 -0
  355. package/clinkx-workflows/templates/council/reviewer.txt +3 -0
  356. package/clinkx-workflows/templates/plan-review/chairman.txt +48 -0
  357. package/clinkx-workflows/templates/plan-review/cross-review.txt +52 -0
  358. package/clinkx-workflows/templates/plan-review/ranking.txt +16 -0
  359. package/clinkx-workflows/templates/plan-review/reviewer.txt +57 -0
  360. package/clinkx-workflows/workflows/council-answer.yaml +100 -8
  361. package/clinkx-workflows/workflows/council-code-review.yaml +106 -8
  362. package/clinkx-workflows/workflows/council-debug.yaml +100 -8
  363. package/clinkx-workflows/workflows/council-default.yaml +104 -8
  364. package/clinkx-workflows/workflows/council-discover.yaml +100 -8
  365. package/clinkx-workflows/workflows/council-plan-review.yaml +253 -0
  366. package/clinkx-workflows/workflows/plan-review-receipts.yaml +230 -0
  367. package/conf/adapters/agy.json +56 -0
  368. package/conf/adapters/claude.json +12 -0
  369. package/conf/adapters/codex-app-server.json +44 -0
  370. package/conf/adapters/codex.json +14 -2
  371. package/conf/adapters/glm.json +24 -3
  372. package/conf/adapters/grok.json +67 -0
  373. package/conf/adapters/hapi/agy.json +59 -0
  374. package/conf/adapters/hapi/claude.json +12 -0
  375. package/conf/adapters/hapi/codex.json +14 -2
  376. package/conf/adapters/hapi/glm.json +25 -4
  377. package/conf/rosters/default-council.json +21 -0
  378. package/dist/activity-journal.d.ts +56 -0
  379. package/dist/activity-journal.js +706 -0
  380. package/dist/activity-journal.js.map +1 -0
  381. package/dist/allowed-roots.d.ts +41 -0
  382. package/dist/allowed-roots.js +125 -3
  383. package/dist/allowed-roots.js.map +1 -1
  384. package/dist/codex/activity-session-log.d.ts +14 -0
  385. package/dist/codex/activity-session-log.js +206 -0
  386. package/dist/codex/activity-session-log.js.map +1 -0
  387. package/dist/codex/agent-tools.d.ts +23 -0
  388. package/dist/codex/agent-tools.js +1306 -0
  389. package/dist/codex/agent-tools.js.map +1 -0
  390. package/dist/codex/app-server-client.d.ts +79 -0
  391. package/dist/codex/app-server-client.js +593 -0
  392. package/dist/codex/app-server-client.js.map +1 -0
  393. package/dist/codex/app-server-registry.d.ts +407 -0
  394. package/dist/codex/app-server-registry.js +1493 -0
  395. package/dist/codex/app-server-registry.js.map +1 -0
  396. package/dist/codex/client-types.d.ts +115 -0
  397. package/dist/codex/client-types.js +2 -0
  398. package/dist/codex/client-types.js.map +1 -0
  399. package/dist/codex/protocol.d.ts +5375 -0
  400. package/dist/codex/protocol.js +614 -0
  401. package/dist/codex/protocol.js.map +1 -0
  402. package/dist/codex/session.d.ts +263 -0
  403. package/dist/codex/session.js +466 -0
  404. package/dist/codex/session.js.map +1 -0
  405. package/dist/config.d.ts +386 -23
  406. package/dist/config.js +184 -15
  407. package/dist/config.js.map +1 -1
  408. package/dist/context-builder/anchors.d.ts +1 -0
  409. package/dist/context-builder/anchors.js +3 -0
  410. package/dist/context-builder/anchors.js.map +1 -1
  411. package/dist/context-builder/bundle.d.ts +48 -2
  412. package/dist/context-builder/bundle.js +388 -2417
  413. package/dist/context-builder/bundle.js.map +1 -1
  414. package/dist/context-builder/codemap.d.ts +5 -0
  415. package/dist/context-builder/codemap.js +387 -13
  416. package/dist/context-builder/codemap.js.map +1 -1
  417. package/dist/context-builder/config.d.ts +1 -0
  418. package/dist/context-builder/config.js +12 -0
  419. package/dist/context-builder/config.js.map +1 -1
  420. package/dist/context-builder/context-run-catalog.d.ts +17 -0
  421. package/dist/context-builder/context-run-catalog.js +99 -0
  422. package/dist/context-builder/context-run-catalog.js.map +1 -0
  423. package/dist/context-builder/delegate-finalizer-effective.d.ts +33 -0
  424. package/dist/context-builder/delegate-finalizer-effective.js +82 -0
  425. package/dist/context-builder/delegate-finalizer-effective.js.map +1 -0
  426. package/dist/context-builder/delegate-packet.d.ts +55 -0
  427. package/dist/context-builder/delegate-packet.js +430 -74
  428. package/dist/context-builder/delegate-packet.js.map +1 -1
  429. package/dist/context-builder/delegate-reconstruction.d.ts +29 -0
  430. package/dist/context-builder/delegate-reconstruction.js +110 -41
  431. package/dist/context-builder/delegate-reconstruction.js.map +1 -1
  432. package/dist/context-builder/delegate-validation.d.ts +41 -1
  433. package/dist/context-builder/delegate-validation.js +237 -48
  434. package/dist/context-builder/delegate-validation.js.map +1 -1
  435. package/dist/context-builder/delegate.d.ts +11 -0
  436. package/dist/context-builder/delegate.js +210 -58
  437. package/dist/context-builder/delegate.js.map +1 -1
  438. package/dist/context-builder/diagnostics.d.ts +11 -2
  439. package/dist/context-builder/diagnostics.js +39 -6
  440. package/dist/context-builder/diagnostics.js.map +1 -1
  441. package/dist/context-builder/discovery-progress.d.ts +25 -0
  442. package/dist/context-builder/discovery-progress.js +64 -0
  443. package/dist/context-builder/discovery-progress.js.map +1 -0
  444. package/dist/context-builder/discovery-watchdog.d.ts +15 -0
  445. package/dist/context-builder/discovery-watchdog.js +39 -0
  446. package/dist/context-builder/discovery-watchdog.js.map +1 -0
  447. package/dist/context-builder/discovery.d.ts +36 -1
  448. package/dist/context-builder/discovery.js +584 -172
  449. package/dist/context-builder/discovery.js.map +1 -1
  450. package/dist/context-builder/external-gaps.d.ts +73 -0
  451. package/dist/context-builder/external-gaps.js +248 -0
  452. package/dist/context-builder/external-gaps.js.map +1 -0
  453. package/dist/context-builder/globs.d.ts +1 -0
  454. package/dist/context-builder/globs.js +25 -10
  455. package/dist/context-builder/globs.js.map +1 -1
  456. package/dist/context-builder/handler.d.ts +67 -2
  457. package/dist/context-builder/handler.js +1810 -2440
  458. package/dist/context-builder/handler.js.map +1 -1
  459. package/dist/context-builder/invocation-sidecar.d.ts +41 -0
  460. package/dist/context-builder/invocation-sidecar.js +189 -0
  461. package/dist/context-builder/invocation-sidecar.js.map +1 -0
  462. package/dist/context-builder/lifecycle-contract.d.ts +424 -0
  463. package/dist/context-builder/lifecycle-contract.js +523 -0
  464. package/dist/context-builder/lifecycle-contract.js.map +1 -0
  465. package/dist/context-builder/lifecycle-journal.d.ts +62 -0
  466. package/dist/context-builder/lifecycle-journal.js +88 -0
  467. package/dist/context-builder/lifecycle-journal.js.map +1 -0
  468. package/dist/context-builder/lifecycle-observer.d.ts +102 -0
  469. package/dist/context-builder/lifecycle-observer.js +258 -0
  470. package/dist/context-builder/lifecycle-observer.js.map +1 -0
  471. package/dist/context-builder/lifecycle-reconcile.d.ts +32 -0
  472. package/dist/context-builder/lifecycle-reconcile.js +191 -0
  473. package/dist/context-builder/lifecycle-reconcile.js.map +1 -0
  474. package/dist/context-builder/lifecycle-recovery.d.ts +2 -0
  475. package/dist/context-builder/lifecycle-recovery.js +14 -0
  476. package/dist/context-builder/lifecycle-recovery.js.map +1 -0
  477. package/dist/context-builder/mutation-lock.d.ts +32 -0
  478. package/dist/context-builder/mutation-lock.js +321 -0
  479. package/dist/context-builder/mutation-lock.js.map +1 -0
  480. package/dist/context-builder/path-signals.js +9 -5
  481. package/dist/context-builder/path-signals.js.map +1 -1
  482. package/dist/context-builder/progress.d.ts +3 -1
  483. package/dist/context-builder/progress.js +23 -0
  484. package/dist/context-builder/progress.js.map +1 -1
  485. package/dist/context-builder/receipt.d.ts +6 -4
  486. package/dist/context-builder/receipt.js +12 -1
  487. package/dist/context-builder/receipt.js.map +1 -1
  488. package/dist/context-builder/refine-handler.d.ts +14 -0
  489. package/dist/context-builder/refine-handler.js +790 -0
  490. package/dist/context-builder/refine-handler.js.map +1 -0
  491. package/dist/context-builder/review-coverage.d.ts +116 -0
  492. package/dist/context-builder/review-coverage.js +544 -0
  493. package/dist/context-builder/review-coverage.js.map +1 -0
  494. package/dist/context-builder/schema.d.ts +315 -2
  495. package/dist/context-builder/schema.js +133 -7
  496. package/dist/context-builder/schema.js.map +1 -1
  497. package/dist/context-builder/secrets.d.ts +59 -0
  498. package/dist/context-builder/secrets.js +2255 -44
  499. package/dist/context-builder/secrets.js.map +1 -1
  500. package/dist/context-builder/selection.d.ts +7 -3
  501. package/dist/context-builder/selection.js +200 -738
  502. package/dist/context-builder/selection.js.map +1 -1
  503. package/dist/context-builder/session-log-identity.d.ts +1 -0
  504. package/dist/context-builder/session-log-identity.js +66 -0
  505. package/dist/context-builder/session-log-identity.js.map +1 -0
  506. package/dist/context-builder/slice-range-math.d.ts +16 -0
  507. package/dist/context-builder/slice-range-math.js +137 -0
  508. package/dist/context-builder/slice-range-math.js.map +1 -0
  509. package/dist/context-builder/status.d.ts +23 -2
  510. package/dist/context-builder/status.js +60 -4
  511. package/dist/context-builder/status.js.map +1 -1
  512. package/dist/context-builder/storage.d.ts +59 -2
  513. package/dist/context-builder/storage.js +500 -168
  514. package/dist/context-builder/storage.js.map +1 -1
  515. package/dist/context-builder/token-estimate.d.ts +13 -2
  516. package/dist/context-builder/token-estimate.js +77 -4
  517. package/dist/context-builder/token-estimate.js.map +1 -1
  518. package/dist/context-builder/versions.d.ts +44 -0
  519. package/dist/context-builder/versions.js +45 -0
  520. package/dist/context-builder/versions.js.map +1 -0
  521. package/dist/context-builder/workflow-runner.d.ts +75 -0
  522. package/dist/context-builder/workflow-runner.js +1241 -0
  523. package/dist/context-builder/workflow-runner.js.map +1 -0
  524. package/dist/context-builder/write-watchdog.d.ts +14 -0
  525. package/dist/context-builder/write-watchdog.js +38 -0
  526. package/dist/context-builder/write-watchdog.js.map +1 -0
  527. package/dist/dashboard-adapter-catalog.d.ts +9 -0
  528. package/dist/dashboard-adapter-catalog.js +53 -0
  529. package/dist/dashboard-adapter-catalog.js.map +1 -0
  530. package/dist/dashboard-cli.d.ts +81 -0
  531. package/dist/dashboard-cli.js +623 -0
  532. package/dist/dashboard-cli.js.map +1 -0
  533. package/dist/dashboard-companion/client.d.ts +37 -0
  534. package/dist/dashboard-companion/client.js +229 -0
  535. package/dist/dashboard-companion/client.js.map +1 -0
  536. package/dist/dashboard-companion/config.d.ts +8 -0
  537. package/dist/dashboard-companion/config.js +52 -0
  538. package/dist/dashboard-companion/config.js.map +1 -0
  539. package/dist/dashboard-companion/http-proxy.d.ts +10 -0
  540. package/dist/dashboard-companion/http-proxy.js +234 -0
  541. package/dist/dashboard-companion/http-proxy.js.map +1 -0
  542. package/dist/dashboard-companion/protocol.d.ts +80 -0
  543. package/dist/dashboard-companion/protocol.js +458 -0
  544. package/dist/dashboard-companion/protocol.js.map +1 -0
  545. package/dist/dashboard-companion/standalone-assets.d.ts +12 -0
  546. package/dist/dashboard-companion/standalone-assets.js +72 -0
  547. package/dist/dashboard-companion/standalone-assets.js.map +1 -0
  548. package/dist/dashboard-companion/standalone-entry.d.ts +1 -0
  549. package/dist/dashboard-companion/standalone-entry.js +17 -0
  550. package/dist/dashboard-companion/standalone-entry.js.map +1 -0
  551. package/dist/dashboard-gateway/config.d.ts +9 -0
  552. package/dist/dashboard-gateway/config.js +44 -0
  553. package/dist/dashboard-gateway/config.js.map +1 -0
  554. package/dist/dashboard-gateway/index.d.ts +12 -0
  555. package/dist/dashboard-gateway/index.js +786 -0
  556. package/dist/dashboard-gateway/index.js.map +1 -0
  557. package/dist/dashboard-gateway/main.d.ts +1 -0
  558. package/dist/dashboard-gateway/main.js +25 -0
  559. package/dist/dashboard-gateway/main.js.map +1 -0
  560. package/dist/dashboard-pairing-token.d.ts +1 -0
  561. package/dist/dashboard-pairing-token.js +5 -0
  562. package/dist/dashboard-pairing-token.js.map +1 -0
  563. package/dist/elaris/client.d.ts +73 -0
  564. package/dist/elaris/client.js +825 -0
  565. package/dist/elaris/client.js.map +1 -0
  566. package/dist/elaris/config.d.ts +18 -0
  567. package/dist/elaris/config.js +75 -0
  568. package/dist/elaris/config.js.map +1 -0
  569. package/dist/elaris/errors.d.ts +41 -0
  570. package/dist/elaris/errors.js +205 -0
  571. package/dist/elaris/errors.js.map +1 -0
  572. package/dist/elaris/github-repo.d.ts +18 -0
  573. package/dist/elaris/github-repo.js +89 -0
  574. package/dist/elaris/github-repo.js.map +1 -0
  575. package/dist/elaris/index.d.ts +10 -0
  576. package/dist/elaris/index.js +11 -0
  577. package/dist/elaris/index.js.map +1 -0
  578. package/dist/elaris/redact.d.ts +89 -0
  579. package/dist/elaris/redact.js +423 -0
  580. package/dist/elaris/redact.js.map +1 -0
  581. package/dist/elaris/run-id.d.ts +5 -0
  582. package/dist/elaris/run-id.js +20 -0
  583. package/dist/elaris/run-id.js.map +1 -0
  584. package/dist/elaris/status.d.ts +45 -0
  585. package/dist/elaris/status.js +122 -0
  586. package/dist/elaris/status.js.map +1 -0
  587. package/dist/elaris/tool-schemas.d.ts +314 -0
  588. package/dist/elaris/tool-schemas.js +208 -0
  589. package/dist/elaris/tool-schemas.js.map +1 -0
  590. package/dist/elaris/tools.d.ts +73 -0
  591. package/dist/elaris/tools.js +1065 -0
  592. package/dist/elaris/tools.js.map +1 -0
  593. package/dist/elaris/types.d.ts +1541 -0
  594. package/dist/elaris/types.js +252 -0
  595. package/dist/elaris/types.js.map +1 -0
  596. package/dist/errors.d.ts +16 -0
  597. package/dist/errors.js +19 -0
  598. package/dist/errors.js.map +1 -1
  599. package/dist/handler.d.ts +4 -0
  600. package/dist/handler.js +15 -2
  601. package/dist/handler.js.map +1 -1
  602. package/dist/index.d.ts +20 -2
  603. package/dist/index.js +154 -6
  604. package/dist/index.js.map +1 -1
  605. package/dist/local-clink-backend.d.ts +3 -0
  606. package/dist/local-clink-backend.js +4 -0
  607. package/dist/local-clink-backend.js.map +1 -1
  608. package/dist/logger.d.ts +1 -1
  609. package/dist/logger.js +18 -3
  610. package/dist/logger.js.map +1 -1
  611. package/dist/package-info.d.ts +2 -0
  612. package/dist/package-info.js +18 -0
  613. package/dist/package-info.js.map +1 -0
  614. package/dist/parsers/agy-stream-json.d.ts +14 -0
  615. package/dist/parsers/agy-stream-json.js +172 -0
  616. package/dist/parsers/agy-stream-json.js.map +1 -0
  617. package/dist/parsers/codex-jsonl.js +48 -3
  618. package/dist/parsers/codex-jsonl.js.map +1 -1
  619. package/dist/parsers/extract.d.ts +10 -1
  620. package/dist/parsers/extract.js +16 -4
  621. package/dist/parsers/extract.js.map +1 -1
  622. package/dist/parsers/observed-invocation.d.ts +20 -0
  623. package/dist/parsers/observed-invocation.js +42 -0
  624. package/dist/parsers/observed-invocation.js.map +1 -0
  625. package/dist/pipeline.d.ts +17 -0
  626. package/dist/pipeline.js +181 -10
  627. package/dist/pipeline.js.map +1 -1
  628. package/dist/progress-report/lock.d.ts +74 -0
  629. package/dist/progress-report/lock.js +343 -0
  630. package/dist/progress-report/lock.js.map +1 -0
  631. package/dist/progress-report/schema.d.ts +808 -0
  632. package/dist/progress-report/schema.js +119 -0
  633. package/dist/progress-report/schema.js.map +1 -0
  634. package/dist/progress-report/store.d.ts +66 -0
  635. package/dist/progress-report/store.js +766 -0
  636. package/dist/progress-report/store.js.map +1 -0
  637. package/dist/progress-report/tools.d.ts +20 -0
  638. package/dist/progress-report/tools.js +141 -0
  639. package/dist/progress-report/tools.js.map +1 -0
  640. package/dist/prompt-mode.d.ts +1 -1
  641. package/dist/prompt-mode.js +7 -2
  642. package/dist/prompt-mode.js.map +1 -1
  643. package/dist/run-dir.d.ts +24 -0
  644. package/dist/run-dir.js +201 -2
  645. package/dist/run-dir.js.map +1 -1
  646. package/dist/runner.d.ts +20 -0
  647. package/dist/runner.js +192 -16
  648. package/dist/runner.js.map +1 -1
  649. package/dist/safety.d.ts +54 -4
  650. package/dist/safety.js +186 -5
  651. package/dist/safety.js.map +1 -1
  652. package/dist/schema.d.ts +15 -7
  653. package/dist/schema.js +20 -0
  654. package/dist/schema.js.map +1 -1
  655. package/dist/server.d.ts +7 -1
  656. package/dist/server.js +451 -23
  657. package/dist/server.js.map +1 -1
  658. package/dist/session-log-stream.d.ts +18 -0
  659. package/dist/session-log-stream.js +566 -0
  660. package/dist/session-log-stream.js.map +1 -0
  661. package/dist/stdio-activity.d.ts +28 -0
  662. package/dist/stdio-activity.js +72 -0
  663. package/dist/stdio-activity.js.map +1 -0
  664. package/package.json +47 -5
  665. package/conf/adapters/gemini.json +0 -44
  666. package/conf/adapters/hapi/gemini.json +0 -47
  667. package/dist/parsers/gemini-json.d.ts +0 -2
  668. package/dist/parsers/gemini-json.js +0 -72
  669. package/dist/parsers/gemini-json.js.map +0 -1
@@ -0,0 +1,799 @@
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { z } from "zod";
3
+ import { ContainedFileTooLargeError, containedFileFingerprintsEqual, readContainedRelativeFile, } from "../contained-file.js";
4
+ import { validateRunId } from "../run-id.js";
5
+ import { isPlanReviewRunState } from "../plan-review/admission.js";
6
+ import { IdSchema } from "../schema.js";
7
+ import { MAX_RESULT_ENVELOPE_BYTES, } from "../plan-review/contract.js";
8
+ import { PLAN_REVIEW_RESULT_RELPATH, validatePlanReviewPublicationBytes, } from "../plan-review/publication.js";
9
+ import { extractCouncilPlanReviewCard } from "../run-summary/cards/council-plan-review.js";
10
+ import { createValidatorRegistry, } from "../validators/index.js";
11
+ import { DashboardEffortSchema, DashboardModelSchema, DashboardWorkflowInputSchema, MAX_DASHBOARD_ID_CHARS, MAX_DASHBOARD_STAGE_CALL_RECORDS, } from "./contracts.js";
12
+ import { createDashboardRunReader, } from "./read-model.js";
13
+ import { decodeContextBuilderInvocationAuditBytes, MAX_CONTEXT_BUILDER_INVOCATION_AUDIT_BYTES, workflowContextBuilderInvocationAuditRelativePath, } from "./context-builder-invocation-contract.js";
14
+ export const DASHBOARD_WORKFLOW_SNAPSHOT_MAX_BYTES = 2 * 1_024 * 1_024;
15
+ export const DASHBOARD_WORKFLOW_INPUT_MAX_BYTES = 1 * 1_024 * 1_024;
16
+ export const DASHBOARD_LAZY_CONTENT_MAX_BYTES = 2 * 1_024 * 1_024;
17
+ export const MAX_DASHBOARD_CONTEXT_FROM_REFERENCES = 2_000;
18
+ export const MAX_DASHBOARD_CONTEXT_FROM_REFERENCE_CHARS = MAX_DASHBOARD_ID_CHARS * 2 + 1;
19
+ const SnapshotIdSchema = IdSchema.max(MAX_DASHBOARD_ID_CHARS);
20
+ const DashboardSnapshotCallSchema = z.object({
21
+ id: SnapshotIdSchema,
22
+ cli_name: SnapshotIdSchema,
23
+ role: SnapshotIdSchema,
24
+ model: DashboardModelSchema.optional(),
25
+ effort: DashboardEffortSchema.optional(),
26
+ validator_schema_id: z.string().min(1).max(256).optional(),
27
+ context_from: z.array(z.string().min(1).max(MAX_DASHBOARD_CONTEXT_FROM_REFERENCE_CHARS)).max(MAX_DASHBOARD_CONTEXT_FROM_REFERENCES).optional(),
28
+ });
29
+ const DashboardSnapshotStageSchema = z.object({
30
+ id: SnapshotIdSchema,
31
+ description: z.string().min(1).max(256).optional(),
32
+ calls: z.array(DashboardSnapshotCallSchema).max(MAX_DASHBOARD_STAGE_CALL_RECORDS),
33
+ });
34
+ const DashboardWorkflowSnapshotSchema = z.object({
35
+ name: SnapshotIdSchema,
36
+ version: z.string().min(1).max(128),
37
+ stages: z.array(DashboardSnapshotStageSchema).max(MAX_DASHBOARD_STAGE_CALL_RECORDS),
38
+ }).superRefine((snapshot, ctx) => {
39
+ const stageIds = new Set();
40
+ const stageIndexes = new Map();
41
+ let records = snapshot.stages.length;
42
+ for (const [stageIndex, stage] of snapshot.stages.entries()) {
43
+ if (stageIds.has(stage.id)) {
44
+ ctx.addIssue({
45
+ code: z.ZodIssueCode.custom,
46
+ message: "snapshot stage IDs must be unique",
47
+ path: ["stages", stageIndex, "id"],
48
+ });
49
+ }
50
+ stageIds.add(stage.id);
51
+ stageIndexes.set(stage.id, stageIndex);
52
+ }
53
+ let contextReferences = 0;
54
+ for (const [stageIndex, stage] of snapshot.stages.entries()) {
55
+ const callIds = new Set();
56
+ records += stage.calls.length;
57
+ for (const [callIndex, call] of stage.calls.entries()) {
58
+ if (callIds.has(call.id)) {
59
+ ctx.addIssue({
60
+ code: z.ZodIssueCode.custom,
61
+ message: "snapshot call IDs must be unique within a stage",
62
+ path: ["stages", stageIndex, "calls", callIndex, "id"],
63
+ });
64
+ }
65
+ callIds.add(call.id);
66
+ const contextFrom = call.context_from ?? [];
67
+ contextReferences += contextFrom.length;
68
+ const callReferences = new Set();
69
+ for (const [referenceIndex, reference] of contextFrom.entries()) {
70
+ const path = [
71
+ "stages",
72
+ stageIndex,
73
+ "calls",
74
+ callIndex,
75
+ "context_from",
76
+ referenceIndex,
77
+ ];
78
+ if (callReferences.has(reference)) {
79
+ ctx.addIssue({
80
+ code: z.ZodIssueCode.custom,
81
+ message: "context_from references must be unique within a call",
82
+ path,
83
+ });
84
+ continue;
85
+ }
86
+ callReferences.add(reference);
87
+ const parts = reference.split(".");
88
+ if (parts.length > 2 ||
89
+ parts.some((part) => !SnapshotIdSchema.safeParse(part).success)) {
90
+ ctx.addIssue({
91
+ code: z.ZodIssueCode.custom,
92
+ message: "context_from must be a stage ID or stage.call ID",
93
+ path,
94
+ });
95
+ continue;
96
+ }
97
+ const referencedStageId = parts[0];
98
+ const referencedStageIndex = stageIndexes.get(referencedStageId);
99
+ if (referencedStageIndex === undefined || referencedStageIndex >= stageIndex) {
100
+ ctx.addIssue({
101
+ code: z.ZodIssueCode.custom,
102
+ message: "context_from must reference an earlier snapshot stage",
103
+ path,
104
+ });
105
+ continue;
106
+ }
107
+ const referencedCallId = parts[1];
108
+ if (referencedCallId !== undefined &&
109
+ !snapshot.stages[referencedStageIndex].calls.some((candidate) => candidate.id === referencedCallId)) {
110
+ ctx.addIssue({
111
+ code: z.ZodIssueCode.custom,
112
+ message: "context_from references a missing snapshot call",
113
+ path,
114
+ });
115
+ }
116
+ }
117
+ }
118
+ }
119
+ if (records > MAX_DASHBOARD_STAGE_CALL_RECORDS) {
120
+ ctx.addIssue({
121
+ code: z.ZodIssueCode.custom,
122
+ message: "snapshot stage/call limit exceeded",
123
+ path: ["stages"],
124
+ });
125
+ }
126
+ if (contextReferences > MAX_DASHBOARD_CONTEXT_FROM_REFERENCES) {
127
+ ctx.addIssue({
128
+ code: z.ZodIssueCode.custom,
129
+ message: "snapshot context_from reference limit exceeded",
130
+ path: ["stages"],
131
+ });
132
+ }
133
+ });
134
+ function dependencyStageIds(snapshot, stage) {
135
+ const referencedStages = new Set();
136
+ for (const call of stage.calls) {
137
+ for (const reference of call.context_from ?? []) {
138
+ referencedStages.add(reference.split(".", 1)[0]);
139
+ }
140
+ }
141
+ return snapshot.stages
142
+ .map((candidate) => candidate.id)
143
+ .filter((stageId) => referencedStages.has(stageId));
144
+ }
145
+ class SnapshotUnavailableError extends Error {
146
+ reason;
147
+ constructor(reason) {
148
+ super(reason);
149
+ this.reason = reason;
150
+ }
151
+ }
152
+ class DashboardBodyIdentityChangedError extends Error {
153
+ }
154
+ function hasErrorCode(error, code) {
155
+ return error?.code === code;
156
+ }
157
+ function stateGeneration(result) {
158
+ return result.kind === "admitted"
159
+ ? result.runGeneration
160
+ : result.kind === "unavailable"
161
+ ? result.admission?.runGeneration
162
+ : undefined;
163
+ }
164
+ function validateRouteId(id) {
165
+ return SnapshotIdSchema.safeParse(id).success;
166
+ }
167
+ function callByEquality(state, stageId, callId) {
168
+ return state.stages.find((stage) => stage.stageId === stageId)
169
+ ?.calls.find((call) => call.callId === callId);
170
+ }
171
+ function contentResult(content, mediaType) {
172
+ return { kind: "value", value: { content, mediaType } };
173
+ }
174
+ function capInline(content) {
175
+ return Buffer.byteLength(content, "utf-8") <= DASHBOARD_LAZY_CONTENT_MAX_BYTES
176
+ ? { kind: "value", value: content }
177
+ : { kind: "unavailable", reason: "content_too_large_for_dashboard" };
178
+ }
179
+ export function createDashboardLazyContentReader(options = {}) {
180
+ const runReader = options.runReader ?? createDashboardRunReader({
181
+ includeUnavailableAdmissionMetadata: true,
182
+ });
183
+ const validators = options.validatorRegistry ?? createValidatorRegistry();
184
+ const readFile = options.readContainedFile ?? readContainedRelativeFile;
185
+ const standaloneRevisions = new Map();
186
+ function stateRevisionFor(runsRoot, admitted) {
187
+ if (options.stateRevisionFor !== undefined) {
188
+ return options.stateRevisionFor(runsRoot, admitted);
189
+ }
190
+ const key = `${runsRoot}\0${admitted.runId}`;
191
+ const current = standaloneRevisions.get(key);
192
+ if (current !== undefined &&
193
+ current.runGeneration === admitted.runGeneration &&
194
+ containedFileFingerprintsEqual(current.fingerprint, admitted.stateFingerprint))
195
+ return current.revision;
196
+ const revision = randomBytes(16).toString("base64url");
197
+ standaloneRevisions.set(key, {
198
+ runGeneration: admitted.runGeneration,
199
+ fingerprint: admitted.stateFingerprint,
200
+ revision,
201
+ });
202
+ return revision;
203
+ }
204
+ async function readBoundFile(runsRoot, admitted, relativePath, maxBytes, wantBytes = true, dependency) {
205
+ const read = await readFile(runsRoot, `${admitted.runId}/${relativePath}`, {
206
+ ...(wantBytes ? { wantBytes: true } : {}),
207
+ requireRegular: true,
208
+ maxBytes,
209
+ containerLabel: "runs root",
210
+ pathLabel: "persisted producer pointer",
211
+ requireExactRequestedPath: true,
212
+ beforeClose: async () => {
213
+ const current = await runReader.inspectDirectoryIdentity?.(runsRoot, admitted.runId);
214
+ if (current !== undefined &&
215
+ (current.kind !== "present" ||
216
+ current.directoryIdentity.dev !== admitted.directoryIdentity.dev ||
217
+ current.directoryIdentity.ino !== admitted.directoryIdentity.ino ||
218
+ current.directoryIdentity.birthtimeNs !== admitted.directoryIdentity.birthtimeNs ||
219
+ current.rootIdentity.dev !== admitted.rootIdentity.dev ||
220
+ current.rootIdentity.ino !== admitted.rootIdentity.ino ||
221
+ current.rootIdentity.birthtimeNs !== admitted.rootIdentity.birthtimeNs)) {
222
+ throw new DashboardBodyIdentityChangedError();
223
+ }
224
+ },
225
+ });
226
+ if (dependency !== undefined) {
227
+ dependency.collector.push({
228
+ relativePath,
229
+ role: dependency.role,
230
+ maxBytes,
231
+ fingerprint: read.fingerprint,
232
+ ...(dependency.contentCommitment === undefined
233
+ ? {}
234
+ : { contentCommitment: dependency.contentCommitment }),
235
+ });
236
+ }
237
+ return read;
238
+ }
239
+ async function readContextPreflightInvocation(runsRoot, admitted, dependencies) {
240
+ const lifecycle = admitted.state.context_builder_lifecycle;
241
+ const artifactRunId = lifecycle?.artifact_run_id;
242
+ const contextRunId = lifecycle?.context_run_id;
243
+ const execution = lifecycle?.cache.lookup === "hit"
244
+ ? "cache_source"
245
+ : lifecycle?.cache.lookup === "miss"
246
+ ? "current"
247
+ : undefined;
248
+ if (artifactRunId === undefined ||
249
+ contextRunId === undefined ||
250
+ execution === undefined)
251
+ return { availability: "not_expected" };
252
+ try {
253
+ const relativePath = workflowContextBuilderInvocationAuditRelativePath(contextRunId);
254
+ const result = await readBoundFile(runsRoot, admitted, relativePath, MAX_CONTEXT_BUILDER_INVOCATION_AUDIT_BYTES, true);
255
+ const audit = decodeContextBuilderInvocationAuditBytes(result.bytes).document;
256
+ dependencies.push({
257
+ relativePath,
258
+ role: "context_preflight_invocation",
259
+ maxBytes: MAX_CONTEXT_BUILDER_INVOCATION_AUDIT_BYTES,
260
+ fingerprint: result.fingerprint,
261
+ });
262
+ return {
263
+ availability: "available",
264
+ invocation: {
265
+ execution,
266
+ artifactRunId,
267
+ audit,
268
+ },
269
+ };
270
+ }
271
+ catch (error) {
272
+ if (error instanceof DashboardBodyIdentityChangedError)
273
+ throw error;
274
+ // The workflow detail remains authoritative and usable without the audit.
275
+ return { availability: "expected_unavailable" };
276
+ }
277
+ }
278
+ async function stableRead(request, action) {
279
+ for (const attempt of [1, 2]) {
280
+ const before = await runReader.read(request.runsRoot, request.runId);
281
+ if (before.kind !== "admitted") {
282
+ const generation = stateGeneration(before);
283
+ if (generation !== undefined && generation !== request.runGeneration) {
284
+ return { kind: "run_generation_changed" };
285
+ }
286
+ if (before.kind === "missing" && attempt === 2 && runReader.inspectGeneration !== undefined) {
287
+ const directory = await runReader.inspectGeneration(request.runsRoot, request.runId);
288
+ if (directory.kind === "missing" ||
289
+ directory.runGeneration !== request.runGeneration)
290
+ return { kind: "run_generation_changed" };
291
+ }
292
+ return attempt === 2
293
+ ? { kind: "run_state_changed" }
294
+ : { kind: "unavailable", reason: "not_found" };
295
+ }
296
+ if (before.runGeneration !== request.runGeneration) {
297
+ return { kind: "run_generation_changed" };
298
+ }
299
+ let value;
300
+ try {
301
+ value = await action(before);
302
+ }
303
+ catch (error) {
304
+ if (error instanceof DashboardBodyIdentityChangedError) {
305
+ if (attempt === 2)
306
+ return { kind: "run_state_changed" };
307
+ continue;
308
+ }
309
+ throw error;
310
+ }
311
+ await options.afterLazyRead?.(attempt);
312
+ const after = await runReader.read(request.runsRoot, request.runId);
313
+ if (after.kind === "missing") {
314
+ const directory = await runReader.inspectGeneration?.(request.runsRoot, request.runId);
315
+ if (directory === undefined ||
316
+ directory.kind === "missing" ||
317
+ directory.runGeneration !== before.runGeneration)
318
+ return { kind: "run_generation_changed" };
319
+ }
320
+ else if (stateGeneration(after) !== before.runGeneration) {
321
+ return { kind: "run_generation_changed" };
322
+ }
323
+ if (after.kind === "admitted" &&
324
+ containedFileFingerprintsEqual(before.stateFingerprint, after.stateFingerprint)) {
325
+ return value.kind === "unavailable"
326
+ ? value
327
+ : { kind: "available", value: value.value, admission: after };
328
+ }
329
+ if (attempt === 2)
330
+ return { kind: "run_state_changed" };
331
+ }
332
+ return { kind: "run_state_changed" };
333
+ }
334
+ async function loadSnapshot(runsRoot, admitted, dependencies) {
335
+ const { workflowSnapshotPath, workflowSnapshotHash } = admitted.state;
336
+ if (workflowSnapshotPath === undefined)
337
+ throw new SnapshotUnavailableError("missing");
338
+ if (workflowSnapshotPath !== "workflow.snapshot.json") {
339
+ throw new SnapshotUnavailableError("invalid");
340
+ }
341
+ if (workflowSnapshotHash === undefined)
342
+ throw new SnapshotUnavailableError("hash_mismatch");
343
+ let read;
344
+ try {
345
+ read = await readBoundFile(runsRoot, admitted, workflowSnapshotPath, DASHBOARD_WORKFLOW_SNAPSHOT_MAX_BYTES, true, dependencies === undefined
346
+ ? undefined
347
+ : {
348
+ role: "snapshot",
349
+ contentCommitment: workflowSnapshotHash,
350
+ collector: dependencies,
351
+ });
352
+ }
353
+ catch (error) {
354
+ if (error instanceof DashboardBodyIdentityChangedError)
355
+ throw error;
356
+ if (error instanceof ContainedFileTooLargeError)
357
+ throw new SnapshotUnavailableError("too_large");
358
+ if (hasErrorCode(error, "ENOENT"))
359
+ throw new SnapshotUnavailableError("missing");
360
+ throw new SnapshotUnavailableError("unreadable");
361
+ }
362
+ const bytes = read.bytes;
363
+ if (createHash("sha256").update(bytes).digest("hex") !== workflowSnapshotHash) {
364
+ throw new SnapshotUnavailableError("hash_mismatch");
365
+ }
366
+ let decoded;
367
+ try {
368
+ decoded = JSON.parse(bytes.toString("utf-8"));
369
+ }
370
+ catch {
371
+ throw new SnapshotUnavailableError("invalid");
372
+ }
373
+ const parsed = DashboardWorkflowSnapshotSchema.safeParse(decoded);
374
+ if (!parsed.success)
375
+ throw new SnapshotUnavailableError("invalid");
376
+ if (parsed.data.name !== admitted.state.workflowName ||
377
+ parsed.data.version !== admitted.state.workflowVersion) {
378
+ throw new SnapshotUnavailableError("invalid");
379
+ }
380
+ if (parsed.data.stages.length !== admitted.state.stages.length ||
381
+ parsed.data.stages.some((stage, stageIndex) => {
382
+ const stateStage = admitted.state.stages[stageIndex];
383
+ return stateStage === undefined ||
384
+ stage.id !== stateStage.stageId ||
385
+ stage.calls.length !== stateStage.calls.length ||
386
+ stage.calls.some((call, callIndex) => call.id !== stateStage.calls[callIndex]?.callId);
387
+ })) {
388
+ throw new SnapshotUnavailableError("invalid");
389
+ }
390
+ return parsed.data;
391
+ }
392
+ async function bindOutput(runsRoot, admitted, stageId, callId, dependencies) {
393
+ const source = resolveOutputSource(admitted, stageId, callId);
394
+ if (source.kind === "unavailable")
395
+ return source;
396
+ if (source.value.kind === "inline") {
397
+ return contentResult(source.value.content, "text/plain; charset=utf-8");
398
+ }
399
+ try {
400
+ const read = await readBoundFile(runsRoot, admitted, source.value.relativePath, DASHBOARD_LAZY_CONTENT_MAX_BYTES, true, dependencies === undefined
401
+ ? undefined
402
+ : {
403
+ role: "generic_output",
404
+ collector: dependencies,
405
+ });
406
+ return contentResult(read.bytes.toString("utf-8"), "text/plain; charset=utf-8");
407
+ }
408
+ catch (error) {
409
+ if (error instanceof DashboardBodyIdentityChangedError)
410
+ throw error;
411
+ if (error instanceof ContainedFileTooLargeError) {
412
+ return { kind: "unavailable", reason: "content_too_large_for_dashboard" };
413
+ }
414
+ if (hasErrorCode(error, "ENOENT"))
415
+ return { kind: "unavailable", reason: "not_found" };
416
+ return { kind: "unavailable", reason: "invalid" };
417
+ }
418
+ }
419
+ function resolveOutputSource(admitted, stageId, callId) {
420
+ const call = callByEquality(admitted.state, stageId, callId);
421
+ if (call === undefined)
422
+ return { kind: "unavailable", reason: "not_found" };
423
+ const expectedPath = `${call.stageId}.${call.callId}.output.txt`;
424
+ if (call.outputInline !== undefined) {
425
+ if (call.outputPath !== undefined)
426
+ return { kind: "unavailable", reason: "invalid" };
427
+ const capped = capInline(call.outputInline);
428
+ return capped.kind === "value"
429
+ ? { kind: "value", value: { kind: "inline", content: capped.value } }
430
+ : capped;
431
+ }
432
+ if (call.outputPath === undefined)
433
+ return { kind: "unavailable", reason: "not_persisted" };
434
+ if (call.outputPath !== expectedPath)
435
+ return { kind: "unavailable", reason: "invalid" };
436
+ return { kind: "value", value: { kind: "file", relativePath: expectedPath } };
437
+ }
438
+ function resolveGenericTerminalCall(admitted, snapshot) {
439
+ const terminalStage = snapshot.stages.at(-1);
440
+ if (terminalStage === undefined || terminalStage.calls.length !== 1) {
441
+ return { kind: "unavailable", reason: "invalid" };
442
+ }
443
+ const terminalCall = terminalStage.calls[0];
444
+ if (callByEquality(admitted.state, terminalStage.id, terminalCall.id) === undefined) {
445
+ return { kind: "unavailable", reason: "invalid" };
446
+ }
447
+ return {
448
+ kind: "value",
449
+ value: {
450
+ stageId: terminalStage.id,
451
+ callId: terminalCall.id,
452
+ kind: terminalCall.validator_schema_id === undefined ? "text" : "json",
453
+ },
454
+ };
455
+ }
456
+ async function inspectGenericOutput(runsRoot, admitted, terminal, dependencies) {
457
+ const output = await bindOutput(runsRoot, admitted, terminal.stageId, terminal.callId, dependencies);
458
+ if (output.kind === "unavailable")
459
+ return output;
460
+ if (!isValidGenericOutput(output.value.content, terminal.kind)) {
461
+ return { kind: "unavailable", reason: "invalid" };
462
+ }
463
+ return { kind: "value", value: { kind: terminal.kind } };
464
+ }
465
+ function isValidGenericOutput(content, kind) {
466
+ if (kind === "text")
467
+ return true;
468
+ try {
469
+ JSON.parse(content);
470
+ return true;
471
+ }
472
+ catch {
473
+ return false;
474
+ }
475
+ }
476
+ async function readCallAction(request, admitted) {
477
+ const call = callByEquality(admitted.state, request.stageId, request.callId);
478
+ if (call === undefined)
479
+ return { kind: "unavailable", reason: "not_found" };
480
+ if (request.kind === "output") {
481
+ return await bindOutput(request.runsRoot, admitted, request.stageId, request.callId);
482
+ }
483
+ if (request.kind === "error") {
484
+ if (call.errorMessage === undefined)
485
+ return { kind: "unavailable", reason: "not_persisted" };
486
+ const capped = capInline(call.errorMessage);
487
+ return capped.kind === "value"
488
+ ? contentResult(capped.value, "text/plain; charset=utf-8")
489
+ : capped;
490
+ }
491
+ if (request.kind === "prompt") {
492
+ const expectedPath = `${call.stageId}.${call.callId}.input.json`;
493
+ if (call.materializedInputPath === undefined) {
494
+ return { kind: "unavailable", reason: "not_persisted" };
495
+ }
496
+ if (call.materializedInputPath !== expectedPath) {
497
+ return { kind: "unavailable", reason: "invalid" };
498
+ }
499
+ try {
500
+ const read = await readBoundFile(request.runsRoot, admitted, expectedPath, DASHBOARD_WORKFLOW_INPUT_MAX_BYTES);
501
+ const text = read.bytes.toString("utf-8");
502
+ const decoded = JSON.parse(text);
503
+ if (!DashboardWorkflowInputSchema.safeParse(decoded).success) {
504
+ return { kind: "unavailable", reason: "invalid" };
505
+ }
506
+ return contentResult(text, "application/json; charset=utf-8");
507
+ }
508
+ catch (error) {
509
+ if (error instanceof DashboardBodyIdentityChangedError)
510
+ throw error;
511
+ if (error instanceof ContainedFileTooLargeError) {
512
+ return { kind: "unavailable", reason: "content_too_large_for_dashboard" };
513
+ }
514
+ if (hasErrorCode(error, "ENOENT"))
515
+ return { kind: "unavailable", reason: "not_found" };
516
+ return { kind: "unavailable", reason: "invalid" };
517
+ }
518
+ }
519
+ let snapshot;
520
+ try {
521
+ snapshot = await loadSnapshot(request.runsRoot, admitted);
522
+ }
523
+ catch (error) {
524
+ if (error instanceof DashboardBodyIdentityChangedError)
525
+ throw error;
526
+ return { kind: "unavailable", reason: "invalid" };
527
+ }
528
+ const snapshotStage = snapshot.stages.find((stage) => stage.id === request.stageId);
529
+ const callOrdinal = snapshotStage?.calls.findIndex((entry) => entry.id === request.callId) ?? -1;
530
+ const snapshotCall = callOrdinal < 0 ? undefined : snapshotStage.calls[callOrdinal];
531
+ if (snapshotCall?.validator_schema_id === undefined) {
532
+ return { kind: "unavailable", reason: "invalid" };
533
+ }
534
+ const expectedPath = `artifacts/${snapshotStage.id}/${String(callOrdinal + 1).padStart(2, "0")}-${snapshotCall.id}.json`;
535
+ if (call.artifactPath !== expectedPath)
536
+ return { kind: "unavailable", reason: "invalid" };
537
+ try {
538
+ const read = await readBoundFile(request.runsRoot, admitted, expectedPath, DASHBOARD_LAZY_CONTENT_MAX_BYTES);
539
+ const text = read.bytes.toString("utf-8");
540
+ const decoded = JSON.parse(text);
541
+ const validator = validators.get(snapshotCall.validator_schema_id);
542
+ if (validator === undefined)
543
+ return { kind: "unavailable", reason: "invalid" };
544
+ const validated = validator.schema.safeParse(decoded);
545
+ if (!validated.success)
546
+ return { kind: "unavailable", reason: "invalid" };
547
+ const canonicalBytes = Buffer.byteLength(`${JSON.stringify(validated.data, null, 2)}\n`, "utf-8");
548
+ if (validator.maxBytes !== undefined && canonicalBytes > validator.maxBytes) {
549
+ return { kind: "unavailable", reason: "invalid" };
550
+ }
551
+ return {
552
+ kind: "value",
553
+ value: {
554
+ content: text,
555
+ mediaType: "application/json; charset=utf-8",
556
+ validatorSchemaId: snapshotCall.validator_schema_id,
557
+ },
558
+ };
559
+ }
560
+ catch (error) {
561
+ if (error instanceof DashboardBodyIdentityChangedError)
562
+ throw error;
563
+ if (error instanceof ContainedFileTooLargeError) {
564
+ return { kind: "unavailable", reason: "content_too_large_for_dashboard" };
565
+ }
566
+ if (hasErrorCode(error, "ENOENT"))
567
+ return { kind: "unavailable", reason: "not_found" };
568
+ return { kind: "unavailable", reason: "invalid" };
569
+ }
570
+ }
571
+ return {
572
+ async readCallContent(request) {
573
+ try {
574
+ validateRunId(request.runId);
575
+ }
576
+ catch {
577
+ return { kind: "unavailable", reason: "not_found" };
578
+ }
579
+ if (!validateRouteId(request.stageId) || !validateRouteId(request.callId)) {
580
+ return { kind: "unavailable", reason: "not_found" };
581
+ }
582
+ const result = await stableRead(request, async (admitted) => await readCallAction(request, admitted));
583
+ return result.kind === "available"
584
+ ? {
585
+ kind: "available",
586
+ ...result.value,
587
+ runGeneration: result.admission.runGeneration,
588
+ stateRevision: stateRevisionFor(request.runsRoot, result.admission),
589
+ }
590
+ : result;
591
+ },
592
+ async readResult(request) {
593
+ try {
594
+ validateRunId(request.runId);
595
+ }
596
+ catch {
597
+ return { kind: "unavailable", reason: "not_found" };
598
+ }
599
+ const result = await stableRead(request, async (admitted) => {
600
+ if (admitted.state.status !== "succeeded") {
601
+ return { kind: "unavailable", reason: "not_persisted" };
602
+ }
603
+ if (isPlanReviewRunState(admitted.state)) {
604
+ const publication = admitted.state.plan_review_state?.publication;
605
+ if (publication?.committed !== true) {
606
+ return { kind: "unavailable", reason: "not_persisted" };
607
+ }
608
+ if (publication.sidecar_relpath !== PLAN_REVIEW_RESULT_RELPATH) {
609
+ return { kind: "unavailable", reason: "invalid" };
610
+ }
611
+ try {
612
+ const read = await readBoundFile(request.runsRoot, admitted, PLAN_REVIEW_RESULT_RELPATH, MAX_RESULT_ENVELOPE_BYTES);
613
+ const inspected = validatePlanReviewPublicationBytes(admitted.runId, "succeeded", publication, read.bytes);
614
+ return inspected.result_available && inspected.result !== undefined
615
+ ? contentResult(inspected.result, "application/json; charset=utf-8")
616
+ : { kind: "unavailable", reason: "invalid" };
617
+ }
618
+ catch (error) {
619
+ if (error instanceof DashboardBodyIdentityChangedError)
620
+ throw error;
621
+ if (error instanceof ContainedFileTooLargeError) {
622
+ return { kind: "unavailable", reason: "content_too_large_for_dashboard" };
623
+ }
624
+ if (hasErrorCode(error, "ENOENT"))
625
+ return { kind: "unavailable", reason: "not_found" };
626
+ return { kind: "unavailable", reason: "invalid" };
627
+ }
628
+ }
629
+ let snapshot;
630
+ try {
631
+ snapshot = await loadSnapshot(request.runsRoot, admitted);
632
+ }
633
+ catch (error) {
634
+ if (error instanceof DashboardBodyIdentityChangedError)
635
+ throw error;
636
+ return { kind: "unavailable", reason: "invalid" };
637
+ }
638
+ const terminal = resolveGenericTerminalCall(admitted, snapshot);
639
+ if (terminal.kind === "unavailable")
640
+ return terminal;
641
+ const output = await bindOutput(request.runsRoot, admitted, terminal.value.stageId, terminal.value.callId);
642
+ if (output.kind === "unavailable" || terminal.value.kind === "text") {
643
+ return output;
644
+ }
645
+ if (!isValidGenericOutput(output.value.content, terminal.value.kind)) {
646
+ return { kind: "unavailable", reason: "invalid" };
647
+ }
648
+ return contentResult(output.value.content, "application/json; charset=utf-8");
649
+ });
650
+ return result.kind === "available"
651
+ ? {
652
+ kind: "available",
653
+ ...result.value,
654
+ runGeneration: result.admission.runGeneration,
655
+ stateRevision: stateRevisionFor(request.runsRoot, result.admission),
656
+ }
657
+ : result;
658
+ },
659
+ async readStructuredProjection(request) {
660
+ try {
661
+ validateRunId(request.runId);
662
+ }
663
+ catch {
664
+ return { kind: "unavailable" };
665
+ }
666
+ const result = await stableRead(request, async (admitted) => {
667
+ const dependencies = [];
668
+ let snapshotResult;
669
+ let snapshot;
670
+ try {
671
+ snapshot = await loadSnapshot(request.runsRoot, admitted, dependencies);
672
+ snapshotResult = {
673
+ availability: "available",
674
+ projection: {
675
+ stages: snapshot.stages.map((stage) => ({
676
+ stageId: stage.id,
677
+ ...(stage.description === undefined ? {} : { label: stage.description }),
678
+ dependsOn: dependencyStageIds(snapshot, stage),
679
+ calls: stage.calls.map((call) => ({
680
+ callId: call.id,
681
+ adapter: call.cli_name,
682
+ role: call.role,
683
+ validatedJson: call.validator_schema_id !== undefined,
684
+ ...(call.model === undefined ? {} : { model: call.model }),
685
+ ...(call.effort === undefined ? {} : { effort: call.effort }),
686
+ })),
687
+ })),
688
+ },
689
+ };
690
+ }
691
+ catch (error) {
692
+ if (error instanceof DashboardBodyIdentityChangedError)
693
+ throw error;
694
+ snapshotResult = {
695
+ availability: "unavailable",
696
+ reason: error instanceof SnapshotUnavailableError ? error.reason : "unreadable",
697
+ };
698
+ }
699
+ let genericResult;
700
+ if (!isPlanReviewRunState(admitted.state) &&
701
+ admitted.state.status === "succeeded") {
702
+ if (snapshot === undefined) {
703
+ genericResult = { availability: "unavailable", reason: "invalid" };
704
+ }
705
+ else {
706
+ const terminal = resolveGenericTerminalCall(admitted, snapshot);
707
+ const inspected = terminal.kind === "unavailable"
708
+ ? terminal
709
+ : await inspectGenericOutput(request.runsRoot, admitted, terminal.value, dependencies);
710
+ genericResult = inspected.kind === "value"
711
+ ? { availability: "available", kind: inspected.value.kind }
712
+ : {
713
+ availability: "unavailable",
714
+ reason: inspected.reason === "not_found"
715
+ ? "missing"
716
+ : inspected.reason === "content_too_large_for_dashboard"
717
+ ? "too_large"
718
+ : inspected.reason,
719
+ };
720
+ }
721
+ }
722
+ let planReviewCard;
723
+ if (isPlanReviewRunState(admitted.state)) {
724
+ const publication = admitted.state.plan_review_state?.publication;
725
+ if (publication?.committed === true &&
726
+ publication.sidecar_relpath === PLAN_REVIEW_RESULT_RELPATH) {
727
+ try {
728
+ const read = await readBoundFile(request.runsRoot, admitted, PLAN_REVIEW_RESULT_RELPATH, MAX_RESULT_ENVELOPE_BYTES, true, {
729
+ role: "plan_review_publication",
730
+ contentCommitment: publication.sidecar_sha256,
731
+ collector: dependencies,
732
+ });
733
+ const inspected = validatePlanReviewPublicationBytes(admitted.runId, admitted.state.status === "succeeded" ? "succeeded" : undefined, publication, read.bytes);
734
+ if (inspected.result_available) {
735
+ planReviewCard = extractCouncilPlanReviewCard({
736
+ envelopeText: inspected.result,
737
+ contextStatus: admitted.state.workflow_context?.context_builder.status ?? "absent",
738
+ });
739
+ }
740
+ }
741
+ catch (error) {
742
+ if (error instanceof DashboardBodyIdentityChangedError)
743
+ throw error;
744
+ // Local publication unavailability degrades to the generic card.
745
+ }
746
+ }
747
+ }
748
+ const contextPreflightInvocationRead = await readContextPreflightInvocation(request.runsRoot, admitted, dependencies);
749
+ const enrichmentComplete = snapshotResult.availability === "available" &&
750
+ (genericResult === undefined ||
751
+ genericResult.availability === "available") &&
752
+ (!isPlanReviewRunState(admitted.state) ||
753
+ admitted.state.status !== "succeeded" ||
754
+ planReviewCard?.kind === "council-plan-review") &&
755
+ contextPreflightInvocationRead.availability !== "expected_unavailable";
756
+ return {
757
+ kind: "value",
758
+ value: {
759
+ snapshot: snapshotResult,
760
+ ...(genericResult === undefined ? {} : { genericResult }),
761
+ ...(planReviewCard === undefined ? {} : { planReviewCard }),
762
+ ...(contextPreflightInvocationRead.availability !== "available"
763
+ ? {}
764
+ : {
765
+ contextPreflightInvocation: contextPreflightInvocationRead.invocation,
766
+ }),
767
+ ...(enrichmentComplete
768
+ ? { enrichmentDependencies: dependencies }
769
+ : {}),
770
+ },
771
+ };
772
+ });
773
+ return result.kind === "available"
774
+ ? {
775
+ kind: "available",
776
+ admission: result.admission,
777
+ ...result.value,
778
+ }
779
+ : result.kind === "unavailable"
780
+ ? { kind: "unavailable" }
781
+ : result;
782
+ },
783
+ async validateEnrichmentDependencies(request, admitted, dependencies) {
784
+ for (const dependency of dependencies) {
785
+ try {
786
+ const read = await readBoundFile(request.runsRoot, admitted, dependency.relativePath, dependency.maxBytes, false);
787
+ if (!containedFileFingerprintsEqual(read.fingerprint, dependency.fingerprint)) {
788
+ return false;
789
+ }
790
+ }
791
+ catch {
792
+ return false;
793
+ }
794
+ }
795
+ return true;
796
+ },
797
+ };
798
+ }
799
+ //# sourceMappingURL=lazy-content.js.map