@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,14 +5,16 @@ import {
5
5
  } from "./chunk-BMS5RKQY.js";
6
6
  import {
7
7
  webFetchToolSurface
8
- } from "./chunk-MCEPRMZW.js";
8
+ } from "./chunk-2CU2H6KE.js";
9
9
  import {
10
- gitTool,
11
10
  verifyToolSurface
12
- } from "./chunk-ZDN3Y73Y.js";
11
+ } from "./chunk-GX5WYQO4.js";
13
12
  import {
14
13
  codeNavToolSurface
15
- } from "./chunk-64I3JVYM.js";
14
+ } from "./chunk-RXTN6AKH.js";
15
+ import {
16
+ contextToolSurface
17
+ } from "./chunk-3UNOLWNZ.js";
16
18
  import {
17
19
  compileGlobRegex,
18
20
  fallbackIgnoredDirs,
@@ -20,9 +22,6 @@ import {
20
22
  normalizeGlobInput,
21
23
  rgIgnoreArgs
22
24
  } from "./chunk-VG7TBQIY.js";
23
- import {
24
- contextToolSurface
25
- } from "./chunk-IUE3Y34X.js";
26
25
  import {
27
26
  RESPONSE_SCHEMA_RUNTIME_ID,
28
27
  bashTool,
@@ -32,39 +31,25 @@ import {
32
31
  readMaxBytes,
33
32
  readTool,
34
33
  renderAgentLedger
35
- } from "./chunk-PAJQJ7BS.js";
34
+ } from "./chunk-75W7L2E2.js";
35
+ import {
36
+ hashToolCall
37
+ } from "./chunk-6QOTUPRG.js";
36
38
  import {
37
39
  createTaskBoardStore,
38
40
  taskBoardCounts
39
- } from "./chunk-L47TF46W.js";
40
- import {
41
- hashToolCall
42
- } from "./chunk-RSJ25QSL.js";
41
+ } from "./chunk-6PAZTBPA.js";
43
42
  import {
44
43
  formatModelRejection
45
- } from "./chunk-XIVNBFZS.js";
44
+ } from "./chunk-6Q3CYFD3.js";
46
45
  import {
47
46
  describeCallAction
48
47
  } from "./chunk-NEDJ26B5.js";
49
- import {
50
- applyToolProfile
51
- } from "./chunk-42FMPA75.js";
52
48
  import {
53
49
  resolveReadPath,
54
50
  resolveToCwd,
55
51
  toPosixPath
56
52
  } from "./chunk-OQE5J4C6.js";
57
- import {
58
- classify
59
- } from "./chunk-B4OAX3SI.js";
60
- import {
61
- protectArtifact,
62
- protectedArtifactMutationBlockReason
63
- } from "./chunk-I7ZPNEJM.js";
64
- import {
65
- CLIO_ARTIFACT_DIR,
66
- artifactDefaultPath
67
- } from "./chunk-GYV6VZOC.js";
68
53
  import {
69
54
  OBSERVATION_POLICY_SLACK_BYTES,
70
55
  OBSERVE_SELF_CAPS,
@@ -76,14 +61,28 @@ import {
76
61
  reserveObservation,
77
62
  toolResultContextText,
78
63
  truncateHead
79
- } from "./chunk-JDAY6FIL.js";
64
+ } from "./chunk-NAI6ZFCY.js";
80
65
  import {
81
66
  GREP_MAX_LINE_LENGTH,
82
67
  truncateLine
83
68
  } from "./chunk-OZNBF4L3.js";
84
69
  import {
85
- truncateUtf8
86
- } from "./chunk-6XLNIQDB.js";
70
+ applyToolProfile
71
+ } from "./chunk-QZWQA4DE.js";
72
+ import {
73
+ classify
74
+ } from "./chunk-KFV5L5SK.js";
75
+ import {
76
+ protectArtifact,
77
+ protectedArtifactMutationBlockReason
78
+ } from "./chunk-NXYCB2VD.js";
79
+ import {
80
+ gitTool
81
+ } from "./chunk-BJVFZO5U.js";
82
+ import {
83
+ CLIO_ARTIFACT_DIR,
84
+ artifactDefaultPath
85
+ } from "./chunk-GYV6VZOC.js";
87
86
  import {
88
87
  typebox_exports
89
88
  } from "./chunk-5B2AEOW5.js";
