@iowarp/clio-coder 0.4.2 → 0.4.4

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 (523) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
  5. package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
  8. package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
  9. package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
  10. package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
  11. package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
  12. package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
  13. package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
  14. package/dist/chunk-2DSOYNFC.js +108 -0
  15. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  16. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  17. package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
  18. package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
  19. package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
  20. package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
  21. package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
  22. package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
  23. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  24. package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
  25. package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
  26. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  27. package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
  28. package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
  29. package/dist/chunk-57XXR6DR.js +3763 -0
  30. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  31. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  32. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  33. package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
  34. package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
  35. package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
  36. package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
  37. package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
  38. package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
  39. package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
  40. package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
  41. package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
  42. package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
  43. package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
  44. package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
  45. package/dist/chunk-DQOVN6KV.js +386 -0
  46. package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
  47. package/dist/chunk-DXKJURES.js +671 -0
  48. package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
  49. package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
  50. package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
  51. package/dist/chunk-EXLD33WO.js +381 -0
  52. package/dist/chunk-FEAXX7B6.js +101 -0
  53. package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
  54. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  55. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  56. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  57. package/dist/chunk-GX5WYQO4.js +59 -0
  58. package/dist/chunk-GYV6VZOC.js +26 -0
  59. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  60. package/dist/chunk-I2DWJ4GM.js +390 -0
  61. package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
  62. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  63. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  64. package/dist/chunk-IRXAATOX.js +539 -0
  65. package/dist/chunk-IXIY2H4R.js +44 -0
  66. package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
  67. package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
  68. package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
  69. package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
  70. package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
  71. package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
  72. package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
  73. package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
  74. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  75. package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
  76. package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
  77. package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
  78. package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
  79. package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
  80. package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
  81. package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
  82. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  83. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  84. package/dist/chunk-ODGTEFFI.js +50 -0
  85. package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
  86. package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
  87. package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
  88. package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
  89. package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
  90. package/dist/chunk-R6Q67RJH.js +134 -0
  91. package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
  92. package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
  93. package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
  94. package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
  95. package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
  96. package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
  97. package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
  98. package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
  99. package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
  100. package/dist/chunk-UOIZ7DA4.js +41 -0
  101. package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
  102. package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
  103. package/dist/chunk-V76WTFTW.js +318 -0
  104. package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
  105. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  106. package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
  107. package/dist/chunk-XXYSBZIQ.js +283 -0
  108. package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
  109. package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
  110. package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
  111. package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
  112. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  113. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  114. package/dist/cli/index.js +42 -40
  115. package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
  116. package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
  117. package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
  118. package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
  119. package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
  120. package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
  121. package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
  122. package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
  123. package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
  126. package/dist/detail-A7JAVSIG.js +98 -0
  127. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
  128. package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
  129. package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
  130. package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
  131. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  132. package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
  133. package/dist/evidence-4F5USFKH.js +208 -0
  134. package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
  135. package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
  136. package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
  137. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
  138. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
  139. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
  140. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
  141. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
  142. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
  143. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
  144. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
  145. package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
  146. package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
  147. package/dist/inventory-C26CFDRR.js +101 -0
  148. package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
  149. package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
  150. package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
  151. package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
  152. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
  153. package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
  154. package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
  155. package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
  156. package/dist/reset-TNWTB5LU.js +343 -0
  157. package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
  158. package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
  159. package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
  160. package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
  161. package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
  162. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
  163. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
  164. package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
  165. package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
  166. package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
  167. package/dist/tasks-IPAGMEIX.js +36 -0
  168. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
  169. package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
  170. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  171. package/dist/uninstall-HALS6BLF.js +407 -0
  172. package/dist/upgrade-MS72RJEP.js +306 -0
  173. package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
  174. package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
  175. package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
  176. package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
  177. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
  178. package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
  179. package/dist/worker/entry.js +72 -68
  180. package/docs/README.md +3 -2
  181. package/docs/architecture/acp.md +17 -0
  182. package/docs/architecture/artifact-placement.md +1 -0
  183. package/docs/architecture/artifact-versions.md +2 -2
  184. package/docs/architecture/context-engine.md +4 -0
  185. package/docs/architecture/dispatch-typed-intent.md +1 -1
  186. package/docs/architecture/evidence-and-memory.md +1 -1
  187. package/docs/architecture/middleware-and-components.md +1 -1
  188. package/docs/architecture/model-catalog.md +21 -10
  189. package/docs/architecture/observability.md +19 -2
  190. package/docs/architecture/prompt-envelope-and-tools.md +17 -5
  191. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  192. package/docs/architecture/safety-model.md +25 -22
  193. package/docs/architecture/tui-design.md +1 -1
  194. package/docs/guide/built-in-agents.md +25 -11
  195. package/docs/guide/commands-and-modes.md +18 -3
  196. package/docs/guide/configuration-and-targets.md +100 -10
  197. package/docs/guide/configuration-reference.md +17 -7
  198. package/docs/guide/environment-variables.md +4 -2
  199. package/docs/guide/installation-and-lifecycle.md +37 -4
  200. package/docs/guide/proactive-memory.md +66 -55
  201. package/docs/guide/skills-marketplace.md +18 -0
  202. package/docs/guide/tool-usage.md +78 -3
  203. package/docs/history/config-knobs-audit.md +2 -2
  204. package/docs/process/development-pipeline.md +40 -2
  205. package/docs/process/eval-runner.md +67 -3
  206. package/docs/process/git-commit-provenance.md +15 -0
  207. package/docs/process/release-cut-checklist.md +207 -0
  208. package/docs/process/scientific-validation.md +18 -17
  209. package/evals/behavioral-machinery-support.ts +1 -0
  210. package/evals/behavioral-machinery.yaml +1 -1
  211. package/evals/behavioral-model.yaml +3 -2
  212. package/package.json +2 -2
  213. package/skills/README.md +7 -5
  214. package/skills/coding/ast-grep/SKILL.md +101 -30
  215. package/skills/coding/ast-grep/evals.md +26 -0
  216. package/skills/coding/coding-standards/SKILL.md +47 -2
  217. package/skills/coding/coding-standards/evals.md +23 -0
  218. package/skills/coding/prototype/SKILL.md +87 -28
  219. package/skills/coding/prototype/evals.md +19 -0
  220. package/skills/coding/tdd/SKILL.md +80 -53
  221. package/skills/coding/tdd/evals.md +20 -0
  222. package/skills/context/context-handoff/SKILL.md +43 -2
  223. package/skills/context/context-handoff/evals.md +44 -0
  224. package/skills/context/context-prime/SKILL.md +45 -15
  225. package/skills/context/context-prime/evals.md +45 -0
  226. package/skills/git/branch-closeout/SKILL.md +132 -0
  227. package/skills/git/branch-closeout/evals.md +133 -0
  228. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  229. package/skills/git/file-ticket/SKILL.md +77 -63
  230. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  231. package/skills/git/file-ticket/evals.md +31 -26
  232. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  233. package/skills/git/fix-issue/SKILL.md +87 -64
  234. package/skills/git/fix-issue/evals.md +35 -31
  235. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  236. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  237. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  238. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  239. package/skills/git/ship/SKILL.md +103 -67
  240. package/skills/git/ship/assets/pr-template.md +21 -0
  241. package/skills/git/ship/evals.md +44 -28
  242. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  243. package/skills/git/worktree-create/SKILL.md +80 -50
  244. package/skills/git/worktree-create/evals.md +40 -33
  245. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  246. package/skills/git/worktree-merge/SKILL.md +112 -65
  247. package/skills/git/worktree-merge/evals.md +42 -34
  248. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  249. package/skills/planning/archify/SKILL.md +196 -0
  250. package/skills/planning/archify/evals.md +65 -0
  251. package/skills/planning/architecture/SKILL.md +61 -12
  252. package/skills/planning/architecture/evals.md +65 -0
  253. package/skills/planning/backlog/SKILL.md +130 -14
  254. package/skills/planning/backlog/evals.md +142 -0
  255. package/skills/planning/prd/SKILL.md +47 -6
  256. package/skills/planning/prd/evals.md +54 -0
  257. package/skills/planning/product-intent/SKILL.md +57 -2
  258. package/skills/planning/product-intent/evals.md +70 -0
  259. package/skills/planning/tech-spec/SKILL.md +53 -2
  260. package/skills/planning/tech-spec/evals.md +73 -0
  261. package/skills/registry.yaml +58 -50
  262. package/skills/remote.yaml +13 -0
  263. package/skills/research/arxiv-literature/SKILL.md +76 -18
  264. package/skills/research/arxiv-literature/evals.md +50 -0
  265. package/skills/research/experiment-protocol/SKILL.md +20 -1
  266. package/skills/research/experiment-protocol/evals.md +23 -0
  267. package/skills/research/scientific-debugging/SKILL.md +24 -1
  268. package/skills/research/scientific-debugging/evals.md +18 -0
  269. package/skills/research/scientific-modernization/SKILL.md +26 -1
  270. package/skills/research/scientific-modernization/evals.md +27 -0
  271. package/skills/skill-marketplace.json +63 -28
  272. package/skills/workflow/cut-it/SKILL.md +64 -5
  273. package/skills/workflow/cut-it/evals.md +101 -0
  274. package/skills/workflow/design-council/SKILL.md +112 -27
  275. package/skills/workflow/design-council/evals.md +161 -0
  276. package/skills/workflow/grill-me/SKILL.md +85 -10
  277. package/skills/workflow/grill-me/evals.md +153 -0
  278. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  279. package/skills/workflow/workflow-distiller/evals.md +118 -0
  280. package/src/cli/args.ts +0 -8
  281. package/src/cli/configure-interop.ts +105 -13
  282. package/src/cli/configure-oauth.ts +57 -0
  283. package/src/cli/configure-onboarding.ts +980 -0
  284. package/src/cli/configure-target.ts +594 -0
  285. package/src/cli/configure.ts +1084 -529
  286. package/src/cli/context-map.ts +114 -0
  287. package/src/cli/context.ts +4 -0
  288. package/src/cli/doctor-state-size.ts +1 -12
  289. package/src/cli/doctor-validation-contract.ts +28 -0
  290. package/src/cli/doctor.ts +5 -0
  291. package/src/cli/evidence-detail.ts +1 -75
  292. package/src/cli/evidence-inventory.ts +1 -167
  293. package/src/cli/index.ts +3 -0
  294. package/src/cli/lifecycle-presenter.ts +436 -0
  295. package/src/cli/models.ts +10 -2
  296. package/src/cli/modes/print.ts +5 -1
  297. package/src/cli/reset.ts +228 -106
  298. package/src/cli/run.ts +7 -4
  299. package/src/cli/select.ts +664 -0
  300. package/src/cli/skills.ts +9 -2
  301. package/src/cli/targets.ts +3 -0
  302. package/src/cli/tasks.ts +84 -0
  303. package/src/cli/uninstall.ts +233 -165
  304. package/src/cli/upgrade.ts +210 -150
  305. package/src/cli/usage.ts +92 -27
  306. package/src/cli/validate-model.ts +3 -3
  307. package/src/cli/verifiers.ts +147 -1
  308. package/src/cli/wiki-generate.ts +1 -0
  309. package/src/core/commit-attribution.ts +41 -1
  310. package/src/core/config.ts +56 -0
  311. package/src/core/external-diagnostic.ts +44 -0
  312. package/src/core/gateway-routing.ts +157 -0
  313. package/src/core/git-commit-attribution.ts +46 -3
  314. package/src/core/run-overrides.ts +0 -5
  315. package/src/core/safe-exec.ts +17 -2
  316. package/src/core/skill-activation.ts +92 -2
  317. package/src/core/tool-names.ts +5 -2
  318. package/src/domains/agents/builtins/architect.md +1 -1
  319. package/src/domains/agents/builtins/coder.md +1 -1
  320. package/src/domains/agents/builtins/documenter.md +1 -1
  321. package/src/domains/agents/builtins/git-master.md +1 -1
  322. package/src/domains/agents/builtins/provenance.md +7 -7
  323. package/src/domains/agents/builtins/tester.md +1 -1
  324. package/src/domains/agents/builtins/verifier.md +2 -2
  325. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  326. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  327. package/src/domains/agents/catalog.ts +1 -1
  328. package/src/domains/agents/result-contract.ts +70 -0
  329. package/src/domains/context/extension.ts +31 -7
  330. package/src/domains/context/refresh.ts +3 -0
  331. package/src/domains/context/wiki/frontmatter.ts +5 -2
  332. package/src/domains/context/wiki/generate.ts +6 -0
  333. package/src/domains/context/wiki/map-seed.ts +589 -0
  334. package/src/domains/context/wiki/plan.ts +2 -2
  335. package/src/domains/context/wiki/prompts.ts +43 -0
  336. package/src/domains/dispatch/active-route-planner.ts +4 -0
  337. package/src/domains/dispatch/admission.ts +29 -0
  338. package/src/domains/dispatch/agent-candidates.ts +10 -0
  339. package/src/domains/dispatch/budget-envelope.ts +86 -1
  340. package/src/domains/dispatch/capability-match.ts +1 -0
  341. package/src/domains/dispatch/capacity-lease.ts +17 -0
  342. package/src/domains/dispatch/code-step.ts +11 -4
  343. package/src/domains/dispatch/contract.ts +42 -8
  344. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  345. package/src/domains/dispatch/extension.ts +184 -56
  346. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  347. package/src/domains/dispatch/fleet-run.ts +1 -0
  348. package/src/domains/dispatch/host-verification.ts +114 -13
  349. package/src/domains/dispatch/intent.ts +28 -18
  350. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  351. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  352. package/src/domains/dispatch/reservation-store.ts +5 -3
  353. package/src/domains/dispatch/state.ts +15 -2
  354. package/src/domains/dispatch/types.ts +20 -2
  355. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  356. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  357. package/src/domains/eval/metrics/token-stream.ts +201 -31
  358. package/src/domains/eval/metrics/tracked.ts +40 -4
  359. package/src/domains/eval/runners/clio-run.ts +17 -11
  360. package/src/domains/eval/runners/context-index.ts +2 -7
  361. package/src/domains/eval/runners/context-init.ts +3 -6
  362. package/src/domains/eval/runners/external-command.ts +29 -11
  363. package/src/domains/eval/schema/suite.ts +28 -0
  364. package/src/domains/eval/schema/verdict.ts +2 -2
  365. package/src/domains/eval/suites/resolve.ts +13 -1
  366. package/src/domains/eval/suites/run.ts +24 -3
  367. package/src/domains/evidence/build.ts +102 -15
  368. package/src/domains/evidence/detail.ts +69 -0
  369. package/src/domains/evidence/eval.ts +13 -1
  370. package/src/domains/evidence/finish-contract-map.ts +5 -1
  371. package/src/domains/evidence/inventory.ts +167 -0
  372. package/src/domains/evidence/store.ts +16 -0
  373. package/src/domains/evidence/types.ts +12 -0
  374. package/src/domains/extensions/resources.ts +7 -0
  375. package/src/domains/interop/registry.ts +6 -2
  376. package/src/domains/interop/types.ts +4 -0
  377. package/src/domains/lifecycle/migrations/index.ts +4 -0
  378. package/src/domains/memory/task-memory-policy.ts +70 -26
  379. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  380. package/src/domains/middleware/index.ts +0 -1
  381. package/src/domains/middleware/marketplace-offer.ts +22 -35
  382. package/src/domains/middleware/memory-intervention.ts +127 -32
  383. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  384. package/src/domains/middleware/runtime.ts +7 -3
  385. package/src/domains/middleware/skills-reminder.ts +31 -2
  386. package/src/domains/mux/detect.ts +3 -6
  387. package/src/domains/observability/accountability.ts +15 -1
  388. package/src/domains/observability/compaction-usage.ts +118 -0
  389. package/src/domains/observability/contract.ts +52 -7
  390. package/src/domains/observability/cost.ts +1 -1
  391. package/src/domains/observability/evidence-index.ts +10 -0
  392. package/src/domains/observability/extension.ts +15 -6
  393. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  394. package/src/domains/observability/projection.ts +394 -45
  395. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  396. package/src/domains/prompts/fragments/operating/contract.md +2 -0
  397. package/src/domains/prompts/fragments/wiki/page.md +8 -0
  398. package/src/domains/providers/contract.ts +4 -1
  399. package/src/domains/providers/extension.ts +40 -9
  400. package/src/domains/providers/model-capabilities.ts +9 -0
  401. package/src/domains/providers/model-discovery.ts +3 -4
  402. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  403. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
  404. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  405. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  406. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  407. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  408. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  409. package/src/domains/providers/support.ts +11 -5
  410. package/src/domains/providers/target-model-cache.ts +25 -2
  411. package/src/domains/providers/types/capability-flags.ts +2 -0
  412. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  413. package/src/domains/providers/types/target-descriptor.ts +19 -0
  414. package/src/domains/resources/index.ts +3 -0
  415. package/src/domains/resources/skills/install.ts +72 -7
  416. package/src/domains/resources/skills/loader.ts +7 -0
  417. package/src/domains/resources/skills/marketplace.ts +63 -11
  418. package/src/domains/safety/action-classifier.ts +7 -0
  419. package/src/domains/safety/autonomy.ts +15 -0
  420. package/src/domains/safety/default-path-policy.ts +2 -0
  421. package/src/domains/safety/finish-contract-registration.ts +29 -14
  422. package/src/domains/safety/finish-contract.ts +252 -40
  423. package/src/domains/safety/index.ts +21 -1
  424. package/src/domains/safety/path-policy.ts +1 -1
  425. package/src/domains/safety/policy-engine.ts +60 -17
  426. package/src/domains/safety/protected-artifacts.ts +191 -88
  427. package/src/domains/safety/rigor.ts +53 -39
  428. package/src/domains/safety/run-effects.ts +2 -22
  429. package/src/domains/safety/skill-authority.ts +55 -0
  430. package/src/domains/safety/validation-contract.ts +388 -0
  431. package/src/domains/session/archive-readers.ts +10 -1
  432. package/src/domains/session/compaction/compact.ts +72 -22
  433. package/src/domains/session/decision-board.ts +101 -2
  434. package/src/domains/session/entries.ts +50 -7
  435. package/src/domains/session/extension.ts +4 -4
  436. package/src/domains/session/handoff.ts +2 -1
  437. package/src/domains/session/manager.ts +2 -3
  438. package/src/domains/session/task-board.ts +14 -1
  439. package/src/domains/session/tree/fork.ts +1 -2
  440. package/src/domains/session/tree/navigator.ts +1 -1
  441. package/src/domains/session/usage.ts +3 -3
  442. package/src/domains/user-tasks/acceptance.ts +56 -0
  443. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  444. package/src/domains/user-tasks/store.ts +34 -3
  445. package/src/engine/acp/adapter.ts +24 -6
  446. package/src/engine/acp/server.ts +21 -4
  447. package/src/engine/acp/transport.ts +53 -8
  448. package/src/engine/acp/types.ts +4 -0
  449. package/src/engine/agent.ts +13 -3
  450. package/src/engine/ai.ts +26 -8
  451. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  452. package/src/engine/api-registry.ts +3 -0
  453. package/src/engine/apis/ollama-native.ts +15 -0
  454. package/src/engine/apis/openai-completions.ts +117 -14
  455. package/src/engine/claude/subprocess-runtime.ts +107 -60
  456. package/src/engine/external-subprocess.ts +122 -6
  457. package/src/entry/background-model-metadata.ts +18 -0
  458. package/src/entry/compaction-prompt.ts +57 -0
  459. package/src/entry/orchestrator.ts +416 -218
  460. package/src/entry/task-memory-lifecycle.ts +35 -0
  461. package/src/interactive/chat-loop-messages.ts +13 -4
  462. package/src/interactive/chat-loop.ts +65 -2
  463. package/src/interactive/chat-renderer.ts +1 -0
  464. package/src/interactive/cost-overlay.ts +26 -2
  465. package/src/interactive/dispatch-board.ts +46 -717
  466. package/src/interactive/fleet-run-preview.ts +2 -1
  467. package/src/interactive/interactive-application.ts +3 -2
  468. package/src/interactive/interactive-presentation.ts +55 -12
  469. package/src/interactive/interactive-slash-runtime.ts +4 -2
  470. package/src/interactive/oracle.ts +5 -2
  471. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  472. package/src/interactive/overlays/message-picker.ts +2 -2
  473. package/src/interactive/overlays/settings.ts +2 -2
  474. package/src/interactive/overlays/tree-selector.ts +2 -2
  475. package/src/interactive/renderers/branch-summary.ts +1 -1
  476. package/src/interactive/renderers/worker-entry.ts +32 -0
  477. package/src/interactive/slash-autocomplete.ts +4 -6
  478. package/src/interactive/slash-commands.ts +49 -45
  479. package/src/interactive/slash-spec.ts +28 -0
  480. package/src/interactive/theme/labels.ts +19 -13
  481. package/src/interactive/turn-context.ts +9 -5
  482. package/src/interactive/turn-recovery.ts +8 -0
  483. package/src/interactive/turn-runtime.ts +27 -11
  484. package/src/interactive/turn-state.ts +7 -0
  485. package/src/interactive/view/artifacts.ts +2 -0
  486. package/src/interactive/worker-receipts.ts +1 -0
  487. package/src/interactive/worker-stream.ts +13 -4
  488. package/src/tools/bootstrap.ts +4 -0
  489. package/src/tools/builtin-tool-catalog.ts +31 -0
  490. package/src/tools/compete-worktrees.ts +7 -1
  491. package/src/tools/context/index.ts +30 -9
  492. package/src/tools/core-bootstrap.ts +16 -0
  493. package/src/tools/decide.ts +136 -0
  494. package/src/tools/dispatch-admission.ts +21 -0
  495. package/src/tools/dispatch-arguments.ts +1 -0
  496. package/src/tools/dispatch-event-text.ts +10 -0
  497. package/src/tools/dispatch-plan.ts +6 -2
  498. package/src/tools/dispatch-runner.ts +27 -1
  499. package/src/tools/dispatch-types.ts +6 -0
  500. package/src/tools/evidence.ts +96 -0
  501. package/src/tools/limitation.ts +76 -0
  502. package/src/tools/policy.ts +9 -0
  503. package/src/tools/presentation.ts +3 -0
  504. package/src/tools/registry.ts +11 -5
  505. package/src/tools/result-shaping.ts +17 -5
  506. package/src/tools/task-worktree.ts +13 -3
  507. package/src/tools/tasks.ts +10 -1
  508. package/src/tools/verify/authoring.ts +170 -83
  509. package/src/tools/verify/catalog.ts +122 -5
  510. package/src/tools/verify/index.ts +2 -1
  511. package/src/tools/verify/numeric.ts +298 -0
  512. package/src/tools/verify/perf.ts +143 -0
  513. package/src/tools/verify/scripts.ts +229 -2
  514. package/src/tools/worker-evidence.ts +3 -1
  515. package/src/worker/spec-contract.ts +4 -0
  516. package/dist/chunk-2Z2IKEXI.js +0 -1554
  517. package/dist/chunk-RVG5JXAL.js +0 -41
  518. package/dist/chunk-T56WDKA5.js +0 -183
  519. package/dist/chunk-VN3SHNBN.js +0 -313
  520. package/dist/chunk-VPKWYKEY.js +0 -169
  521. package/dist/reset-OAQP3W4O.js +0 -230
  522. package/dist/uninstall-N34PCTGJ.js +0 -331
  523. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -1,11 +1,14 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  EVAL_SUITE_V2_VERSION
