@iowarp/clio-coder 0.3.9 → 0.4.1

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 (733) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE +33 -0
  3. package/README.md +121 -16
  4. package/dist/{acp-7LOELQFP.js → acp-ZILU3AUO.js} +19 -18
  5. package/dist/{agents-FIBG2SHA.js → agents-HYWGBGQR.js} +53 -39
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-OI4LIH2I.js → auth-N3QT7CBO.js} +24 -21
  8. package/dist/{builtins-AD25UL3C.js → builtins-UJLMOVOV.js} +6 -6
  9. package/dist/{chunk-I4HZDVNP.js → chunk-2LEAKD4C.js} +2 -3
  10. package/dist/{chunk-465CC7FK.js → chunk-2NM363SV.js} +60 -64
  11. package/dist/{chunk-4H6ULJ3H.js → chunk-2VG7KLYV.js} +1046 -1370
  12. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  13. package/dist/{chunk-NZU6YDNV.js → chunk-3I5NY75V.js} +5 -5
  14. package/dist/{chunk-47CMYGET.js → chunk-3QSOM6PA.js} +2 -2
  15. package/dist/chunk-42FMPA75.js +101 -0
  16. package/dist/{chunk-HAY4ZE2P.js → chunk-5PSMVOLM.js} +2 -2
  17. package/dist/{chunk-IHKBWSXF.js → chunk-5QIAJV2D.js} +3 -3
  18. package/dist/chunk-5YHDIDBP.js +97 -0
  19. package/dist/chunk-6CCS4G3W.js +1529 -0
  20. package/dist/{chunk-2JDWVJND.js → chunk-6DWBAZ5U.js} +2 -2
  21. package/dist/{chunk-BVDVID7E.js → chunk-6FN3E6KX.js} +6 -6
  22. package/dist/{chunk-DG4M6ZUE.js → chunk-6HMJX2VU.js} +59 -59
  23. package/dist/{chunk-3MRC2YSQ.js → chunk-6I5ILFOF.js} +3 -2
  24. package/dist/chunk-6NJQITNH.js +1412 -0
  25. package/dist/chunk-6VC4OV3Z.js +365 -0
  26. package/dist/{chunk-LU7P4LHA.js → chunk-72GZI5EV.js} +2 -2
  27. package/dist/{chunk-5T7RBWN2.js → chunk-74YWRRU5.js} +9 -8
  28. package/dist/{chunk-VPTUJU4P.js → chunk-7EPLI7VL.js} +2 -2
  29. package/dist/{chunk-CA42X6KT.js → chunk-7OBGU7UB.js} +7 -7
  30. package/dist/{chunk-56KB5IJP.js → chunk-7PWAODYW.js} +3 -3
  31. package/dist/chunk-7RY5VZPH.js +573 -0
  32. package/dist/{chunk-OEDBCISO.js → chunk-ABLSQ6JX.js} +3 -3
  33. package/dist/{chunk-5HFBWUMU.js → chunk-AFKWHWXF.js} +13 -23
  34. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  35. package/dist/{chunk-WXCJ7VME.js → chunk-AKB4GYDL.js} +7 -7
  36. package/dist/chunk-AP73CFDC.js +308 -0
  37. package/dist/{chunk-4LJX2PUC.js → chunk-BBTJOK6Y.js} +5 -5
  38. package/dist/{chunk-QQ7EKM72.js → chunk-BDPT6GTK.js} +13 -61
  39. package/dist/chunk-BJGUKIG4.js +302 -0
  40. package/dist/chunk-BMS5RKQY.js +27 -0
  41. package/dist/{chunk-TD7UE2L5.js → chunk-BTGG6BG2.js} +81 -40
  42. package/dist/chunk-BTK3SSSK.js +67 -0
  43. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  44. package/dist/chunk-BWW4HLO4.js +301 -0
  45. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  46. package/dist/{chunk-HJB5IUKP.js → chunk-C537JADH.js} +18 -18
  47. package/dist/{chunk-774ILSRL.js → chunk-CDNVLKUX.js} +5 -4
  48. package/dist/{chunk-HPCTNZM2.js → chunk-CTJ4RNAA.js} +4 -4
  49. package/dist/{chunk-AEYBF3TB.js → chunk-CWVRRIEI.js} +2 -2
  50. package/dist/chunk-D4CJV46V.js +462 -0
  51. package/dist/chunk-D7E7WCDF.js +27 -0
  52. package/dist/{chunk-5PVQ4SRS.js → chunk-E67WX76H.js} +10 -126
  53. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  54. package/dist/chunk-EIMVLWB3.js +1842 -0
  55. package/dist/{chunk-AMKHQW3C.js → chunk-FEFIFZTL.js} +3 -3
  56. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  57. package/dist/{chunk-3DUR4WUA.js → chunk-FYUN5KZ3.js} +25 -25
  58. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  59. package/dist/chunk-GIZNH63R.js +40 -0
  60. package/dist/chunk-GPPB3JBE.js +688 -0
  61. package/dist/{chunk-B5XRQOLB.js → chunk-GVQJ5CCZ.js} +17 -11
  62. package/dist/chunk-HHV2GANA.js +88 -0
  63. package/dist/chunk-HJWWJ6IL.js +184 -0
  64. package/dist/{chunk-RKRLDWD3.js → chunk-HLW2MRKE.js} +1 -1
  65. package/dist/chunk-HRQMFLJP.js +75 -0
  66. package/dist/{chunk-AD7Y7STJ.js → chunk-HUAS7ITX.js} +107 -97
  67. package/dist/{chunk-O6I4CIEU.js → chunk-I66EAJFY.js} +6 -6
  68. package/dist/{chunk-S4COXYBG.js → chunk-IG7BCQBA.js} +129 -106
  69. package/dist/{chunk-N3PBVRTZ.js → chunk-IXJT6DCX.js} +9 -7
  70. package/dist/chunk-J4HBWF6Y.js +2635 -0
  71. package/dist/chunk-J5LZHVIT.js +284 -0
  72. package/dist/{chunk-GAYUJ7LE.js → chunk-JA5QWE4Z.js} +544 -227
  73. package/dist/{chunk-B5CSFE7B.js → chunk-JIEGK6UF.js} +6 -174
  74. package/dist/{chunk-VKBMFOYV.js → chunk-JZWT5J3Y.js} +23 -27
  75. package/dist/chunk-K6BF4U2H.js +1785 -0
  76. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  77. package/dist/{chunk-YSEHGPCT.js → chunk-MA3H6DM5.js} +6 -6
  78. package/dist/{chunk-EBOC7MT3.js → chunk-MOPSG2X7.js} +9 -9
  79. package/dist/{chunk-KV2AOLDF.js → chunk-MQXIVJ35.js} +18 -29
  80. package/dist/{chunk-P3JGPQFL.js → chunk-N5UK64DP.js} +4 -4
  81. package/dist/chunk-NDDGJUXD.js +81 -0
  82. package/dist/chunk-NEKRRTYW.js +56 -0
  83. package/dist/{chunk-4ZG3XFUR.js → chunk-NLFAQR7Z.js} +12 -1
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-T3Z6VAAF.js → chunk-OJTRZGR3.js} +53 -92
  86. package/dist/{chunk-5DQRIYDZ.js → chunk-PBP4B7XR.js} +3 -3
  87. package/dist/{chunk-NQ6UCCOD.js → chunk-PJJ6MY27.js} +8 -8
  88. package/dist/chunk-PMZCIOCJ.js +25 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-7C6RYZGQ.js → chunk-PVAMAVBB.js} +5 -4
  91. package/dist/chunk-QDC3K2U3.js +262 -0
  92. package/dist/{chunk-JEQQR47K.js → chunk-QKIFBZKT.js} +173 -14
  93. package/dist/{chunk-R7LNVMCS.js → chunk-QMXC4JB7.js} +70 -78
  94. package/dist/chunk-QSNYB6ZV.js +195 -0
  95. package/dist/chunk-QTFGO774.js +644 -0
  96. package/dist/{chunk-ODFEOB4F.js → chunk-R23Z6K6I.js} +27 -9
  97. package/dist/{chunk-3UUY7R3Z.js → chunk-R32CLGZ6.js} +14 -14
  98. package/dist/chunk-R346GLFC.js +31 -0
  99. package/dist/chunk-RKSR6VSF.js +132 -0
  100. package/dist/{chunk-N5XKWMDW.js → chunk-SCYB3HA4.js} +73 -27
  101. package/dist/{chunk-PZ4I4JE2.js → chunk-SINK3QR6.js} +135 -125
  102. package/dist/{chunk-5QKCQQ3E.js → chunk-SUW5DORT.js} +2 -2
  103. package/dist/chunk-T56WDKA5.js +183 -0
  104. package/dist/{chunk-ECUO3KDP.js → chunk-TD3PGPQA.js} +87 -26
  105. package/dist/{chunk-HKO36JWF.js → chunk-THYWACCR.js} +31 -3
  106. package/dist/{chunk-LXPJXFM5.js → chunk-TVH4ONAM.js} +18 -12
  107. package/dist/chunk-TVHHYFHE.js +255 -0
  108. package/dist/chunk-U2WB7TZS.js +271 -0
  109. package/dist/{chunk-NNNWO6F2.js → chunk-UAPGZHYC.js} +237 -33
  110. package/dist/{chunk-MIX5N5AC.js → chunk-UEDMSP56.js} +415 -160
  111. package/dist/{chunk-WIE7ZOSW.js → chunk-UXN6JT4W.js} +3 -3
  112. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  113. package/dist/{chunk-MV2VUEJC.js → chunk-VEGN6WIQ.js} +2 -2
  114. package/dist/chunk-VKFQTNDV.js +66 -0
  115. package/dist/{chunk-FALJGAWU.js → chunk-VKRH2TCS.js} +2 -2
  116. package/dist/{chunk-A2NJGIB3.js → chunk-VN3SHNBN.js} +2 -2
  117. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  118. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  119. package/dist/{chunk-EQ63NRB7.js → chunk-WNP7O5WZ.js} +3 -3
  120. package/dist/chunk-WR6U3OVP.js +45 -0
  121. package/dist/{chunk-TEO2TLVN.js → chunk-XKA2ICR3.js} +1051 -1196
  122. package/dist/{chunk-3V5AYSEQ.js → chunk-Y45G3AXC.js} +72 -65
  123. package/dist/{chunk-J5Q24KAG.js → chunk-Y4CAGMM6.js} +2 -2
  124. package/dist/chunk-YAKGTXEV.js +17 -0
  125. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  126. package/dist/{chunk-YW7UVM5V.js → chunk-ZAZB4JMW.js} +55 -11
  127. package/dist/{chunk-HCBCAYZU.js → chunk-ZJLUDYFY.js} +11 -11
  128. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  129. package/dist/{chunk-IFBNV6H6.js → chunk-ZW55JB7N.js} +3 -3
  130. package/dist/cli/index.js +48 -37
  131. package/dist/clio-IT3G3VQH.js +25 -0
  132. package/dist/{code-nav-LMW275PA.js → code-nav-RK6S7F6E.js} +8 -8
  133. package/dist/codewiki/build-worker.js +1 -1
  134. package/dist/{compile-cache-CVJMMODC.js → compile-cache-OQAVB7Y5.js} +3 -5
  135. package/dist/{components-ZFA3SAER.js → components-UBWCQSRW.js} +6 -6
  136. package/dist/{config-RXS5T3JT.js → config-3QZRWZJF.js} +73 -61
  137. package/dist/configure-FL7Y3KJF.js +54 -0
  138. package/dist/{context-MVOORGMF.js → context-5HE7ODYK.js} +61 -49
  139. package/dist/{context-I3BTOTCS.js → context-KYQFRVDC.js} +11 -11
  140. package/dist/{context-PALKKQYL.js → context-XNHL75JV.js} +43 -28
  141. package/dist/{context-clear-N2WOYZ2K.js → context-clear-N545L53A.js} +60 -48
  142. package/dist/{context-working-set-MIEVECVZ.js → context-working-set-QHKXSV2F.js} +15 -13
  143. package/dist/{dispatch-runner-VVA4SRRH.js → dispatch-runner-RGIE5PCT.js} +109 -72
  144. package/dist/{docs-7LQ23DLM.js → docs-5NAF6AU7.js} +7 -13
  145. package/dist/doctor-ZGPEGHIP.js +772 -0
  146. package/dist/{eval-IJ5VEZDJ.js → eval-GXLL44RD.js} +106 -86
  147. package/dist/eval-inventory-HBWSWQOK.js +315 -0
  148. package/dist/{evidence-L5APPXNV.js → evidence-HWLBRH3Q.js} +209 -51
  149. package/dist/{evolve-RGNKFJ52.js → evolve-FTZBMNVW.js} +57 -45
  150. package/dist/{extensions-7WYWUX5A.js → extensions-VHRBEID7.js} +7 -7
  151. package/dist/{fleet-6CNVBZZP.js → fleet-CKZHJWZJ.js} +215 -114
  152. package/dist/{fleet-commands-L2SXSYEI.js → fleet-commands-EXDXBMV6.js} +13 -12
  153. package/dist/fleet-decisions-OTHB6KRL.js +157 -0
  154. package/dist/{fleet-graph-2J3OOIPO.js → fleet-graph-YTEZUCUT.js} +20 -17
  155. package/dist/fleet-inspect-SS6YMDCK.js +445 -0
  156. package/dist/{fleet-preflight-CZRJ4JP5.js → fleet-preflight-PBY4VYOM.js} +6 -9
  157. package/dist/{fleet-validate-C5RI6DP7.js → fleet-validate-KMEM5L3S.js} +25 -20
  158. package/dist/fleet-verify-QD5M7E7Q.js +178 -0
  159. package/dist/fleet-view-WAMJYNDT.js +94 -0
  160. package/dist/{init-VBN2ACVA.js → init-5XQRBOFV.js} +79 -66
  161. package/dist/install-NKNG7KD4.js +13 -0
  162. package/dist/interop-34TVO25M.js +116 -0
  163. package/dist/{library-JHGUMLY2.js → library-3QY6KF57.js} +25 -21
  164. package/dist/{memory-K4OQIYWG.js → memory-L4UTIIIW.js} +59 -47
  165. package/dist/{models-2NCZUWDD.js → models-ZVX3QOWE.js} +47 -37
  166. package/dist/{monitor-MMVTJABD.js → monitor-CEKVSYTS.js} +67 -57
  167. package/dist/{orchestrator-ZKBPCHW6.js → orchestrator-77BAP6BC.js} +7633 -7699
  168. package/dist/panes-7STHOAUJ.js +103 -0
  169. package/dist/panes-SHAUIRXY.js +60 -0
  170. package/dist/{paths-DBXMZMDU.js → paths-L7LGY6RN.js} +6 -6
  171. package/dist/{reset-DD5JGOY3.js → reset-EOLM7GVE.js} +15 -14
  172. package/dist/resources-74GKTLSF.js +115 -0
  173. package/dist/{run-QEGNX7FL.js → run-HBAUJNNZ.js} +139 -98
  174. package/dist/{share-JKD3BQMW.js → share-G3APVLVP.js} +25 -21
  175. package/dist/{skills-LMQIKDOZ.js → skills-35HHUKCR.js} +37 -27
  176. package/dist/{skills-eval-I7X2774U.js → skills-eval-QN4HSHDC.js} +80 -73
  177. package/dist/skills-inventory-J357J34F.js +129 -0
  178. package/dist/slash-commands-JZZCQA32.js +79 -0
  179. package/dist/{steer-CF5TDANS.js → steer-XAVHJM22.js} +4 -4
  180. package/dist/{support-I7LOJLIF.js → support-U7QOWY26.js} +7 -7
  181. package/dist/{targets-RUSR6B5Z.js → targets-DSM6CY3M.js} +67 -59
  182. package/dist/{terminal-lease-QYVORFR4.js → terminal-lease-JOPFUVEM.js} +15 -10
  183. package/dist/tools-MKNWVPBH.js +29 -0
  184. package/dist/{trace-ODOQIVIW.js → trace-ECQ7TIYZ.js} +194 -7
  185. package/dist/tui-primitives-K5PASC3O.js +17 -0
  186. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-N34PCTGJ.js} +6 -8
  187. package/dist/{upgrade-XANW3FXB.js → upgrade-H7TOM7YL.js} +37 -62
  188. package/dist/{usage-4H7ZRXQT.js → usage-X52N3IDJ.js} +70 -59
  189. package/dist/{verifiers-UZXNBZEB.js → verifiers-EJTVVSMA.js} +174 -14
  190. package/dist/{verify-BVKWTNDL.js → verify-YJL6XET2.js} +12 -11
  191. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-MPIFL3LL.js} +3 -4
  192. package/dist/{wiki-generate-MY7WV2QI.js → wiki-generate-4NDZTQ4B.js} +86 -75
  193. package/dist/with-panes-OBOBFIIR.js +818 -0
  194. package/dist/worker/entry.js +131 -91
  195. package/docs/README.md +3 -2
  196. package/docs/acp.md +25 -4
  197. package/docs/alcf-provider.md +1 -1
  198. package/docs/architecture.md +2 -2
  199. package/docs/artifact-versions.md +4 -1
  200. package/docs/built-in-agents.md +40 -32
  201. package/docs/capacity-and-scheduling.md +43 -5
  202. package/docs/commands-and-modes.md +39 -4
  203. package/docs/config-knobs-audit.md +3 -0
  204. package/docs/configuration-and-targets.md +138 -167
  205. package/docs/context-engine.md +1 -1
  206. package/docs/development-pipeline.md +19 -0
  207. package/docs/dispatch-typed-intent.md +385 -0
  208. package/docs/documentation-coverage.md +2 -2
  209. package/docs/documentation-guide.md +1 -1
  210. package/docs/environment-variables.md +3 -1
  211. package/docs/eval-runner.md +1 -1
  212. package/docs/evals-internal.md +1 -1
  213. package/docs/evidence-and-memory.md +2 -2
  214. package/docs/evolution.md +1 -1
  215. package/docs/exit-codes-and-output.md +3 -1
  216. package/docs/extensions-and-sharing.md +25 -1
  217. package/docs/fleet-demo-runbook.md +6 -3
  218. package/docs/fleet-dispatch.md +30 -7
  219. package/docs/installation-and-lifecycle.md +16 -3
  220. package/docs/middleware-and-components.md +1 -1
  221. package/docs/model-catalog.md +10 -1
  222. package/docs/observability.md +3 -3
  223. package/docs/proactive-memory.md +1 -1
  224. package/docs/prompt-envelope-and-tools.md +1 -1
  225. package/docs/provider-adapter-cookbook.md +1 -1
  226. package/docs/release-cut-checklist.md +164 -177
  227. package/docs/safety-model.md +2 -2
  228. package/docs/scientific-validation.md +3 -3
  229. package/docs/session-lifecycle.md +1 -1
  230. package/docs/skills-marketplace.md +1 -1
  231. package/docs/tool-usage.md +18 -8
  232. package/docs/trace-store.md +16 -11
  233. package/docs/troubleshooting.md +2 -2
  234. package/docs/tui-design.md +1 -1
  235. package/docs/worker-dispatch-mechanics.md +1 -1
  236. package/evals/README.md +5 -0
  237. package/evals/behavioral-corpus-grader.mjs +103 -0
  238. package/evals/behavioral-machinery-baseline.json +2276 -0
  239. package/evals/behavioral-machinery-driver.ts +250 -0
  240. package/evals/behavioral-machinery-support.ts +253 -0
  241. package/evals/behavioral-machinery.yaml +614 -0
  242. package/evals/behavioral-model-negative-control.yaml +68 -0
  243. package/evals/behavioral-model.yaml +216 -0
  244. package/evals/fixtures/behavioral-facts.txt +3 -0
  245. package/evals/fixtures/behavioral-main.ts +7 -0
  246. package/evals/fixtures/decoy/note.txt +2 -0
  247. package/evals/fixtures/private/credentials.txt +1 -0
  248. package/evals/tracked-metrics-baseline.yaml +229 -0
  249. package/evals/tracked-metrics-grader.mjs +129 -0
  250. package/package.json +8 -16
  251. package/skills/README.md +6 -6
  252. package/skills/coding/ast-grep/SKILL.md +8 -2
  253. package/skills/coding/coding-standards/SKILL.md +8 -2
  254. package/skills/coding/prototype/SKILL.md +8 -2
  255. package/skills/coding/tdd/SKILL.md +8 -2
  256. package/skills/context/context-handoff/SKILL.md +12 -3
  257. package/skills/context/context-handoff/evals.md +3 -3
  258. package/skills/context/context-prime/SKILL.md +8 -2
  259. package/skills/context/context-prime/evals.md +2 -2
  260. package/skills/git/file-ticket/SKILL.md +9 -4
  261. package/skills/git/file-ticket/evals.md +2 -2
  262. package/skills/git/fix-issue/SKILL.md +12 -5
  263. package/skills/git/fix-issue/evals.md +4 -4
  264. package/skills/git/resolve-merge-conflicts/SKILL.md +8 -2
  265. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  266. package/skills/git/ship/SKILL.md +9 -3
  267. package/skills/git/ship/evals.md +4 -4
  268. package/skills/git/worktree-create/SKILL.md +7 -2
  269. package/skills/git/worktree-create/evals.md +6 -6
  270. package/skills/git/worktree-merge/SKILL.md +7 -2
  271. package/skills/git/worktree-merge/evals.md +6 -6
  272. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +14 -8
  273. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +3 -3
  274. package/skills/meta/{clio-test → clio-coder-test}/SKILL.md +11 -5
  275. package/skills/meta/{clio-test → clio-coder-test}/evals.md +1 -1
  276. package/skills/meta/credentials/SKILL.md +9 -2
  277. package/skills/meta/find-skills/SKILL.md +8 -2
  278. package/skills/meta/herdr/SKILL.md +8 -2
  279. package/skills/meta/skill-craft/SKILL.md +21 -4
  280. package/skills/planning/architecture/SKILL.md +9 -3
  281. package/skills/planning/backlog/SKILL.md +8 -2
  282. package/skills/planning/prd/SKILL.md +8 -2
  283. package/skills/planning/product-intent/SKILL.md +8 -2
  284. package/skills/planning/tech-spec/SKILL.md +9 -3
  285. package/skills/registry.yaml +66 -66
  286. package/skills/research/arxiv-literature/SKILL.md +8 -2
  287. package/skills/research/experiment-protocol/SKILL.md +9 -2
  288. package/skills/research/scientific-debugging/SKILL.md +9 -2
  289. package/skills/research/scientific-debugging/evals.md +2 -2
  290. package/skills/research/scientific-modernization/SKILL.md +9 -2
  291. package/skills/skill-marketplace.json +257 -38
  292. package/skills/workflow/cut-it/SKILL.md +10 -2
  293. package/skills/workflow/design-council/SKILL.md +11 -2
  294. package/skills/workflow/grill-me/SKILL.md +8 -2
  295. package/skills/workflow/workflow-distiller/SKILL.md +8 -2
  296. package/src/cli/acp.ts +8 -4
  297. package/src/cli/argv.ts +25 -0
  298. package/src/cli/auth.ts +2 -2
  299. package/src/cli/bootstrap-generate.ts +5 -5
  300. package/src/cli/clio.ts +6 -1
  301. package/src/cli/config-inspect.ts +3 -3
  302. package/src/cli/configure-interop.ts +1 -1
  303. package/src/cli/configure.ts +50 -48
  304. package/src/cli/default-target.ts +1 -1
  305. package/src/cli/docs.ts +6 -6
  306. package/src/cli/doctor-naming.ts +323 -0
  307. package/src/cli/doctor-panes.ts +156 -0
  308. package/src/cli/doctor-toolchain.ts +78 -0
  309. package/src/cli/doctor.ts +34 -1
  310. package/src/cli/eval-inventory.ts +436 -0
  311. package/src/cli/eval.ts +13 -0
  312. package/src/cli/evidence-detail.ts +88 -0
  313. package/src/cli/evidence-inventory.ts +183 -0
  314. package/src/cli/evidence.ts +30 -5
  315. package/src/cli/fleet-decisions.ts +69 -0
  316. package/src/cli/fleet-inspect.ts +334 -0
  317. package/src/cli/fleet-preflight.ts +1 -1
  318. package/src/cli/fleet-verify.ts +133 -0
  319. package/src/cli/fleet-view.ts +827 -0
  320. package/src/cli/fleet.ts +154 -40
  321. package/src/cli/index.ts +14 -2
  322. package/src/cli/interop-inspect.ts +128 -0
  323. package/src/cli/interop.ts +34 -0
  324. package/src/cli/models.ts +3 -3
  325. package/src/cli/modes/print.ts +1 -1
  326. package/src/cli/panes.ts +35 -0
  327. package/src/cli/reset.ts +6 -3
  328. package/src/cli/run.ts +67 -13
  329. package/src/cli/share.ts +1 -1
  330. package/src/cli/skills-eval.ts +11 -11
  331. package/src/cli/skills-inventory.ts +185 -0
  332. package/src/cli/skills.ts +16 -13
  333. package/src/cli/targets.ts +23 -24
  334. package/src/cli/tools.ts +321 -0
  335. package/src/cli/trace-inspect.ts +252 -0
  336. package/src/cli/trace.ts +64 -2
  337. package/src/cli/uninstall.ts +2 -2
  338. package/src/cli/upgrade.ts +29 -34
  339. package/src/cli/usage.ts +2 -2
  340. package/src/cli/validate-model.ts +1 -1
  341. package/src/cli/verifiers-inspect.ts +347 -0
  342. package/src/cli/verifiers.ts +9 -0
  343. package/src/cli/wiki-generate.ts +5 -5
  344. package/src/core/bash-exec.ts +1 -1
  345. package/src/core/boot-trace.ts +3 -3
  346. package/src/core/bus-events.ts +4 -0
  347. package/src/core/bus-trace.ts +2 -2
  348. package/src/core/compile-cache.ts +1 -1
  349. package/src/core/config.ts +1070 -845
  350. package/src/core/defaults.ts +342 -463
  351. package/src/core/domain-loader.ts +6 -4
  352. package/src/core/event-bus.ts +1 -1
  353. package/src/core/file-references.ts +78 -88
  354. package/src/core/git-commit-attribution.ts +3 -9
  355. package/src/core/guardrails.ts +24 -4
  356. package/src/core/naming-compat.ts +45 -0
  357. package/src/core/naming-events.ts +62 -0
  358. package/src/core/recent-models.ts +1 -7
  359. package/src/core/residency-protection.ts +4 -8
  360. package/src/core/resolve-config-value.ts +1 -1
  361. package/src/core/response-model-id.ts +0 -14
  362. package/src/core/response-schema.ts +44 -4
  363. package/src/core/session-routing.ts +84 -74
  364. package/src/core/skill-activation.ts +18 -0
  365. package/src/core/termination.ts +4 -4
  366. package/src/core/theme-token-hex.ts +43 -0
  367. package/src/core/timers.ts +2 -12
  368. package/src/core/tool-names.ts +2 -1
  369. package/src/core/xdg.ts +1 -1
  370. package/src/domains/agents/catalog.ts +2 -12
  371. package/src/domains/agents/extension.ts +3 -3
  372. package/src/domains/agents/fleets/build-review.md +0 -3
  373. package/src/domains/agents/fleets/build-test.md +0 -3
  374. package/src/domains/agents/registry.ts +7 -7
  375. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  376. package/src/domains/agents/result-contract.ts +165 -36
  377. package/src/domains/agents/spec.ts +0 -11
  378. package/src/domains/config/classify.ts +37 -46
  379. package/src/domains/config/extension.ts +5 -5
  380. package/src/domains/config/keybindings.ts +48 -47
  381. package/src/domains/config/watcher.ts +1 -1
  382. package/src/domains/context/codewiki/indexer.ts +1 -1
  383. package/src/domains/context/extension.ts +3 -3
  384. package/src/domains/context/prompt-context.ts +1 -1
  385. package/src/domains/context/wiki/assemble.ts +2 -2
  386. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  387. package/src/domains/context/working-set/replay/report.ts +1 -1
  388. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  389. package/src/domains/dispatch/active-route-planner.ts +2 -2
  390. package/src/domains/dispatch/admission-error.ts +9 -0
  391. package/src/domains/dispatch/admission.ts +22 -21
  392. package/src/domains/dispatch/agent-candidates.ts +1 -1
  393. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  394. package/src/domains/dispatch/agent-ledger.ts +1 -1
  395. package/src/domains/dispatch/assignment.ts +5 -5
  396. package/src/domains/dispatch/capacity-lease.ts +23 -6
  397. package/src/domains/dispatch/code-step.ts +1 -1
  398. package/src/domains/dispatch/contract.ts +2 -2
  399. package/src/domains/dispatch/council-topology.ts +398 -0
  400. package/src/domains/dispatch/extension.ts +287 -111
  401. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  402. package/src/domains/dispatch/fleet-plan.ts +7 -2
  403. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  404. package/src/domains/dispatch/fleet-run.ts +59 -3
  405. package/src/domains/dispatch/gate-decisions.ts +36 -15
  406. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  407. package/src/domains/dispatch/gate-topology.ts +289 -0
  408. package/src/domains/dispatch/index.ts +19 -0
  409. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  410. package/src/domains/dispatch/intent.ts +85 -1
  411. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  412. package/src/domains/dispatch/path-scope.ts +0 -61
  413. package/src/domains/dispatch/placement.ts +2 -2
  414. package/src/domains/dispatch/receipt-findings.ts +1 -1
  415. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  416. package/src/domains/dispatch/reservation-store.ts +24 -27
  417. package/src/domains/dispatch/route-decision.ts +1 -1
  418. package/src/domains/dispatch/route-history.ts +1 -1
  419. package/src/domains/dispatch/route-policy.ts +1 -1
  420. package/src/domains/dispatch/route-readiness.ts +0 -28
  421. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  422. package/src/domains/dispatch/run-event-journal.ts +599 -0
  423. package/src/domains/dispatch/state.ts +45 -1
  424. package/src/domains/dispatch/tool-stats.ts +1 -1
  425. package/src/domains/dispatch/transport.ts +2 -19
  426. package/src/domains/dispatch/types.ts +16 -3
  427. package/src/domains/dispatch/validation.ts +33 -8
  428. package/src/domains/dispatch/worker-protocol.ts +2 -2
  429. package/src/domains/eval/artifacts/store.ts +5 -4
  430. package/src/domains/eval/compare/compare.ts +3 -16
  431. package/src/domains/eval/compare/thresholds.ts +0 -8
  432. package/src/domains/eval/execution-provenance.ts +1 -1
  433. package/src/domains/eval/inventory.ts +113 -0
  434. package/src/domains/eval/metrics/token-stream.ts +0 -7
  435. package/src/domains/eval/report.ts +1 -1
  436. package/src/domains/eval/runner.ts +1 -1
  437. package/src/domains/eval/runners/clio-run.ts +7 -6
  438. package/src/domains/eval/runners/external-command.ts +4 -3
  439. package/src/domains/eval/schema/artifact.ts +1 -1
  440. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  441. package/src/domains/eval/schema/behavioral.ts +7 -6
  442. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  443. package/src/domains/eval/schema/naming.ts +10 -0
  444. package/src/domains/eval/schema/serving.ts +31 -0
  445. package/src/domains/eval/schema/suite.ts +2 -2
  446. package/src/domains/eval/schema/validate.ts +9 -5
  447. package/src/domains/eval/schema/verdict.ts +4 -2
  448. package/src/domains/eval/store.ts +12 -2
  449. package/src/domains/eval/suites/run.ts +12 -6
  450. package/src/domains/eval/types.ts +1 -1
  451. package/src/domains/eval/workspaces/git.ts +1 -1
  452. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  453. package/src/domains/evidence/build.ts +13 -5
  454. package/src/domains/evidence/store.ts +6 -0
  455. package/src/domains/interop/consent.ts +7 -7
  456. package/src/domains/interop/extension.ts +1 -1
  457. package/src/domains/lifecycle/doctor.ts +27 -21
  458. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  459. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  460. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  461. package/src/domains/lifecycle/migrations/index.ts +20 -1
  462. package/src/domains/lifecycle/naming-history.ts +153 -0
  463. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  464. package/src/domains/lifecycle/naming-resources.ts +261 -0
  465. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  466. package/src/domains/lifecycle/naming-yazi.ts +81 -0
  467. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  468. package/src/domains/memory/index.ts +0 -1
  469. package/src/domains/memory/task-memory-handoff.ts +6 -3
  470. package/src/domains/memory/task-memory-policy.ts +6 -10
  471. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  472. package/src/domains/middleware/index.ts +7 -0
  473. package/src/domains/middleware/marketplace-offer.ts +339 -0
  474. package/src/domains/middleware/memory-intervention.ts +33 -21
  475. package/src/domains/middleware/runtime.ts +2 -2
  476. package/src/domains/mux/contract.ts +566 -0
  477. package/src/domains/mux/detect.ts +182 -0
  478. package/src/domains/mux/dock-controller.ts +365 -0
  479. package/src/domains/mux/extension.ts +53 -0
  480. package/src/domains/mux/index.ts +116 -0
  481. package/src/domains/mux/manifest.ts +6 -0
  482. package/src/domains/mux/operations.ts +192 -0
  483. package/src/domains/mux/pane-registry.ts +90 -0
  484. package/src/domains/mux/protocol.ts +62 -0
  485. package/src/domains/mux/socket-client.ts +964 -0
  486. package/src/domains/mux/types.ts +265 -0
  487. package/src/domains/mux/viewer-command.ts +59 -0
  488. package/src/domains/mux/yazi/assets/init.lua +2 -0
  489. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  490. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  491. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  492. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  493. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  494. package/src/domains/mux/yazi/event-stream.ts +182 -0
  495. package/src/domains/mux/yazi/profile.ts +299 -0
  496. package/src/domains/mux/yazi/session.ts +251 -0
  497. package/src/domains/mux/yazi/theme.ts +30 -0
  498. package/src/domains/observability/cost.ts +21 -0
  499. package/src/domains/observability/extension.ts +1 -1
  500. package/src/domains/observability/index.ts +2 -0
  501. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  502. package/src/domains/observability/projection.ts +1 -1
  503. package/src/domains/observability/trace-store.ts +63 -11
  504. package/src/domains/prompts/compiler.ts +2 -2
  505. package/src/domains/prompts/extension.ts +3 -3
  506. package/src/domains/prompts/fragments/identity/clio-worker.md +1 -1
  507. package/src/domains/prompts/fragments/operating/skills.md +25 -18
  508. package/src/domains/providers/endpoint-capacity.ts +154 -22
  509. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  510. package/src/domains/providers/extension.ts +25 -8
  511. package/src/domains/providers/index.ts +22 -0
  512. package/src/domains/providers/knowledge-base-path.ts +1 -1
  513. package/src/domains/providers/model-runtime-capabilities.ts +46 -2
  514. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  515. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +4 -4
  516. package/src/domains/providers/plugins.ts +1 -1
  517. package/src/domains/providers/resolver.ts +1 -1
  518. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  519. package/src/domains/providers/runtimes/builtins.ts +2 -0
  520. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  521. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  522. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  523. package/src/domains/providers/runtimes/common/probe-helpers.ts +2 -2
  524. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  525. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  526. package/src/domains/providers/runtimes/protocol/litellm.ts +285 -0
  527. package/src/domains/providers/support.ts +1 -0
  528. package/src/domains/providers/target-model-cache.ts +124 -0
  529. package/src/domains/providers/types/knowledge-base.ts +13 -0
  530. package/src/domains/providers/types/local-model-quirks.ts +2 -2
  531. package/src/domains/providers/types/target-descriptor.ts +3 -3
  532. package/src/domains/resources/extension.ts +1 -1
  533. package/src/domains/resources/index.ts +3 -0
  534. package/src/domains/resources/library.ts +6 -6
  535. package/src/domains/resources/prompts/loader.ts +1 -1
  536. package/src/domains/resources/skills/content-hash.ts +7 -6
  537. package/src/domains/resources/skills/evals.ts +1 -1
  538. package/src/domains/resources/skills/install.ts +36 -12
  539. package/src/domains/resources/skills/loader.ts +72 -13
  540. package/src/domains/resources/skills/marketplace.ts +21 -2
  541. package/src/domains/resources/skills/promotion.ts +214 -0
  542. package/src/domains/safety/action-classifier.ts +6 -0
  543. package/src/domains/safety/audit.ts +2 -2
  544. package/src/domains/safety/finish-contract.ts +2 -1
  545. package/src/domains/safety/run-effects.ts +1 -1
  546. package/src/domains/scheduling/extension.ts +4 -4
  547. package/src/domains/session/archive-readers.ts +9 -1
  548. package/src/domains/session/compaction/branch-summary.ts +4 -0
  549. package/src/domains/session/compaction/compact.ts +1 -1
  550. package/src/domains/session/compaction/tokens.ts +4 -0
  551. package/src/domains/session/context-accounting.ts +1 -1
  552. package/src/domains/session/decision-board.ts +1 -1
  553. package/src/domains/session/extension.ts +1 -1
  554. package/src/domains/session/handoff.ts +2 -2
  555. package/src/domains/session/prompt-manifest.ts +0 -5
  556. package/src/domains/session/protected-artifact-journal.ts +12 -6
  557. package/src/domains/session/retry.ts +1 -1
  558. package/src/domains/share/archive.ts +85 -36
  559. package/src/domains/toolchain/archive.ts +175 -0
  560. package/src/domains/toolchain/contract.ts +28 -0
  561. package/src/domains/toolchain/extension.ts +47 -0
  562. package/src/domains/toolchain/index.ts +39 -0
  563. package/src/domains/toolchain/install.ts +327 -0
  564. package/src/domains/toolchain/manifest.ts +8 -0
  565. package/src/domains/toolchain/paths.ts +34 -0
  566. package/src/domains/toolchain/registry.ts +265 -0
  567. package/src/domains/toolchain/remove.ts +218 -0
  568. package/src/domains/toolchain/resolve.ts +182 -0
  569. package/src/domains/toolchain/types.ts +113 -0
  570. package/src/domains/toolchain/version.ts +88 -0
  571. package/src/engine/acp/adapter.ts +3 -3
  572. package/src/engine/acp/event-mapper.ts +3 -3
  573. package/src/engine/acp/server.ts +440 -96
  574. package/src/engine/acp/tool-mediator.ts +2 -2
  575. package/src/engine/acp/types.ts +20 -2
  576. package/src/engine/alcf-oauth.ts +5 -5
  577. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  578. package/src/engine/api-registry.ts +1 -1
  579. package/src/engine/apis/llamacpp-residency.ts +1 -19
  580. package/src/engine/apis/lmstudio.ts +1 -6
  581. package/src/engine/apis/ollama-native.ts +3 -3
  582. package/src/engine/apis/openai-completions.ts +2 -2
  583. package/src/engine/apis/residency.ts +3 -9
  584. package/src/engine/claude/sdk-module.ts +87 -0
  585. package/src/engine/claude/sdk-runtime.ts +25 -17
  586. package/src/engine/claude/subprocess-runtime.ts +1 -1
  587. package/src/engine/claude/tool-safety.ts +4 -4
  588. package/src/engine/loop-guard.ts +0 -5
  589. package/src/engine/session.ts +14 -7
  590. package/src/engine/tui-primitives.ts +21 -0
  591. package/src/engine/tui.ts +1 -0
  592. package/src/engine/worker-events.ts +6 -6
  593. package/src/engine/worker-runtime.ts +16 -26
  594. package/src/entry/boot-options.ts +2 -0
  595. package/src/entry/orchestrator.ts +207 -90
  596. package/src/entry/panes-activation.ts +31 -0
  597. package/src/entry/with-panes.ts +20 -0
  598. package/src/interactive/application-controller.ts +21 -21
  599. package/src/interactive/bus-notices.ts +2 -2
  600. package/src/interactive/chat-loop.ts +8 -8
  601. package/src/interactive/chat-panel.ts +1 -1
  602. package/src/interactive/clio-editor.ts +105 -1
  603. package/src/interactive/context-activity.ts +8 -6
  604. package/src/interactive/context-meter.ts +3 -6
  605. package/src/interactive/context-overlay.ts +2 -1
  606. package/src/interactive/cost-overlay.ts +3 -1
  607. package/src/interactive/council-grid.ts +3 -5
  608. package/src/interactive/council.ts +11 -0
  609. package/src/interactive/dispatch-board.ts +56 -49
  610. package/src/interactive/editor-bash.ts +21 -0
  611. package/src/interactive/editor-steer.ts +9 -4
  612. package/src/interactive/editor-submit.ts +24 -18
  613. package/src/interactive/external-editor.ts +1 -1
  614. package/src/interactive/file-reference-completion.ts +360 -0
  615. package/src/interactive/footer/dashboard.ts +15 -17
  616. package/src/interactive/footer/notifications.ts +14 -8
  617. package/src/interactive/footer/widgets.ts +2 -44
  618. package/src/interactive/interactive-application.ts +229 -62
  619. package/src/interactive/interactive-event-projection.ts +1 -1
  620. package/src/interactive/interactive-input-runtime.ts +9 -2
  621. package/src/interactive/interactive-presentation.ts +21 -16
  622. package/src/interactive/interactive-shell.ts +2 -2
  623. package/src/interactive/interactive-slash-runtime.ts +99 -23
  624. package/src/interactive/interactive-subscriptions.ts +1 -1
  625. package/src/interactive/interactive-tickers.ts +1 -1
  626. package/src/interactive/keybinding-manager.ts +4 -4
  627. package/src/interactive/layout.ts +1 -1
  628. package/src/interactive/memory-overlay.ts +3 -2
  629. package/src/interactive/modal-marker.ts +151 -0
  630. package/src/interactive/mutation-preview.ts +1 -1
  631. package/src/interactive/mux-bridge.ts +214 -0
  632. package/src/interactive/overlay-frame.ts +62 -14
  633. package/src/interactive/overlay-general-openers.ts +7 -2
  634. package/src/interactive/overlay-key-routing.ts +21 -10
  635. package/src/interactive/overlay-lifecycle.ts +20 -4
  636. package/src/interactive/overlay-model-selectors.ts +43 -6
  637. package/src/interactive/overlay-permission-lifecycle.ts +90 -22
  638. package/src/interactive/overlay-transitions.ts +18 -4
  639. package/src/interactive/overlays/agents.ts +3 -2
  640. package/src/interactive/overlays/ask-user.ts +161 -41
  641. package/src/interactive/overlays/auth-dialog.ts +1 -0
  642. package/src/interactive/overlays/context-reset.ts +29 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +29 -4
  644. package/src/interactive/overlays/decisions.ts +15 -13
  645. package/src/interactive/overlays/extensions.ts +1 -0
  646. package/src/interactive/overlays/fleet-run-approval.ts +4 -3
  647. package/src/interactive/overlays/handoff-review.ts +3 -2
  648. package/src/interactive/overlays/help-reference.ts +2 -0
  649. package/src/interactive/overlays/interop.ts +2 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +2 -1
  651. package/src/interactive/overlays/library-tabs.ts +28 -0
  652. package/src/interactive/overlays/list-overlay.ts +10 -1
  653. package/src/interactive/overlays/message-picker.ts +2 -1
  654. package/src/interactive/overlays/model-scope.ts +86 -0
  655. package/src/interactive/overlays/model-selector.ts +40 -31
  656. package/src/interactive/overlays/prompts.ts +11 -4
  657. package/src/interactive/overlays/session-selector.ts +3 -2
  658. package/src/interactive/overlays/settings-sections.ts +30 -0
  659. package/src/interactive/overlays/settings.ts +849 -268
  660. package/src/interactive/overlays/side-question.ts +3 -2
  661. package/src/interactive/overlays/skills-hub.ts +11 -19
  662. package/src/interactive/overlays/tree-selector.ts +3 -2
  663. package/src/interactive/pane-policy.ts +46 -0
  664. package/src/interactive/panes-runtime.ts +318 -0
  665. package/src/interactive/permission-overlay.ts +2 -2
  666. package/src/interactive/renderers/compaction-summary.ts +29 -0
  667. package/src/interactive/renderers/retry-status.ts +12 -4
  668. package/src/interactive/renderers/tool-execution.ts +4 -4
  669. package/src/interactive/renderers/worker-entry.ts +122 -14
  670. package/src/interactive/session-transcript.ts +3 -3
  671. package/src/interactive/slash-autocomplete.ts +454 -165
  672. package/src/interactive/slash-commands.ts +521 -189
  673. package/src/interactive/slash-spec.ts +160 -17
  674. package/src/interactive/status/controller.ts +2 -2
  675. package/src/interactive/stream-pacing-policy.ts +1 -1
  676. package/src/interactive/tasks-overlay.ts +21 -13
  677. package/src/interactive/terminal-lease.ts +6 -7
  678. package/src/interactive/theme/tokens.ts +3 -14
  679. package/src/interactive/turn-context.ts +58 -13
  680. package/src/interactive/turn-persistence.ts +2 -2
  681. package/src/interactive/turn-prewarm.ts +2 -2
  682. package/src/interactive/turn-runtime.ts +8 -8
  683. package/src/interactive/turn-state.ts +1 -1
  684. package/src/interactive/view/artifacts.ts +120 -9
  685. package/src/interactive/view/view-overlay.ts +14 -10
  686. package/src/interactive/watch-pane.ts +180 -0
  687. package/src/interactive/welcome-dashboard.ts +15 -15
  688. package/src/interactive/worker-progress.ts +11 -5
  689. package/src/interactive/worker-receipts.ts +20 -2
  690. package/src/interactive/worker-stream.ts +6 -4
  691. package/src/interactive/yazi-bridge.ts +451 -0
  692. package/src/tools/ask-user.ts +3 -3
  693. package/src/tools/bash.ts +1 -1
  694. package/src/tools/bootstrap.ts +26 -2
  695. package/src/tools/builtin-tool-catalog.ts +16 -1
  696. package/src/tools/compete-worktrees.ts +108 -17
  697. package/src/tools/context/index.ts +15 -1
  698. package/src/tools/core-bootstrap.ts +2 -1
  699. package/src/tools/dispatch-admission.ts +18 -5
  700. package/src/tools/dispatch-arguments.ts +21 -21
  701. package/src/tools/dispatch-plan.ts +0 -11
  702. package/src/tools/dispatch-run-events.ts +145 -28
  703. package/src/tools/dispatch-runner.ts +40 -13
  704. package/src/tools/dispatch-types.ts +15 -3
  705. package/src/tools/dispatch.ts +2 -2
  706. package/src/tools/executables.ts +17 -14
  707. package/src/tools/find.ts +1 -6
  708. package/src/tools/monitor.ts +4 -4
  709. package/src/tools/observation.ts +54 -4
  710. package/src/tools/observers.ts +0 -33
  711. package/src/tools/panes-surface.ts +38 -0
  712. package/src/tools/panes.ts +112 -0
  713. package/src/tools/policy.ts +10 -1
  714. package/src/tools/presentation.ts +1 -0
  715. package/src/tools/task-worktree.ts +28 -7
  716. package/src/tools/verify/authoring.ts +3 -6
  717. package/src/tools/verify/frontend.ts +1 -1
  718. package/src/tools/web-fetch.ts +1 -1
  719. package/src/worker/entry.ts +4 -3
  720. package/src/worker/protocol.ts +16 -14
  721. package/src/worker/spec-contract.ts +2 -2
  722. package/src/worker/stdin-demux.ts +2 -2
  723. package/dist/chunk-D73KXYPF.js +0 -37
  724. package/dist/chunk-MLOK6ZOS.js +0 -2888
  725. package/dist/chunk-PNY46YEY.js +0 -1581
  726. package/dist/chunk-XDOQXGFO.js +0 -515
  727. package/dist/chunk-YKOFT37S.js +0 -279
  728. package/dist/clio-LT5V7SSZ.js +0 -26
  729. package/dist/configure-2WYWSCSD.js +0 -49
  730. package/dist/doctor-TWBWFK5V.js +0 -165
  731. package/src/engine/apis/degraded-inference.ts +0 -95
  732. /package/skills/meta/{clio-test → clio-coder-test}/references/harness.md +0 -0
  733. /package/skills/meta/{clio-test → clio-coder-test}/references/test-map.md +0 -0