@@ -91,21 +90,26 @@ import {
91
90
  parseAgentLedgerBody
92
91
  } from "./chunk-VAVR4IJY.js";
93
92
  import {
93
+ decisionRef,
94
94
  skillActivationFromToolDetails
95
- } from "./chunk-JGRC33J2.js";
95
+ } from "./chunk-54X7T7DK.js";
96
+ import {
97
+ byteLength,
98
+ truncateUtf8
99
+ } from "./chunk-6XLNIQDB.js";
96
100
  import {
97
101
  ToolNames,
98
102
  isBuiltinToolName
99
- } from "./chunk-K6BSR66V.js";
103
+ } from "./chunk-4NSRCOYP.js";
104
+ import {
105
+ assertSafeId
106
+ } from "./chunk-R346GLFC.js";
100
107
  import {
101
108
  BusChannels
102
109
  } from "./chunk-F4EKGO4N.js";
103
110
  import {
104
111
  incompleteInstallationAdvice
105
112
  } from "./chunk-65DEGPJ6.js";
106
- import {
107
- buildSafeToolEnv
108
- } from "./chunk-JSC3U7TI.js";
109
113
  import {
110
114
  GUARDRAIL_DEFAULTS,
111
115
  resolveGuardrail,
@@ -114,10 +118,17 @@ import {
114
118
  workerToolCallCapExceededReason,
115
119
  workerToolCallCapSynthesisReason
116
120
  } from "./chunk-S66XZJOF.js";
121
+ import {
122
+ buildSafeToolEnv
123
+ } from "./chunk-TOIVGRUX.js";
117
124
  import {
118
125
  StringEnum,
119
126
  engineStreamSimple
120
127
  } from "./chunk-YPC6ZR5L.js";
128
+ import {
129
+ clioDataDir,
130
+ clioStateDir
131
+ } from "./chunk-BYP5D4HI.js";
121
132
  import {
122
133
  init_esm_shims
123
134
  } from "./chunk-3R73A4XB.js";
@@ -1486,6 +1497,115 @@ var credentialPresentTool = {
1486
1497
  }
1487
1498
  };
1488
1499
 