4
- } from "./chunk-RKSR6VSF.js";
4
+ } from "./chunk-4IUZQIJ3.js";
5
5
  import {
6
6
  loadFragments,
7
7
  renderCodewikiDigest
8
- } from "./chunk-AZ4WMN4W.js";
8
+ } from "./chunk-V6HJFQZE.js";
9
+ import {
10
+ discoverAgentRecipes
11
+ } from "./chunk-7UGL4MB5.js";
9
12
  import {
10
13
  EvalTaskFileError,
11
14
  TRUST_STATUS_AXES,
@@ -20,12 +23,11 @@ import {
20
23
  loadEvalTaskFile,
21
24
  summarizeTrustStatus,
22
25
  verifyReceiptIntegrity
23
- } from "./chunk-B74PXLU7.js";
26
+ } from "./chunk-CUSRQKPU.js";
24
27
  import {
25
28
  listSessionLedgerRefs,
26
29
  parseSessionEntries
27
- } from "./chunk-X7IARSHT.js";
28
- import "./chunk-3DPEIQKN.js";
30
+ } from "./chunk-6UINWWS6.js";
29
31
  import {
30
32
  EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1,
31
33
  EVAL_EXECUTION_ENVELOPE_SCHEMA_V1,
@@ -46,38 +48,57 @@ import {
46
48
  renderEvalServingConfiguration,
47
49
  sameEvalServingConfiguration,
48
50
  writeEvalArtifactV4
49
- } from "./chunk-5PFYMY2V.js";
51
+ } from "./chunk-FTMGRKEF.js";
50
52
  import "./chunk-W6GROXXM.js";
