@iowarp/clio-coder 0.4.3 → 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 (340) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +1 -1
  3. package/dist/{acp-H2NGRPWO.js → acp-WNAYYF4F.js} +4 -5
  4. package/dist/{agents-TL5LLUQP.js → agents-3OKXHLOI.js} +33 -31
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-E5SW4HMS.js → auth-VKNNMGPU.js} +10 -11
  7. package/dist/{builtins-IA7V7FUC.js → builtins-WGALA46I.js} +4 -4
  8. package/dist/{chunk-F5JHEYZM.js → chunk-23L32XTI.js} +10 -7
  9. package/dist/{chunk-DWUOQKRU.js → chunk-25QBEXRS.js} +2 -2
  10. package/dist/{chunk-LLDJM5XK.js → chunk-26QSH3EJ.js} +2 -2
  11. package/dist/{chunk-N2Z7HLVY.js → chunk-2ASED4PZ.js} +10 -10
  12. package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
  13. package/dist/chunk-2DSOYNFC.js +108 -0
  14. package/dist/{chunk-LDJG7DW3.js → chunk-2ZSONWVL.js} +4 -4
  15. package/dist/{chunk-GI7YYQ3F.js → chunk-36CT5VVL.js} +324 -41
  16. package/dist/{chunk-4UVU7BJ5.js → chunk-3GY4F45V.js} +2 -2
  17. package/dist/{chunk-PUVDKJ2Y.js → chunk-3ODX73FK.js} +3 -5
  18. package/dist/{chunk-IUE3Y34X.js → chunk-3UNOLWNZ.js} +2 -2
  19. package/dist/{chunk-6PTFB5VS.js → chunk-3UUXNFEX.js} +8 -4
  20. package/dist/{chunk-2APPQIER.js → chunk-4M6Z5QVF.js} +4 -4
  21. package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
  22. package/dist/{chunk-JGRC33J2.js → chunk-54X7T7DK.js} +12 -3
  23. package/dist/{chunk-YQWYVTMC.js → chunk-5636DCO5.js} +4 -4
  24. package/dist/{chunk-7E7I3WLS.js → chunk-57XXR6DR.js} +23 -22
  25. package/dist/{chunk-7ZYNNDKC.js → chunk-5TUB6SLS.js} +2 -2
  26. package/dist/{chunk-VW6DOEDG.js → chunk-6OSVSQL5.js} +11 -2
  27. package/dist/{chunk-L47TF46W.js → chunk-6PAZTBPA.js} +14 -2
  28. package/dist/{chunk-XIVNBFZS.js → chunk-6Q3CYFD3.js} +34 -16
  29. package/dist/{chunk-RSJ25QSL.js → chunk-6QOTUPRG.js} +155 -36
  30. package/dist/{chunk-JKKCYP3C.js → chunk-6UINWWS6.js} +10 -4
  31. package/dist/{chunk-WBKFA554.js → chunk-72YIHOZQ.js} +2 -2
  32. package/dist/{chunk-PAJQJ7BS.js → chunk-75W7L2E2.js} +246 -697
  33. package/dist/{chunk-RRNP2ANY.js → chunk-7UGL4MB5.js} +4 -4
  34. package/dist/{chunk-EKCHAPYA.js → chunk-AUPNRN7C.js} +2 -2
  35. package/dist/{chunk-ZDN3Y73Y.js → chunk-BJVFZO5U.js} +6 -48
  36. package/dist/{chunk-IWT4SF4R.js → chunk-CUSRQKPU.js} +64 -2
  37. package/dist/{chunk-SKHCAU7K.js → chunk-DQOVN6KV.js} +3 -2
  38. package/dist/{chunk-ZWPRK62N.js → chunk-DT3LWJOB.js} +4 -4
  39. package/dist/chunk-DXKJURES.js +671 -0
  40. package/dist/{chunk-BEPZRGGU.js → chunk-EL24TAU4.js} +2 -2
  41. package/dist/{chunk-OML5D5V5.js → chunk-ELWDPP3Y.js} +5 -5
  42. package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
  43. package/dist/chunk-EXLD33WO.js +381 -0
  44. package/dist/{chunk-IJNZMHLA.js → chunk-FEAXX7B6.js} +2 -2
  45. package/dist/{chunk-TM6LQDI3.js → chunk-FFUPXJC4.js} +74 -323
  46. package/dist/chunk-GX5WYQO4.js +59 -0
  47. package/dist/chunk-I2DWJ4GM.js +390 -0
  48. package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
  49. package/dist/chunk-IRXAATOX.js +539 -0
  50. package/dist/chunk-IXIY2H4R.js +44 -0
  51. package/dist/{chunk-KK4JZPBQ.js → chunk-IZXGRF7P.js} +76 -10
  52. package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
  53. package/dist/{chunk-INY6HTFL.js → chunk-JEIYHLOR.js} +2 -2
  54. package/dist/{chunk-MUW2BDDH.js → chunk-JQLNNIKT.js} +2 -2
  55. package/dist/{chunk-XPWWI35G.js → chunk-JSD46VO2.js} +19 -8
  56. package/dist/{chunk-VA5FNYMT.js → chunk-JT2RFCC5.js} +39 -2
  57. package/dist/{chunk-V2ANDPVT.js → chunk-K6T2ZAMZ.js} +168 -6
  58. package/dist/{chunk-B4OAX3SI.js → chunk-KFV5L5SK.js} +13 -6
  59. package/dist/{chunk-JEQ3XTHC.js → chunk-LLXSDWXS.js} +2 -2
  60. package/dist/{chunk-E3TPLWFX.js → chunk-LTIKRKFL.js} +3 -3
  61. package/dist/{chunk-NIQJ66N4.js → chunk-N56KALIC.js} +17 -17
  62. package/dist/{chunk-JDAY6FIL.js → chunk-NAI6ZFCY.js} +13 -9
  63. package/dist/{chunk-AF4YM7Z4.js → chunk-NRO2BJRH.js} +2490 -2182
  64. package/dist/{chunk-WRBAGUNF.js → chunk-NXIMQY5W.js} +2 -2
  65. package/dist/{chunk-I7ZPNEJM.js → chunk-NXYCB2VD.js} +5 -5
  66. package/dist/chunk-ODGTEFFI.js +50 -0
  67. package/dist/{chunk-2VIKGWFZ.js → chunk-OEJSLEPW.js} +2 -2
  68. package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
  69. package/dist/{chunk-54CBCGIR.js → chunk-Q4WO54TA.js} +132 -77
  70. package/dist/{chunk-B4VEBZKF.js → chunk-QUFRYSWI.js} +12 -6
  71. package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
  72. package/dist/{chunk-HEQY7ZFI.js → chunk-RAY4OVGZ.js} +2 -2
  73. package/dist/{chunk-G76U63X4.js → chunk-RQCKCSRL.js} +7 -7
  74. package/dist/{chunk-64I3JVYM.js → chunk-RXTN6AKH.js} +2 -2
  75. package/dist/{chunk-UPZU6GE4.js → chunk-RZDWV63N.js} +3 -3
  76. package/dist/{chunk-2UH2KFUP.js → chunk-S6PYF2XF.js} +2 -2
  77. package/dist/{chunk-JSC3U7TI.js → chunk-TOIVGRUX.js} +2 -2
  78. package/dist/{chunk-7DRAWPTZ.js → chunk-TQAHXW6Y.js} +1 -1
  79. package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
  80. package/dist/{chunk-AX2THNSA.js → chunk-UEPWCCTY.js} +4 -4
  81. package/dist/{chunk-QWGDJJYJ.js → chunk-USR47QNF.js} +4 -4
  82. package/dist/{chunk-Y3CBHOR6.js → chunk-V6HJFQZE.js} +2 -2
  83. package/dist/chunk-V76WTFTW.js +318 -0
  84. package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
  85. package/dist/{chunk-2UG5F4C5.js → chunk-XULDXHTN.js} +24 -12
  86. package/dist/chunk-XXYSBZIQ.js +283 -0
  87. package/dist/{chunk-MWUZBSAQ.js → chunk-Y55JBDO5.js} +331 -51
  88. package/dist/{chunk-W6RRQCPQ.js → chunk-YD5GIKET.js} +4 -4
  89. package/dist/{chunk-CE5AX47J.js → chunk-YECAMM3D.js} +2 -2
  90. package/dist/{chunk-WCXUNS7U.js → chunk-YNFKXPEC.js} +6 -6
  91. package/dist/cli/index.js +36 -35
  92. package/dist/{clio-CMMK4KRR.js → clio-QLICPCF5.js} +2 -2
  93. package/dist/{code-nav-MDZNQS33.js → code-nav-IJR2DBPR.js} +6 -6
  94. package/dist/{components-UCUQ4QXW.js → components-2TGAI2RC.js} +3 -4
  95. package/dist/{config-SVM5P5YI.js → config-IUA6OYNS.js} +52 -47
  96. package/dist/{configure-LE3IK2TJ.js → configure-VEPX4NMX.js} +14 -15
  97. package/dist/{context-VNCR7KAG.js → context-2DKHWH2T.js} +23 -23
  98. package/dist/{context-2OHRKS42.js → context-4MPR7WKB.js} +48 -42
  99. package/dist/{context-E3VC7RX5.js → context-BOYF5EJM.js} +11 -11
  100. package/dist/{context-clear-BW4O37TG.js → context-clear-S4ZJCQUX.js} +48 -42
  101. package/dist/{context-working-set-VDS25HXZ.js → context-working-set-3I3FYX6Y.js} +8 -8
  102. package/dist/detail-A7JAVSIG.js +98 -0
  103. package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-RJ5I2F2O.js} +71 -58
  104. package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
  105. package/dist/{doctor-WNNVO6FY.js → doctor-DKICC2SN.js} +54 -31
  106. package/dist/{eval-7G7SGAYO.js → eval-OQOQUDHK.js} +47 -56
  107. package/dist/{evidence-VD6736FQ.js → evidence-4DQ25GUQ.js} +53 -150
  108. package/dist/evidence-4F5USFKH.js +208 -0
  109. package/dist/{evolve-AL3NGVRL.js → evolve-GSS52E5J.js} +44 -41
  110. package/dist/{extensions-MOVJ32NM.js → extensions-G7MFLYHT.js} +4 -5
  111. package/dist/{fleet-QZHUMAGI.js → fleet-Q37YHHAQ.js} +74 -68
  112. package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-G7E4N7SM.js} +14 -11
  113. package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-O7M6QBA2.js} +6 -6
  114. package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-TOUBW6OW.js} +13 -13
  115. package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-SW33JJNI.js} +43 -39
  116. package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-CV2655TW.js} +2 -3
  117. package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-KESZX2YH.js} +16 -16
  118. package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-UQPMTVE3.js} +42 -38
  119. package/dist/{fleet-view-SWBR3VGQ.js → fleet-view-MN2VG4MR.js} +43 -39
  120. package/dist/{init-J477LKZH.js → init-PXEXQSBF.js} +60 -54
  121. package/dist/{interop-3FCM6XLG.js → interop-ZG5T62U3.js} +6 -7
  122. package/dist/inventory-C26CFDRR.js +101 -0
  123. package/dist/{library-QUQEIUG6.js → library-B2W4N74O.js} +16 -17
  124. package/dist/{memory-SGGSEP65.js → memory-YCANYS5A.js} +45 -42
  125. package/dist/{models-HEKUAXXK.js → models-GERTU3YI.js} +20 -22
  126. package/dist/{monitor-HKU57TYQ.js → monitor-CPNIUULB.js} +50 -44
  127. package/dist/{orchestrator-VDFAEFAI.js → orchestrator-J4BSH4WQ.js} +491 -1182
  128. package/dist/{panes-DN2SSFOH.js → panes-BOHAEGYC.js} +3 -3
  129. package/dist/{panes-TALGNPZT.js → panes-NXSLDQZ2.js} +5 -6
  130. package/dist/{paths-NBMFAIEZ.js → paths-VSUWNC22.js} +3 -4
  131. package/dist/{reset-EAJFFJVB.js → reset-TNWTB5LU.js} +5 -6
  132. package/dist/{resources-OVKSEFVE.js → resources-4PXNMD5G.js} +14 -14
  133. package/dist/{run-7DP7ZF2J.js → run-D6XJ34CN.js} +79 -83
  134. package/dist/{share-WML67FT3.js → share-2NWMJJEE.js} +14 -15
  135. package/dist/{skills-SG662R2K.js → skills-KR7WON5G.js} +18 -19
  136. package/dist/{skills-eval-VVZEUU46.js → skills-eval-O2ZNOLDS.js} +49 -46
  137. package/dist/{skills-inventory-I2E23GET.js → skills-inventory-ZZOUBK7O.js} +14 -14
  138. package/dist/{slash-commands-S7MBJDQK.js → slash-commands-ZXPJD64J.js} +32 -23
  139. package/dist/{steer-2LQOMCPB.js → steer-XA25PSCS.js} +3 -3
  140. package/dist/{support-CC2UJBJ6.js → support-7EMVWYG2.js} +2 -2
  141. package/dist/{targets-4QC3HIEW.js → targets-OMH2XCSN.js} +25 -27
  142. package/dist/tasks-IPAGMEIX.js +36 -0
  143. package/dist/{terminal-lease-TUHIJ6Y2.js → terminal-lease-C2J3JYRE.js} +4 -4
  144. package/dist/{tools-TFGJICCU.js → tools-EFFEAIDP.js} +5 -6
  145. package/dist/{uninstall-5PEVOE5B.js → uninstall-HALS6BLF.js} +7 -8
  146. package/dist/{upgrade-M4WXY6KN.js → upgrade-MS72RJEP.js} +14 -11
  147. package/dist/{usage-N7ZNVLEM.js → usage-NHG6MCJM.js} +60 -51
  148. package/dist/{verifiers-DJTP4XX6.js → verifiers-7AUNVXDY.js} +150 -17
  149. package/dist/{verify-RWE4PPEK.js → verify-FWYGPKMR.js} +12 -10
  150. package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
  151. package/dist/{wiki-generate-C7IQOXSP.js → wiki-generate-743CIGJW.js} +63 -56
  152. package/dist/{with-panes-4GCGSL7J.js → with-panes-BDQEWBRT.js} +2 -2
  153. package/dist/worker/entry.js +36 -33
  154. package/docs/README.md +3 -2
  155. package/docs/architecture/acp.md +17 -0
  156. package/docs/architecture/artifact-versions.md +1 -1
  157. package/docs/architecture/dispatch-typed-intent.md +1 -1
  158. package/docs/architecture/evidence-and-memory.md +1 -1
  159. package/docs/architecture/observability.md +7 -1
  160. package/docs/architecture/prompt-envelope-and-tools.md +15 -5
  161. package/docs/architecture/safety-model.md +10 -17
  162. package/docs/architecture/tui-design.md +1 -1
  163. package/docs/guide/built-in-agents.md +8 -8
  164. package/docs/guide/commands-and-modes.md +17 -2
  165. package/docs/guide/configuration-and-targets.md +3 -1
  166. package/docs/guide/configuration-reference.md +10 -5
  167. package/docs/guide/environment-variables.md +2 -2
  168. package/docs/guide/tool-usage.md +78 -3
  169. package/docs/history/config-knobs-audit.md +2 -2
  170. package/docs/process/development-pipeline.md +6 -1
  171. package/docs/process/git-commit-provenance.md +15 -0
  172. package/docs/process/release-cut-checklist.md +207 -0
  173. package/docs/process/scientific-validation.md +18 -17
  174. package/evals/behavioral-machinery-support.ts +1 -0
  175. package/evals/behavioral-machinery.yaml +1 -1
  176. package/package.json +1 -1
  177. package/skills/coding/coding-standards/SKILL.md +14 -4
  178. package/skills/context/context-handoff/SKILL.md +3 -3
  179. package/skills/context/context-prime/SKILL.md +3 -3
  180. package/skills/planning/architecture/SKILL.md +5 -5
  181. package/skills/planning/backlog/SKILL.md +4 -4
  182. package/skills/planning/prd/SKILL.md +4 -3
  183. package/skills/planning/product-intent/SKILL.md +8 -8
  184. package/skills/planning/tech-spec/SKILL.md +4 -4
  185. package/skills/registry.yaml +32 -32
  186. package/skills/research/arxiv-literature/SKILL.md +3 -3
  187. package/skills/research/experiment-protocol/SKILL.md +3 -3
  188. package/skills/research/scientific-debugging/SKILL.md +3 -2
  189. package/skills/research/scientific-modernization/SKILL.md +3 -3
  190. package/skills/skill-marketplace.json +16 -16
  191. package/skills/workflow/cut-it/SKILL.md +3 -4
  192. package/skills/workflow/design-council/SKILL.md +5 -10
  193. package/skills/workflow/grill-me/SKILL.md +14 -15
  194. package/skills/workflow/workflow-distiller/SKILL.md +4 -4
  195. package/src/cli/args.ts +0 -8
  196. package/src/cli/configure.ts +2 -1
  197. package/src/cli/doctor-state-size.ts +1 -12
  198. package/src/cli/doctor-validation-contract.ts +28 -0
  199. package/src/cli/doctor.ts +5 -0
  200. package/src/cli/evidence-detail.ts +1 -75
  201. package/src/cli/evidence-inventory.ts +1 -167
  202. package/src/cli/index.ts +2 -0
  203. package/src/cli/run.ts +0 -2
  204. package/src/cli/targets.ts +1 -1
  205. package/src/cli/tasks.ts +84 -0
  206. package/src/cli/upgrade.ts +10 -5
  207. package/src/cli/usage.ts +6 -0
  208. package/src/cli/verifiers.ts +147 -1
  209. package/src/cli/wiki-generate.ts +1 -0
  210. package/src/core/commit-attribution.ts +41 -1
  211. package/src/core/git-commit-attribution.ts +46 -3
  212. package/src/core/run-overrides.ts +0 -5
  213. package/src/core/skill-activation.ts +3 -0
  214. package/src/core/tool-names.ts +5 -2
  215. package/src/domains/agents/builtins/architect.md +1 -1
  216. package/src/domains/agents/builtins/coder.md +1 -1
  217. package/src/domains/agents/builtins/documenter.md +1 -1
  218. package/src/domains/agents/builtins/git-master.md +1 -1
  219. package/src/domains/agents/builtins/provenance.md +7 -7
  220. package/src/domains/agents/builtins/tester.md +1 -1
  221. package/src/domains/agents/builtins/verifier.md +2 -2
  222. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  223. package/src/domains/context/extension.ts +31 -7
  224. package/src/domains/context/refresh.ts +3 -0
  225. package/src/domains/context/wiki/frontmatter.ts +5 -2
  226. package/src/domains/context/wiki/generate.ts +6 -0
  227. package/src/domains/context/wiki/prompts.ts +43 -0
  228. package/src/domains/dispatch/active-route-planner.ts +4 -0
  229. package/src/domains/dispatch/code-step.ts +11 -4
  230. package/src/domains/dispatch/contract.ts +31 -7
  231. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  232. package/src/domains/dispatch/extension.ts +50 -27
  233. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  234. package/src/domains/dispatch/fleet-run.ts +1 -0
  235. package/src/domains/dispatch/host-verification.ts +114 -13
  236. package/src/domains/dispatch/intent.ts +28 -18
  237. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  238. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  239. package/src/domains/dispatch/reservation-store.ts +5 -3
  240. package/src/domains/dispatch/state.ts +15 -2
  241. package/src/domains/dispatch/types.ts +17 -2
  242. package/src/domains/eval/runners/clio-run.ts +12 -9
  243. package/src/domains/eval/runners/context-index.ts +2 -7
  244. package/src/domains/eval/runners/context-init.ts +3 -6
  245. package/src/domains/eval/runners/external-command.ts +29 -11
  246. package/src/domains/evidence/build.ts +102 -15
  247. package/src/domains/evidence/detail.ts +69 -0
  248. package/src/domains/evidence/eval.ts +13 -1
  249. package/src/domains/evidence/finish-contract-map.ts +5 -1
  250. package/src/domains/evidence/inventory.ts +167 -0
  251. package/src/domains/evidence/store.ts +16 -0
  252. package/src/domains/evidence/types.ts +12 -0
  253. package/src/domains/extensions/resources.ts +7 -0
  254. package/src/domains/middleware/marketplace-offer.ts +20 -1
  255. package/src/domains/middleware/runtime.ts +7 -3
  256. package/src/domains/mux/detect.ts +3 -6
  257. package/src/domains/observability/accountability.ts +15 -1
  258. package/src/domains/observability/contract.ts +52 -7
  259. package/src/domains/observability/evidence-index.ts +10 -0
  260. package/src/domains/observability/extension.ts +9 -5
  261. package/src/domains/observability/projection.ts +394 -45
  262. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  263. package/src/domains/prompts/fragments/operating/contract.md +2 -0
  264. package/src/domains/prompts/fragments/wiki/page.md +8 -0
  265. package/src/domains/providers/model-discovery.ts +1 -4
  266. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
  267. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  268. package/src/domains/providers/support.ts +1 -1
  269. package/src/domains/providers/types/runtime-descriptor.ts +1 -1
  270. package/src/domains/safety/action-classifier.ts +7 -0
  271. package/src/domains/safety/default-path-policy.ts +2 -0
  272. package/src/domains/safety/finish-contract-registration.ts +29 -14
  273. package/src/domains/safety/finish-contract.ts +252 -40
  274. package/src/domains/safety/index.ts +20 -1
  275. package/src/domains/safety/policy-engine.ts +26 -6
  276. package/src/domains/safety/rigor.ts +53 -39
  277. package/src/domains/safety/validation-contract.ts +388 -0
  278. package/src/domains/session/archive-readers.ts +10 -1
  279. package/src/domains/session/decision-board.ts +101 -2
  280. package/src/domains/session/entries.ts +44 -7
  281. package/src/domains/session/extension.ts +4 -4
  282. package/src/domains/session/handoff.ts +2 -1
  283. package/src/domains/session/manager.ts +2 -3
  284. package/src/domains/session/task-board.ts +14 -1
  285. package/src/domains/session/tree/fork.ts +1 -2
  286. package/src/domains/session/tree/navigator.ts +1 -1
  287. package/src/domains/user-tasks/acceptance.ts +56 -0
  288. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  289. package/src/domains/user-tasks/store.ts +34 -3
  290. package/src/engine/acp/adapter.ts +24 -6
  291. package/src/engine/acp/server.ts +21 -4
  292. package/src/engine/acp/transport.ts +53 -8
  293. package/src/engine/acp/types.ts +4 -0
  294. package/src/engine/apis/ollama-native.ts +15 -0
  295. package/src/engine/claude/subprocess-runtime.ts +107 -60
  296. package/src/engine/external-subprocess.ts +12 -4
  297. package/src/entry/orchestrator.ts +11 -2
  298. package/src/interactive/dispatch-board.ts +46 -717
  299. package/src/interactive/fleet-run-preview.ts +2 -1
  300. package/src/interactive/interactive-application.ts +3 -2
  301. package/src/interactive/interactive-presentation.ts +55 -12
  302. package/src/interactive/interactive-slash-runtime.ts +2 -1
  303. package/src/interactive/oracle.ts +5 -2
  304. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  305. package/src/interactive/overlays/message-picker.ts +2 -2
  306. package/src/interactive/overlays/settings.ts +2 -2
  307. package/src/interactive/overlays/tree-selector.ts +2 -2
  308. package/src/interactive/renderers/branch-summary.ts +1 -1
  309. package/src/interactive/slash-autocomplete.ts +4 -6
  310. package/src/interactive/slash-commands.ts +25 -39
  311. package/src/interactive/slash-spec.ts +28 -0
  312. package/src/interactive/view/artifacts.ts +2 -0
  313. package/src/interactive/worker-stream.ts +7 -3
  314. package/src/tools/bootstrap.ts +4 -0
  315. package/src/tools/builtin-tool-catalog.ts +31 -0
  316. package/src/tools/compete-worktrees.ts +7 -1
  317. package/src/tools/core-bootstrap.ts +16 -0
  318. package/src/tools/decide.ts +136 -0
  319. package/src/tools/dispatch-admission.ts +21 -0
  320. package/src/tools/dispatch-plan.ts +5 -2
  321. package/src/tools/dispatch-runner.ts +15 -1
  322. package/src/tools/dispatch-types.ts +6 -0
  323. package/src/tools/evidence.ts +96 -0
  324. package/src/tools/limitation.ts +76 -0
  325. package/src/tools/policy.ts +9 -0
  326. package/src/tools/presentation.ts +3 -0
  327. package/src/tools/registry.ts +1 -1
  328. package/src/tools/result-shaping.ts +17 -5
  329. package/src/tools/task-worktree.ts +13 -3
  330. package/src/tools/tasks.ts +10 -1
  331. package/src/tools/verify/authoring.ts +170 -83
  332. package/src/tools/verify/catalog.ts +122 -5
  333. package/src/tools/verify/index.ts +2 -1
  334. package/src/tools/verify/numeric.ts +298 -0
  335. package/src/tools/verify/perf.ts +143 -0
  336. package/src/tools/verify/scripts.ts +229 -2
  337. package/dist/chunk-7DICMOS6.js +0 -313
  338. package/dist/chunk-RVG5JXAL.js +0 -41
  339. package/dist/chunk-T56WDKA5.js +0 -183
  340. package/dist/chunk-VPKWYKEY.js +0 -169