1500
+ // src/tools/decide.ts
1501
+ init_esm_shims();
1502
+ var DECIDE_CAPS = Object.freeze({
1503
+ keyBytes: 64,
1504
+ valueBytes: 512,
1505
+ alternatives: 6,
1506
+ alternativeBytes: 256,
1507
+ rationaleBytes: 1024,
1508
+ labelBytes: 128
1509
+ });
1510
+ var KEBAB_KEY = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
1511
+ function boundedText(value, field, cap) {
1512
+ if (typeof value !== "string") return new Error(`decide: ${field} must be a string`);
1513
+ const trimmed = value.trim();
1514
+ if (trimmed.length === 0) return new Error(`decide: ${field} is required`);
1515
+ if (byteLength(trimmed) > cap) return new Error(`decide: ${field} exceeds the ${cap}-byte cap`);
1516
+ return trimmed;
1517
+ }
1518
+ function boundedAlternatives(value) {
1519
+ if (!Array.isArray(value) || value.length === 0) {
1520
+ return new Error("decide: alternatives must list at least one option you rejected");
1521
+ }
1522
+ if (value.length > DECIDE_CAPS.alternatives) {
1523
+ return new Error(`decide: alternatives exceeds the ${DECIDE_CAPS.alternatives}-entry cap`);
1524
+ }
1525
+ const alternatives = [];
1526
+ for (const [index, entry] of value.entries()) {
1527
+ const text = boundedText(entry, `alternatives[${index}]`, DECIDE_CAPS.alternativeBytes);
1528
+ if (text instanceof Error) return text;
1529
+ alternatives.push(text);
1530
+ }
1531
+ return alternatives;
1532
+ }
1533
+ function createDecideTool(deps = {}) {
1534
+ return {
1535
+ name: ToolNames.Decide,
1536
+ description: "Record a design decision you made between two or more viable options, with the alternatives you rejected and why. Call it before implementing the choice; a later call with the same key supersedes the earlier record.",
1537
+ parameters: typebox_exports.Object({
1538
+ key: typebox_exports.String({
1539
+ description: `Stable kebab-case name for the decision, e.g. "cache-key-shape" (at most ${DECIDE_CAPS.keyBytes} bytes).`
1540
+ }),
1541
+ value: typebox_exports.String({ description: `The option you chose (at most ${DECIDE_CAPS.valueBytes} bytes).` }),
1542
+ alternatives: typebox_exports.Array(typebox_exports.String(), {
1543
+ description: `Options you considered and rejected, 1 to ${DECIDE_CAPS.alternatives} entries.`
1544
+ }),
1545
+ rationale: typebox_exports.String({
1546
+ description: `Why the chosen option won over the alternatives (at most ${DECIDE_CAPS.rationaleBytes} bytes).`
1547
+ }),
1548
+ label: typebox_exports.Optional(typebox_exports.String({ description: "Short human-readable title for the decision." }))
1549
+ }),
1550
+ // Read class on purpose: the only effect is one session-ledger append,
1551
+ // so it must stay available at every autonomy level without a prompt.
1552
+ baseActionClass: "read",
1553
+ executionMode: "sequential",
1554
+ async run(args) {
1555
+ const key = boundedText(args.key, "key", DECIDE_CAPS.keyBytes);
1556
+ if (key instanceof Error) return { kind: "error", message: key.message };
1557
+ if (!KEBAB_KEY.test(key)) {
1558
+ return { kind: "error", message: "decide: key must be kebab-case (lowercase letters, digits, single hyphens)" };
1559
+ }
1560
+ const value = boundedText(args.value, "value", DECIDE_CAPS.valueBytes);
1561
+ if (value instanceof Error) return { kind: "error", message: value.message };
1562
+ const alternatives = boundedAlternatives(args.alternatives);
1563
+ if (alternatives instanceof Error) return { kind: "error", message: alternatives.message };
1564
+ const rationale = boundedText(args.rationale, "rationale", DECIDE_CAPS.rationaleBytes);
1565
+ if (rationale instanceof Error) return { kind: "error", message: rationale.message };
1566
+ let label;
1567
+ if (args.label !== void 0 && args.label !== null) {
1568
+ const bounded = boundedText(args.label, "label", DECIDE_CAPS.labelBytes);
1569
+ if (bounded instanceof Error) return { kind: "error", message: bounded.message };
1570
+ label = bounded;
1571
+ }
1572
+ if (deps.decisionBoard === void 0) {
1573
+ return { kind: "error", message: "decide: no session decision board is available in this context" };
1574
+ }
1575
+ let outcome;
1576
+ try {
1577
+ outcome = deps.decisionBoard.recordAgentDecision({
1578
+ key,
1579
+ value,
1580
+ alternatives,
1581
+ rationale,
1582
+ ...label !== void 0 ? { label } : {}
1583
+ });
1584
+ } catch (error) {
1585
+ return { kind: "error", message: error instanceof Error ? error.message : String(error) };
1586
+ }
1587
+ const ref = decisionRef(outcome.entry.interviewId, key);
1588
+ const supersededNote = outcome.superseded === null ? "" : ` (supersedes ${decisionRef(outcome.superseded.interviewId, outcome.superseded.key)})`;
1589
+ return {
1590
+ kind: "ok",
1591
+ output: `decision recorded: ${key} = ${value} [${ref}]${supersededNote}
1592
+ `,
1593
+ details: {
1594
+ decision: {
1595
+ ref,
1596
+ key,
1597
+ value,
1598
+ alternatives,
1599
+ rationale,
1600
+ ...label !== void 0 ? { label } : {},
1601
+ ...outcome.superseded !== null ? { superseded: decisionRef(outcome.superseded.interviewId, outcome.superseded.key) } : {}
1602
+ }
1603
+ }
1604
+ };
1605
+ }
1606
+ };
1607
+ }
1608
+
1489
1609
  // src/tools/edit.ts
1490
1610
  init_esm_shims();
1491
1611
  import { readFileSync, writeFileSync as writeFileSync2 } from "node:fs";
@@ -2515,6 +2635,88 @@ var editTool = {
2515
2635
  }
2516
2636
  };
2517
2637
 
