@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
@@ -5,10 +5,10 @@ import {
5
5
  import {
6
6
  loadFragments,
7
7
  renderCodewikiDigest
8
- } from "./chunk-Y3CBHOR6.js";
8
+ } from "./chunk-V6HJFQZE.js";
9
9
  import {
10
10
  loadMemoryRecordsSync
11
- } from "./chunk-BEPZRGGU.js";
11
+ } from "./chunk-EL24TAU4.js";
12
12
  import {
13
13
  WIKI_INDEX,
14
14
  WIKI_PLAN_FILE,
@@ -34,7 +34,7 @@ import {
34
34
  wikiStaleness,
35
35
  writeWikiMeta,
36
36
  writeWikiPlanFile
37
- } from "./chunk-NDINPTJ4.js";
37
+ } from "./chunk-ELZVTCGV.js";
38
38
  import {
39
39
  buildCodewikiCandidate,
40
40
  coordinateCodewikiExclusive,
@@ -44,10 +44,23 @@ import {
44
44
  statePath,
45
45
  writeClioState
46
46
  } from "./chunk-MXHC5QYU.js";
47
+ import {
48
+ readSessionEntriesForId
49
+ } from "./chunk-6UINWWS6.js";
50
+ import {
51
+ filterEntriesToActivePath
52
+ } from "./chunk-W6GROXXM.js";
53
+ import {
54
+ foldDecisionBoard
55
+ } from "./chunk-I2DWJ4GM.js";
47
56
  import {
48
57
  createTomlFileReader,
49
58
  tomlTableAt
50
59
  } from "./chunk-LCGCVYZ4.js";
60
+ import {
61
+ describeValidationContract,
62
+ loadValidationContract
63
+ } from "./chunk-V76WTFTW.js";
51
64
  import {
52
65
  classifyProjectPreload
53
66
  } from "./chunk-JVCV3ICN.js";
@@ -55,6 +68,9 @@ import {
55
68
  compileGlobRegex,
56
69
  normalizeGlobInput
57
70
  } from "./chunk-VG7TBQIY.js";
71
+ import {
72
+ decisionRef
73
+ } from "./chunk-54X7T7DK.js";
58
74
  import {
59
75
  ceilChars
60
76
  } from "./chunk-NZMNUPZZ.js";
@@ -83,6 +99,7 @@ import {
83
99
  } from "./chunk-APJ265NV.js";
84
100
  import {
85
101
  clioDataDir,
102
+ clioStateDir,
86
103
  resolveClioDirs
87
104
  } from "./chunk-BYP5D4HI.js";
88
105
  import {
@@ -3282,6 +3299,7 @@ async function runWikiGenerate(input = { model: "configured-clio-target" }) {
3282
3299
  plan: resolved.plan,
3283
3300
  resumed: resolved.resumed,
3284
3301
  unclaimedAreas: resolved.unclaimedAreas,
3302
+ ...input.decisions ? { decisions: input.decisions } : {},
3285
3303
  gitHead: existingMeta?.gitHead ?? null,
3286
3304
  ...input.onProgress ? { progress: input.onProgress } : {}
3287
3305
  });
@@ -3456,6 +3474,7 @@ async function runContextRefresh(input = {}) {
3456
3474
  wikiResult = await runWikiGenerate({
3457
3475
  cwd,
3458
3476
  mode: "update",
3477
+ ...input.decisions ? { decisions: input.decisions } : {},
3459
3478
  model: input.wikiModel ?? "unresolved-documenter-target",
3460
3479
  ...input.wikiGenerate ? { generate: input.wikiGenerate } : {},
3461
3480
  ...input.onProgress ? { onProgress: input.onProgress } : {}
@@ -3574,6 +3593,10 @@ function collectStartupHints(cwd, options = {}) {
3574
3593
  for (const issue of clio.errors) {
3575
3594
  hints.push(`clio-coder: malformed ${issue.path} ignored: ${issue.error}`);
3576
3595
  }
3596
+ const contract = loadValidationContract(cwd);
3597
+ if (!contract.ok) {
3598
+ hints.push(`clio-coder: validation contract ignored, rigor stays normal: ${describeValidationContract(contract)}`);
3599
+ }
3577
3600
  const state = readClioState(cwd);
3578
3601
  if (!state) return hints;
3579
3602
  if (state.contextSources !== void 0 && adoptionSourcesChanged(state.contextSources, { cwd })) {
@@ -3689,9 +3712,11 @@ function createContextBundle(_context, options = {}) {
3689
3712
  input?.onProgress?.(event);
3690
3713
  };
3691
3714
  try {
3692
- const result = await runContextRefresh(
3693
- input ? { ...input, onProgress: emitProgress } : { onProgress: emitProgress }
3694
- );
3715
+ const result = await runContextRefresh({
3716
+ ...input,
3717
+ ...input?.wiki ? { decisions: input.decisions ?? await currentDecisions(_context) } : {},
3718
+ onProgress: emitProgress
3719
+ });
3695
3720
  const cwd = input?.cwd ?? process.cwd();
3696
3721
  contextState.invalidate(cwd);
3697
3722
  if (cwd === lastCwd) startupHints = collectStartupHints(cwd, options);
@@ -3712,9 +3737,11 @@ function createContextBundle(_context, options = {}) {
3712
3737
  input?.onProgress?.(event);
3713
3738
  };
3714
3739
  try {
3715
- return await runWikiGenerate(
3716
- input ? { ...input, onProgress: emitProgress } : { model: "configured-clio-target", onProgress: emitProgress }
3717
- );
3740
+ return await runWikiGenerate({
3741
+ ...input ?? { model: "configured-clio-target" },
3742
+ decisions: input?.decisions ?? await currentDecisions(_context),
3743
+ onProgress: emitProgress
3744
+ });
3718
3745
  } catch (err) {
3719
3746
  emitProgress({
3720
3747
  phase: "done",
@@ -3743,6 +3770,14 @@ function createContextBundle(_context, options = {}) {
3743
3770
  };
3744
3771
  return { extension, contract };
3745
3772
  }
3773
+ async function currentDecisions(context) {
3774
+ const session = context.getContract("session");
3775
+ const current = session?.current();
3776
+ if (!session || !current) return [];
3777
+ session.flushAppends?.();
3778
+ const read = await readSessionEntriesForId(clioStateDir(), current.id);
3779
+ return foldDecisionBoard(filterEntriesToActivePath(read.entries, session.tree(current.id).leafId ?? void 0));
3780
+ }
3746
3781
 
3747
3782
  // src/domains/context/manifest.ts
3748
3783
  init_esm_shims();
@@ -3943,6 +3978,8 @@ ${page.sources.map((source) => `- ${source}`).join("\n")}` : "No anchor sources
3943
3978
  "## Repository guidance",
3944
3979
  repositoryGuidance(input.cwd)
3945
3980
  ];
3981
+ const decisions = recordedDecisions(input);
3982
+ if (decisions.length > 0) sections.push("# Recorded decisions", "```json", JSON.stringify(decisions, null, 2), "```");
3946
3983
  if (input.seeded) {
3947
3984
  sections.push(
3948
3985
  "## Revision",
@@ -3952,6 +3989,35 @@ ${page.sources.map((source) => `- ${source}`).join("\n")}` : "No anchor sources
3952
3989
  return `${sections.join("\n\n")}
3953
3990
  `;
3954
3991
  }
3992
+ function underSource(path, source) {
3993
+ const root = source.replace(/^\.\//, "").replace(/\/$/, "");
3994
+ const candidate = path.replace(/^\.\//, "");
3995
+ return candidate === root || candidate.startsWith(`${root}/`);
3996
+ }
3997
+ function recordedDecisions(input) {
3998
+ const files = new Set(
3999
+ input.codewiki.files.filter((file) => input.page.sources.some((source) => underSource(file.path, source))).map((file) => file.id)
4000
+ );
4001
+ const symbols = new Set(
4002
+ input.codewiki.symbols.filter((symbol) => files.has(symbol.fileId)).map((symbol) => symbol.name)
4003
+ );
4004
+ return (input.decisions ?? []).flatMap(
4005
+ (entry) => entry.decisions.filter((record) => {
4006
+ if (record.status !== "active") return false;
4007
+ if (symbols.has(record.key)) return true;
4008
+ const paths = [record.rationale ?? "", ...record.alternatives ?? []].join(" ").match(/[\w@./-]+/g) ?? [];
4009
+ return paths.some((path) => input.page.sources.some((source) => underSource(path.replace(/\.$/, ""), source)));
4010
+ }).map((record) => ({
4011
+ ref: decisionRef(entry.interviewId, record.key),
4012
+ key: record.key,
4013
+ value: record.value,
4014
+ alternatives: record.alternatives ?? [],
4015
+ rationale: record.rationale ?? record.source_question ?? "",
4016
+ decidedAt: record.decidedAt,
4017
+ source: record.source ?? (entry.origin === "agent" ? "agent" : "operator")
4018
+ }))
4019
+ ).slice(0, 12);
4020
+ }
3955
4021
 
3956
4022
  export {
3957
4023
  adoptionSnapshotsHash,
@@ -3979,4 +4045,4 @@ export {
3979
4045
  buildWikiPlanPrompt,
3980
4046
  buildWikiPagePrompt
3981
4047
  };
3982
- //# sourceMappingURL=chunk-KK4JZPBQ.js.map
4048
+ //# sourceMappingURL=chunk-IZXGRF7P.js.map
@@ -195,16 +195,16 @@ var ansi_styles_default = ansiStyles;
195
195
 
196
196
  // node_modules/chalk/source/vendor/supports-color/index.js
197
197
  init_esm_shims();
198
- import process from "node:process";
198
+ import process2 from "node:process";
199
199
  import os from "node:os";
200
200
  import tty from "node:tty";
201
- function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
201
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2.argv) {
202
202
  const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
203
203
  const position = argv.indexOf(prefix + flag);
204
204
  const terminatorPosition = argv.indexOf("--");
205
205
  return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
206
206
  }
207
- var { env } = process;
207
+ var { env } = process2;
208
208
  var flagForceColor;
209
209
  if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
210
210
  flagForceColor = 0;
@@ -260,7 +260,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
260
260
  if (env.TERM === "dumb") {
261
261
  return min;
262
262
  }
263
- if (process.platform === "win32") {
263
+ if (process2.platform === "win32") {
264
264
  const osRelease = os.release().split(".");
265
265
  if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
266
266
  return Number(osRelease[2]) >= 14931 ? 3 : 2;
@@ -504,7 +504,165 @@ var chalk = createChalk();
504
504
  var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
505
505
  var source_default = chalk;
506
506
 
507
+ // src/cli/argv.ts
508
+ init_esm_shims();
509
+ function printError(message, detail) {
510
+ const head = source_default.red("error:");
511
+ process.stderr.write(`${head} ${message}
512
+ `);
513
+ if (detail) process.stderr.write(` ${detail}
514
+ `);
515
+ }
516
+ function printNote(message) {
517
+ process.stderr.write(`${source_default.yellow("note:")} ${message}
518
+ `);
519
+ }
520
+ function printOk(message) {
521
+ process.stdout.write(`${source_default.green("ok:")} ${message}
522
+ `);
523
+ }
524
+ function printHeader(message) {
525
+ process.stdout.write(`${source_default.cyan(message)}
526
+ `);
527
+ }
528
+ function columnWidths(rows) {
529
+ const widths = [];
530
+ for (const row of rows) {
531
+ for (let i = 0; i < row.length; i += 1) {
532
+ widths[i] = Math.max(widths[i] ?? 0, row[i]?.length ?? 0);
533
+ }
534
+ }
535
+ return widths;
536
+ }
537
+ function formatColumnRow(row, widths, gap = 2) {
538
+ return row.map((cell, index) => {
539
+ if (index === row.length - 1) return cell;
540
+ return cell.padEnd((widths[index] ?? cell.length) + gap);
541
+ }).join("").trimEnd();
542
+ }
543
+ function formatColumns(rows, gap = 2) {
544
+ if (rows.length === 0) return "";
545
+ const widths = columnWidths(rows);
546
+ return `${rows.map((row) => formatColumnRow(row, widths, gap)).join("\n")}
547
+ `;
548
+ }
549
+ function parseFlags(argv) {
550
+ const flags = /* @__PURE__ */ new Set();
551
+ const positional = [];
552
+ for (const arg of argv) {
553
+ if (arg.startsWith("--")) flags.add(arg.slice(2));
554
+ else if (arg.startsWith("-") && arg.length > 1) flags.add(arg.slice(1));
555
+ else positional.push(arg);
556
+ }
557
+ return { flags, positional };
558
+ }
559
+ var ROOT_FLAG_TOKENS = /* @__PURE__ */ new Set(["--help", "-h", "--all", "--version", "-v"]);
560
+ var GLOBAL_ONLY_FLAGS = /* @__PURE__ */ new Map([
561
+ ["--api-key", "--api-key <key>"],
562
+ ["--no-context-files", "--no-context-files"],
563
+ ["-nc", "-nc"],
564
+ ["--with-panes", "--with-panes"],
565
+ ["--no-panes", "--no-panes"]
566
+ ]);
567
+ function globalFlagPositionHint(arg, command) {
568
+ const usage = GLOBAL_ONLY_FLAGS.get(arg);
569
+ if (usage === void 0) return null;
570
+ return `${arg} is a global option and must come before the subcommand: clio-coder ${usage} ${command} ...`;
571
+ }
572
+ function unknownGlobalOptionError(arg) {
573
+ const bare = arg.replace(/=.*$/u, "");
574
+ if (bare === "--resume" || bare === "--continue" || bare === "-r" || bare === "-c") {
575
+ return `unknown global option: ${arg}. Sessions are resumed from inside the app: start clio-coder, then type /resume to pick one.`;
576
+ }
577
+ return `unknown global option: ${arg}`;
578
+ }
579
+ function extractGlobalFlags(argv, isSubcommand = () => false) {
580
+ const rest = [];
581
+ let apiKey;
582
+ let noContextFiles = false;
583
+ let noSkills = false;
584
+ let panes;
585
+ const skillPaths = [];
586
+ for (let i = 0; i < argv.length; i++) {
587
+ const arg = argv[i];
588
+ if (arg === void 0) continue;
589
+ if (arg === "--") {
590
+ rest.push(...argv.slice(i + 1));
591
+ break;
592
+ }
593
+ if (!arg.startsWith("-")) {
594
+ rest.push(...argv.slice(i));
595
+ break;
596
+ }
597
+ if (arg === "--acp") {
598
+ rest.push("acp", ...argv.slice(i + 1));
599
+ break;
600
+ }
601
+ if (ROOT_FLAG_TOKENS.has(arg)) {
602
+ rest.push(arg);
603
+ continue;
604
+ }
605
+ if (arg === "--no-context-files" || arg === "-nc") {
606
+ noContextFiles = true;
607
+ continue;
608
+ }
609
+ if (arg === "--no-skills") {
610
+ noSkills = true;
611
+ continue;
612
+ }
613
+ if (arg === "--with-panes" || arg === "--no-panes") {
614
+ panes = arg === "--with-panes" ? "with" : "without";
615
+ continue;
616
+ }
617
+ if (arg === "--api-key" || arg === "--skill") {
618
+ const value = argv[i + 1];
619
+ if (value === void 0 || value.startsWith("-") || isSubcommand(value)) {
620
+ return {
621
+ noContextFiles,
622
+ noSkills,
623
+ skillPaths,
624
+ rest,
625
+ error: `${arg} requires a value`,
626
+ ...apiKey === void 0 ? {} : { apiKey },
627
+ ...panes === void 0 ? {} : { panes }
628
+ };
629
+ }
630
+ if (arg === "--api-key") apiKey = value;
631
+ else skillPaths.push(value);
632
+ i += 1;
633
+ continue;
634
+ }
635
+ return {
636
+ noContextFiles,
637
+ noSkills,
638
+ skillPaths,
639
+ rest,
640
+ error: unknownGlobalOptionError(arg),
641
+ ...apiKey === void 0 ? {} : { apiKey },
642
+ ...panes === void 0 ? {} : { panes }
643
+ };
644
+ }
645
+ return {
646
+ noContextFiles,
647
+ noSkills,
648
+ skillPaths,
649
+ rest,
650
+ ...apiKey === void 0 ? {} : { apiKey },
651
+ ...panes === void 0 ? {} : { panes }
652
+ };
653
+ }
654
+
507
655
  export {
508
- source_default
656
+ source_default,
657
+ printError,
658
+ printNote,
659
+ printOk,
660
+ printHeader,
661
+ columnWidths,
662
+ formatColumnRow,
663
+ formatColumns,
664
+ parseFlags,
665
+ globalFlagPositionHint,
666
+ extractGlobalFlags
509
667
  };
510
- //# sourceMappingURL=chunk-5TSRNF4G.js.map
668
+ //# sourceMappingURL=chunk-JCI2ROMZ.js.map
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-GHS5EBTQ.js";
10
10
  import {
11
11
  runCommandVector
12
- } from "./chunk-JSC3U7TI.js";
12
+ } from "./chunk-TOIVGRUX.js";
13
13
  import {
14
14
  withStateFileLockSync
15
15
  } from "./chunk-IKCO5N3L.js";
@@ -430,4 +430,4 @@ export {
430
430
  detectInteropAgents,
431
431
  InteropDomainModule
432
432
  };
433
- //# sourceMappingURL=chunk-INY6HTFL.js.map
433
+ //# sourceMappingURL=chunk-JEIYHLOR.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-GWZNEVM2.js";
5
5
  import {
6
6
  runDoctor
7
- } from "./chunk-N2Z7HLVY.js";
7
+ } from "./chunk-2ASED4PZ.js";
8
8
  import {
9
9
  readStateInfo
10
10
  } from "./chunk-IGLP3ODT.js";
@@ -63,4 +63,4 @@ export {
63
63
  describeUpgradeNotice,
64
64
  LifecycleDomainModule
65
65
  };
66
- //# sourceMappingURL=chunk-MUW2BDDH.js.map
66
+ //# sourceMappingURL=chunk-JQLNNIKT.js.map
@@ -39,13 +39,13 @@ import {
39
39
  registerBuiltinRuntimes,
40
40
  requestLmStudioJson,
41
41
  resolveLmStudioInstance
42
- } from "./chunk-VW6DOEDG.js";
42
+ } from "./chunk-6OSVSQL5.js";
43
43
  import {
44
44
  sleep
45
45
  } from "./chunk-EBY63B7G.js";
46
46
  import {
47
47
  listKnownModelsForRuntime
48
- } from "./chunk-LLDJM5XK.js";
48
+ } from "./chunk-26QSH3EJ.js";
49
49
  import {
50
50
  authNotRequiredStatus,
51
51
  openAuthStorage,
@@ -760,9 +760,6 @@ function runOverrides(env = process.env) {
760
760
  if (typeof maxContextTokens === "number" && Number.isInteger(maxContextTokens) && maxContextTokens > 0) {
761
761
  out.maxContextTokens = maxContextTokens;
762
762
  }
763
- if (typeof record.kvCacheMode === "string" && record.kvCacheMode.length > 0) {
764
- out.kvCacheMode = record.kvCacheMode;
765
- }
766
763
  const sampling = record.sampling;
767
764
  if (sampling !== null && typeof sampling === "object" && !Array.isArray(sampling)) {
768
765
  const numeric = {};
@@ -1549,8 +1546,7 @@ function modelResidencyForStatus(status, modelId) {
1549
1546
  }
1550
1547
  }
1551
1548
  function hasLiveModelCatalog(status) {
1552
- if (status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache") return true;
1553
- return status.discoveredModelsSource === void 0 && status.discoveredModels.length > 0;
1549
+ return status.discoveredModelsSource === "probe" || status.discoveredModelsSource === "cache";
1554
1550
  }
1555
1551
  function modelCandidatesForStatus(status) {
1556
1552
  const configured = uniqueModels(status.target.wireModels ?? []);
@@ -2443,6 +2439,7 @@ function mergeSamplingOverride(profile, override = runSamplingOverrides()) {
2443
2439
 
2444
2440
  // src/engine/apis/ollama-native.ts
2445
2441
  var REASONING_CHARS_PER_TOKEN = 4;
2442
+ var ownedModelsByTarget = /* @__PURE__ */ new Map();
2446
2443
  function clioQuirks(model) {
2447
2444
  return model.clioCoder?.quirks;
2448
2445
  }
@@ -2608,7 +2605,10 @@ async function listResidentOllamaModels(client) {
2608
2605
  });
2609
2606
  }
2610
2607
  async function unloadOllamaModel(baseUrl, modelId, headers) {
2608
+ const owned = ownedModelsByTarget.get(residencyTargetKey("ollama-native", baseUrl));
2609
+ if (!owned?.has(modelId)) return;
2611
2610
  await ollamaEvictClient(baseUrl, headers).generate({ model: modelId, prompt: "", keep_alive: 0, stream: false });
2611
+ owned.delete(modelId);
2612
2612
  }
2613
2613
  function mapStopReason(reason, hadToolCall) {
2614
2614
  if (hadToolCall) return "toolUse";
@@ -2764,8 +2764,19 @@ function runStream(model, context, options, thinkingLevel) {
2764
2764
  else emitText(segment.content);
2765
2765
  }
2766
2766
  };
2767
+ let recordedOwnership = false;
2767
2768
  for await (const chunk of iterator) {
2768
2769
  const response = chunk;
2770
+ if (!recordedOwnership && model.baseUrl) {
2771
+ const targetKey = residencyTargetKey("ollama-native", model.baseUrl);
2772
+ let owned = ownedModelsByTarget.get(targetKey);
2773
+ if (!owned) {
2774
+ owned = /* @__PURE__ */ new Set();
2775
+ ownedModelsByTarget.set(targetKey, owned);
2776
+ }
2777
+ owned.add(response.model || model.id);
2778
+ recordedOwnership = true;
2779
+ }
2769
2780
  const msg = response.message;
2770
2781
  if (msg?.thinking && msg.thinking.length > 0) {
2771
2782
  emitThinking(msg.thinking);
@@ -5031,4 +5042,4 @@ export {
5031
5042
  resolveCostProvenance2 as resolveCostProvenance,
5032
5043
  ProvidersDomainModule
5033
5044
  };
5034
- //# sourceMappingURL=chunk-XPWWI35G.js.map
5045
+ //# sourceMappingURL=chunk-JSD46VO2.js.map
@@ -1,4 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ FAILURE_CAUSE_TAGS
4
+ } from "./chunk-NRO2BJRH.js";
2
5
  import {
3
6
  withStateFileLock,
4
7
  withStateFileLockSync
@@ -23,7 +26,7 @@ function indexPath(stateDir) {
23
26
  function isEvidenceIndexRow(value) {
24
27
  if (typeof value !== "object" || value === null) return false;
25
28
  const row = value;
26
- return typeof row.runId === "string" && typeof row.evidenceId === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.firstPassSuccess === "boolean" && typeof row.findingCount === "number" && typeof row.generatedAt === "string";
29
+ return typeof row.runId === "string" && typeof row.evidenceId === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.firstPassSuccess === "boolean" && typeof row.findingCount === "number" && (row.succeeded === void 0 || typeof row.succeeded === "boolean") && (row.completionEvidenceWarning === void 0 || typeof row.completionEvidenceWarning === "boolean") && (row.ungroundedClaims === void 0 || typeof row.ungroundedClaims === "number" && Number.isSafeInteger(row.ungroundedClaims) && row.ungroundedClaims >= 0) && typeof row.generatedAt === "string";
27
30
  }
28
31
  function readEvidenceIndex(stateDir) {
29
32
  let raw;
@@ -62,6 +65,38 @@ async function writeEvidenceIndexRowQueued(stateDir, row) {
62
65
  return written;
63
66
  }
64
67
 
68
+ // src/domains/observability/accountability.ts
69
+ init_esm_shims();
70
+ function summarizeEvidenceIndex(rows) {
71
+ const totalRuns = rows.length;
72
+ let firstPassRuns = 0;
73
+ let unverifiedSuccesses = 0;
74
+ let ungroundedClaims = 0;
75
+ const counts = /* @__PURE__ */ new Map();
76
+ for (const row of rows) {
77
+ if (row.firstPassSuccess) firstPassRuns += 1;
78
+ if (row.succeeded === true && (row.tags.includes("no-validation") || row.tags.includes("proxy-validation") || row.completionEvidenceWarning === true))
79
+ unverifiedSuccesses += 1;
80
+ ungroundedClaims += row.ungroundedClaims ?? 0;
81
+ for (const tag of row.tags) {
82
+ if (!FAILURE_CAUSE_TAGS.has(tag)) continue;
83
+ counts.set(tag, (counts.get(tag) ?? 0) + 1);
84
+ }
85
+ }
86
+ 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));
87
+ return {
88
+ totalRuns,
89
+ firstPassRuns,
90
+ firstPassRate: totalRuns === 0 ? 0 : firstPassRuns / totalRuns,
91
+ unverifiedSuccesses,
92
+ ungroundedClaims,
93
+ failureCauses
94
+ };
95
+ }
96
+ function readAccountabilitySummary(stateDir) {
97
+ return summarizeEvidenceIndex(readEvidenceIndex(stateDir));
98
+ }
99
+
65
100
  // src/domains/observability/out-of-turn-usage.ts
66
101
  init_esm_shims();
67
102
  import { closeSync, fsyncSync, mkdirSync, openSync, readFileSync as readFileSync2, writeSync } from "node:fs";
@@ -223,7 +258,9 @@ function messageOf(error) {
223
258
  export {
224
259
  readEvidenceIndex,
225
260
  writeEvidenceIndexRowQueued,
261
+ summarizeEvidenceIndex,
262
+ readAccountabilitySummary,
226
263
  appendOutOfTurnUsageRow,
227
264
  readOutOfTurnUsageRows
228
265
  };
229
- //# sourceMappingURL=chunk-VA5FNYMT.js.map
266
+ //# sourceMappingURL=chunk-JT2RFCC5.js.map