@@ -1,14 +1,22 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  appendOutOfTurnUsageRow,
4
- readEvidenceIndex,
4
+ readAccountabilitySummary,
5
5
  writeEvidenceIndexRowQueued
6
- } from "./chunk-VA5FNYMT.js";
6
+ } from "./chunk-JT2RFCC5.js";
7
+ import {
8
+ createWorkerProgressFold
9
+ } from "./chunk-XXYSBZIQ.js";
10
+ import {
11
+ truncateToWidth
12
+ } from "./chunk-YAKGTXEV.js";
7
13
  import {
8
- FAILURE_CAUSE_TAGS,
9
14
  buildEvidence,
10
15
  createCostTracker
11
- } from "./chunk-AF4YM7Z4.js";
16
+ } from "./chunk-NRO2BJRH.js";
17
+ import {
18
+ summarizeTrustStatus
19
+ } from "./chunk-CUSRQKPU.js";
12
20
  import {
13
21
  createDispatchTraceMirror,
14
22
  traceDatabasePath
@@ -16,9 +24,15 @@ import {
16
24
  import {
17
25
  uncachedPrefillTokens
18
26
  } from "./chunk-3DPEIQKN.js";
27
+ import {
28
+ cloneRunToolBudgetEnvelope
29
+ } from "./chunk-75W7L2E2.js";
30
+ import {
31
+ sanitizeCallTargetText
32
+ } from "./chunk-NEDJ26B5.js";
19
33
  import {
20
34
  resolveCostProvenance
21
- } from "./chunk-XPWWI35G.js";
35
+ } from "./chunk-JSD46VO2.js";
22
36
  import {
23
37
  BusChannels
24
38
  } from "./chunk-F4EKGO4N.js";
@@ -36,31 +50,6 @@ init_esm_shims();
36
50
  // src/domains/observability/extension.ts
37
51
  init_esm_shims();
38
52
 
39
- // src/domains/observability/accountability.ts
40
- init_esm_shims();
41
- function summarizeEvidenceIndex(rows) {
42
- const totalRuns = rows.length;
43
- let firstPassRuns = 0;
44
- const counts = /* @__PURE__ */ new Map();
45
- for (const row of rows) {
46
- if (row.firstPassSuccess) firstPassRuns += 1;
47
- for (const tag of row.tags) {
48
- if (!FAILURE_CAUSE_TAGS.has(tag)) continue;
49
- counts.set(tag, (counts.get(tag) ?? 0) + 1);
50
- }
51
- }
52
- const failureCauses = [...counts.entries()].map(([tag, count]) => ({ tag, count })).sort((a, b) => b.count !== a.count ? b.count - a.count : a.tag.localeCompare(b.tag));
53
- return {
54
- totalRuns,
55
- firstPassRuns,
56
- firstPassRate: totalRuns === 0 ? 0 : firstPassRuns / totalRuns,
57
- failureCauses
58
- };
59
- }
60
- function readAccountabilitySummary(stateDir) {
61
- return summarizeEvidenceIndex(readEvidenceIndex(stateDir));
62
- }
63
-
64
53
  // src/domains/observability/metrics.ts
65
54
  init_esm_shims();
66
55
  function percentile(sorted, p) {
@@ -87,6 +76,7 @@ function aggregateMetrics(snap) {
87
76
 
88
77
  // src/domains/observability/projection.ts
89
78
  init_esm_shims();
79
+ import { performance } from "node:perf_hooks";
90
80
 
91
81
  // src/core/dispatch-outcome.ts
92
82
  init_esm_shims();
@@ -125,8 +115,121 @@ function makeRef(parts) {
125
115
  }
126
116
  return Object.keys(ref).length > 0 ? ref : void 0;
127
117
  }
118
+ var TASK_SUMMARY_MAX_WIDTH = 240;
119
+ function finiteOrZero(value) {
120
+ return num(value, 0);
121
+ }
122
+ function parseRuntimeKind(value) {
123
+ if (value === "sdk" || value === "subprocess" || value === "acp-delegation") return value;
124
+ return "http";
125
+ }
126
+ function parseAgentAudience(value, fallback) {
127
+ if (value === "base" || value === "shadow" || value === "custom" || value === "internal") return value;
128
+ return fallback;
129
+ }
130
+ function parseRequestOrigin(value, fallback) {
131
+ if (value === "user" || value === "agent" || value === "internal") return value;
132
+ return fallback;
133
+ }
134
+ function parseNonEmptyString(value) {
135
+ return typeof value === "string" && value.length > 0 ? value : void 0;
136
+ }
137
+ function parseTaskSummary(raw, fallback) {
138
+ return sanitizeDispatchTaskSummary(raw.task) ?? sanitizeDispatchTaskSummary(raw.taskSummary) ?? fallback;
139
+ }
140
+ function parsePositiveInt(value) {
141
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : void 0;
142
+ }
143
+ function parseGateBadge(value) {
144
+ if (typeof value !== "object" || value === null) return void 0;
145
+ const record = value;
146
+ if (typeof record.role !== "string" || record.role.length === 0) return void 0;
147
+ const cycle = parsePositiveInt(record.cycle) ?? 1;
148
+ return { role: record.role, cycle };
149
+ }
150
+ function parseEndpointCapacity(value) {
151
+ if (typeof value !== "object" || value === null) return void 0;
152
+ const record = value;
153
+ const key = parseNonEmptyString(record.key);
154
+ const label = parseNonEmptyString(record.label);
155
+ const limit = parsePositiveInt(record.limit);
156
+ return key === void 0 || label === void 0 || limit === void 0 ? void 0 : { key, label, limit };
157
+ }
158
+ function parseCouncilBadge(value) {
159
+ if (typeof value !== "object" || value === null) return void 0;
160
+ const record = value;
161
+ const group = parseNonEmptyString(record.group);
162
+ const label = parseNonEmptyString(record.label);
163
+ const round = parsePositiveInt(record.round);
164
+ if (group === void 0 || label === void 0 || round === void 0) return void 0;
165
+ return {
166
+ group,
167
+ label,
168
+ ...typeof record.color === "string" && record.color.length > 0 ? { color: record.color } : {},
169
+ round
170
+ };
171
+ }
172
+ function sanitizeDispatchTaskSummary(value) {
173
+ if (typeof value !== "string") return void 0;
174
+ const sanitized = sanitizeCallTargetText(value);
175
+ if (sanitized.length === 0) return void 0;
176
+ return sanitizeCallTargetText(truncateToWidth(sanitized, TASK_SUMMARY_MAX_WIDTH, "\u2026", false));
177
+ }
178
+ function parseRetrySnapshot(value) {
179
+ const attempt = parsePositiveInt(value.attempt);
180
+ const dueAtMs = Date.parse(value.dueAt);
181
+ if (attempt === void 0 || !Number.isFinite(dueAtMs)) return null;
182
+ return {
183
+ attempt,
184
+ dueAtMs,
185
+ reason: sanitizeCallTargetText(value.reason)
186
+ };
187
+ }
188
+ function readRetrySnapshot(snapshot) {
189
+ const retrying = /* @__PURE__ */ new Map();
190
+ try {
191
+ for (const value of snapshot.retrying) {
192
+ const runId = asRunId(value.runId);
193
+ const agentId = parseNonEmptyString(value.agentId);
194
+ const retry = parseRetrySnapshot(value);
195
+ const taskSummary = sanitizeDispatchTaskSummary(value.task);
196
+ if (runId && agentId && retry) {
197
+ retrying.set(runId, {
198
+ agentId,
199
+ ...taskSummary !== void 0 ? { taskSummary } : {},
200
+ retry
201
+ });
202
+ }
203
+ }
204
+ } catch {
205
+ }
206
+ return retrying;
207
+ }
208
+ function readRunningSnapshot(snapshot) {
209
+ const running = /* @__PURE__ */ new Map();
210
+ try {
211
+ for (const value of snapshot.running) {
212
+ const runId = asRunId(value.runId);
213
+ if (!runId) continue;
214
+ const budget = cloneRunToolBudgetEnvelope(value.budget);
215
+ running.set(runId, {
216
+ inputTokens: finiteOrZero(value.tokens.input),
217
+ outputTokens: finiteOrZero(value.tokens.output),
218
+ tokenCount: finiteOrZero(value.tokens.total),
219
+ costUsd: finiteOrZero(value.costUsd),
220
+ costProvenance: value.costProvenance ?? "unknown",
221
+ outcomePhase: value.outcomePhase,
222
+ ...budget !== void 0 ? { budget } : {}
223
+ });
224
+ }
225
+ } catch {
226
+ }
227
+ return running;
228
+ }
128
229
  function createObservabilityProjection(bus, deps) {
129
230
  const runs = /* @__PURE__ */ new Map();
231
+ const fleetPhases = /* @__PURE__ */ new Map();
232
+ let runReaders = deps;
130
233
  const notices = [];
131
234
  const providerHealth = /* @__PURE__ */ new Map();
132
235
  const pendingEvidence = /* @__PURE__ */ new Set();
@@ -151,7 +254,14 @@ function createObservabilityProjection(bus, deps) {
151
254
  accountability,
152
255
  // Newest-first: Map preserves first-seen (enqueue) order, so reversing
153
256
  // surfaces the most recently started runs at the head of the list.
154
- runs: [...runs.values()].reverse(),
257
+ runs: [...runs.values()].reverse().map((entry) => {
258
+ const { progressFold, startedAtClockMs: _clock, ...summary } = entry;
259
+ return structuredClone({
260
+ ...summary,
261
+ status: entry.retry ? "retrying" : entry.status,
262
+ progress: progressFold.snapshot()
263
+ });
264
+ }),
155
265
  providerHealth: providerHealthRecord,
156
266
  notices: [...notices],
157
267
  pendingEvidenceBuildRunIds: [...pendingEvidence]
@@ -185,12 +295,20 @@ function createObservabilityProjection(bus, deps) {
185
295
  const oldest = runs.keys().next().value;
186
296
  if (oldest === void 0) break;
187
297
  runs.delete(oldest);
298
+ fleetPhases.delete(oldest);
188
299
  }
189
300
  }
190
301
  function emptyRun(runId, now) {
302
+ const phase = fleetPhases.get(runId);
191
303
  return {
192
304
  runId,
193
305
  agentId: "-",
306
+ runtimeKind: "http",
307
+ progressFold: createWorkerProgressFold(),
308
+ startedAtClockMs: null,
309
+ ttftMs: null,
310
+ lastContextTokens: 0,
311
+ ...phase !== void 0 ? { phase: { ...phase } } : {},
194
312
  status: "enqueued",
195
313
  startedAtMs: now,
196
314
  updatedAtMs: now,
@@ -202,11 +320,25 @@ function createObservabilityProjection(bus, deps) {
202
320
  };
203
321
  }
204
322
  function applyIdentity(summary, id) {
323
+ delete summary.trust;
205
324
  if (typeof id.agentId === "string" && id.agentId.length > 0) summary.agentId = id.agentId;
206
325
  if (typeof id.targetId === "string" && id.targetId.length > 0) summary.targetId = id.targetId;
207
326
  if (typeof id.wireModelId === "string" && id.wireModelId.length > 0) summary.modelId = id.wireModelId;
208
327
  if (typeof id.runtimeId === "string" && id.runtimeId.length > 0) summary.runtimeId = id.runtimeId;
209
- if (typeof id.runtimeKind === "string" && id.runtimeKind.length > 0) summary.runtimeKind = id.runtimeKind;
328
+ summary.runtimeKind = parseRuntimeKind(id.runtimeKind ?? summary.runtimeKind);
329
+ const additions = {
330
+ agentAudience: parseAgentAudience(id.agentAudience, summary.agentAudience),
331
+ requestOrigin: parseRequestOrigin(id.requestOrigin, summary.requestOrigin),
332
+ node: parseNonEmptyString(id.node) ?? summary.node,
333
+ endpoint: parseEndpointCapacity(id.endpoint) ?? summary.endpoint,
334
+ gate: parseGateBadge(id.gate) ?? summary.gate,
335
+ council: parseCouncilBadge(id.council) ?? summary.council,
336
+ rerouteCount: parsePositiveInt(id.rerouteCount) ?? summary.rerouteCount,
337
+ contextWindow: parsePositiveInt(id.contextWindow) ?? summary.contextWindow,
338
+ taskSummary: parseTaskSummary(id, summary.taskSummary),
339
+ budget: cloneRunToolBudgetEnvelope(id.budget) ?? summary.budget
340
+ };
341
+ Object.assign(summary, Object.fromEntries(Object.entries(additions).filter(([, value]) => value !== void 0)));
210
342
  }
211
343
  function applyTerminalTokens(summary, payload) {
212
344
  summary.tokens.total = num(payload.tokenCount, summary.tokens.total);
@@ -233,6 +365,80 @@ function createObservabilityProjection(bus, deps) {
233
365
  }
234
366
  markChanged();
235
367
  }
368
+ function settleFromReceipt(summary) {
369
+ try {
370
+ const facts = runReaders.readReceipt?.(summary.runId);
371
+ const text = facts?.trust?.artifactIntegrity.state === "verified" ? facts.text : void 0;
372
+ summary.progressFold.settle(typeof text === "string" && text.trim().length > 0 ? text : void 0);
373
+ if (facts?.trust !== void 0) summary.trust = summarizeTrustStatus(facts.trust);
374
+ } catch {
375
+ summary.progressFold.settle();
376
+ }
377
+ }
378
+ function applyTerminalDetail(summary, payload) {
379
+ const host = payload.hostVerification;
380
+ if (host === "verified" || host === "rejected" || host === "skipped" || host === "not_implicated")
381
+ summary.hostVerification = host;
382
+ if (payload.reason !== "retry_denied") summary.receiptId = summary.runId;
383
+ delete summary.retry;
384
+ settleFromReceipt(summary);
385
+ }
386
+ function reconcileRuns() {
387
+ if (!runReaders.dispatchSnapshot) return;
388
+ let current;
389
+ try {
390
+ current = runReaders.dispatchSnapshot();
391
+ } catch {
392
+ return;
393
+ }
394
+ if (!Array.isArray(current?.retrying) || !Array.isArray(current?.running)) return;
395
+ const retrying = readRetrySnapshot(current);
396
+ const running = readRunningSnapshot(current);
397
+ const now = Date.now();
398
+ let changed = false;
399
+ for (const entry of runs.values()) {
400
+ if (entry.retry && !retrying.has(entry.runId)) {
401
+ delete entry.retry;
402
+ changed = true;
403
+ }
404
+ }
405
+ for (const [runId, retry] of retrying) {
406
+ const existing = runs.get(runId);
407
+ if (existing && existing.status !== "failed" && existing.status !== "dead") continue;
408
+ const entry = existing ?? emptyRun(runId, now);
409
+ if (!existing) {
410
+ entry.agentId = retry.agentId;
411
+ entry.status = "failed";
412
+ }
413
+ entry.retry = { ...retry.retry };
414
+ if (entry.taskSummary === void 0 && retry.taskSummary !== void 0) entry.taskSummary = retry.taskSummary;
415
+ putRun(runId, entry);
416
+ changed = true;
417
+ }
418
+ for (const [runId, live] of running) {
419
+ const entry = runs.get(runId);
420
+ if (!entry || isTerminal(entry.status) && live.outcomePhase !== "aborting") continue;
421
+ entry.tokens.input = live.inputTokens;
422
+ entry.tokens.output = live.outputTokens;
423
+ entry.tokens.total = live.tokenCount;
424
+ entry.costUsd = live.costUsd;
425
+ entry.costProvenance = live.costProvenance;
426
+ if (live.budget !== void 0) entry.budget = live.budget;
427
+ if (live.outcomePhase === "aborting" && entry.status !== "completed" && entry.status !== "aborted") {
428
+ entry.status = "cancelling";
429
+ delete entry.retry;
430
+ }
431
+ changed = true;
432
+ }
433
+ if (changed) markChanged();
434
+ }
435
+ function evidenceBuildSucceeded(runId, evidence) {
436
+ pendingEvidence.delete(runId);
437
+ const summary = runs.get(runId);
438
+ if (summary) summary.evidence = { ...evidence, tags: [...evidence.tags] };
439
+ accountability = deps.readAccountability();
440
+ markChanged();
441
+ }
236
442
  const unsubscribes = [
237
443
  bus.on(BusChannels.DispatchEnqueued, (raw) => {
238
444
  const payload = raw ?? {};
@@ -242,6 +448,7 @@ function createObservabilityProjection(bus, deps) {
242
448
  const summary = runs.get(runId) ?? emptyRun(runId, now);
243
449
  applyIdentity(summary, payload);
244
450
  summary.status = "enqueued";
451
+ delete summary.retry;
245
452
  summary.updatedAtMs = now;
246
453
  putRun(runId, summary);
247
454
  markChanged();
@@ -255,6 +462,8 @@ function createObservabilityProjection(bus, deps) {
255
462
  applyIdentity(summary, payload);
256
463
  summary.status = "running";
257
464
  summary.startedAtMs = now;
465
+ summary.startedAtClockMs = performance.now();
466
+ delete summary.retry;
258
467
  summary.updatedAtMs = now;
259
468
  summary.finishedAtMs = null;
260
469
  summary.durationMs = null;
@@ -273,10 +482,46 @@ function createObservabilityProjection(bus, deps) {
273
482
  const type = typeof event.type === "string" ? event.type : "";
274
483
  if (type === "heartbeat_status") {
275
484
  const status = resolveHeartbeat(event.status);
276
- if (status && !isTerminal(summary.status)) summary.status = status;
485
+ if (status && !isTerminal(summary.status) && summary.status !== "cancelling") summary.status = status;
486
+ if (status === "dead") summary.progressFold.settle();
277
487
  markChanged();
278
488
  return;
279
489
  }
490
+ if (type === "attempt_start") {
491
+ summary.failoverHops = (summary.failoverHops ?? 0) + 1;
492
+ summary.status = "running";
493
+ summary.finishedAtMs = null;
494
+ summary.durationMs = null;
495
+ summary.progressFold.restart();
496
+ delete summary.retry;
497
+ markChanged();
498
+ return;
499
+ }
500
+ if (type === "agent_start") summary.startedAtClockMs = performance.now();
501
+ if (type === "message_update") {
502
+ const assistantEvent = event.assistantMessageEvent ?? {};
503
+ const hasDelta = ["text_delta", "thinking_delta", "toolcall_start", "toolcall_delta"].includes(
504
+ String(assistantEvent.type)
505
+ );
506
+ if (hasDelta && summary.ttftMs === null && summary.startedAtClockMs !== null)
507
+ summary.ttftMs = Math.round(performance.now() - summary.startedAtClockMs);
508
+ }
509
+ if (type === "clio_coder_write_record_downgraded") {
510
+ const detail = event.payload ?? {};
511
+ const tool = parseNonEmptyString(detail.tool);
512
+ const toolCallId = parseNonEmptyString(detail.toolCallId);
513
+ if (detail.reason === "opaque_tool_succeeded" && tool !== void 0 && toolCallId !== void 0)
514
+ summary.writeRecordDowngrade = {
515
+ reason: "opaque_tool_succeeded",
516
+ tool: sanitizeCallTargetText(tool),
517
+ toolCallId: sanitizeCallTargetText(toolCallId)
518
+ };
519
+ }
520
+ summary.progressFold.observe(payload.event);
521
+ if (type === "clio_coder_steer_received") {
522
+ const detail = event.payload ?? {};
523
+ summary.steerAcknowledgement = { receivedAtMs: now, chars: Math.max(0, Math.floor(num(detail.chars, 0))) };
524
+ }
280
525
  if (type === "message_end" && !isTerminal(summary.status)) {
281
526
  const message = event.message ?? {};
282
527
  if (message.role === "assistant" && message.usage) {
@@ -285,8 +530,10 @@ function createObservabilityProjection(bus, deps) {
285
530
  summary.tokens.input += input;
286
531
  summary.tokens.output += output;
287
532
  summary.tokens.total += input + output + num(message.usage.cacheWrite, 0);
533
+ summary.lastContextTokens = input + output;
288
534
  }
289
535
  }
536
+ if (type === "agent_end") summary.progressFold.settle();
290
537
  markChanged();
291
538
  }),
292
539
  bus.on(BusChannels.DispatchCompleted, (raw) => {
@@ -301,6 +548,7 @@ function createObservabilityProjection(bus, deps) {
301
548
  summary.finishedAtMs = now;
302
549
  summary.durationMs = num(payload.durationMs, Math.max(0, now - summary.startedAtMs));
303
550
  applyTerminalTokens(summary, payload);
551
+ applyTerminalDetail(summary, payload);
304
552
  summary.outcome = str(payload.outcome, "succeeded");
305
553
  summary.outcomeDetail = typeof payload.outcomeDetail === "string" ? payload.outcomeDetail : null;
306
554
  putRun(runId, summary);
@@ -318,11 +566,34 @@ function createObservabilityProjection(bus, deps) {
318
566
  summary.finishedAtMs = now;
319
567
  summary.durationMs = num(payload.durationMs, Math.max(0, now - summary.startedAtMs));
320
568
  applyTerminalTokens(summary, payload);
569
+ applyTerminalDetail(summary, payload);
321
570
  summary.outcome = str(payload.outcome, str(payload.reason, "failed"));
322
571
  summary.outcomeDetail = typeof payload.outcomeDetail === "string" ? payload.outcomeDetail : null;
323
572
  putRun(runId, summary);
324
573
  markChanged();
325
574
  }),
575
+ bus.on(BusChannels.RunAborted, (raw) => {
576
+ const runId = asRunId(raw?.runId);
577
+ const summary = runId ? runs.get(runId) : void 0;
578
+ if (!summary) return;
579
+ const wasRetrying = summary.retry !== void 0;
580
+ delete summary.retry;
581
+ if (wasRetrying && raw.startedAt === null) {
582
+ summary.status = "aborted";
583
+ summary.finishedAtMs = Date.now();
584
+ summary.progressFold.settle();
585
+ } else {
586
+ if (isTerminal(summary.status) && !wasRetrying) return;
587
+ summary.status = "cancelling";
588
+ }
589
+ summary.outcomeDetail = typeof raw.reason === "string" ? raw.reason : summary.outcomeDetail ?? null;
590
+ summary.updatedAtMs = Date.now();
591
+ markChanged();
592
+ }),
593
+ bus.on(BusChannels.AccountabilityEvidenceReady, (payload) => {
594
+ const runId = asRunId(payload?.runId);
595
+ if (runId) evidenceBuildSucceeded(runId, payload);
596
+ }),
326
597
  bus.on(BusChannels.ProviderHealth, (raw) => {
327
598
  const payload = raw ?? {};
328
599
  if (typeof payload.id !== "string" || payload.id.length === 0) return;
@@ -333,6 +604,24 @@ function createObservabilityProjection(bus, deps) {
333
604
  ];
334
605
  return {
335
606
  snapshot: buildSnapshot,
607
+ bindRunReaders(readers) {
608
+ runReaders = readers;
609
+ return () => {
610
+ if (runReaders === readers) runReaders = deps;
611
+ };
612
+ },
613
+ reconcileRuns,
614
+ setFleetPhase(runId, phase) {
615
+ fleetPhases.set(runId, { ...phase });
616
+ while (fleetPhases.size > MAX_PROJECTION_RUNS) {
617
+ const oldest = fleetPhases.keys().next().value;
618
+ if (oldest === void 0) break;
619
+ fleetPhases.delete(oldest);
620
+ }
621
+ const summary = runs.get(runId);
622
+ if (summary) summary.phase = { ...phase };
623
+ markChanged();
624
+ },
336
625
  subscribe(listener) {
337
626
  listeners.add(listener);
338
627
  listener(buildSnapshot());
@@ -348,20 +637,6 @@ function createObservabilityProjection(bus, deps) {
348
637
  pendingEvidence.add(runId);
349
638
  markChanged();
350
639
  },
351
- evidenceBuildSucceeded(runId, evidence) {
352
- pendingEvidence.delete(runId);
353
- const summary = runs.get(runId);
354
- if (summary) {
355
- summary.evidence = {
356
- evidenceId: evidence.evidenceId,
357
- firstPassSuccess: evidence.firstPassSuccess,
358
- findingCount: evidence.findingCount,
359
- tags: [...evidence.tags]
360
- };
361
- }
362
- accountability = deps.readAccountability();
363
- markChanged();
364
- },
365
640
  evidenceBuildFailed(runId, message) {
366
641
  pendingEvidence.delete(runId);
367
642
  pushNotice(
@@ -491,6 +766,11 @@ function evidenceIndexRow(runId, result, succeeded, attempt) {
491
766
  tags: [...tags],
492
767
  firstPassSuccess,
493
768
  findingCount: result.findings.length,
769
+ succeeded,
770
+ completionEvidenceWarning: result.findings.some(
771
+ (finding) => finding.tag === "completion-evidence" && finding.severity === "warn"
772
+ ),
773
+ ungroundedClaims: result.ungroundedClaims,
494
774
  generatedAt: (/* @__PURE__ */ new Date()).toISOString()
495
775
  };
496
776
  }
@@ -517,7 +797,6 @@ function createObservabilityBundle(context, options = {}) {
517
797
  projection.evidenceBuildStarted(runId);
518
798
  const build = buildAndIndexEvidence(runId, succeeded, attempt, {
519
799
  onReady: (id, evidence) => {
520
- projection.evidenceBuildSucceeded(id, evidence);
521
800
  context.bus.emit(BusChannels.AccountabilityEvidenceReady, { runId: id, ...evidence });
522
801
  },
523
802
  onFailed: (id, message) => projection.evidenceBuildFailed(id, message)
@@ -607,6 +886,9 @@ function createObservabilityBundle(context, options = {}) {
607
886
  telemetry.record("histogram", "tokens.ttft_ms", snapshot.ttftMs ?? 0);
608
887
  projection.refresh();
609
888
  },
889
+ bindRunReaders: (readers) => projection.bindRunReaders(readers),
890
+ reconcileRuns: () => projection.reconcileRuns(),
891
+ setFleetPhase: (runId, phase) => projection.setFleetPhase(runId, phase),
610
892
  snapshot: () => projection.snapshot(),
611
893
  subscribe: (listener) => projection.subscribe(listener)
612
894
  };
@@ -704,10 +986,8 @@ function createObservabilityDomainModule(options = {}) {
704
986
  }
705
987
 
706
988
  export {
707
- readAccountabilitySummary,
708
- resolveDispatchFailureStatus,
709
989
  recordBackgroundMemoryStep,
710
990
  ObservabilityDomainModule,
711
991
  createObservabilityDomainModule
712
992
  };
713
- //# sourceMappingURL=chunk-MWUZBSAQ.js.map
993
+ //# sourceMappingURL=chunk-Y55JBDO5.js.map
@@ -2,18 +2,18 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  canonicalJson,
4
4
  sha256
5
- } from "./chunk-IWT4SF4R.js";
5
+ } from "./chunk-CUSRQKPU.js";
6
6
  import {
7
7
  addResponseModelIdObservationCount,
8
8
  emptyResponseModelIdObservationCounts,
9
9
  responseModelIdObservationFromRecord
10
- } from "./chunk-JKKCYP3C.js";
10
+ } from "./chunk-6UINWWS6.js";
11
11
  import {
12
12
  uncachedPrefillTokens
13
13
  } from "./chunk-3DPEIQKN.js";
14
14
  import {
15
15
  ToolNames
16
- } from "./chunk-K6BSR66V.js";
16
+ } from "./chunk-4NSRCOYP.js";
17
17
  import {
18
18
  ceilChars,
19
19
  extractReasoningTokens
@@ -1194,4 +1194,4 @@ export {
1194
1194
  readFileArgsAsync,
1195
1195
  expandInlineFileReferencesAsync
1196
1196
  };
1197
- //# sourceMappingURL=chunk-W6RRQCPQ.js.map
1197
+ //# sourceMappingURL=chunk-YD5GIKET.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  enabledExtensionResourceRoots
4
- } from "./chunk-7DRAWPTZ.js";
4
+ } from "./chunk-TQAHXW6Y.js";
5
5
  import {
6
6
  require_dist
7
7
  } from "./chunk-APJ265NV.js";
@@ -120,4 +120,4 @@ export {
120
120
  splitYamlFrontmatter,
121
121
  stringField
122
122
  };
123
- //# sourceMappingURL=chunk-CE5AX47J.js.map
123
+ //# sourceMappingURL=chunk-YECAMM3D.js.map
@@ -4,23 +4,23 @@ import {
4
4
  loadProjectRules,
5
5
  renderOperatorProfile,
6
6
  selectActiveRules
7
- } from "./chunk-KK4JZPBQ.js";
7
+ } from "./chunk-IZXGRF7P.js";
8
8
  import {
9
9
  loadFragments
10
- } from "./chunk-Y3CBHOR6.js";
10
+ } from "./chunk-V6HJFQZE.js";
11
11
  import {
12
12
  compile,
13
13
  compileWorker
14
- } from "./chunk-AF4YM7Z4.js";
14
+ } from "./chunk-NRO2BJRH.js";
15
15
  import {
16
16
  sha256
17
- } from "./chunk-IWT4SF4R.js";
17
+ } from "./chunk-CUSRQKPU.js";
18
18
  import {
19
19
  classifyProjectPreload
20
20
  } from "./chunk-JVCV3ICN.js";
21
21
  import {
22
22
  isUserVisibleAgent
23
- } from "./chunk-B4OAX3SI.js";
23
+ } from "./chunk-KFV5L5SK.js";
24
24
  import {
25
25
  BusChannels
26
26
  } from "./chunk-F4EKGO4N.js";
@@ -720,4 +720,4 @@ export {
720
720
  createPromptsDomainModule,
721
721
  SchedulingDomainModule
722
722
  };
723
- //# sourceMappingURL=chunk-WCXUNS7U.js.map
723
+ //# sourceMappingURL=chunk-YNFKXPEC.js.map