2638
+ // src/tools/evidence.ts
2639
+ init_esm_shims();
2640
+ var EVIDENCE_TOOL_MAX_BYTES = 16384;
2641
+ function boundedResult(value) {
2642
+ const serialized = JSON.stringify(value, null, 2);
2643
+ if (Buffer.byteLength(serialized, "utf8") <= EVIDENCE_TOOL_MAX_BYTES) {
2644
+ return { kind: "ok", output: serialized, details: { truncated: false } };
2645
+ }
2646
+ const hint = "Inspect one run to narrow the output; this preview is incomplete JSON text.";
2647
+ let preview = truncateUtf8(serialized, EVIDENCE_TOOL_MAX_BYTES, "");
2648
+ let output = JSON.stringify({ truncated: true, hint, preview });
2649
+ while (Buffer.byteLength(output, "utf8") > EVIDENCE_TOOL_MAX_BYTES) {
2650
+ const excess = Buffer.byteLength(output, "utf8") - EVIDENCE_TOOL_MAX_BYTES;
2651
+ preview = truncateUtf8(preview, Math.max(0, Buffer.byteLength(preview, "utf8") - excess), "");
2652
+ output = JSON.stringify({ truncated: true, hint, preview });
2653
+ }
2654
+ return { kind: "ok", output, details: { truncated: true } };
2655
+ }
2656
+ var evidenceTool = {
2657
+ name: ToolNames.Evidence,
2658
+ description: "Read canonical evidence as JSON. List recent bundles, inspect a bundle's overview, trust axes and tier, gate decisions, and findings, or build/read evidence for a run.",
2659
+ parameters: typebox_exports.Object({
2660
+ mode: StringEnum(["list", "inspect", "run"]),
2661
+ id: typebox_exports.Optional(typebox_exports.String({ description: "Evidence bundle id for inspect." })),
2662
+ runId: typebox_exports.Optional(typebox_exports.String({ description: "Run id for run." }))
2663
+ }),
2664
+ baseActionClass: "read",
2665
+ // Run mode may materialize a derived bundle in Clio's data directory.
2666
+ executionMode: "sequential",
2667
+ async run(args) {
2668
+ const mode = args.mode;
2669
+ if (mode !== "list" && mode !== "inspect" && mode !== "run") {
2670
+ return { kind: "error", message: "evidence: mode must be list, inspect, or run" };
2671
+ }
2672
+ try {
2673
+ const dataDir = clioDataDir();
2674
+ if (mode === "list") {
2675
+ const { evidenceInventorySnapshot } = await import("./inventory-C26CFDRR.js");
2676
+ return boundedResult(await evidenceInventorySnapshot(Date.now, dataDir));
2677
+ }
2678
+ const id = mode === "inspect" ? args.id : args.runId;
2679
+ if (typeof id !== "string" || id.length === 0) {
2680
+ return { kind: "error", message: `evidence: ${mode} requires ${mode === "inspect" ? "id" : "runId"}` };
2681
+ }
2682
+ assertSafeId(id, mode === "inspect" ? "evidence" : "run");
2683
+ const { buildEvidence, EvidenceNotFoundError, inspectEvidence, loadEvidenceGateDecisions } = await import("./evidence-4F5USFKH.js");
2684
+ const { evidenceDetailSnapshot } = await import("./detail-A7JAVSIG.js");
2685
+ let evidenceId = mode === "run" ? `run-${id}` : id;
2686
+ let inspected;
2687
+ try {
2688
+ inspected = await inspectEvidence(dataDir, evidenceId);
2689
+ } catch (error) {
2690
+ if (mode !== "run" || !(error instanceof EvidenceNotFoundError)) throw error;
2691
+ try {
2692
+ evidenceId = (await buildEvidence({ dataDir, stateDir: clioStateDir(), runId: id })).evidenceId;
2693
+ } catch (buildError) {
2694
+ if (buildError instanceof Error && (buildError.message === "run ledger not found" || buildError.message === `run not found: ${id}`))
2695
+ throw new EvidenceNotFoundError(evidenceId);
2696
+ throw buildError;
2697
+ }
2698
+ inspected = await inspectEvidence(dataDir, evidenceId);
2699
+ }
2700
+ return boundedResult({
2701
+ ...inspected,
2702
+ ...await evidenceDetailSnapshot(evidenceId, Date.now, dataDir),
2703
+ gateDecisions: await loadEvidenceGateDecisions(dataDir, evidenceId)
2704
+ });
2705
+ } catch (error) {
2706
+ const absent = error instanceof Error && error.name === "EvidenceNotFoundError";
2707
+ return {
2708
+ kind: "error",
2709
+ message: truncateUtf8(
2710
+ `evidence: ${error instanceof Error ? error.message : String(error)}`,
2711
+ EVIDENCE_TOOL_MAX_BYTES - 3,
2712
+ "..."
2713
+ ),
2714
+ details: { code: absent ? "artifact_absent" : "evidence_error", artifactAbsent: absent }
2715
+ };
2716
+ }
2717
+ }
2718
+ };
2719
+
2518
2720
  // src/tools/find.ts
