@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
@@ -4,33 +4,27 @@ import {
4
4
  extractCommandDeleteTargets,
5
5
  extractCommandWriteTargets,
6
6
  toolMutationPaths
7
- } from "./chunk-I7ZPNEJM.js";
7
+ } from "./chunk-NXYCB2VD.js";
8
+ import {
9
+ PROJECT_VERIFIER_CATALOG_RELATIVE_PATH
10
+ } from "./chunk-DXKJURES.js";
8
11
  import {
9
12
  isProjectVerifierCheckId,
10
13
  isVerificationScriptName
11
14
  } from "./chunk-UL3WSD3F.js";
12
15
  import {
13
16
  ToolNames
14
- } from "./chunk-K6BSR66V.js";
17
+ } from "./chunk-4NSRCOYP.js";
15
18
  import {
16
19
  init_esm_shims
17
20
  } from "./chunk-3R73A4XB.js";
18
21
 
19
22
  // src/domains/safety/finish-contract.ts
20
23
  init_esm_shims();
21
- var FINISH_CONTRACT_ADVISORY_MESSAGE = "[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or an explicit limitation. Run a verification command or state what could not be verified.";
24
+ import { resolve } from "node:path";
25
+ var FINISH_CONTRACT_ADVISORY_MESSAGE = "[Clio Coder] finish-contract advisory: you changed files this turn without recording validation evidence or a limitation receipt. Run a verification command or call limitation with the scope and reason.";
22
26
  var DEFAULT_RECENT_ENTRY_LIMIT = 80;