51
- import {
52
- shellQuote
53
- } from "./chunk-TXOTCRLG.js";
53
+ import "./chunk-RKKLTLYB.js";
54
+ import "./chunk-2ZSONWVL.js";
55
+ import "./chunk-NDDGJUXD.js";
56
+ import "./chunk-YECAMM3D.js";
57
+ import "./chunk-3DPEIQKN.js";
58
+ import "./chunk-TQAHXW6Y.js";
59
+ import "./chunk-5MEZN6CB.js";
60
+ import "./chunk-3ODX73FK.js";
54
61
  import "./chunk-HVDIIIQW.js";
55
62
  import {
56
- discoverAgentRecipes
57
- } from "./chunk-CRFOIAX3.js";
58
- import "./chunk-O3YUNJZ2.js";
59
- import "./chunk-NDDGJUXD.js";
60
- import "./chunk-XGDPUNND.js";
61
- import "./chunk-RKKLTLYB.js";
62
- import "./chunk-HLAFFSEK.js";
63
- import "./chunk-77QIVUZB.js";
64
- import "./chunk-HIICAHCJ.js";
65
- import "./chunk-Q4XWMHX6.js";
63
+ printError
64
+ } from "./chunk-JCI2ROMZ.js";
65
+ import "./chunk-AUPNRN7C.js";
66
+ import "./chunk-6PAZTBPA.js";
66
67
  import {
67
68
  createSafetyPolicyEngine
68
- } from "./chunk-FVDGR2ZL.js";
69
+ } from "./chunk-6Q3CYFD3.js";
69
70
  import "./chunk-H7IXIC72.js";