2519
2721
  init_esm_shims();
2520
2722
  import { existsSync, statSync } from "node:fs";
@@ -3370,6 +3572,59 @@ ${output}`,
3370
3572
  };
3371
3573
  }
3372
3574
 
3575
+ // src/tools/limitation.ts
3576
+ init_esm_shims();
3577
+ var LIMITATION_REASONS = ["no-runner", "blocked", "out-of-scope", "environment", "other"];
3578
+ function isLimitationReason(value) {
3579
+ return typeof value === "string" && LIMITATION_REASONS.includes(value);
3580
+ }
3581
+ function trimString2(value) {
3582
+ if (typeof value !== "string") return null;
3583
+ const trimmed = value.trim();
3584
+ return trimmed.length > 0 ? trimmed : null;
3585
+ }
3586
+ function normalizePaths(value) {
3587
+ if (value === void 0 || value === null) return [];
3588
+ if (!Array.isArray(value)) return null;
3589
+ const paths = [];
3590
+ for (const item of value) {
3591
+ const path4 = trimString2(item);
3592
+ if (path4 === null) return null;
3593
+ if (!paths.includes(path4)) paths.push(path4);
3594
+ }
3595
+ return paths;
3596
+ }
3597
+ var limitationTool = {
3598
+ name: ToolNames.Limitation,
3599
+ description: "Record what this turn could not verify and why. Call it once, before your final reply, when you changed files but could not run validation; the receipt stands in for validation evidence at the finish gate.",
3600
+ parameters: typebox_exports.Object({
3601
+ scope: typebox_exports.String({ description: "What could not be verified, in one sentence." }),
3602
+ reason: StringEnum(LIMITATION_REASONS, {
3603
+ description: "no-runner: no test or build runner is available; blocked: a safety gate or denial stopped the check; out-of-scope: verification was excluded by the task; environment: the environment cannot run the check; other."
3604
+ }),
3605
+ paths: typebox_exports.Optional(typebox_exports.Array(typebox_exports.String(), { description: "Repository-relative paths left unverified." }))
3606
+ }),
3607
+ baseActionClass: "read",
3608
+ executionMode: "parallel",
3609
+ async run(args) {
3610
+ const scope = trimString2(args.scope);
3611
+ if (scope === null) return { kind: "error", message: "limitation: scope is required" };
3612
+ if (!isLimitationReason(args.reason)) {
3613
+ return { kind: "error", message: `limitation: reason must be one of ${LIMITATION_REASONS.join(", ")}` };
3614
+ }
3615
+ const paths = normalizePaths(args.paths);
3616
+ if (paths === null) return { kind: "error", message: "limitation: paths must be an array of non-empty strings" };
3617
+ const limitation = { scope, reason: args.reason, paths };
3618
+ const pathSuffix = paths.length > 0 ? ` paths=${paths.join(",")}` : "";
3619
+ return {
3620
+ kind: "ok",
3621
+ output: `limitation recorded: ${scope} (reason=${limitation.reason}${pathSuffix})
3622
+ `,
3623
+ details: { limitation }
3624
+ };
3625
+ }
3626
+ };
3627
+
3373
3628
  // src/tools/ls.ts
3374
3629
  init_esm_shims();
3375
3630
  import { readdirSync as readdirSync2, statSync as statSync3 } from "node:fs";
@@ -3467,6 +3722,7 @@ var lsTool = {
3467
3722
  // src/tools/policy.ts
3468
3723
  init_esm_shims();
3469
3724
  var TOOL_PLANES = {
3725
+ [ToolNames.Evidence]: { plane: "observe", actionClass: "read", executionMode: "sequential" },
3470
3726
  [ToolNames.Read]: { plane: "observe", actionClass: "read", executionMode: "parallel" },
3471
3727
  [ToolNames.Grep]: { plane: "observe", actionClass: "read", executionMode: "parallel" },
3472
3728
  [ToolNames.Find]: { plane: "observe", actionClass: "read", executionMode: "parallel" },
@@ -3499,6 +3755,14 @@ var TOOL_PLANES = {
3499
3755
  // panes. It mutates no workspace, so it stays read class; sequential because
3500
3756
  // two pane operations in one batch would race the same pane registry.
3501
3757
  [ToolNames.Panes]: { plane: "orchestrate", actionClass: "read", executionMode: "sequential" },
3758
+ // limitation records a typed receipt in the session ledger and nothing
3759
+ // else: no filesystem, no shell. Read class so it never trips a safety
3760
+ // gate; parallel because the call is pure and idempotent.
3761
+ [ToolNames.Limitation]: { plane: "orchestrate", actionClass: "read", executionMode: "parallel" },
3762
+ // decide appends one decision-board entry to the session ledger and
3763
+ // nothing else. Read class so it never trips a safety gate; sequential so
3764
+ // two decisions in one batch never race the supersede lookup.
3765
+ [ToolNames.Decide]: { plane: "orchestrate", actionClass: "read", executionMode: "sequential" },
3502
3766
  [ToolNames.WebFetch]: { plane: "retrieve", actionClass: "read", executionMode: "parallel" },
3503
3767
  [ToolNames.AskUser]: { plane: "interact", actionClass: "read", executionMode: "sequential" },
3504
3768
  [ToolNames.Artifact]: { plane: "artifact", actionClass: "write", executionMode: "sequential" }
@@ -3605,6 +3869,10 @@ function renderTaskBoardText(board, userTasks = []) {
3605
3869
  if (task.status === "blocked" && task.reason) line += ` \u2014 blocked: ${task.reason}`;
3606
3870
  if (task.status === "cancelled" && task.reason) line += ` \u2014 dropped: ${task.reason}`;
3607
3871
  lines.push(line);
3872
+ const outputs = userTasks.find((item) => item.id === task.userTaskId)?.acceptance?.expectedOutputs;
3873
+ if (outputs?.length) lines.push(` expected outputs: ${outputs.join(", ")}`);
3874
+ for (const item of task.requiredValidationEvidence ?? [])
3875
+ lines.push(` acceptance: ${item.command} (${item.status}; ${item.notes})`);
3608
3876
  }
3609
3877
  if (counts.open > 0 && counts.active === 0) {
3610
3878
  lines.push(`next: start a task with action="start" before working it`);
@@ -3738,7 +4006,12 @@ function createTasksTool(deps) {
3738
4006
  if (userTask.status !== "open" && userTask.status !== "handed") {
3739
4007
  return { kind: "error", message: `tasks: operator task ${id} is ${userTask.status}; it cannot be picked` };
3740
4008
  }
3741
- const result2 = deps.board.apply({ op: "pick", title: userTask.title, userTaskId: userTask.id });
4009
+ const result2 = deps.board.apply({
4010
+ op: "pick",
4011
+ title: userTask.title,
4012
+ userTaskId: userTask.id,
4013
+ ...userTask.acceptance ? { verification: userTask.acceptance.verification } : {}
4014
+ });
3742
4015
  if (!result2.ok) return { kind: "error", message: `tasks: ${result2.message}` };
3743
4016
  const picked = result2.board.tasks.find((task) => task.userTaskId === userTask.id && task.status === "pending");
3744
4017
  if (!picked) return { kind: "error", message: `tasks: durable pickup for ${id} did not produce a board row` };
@@ -3840,6 +4113,7 @@ note: ${pathArg} no longer ends with a newline; the previous content did`;
3840
4113
  // src/tools/core-bootstrap.ts