@@ -0,0 +1,1412 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ ROUTE_POLICY_VERSION,
4
+ isRouteDecisionAgentSelection,
5
+ isRoutingIntent
6
+ } from "./chunk-7EPLI7VL.js";
7
+ import {
8
+ isExecutionRole
9
+ } from "./chunk-H7IXIC72.js";
10
+ import {
11
+ readSettings
12
+ } from "./chunk-EIMVLWB3.js";
13
+ import {
14
+ readClioVersion,
15
+ resolvePackageRoot
16
+ } from "./chunk-IWHMRKLL.js";
17
+ import {
18
+ require_dist
19
+ } from "./chunk-APJ265NV.js";
20
+ import {
21
+ __toESM,
22
+ init_esm_shims
23
+ } from "./chunk-3R73A4XB.js";
24
+
25
+ // src/domains/dispatch/receipt-integrity.ts
26
+ init_esm_shims();
27
+ import { createHash } from "node:crypto";
28
+ var RUN_RECEIPT_INTEGRITY_VERSION = 20;
29
+ var RUN_RECEIPT_INTEGRITY_ALGORITHM = "sha256";
30
+ function sha256(input) {
31
+ return createHash("sha256").update(input, "utf8").digest("hex");
32
+ }
33
+ function canonicalJson(value) {
34
+ return serializeCanonical(value);
35
+ }
36
+ function serializeCanonical(value) {
37
+ if (value === null) return "null";
38
+ if (typeof value === "number") {
39
+ if (!Number.isFinite(value)) {
40
+ throw new Error(`receipt integrity: non-finite number ${String(value)} is not representable`);
41
+ }
42
+ return JSON.stringify(value);
43
+ }
44
+ if (typeof value === "string" || typeof value === "boolean") return JSON.stringify(value);
45
+ if (typeof value === "bigint") throw new Error("receipt integrity: bigint is not representable");
46
+ if (typeof value === "symbol" || typeof value === "function") {
47
+ throw new Error(`receipt integrity: ${typeof value} is not representable`);
48
+ }
49
+ if (value === void 0) throw new Error("receipt integrity: undefined is not representable at root");
50
+ if (Array.isArray(value)) {
51
+ const parts = [];
52
+ for (let i = 0; i < value.length; i++) {
53
+ if (!(i in value) || value[i] === void 0) {
54
+ parts.push("null");
55
+ continue;
56
+ }
57
+ parts.push(serializeCanonical(value[i]));
58
+ }
59
+ return `[${parts.join(",")}]`;
60
+ }
61
+ if (typeof value === "object") {
62
+ const obj = value;
63
+ const keys = Object.keys(obj).sort();
64
+ const parts = [];
65
+ for (const key of keys) {
66
+ const child = obj[key];
67
+ if (child === void 0) continue;
68
+ parts.push(`${JSON.stringify(key)}:${serializeCanonical(child)}`);
69
+ }
70
+ return `{${parts.join(",")}}`;
71
+ }
72
+ throw new Error(`receipt integrity: unsupported value of type ${typeof value}`);
73
+ }
74
+ var RECEIPT_INTEGRITY_FIELD_COVERAGE = {
75
+ runId: true,
76
+ agentId: true,
77
+ executionRole: true,
78
+ agentAudience: true,
79
+ requestOrigin: true,
80
+ task: true,
81
+ intent: true,
82
+ pathScope: true,
83
+ // Historical receipts omit this field, so their receipt and ledger payloads remain unchanged.
84
+ budget: true,
85
+ targetId: true,
86
+ wireModelId: true,
87
+ runtimeId: true,
88
+ runtimeKind: true,
89
+ startedAt: true,
90
+ endedAt: true,
91
+ outcome: true,
92
+ outcomeDetail: true,
93
+ lineage: true,
94
+ identity: true,
95
+ node: true,
96
+ attestation: true,
97
+ reroutes: true,
98
+ pipeline: true,
99
+ gate: true,
100
+ council: true,
101
+ plan: true,
102
+ fleetGate: true,
103
+ personaOverride: true,
104
+ projectContext: true,
105
+ // Always set on receipts written after #104 landed; absent only on older
106
+ // receipts, which omit these fields from canonical serialization.
107
+ rulesApplied: true,
108
+ operatorProfileApplied: true,
109
+ exitCode: true,
110
+ failureMessage: true,
111
+ tokenCount: true,
112
+ inputTokenCount: true,
113
+ outputTokenCount: true,
114
+ cacheReadTokenCount: true,
115
+ cacheWriteTokenCount: true,
116
+ reasoningTokenCount: true,
117
+ upstreamResponses: true,
118
+ output: true,
119
+ costUsd: true,
120
+ costProvenance: true,
121
+ compiledPromptHash: true,
122
+ staticCompositionHash: true,
123
+ staticShellHash: true,
124
+ sessionShellHash: true,
125
+ dynamicHash: true,
126
+ promptSignature: true,
127
+ toolSignature: true,
128
+ clioCoderVersion: true,
129
+ piMonoVersion: true,
130
+ platform: true,
131
+ nodeVersion: true,
132
+ toolCalls: true,
133
+ toolStats: true,
134
+ toolActivity: true,
135
+ verification: true,
136
+ hostVerification: true,
137
+ worktree: true,
138
+ routingIntent: true,
139
+ quality: true,
140
+ skillActivations: true,
141
+ autonomyEnforcement: true,
142
+ safety: true,
143
+ reproducibility: true,
144
+ runtimeResolution: true,
145
+ delegation: true,
146
+ findingsSummary: true,
147
+ // Both are optional and absent unless the run produced the condition they
148
+ // name, so a receipt that carries neither digests exactly as it did before
149
+ // they existed and the integrity version stays where it is.
150
+ validationGrounding: true,
151
+ capabilityMismatch: true,
152
+ // Same reasoning: absent unless the run had an agent ledger, so a receipt
153
+ // without one omits the field from canonical serialization.
154
+ ledgerContribution: true,
155
+ sessionId: true,
156
+ briefing: true,
157
+ outcomeCode: true,
158
+ steering: true,
159
+ routeDecision: true
160
+ };
161
+ var RECEIPT_FIELDS = Object.keys(RECEIPT_INTEGRITY_FIELD_COVERAGE);
162
+ function selectedReceiptFields(receipt, fields) {
163
+ const source = receipt;
164
+ const result = {};
165
+ for (const field of fields) {
166
+ const value = source[field];
167
+ if (value !== void 0) result[field] = value;
168
+ }
169
+ return result;
170
+ }
171
+ function receiptDigestFields(receipt, legacyNaming = false) {
172
+ const result = selectedReceiptFields(receipt, RECEIPT_FIELDS);
173
+ if (legacyNaming) {
174
+ const source = receipt;
175
+ const version = source.clioVersion ?? source.clioCoderVersion;
176
+ delete result.clioCoderVersion;
177
+ if (version !== void 0) result.clioVersion = version;
178
+ }
179
+ result.briefing = receipt.briefing ?? null;
180
+ result.outcomeCode = receipt.outcomeCode ?? null;
181
+ result.steering = receipt.steering ?? null;
182
+ return result;
183
+ }
184
+ function ledgerDigestFields(envelope) {
185
+ return {
186
+ id: envelope.id,
187
+ agentId: envelope.agentId,
188
+ executionRole: envelope.executionRole,
189
+ task: envelope.task,
190
+ ...envelope.budget !== void 0 ? { budget: envelope.budget } : {},
191
+ targetId: envelope.targetId,
192
+ wireModelId: envelope.wireModelId,
193
+ runtimeId: envelope.runtimeId,
194
+ runtimeKind: envelope.runtimeKind,
195
+ startedAt: envelope.startedAt,
196
+ endedAt: envelope.endedAt,
197
+ status: envelope.status,
198
+ exitCode: envelope.exitCode,
199
+ sessionId: envelope.sessionId,
200
+ cwd: envelope.cwd,
201
+ tokenCount: envelope.tokenCount,
202
+ cacheReadTokenCount: envelope.cacheReadTokenCount,
203
+ cacheWriteTokenCount: envelope.cacheWriteTokenCount,
204
+ reasoningTokenCount: envelope.reasoningTokenCount,
205
+ staticShellHash: envelope.staticShellHash,
206
+ sessionShellHash: envelope.sessionShellHash,
207
+ dynamicHash: envelope.dynamicHash,
208
+ costUsd: envelope.costUsd,
209
+ agentAudience: envelope.agentAudience ?? null,
210
+ requestOrigin: envelope.requestOrigin ?? null,
211
+ outcome: envelope.outcome ?? null,
212
+ outcomeDetail: envelope.outcomeDetail ?? null,
213
+ lineage: envelope.lineage ?? null,
214
+ identity: envelope.identity ?? null,
215
+ node: envelope.node ?? null,
216
+ reroutes: envelope.reroutes ?? null,
217
+ pipeline: envelope.pipeline ?? null,
218
+ gate: envelope.gate ?? null,
219
+ plan: envelope.plan ?? null,
220
+ personaOverride: envelope.personaOverride ?? null,
221
+ inputTokenCount: envelope.inputTokenCount ?? 0,
222
+ outputTokenCount: envelope.outputTokenCount ?? 0,
223
+ promptSignature: envelope.promptSignature ?? null,
224
+ toolSignature: envelope.toolSignature ?? null,
225
+ briefing: envelope.briefing ?? null,
226
+ outcomeCode: envelope.outcomeCode ?? null,
227
+ steering: envelope.steering ?? null
228
+ };
229
+ }
230
+ function integrityPayload(receipt, envelope, legacyNaming = false) {
231
+ return {
232
+ contract: legacyNaming ? "clio.runReceipt.integrity" : "clio-coder.runReceipt.integrity",
233
+ version: RUN_RECEIPT_INTEGRITY_VERSION,
234
+ sources: ["receipt", "run-ledger"],
235
+ receipt: receiptDigestFields(receipt, legacyNaming),
236
+ ledger: ledgerDigestFields(envelope)
237
+ };
238
+ }
239
+ function computeReceiptIntegrity(receipt, envelope, legacyNaming = false) {
240
+ return {
241
+ version: RUN_RECEIPT_INTEGRITY_VERSION,
242
+ algorithm: RUN_RECEIPT_INTEGRITY_ALGORITHM,
243
+ digest: sha256(canonicalJson(integrityPayload(receipt, envelope, legacyNaming)))
244
+ };
245
+ }
246
+ function isReceiptQuality(value) {
247
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
248
+ const quality = value;
249
+ if (quality.version !== 1 || !Array.isArray(quality.typedValidations)) return false;
250
+ if (!quality.typedValidations.every(
251
+ (fact) => fact !== null && typeof fact === "object" && typeof fact.sourceId === "string" && typeof fact.validatorDigest === "string" && /^[0-9a-f]{64}$/.test(String(fact.validatorDigest)) && typeof fact.passed === "boolean"
252
+ ))
253
+ return false;
254
+ const schema = quality.responseSchema;
255
+ if (!schema || typeof schema !== "object" || Array.isArray(schema)) return false;
256
+ const responseSchema = schema;
257
+ const resultContract = quality.resultContract;
258
+ const validResultContract = resultContract === null || resultContract !== void 0 && typeof resultContract === "object" && !Array.isArray(resultContract) && typeof resultContract.sourceId === "string" && typeof resultContract.validatorDigest === "string" && /^[0-9a-f]{64}$/.test(String(resultContract.validatorDigest)) && (resultContract.conformance === "pass" || resultContract.conformance === "fail" || resultContract.conformance === "not-reached") && (resultContract.quality === "pass" || resultContract.quality === "fail" || resultContract.quality === "unmeasured");
259
+ return (responseSchema.sourceId === null || typeof responseSchema.sourceId === "string") && (responseSchema.schemaDigest === null || typeof responseSchema.schemaDigest === "string" && /^[0-9a-f]{64}$/.test(responseSchema.schemaDigest)) && typeof responseSchema.runtimeEnforceable === "boolean" && (responseSchema.enforcementPassed === null || typeof responseSchema.enforcementPassed === "boolean") && validResultContract;
260
+ }
261
+ function isCurrentRouteDecision(value) {
262
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
263
+ const decision = value;
264
+ return decision.policyVersion === ROUTE_POLICY_VERSION && (decision.mode === "fixed" || decision.mode === "shadow" || decision.mode === "active") && isRouteDecisionAgentSelection(decision.agentSelection) && typeof decision.decisionHash === "string" && /^[0-9a-f]{64}$/u.test(decision.decisionHash);
265
+ }
266
+ function withReceiptIntegrity(receipt, envelope) {
267
+ if (!isReceiptQuality(receipt.quality)) throw new Error("receipt integrity: required quality block invalid");
268
+ if (!isExecutionRole(receipt.executionRole)) throw new Error("receipt integrity: required execution role invalid");
269
+ if (!isRoutingIntent(receipt.routingIntent)) {
270
+ throw new Error("receipt integrity: required routing intent invalid");
271
+ }
272
+ if (receipt.routeDecision !== void 0 && !isCurrentRouteDecision(receipt.routeDecision)) {
273
+ throw new Error("receipt integrity: route decision is invalid or retired");
274
+ }
275
+ return {
276
+ ...receipt,
277
+ routingIntent: receipt.routingIntent,
278
+ integrity: computeReceiptIntegrity(receipt, envelope)
279
+ };
280
+ }
281
+ function isReceiptIntegrity(value) {
282
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
283
+ const candidate = value;
284
+ return candidate.version === RUN_RECEIPT_INTEGRITY_VERSION && candidate.algorithm === RUN_RECEIPT_INTEGRITY_ALGORITHM && typeof candidate.digest === "string" && /^[0-9a-f]{64}$/.test(candidate.digest);
285
+ }
286
+ function firstLedgerMismatch(receipt, envelope) {
287
+ const sharedFields = [
288
+ ["runId", receipt.runId, envelope.id],
289
+ ["agentId", receipt.agentId, envelope.agentId],
290
+ ["executionRole", receipt.executionRole, envelope.executionRole],
291
+ ["agentAudience", receipt.agentAudience, envelope.agentAudience],
292
+ ["requestOrigin", receipt.requestOrigin, envelope.requestOrigin],
293
+ ["task", receipt.task, envelope.task],
294
+ ["targetId", receipt.targetId, envelope.targetId],
295
+ ["wireModelId", receipt.wireModelId, envelope.wireModelId],
296
+ ["runtimeId", receipt.runtimeId, envelope.runtimeId],
297
+ ["runtimeKind", receipt.runtimeKind, envelope.runtimeKind],
298
+ ["startedAt", receipt.startedAt, envelope.startedAt],
299
+ ["endedAt", receipt.endedAt, envelope.endedAt],
300
+ ["exitCode", receipt.exitCode, envelope.exitCode],
301
+ ["tokenCount", receipt.tokenCount, envelope.tokenCount],
302
+ ["cacheReadTokenCount", receipt.cacheReadTokenCount ?? 0, envelope.cacheReadTokenCount ?? 0],
303
+ ["cacheWriteTokenCount", receipt.cacheWriteTokenCount ?? 0, envelope.cacheWriteTokenCount ?? 0],
304
+ ["reasoningTokenCount", receipt.reasoningTokenCount ?? 0, envelope.reasoningTokenCount ?? 0],
305
+ ["staticShellHash", receipt.staticShellHash ?? null, envelope.staticShellHash ?? null],
306
+ ["sessionShellHash", receipt.sessionShellHash ?? null, envelope.sessionShellHash ?? null],
307
+ ["dynamicHash", receipt.dynamicHash ?? null, envelope.dynamicHash ?? null],
308
+ ["costUsd", receipt.costUsd, envelope.costUsd],
309
+ ["sessionId", receipt.sessionId, envelope.sessionId],
310
+ ["outcome", receipt.outcome ?? null, envelope.outcome ?? null],
311
+ ["outcomeDetail", receipt.outcomeDetail ?? null, envelope.outcomeDetail ?? null],
312
+ ["nodeId", receipt.node?.id ?? null, envelope.node?.id ?? null],
313
+ ["outcomeCode", receipt.outcomeCode ?? null, envelope.outcomeCode ?? null]
314
+ ];
315
+ for (const [field, receiptValue, ledgerValue] of sharedFields) {
316
+ if (!Object.is(receiptValue, ledgerValue)) return field;
317
+ }
318
+ if (canonicalJson(receipt.briefing ?? null) !== canonicalJson(envelope.briefing ?? null)) return "briefing";
319
+ if (canonicalJson(receipt.budget ?? null) !== canonicalJson(envelope.budget ?? null)) return "budget";
320
+ if (canonicalJson(receipt.steering ?? null) !== canonicalJson(envelope.steering ?? null)) return "steering";
321
+ return null;
322
+ }
323
+ function verifyReceiptIntegrity(receipt, envelope) {
324
+ if (!isReceiptQuality(receipt.quality) || !isReceiptIntegrity(receipt.integrity)) {
325
+ return { ok: false, reason: "integrity invalid" };
326
+ }
327
+ if (!isExecutionRole(receipt.executionRole)) return { ok: false, reason: "execution role invalid" };
328
+ if (!isRoutingIntent(receipt.routingIntent)) {
329
+ return { ok: false, reason: "routing intent invalid" };
330
+ }
331
+ if (receipt.routeDecision !== void 0 && !isCurrentRouteDecision(receipt.routeDecision)) {
332
+ return { ok: false, reason: "route decision invalid" };
333
+ }
334
+ const mismatch = firstLedgerMismatch(receipt, envelope);
335
+ if (mismatch) {
336
+ return { ok: false, reason: `ledger mismatch: ${mismatch}` };
337
+ }
338
+ const expected = computeReceiptIntegrity(receipt, envelope);
339
+ const legacyExpected = computeReceiptIntegrity(receipt, envelope, true);
340
+ if (expected.digest !== receipt.integrity.digest && legacyExpected.digest !== receipt.integrity.digest) {
341
+ return { ok: false, reason: "integrity mismatch" };
342
+ }
343
+ return { ok: true };
344
+ }
345
+
346
+ // src/domains/evidence/trust-status.ts
347
+ init_esm_shims();
348
+ var TRUST_STATUS_VERSION = 1;
349
+ var TRUST_STATUS_MAX_ARTIFACT_REFERENCES = 16;
350
+ var TRUST_STATUS_MAX_IDENTIFIER_LENGTH = 512;
351
+ var TRUST_STATUS_AXES = [
352
+ "artifactIntegrity",
353
+ "validationGrounding",
354
+ "independentReview",
355
+ "contextProvenance",
356
+ "autonomyEnforcement",
357
+ "completionEvidence"
358
+ ];
359
+ var TRUST_STATUS_STATES = {
360
+ artifactIntegrity: ["verified", "failed", "absent", "unknown", "not_applicable"],
361
+ validationGrounding: ["validated", "failed", "ungrounded", "absent", "unknown", "not_applicable"],
362
+ independentReview: ["passed", "failed", "inconclusive", "not_independent", "absent", "unknown", "not_applicable"],
363
+ contextProvenance: ["recorded", "invalid", "absent", "unknown", "not_applicable"],
364
+ autonomyEnforcement: ["enforced", "approximated", "bypassed", "absent", "unknown", "not_applicable"],
365
+ completionEvidence: ["evidenced", "incomplete", "limited", "absent", "unknown", "not_applicable"]
366
+ };
367
+ var SELF_REPORTED_ARTIFACT_KINDS = /* @__PURE__ */ new Set([
368
+ "finish_contract_evidence",
369
+ "run_receipt"
370
+ ]);
371
+ var AXIS_STATES = {
372
+ artifactIntegrity: new Set(TRUST_STATUS_STATES.artifactIntegrity),
373
+ validationGrounding: new Set(TRUST_STATUS_STATES.validationGrounding),
374
+ independentReview: new Set(TRUST_STATUS_STATES.independentReview),
375
+ contextProvenance: new Set(TRUST_STATUS_STATES.contextProvenance),
376
+ autonomyEnforcement: new Set(TRUST_STATUS_STATES.autonomyEnforcement),
377
+ completionEvidence: new Set(TRUST_STATUS_STATES.completionEvidence)
378
+ };
379
+ var AXIS_SOURCES = {
380
+ artifactIntegrity: /* @__PURE__ */ new Set(["receipt_integrity_verification", "compatibility"]),
381
+ validationGrounding: /* @__PURE__ */ new Set(["run_receipt", "evidence_bundle", "compatibility"]),
382
+ independentReview: /* @__PURE__ */ new Set(["gate_decision", "compatibility"]),
383
+ contextProvenance: /* @__PURE__ */ new Set(["run_receipt", "evidence_bundle", "compatibility"]),
384
+ autonomyEnforcement: /* @__PURE__ */ new Set(["run_receipt", "compatibility"]),
385
+ completionEvidence: /* @__PURE__ */ new Set(["finish_contract", "compatibility"])
386
+ };
387
+ var SOURCE_AUTHORITIES = {
388
+ receipt_integrity_verification: /* @__PURE__ */ new Set(["clio"]),
389
+ run_receipt: /* @__PURE__ */ new Set(["clio", "validator", "runtime", "external_system", "unknown"]),
390
+ gate_decision: /* @__PURE__ */ new Set(["clio", "reviewer", "operator", "unknown"]),
391
+ evidence_bundle: /* @__PURE__ */ new Set(["clio"]),
392
+ finish_contract: /* @__PURE__ */ new Set(["clio"]),
393
+ compatibility: /* @__PURE__ */ new Set(["clio", "unknown"])
394
+ };
395
+ var ABSENCE_REASONS = /* @__PURE__ */ new Set([
396
+ "not_recorded",
397
+ "not_observed",
398
+ "artifact_missing",
399
+ "historical_format"
400
+ ]);
401
+ var SOURCE_KINDS = /* @__PURE__ */ new Set([
402
+ "receipt_integrity_verification",
403
+ "run_receipt",
404
+ "gate_decision",
405
+ "evidence_bundle",
406
+ "finish_contract",
407
+ "compatibility"
408
+ ]);
409
+ var AUTHORITY_KINDS = /* @__PURE__ */ new Set([
410
+ "clio",
411
+ "validator",
412
+ "reviewer",
413
+ "operator",
414
+ "runtime",
415
+ "external_system",
416
+ "unknown"
417
+ ]);
418
+ var ARTIFACT_KINDS = /* @__PURE__ */ new Set([
419
+ "run_receipt",
420
+ "validation_result",
421
+ "gate_decision",
422
+ "briefing",
423
+ "project_context",
424
+ "autonomy_policy",
425
+ "finish_contract_evidence",
426
+ "evidence_bundle",
427
+ "session_entry"
428
+ ]);
429
+ function isRecord(value) {
430
+ return typeof value === "object" && value !== null && !Array.isArray(value);
431
+ }
432
+ function hasExactKeys(value, keys) {
433
+ const expected = new Set(keys);
434
+ return Object.keys(value).length === expected.size && Object.keys(value).every((key) => expected.has(key));
435
+ }
436
+ function isTrustStatusIdentifier(value) {
437
+ if (typeof value !== "string" || value.trim().length === 0 || value.length > TRUST_STATUS_MAX_IDENTIFIER_LENGTH) {
438
+ return false;
439
+ }
440
+ for (const character of value) {
441
+ const codePoint = character.codePointAt(0);
442
+ if (codePoint !== void 0 && (codePoint < 32 || codePoint === 127)) return false;
443
+ }
444
+ return true;
445
+ }
446
+ function compareArtifactReferences(left, right) {
447
+ const leftKey = `${left.kind}\0${left.id}\0${left.digest?.value ?? ""}`;
448
+ const rightKey = `${right.kind}\0${right.id}\0${right.digest?.value ?? ""}`;
449
+ return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
450
+ }
451
+ function normalizeArtifactReference(value, path) {
452
+ if (!isRecord(value)) throw new Error(`${path} must be an object`);
453
+ if (!hasExactKeys(value, value.digest === void 0 ? ["kind", "id"] : ["kind", "id", "digest"])) {
454
+ throw new Error(`${path} has unknown or missing fields`);
455
+ }
456
+ if (typeof value.kind !== "string" || !ARTIFACT_KINDS.has(value.kind)) {
457
+ throw new Error(`${path}.kind is invalid`);
458
+ }
459
+ if (!isTrustStatusIdentifier(value.id)) throw new Error(`${path}.id is invalid`);
460
+ const reference = { kind: value.kind, id: value.id };
461
+ if (value.digest !== void 0) {
462
+ if (!isRecord(value.digest) || !hasExactKeys(value.digest, ["algorithm", "value"]) || value.digest.algorithm !== "sha256" || typeof value.digest.value !== "string" || !/^[a-f0-9]{64}$/u.test(value.digest.value)) {
463
+ throw new Error(`${path}.digest is invalid`);
464
+ }
465
+ reference.digest = { algorithm: "sha256", value: value.digest.value };
466
+ }
467
+ return reference;
468
+ }
469
+ function normalizeAttributedStatus(axis, value) {
470
+ if (!hasExactKeys(value, ["state", "source", "authority", "artifacts"])) {
471
+ throw new Error(`${axis} has unknown or missing fields`);
472
+ }
473
+ if (!isRecord(value.source) || !hasExactKeys(value.source, ["kind", "id"])) {
474
+ throw new Error(`${axis}.source is invalid`);
475
+ }
476
+ if (typeof value.source.kind !== "string" || !SOURCE_KINDS.has(value.source.kind) || !AXIS_SOURCES[axis].has(value.source.kind) || !isTrustStatusIdentifier(value.source.id)) {
477
+ throw new Error(`${axis}.source is invalid`);
478
+ }
479
+ if (!isRecord(value.authority) || !hasExactKeys(value.authority, ["kind", "id"])) {
480
+ throw new Error(`${axis}.authority is invalid`);
481
+ }
482
+ if (typeof value.authority.kind !== "string" || !AUTHORITY_KINDS.has(value.authority.kind) || !SOURCE_AUTHORITIES[value.source.kind].has(
483
+ value.authority.kind
484
+ ) || !isTrustStatusIdentifier(value.authority.id)) {
485
+ throw new Error(`${axis}.authority is invalid`);
486
+ }
487
+ if (value.source.kind === "compatibility" && value.state !== "unknown" && value.state !== "not_applicable") {
488
+ throw new Error(`${axis} compatibility source cannot establish ${value.state}`);
489
+ }
490
+ if (!Array.isArray(value.artifacts) || value.artifacts.length > TRUST_STATUS_MAX_ARTIFACT_REFERENCES) {
491
+ throw new Error(`${axis}.artifacts exceeds the bounded reference list`);
492
+ }
493
+ const artifacts = value.artifacts.map(
494
+ (entry, index) => normalizeArtifactReference(entry, `${axis}.artifacts[${index}]`)
495
+ );
496
+ artifacts.sort(compareArtifactReferences);
497
+ for (let index = 1; index < artifacts.length; index += 1) {
498
+ if (compareArtifactReferences(
499
+ artifacts[index - 1],
500
+ artifacts[index]
501
+ ) === 0) {
502
+ throw new Error(`${axis}.artifacts contains a duplicate reference`);
503
+ }
504
+ }
505
+ return {
506
+ state: value.state,
507
+ source: { kind: value.source.kind, id: value.source.id },
508
+ authority: { kind: value.authority.kind, id: value.authority.id },
509
+ artifacts
510
+ };
511
+ }
512
+ function normalizeAxis(axis, value) {
513
+ if (!isRecord(value) || typeof value.state !== "string" || !AXIS_STATES[axis].has(value.state)) {
514
+ throw new Error(`${axis}.state is invalid`);
515
+ }
516
+ if (value.state === "absent") {
517
+ if (!hasExactKeys(value, ["state", "reason"]) || typeof value.reason !== "string" || !ABSENCE_REASONS.has(value.reason)) {
518
+ throw new Error(`${axis} absent state is invalid`);
519
+ }
520
+ return { state: "absent", reason: value.reason };
521
+ }
522
+ return normalizeAttributedStatus(axis, value);
523
+ }
524
+ function normalizeTrustStatus(value) {
525
+ if (!isRecord(value) || !hasExactKeys(value, ["version", ...TRUST_STATUS_AXES])) {
526
+ throw new Error("trust status has unknown or missing fields");
527
+ }
528
+ if (value.version !== TRUST_STATUS_VERSION) throw new Error("trust status version is invalid");
529
+ return {
530
+ version: TRUST_STATUS_VERSION,
531
+ artifactIntegrity: normalizeAxis("artifactIntegrity", value.artifactIntegrity),
532
+ validationGrounding: normalizeAxis("validationGrounding", value.validationGrounding),
533
+ independentReview: normalizeAxis("independentReview", value.independentReview),
534
+ contextProvenance: normalizeAxis("contextProvenance", value.contextProvenance),
535
+ autonomyEnforcement: normalizeAxis("autonomyEnforcement", value.autonomyEnforcement),
536
+ completionEvidence: normalizeAxis("completionEvidence", value.completionEvidence)
537
+ };
538
+ }
539
+ function absentTrustStatus(reason) {
540
+ return { state: "absent", reason };
541
+ }
542
+ function composeTrustStatus(...projections) {
543
+ const axes = {
544
+ artifactIntegrity: absentTrustStatus("not_recorded"),
545
+ validationGrounding: absentTrustStatus("not_recorded"),
546
+ independentReview: absentTrustStatus("not_recorded"),
547
+ contextProvenance: absentTrustStatus("not_recorded"),
548
+ autonomyEnforcement: absentTrustStatus("not_recorded"),
549
+ completionEvidence: absentTrustStatus("not_recorded")
550
+ };
551
+ for (const projection of projections) {
552
+ if (projection.artifactIntegrity !== void 0) axes.artifactIntegrity = projection.artifactIntegrity;
553
+ if (projection.validationGrounding !== void 0) axes.validationGrounding = projection.validationGrounding;
554
+ if (projection.independentReview !== void 0) axes.independentReview = projection.independentReview;
555
+ if (projection.contextProvenance !== void 0) axes.contextProvenance = projection.contextProvenance;
556
+ if (projection.autonomyEnforcement !== void 0) axes.autonomyEnforcement = projection.autonomyEnforcement;
557
+ if (projection.completionEvidence !== void 0) axes.completionEvidence = projection.completionEvidence;
558
+ }
559
+ return normalizeTrustStatus({ version: TRUST_STATUS_VERSION, ...axes });
560
+ }
561
+ function sha256Reference(kind, id, digest) {
562
+ const reference = { kind, id };
563
+ if (digest !== void 0 && /^[a-f0-9]{64}$/u.test(digest)) {
564
+ reference.digest = { algorithm: "sha256", value: digest };
565
+ }
566
+ return reference;
567
+ }
568
+ function receiptReference(receipt) {
569
+ return sha256Reference("run_receipt", receipt.runId, receipt.integrity?.digest);
570
+ }
571
+ function attributed(state, source, authority, artifacts) {
572
+ return { state, source, authority, artifacts: [...artifacts].sort(compareArtifactReferences) };
573
+ }
574
+ function receiptSource(receipt) {
575
+ return { kind: "run_receipt", id: receipt.runId };
576
+ }
577
+ function compatibilitySource(receipt, field) {
578
+ return { kind: "compatibility", id: `run_receipt:${receipt.runId}:${field}` };
579
+ }
580
+ var DISPATCH_AUTHORITY = { kind: "clio", id: "dispatch" };
581
+ var COMPATIBILITY_AUTHORITY = { kind: "unknown", id: "historical-persisted-format" };
582
+ function retiredReceiptIntegrity(integrity) {
583
+ if (!isRecord(integrity)) return null;
584
+ const version = integrity.version;
585
+ if (typeof version !== "number" || !Number.isInteger(version) || version < 1) return null;
586
+ if (version >= RUN_RECEIPT_INTEGRITY_VERSION) return null;
587
+ return { receiptVersion: version, supportedVersion: RUN_RECEIPT_INTEGRITY_VERSION };
588
+ }
589
+ function retiredReceiptIntegrityReason(retired) {
590
+ return `receipt integrity v${retired.receiptVersion} is retired; this build verifies v${retired.supportedVersion}; the receipt is not read as evidence`;
591
+ }
592
+ function verifyReceiptIntegrityOutcome(receipt, envelope) {
593
+ const retired = retiredReceiptIntegrity(receipt.integrity);
594
+ if (retired !== null) return { ok: false, reason: retiredReceiptIntegrityReason(retired), retired };
595
+ return verifyReceiptIntegrity(receipt, envelope);
596
+ }
597
+ var RETIRED_INTEGRITY_SOURCE = /:integrity-v(\d+)-retired$/u;
598
+ function retiredIntegritySourceId(runId, receiptVersion) {
599
+ return `run_receipt:${runId}:integrity-v${receiptVersion}-retired`;
600
+ }
601
+ function retiredIntegrityVersionOf(status) {
602
+ if (status.state !== "unknown" || status.source.kind !== "compatibility") return null;
603
+ const match = RETIRED_INTEGRITY_SOURCE.exec(status.source.id);
604
+ return match === null ? null : Number(match[1]);
605
+ }
606
+ function adaptReceiptIntegrityStatus(receipt, verification) {
607
+ if (receipt === null || receipt === void 0) return absentTrustStatus("artifact_missing");
608
+ const artifacts = [receiptReference(receipt)];
609
+ if (verification !== void 0 && !verification.ok && verification.retired !== void 0) {
610
+ return attributed(
611
+ "unknown",
612
+ { kind: "compatibility", id: retiredIntegritySourceId(receipt.runId, verification.retired.receiptVersion) },
613
+ COMPATIBILITY_AUTHORITY,
614
+ artifacts
615
+ );
616
+ }
617
+ if (verification === void 0 || verification.ok && receipt.integrity === void 0) {
618
+ return attributed(
619
+ "unknown",
620
+ {
621
+ kind: "compatibility",
622
+ id: `run_receipt:${receipt.runId}:${receipt.integrity === void 0 ? "integrity-missing" : "integrity-unchecked"}`
623
+ },
624
+ COMPATIBILITY_AUTHORITY,
625
+ artifacts
626
+ );
627
+ }
628
+ return attributed(
629
+ verification.ok ? "verified" : "failed",
630
+ { kind: "receipt_integrity_verification", id: receipt.runId },
631
+ { kind: "clio", id: "receipt-integrity" },
632
+ artifacts
633
+ );
634
+ }
635
+ function validationArtifacts(receipt) {
636
+ const artifacts = [receiptReference(receipt)];
637
+ for (const fact of receipt.quality?.typedValidations ?? []) {
638
+ artifacts.push(sha256Reference("validation_result", fact.sourceId, fact.validatorDigest));
639
+ }
640
+ const resultContract = receipt.quality?.resultContract;
641
+ if (resultContract !== null && resultContract !== void 0) {
642
+ artifacts.push(sha256Reference("validation_result", resultContract.sourceId, resultContract.validatorDigest));
643
+ }
644
+ return uniqueBoundedReferences(artifacts);
645
+ }
646
+ function qualityHasFailure(quality) {
647
+ if (quality === void 0) return false;
648
+ if (quality.typedValidations.some((fact) => !fact.passed)) return true;
649
+ return quality.resultContract?.conformance === "fail" || quality.resultContract?.quality === "fail";
650
+ }
651
+ function qualityHasValidation(quality) {
652
+ if (quality === void 0) return false;
653
+ if (quality.typedValidations.some((fact) => fact.passed)) return true;
654
+ return quality.resultContract?.quality === "pass";
655
+ }
656
+ function verificationStatus(verification, receipt, artifacts) {
657
+ if (verification.state === "verified") {
658
+ return attributed("validated", receiptSource(receipt), { kind: "validator", id: verification.basis }, artifacts);
659
+ }
660
+ if (verification.state === "unverified") return absentTrustStatus("not_observed");
661
+ if (verification.state === "not_applicable") {
662
+ return attributed("not_applicable", receiptSource(receipt), DISPATCH_AUTHORITY, artifacts);
663
+ }
664
+ return attributed(
665
+ "unknown",
666
+ receiptSource(receipt),
667
+ verification.basis === "acp-external-unobserved" ? { kind: "external_system", id: "acp-delegation" } : COMPATIBILITY_AUTHORITY,
668
+ artifacts
669
+ );
670
+ }
671
+ function adaptRunReceiptValidationStatus(receipt) {
672
+ if (receipt === null || receipt === void 0) return absentTrustStatus("artifact_missing");
673
+ const artifacts = validationArtifacts(receipt);
674
+ if (receipt.hostVerification?.status === "rejected") {
675
+ return attributed("failed", receiptSource(receipt), { kind: "validator", id: "host-verification" }, artifacts);
676
+ }
677
+ if (receipt.hostVerification?.status === "verified") {
678
+ return attributed("validated", receiptSource(receipt), { kind: "validator", id: "host-verification" }, artifacts);
679
+ }
680
+ if (qualityHasFailure(receipt.quality)) {
681
+ return attributed("failed", receiptSource(receipt), { kind: "validator", id: "receipt-quality" }, artifacts);
682
+ }
683
+ if ((receipt.validationGrounding?.ungrounded.length ?? 0) > 0 || receipt.validationGrounding !== void 0 && receipt.validationGrounding.claimed > receipt.validationGrounding.grounded) {
684
+ return attributed("ungrounded", receiptSource(receipt), { kind: "validator", id: "command-grounding" }, artifacts);
685
+ }
686
+ if (qualityHasValidation(receipt.quality)) {
687
+ return attributed("validated", receiptSource(receipt), { kind: "validator", id: "receipt-quality" }, artifacts);
688
+ }
689
+ if (receipt.verification !== void 0) {
690
+ return verificationStatus(receipt.verification, receipt, artifacts);
691
+ }
692
+ return attributed("unknown", compatibilitySource(receipt, "verification"), COMPATIBILITY_AUTHORITY, artifacts);
693
+ }
694
+ function validBriefing(briefing) {
695
+ return Number.isSafeInteger(briefing.bytes) && briefing.bytes >= 0 && /^[a-f0-9]{64}$/u.test(briefing.contentHash);
696
+ }
697
+ function validBoundedProjectContext(context) {
698
+ return context.tier === "bounded" && Number.isSafeInteger(context.chars) && (context.chars ?? -1) >= 0 && typeof context.contentHash === "string" && /^[a-f0-9]{64}$/u.test(context.contentHash);
699
+ }
700
+ var NONE_TIER_SECTIONS = ["workspace-root"];
701
+ function validNoneTierProjectContext(context) {
702
+ return context.tier === "none" && context.sections !== void 0 && context.sections.length === NONE_TIER_SECTIONS.length && context.sections.every((section) => NONE_TIER_SECTIONS.includes(section)) && Number.isSafeInteger(context.chars) && (context.chars ?? -1) >= 0 && typeof context.contentHash === "string" && /^[a-f0-9]{64}$/u.test(context.contentHash);
703
+ }
704
+ function recordedProjectContextHash(context) {
705
+ if (context === void 0) return void 0;
706
+ if (context.tier === "bounded") return validBoundedProjectContext(context) ? context.contentHash : void 0;
707
+ return validNoneTierProjectContext(context) ? context.contentHash : void 0;
708
+ }
709
+ function contextArtifacts(receipt) {
710
+ const artifacts = [receiptReference(receipt)];
711
+ if (receipt.briefing !== void 0 && validBriefing(receipt.briefing)) {
712
+ artifacts.push(sha256Reference("briefing", `${receipt.runId}:briefing`, receipt.briefing.contentHash));
713
+ }
714
+ const recordedHash = recordedProjectContextHash(receipt.projectContext);
715
+ if (recordedHash !== void 0) {
716
+ artifacts.push(sha256Reference("project_context", `${receipt.runId}:project-context`, recordedHash));
717
+ }
718
+ return uniqueBoundedReferences(artifacts);
719
+ }
720
+ function adaptRunReceiptContextStatus(receipt) {
721
+ if (receipt === null || receipt === void 0) return absentTrustStatus("artifact_missing");
722
+ const artifacts = contextArtifacts(receipt);
723
+ const source = receiptSource(receipt);
724
+ const briefingInvalid = receipt.briefing !== void 0 && !validBriefing(receipt.briefing);
725
+ if (briefingInvalid) return attributed("invalid", source, DISPATCH_AUTHORITY, artifacts);
726
+ const context = receipt.projectContext;
727
+ if (context === void 0) {
728
+ if (receipt.briefing !== void 0) return attributed("recorded", source, DISPATCH_AUTHORITY, artifacts);
729
+ return attributed("unknown", compatibilitySource(receipt, "projectContext"), COMPATIBILITY_AUTHORITY, artifacts);
730
+ }
731
+ if (context.tier === "none") {
732
+ const bare = context.chars === void 0 && context.contentHash === void 0 && context.sections === void 0;
733
+ if (bare) {
734
+ return receipt.briefing === void 0 ? attributed("not_applicable", source, DISPATCH_AUTHORITY, artifacts) : attributed("recorded", source, DISPATCH_AUTHORITY, artifacts);
735
+ }
736
+ return attributed(
737
+ validNoneTierProjectContext(context) ? "recorded" : "invalid",
738
+ source,
739
+ DISPATCH_AUTHORITY,
740
+ artifacts
741
+ );
742
+ }
743
+ return attributed(validBoundedProjectContext(context) ? "recorded" : "invalid", source, DISPATCH_AUTHORITY, artifacts);
744
+ }
745
+ function adaptRunReceiptAutonomyStatus(receipt) {
746
+ if (receipt === null || receipt === void 0) return absentTrustStatus("artifact_missing");
747
+ const enforcement = receipt.autonomyEnforcement;
748
+ const artifacts = [receiptReference(receipt)];
749
+ if (enforcement === void 0) {
750
+ return attributed("unknown", compatibilitySource(receipt, "autonomyEnforcement"), COMPATIBILITY_AUTHORITY, artifacts);
751
+ }
752
+ artifacts.push({ kind: "autonomy_policy", id: `${receipt.runId}:${enforcement.autonomy}` });
753
+ const authority = enforcement.grade === "mediated" ? { kind: "clio", id: "safety-autonomy" } : { kind: "runtime", id: enforcement.externalMode ?? "external-runtime" };
754
+ const state = enforcement.dangerousBypass === true || enforcement.grade === "bypassed" ? "bypassed" : enforcement.grade === "approximated" ? "approximated" : "enforced";
755
+ return attributed(state, receiptSource(receipt), authority, artifacts);
756
+ }
757
+ function receiptClaimsAreAuthenticated(receipt, integrity) {
758
+ return receipt?.integrity !== void 0 && integrity?.ok === true;
759
+ }
760
+ function unauthenticatedReceiptProjection(receipt, integrity) {
761
+ if (receipt === null || receipt === void 0) {
762
+ return {
763
+ validationGrounding: absentTrustStatus("artifact_missing"),
764
+ contextProvenance: absentTrustStatus("artifact_missing"),
765
+ autonomyEnforcement: absentTrustStatus("artifact_missing")
766
+ };
767
+ }
768
+ if (receipt.integrity === void 0) {
769
+ const artifacts = [receiptReference(receipt)];
770
+ return {
771
+ validationGrounding: attributed(
772
+ "unknown",
773
+ compatibilitySource(receipt, "canonical-projection"),
774
+ COMPATIBILITY_AUTHORITY,
775
+ artifacts
776
+ ),
777
+ contextProvenance: attributed(
778
+ "unknown",
779
+ compatibilitySource(receipt, "canonical-projection"),
780
+ COMPATIBILITY_AUTHORITY,
781
+ artifacts
782
+ ),
783
+ autonomyEnforcement: attributed(
784
+ "unknown",
785
+ compatibilitySource(receipt, "canonical-projection"),
786
+ COMPATIBILITY_AUTHORITY,
787
+ artifacts
788
+ )
789
+ };
790
+ }
791
+ if (integrity !== void 0 && !integrity.ok && integrity.retired !== void 0) {
792
+ return {
793
+ validationGrounding: absentTrustStatus("historical_format"),
794
+ contextProvenance: absentTrustStatus("historical_format"),
795
+ autonomyEnforcement: absentTrustStatus("historical_format")
796
+ };
797
+ }
798
+ return {
799
+ validationGrounding: absentTrustStatus("not_observed"),
800
+ contextProvenance: absentTrustStatus("not_observed"),
801
+ autonomyEnforcement: absentTrustStatus("not_observed")
802
+ };
803
+ }
804
+ function adaptRunReceiptTrustStatus(receipt, options = {}) {
805
+ const authenticated = receiptClaimsAreAuthenticated(receipt, options.integrity);
806
+ const receiptProjection = authenticated ? {
807
+ validationGrounding: adaptRunReceiptValidationStatus(receipt),
808
+ contextProvenance: adaptRunReceiptContextStatus(receipt),
809
+ autonomyEnforcement: adaptRunReceiptAutonomyStatus(receipt)
810
+ } : unauthenticatedReceiptProjection(receipt, options.integrity);
811
+ return composeTrustStatus({
812
+ artifactIntegrity: adaptReceiptIntegrityStatus(receipt, options.integrity),
813
+ ...receiptProjection,
814
+ independentReview: absentTrustStatus(receipt === null || receipt === void 0 ? "artifact_missing" : "not_recorded"),
815
+ completionEvidence: absentTrustStatus(
816
+ receipt === null || receipt === void 0 ? "artifact_missing" : "not_recorded"
817
+ )
818
+ });
819
+ }
820
+ function inspectRunReceiptTrustStatus(receipt, envelope) {
821
+ let integrity;
822
+ if (receipt === null || receipt === void 0) {
823
+ integrity = { ok: false, reason: "receipt unavailable" };
824
+ } else if (envelope === null || envelope === void 0) {
825
+ integrity = { ok: false, reason: "run ledger envelope unavailable" };
826
+ } else {
827
+ try {
828
+ integrity = verifyReceiptIntegrityOutcome(receipt, envelope);
829
+ } catch (error) {
830
+ integrity = {
831
+ ok: false,
832
+ reason: `receipt invalid: ${error instanceof Error ? error.message : String(error)}`
833
+ };
834
+ }
835
+ }
836
+ return {
837
+ integrity,
838
+ status: adaptRunReceiptTrustStatus(receipt, { integrity })
839
+ };
840
+ }
841
+ function gateReference(artifact) {
842
+ return sha256Reference("gate_decision", artifact.id, artifact.integrity.digest);
843
+ }
844
+ function gateAuthority(artifact) {
845
+ if (artifact.outcome === "operator-confirmed") return { kind: "operator", id: "gate-confirmation" };
846
+ if (artifact.outcome === "full-auto-applied") return { kind: "clio", id: "full-auto-gate-policy" };
847
+ return { kind: "reviewer", id: artifact.decider?.runId ?? "unavailable-decider" };
848
+ }
849
+ function adaptGateDecisionReviewStatus(artifact, subjectRunId, verification) {
850
+ if (artifact === null || artifact === void 0) return absentTrustStatus("artifact_missing");
851
+ const source = { kind: "gate_decision", id: artifact.id };
852
+ const artifacts = [gateReference(artifact)];
853
+ const authority = gateAuthority(artifact);
854
+ if (!artifact.subjects.some((subject) => subject.runId === subjectRunId)) return absentTrustStatus("not_recorded");
855
+ if (verification === void 0 || !verification.ok) {
856
+ return attributed(
857
+ "unknown",
858
+ source,
859
+ verification === void 0 ? COMPATIBILITY_AUTHORITY : { kind: "unknown", id: "unauthenticated-gate-artifact" },
860
+ artifacts
861
+ );
862
+ }
863
+ if (artifact.decider === void 0 || artifact.correlation === void 0) {
864
+ if (artifact.outcome === "operator-confirmed" || artifact.outcome === "full-auto-applied") {
865
+ return attributed("not_applicable", source, authority, artifacts);
866
+ }
867
+ return attributed("inconclusive", source, authority, artifacts);
868
+ }
869
+ if (!artifact.correlation.independent) return attributed("not_independent", source, authority, artifacts);
870
+ if (artifact.outcome === "pass") return attributed("passed", source, authority, artifacts);
871
+ if (artifact.outcome === "fail") return attributed("failed", source, authority, artifacts);
872
+ if (artifact.outcome === "winner") {
873
+ return attributed(
874
+ artifact.winner?.subject.runId === subjectRunId ? "passed" : "failed",
875
+ source,
876
+ authority,
877
+ artifacts
878
+ );
879
+ }
880
+ return attributed("inconclusive", source, authority, artifacts);
881
+ }
882
+ function adaptGroundedEvidenceValidationStatus(input) {
883
+ const observed = (input.artifacts ?? []).filter((artifact) => !SELF_REPORTED_ARTIFACT_KINDS.has(artifact.kind));
884
+ if (observed.length === 0) return absentTrustStatus("not_observed");
885
+ return attributed(
886
+ "validated",
887
+ { kind: "evidence_bundle", id: `${input.evidenceId}:${input.runId}` },
888
+ { kind: "clio", id: "evidence-grounding" },
889
+ uniqueBoundedReferences([{ kind: "evidence_bundle", id: input.evidenceId }, ...observed])
890
+ );
891
+ }
892
+ function uniqueBoundedReferences(references) {
893
+ const sorted = [...references].sort(compareArtifactReferences);
894
+ const unique = sorted.filter(
895
+ (reference, index) => index === 0 || compareArtifactReferences(sorted[index - 1], reference) !== 0
896
+ );
897
+ return unique.slice(0, TRUST_STATUS_MAX_ARTIFACT_REFERENCES);
898
+ }
899
+
900
+ // src/domains/evidence/trust-projection.ts
901
+ init_esm_shims();
902
+ var TRUST_SUMMARY_VERSION = 1;
903
+ var TRUST_SUMMARY_MAX_REFS = 8;
904
+ var TRUST_STATE_WORDS = {
905
+ artifactIntegrity: {
906
+ verified: "sealed",
907
+ failed: "seal broken",
908
+ absent: "no receipt",
909
+ unknown: "seal unchecked",
910
+ not_applicable: "seal not applicable"
911
+ },
912
+ validationGrounding: {
913
+ validated: "grounded",
914
+ failed: "validation failed",
915
+ ungrounded: "inferred: validation claimed, none observed",
916
+ absent: "no validation observed",
917
+ unknown: "validation unknown",
918
+ not_applicable: "validation not applicable"
919
+ },
920
+ independentReview: {
921
+ passed: "independently reviewed: pass",
922
+ failed: "independently reviewed: fail",
923
+ inconclusive: "independent review inconclusive",
924
+ not_independent: "review not independent",
925
+ absent: "not independently reviewed",
926
+ unknown: "independent review unknown",
927
+ not_applicable: "independent review not applicable"
928
+ },
929
+ contextProvenance: {
930
+ recorded: "context recorded",
931
+ invalid: "context record invalid",
932
+ absent: "context not recorded",
933
+ unknown: "context unknown",
934
+ not_applicable: "context not applicable"
935
+ },
936
+ autonomyEnforcement: {
937
+ enforced: "mediated",
938
+ approximated: "approximated",
939
+ bypassed: "bypassed",
940
+ absent: "autonomy not recorded",
941
+ unknown: "autonomy unknown",
942
+ not_applicable: "autonomy not applicable"
943
+ },
944
+ completionEvidence: {
945
+ evidenced: "completion evidenced",
946
+ incomplete: "completion unevidenced",
947
+ limited: "completion limited",
948
+ absent: "completion not recorded",
949
+ unknown: "completion unknown",
950
+ not_applicable: "completion not applicable"
951
+ }
952
+ };
953
+ function trustStateWord(axis, state) {
954
+ const words = TRUST_STATE_WORDS[axis];
955
+ return words[state] ?? words.unknown ?? "unknown";
956
+ }
957
+ function authorityOf(status, axis) {
958
+ const entry = status[axis];
959
+ return entry.state === "absent" ? null : `${entry.authority.kind}:${entry.authority.id}`;
960
+ }
961
+ function integrityClause(status) {
962
+ const retired = retiredIntegrityVersionOf(status.artifactIntegrity);
963
+ if (retired !== null) return `seal v${retired} retired (this build verifies v${RUN_RECEIPT_INTEGRITY_VERSION})`;
964
+ return trustStateWord("artifactIntegrity", status.artifactIntegrity.state);
965
+ }
966
+ function validationClause(status) {
967
+ const entry = status.validationGrounding;
968
+ const word = trustStateWord("validationGrounding", entry.state);
969
+ if (entry.state === "absent") return word;
970
+ if (entry.state === "validated" || entry.state === "failed") return `${word} by ${entry.authority.id}`;
971
+ if (entry.state === "unknown" && entry.authority.kind !== "unknown") return `${word} (${entry.authority.id})`;
972
+ return word;
973
+ }
974
+ function autonomyClause(status) {
975
+ const entry = status.autonomyEnforcement;
976
+ const word = trustStateWord("autonomyEnforcement", entry.state);
977
+ if (entry.state !== "approximated" && entry.state !== "bypassed") return word;
978
+ return `${word} (${entry.authority.id})`;
979
+ }
980
+ function formatTrustSummary(status) {
981
+ return [
982
+ integrityClause(status),
983
+ validationClause(status),
984
+ trustStateWord("independentReview", status.independentReview.state),
985
+ autonomyClause(status),
986
+ trustStateWord("contextProvenance", status.contextProvenance.state),
987
+ trustStateWord("completionEvidence", status.completionEvidence.state)
988
+ ].join("; ");
989
+ }
990
+ function formatTrustSummaryLine(status) {
991
+ return `trust v${TRUST_SUMMARY_VERSION}: ${trustVerdict(status)}; ${formatTrustSummary(status)}`;
992
+ }
993
+ function formatTrustAxes(status) {
994
+ return [`trust_status=v${status.version}`, ...TRUST_STATUS_AXES.map((axis) => `${axis}:${status[axis].state}`)].join(
995
+ " "
996
+ );
997
+ }
998
+ function isUnanswered(status, axis) {
999
+ const state = status[axis].state;
1000
+ return state === "absent" || state === "unknown";
1001
+ }
1002
+ function trustVerdict(status) {
1003
+ const integrity = status.artifactIntegrity.state;
1004
+ const validation = status.validationGrounding.state;
1005
+ const review = status.independentReview.state;
1006
+ const autonomy = status.autonomyEnforcement.state;
1007
+ if (integrity === "failed" || autonomy === "bypassed" || validation === "failed" || validation === "ungrounded" || review === "failed" || review === "not_independent" || status.contextProvenance.state === "invalid") {
1008
+ return "compromised";
1009
+ }
1010
+ if (integrity !== "verified") return "unknown";
1011
+ if (review === "passed") return "reviewed";
1012
+ if (validation === "validated") return "grounded";
1013
+ return "unverified";
1014
+ }
1015
+ function claimantOf(status) {
1016
+ const state = status.validationGrounding.state;
1017
+ if (state === "absent" || state === "ungrounded") return "worker";
1018
+ return authorityOf(status, "validationGrounding") ?? "worker";
1019
+ }
1020
+ function referenceKey(reference) {
1021
+ return `${reference.kind}:${reference.id}`;
1022
+ }
1023
+ function trustSummaryReferences(status) {
1024
+ const keys = /* @__PURE__ */ new Set();
1025
+ for (const axis of TRUST_STATUS_AXES) {
1026
+ const entry = status[axis];
1027
+ if (entry.state === "absent") continue;
1028
+ for (const reference of entry.artifacts) keys.add(referenceKey(reference));
1029
+ }
1030
+ return [...keys].sort().slice(0, TRUST_SUMMARY_MAX_REFS);
1031
+ }
1032
+ function summarizeTrustStatus(status) {
1033
+ const axes = Object.fromEntries(TRUST_STATUS_AXES.map((axis) => [axis, status[axis].state]));
1034
+ return {
1035
+ version: TRUST_SUMMARY_VERSION,
1036
+ verdict: trustVerdict(status),
1037
+ text: formatTrustSummary(status),
1038
+ axes,
1039
+ claimant: claimantOf(status),
1040
+ unknown: TRUST_STATUS_AXES.filter((axis) => isUnanswered(status, axis)),
1041
+ refs: trustSummaryReferences(status)
1042
+ };
1043
+ }
1044
+
1045
+ // src/domains/eval/provenance.ts
1046
+ init_esm_shims();
1047
+ import { spawnSync } from "node:child_process";
1048
+ function evalClioProvenance(options = {}) {
1049
+ return {
1050
+ version: readClioVersion(),
1051
+ commit: options.commit === void 0 ? currentClioCommit() : options.commit,
1052
+ entry: options.entry ?? process.argv[1] ?? "unknown"
1053
+ };
1054
+ }
1055
+ function evalEnvironmentProvenance() {
1056
+ return {
1057
+ platform: `${process.platform}-${process.arch}`,
1058
+ node: process.version
1059
+ };
1060
+ }
1061
+ async function evalServingConfiguration(targets, observations) {
1062
+ const targetId = targets.length === 1 ? targets[0]?.id ?? "unknown" : "multiple";
1063
+ const configured = configuredTarget(targetId);
1064
+ const target = targets.length === 1 ? targets[0] : void 0;
1065
+ const runtimeId = consensus(observations.map((entry) => entry.runtimeId)) ?? configured?.runtime ?? null;
1066
+ const modelId = consensus(observations.map((entry) => entry.modelId)) ?? target?.model ?? configured?.defaultModel ?? null;
1067
+ const props = configured?.url === void 0 ? null : await readServingProps(configured.url, modelId);
1068
+ return {
1069
+ targetId,
1070
+ runtimeId,
1071
+ modelId,
1072
+ serverBuild: props?.serverBuild ?? null,
1073
+ total_slots: props?.totalSlots ?? null,
1074
+ thinkingLevel: consensus(observations.map((entry) => entry.thinkingLevel)) ?? target?.thinking ?? null,
1075
+ compiledPromptHash: consensus(observations.map((entry) => entry.compiledPromptHash))
1076
+ };
1077
+ }
1078
+ function evalServingObservationFrom(target, receipt, compiledPromptHashes) {
1079
+ const compiledPromptHash = receipt?.staticCompositionHash ?? receipt?.compiledPromptHash ?? consensus(compiledPromptHashes);
1080
+ return {
1081
+ targetId: receipt?.targetId ?? target.id,
1082
+ runtimeId: receipt?.runtimeId ?? null,
1083
+ modelId: receipt?.wireModelId ?? target.model ?? null,
1084
+ thinkingLevel: receipt?.runtimeResolution?.effectiveThinkingLevel ?? target.thinking ?? null,
1085
+ compiledPromptHash
1086
+ };
1087
+ }
1088
+ function currentClioCommit() {
1089
+ const result = spawnSync("git", ["rev-parse", "HEAD"], {
1090
+ cwd: resolvePackageRoot(),
1091
+ encoding: "utf8",
1092
+ stdio: ["ignore", "pipe", "ignore"],
1093
+ timeout: 1e3
1094
+ });
1095
+ if (result.status !== 0 || typeof result.stdout !== "string") return null;
1096
+ const value = result.stdout.trim();
1097
+ return value.length > 0 ? value : null;
1098
+ }
1099
+ function configuredTarget(targetId) {
1100
+ try {
1101
+ const target = readSettings().targets.find((entry) => entry.id === targetId);
1102
+ if (target === void 0) return null;
1103
+ return {
1104
+ runtime: target.runtime,
1105
+ ...target.url === void 0 ? {} : { url: target.url },
1106
+ ...target.defaultModel === void 0 ? {} : { defaultModel: target.defaultModel }
1107
+ };
1108
+ } catch {
1109
+ return null;
1110
+ }
1111
+ }
1112
+ async function readServingProps(targetUrl, modelId) {
1113
+ const root = targetUrl.replace(/\/+$/u, "").replace(/\/v1$/u, "");
1114
+ try {
1115
+ const response = await fetch(`${root}/props`, { signal: AbortSignal.timeout(5e3) });
1116
+ if (!response.ok) return null;
1117
+ const value = await response.json();
1118
+ if (!isRecord2(value)) return null;
1119
+ const totalSlots = positiveInteger(value.total_slots) ?? await readServingSlots(root, modelId);
1120
+ return {
1121
+ serverBuild: typeof value.build_info === "string" && value.build_info.length > 0 ? value.build_info : null,
1122
+ totalSlots
1123
+ };
1124
+ } catch {
1125
+ return null;
1126
+ }
1127
+ }
1128
+ async function readServingSlots(root, modelId) {
1129
+ if (modelId === null) return null;
1130
+ try {
1131
+ const query = new URLSearchParams({ model: modelId });
1132
+ const response = await fetch(`${root}/slots?${query}`, { signal: AbortSignal.timeout(5e3) });
1133
+ if (!response.ok) return null;
1134
+ const value = await response.json();
1135
+ return Array.isArray(value) && value.length > 0 ? value.length : null;
1136
+ } catch {
1137
+ return null;
1138
+ }
1139
+ }
1140
+ function consensus(values) {
1141
+ const known = [...new Set(values.filter((value) => typeof value === "string" && value.length > 0))];
1142
+ return known.length === 1 ? known[0] ?? null : null;
1143
+ }
1144
+ function positiveInteger(value) {
1145
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
1146
+ }
1147
+ function isRecord2(value) {
1148
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1149
+ }
1150
+
1151
+ // src/domains/eval/task-file.ts
1152
+ init_esm_shims();
1153
+ var import_yaml = __toESM(require_dist(), 1);
1154
+ import { createHash as createHash2 } from "node:crypto";
1155
+ import { readFile } from "node:fs/promises";
1156
+ import { dirname, isAbsolute, relative, resolve } from "node:path";
1157
+
1158
+ // src/domains/eval/types.ts
1159
+ init_esm_shims();
1160
+ var EVAL_TASK_FILE_VERSION = 1;
1161
+
1162
+ // src/domains/eval/task-file.ts
1163
+ var TASK_KEYS = /* @__PURE__ */ new Set(["id", "prompt", "cwd", "setup", "verifier", "timeoutMs", "tags"]);
1164
+ async function loadEvalTaskFile(path) {
1165
+ const resolved = resolve(path);
1166
+ const raw = await readFile(resolved, "utf8");
1167
+ const result = parseEvalTaskFileYaml(raw);
1168
+ if (!result.valid) {
1169
+ throw new EvalTaskFileError(result.issues);
1170
+ }
1171
+ const baseDir = dirname(resolved);
1172
+ const cwdIssues = validateTaskCwds(result.taskFile.tasks, baseDir);
1173
+ if (cwdIssues.length > 0) throw new EvalTaskFileError(cwdIssues);
1174
+ return {
1175
+ path: resolved,
1176
+ baseDir,
1177
+ contentHash: sha256Hex(raw),
1178
+ taskFile: result.taskFile
1179
+ };
1180
+ }
1181
+ function parseEvalTaskFileYaml(raw) {
1182
+ let parsed;
1183
+ try {
1184
+ parsed = (0, import_yaml.parse)(raw);
1185
+ } catch (error) {
1186
+ const message = error instanceof Error ? error.message : String(error);
1187
+ return { valid: false, issues: [{ path: "$", message: `invalid YAML: ${message}` }] };
1188
+ }
1189
+ return validateEvalTaskFile(parsed);
1190
+ }
1191
+ function validateEvalTaskFile(value) {
1192
+ const issues = [];
1193
+ if (!isRecord3(value)) {
1194
+ return { valid: false, issues: [{ path: "$", message: "expected object" }] };
1195
+ }
1196
+ if (value.version !== EVAL_TASK_FILE_VERSION) {
1197
+ issues.push({ path: "$.version", message: "expected version 1" });
1198
+ }
1199
+ if (!Array.isArray(value.tasks)) {
1200
+ issues.push({ path: "$.tasks", message: "expected non-empty array" });
1201
+ return { valid: false, issues };
1202
+ }
1203
+ if (value.tasks.length === 0) {
1204
+ issues.push({ path: "$.tasks", message: "expected non-empty array" });
1205
+ }
1206
+ const tasks = [];
1207
+ const seenIds = /* @__PURE__ */ new Set();
1208
+ for (let index = 0; index < value.tasks.length; index += 1) {
1209
+ const task = parseTask(value.tasks[index], `$.tasks[${index}]`, issues);
1210
+ if (task === null) continue;
1211
+ if (seenIds.has(task.id)) {
1212
+ issues.push({ path: `$.tasks[${index}].id`, message: `duplicate task id: ${task.id}` });
1213
+ }
1214
+ seenIds.add(task.id);
1215
+ tasks.push(task);
1216
+ }
1217
+ if (issues.length > 0) return { valid: false, issues };
1218
+ return { valid: true, taskFile: { version: 1, tasks } };
1219
+ }
1220
+ var EvalTaskFileError = class extends Error {
1221
+ issues;
1222
+ constructor(issues) {
1223
+ super(`eval task file invalid (${issues.length} ${issues.length === 1 ? "issue" : "issues"})`);
1224
+ this.name = "EvalTaskFileError";
1225
+ this.issues = [...issues];
1226
+ }
1227
+ };
1228
+ function parseTask(value, path, issues) {
1229
+ if (!isRecord3(value)) {
1230
+ issues.push({ path, message: "expected object" });
1231
+ return null;
1232
+ }
1233
+ for (const key of Object.keys(value).sort((a, b) => a.localeCompare(b))) {
1234
+ if (!TASK_KEYS.has(key)) issues.push({ path: `${path}.${key}`, message: "unknown field" });
1235
+ }
1236
+ const id = readNonEmptyString(value, path, "id", issues);
1237
+ if (id !== null && !/^[A-Za-z0-9._-]+$/.test(id)) {
1238
+ issues.push({ path: `${path}.id`, message: "expected id with letters, numbers, dots, underscores, or hyphens" });
1239
+ }
1240
+ const prompt = readNonEmptyString(value, path, "prompt", issues);
1241
+ const cwd = readNonEmptyString(value, path, "cwd", issues);
1242
+ if (cwd !== null && isAbsolute(cwd)) {
1243
+ issues.push({ path: `${path}.cwd`, message: "expected repo-local relative path" });
1244
+ }
1245
+ const setup = readStringArray(value, path, "setup", issues, true);
1246
+ const verifier = readStringArray(value, path, "verifier", issues, false);
1247
+ if (verifier !== null && verifier.length === 0) {
1248
+ issues.push({ path: `${path}.verifier`, message: "expected at least one command" });
1249
+ }
1250
+ const timeoutMs = readPositiveInteger(value, path, "timeoutMs", issues);
1251
+ const tags = readStringArray(value, path, "tags", issues, true);
1252
+ if (id === null || prompt === null || cwd === null || setup === null || verifier === null || timeoutMs === null) {
1253
+ return null;
1254
+ }
1255
+ return { id, prompt, cwd, setup, verifier, timeoutMs, tags: tags ?? [] };
1256
+ }
1257
+ function validateTaskCwds(tasks, baseDir) {
1258
+ const issues = [];
1259
+ for (let index = 0; index < tasks.length; index += 1) {
1260
+ const task = tasks[index];
1261
+ if (task === void 0) continue;
1262
+ const resolved = resolve(baseDir, task.cwd);
1263
+ const rel = relative(baseDir, resolved);
1264
+ if (rel === "" || !rel.startsWith("..") && !isAbsolute(rel)) continue;
1265
+ issues.push({ path: `$.tasks[${index}].cwd`, message: "cwd must stay within the task file directory" });
1266
+ }
1267
+ return issues;
1268
+ }
1269
+ function readNonEmptyString(record, path, field, issues) {
1270
+ const value = record[field];
1271
+ if (typeof value !== "string" || value.trim().length === 0) {
1272
+ issues.push({ path: `${path}.${field}`, message: "expected non-empty string" });
1273
+ return null;
1274
+ }
1275
+ return value;
1276
+ }
1277
+ function readStringArray(record, path, field, issues, allowMissing) {
1278
+ const value = record[field];
1279
+ if (value === void 0 && allowMissing) return [];
1280
+ if (!Array.isArray(value)) {
1281
+ issues.push({ path: `${path}.${field}`, message: "expected string array" });
1282
+ return null;
1283
+ }
1284
+ const out = [];
1285
+ for (let index = 0; index < value.length; index += 1) {
1286
+ const entry = value[index];
1287
+ if (typeof entry !== "string" || entry.trim().length === 0) {
1288
+ issues.push({ path: `${path}.${field}[${index}]`, message: "expected non-empty string" });
1289
+ continue;
1290
+ }
1291
+ out.push(entry);
1292
+ }
1293
+ return out;
1294
+ }
1295
+ function readPositiveInteger(record, path, field, issues) {
1296
+ const value = record[field];
1297
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
1298
+ issues.push({ path: `${path}.${field}`, message: "expected positive integer" });
1299
+ return null;
1300
+ }
1301
+ return value;
1302
+ }
1303
+ function isRecord3(value) {
1304
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1305
+ }
1306
+ function sha256Hex(content) {
1307
+ return createHash2("sha256").update(content, "utf8").digest("hex");
1308
+ }
1309
+
1310
+ // src/domains/eval/run-compare.ts
1311
+ init_esm_shims();
1312
+ var EvalTrackedMetricSourceMismatchError = class extends Error {
1313
+ constructor(metric, baseline, candidate) {
1314
+ super(
1315
+ `tracked metric ${metric} cannot compare estimated and measured values (baseline=${baseline.join(",") || "none"}, candidate=${candidate.join(",") || "none"})`
1316
+ );
1317
+ this.name = "EvalTrackedMetricSourceMismatchError";
1318
+ }
1319
+ };
1320
+ function assertComparableTrackedMetricSources(metric, baseline, candidate) {
1321
+ if (baseline.includes("estimated") === candidate.includes("estimated")) return;
1322
+ throw new EvalTrackedMetricSourceMismatchError(metric, baseline, candidate);
1323
+ }
1324
+
1325
+ // src/domains/prompts/hash.ts
1326
+ init_esm_shims();
1327
+ import { createHash as createHash3 } from "node:crypto";
1328
+ function sha2562(input) {
1329
+ return createHash3("sha256").update(input, "utf8").digest("hex");
1330
+ }
1331
+ function canonicalJson2(value) {
1332
+ return serialize(value);
1333
+ }
1334
+ function serialize(value) {
1335
+ if (value === null) return "null";
1336
+ if (typeof value === "number") {
1337
+ if (!Number.isFinite(value)) {
1338
+ throw new Error(`canonicalJson: non-finite number ${String(value)} is not representable`);
1339
+ }
1340
+ return JSON.stringify(value);
1341
+ }
1342
+ if (typeof value === "string" || typeof value === "boolean") {
1343
+ return JSON.stringify(value);
1344
+ }
1345
+ if (typeof value === "bigint") {
1346
+ throw new Error("canonicalJson: bigint is not representable");
1347
+ }
1348
+ if (typeof value === "symbol" || typeof value === "function") {
1349
+ throw new Error(`canonicalJson: ${typeof value} is not representable`);
1350
+ }
1351
+ if (value === void 0) {
1352
+ throw new Error("canonicalJson: undefined is not representable at root");
1353
+ }
1354
+ if (Array.isArray(value)) {
1355
+ const parts = [];
1356
+ for (let i = 0; i < value.length; i++) {
1357
+ if (!(i in value) || value[i] === void 0) {
1358
+ parts.push("null");
1359
+ continue;
1360
+ }
1361
+ parts.push(serialize(value[i]));
1362
+ }
1363
+ return `[${parts.join(",")}]`;
1364
+ }
1365
+ if (typeof value === "object") {
1366
+ const obj = value;
1367
+ const keys = Object.keys(obj).sort();
1368
+ const parts = [];
1369
+ for (const key of keys) {
1370
+ const child = obj[key];
1371
+ if (child === void 0) continue;
1372
+ parts.push(`${JSON.stringify(key)}:${serialize(child)}`);
1373
+ }
1374
+ return `{${parts.join(",")}}`;
1375
+ }
1376
+ throw new Error(`canonicalJson: unsupported value of type ${typeof value}`);
1377
+ }
1378
+
1379
+ export {
1380
+ sha2562 as sha256,
1381
+ canonicalJson2 as canonicalJson,
1382
+ RUN_RECEIPT_INTEGRITY_VERSION,
1383
+ RUN_RECEIPT_INTEGRITY_ALGORITHM,
1384
+ withReceiptIntegrity,
1385
+ isReceiptIntegrity,
1386
+ verifyReceiptIntegrity,
1387
+ TRUST_STATUS_AXES,
1388
+ isTrustStatusIdentifier,
1389
+ normalizeTrustStatus,
1390
+ composeTrustStatus,
1391
+ retiredReceiptIntegrity,
1392
+ retiredReceiptIntegrityReason,
1393
+ retiredIntegrityVersionOf,
1394
+ adaptRunReceiptTrustStatus,
1395
+ inspectRunReceiptTrustStatus,
1396
+ adaptGateDecisionReviewStatus,
1397
+ adaptGroundedEvidenceValidationStatus,
1398
+ trustStateWord,
1399
+ formatTrustSummary,
1400
+ formatTrustSummaryLine,
1401
+ formatTrustAxes,
1402
+ trustVerdict,
1403
+ summarizeTrustStatus,
1404
+ evalClioProvenance,
1405
+ evalEnvironmentProvenance,
1406
+ evalServingConfiguration,
1407
+ evalServingObservationFrom,
1408
+ assertComparableTrackedMetricSources,
1409
+ loadEvalTaskFile,
1410
+ EvalTaskFileError
1411
+ };
1412
+ //# sourceMappingURL=chunk-6NJQITNH.js.map