70
- import "./chunk-VN3SHNBN.js";
71
- import "./chunk-FSP7CMNU.js";
72
- import "./chunk-HHV2GANA.js";
73
71
  import {
74
72
  agentSpecFingerprint,
75
73
  normalizeAgentSpec
76
- } from "./chunk-PGF63K6I.js";
77
- import "./chunk-IKOZFYBN.js";
78
- import "./chunk-UL3WSD3F.js";
74
+ } from "./chunk-KFV5L5SK.js";
75
+ import "./chunk-NXYCB2VD.js";
79
76
  import "./chunk-ECH6PKUQ.js";
80
- import "./chunk-K6BSR66V.js";
77
+ import "./chunk-DXKJURES.js";
78
+ import "./chunk-HHV2GANA.js";
79
+ import "./chunk-GYV6VZOC.js";
80
+ import "./chunk-UL3WSD3F.js";
81
+ import "./chunk-54X7T7DK.js";
82
+ import "./chunk-I5FWO7L5.js";
83
+ import "./chunk-4NSRCOYP.js";
84
+ import "./chunk-CFGTUFWB.js";
85
+ import {
86
+ extractReasoningTokens
87
+ } from "./chunk-NZMNUPZZ.js";
88
+ import "./chunk-KXDSS5WJ.js";
89
+ import "./chunk-GHS5EBTQ.js";
90
+ import {
91
+ namingCompatibilityEnvironment
92
+ } from "./chunk-D7E7WCDF.js";
93
+ import "./chunk-HAXOFFRH.js";
94
+ import {
95
+ InvalidIdError
96
+ } from "./chunk-R346GLFC.js";
97
+ import {
98
+ normalizeClioCoderEventRecord,
99
+ normalizeClioCoderEventType
100
+ } from "./chunk-BTK3SSSK.js";
101
+ import "./chunk-F4EKGO4N.js";
81
102
  import {
82
103
  readCodewiki,
83
104
  structuralCodewikiHash
@@ -90,50 +111,27 @@ import {
90
111
  } from "./chunk-33YXPOE3.js";
91
112
  import "./chunk-7CR24IG7.js";
92
113
  import "./chunk-XPLRXC72.js";
93
- import "./chunk-ZW55JB7N.js";
94
- import {
95
- printError
96
- } from "./chunk-VPKWYKEY.js";
97
- import "./chunk-5TSRNF4G.js";
98
- import "./chunk-CFGTUFWB.js";
99
- import {
100
- extractReasoningTokens
101
- } from "./chunk-CWVRRIEI.js";
102
- import "./chunk-MQXIVJ35.js";
103
- import {
104
- InvalidIdError
105
- } from "./chunk-R346GLFC.js";
106
- import {
107
- normalizeClioCoderEventRecord,
108
- normalizeClioCoderEventType
109
- } from "./chunk-BTK3SSSK.js";
110
- import "./chunk-IHXBNWMM.js";
111
- import "./chunk-34BHNEE3.js";
112
- import {
113
- namingCompatibilityEnvironment
114
- } from "./chunk-D7E7WCDF.js";
115
- import "./chunk-HJWWJ6IL.js";
116
- import "./chunk-F4EKGO4N.js";
117
- import "./chunk-JIEGK6UF.js";
118
- import "./chunk-EBY63B7G.js";
119
- import "./chunk-6EJMN2Y3.js";
120
114
  import "./chunk-IWHMRKLL.js";
121
115
  import "./chunk-UXCU4E3T.js";
122
116
  import "./chunk-LL4KHSZI.js";
123
117
  import "./chunk-S66XZJOF.js";
124
- import "./chunk-WNP7O5WZ.js";
118
+ import "./chunk-TOIVGRUX.js";
119
+ import "./chunk-U6TMQNSI.js";
120
+ import "./chunk-EBY63B7G.js";
121
+ import "./chunk-6EJMN2Y3.js";
122
+ import "./chunk-ID64D7PE.js";
125
123
  import "./chunk-336NSSKI.js";
126
124
  import "./chunk-IKCO5N3L.js";
127
125
  import "./chunk-3I7MS7N2.js";
128
126
  import {
129
127
  require_dist
130
128
  } from "./chunk-APJ265NV.js";
129
+ import "./chunk-WEPFGWHJ.js";
130
+ import "./chunk-YXLYO42X.js";
131
131
  import {
132
132
  clioDataDir,
133
133
  clioStateDir
134
134
  } from "./chunk-BYP5D4HI.js";
135
- import "./chunk-WEPFGWHJ.js";
136
- import "./chunk-YXLYO42X.js";
137
135
  import {
138
136
  __toESM,
139
137
  init_esm_shims
@@ -1466,7 +1464,15 @@ function artifactMatrixIdentity(targets) {
1466
1464
  }
1467
1465
  function resolveTargets(targets, options) {
1468
1466
  const filtered = options.target === void 0 ? [...targets] : targets.filter((target) => target.id === options.target);
1469
- const selected = filtered.length > 0 ? filtered : options.target === void 0 ? [...targets] : [{ id: options.target }];
1467
+ const selected = filtered.length > 0 ? filtered : options.target === void 0 ? [...targets] : [
1468
+ {
1469
+ id: options.target,
1470
+ // A one-row suite still owns its thinking dimension when the CLI
1471
+ // substitutes the target/model pair. Dropping it silently changes
1472
+ // an off baseline into the target's configured default.
1473
+ ...targets.length === 1 && targets[0]?.thinking !== void 0 ? { thinking: targets[0].thinking } : {}
1474
+ }
1475
+ ];
1470
1476
  return selected.map((target) => ({
1471
1477
  ...target,
1472
1478
  ...options.model === void 0 ? {} : { model: options.model }
@@ -2285,6 +2291,16 @@ function zeroToolCallMetrics() {
2285
2291
  init_esm_shims();
2286
2292
  import { readFile as readFile2 } from "node:fs/promises";
2287
2293
  import { dirname as dirname2, join as join2 } from "node:path";
2294
+ function selectEvalLedgerEntries(durable, stream) {
2295
+ const sessionCalls = assistantCalls(durable).length;
2296
+ const streamCalls = assistantCalls(stream).length;
2297
+ return {
2298
+ entries: sessionCalls > 0 ? durable : [...durable, ...stream],
2299
+ source: sessionCalls > 0 ? "session" : "stream",
2300
+ sessionCalls,
2301
+ streamCalls
2302
+ };
2303
+ }
2288
2304
  async function readEvalLedgerSnapshot(stateDir) {
2289
2305
  const refs = await listSessionLedgerRefs(stateDir);
2290
2306
  const entries = [];
@@ -2384,7 +2400,7 @@ function emptyEvalTrackedMetrics(source = "estimated") {
2384
2400
  reasoningTokens: { value: null, source },
2385
2401
  toolCalls: zero(),
2386
2402
  toolErrors: zero(),
2387
- ttftMsFirstCall: zero(),
2403
+ ttftMsFirstCall: { value: null, source: "estimated" },
2388
2404
  wallClockMs: zero(),
2389
2405
  contextTokensAtEnd: zero(),
2390
2406
  compactions: zero(),
@@ -2400,6 +2416,7 @@ function assistantCalls(entries) {
2400
2416
  if (promptCache === null && timing === null && usage === null) return [];
2401
2417
  return [
2402
2418
  {
2419
+ timestamp: entry.payload.timestampEstimated === true ? null : entry.timestamp,
2403
2420
  payload: entry.payload,
2404
2421
  promptCache,
2405
2422
  backend: promptCache === null ? null : recordField(promptCache, "backend"),
@@ -2459,9 +2476,19 @@ function reasoningMetric(receipt, calls, compactionUsage) {
2459
2476
  return measured ? { value: total, source: "ledger" } : { value: null, source: "estimated" };
2460
2477
  }
2461
2478
  function firstCallTtft(calls) {
2462
- const first = calls[0];
2479
+ let first;
2480
+ let firstAt = Number.POSITIVE_INFINITY;
2481
+ for (const call of calls) {
2482
+ if (call.timestamp === null) return { value: null, source: "estimated" };
2483
+ const at = Date.parse(call.timestamp);
2484
+ if (!Number.isFinite(at)) return { value: null, source: "estimated" };
2485
+ if (at < firstAt) {
2486
+ first = call;
2487
+ firstAt = at;
2488
+ }
2489
+ }
2463
2490
  const value = first?.timing === null || first?.timing === void 0 ? null : nonNegativeNumber(first.timing.ttftMs);
2464
- return value === null ? { value: 0, source: "estimated" } : { value, source: "ledger" };
2491
+ return value === null ? { value: null, source: "estimated" } : { value, source: "ledger" };
2465
2492
  }
2466
2493
  function wallClockMetric(receipt, fallback) {
2467
2494
  if (receipt !== null) {
@@ -2665,13 +2692,15 @@ init_esm_shims();
2665
2692
  var UNMEASURED_TOKEN_USAGE = {
2666
2693
  measured: false,
2667
2694
  tokens: { input: 0, output: 0, total: 0, cacheRead: 0, cacheWrite: 0 },
2668
- costUsd: 0
2695
+ costUsd: 0,
2696
+ provider: emptyProviderObservation()
2669
2697
  };
2670
2698
  function createTokenUsageFold() {
2671
2699
  const tokens = { input: 0, output: 0, total: 0, cacheRead: 0, cacheWrite: 0 };
2672
2700
  let costUsd = 0;
2673
2701
  let measured = false;
2674
2702
  let pending = "";
2703
+ const provider = emptyProviderObservation();
2675
2704
  const consume = (line) => {
2676
2705
  if (line.trim().length === 0) return;
2677
2706
  let event;
@@ -2680,23 +2709,16 @@ function createTokenUsageFold() {
2680
2709
  } catch {
2681
2710
  return;
2682
2711
  }
2683
- if (!isRecord6(event) || event.type !== "message_end") return;
2684
- const message = isRecord6(event.message) ? event.message : void 0;
2685
- if (message === void 0 || message.role !== "assistant") return;
2686
- const usage = isRecord6(message.usage) ? message.usage : void 0;
2687
- if (usage === void 0) return;
2688
- measured = true;
2689
- const input = numberField2(usage, "input");
2690
- const output = numberField2(usage, "output");
2691
- const cacheRead = numberField2(usage, "cacheRead");
2692
- const cacheWrite = numberField2(usage, "cacheWrite");
2693
- const totalTokens = numberField2(usage, "totalTokens");
2694
- tokens.input += input;
2695
- tokens.output += output;
2696
- tokens.cacheRead += cacheRead;
2697
- tokens.cacheWrite += cacheWrite;
2698
- tokens.total += totalTokens > 0 ? totalTokens : input + output + cacheRead + cacheWrite;
2699
- if (isRecord6(usage.cost)) costUsd += numberField2(usage.cost, "total");
2712
+ if (!isRecord6(event)) return;
2713
+ observeProviderEvent(provider, event);
2714
+ if (event.type !== "message_end" || !isRecord6(event.message) || event.message.role !== "assistant") return;
2715
+ const usage = readMessageUsage(event.message);
2716
+ if (usage === null) return;
2717
+ if (Object.keys(usage.tokens).length > 0) {
2718
+ measured = true;
2719
+ for (const field of TOKEN_FIELDS) tokens[field] += usage.tokens[field] ?? 0;
2720
+ }
2721
+ costUsd += usage.costUsd ?? 0;
2700
2722
  };
2701
2723
  return {
2702
2724
  push(chunk) {
@@ -2713,7 +2735,7 @@ function createTokenUsageFold() {
2713
2735
  consume(pending.replace(/\r$/u, ""));
2714
2736
  pending = "";
2715
2737
  }
2716
- return { measured, tokens: { ...tokens }, costUsd };
2738
+ return { measured, tokens: { ...tokens }, costUsd, provider: structuredClone(provider) };
2717
2739
  }
2718
2740
  };
2719
2741
  }
@@ -2727,24 +2749,145 @@ function addTokenStreamUsage(left, right) {
2727
2749
  cacheRead: left.tokens.cacheRead + right.tokens.cacheRead,
2728
2750
  cacheWrite: left.tokens.cacheWrite + right.tokens.cacheWrite
2729
2751
  },
2730
- costUsd: left.costUsd + right.costUsd
2752
+ costUsd: left.costUsd + right.costUsd,
2753
+ provider: addProviderObservations(left.provider, right.provider)
2731
2754
  };
2732
2755
  }
2733
2756
  function tokenMetricEntries(usage) {
2734
- if (!usage.measured) return { "tokens.measured": false };
2735
2757
  return {
2736
- "tokens.measured": true,
2737
- "tokens.input": usage.tokens.input,
2738
- "tokens.output": usage.tokens.output,
2739
- "tokens.total": usage.tokens.total,
2740
- "tokens.cacheRead": usage.tokens.cacheRead,
2741
- "tokens.cacheWrite": usage.tokens.cacheWrite,
2758
+ ...providerMetricEntries(usage.provider),
2759
+ "tokens.measured": usage.measured,
2760
+ ...usage.measured ? {
2761
+ "tokens.input": usage.tokens.input,
2762
+ "tokens.output": usage.tokens.output,
2763
+ "tokens.total": usage.tokens.total,
2764
+ "tokens.cacheRead": usage.tokens.cacheRead,
2765
+ "tokens.cacheWrite": usage.tokens.cacheWrite
2766
+ } : {},
2742
2767
  ...usage.costUsd > 0 ? { "cost.usd": usage.costUsd } : {}
2743
2768
  };
2744
2769
  }
2745
- function numberField2(record, field) {
2746
- const value = record[field];
2747
- return typeof value === "number" && Number.isFinite(value) ? value : 0;
2770
+ var TOKEN_FIELDS = ["input", "output", "total", "cacheRead", "cacheWrite"];
2771
+ var STOP_REASONS = ["stop", "toolUse", "length", "error", "aborted", "other"];
2772
+ var RETRY_PHASES = {
2773
+ scheduled: "retryScheduled",
2774
+ retrying: "retryStarted",
2775
+ cancelled: "retryCancelled",
2776
+ exhausted: "retryExhausted",
2777
+ recovered: "retryRecovered"
2778
+ };
2779
+ function emptyProviderObservation() {
2780
+ return {
2781
+ measured: false,
2782
+ stops: { stop: 0, toolUse: 0, length: 0, error: 0, aborted: 0, other: 0 },
2783
+ retries: { scheduled: 0, retrying: 0, cancelled: 0, exhausted: 0, recovered: 0 },
2784
+ errorUsageObservedCalls: 0,
2785
+ errorUsageUnobservedCalls: 0,
2786
+ errorUsageIncompleteCalls: 0,
2787
+ errorCostUnobservedCalls: 0,
2788
+ errorReasoningUnobservedCalls: 0,
2789
+ errorReasoningTokens: null,
2790
+ errorTokens: {},
2791
+ errorCostUsd: null
2792
+ };
2793
+ }
2794
+ function readMessageUsage(message) {
2795
+ if (!isRecord6(message.usage)) return null;
2796
+ const usage = message.usage;
2797
+ const failed = message.stopReason === "error" || message.stopReason === "aborted";
2798
+ const raw = {};
2799
+ for (const field of TOKEN_FIELDS) {
2800
+ const value = nonNegativeNumber2(usage[field === "total" ? "totalTokens" : field]);
2801
+ if (value !== null && (!failed || value > 0)) raw[field] = value;
2802
+ }
2803
+ const cost = isRecord6(usage.cost) ? nonNegativeNumber2(usage.cost.total) : null;
2804
+ const costUsd = cost !== null && cost > 0 ? cost : null;
2805
+ const reportedReasoning = extractReasoningTokens({ ...usage, reasoningTokens: void 0 });
2806
+ const reasoningTokens = reportedReasoning !== null && reportedReasoning > 0 ? reportedReasoning : null;
2807
+ const tokens = raw;
2808
+ if (Object.keys(tokens).length === 0 && costUsd === null && reasoningTokens === null) return null;
2809
+ const completeTokens = Object.keys(tokens).length === TOKEN_FIELDS.length;
2810
+ if (Object.keys(tokens).length > 0 && !(tokens.total !== void 0 && tokens.total > 0)) {
2811
+ tokens.total = (tokens.input ?? 0) + (tokens.output ?? 0) + (tokens.cacheRead ?? 0) + (tokens.cacheWrite ?? 0);
2812
+ }
2813
+ return { tokens, costUsd, completeTokens, reasoningTokens };
2814
+ }
2815
+ function observeProviderEvent(provider, event) {
2816
+ if (event.type === "retry_status" && isRecord6(event.status)) {
2817
+ const phase = event.status.phase;
2818
+ if (typeof phase === "string" && Object.hasOwn(RETRY_PHASES, phase)) {
2819
+ provider.measured = true;
2820
+ provider.retries[phase] += 1;
2821
+ }
2822
+ return;
2823
+ }
2824
+ if (event.type !== "message_end" || !isRecord6(event.message) || event.message.role !== "assistant") return;
2825
+ const reason = event.message.stopReason;
2826
+ if (typeof reason !== "string" || reason.length === 0 || reason === "pending") return;
2827
+ provider.measured = true;
2828
+ const stop = STOP_REASONS.includes(reason) ? reason : "other";
2829
+ provider.stops[stop] += 1;
2830
+ if (reason !== "error") return;
2831
+ const usage = readMessageUsage(event.message);
2832
+ if (usage === null) provider.errorUsageUnobservedCalls += 1;
2833
+ else {
2834
+ provider.errorUsageObservedCalls += 1;
2835
+ for (const field of TOKEN_FIELDS) {
2836
+ const value = usage.tokens[field];
2837
+ if (value !== void 0) provider.errorTokens[field] = (provider.errorTokens[field] ?? 0) + value;
2838
+ }
2839
+ }
2840
+ if (usage?.completeTokens !== true) provider.errorUsageIncompleteCalls += 1;
2841
+ if (usage?.costUsd === void 0 || usage.costUsd === null) provider.errorCostUnobservedCalls += 1;
2842
+ else provider.errorCostUsd = (provider.errorCostUsd ?? 0) + usage.costUsd;
2843
+ if (usage?.reasoningTokens === void 0 || usage.reasoningTokens === null)
2844
+ provider.errorReasoningUnobservedCalls += 1;
2845
+ else provider.errorReasoningTokens = (provider.errorReasoningTokens ?? 0) + usage.reasoningTokens;
2846
+ }
2847
+ function addProviderObservations(left, right) {
2848
+ const result = emptyProviderObservation();
2849
+ result.measured = left.measured || right.measured;
2850
+ for (const reason of STOP_REASONS) result.stops[reason] = left.stops[reason] + right.stops[reason];
2851
+ for (const phase of Object.keys(RETRY_PHASES))
2852
+ result.retries[phase] = left.retries[phase] + right.retries[phase];
2853
+ result.errorUsageObservedCalls = left.errorUsageObservedCalls + right.errorUsageObservedCalls;
2854
+ result.errorUsageUnobservedCalls = left.errorUsageUnobservedCalls + right.errorUsageUnobservedCalls;
2855
+ result.errorUsageIncompleteCalls = left.errorUsageIncompleteCalls + right.errorUsageIncompleteCalls;
2856
+ result.errorCostUnobservedCalls = left.errorCostUnobservedCalls + right.errorCostUnobservedCalls;
2857
+ result.errorReasoningUnobservedCalls = left.errorReasoningUnobservedCalls + right.errorReasoningUnobservedCalls;
2858
+ if (left.errorReasoningTokens !== null || right.errorReasoningTokens !== null)
2859
+ result.errorReasoningTokens = (left.errorReasoningTokens ?? 0) + (right.errorReasoningTokens ?? 0);
2860
+ for (const field of TOKEN_FIELDS) {
2861
+ if (left.errorTokens[field] !== void 0 || right.errorTokens[field] !== void 0) {
2862
+ result.errorTokens[field] = (left.errorTokens[field] ?? 0) + (right.errorTokens[field] ?? 0);
2863
+ }
2864
+ }
2865
+ if (left.errorCostUsd !== null || right.errorCostUsd !== null)
2866
+ result.errorCostUsd = (left.errorCostUsd ?? 0) + (right.errorCostUsd ?? 0);
2867
+ return result;
2868
+ }
2869
+ function providerMetricEntries(provider) {
2870
+ if (!provider.measured) return { "provider.measured": false };
2871
+ const metrics = { "provider.measured": true };
2872
+ for (const reason of STOP_REASONS) metrics[`provider.stopReason.${reason}`] = provider.stops[reason];
2873
+ for (const phase of Object.keys(RETRY_PHASES))
2874
+ metrics[`provider.${RETRY_PHASES[phase]}`] = provider.retries[phase];
2875
+ if (provider.stops.error === 0) return metrics;
2876
+ metrics["provider.errorUsageObservedCalls"] = provider.errorUsageObservedCalls;
2877
+ metrics["provider.errorUsageUnobservedCalls"] = provider.errorUsageUnobservedCalls;
2878
+ metrics["provider.errorUsageIncompleteCalls"] = provider.errorUsageIncompleteCalls;
2879
+ metrics["provider.errorCostUnobservedCalls"] = provider.errorCostUnobservedCalls;
2880
+ metrics["provider.errorReasoningUnobservedCalls"] = provider.errorReasoningUnobservedCalls;
2881
+ if (provider.errorReasoningTokens !== null) metrics["provider.errorReasoningTokens"] = provider.errorReasoningTokens;
2882
+ for (const field of TOKEN_FIELDS) {
2883
+ const value = provider.errorTokens[field];
2884
+ if (value !== void 0) metrics[`provider.errorTokens.${field}`] = value;
2885
+ }
2886
+ if (provider.errorCostUsd !== null) metrics["provider.errorCostUsd"] = provider.errorCostUsd;
2887
+ return metrics;
2888
+ }
2889
+ function nonNegativeNumber2(value) {
2890
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
2748
2891
  }
2749
2892
  function isRecord6(value) {
2750
2893
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -2771,7 +2914,7 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
2771
2914
  activeFirstOutputAt = null;
2772
2915
  return;
2773
2916
  }
2774
- if (event.type === "message_update" && activeStartedAt !== null && activeFirstOutputAt === null) {
2917
+ if (isAssistantOutput(event) && activeStartedAt !== null && activeFirstOutputAt === null) {
2775
2918
  activeFirstOutputAt = now();
2776
2919
  return;
2777
2920
  }
@@ -2785,24 +2928,28 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
2785
2928
  }
2786
2929
  const endedAt = now();
2787
2930
  const promptCache = {
2788
- input: nonNegativeNumber2(usage.input) ?? 0,
2789
- cacheRead: nonNegativeNumber2(usage.cacheRead) ?? 0,
2790
- cacheWrite: nonNegativeNumber2(usage.cacheWrite) ?? 0,
2931
+ input: nonNegativeNumber3(usage.input) ?? 0,
2932
+ cacheRead: nonNegativeNumber3(usage.cacheRead) ?? 0,
2933
+ cacheWrite: nonNegativeNumber3(usage.cacheWrite) ?? 0,
2791
2934
  backendVerdict: "unknown"
2792
2935
  };
2793
2936
  if (isRecord7(message.backendTimings)) promptCache.backend = structuredClone(message.backendTimings);
2794
2937
  const previous = entries.at(-1);
2938
+ const timestamp = messageTimestamp(message.timestamp);
2795
2939
  entries.push({
2796
2940
  kind: "message",
2797
2941
  role: "assistant",
2798
2942
  turnId: `eval-call-${entries.length + 1}`,
2799
2943
  parentTurnId: previous?.turnId ?? null,
2800
- timestamp: messageTimestamp(message.timestamp),
2944
+ timestamp: timestamp ?? (/* @__PURE__ */ new Date(0)).toISOString(),
2801
2945
  payload: {
2946
+ // Retain the legacy ISO placeholder without treating it as observed
2947
+ // chronology. Per-call monotonic timing remains usable on its own.
2948
+ ...timestamp === null ? { timestampEstimated: true } : {},
2802
2949
  promptCache,
2803
- timing: {
2804
- ttftMs: activeStartedAt === null ? null : Math.round(Math.max(0, (activeFirstOutputAt ?? endedAt) - activeStartedAt)),
2805
- apiMs: activeStartedAt === null ? 0 : Math.round(Math.max(0, endedAt - activeStartedAt))
2950
+ timing: activeStartedAt === null ? null : {
2951
+ ttftMs: activeFirstOutputAt === null ? null : Math.round(Math.max(0, activeFirstOutputAt - activeStartedAt)),
2952
+ apiMs: Math.round(Math.max(0, endedAt - activeStartedAt))
2806
2953
  },
2807
2954
  usage: structuredClone(usage)
2808
2955
  }
@@ -2829,16 +2976,22 @@ function createEvalCallLedgerFold(now = () => performance.now()) {
2829
2976
  }
2830
2977
  };
2831
2978
  }
2979
+ function isAssistantOutput(event) {
2980
+ const output = event.type === "message_update" ? event.assistantMessageEvent : event;
2981
+ if (!isRecord7(output)) return false;
2982
+ if (output.type === "toolcall_start") return event.type === "message_update";
2983
+ return (output.type === "text_delta" || output.type === "thinking_delta" || output.type === "toolcall_delta") && typeof output.delta === "string" && output.delta.length > 0;
2984
+ }
2832
2985
  function isAssistantMessage(value) {
2833
2986
  return isRecord7(value) && value.role === "assistant";
2834
2987
  }
2835
2988
  function messageTimestamp(value) {
2836
- const milliseconds = nonNegativeNumber2(value);
2837
- if (milliseconds === null) return (/* @__PURE__ */ new Date(0)).toISOString();
2989
+ const milliseconds = nonNegativeNumber3(value);
2990
+ if (milliseconds === null) return null;
2838
2991
  const date = new Date(milliseconds);
2839
- return Number.isFinite(date.getTime()) ? date.toISOString() : (/* @__PURE__ */ new Date(0)).toISOString();
2992
+ return Number.isFinite(date.getTime()) ? date.toISOString() : null;
2840
2993
  }
2841
- function nonNegativeNumber2(value) {
2994
+ function nonNegativeNumber3(value) {
2842
2995
  return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
2843
2996
  }
2844
2997
  function parseRecord(line) {
@@ -2860,6 +3013,7 @@ var OUTPUT_HEAD_LIMIT = 2e4;
2860
3013
  var OUTPUT_TRUNCATION_MARKER = "\n[output middle truncated; tail preserved]\n";
2861
3014
  var METRIC_JSONL_LIMIT = 256e3;
2862
3015
  var METRIC_JSONL_LINE_LIMIT = 64e3;
3016
+ var TIMEOUT_KILL_GRACE_MS = 5e3;
2863
3017
  async function runExternalCommandRunner(runner, cwd, timeoutMs, env) {
2864
3018
  const runnerCommands = runner.commands ?? [];
2865
3019
  const commands = runnerCommands.length > 0 ? runnerCommands : runner.command === void 0 ? [] : [runner.command];
@@ -2929,14 +3083,10 @@ function runShellCommand(command, cwd, timeoutMs, env) {
2929
3083
  const callLedgerFold = createEvalCallLedgerFold();
2930
3084
  let timedOut = false;
2931
3085
  let settled = false;
2932
- const child = spawn(command, {
2933
- cwd,
2934
- shell: true,
2935
- stdio: ["ignore", "pipe", "pipe"],
2936
- // The overlay is additive: an eval item pins where Clio writes its
2937
- // journal, and inherits everything else the operator's shell provides.
2938
- env: env === void 0 ? process.env : { ...process.env, ...env }
2939
- });
3086
+ const spawnEnv = env === void 0 ? process.env : { ...process.env, ...env };
3087
+ const [file, args, shell] = typeof command === "string" ? [command, [], true] : [command[0], command.slice(1), false];
3088
+ const child = spawn(file, args, { cwd, shell, stdio: ["ignore", "pipe", "pipe"], env: spawnEnv });
3089
+ const commandLine = typeof command === "string" ? command : command.join(" ");
2940
3090
  child.stdout.setEncoding("utf8");
2941
3091
  child.stderr.setEncoding("utf8");
2942
3092
  child.stdout.on("data", (chunk) => {
@@ -2953,14 +3103,14 @@ function runShellCommand(command, cwd, timeoutMs, env) {
2953
3103
  const timer = setTimeout(() => {
2954
3104
  timedOut = true;
2955
3105
  child.kill("SIGTERM");
2956
- setTimeout(() => child.kill("SIGKILL"), 1e3);
3106
+ setTimeout(() => child.kill("SIGKILL"), TIMEOUT_KILL_GRACE_MS);
2957
3107
  }, timeoutMs);
2958
3108
  const finish = (exitCode) => {
2959
3109
  if (settled) return;
2960
3110
  settled = true;
2961
3111
  clearTimeout(timer);
2962
3112
  resolve9({
2963
- command,
3113
+ command: commandLine,
2964
3114
  exitCode,
2965
3115
  stdout,
2966
3116
  metricJsonl: metricCapture.finish(),
@@ -3096,18 +3246,19 @@ function stringField(record, field) {
3096
3246
  async function runClioRunRunner(runner, cwd, clioEntry, timeoutMs, target, env, readObservation) {
3097
3247
  const prompt = runner.prompt ?? "";
3098
3248
  const args = [
3099
- shellQuote(clioEntry),
3249
+ process.execPath,
3250
+ clioEntry,
3100
3251
  "run",
3101
3252
  "--json",
3102
- ...runner.agent === void 0 ? [] : ["--agent", shellQuote(runner.agent)],
3253
+ ...runner.agent === void 0 ? [] : ["--agent", runner.agent],
3103
3254
  "--target",
3104
- shellQuote(target.id),
3105
- ...target.model === void 0 ? [] : ["--model", shellQuote(target.model)],
3106
- ...target.thinking === void 0 ? [] : ["--thinking", shellQuote(target.thinking)],
3255
+ target.id,
3256
+ ...target.model === void 0 ? [] : ["--model", target.model],
3257
+ ...target.thinking === void 0 ? [] : ["--thinking", target.thinking],
3107
3258
  ...runner.autonomy === void 0 ? [] : ["--autonomy", runner.autonomy],
3108
- shellQuote(prompt)
3259
+ prompt
3109
3260
  ];
3110
- const result = await runShellCommand(`${process.execPath} ${args.join(" ")}`, cwd, runner.timeoutMs ?? timeoutMs, env);
3261
+ const result = await runShellCommand(args, cwd, runner.timeoutMs ?? timeoutMs, env);
3111
3262
  const tokens = result.usage;
3112
3263
  const toolMetricStream = result.metricJsonl.length > 0 ? result.metricJsonl : result.stdout;
3113
3264
  const tools = toolCallMetricsFromJsonl(toolMetricStream);
@@ -3227,16 +3378,19 @@ function toolBehaviorMetricEntriesFromJsonl(stdout, cwd, readObservation) {
3227
3378
  }
3228
3379
  const terminals = canonicalFinishes.length > 0 ? canonicalFinishes : executionEnds;
3229
3380
  const calls = /* @__PURE__ */ new Map();
3381
+ const succeeded = /* @__PURE__ */ new Map();
3230
3382
  const blocked = /* @__PURE__ */ new Map();
3231
3383
  for (const terminal of terminals) {
3232
3384
  const tool = metricToolName(terminal.tool);
3233
3385
  calls.set(tool, (calls.get(tool) ?? 0) + 1);
3386
+ if (terminal.outcome === "ok") succeeded.set(tool, (succeeded.get(tool) ?? 0) + 1);
3234
3387
  if (terminal.outcome === "blocked") blocked.set(tool, (blocked.get(tool) ?? 0) + 1);
3235
3388
  }
3236
- const namedTools = /* @__PURE__ */ new Set(["bash", "dispatch", "read", ...calls.keys(), ...blocked.keys()]);
3389
+ const namedTools = /* @__PURE__ */ new Set(["bash", "dispatch", "read", ...calls.keys(), ...succeeded.keys(), ...blocked.keys()]);
3237
3390
  const entries = { "tools.read.distinctPaths": readPaths.size };
3238
3391
  for (const tool of [...namedTools].sort()) {
3239
3392
  entries[`tools.calls.${tool}`] = calls.get(tool) ?? 0;
3393
+ entries[`tools.succeeded.${tool}`] = succeeded.get(tool) ?? 0;
3240
3394
  entries[`tools.blocked.${tool}`] = blocked.get(tool) ?? 0;
3241
3395
  }
3242
3396
  if (readObservation !== void 0) {
@@ -3290,12 +3444,8 @@ function isRecord9(value) {
3290
3444
  // src/domains/eval/runners/context-index.ts
3291
3445
  init_esm_shims();
3292
3446
  async function runContextIndexRunner(cwd, clioEntry, timeoutMs, target, env) {
3293
- const result = await runShellCommand(
3294
- `${shellQuote(process.execPath)} ${shellQuote(clioEntry)} context index --json`,
3295
- cwd,
3296
- timeoutMs,
3297
- env
3298
- );
3447
+ const args = [process.execPath, clioEntry, "context", "index", "--json"];
3448
+ const result = await runShellCommand(args, cwd, timeoutMs, env);
3299
3449
  const parsed = parseContextIndexOutput(result.stdout);
3300
3450
  return {
3301
3451
  assignmentId: null,
@@ -3337,7 +3487,7 @@ import { existsSync as existsSync2, statSync } from "node:fs";
3337
3487
  import { join as join4 } from "node:path";
3338
3488
  async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, env) {
3339
3489
  const extraArgs = runner.args ?? [];
3340
- const command = [
3490
+ const args = [
3341
3491
  process.execPath,
3342
3492
  clioEntry,
3343
3493
  "context",
@@ -3349,8 +3499,8 @@ async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, e
3349
3499
  ...target.model === void 0 ? [] : ["--model", target.model],
3350
3500
  ...target.thinking === void 0 ? [] : ["--thinking", target.thinking],
3351
3501
  ...extraArgs
3352
- ].map(shellQuote).join(" ");
3353
- const result = await runShellCommand(command, cwd, runner.timeoutMs ?? timeoutMs, env);
3502
+ ];
3503
+ const result = await runShellCommand(args, cwd, runner.timeoutMs ?? timeoutMs, env);
3354
3504
  const payload = parseInitPayload(result.stdout);
3355
3505
  const candidateGeneration = recordField2(payload, "generation");
3356
3506
  const generation = isValidGenerationPayload(payload, candidateGeneration) ? candidateGeneration : null;
@@ -3378,21 +3528,21 @@ async function runContextInitRunner(runner, cwd, clioEntry, timeoutMs, target, e
3378
3528
  wallTimeMs: result.wallTimeMs,
3379
3529
  metrics: {
3380
3530
  "latency.wallMs": result.wallTimeMs,
3381
- "latency.modelMs": numberField3(run, "durationMs"),
3382
- "tokens.input": numberField3(tokens, "input"),
3383
- "tokens.output": numberField3(tokens, "output"),
3384
- "tokens.total": numberField3(tokens, "total"),
3385
- "tokens.cacheRead": numberField3(tokens, "cacheRead"),
3386
- "tokens.cacheWrite": numberField3(tokens, "cacheWrite"),
3387
- "tools.totalCalls": numberField3(run, "toolCalls"),
3388
- "tools.failed": numberField3(run, "toolFailures"),
3389
- "tools.blocked": numberField3(run, "toolBlocked"),
3531
+ "latency.modelMs": numberField2(run, "durationMs"),
3532
+ "tokens.input": numberField2(tokens, "input"),
3533
+ "tokens.output": numberField2(tokens, "output"),
3534
+ "tokens.total": numberField2(tokens, "total"),
3535
+ "tokens.cacheRead": numberField2(tokens, "cacheRead"),
3536
+ "tokens.cacheWrite": numberField2(tokens, "cacheWrite"),
3537
+ "tools.totalCalls": numberField2(run, "toolCalls"),
3538
+ "tools.failed": numberField2(run, "toolFailures"),
3539
+ "tools.blocked": numberField2(run, "toolBlocked"),
3390
3540
  "context.clioMdBytes": clioMdBytes,
3391
3541
  "context.initMode": stringField3(generation, "mode") ?? "unknown",
3392
3542
  "context.initParserOutcome": stringField3(generation, "parserOutcome") ?? "unknown",
3393
3543
  "context.initFallback": stringField3(generation, "fallbackReason") !== null,
3394
- "context.initPromptBytes": numberField3(run, "promptBytes"),
3395
- "context.initOutputBytes": numberField3(run, "outputBytes"),
3544
+ "context.initPromptBytes": numberField2(run, "promptBytes"),
3545
+ "context.initOutputBytes": numberField2(run, "outputBytes"),
3396
3546
  "context.initTargetId": effectiveTarget,
3397
3547
  "context.initModelId": effectiveModel,
3398
3548
  "context.initRuntimeId": effectiveRuntime,
@@ -3491,7 +3641,7 @@ function recordField2(value, field) {
3491
3641
  const selected = field && typeof value === "object" && value !== null && !Array.isArray(value) ? value[field] : value;
3492
3642
  return typeof selected === "object" && selected !== null && !Array.isArray(selected) ? selected : null;
3493
3643
  }
3494
- function numberField3(value, field) {
3644
+ function numberField2(value, field) {
3495
3645
  const record = recordField2(value);
3496
3646
  const selected = record?.[field];
3497
3647
  return typeof selected === "number" && Number.isFinite(selected) ? selected : null;
@@ -3916,11 +4066,23 @@ async function runMatrixItem(loaded, task, target, repeatIndex, clioEntry, fresh
3916
4066
  }
3917
4067
  };
3918
4068
  const snapshot = await readEvalLedgerSnapshot(stateDir);
3919
- const ledgerEntries = [...snapshot.entries, ...runner.ledgerEntries ?? []];
4069
+ const selected = selectEvalLedgerEntries(snapshot.entries, runner.ledgerEntries ?? []);
4070
+ result.artifacts.trackedMetricSources = JSON.stringify({
4071
+ assistantCalls: selected.source,
4072
+ sessionCalls: selected.sessionCalls,
4073
+ streamCalls: selected.streamCalls,
4074
+ compactions: "session"
4075
+ });
4076
+ if (selected.sessionCalls > 0 && selected.streamCalls > 0) {
4077
+ result.artifacts.callLedger ??= JSON.stringify(runner.ledgerEntries);
4078
+ if (selected.sessionCalls !== selected.streamCalls || task.runner.kind === "external-command") {
4079
+ result.artifacts.trackedMetricWarning = "Session and stream call coverage may differ; tracked metrics use session calls, not a reconciled union. Inspect callLedger before treating these counts as complete: no shared call identity proves overlap.";
4080
+ }
4081
+ }
3920
4082
  result.verdict = adaptSuiteV2ResultToVerdictV1(
3921
4083
  result,
3922
4084
  buildEvalTrackedMetrics({
3923
- ledgerEntries,
4085
+ ledgerEntries: selected.entries,
3924
4086
  receipt: receipt ?? null,
3925
4087
  fallbackWallClockMs: runner.wallTimeMs
3926
4088
  })
@@ -4326,7 +4488,7 @@ function parseEvalArgs(args) {
4326
4488
  }
4327
4489
  async function runEvalCommand(args) {
4328
4490
  if (args[0] === "inventory") {
4329
- const { runEvalInventory } = await import("./eval-inventory-6DEJPLBF.js");
4491
+ const { runEvalInventory } = await import("./eval-inventory-Y6QRFOH5.js");
4330
4492
  return runEvalInventory(args.slice(1));
4331
4493
  }
4332
4494
  let parsed;
@@ -4501,4 +4663,4 @@ function comparisonFormat(value) {
4501
4663
  export {
4502
4664
  runEvalCommand
4503
4665
  };
4504
- //# sourceMappingURL=eval-C45FYRJ6.js.map
4666
+ //# sourceMappingURL=eval-OQOQUDHK.js.map