3841
4114
  function registerCoreTools(registry, deps = {}) {
3842
4115
  const includeNetworkTools = !networkToolsDisabled();
4116
+ registry.register(builtin(evidenceTool, { path: "src/tools/evidence.ts", scope: "core" }));
3843
4117
  registry.register({
3844
4118
  ...builtin(readTool, { path: "src/tools/read.ts", scope: "core" })
3845
4119
  });
@@ -3864,7 +4138,7 @@ function registerCoreTools(registry, deps = {}) {
3864
4138
  if (includeNetworkTools) {
3865
4139
  registry.register({
3866
4140
  ...builtin(
3867
- lazyTool(webFetchToolSurface, async () => (await import("./web-fetch-MPARV2K7.js")).webFetchTool),
4141
+ lazyTool(webFetchToolSurface, async () => (await import("./web-fetch-V4FKSDAV.js")).webFetchTool),
3868
4142
  { path: "src/tools/web-fetch.ts", scope: "core" }
3869
4143
  )
3870
4144
  });
@@ -3874,13 +4148,13 @@ function registerCoreTools(registry, deps = {}) {
3874
4148
  });
3875
4149
  registry.register({
3876
4150
  ...builtin(
3877
- lazyTool(verifyToolSurface, async () => (await import("./verify-RWE4PPEK.js")).verifyTool),
4151
+ lazyTool(verifyToolSurface, async () => (await import("./verify-FWYGPKMR.js")).verifyTool),
3878
4152
  { path: "src/tools/verify/index.ts", scope: "core" }
3879
4153
  )
3880
4154
  });
3881
4155
  registry.register({
3882
4156
  ...builtin(
3883
- lazyTool(codeNavToolSurface, async () => (await import("./code-nav-MDZNQS33.js")).codeNavTool),
4157
+ lazyTool(codeNavToolSurface, async () => (await import("./code-nav-IJR2DBPR.js")).codeNavTool),
3884
4158
  { path: "src/tools/codewiki/code-nav.ts", scope: "core" }
3885
4159
  )
3886
4160
  });
@@ -3900,12 +4174,21 @@ function registerCoreTools(registry, deps = {}) {
3900
4174
  registry.register({
3901
4175
  ...builtin(credentialPresentTool, { path: "src/tools/credential-present.ts", scope: "core" })
3902
4176
  });
4177
+ registry.register({
4178
+ ...builtin(limitationTool, { path: "src/tools/limitation.ts", scope: "core" })
4179
+ });
4180
+ registry.register({
4181
+ ...builtin(createDecideTool(deps.decisionBoard ? { decisionBoard: deps.decisionBoard } : {}), {
4182
+ path: "src/tools/decide.ts",
4183
+ scope: "core"
4184
+ })
4185
+ });
3903
4186
  const session = deps.session;
3904
4187
  const readSessionEntries = deps.readSessionEntries;
3905
4188
  registry.register({
3906
4189
  ...builtin(
3907
4190
  lazyTool(contextToolSurface, async () => {
3908
- const { createContextTool } = await import("./context-VNCR7KAG.js");
4191
+ const { createContextTool } = await import("./context-2DKHWH2T.js");
3909
4192
  if (!session) return createContextTool(skillToolDeps);
3910
4193
  const { probeWorkspace } = await import("./workspace-ZJ6BFM3Q.js");
3911
4194
  return createContextTool({
@@ -4003,4 +4286,4 @@ export {
4003
4286
  registerCoreTools,
4004
4287
  assertRegisteredBuiltinTools
4005
4288
  };
4006
- //# sourceMappingURL=chunk-GI7YYQ3F.js.map
4289
+ //# sourceMappingURL=chunk-36CT5VVL.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-5B2AEOW5.js";
8
8
  import {
9
9
  ToolNames
10
- } from "./chunk-K6BSR66V.js";
10
+ } from "./chunk-4NSRCOYP.js";
11
11
  import {
12
12
  StringEnum
13
13
  } from "./chunk-YPC6ZR5L.js";
@@ -36,4 +36,4 @@ var panesToolSurface = {
36
36
  export {
37
37
  panesToolSurface
38
38
  };
39
- //# sourceMappingURL=chunk-4UVU7BJ5.js.map
39
+ //# sourceMappingURL=chunk-3GY4F45V.js.map
@@ -1,10 +1,8 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- printError
4
- } from "./chunk-VPKWYKEY.js";
5
- import {
3
+ printError,
6
4
  source_default
7
- } from "./chunk-5TSRNF4G.js";
5
+ } from "./chunk-JCI2ROMZ.js";
8
6
  import {
9
7
  authStoragePath
10
8
  } from "./chunk-ID64D7PE.js";
@@ -35,4 +33,4 @@ export {
35
33
  printPlaintextCredentialWarning,
36
34
  credentialWriteFailed
37
35
  };
38
- //# sourceMappingURL=chunk-PUVDKJ2Y.js.map
36
+ //# sourceMappingURL=chunk-3ODX73FK.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-5B2AEOW5.js";
5
5
  import {
6
6
  ToolNames
7
- } from "./chunk-K6BSR66V.js";
7
+ } from "./chunk-4NSRCOYP.js";
8
8
  import {
9
9
  StringEnum
10
10
  } from "./chunk-YPC6ZR5L.js";
@@ -32,4 +32,4 @@ var contextToolSurface = {
32
32
  export {
33
33
  contextToolSurface
34
34
  };
35
- //# sourceMappingURL=chunk-IUE3Y34X.js.map
35
+ //# sourceMappingURL=chunk-3UNOLWNZ.js.map
@@ -1,7 +1,4 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- shellQuote
4
- } from "./chunk-TXOTCRLG.js";
5
2
  import {
6
3
  WORKER_BULK_FRAME_MAX_BYTES,
7
4
  WORKER_EVENT_QUEUE_MAX_FRAMES,
@@ -42,6 +39,12 @@ import { existsSync, readFileSync } from "node:fs";
42
39
  import { join as join2 } from "node:path";
43
40
  import { performance as performance2 } from "node:perf_hooks";
44
41
 
42
+ // src/core/shell-quote.ts
43
+ init_esm_shims();
44
+ function shellQuote(value) {
45
+ return `'${value.replace(/'/g, "'\\''")}'`;
46
+ }
47
+
45
48
  // src/domains/dispatch/route-facts.ts
46
49
  init_esm_shims();
47
50
  var ROUTE_FACT_FRESHNESS_MS = 15 * 60 * 1e3;
@@ -929,6 +932,7 @@ async function runFleetNodePreflight(node, projectRoot, options) {
929
932
  }
930
933
 
931
934
  export {
935
+ shellQuote,
932
936
  computeSettingsFingerprint,
933
937
  receiptAttestationFields,
934
938
  spawnNativeWorker,
@@ -940,4 +944,4 @@ export {
940
944
  routeFactVerdict,
941
945
  runFleetNodePreflight
942
946
  };
943
- //# sourceMappingURL=chunk-6PTFB5VS.js.map
947
+ //# sourceMappingURL=chunk-3UUXNFEX.js.map
@@ -7,14 +7,14 @@ import {
7
7
  import {
8
8
  openLedger,
9
9
  readFleetRun
10
- } from "./chunk-AF4YM7Z4.js";
10
+ } from "./chunk-NRO2BJRH.js";
11
11
  import {
12
12
  WRITE_BOUNDARY_VIOLATION_REASON
13
- } from "./chunk-B4VEBZKF.js";
13
+ } from "./chunk-QUFRYSWI.js";
14
14
  import {
15
15
  formatTrustSummaryLine,
16
16
  inspectRunReceiptTrustStatus
17
- } from "./chunk-IWT4SF4R.js";
17
+ } from "./chunk-CUSRQKPU.js";
18
18
  import {
19
19
  readRunEventJournal,
20
20
  runEventJournalPath
@@ -570,4 +570,4 @@ export {
570
570
  loadFleetRunViewModel,
571
571
  runFleetView
572
572
  };
573
- //# sourceMappingURL=chunk-2APPQIER.js.map
573
+ //# sourceMappingURL=chunk-4M6Z5QVF.js.map
@@ -8,6 +8,7 @@ init_esm_shims();
8
8
  var ToolNames = {
9
9
  // OBSERVE
10
10
  Read: "read",
11
+ Evidence: "evidence",
11
12
  Grep: "grep",
12
13
  Find: "find",
13
14
  Ls: "ls",
@@ -28,6 +29,8 @@ var ToolNames = {
28
29
  Tasks: "tasks",
29
30
  Ledger: "ledger",
30
31
  Panes: "panes",
32
+ Limitation: "limitation",
33
+ Decide: "decide",
31
34
  // RETRIEVE
32
35
  WebFetch: "web_fetch",
33
36
  // INTERACT
@@ -52,4 +55,4 @@ export {
52
55
  ToolNames,
53
56
  isBuiltinToolName
54
57
  };
55
- //# sourceMappingURL=chunk-K6BSR66V.js.map
58
+ //# sourceMappingURL=chunk-4NSRCOYP.js.map