23
- var LIMITATION_PATTERNS = [
24
- /\b(?:blocked by|blocker|blockers|unable to|not able to|could not|couldn't|cannot|can't)\b/i,
25
- /\b(?:did not|didn't|have not|haven't|has not|hasn't|was not able|wasn't able)\b/i,
26
- /\b(?:not complete|incomplete)\b/i,
27
- /\b(?:not|un)(?:\s|-)?(?:validated|verified|tested)\b/i,
28
- /^\s*Tests\s*:\s*(?:not run|not executed|not available|failed|blocked|skipped)\b/im,
29
- /^\s*Known gaps?\s*:\s*(?!\s*(?:none|no\b|n\/a|not applicable)\b).+/im,
30
- /\bremaining(?:\s+\w+){0,3}\s+(?:work|issue|issues|gap|gaps|blocker|blockers)\b/i
31
- ];
32
27
  function assessFinishContract(input) {
33
- const assistantText = input.assistantText.trim();
34
28
  const sessionEntries = input.sessionEntries ?? [];
35
29
  const assistantTurnId = input.assistantTurnId ?? null;
36
30
  const window = recentEntries(sessionEntries, assistantTurnId, input.recentEntryLimit ?? DEFAULT_RECENT_ENTRY_LIMIT);
@@ -38,12 +32,38 @@ function assessFinishContract(input) {
38
32
  if (mutatedPaths.length === 0) {
39
33
  return { kind: "ok", reason: "no_mutation", evidence: [], mutatedPaths };
40
34
  }
41
- const evidence = collectValidationEvidence(window);
35
+ const acceptanceChecks = new Set(input.activeAcceptance?.verification.map((item) => item.check) ?? []);
36
+ const evidence = collectValidationEvidence(window, acceptanceChecks, input.workspaceRoot);
37
+ const limitations = collectLimitationEvidence(window);
38
+ const required = input.rigor === "high" ? input.activeAcceptance?.verification ?? [] : [];
39
+ if (required.length > 0) {
40
+ const passes = new Set(
41
+ required.filter((check) => evidence.some((item) => acceptanceCheckPassed(item, check, input.workspaceRoot)))
42
+ );
43
+ const limited = new Set(limitations.flatMap((item) => item.paths ?? []));
44
+ const missing = [
45
+ ...new Set(required.filter((check) => !passes.has(check) && !limited.has(check.check)).map((item) => item.check))
46
+ ];
47
+ if (missing.length > 0)
48
+ return {
49
+ kind: "engage",
50
+ reason: "unvalidated_mutation",
51
+ message: `[Clio Coder] high-rigor finish gate: operator acceptance still requires passing validation for: ${missing.join(", ")}. Run each named check or include its exact id in limitation.paths.`,
52
+ evidence: [...evidence, ...limitations],
53
+ mutatedPaths
54
+ };
55
+ return {
56
+ kind: "ok",
57
+ reason: passes.size === required.length ? "validation_evidence" : "explicit_limitation",
58
+ evidence: [...evidence, ...limitations],
59
+ mutatedPaths
60
+ };
61
+ }
42
62
  if (evidence.length > 0) {
43
63
  return { kind: "ok", reason: "validation_evidence", evidence, mutatedPaths };
44
64
  }
45
- if (hasExplicitLimitation(assistantText)) {
46
- return { kind: "ok", reason: "explicit_limitation", evidence: [], mutatedPaths };
65
+ if (limitations.length > 0) {
66
+ return { kind: "ok", reason: "explicit_limitation", evidence: limitations, mutatedPaths };
47
67
  }
48
68
  return {
49
69
  kind: "engage",
@@ -53,10 +73,59 @@ function assessFinishContract(input) {
53
73
  mutatedPaths
54
74
  };
55
75
  }
56
- function hasExplicitLimitation(text) {
57
- const normalized = text.trim();
58
- if (normalized.length === 0) return false;
59
- return LIMITATION_PATTERNS.some((pattern) => pattern.test(normalized));
76
+ function acceptanceCheckPassed(evidence, required, workspaceRoot) {
77
+ if (evidence.kind !== "validation_command" || evidence.check !== required.check || !workspaceRoot || !evidence.source)
78
+ return false;
79
+ if (evidence.durationMs !== void 0 && evidence.durationMs > required.timeoutMs) return false;
80
+ const root = resolve(workspaceRoot);
81
+ if (evidence.source.kind === "project-catalog")
82
+ return evidence.source.path === resolve(root, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH);
83
+ return evidence.source.path === resolve(root, "package.json") && evidence.cwd === root && validationCheckId(evidence.argv?.join(" ") ?? "") === required.check;
84
+ }
85
+ function collectLimitationEvidence(recent) {
86
+ const evidence = [];
87
+ const calls = /* @__PURE__ */ new Map();
88
+ const seen = /* @__PURE__ */ new Set();
89
+ for (const entry of recent) {
90
+ const call = limitationToolCall(entry);
91
+ if (call !== null) {
92
+ calls.set(call.toolCallId, call);
93
+ continue;
94
+ }
95
+ const resultId = successfulToolResultId(entry);
96
+ if (resultId === null) continue;
97
+ const candidate = calls.get(resultId);
98
+ if (candidate === void 0) continue;
99
+ const item = {
100
+ kind: "limitation",
101
+ summary: candidate.command,
102
+ ...candidate.paths ? { paths: candidate.paths } : {}
103
+ };
104
+ if (candidate.turnId !== void 0) item.turnId = candidate.turnId;
105
+ pushEvidence(evidence, seen, item);
106
+ }
107
+ return evidence;
108
+ }
109
+ function limitationToolCall(entry) {
110
+ const record = asRecord(entry);
111
+ if (record?.kind !== "message" || record.role !== "tool_call") return null;
112
+ const payload = asRecord(record.payload);
113
+ if (payload === null) return null;
114
+ const toolName = stringFromFirst(payload, ["name", "toolName", "tool"]);
115
+ if (toolName !== ToolNames.Limitation) return null;
116
+ const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
117
+ if (toolCallId === null) return null;
118
+ const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
119
+ const scope = typeof args?.scope === "string" ? args.scope.trim() : "";
120
+ const reason = typeof args?.reason === "string" ? args.reason.trim() : "";
121
+ const candidate = {
122
+ toolCallId,
123
+ paths: Array.isArray(args?.paths) ? args.paths.filter((item) => typeof item === "string").map((item) => item.trim()) : [],
124
+ command: `limitation recorded: ${scope.length > 0 ? scope : "unspecified"} (reason=${reason.length > 0 ? reason : "unspecified"})`
125
+ };
126
+ const turnId = turnIdOf(entry);
127
+ if (turnId !== null) candidate.turnId = turnId;
128
+ return candidate;
60
129
  }
61
130
  function mutatingReceipts(recent) {
62
131
  const mutationCalls = /* @__PURE__ */ new Map();
@@ -117,7 +186,7 @@ function pushPath(paths, seen, path) {
117
186
  seen.add(path);
118
187
  paths.push(path);
119
188
  }
120
- function collectValidationEvidence(recent) {
189
+ function collectValidationEvidence(recent, acceptanceChecks, workspaceRoot) {
121
190
  const evidence = [];
122
191
  const toolCalls = /* @__PURE__ */ new Map();
123
192
  const dispatchCalls = /* @__PURE__ */ new Map();
@@ -128,7 +197,7 @@ function collectValidationEvidence(recent) {
128
197
  pushEvidence(evidence, seen, protectedArtifact);
129
198
  continue;
130
199
  }
131
- const call = bashValidationCall(entry);
200
+ const call = bashValidationCall(entry, acceptanceChecks, workspaceRoot);
132
201
  if (call !== null) {
133
202
  toolCalls.set(call.toolCallId, call);
134
203
  continue;
@@ -153,11 +222,11 @@ function collectValidationEvidence(recent) {
153
222
  }
154
223
  const candidate = toolCalls.get(resultId);
155
224
  if (candidate !== void 0) {
156
- pushEvidence(evidence, seen, validationEvidence(candidate));
225
+ pushEvidence(evidence, seen, validationEvidence(candidate, entry));
157
226
  }
158
227
  continue;
159
228
  }
160
- const bashExecution = bashExecutionEvidence(entry);
229
+ const bashExecution = bashExecutionEvidence(entry, acceptanceChecks, workspaceRoot);
161
230
  if (bashExecution !== null) pushEvidence(evidence, seen, bashExecution);
162
231
  }
163
232
  return evidence;
@@ -175,7 +244,7 @@ function recentEntries(entries, assistantTurnId, recentEntryLimit) {
175
244
  }
176
245
  return entries.slice(startInclusive, endExclusive);
177
246
  }
178
- function bashValidationCall(entry) {
247
+ function bashValidationCall(entry, acceptanceChecks, workspaceRoot) {
179
248
  const record = asRecord(entry);
180
249
  if (record?.kind !== "message" || record.role !== "tool_call") return null;
181
250
  const payload = asRecord(record.payload);
@@ -185,13 +254,15 @@ function bashValidationCall(entry) {
185
254
  const args = asRecord(payload.args ?? payload.arguments ?? payload.input);
186
255
  const command = typeof args?.command === "string" ? args.command : null;
187
256
  if (command === null) return null;
188
- const detected = detectValidationCommand(command);
257
+ const detected = acceptanceValidationCommand(command, acceptanceChecks);
189
258
  if (detected.kind !== "validation") return null;
190
259
  const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
191
260
  if (toolCallId === null) return null;
192
261
  const candidate = {
193
262
  toolCallId,
194
- command: detected.matched
263
+ command: detected.matched,
264
+ ...validationCheckFields(detected.matched),
265
+ execution: packageCommandExecution(command, args?.cwd, workspaceRoot)
195
266
  };
196
267
  const turnId = turnIdOf(entry);
197
268
  if (turnId !== null) candidate.turnId = turnId;
@@ -245,7 +316,8 @@ function validationToolCall(entry) {
245
316
  if (toolCallId === null) return null;
246
317
  const candidate = {
247
318
  toolCallId,
248
- command: summary
319
+ command: summary,
320
+ ...validationCheckFields(summary)
249
321
  };
250
322
  const turnId = turnIdOf(entry);
251
323
  if (turnId !== null) candidate.turnId = turnId;
@@ -273,7 +345,8 @@ function successfulToolResultId(entry) {
273
345
  if (payload.isError === true || payload.error === true) return null;
274
346
  const result = asRecord(payload.result);
275
347
  const details = asRecord(result?.details);
276
- if (details?.kind === "error") return null;
348
+ if (result?.kind === "error" || details?.kind === "error") return null;
349
+ if (typeof details?.exitCode === "number" && details.exitCode !== 0) return null;
277
350
  return stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]);
278
351
  }
279
352
  function dispatchReceiptEvidence(entry, candidate) {
@@ -318,18 +391,20 @@ function dispatchReceiptAgentId(receiptAgentId, candidate) {
318
391
  if (receiptAgentId !== void 0 && receiptAgentId.length > 0) return receiptAgentId;
319
392
  return candidate?.command.match(/^agent=([^\s]+)/)?.[1] ?? "unknown";
320
393
  }
321
- function bashExecutionEvidence(entry) {
394
+ function bashExecutionEvidence(entry, acceptanceChecks, workspaceRoot) {
322
395
  const record = asRecord(entry);
323
396
  if (record?.kind !== "bashExecution") return null;
324
397
  if (typeof record.command !== "string") return null;
325
398
  if (record.cancelled === true) return null;
326
399
  if (record.exitCode !== 0) return null;
327
- const detected = detectValidationCommand(record.command);
400
+ const detected = acceptanceValidationCommand(record.command, acceptanceChecks);
328
401
  if (detected.kind !== "validation") return null;
329
402
  const contextMarker = record.excludeFromContext === true ? " [not sent to model]" : "";
330
403
  const evidence = {
331
404
  kind: "validation_command",
332
- summary: `validation command passed: ${detected.matched}${contextMarker}`
405
+ summary: `validation command passed: ${detected.matched}${contextMarker}`,
406
+ ...validationCheckFields(detected.matched),
407
+ ...packageCommandExecution(record.command, record.cwd, workspaceRoot)
333
408
  };
334
409
  const turnId = turnIdOf(entry);
335
410
  if (turnId !== null) evidence.turnId = turnId;
@@ -349,16 +424,46 @@ function protectedArtifactEvidence(entry) {
349
424
  if (turnId !== null) evidence.turnId = turnId;
350
425
  return evidence;
351
426
  }
352
- function validationEvidence(candidate) {
427
+ function validationEvidence(candidate, entry) {
353
428
  const evidence = {
354
429
  kind: "validation_command",
355
- summary: `validation command passed: ${candidate.command}`
430
+ summary: `validation command passed: ${candidate.command}`,
431
+ ...candidate.check ? { check: candidate.check } : {},
432
+ ...candidate.execution ?? declaredCheckExecution(entry, candidate.check)
356
433
  };
357
434
  if (candidate.turnId !== void 0) evidence.turnId = candidate.turnId;
358
435
  return evidence;
359
436
  }
437
+ function declaredCheckExecution(entry, check) {
438
+ const payload = asRecord(asRecord(entry)?.payload);
439
+ const details = asRecord(asRecord(payload?.result)?.details);
440
+ const source = asRecord(details?.source);
441
+ if (!details || details.check !== check || details.exitCode !== 0 || details.aborted === true || details.timedOut === true || details.outputCapped === true || source?.kind !== "package.json" && source?.kind !== "project-catalog" || typeof source.path !== "string" || typeof details.cwd !== "string" || !Array.isArray(details.argv) || !details.argv.every((arg) => typeof arg === "string"))
442
+ return {};
443
+ if (source.kind === "project-catalog") {
444
+ const argv = details.argv;
445
+ if (!Array.isArray(details.declaredCommand) || details.declaredCommand.length !== details.argv.length || !details.declaredCommand.every((arg, index) => arg === argv[index]) || typeof details.declaredCwd !== "string" || typeof details.declaredTimeoutMs !== "number" || typeof details.durationMs !== "number" || details.durationMs > details.declaredTimeoutMs || resolve(source.path, "../..", details.declaredCwd) !== details.cwd)
446
+ return {};
447
+ }
448
+ return {
449
+ source: { kind: source.kind, path: source.path },
450
+ cwd: details.cwd,
451
+ argv: details.argv,
452
+ ...typeof details.durationMs === "number" ? { durationMs: details.durationMs } : {}
453
+ };
454
+ }
455
+ function packageCommandExecution(command, cwd, workspaceRoot) {
456
+ if (!workspaceRoot || !/^(?:npm|pnpm|yarn|bun) /u.test(command.trim()) || validationCheckId(command.trim()) === void 0)
457
+ return {};
458
+ const executionCwd = resolve(workspaceRoot, typeof cwd === "string" ? cwd : ".");
459
+ return {
460
+ source: { kind: "package.json", path: resolve(executionCwd, "package.json") },
461
+ cwd: executionCwd,
462
+ argv: command.trim().split(/\s+/u)
463
+ };
464
+ }
360
465
  function pushEvidence(evidence, seen, item) {
361
- const key = `${item.kind}\0${item.summary}\0${item.turnId ?? ""}`;
466
+ const key = JSON.stringify(item);
362
467
  if (seen.has(key)) return;
363
468
  seen.add(key);
364
469
  evidence.push(item);
@@ -383,6 +488,19 @@ function stringFromFirst(record, keys) {
383
488
  function asRecord(value) {
384
489
  return value !== null && typeof value === "object" ? value : null;
385
490
  }
491
+ function validationCheckId(command) {
492
+ return /^(?:npm|pnpm|yarn|bun) (?:run )?([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1] ?? /^verify ([a-z0-9][a-z0-9._:-]*)$/.exec(command)?.[1];
493
+ }
494
+ function validationCheckFields(command) {
495
+ const check = validationCheckId(command);
496
+ return check ? { check } : {};
497
+ }
498
+ function acceptanceValidationCommand(command, checks) {
499
+ const exact = command.trim();
500
+ const check = /^npm run ([a-z0-9][a-z0-9._:-]*)$/.exec(exact)?.[1];
501
+ if (check && checks.has(check)) return { kind: "validation", matched: exact };
502
+ return detectValidationCommand(command);
503
+ }
386
504
 
387
505
  // src/domains/safety/loop-detector.ts
388
506
  init_esm_shims();
@@ -487,6 +605,7 @@ export {
487
605
  observe,
488
606
  DEFAULT_RECENT_ENTRY_LIMIT,
489
607
  assessFinishContract,
608
+ recentEntries,
490
609
  typedValidationSummary
491
610
  };
492
- //# sourceMappingURL=chunk-RSJ25QSL.js.map
611
+ //# sourceMappingURL=chunk-6QOTUPRG.js.map
@@ -7,11 +7,11 @@ import {
7
7
  } from "./chunk-HVDIIIQW.js";
8
8
  import {
9
9
  protectArtifact
10
- } from "./chunk-I7ZPNEJM.js";
10
+ } from "./chunk-NXYCB2VD.js";
11
11
  import {
12
12
  isSessionEntry,
13
13
  isSessionHeader
14
- } from "./chunk-JGRC33J2.js";
14
+ } from "./chunk-54X7T7DK.js";
15
15
  import {
16
16
  stripTokenizerSentinels
17
17
  } from "./chunk-CFGTUFWB.js";
@@ -1400,7 +1400,13 @@ async function readSessionEntriesForId(stateDir, sessionId) {
1400
1400
  return { entries: [], missing: false, errors: [`${currentPath}: ${err.message ?? String(err)}`] };
1401
1401
  }
1402
1402
  }
1403
- return parseSessionEntries(raw, source);
1403
+ const result = parseSessionEntries(raw, source);
1404
+ try {
1405
+ const meta = JSON.parse(await readFile(join3(root, cwdHash2, sessionId, "meta.json"), "utf8"));
1406
+ if (isRecord(meta) && typeof meta.pinnedLeafTurnId === "string") result.leafTurnId = meta.pinnedLeafTurnId;
1407
+ } catch {
1408
+ }
1409
+ return result;
1404
1410
  }
1405
1411
  return { entries: [], missing: true, errors: [] };
1406
1412
  }
@@ -1481,4 +1487,4 @@ export {
1481
1487
  ledgerUsageCalls,
1482
1488
  SessionDomainModule
1483
1489
  };
1484
- //# sourceMappingURL=chunk-JKKCYP3C.js.map
1490
+ //# sourceMappingURL=chunk-6UINWWS6.js.map
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-F4EKGO4N.js";
24
24
  import {
25
25
  setGitCommitAttributionEnabled
26
- } from "./chunk-JIEGK6UF.js";
26
+ } from "./chunk-U6TMQNSI.js";
27
27
  import {
28
28
  init_esm_shims
29
29
  } from "./chunk-3R73A4XB.js";
@@ -377,4 +377,4 @@ export {
377
377
  ConfigDomainModule,
378
378
  createConfigDomainModule
379
379
  };
380
- //# sourceMappingURL=chunk-WBKFA554.js.map
380
+ //# sourceMappingURL=chunk-72YIHOZQ.js.map