@iowarp/clio-coder 0.4.0 → 0.4.2

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 (751) hide show
  1. package/CHANGELOG.md +131 -0
  2. package/CONTRIBUTING.md +59 -36
  3. package/README.md +407 -375
  4. package/SECURITY.md +2 -1
  5. package/dist/{acp-G5WJBNCT.js → acp-TMDQZDIG.js} +14 -14
  6. package/dist/{agents-FMV2Q5G4.js → agents-5N5NG3XG.js} +45 -34
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-3IDSJEIK.js → auth-Z5CCBXKQ.js} +22 -21
  9. package/dist/{builtins-XCZWXSC7.js → builtins-K6TNDT24.js} +6 -6
  10. package/dist/{chunk-GR5G2PVF.js → chunk-2HFQNRV3.js} +15 -10
  11. package/dist/{chunk-PQEFIJ36.js → chunk-2LEAKD4C.js} +1 -2
  12. package/dist/{chunk-HJJTYUHX.js → chunk-2NHR3NAY.js} +168 -1406
  13. package/dist/chunk-2X4RYJTJ.js +39 -0
  14. package/dist/{chunk-UXMFQ54G.js → chunk-2Z2IKEXI.js} +39 -43
  15. package/dist/{chunk-SST6Z5JA.js → chunk-336NSSKI.js} +1 -1
  16. package/dist/chunk-34BHNEE3.js +1846 -0
  17. package/dist/{chunk-YJX4SHTD.js → chunk-35MSIRKH.js} +9 -4
  18. package/dist/chunk-3EBYEESD.js +314 -0
  19. package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
  20. package/dist/chunk-3KIPBMUA.js +308 -0
  21. package/dist/chunk-3M6DQK6S.js +362 -0
  22. package/dist/{chunk-BPKCPIL7.js → chunk-462T4EGZ.js} +3 -3
  23. package/dist/{chunk-QLFS5GO2.js → chunk-4JDLP6ZS.js} +44 -37
  24. package/dist/{chunk-LDQ2ZF2M.js → chunk-4O6MANBS.js} +6 -6
  25. package/dist/{chunk-O6TL7WWY.js → chunk-54ODD65L.js} +6 -6
  26. package/dist/{chunk-JDG2WCRO.js → chunk-5KW52TEP.js} +5 -5
  27. package/dist/{chunk-NHLBIGRH.js → chunk-5PFYMY2V.js} +41 -18
  28. package/dist/{chunk-P3FOHJT4.js → chunk-72GZI5EV.js} +2 -2
  29. package/dist/chunk-77QIVUZB.js +1334 -0
  30. package/dist/{chunk-HWHKMHUA.js → chunk-7BHIY2MW.js} +9 -15
  31. package/dist/{chunk-FWDFM5ZU.js → chunk-AK5XEFVZ.js} +3 -3
  32. package/dist/{chunk-VAZSBTKF.js → chunk-AZ4WMN4W.js} +2 -2
  33. package/dist/{chunk-B7OBL7PK.js → chunk-B74PXLU7.js} +21 -11
  34. package/dist/{chunk-CY6FY24N.js → chunk-B7HM5Z7T.js} +15 -15
  35. package/dist/{chunk-ULC6OTWO.js → chunk-BO7Y52RY.js} +88 -27
  36. package/dist/chunk-BTK3SSSK.js +67 -0
  37. package/dist/{chunk-M6L6IDJG.js → chunk-BWH6N36D.js} +1 -1
  38. package/dist/{chunk-DQITNCXG.js → chunk-BYMNWQ7O.js} +149 -159
  39. package/dist/{chunk-HI63TFOG.js → chunk-CDNVLKUX.js} +3 -3
  40. package/dist/{chunk-Z4TXYIEG.js → chunk-CRFOIAX3.js} +10 -10
  41. package/dist/{chunk-UM7N4G5A.js → chunk-CWVRRIEI.js} +2 -2
  42. package/dist/{chunk-3BT2XMV4.js → chunk-CYZW7JHJ.js} +53 -60
  43. package/dist/{chunk-BKFM6EJV.js → chunk-D4CJV46V.js} +2 -2
  44. package/dist/chunk-D7E7WCDF.js +27 -0
  45. package/dist/{chunk-X3YGUTOB.js → chunk-DYHAXKHD.js} +90 -62
  46. package/dist/{chunk-QBJA7R7N.js → chunk-DZAW46HP.js} +3 -3
  47. package/dist/{chunk-MLKNTWH2.js → chunk-DZEK6CJN.js} +22 -22
  48. package/dist/{chunk-K5C3NCBD.js → chunk-E7GT7O5N.js} +5 -5
  49. package/dist/{chunk-FQ4SKYE4.js → chunk-EBY63B7G.js} +2 -5
  50. package/dist/chunk-F2I26BDK.js +66 -0
  51. package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
  52. package/dist/{chunk-RAPCMZL4.js → chunk-FSP7CMNU.js} +9 -1
  53. package/dist/{chunk-32KWKNSF.js → chunk-FVDGR2ZL.js} +4 -4
  54. package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
  55. package/dist/{chunk-SJ5ZKQ4S.js → chunk-HIICAHCJ.js} +2 -2
  56. package/dist/chunk-HJWWJ6IL.js +184 -0
  57. package/dist/{chunk-WZR7K7ZX.js → chunk-HKMD33FO.js} +32 -83
  58. package/dist/chunk-HLAFFSEK.js +360 -0
  59. package/dist/{chunk-VO67MWHC.js → chunk-HRQMFLJP.js} +3 -3
  60. package/dist/{chunk-KFZI4NIL.js → chunk-I64IFBLB.js} +152 -31
  61. package/dist/{chunk-BKFJHQCA.js → chunk-I66EAJFY.js} +2 -2
  62. package/dist/{chunk-BUMFYQFY.js → chunk-I66ZTYNP.js} +543 -267
  63. package/dist/{chunk-2OQE55CK.js → chunk-I7XBWTYH.js} +2 -2
  64. package/dist/{chunk-GKF55TAZ.js → chunk-IDNA72AH.js} +104 -3
  65. package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
  66. package/dist/{chunk-J4W7KFM7.js → chunk-IKSLQ4XV.js} +5439 -3475
  67. package/dist/{chunk-6DB53AJS.js → chunk-IMXMHHMQ.js} +171 -30
  68. package/dist/{chunk-AB44T6BB.js → chunk-JBCS7CRR.js} +8 -7
  69. package/dist/{chunk-BBVJUZHB.js → chunk-JIEGK6UF.js} +5 -173
  70. package/dist/{chunk-SP2RXXYO.js → chunk-JWJGP5DQ.js} +10 -10
  71. package/dist/{chunk-HZHHCK24.js → chunk-KKOJXO6R.js} +527 -325
  72. package/dist/chunk-KPXDY6QF.js +47 -0
  73. package/dist/{chunk-LQ3DZAMX.js → chunk-LJID3DYZ.js} +8 -2
  74. package/dist/{chunk-7MCTRUCE.js → chunk-M2DAX4F6.js} +2 -2
  75. package/dist/{chunk-VEO4AP2K.js → chunk-M2WXEHER.js} +4 -3
  76. package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
  77. package/dist/{chunk-YDFRH54B.js → chunk-MCMZMDAC.js} +4 -4
  78. package/dist/{chunk-J5Q24KAG.js → chunk-MNJGS2IN.js} +5 -6
  79. package/dist/{chunk-76ONBSIA.js → chunk-MQXIVJ35.js} +14 -5
  80. package/dist/chunk-NDDGJUXD.js +81 -0
  81. package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
  82. package/dist/chunk-NMJXSHBJ.js +283 -0
  83. package/dist/{chunk-VYMXRQI6.js → chunk-O3YUNJZ2.js} +88 -100
  84. package/dist/{chunk-VO2LKSTM.js → chunk-O42A54GG.js} +2 -2
  85. package/dist/{chunk-Z2RR6MAK.js → chunk-P75RZCJW.js} +28 -6
  86. package/dist/{chunk-NHCZP4K7.js → chunk-PBP4B7XR.js} +2 -2
  87. package/dist/{chunk-DYJP44XW.js → chunk-PGF63K6I.js} +2 -2
  88. package/dist/chunk-PJX3WQUQ.js +42 -0
  89. package/dist/{chunk-ZGVHUX3M.js → chunk-PMZVFWSR.js} +2 -2
  90. package/dist/{chunk-2JDWVJND.js → chunk-Q4XWMHX6.js} +5 -7
  91. package/dist/{chunk-W5VSYASO.js → chunk-QQLGQY2A.js} +46 -87
  92. package/dist/{chunk-KMVISBZR.js → chunk-RKSR6VSF.js} +1 -1
  93. package/dist/{chunk-C2LTL2W6.js → chunk-RLYRBIYQ.js} +463 -180
  94. package/dist/{chunk-4ZG3XFUR.js → chunk-S66XZJOF.js} +14 -23
  95. package/dist/{chunk-I5VEOC6I.js → chunk-SSEYRH53.js} +13 -14
  96. package/dist/chunk-SZAA6XDG.js +30 -0
  97. package/dist/{chunk-CODPRO7Q.js → chunk-TPEQIQIE.js} +7 -7
  98. package/dist/{chunk-QLL7ILRG.js → chunk-UBRFI4HS.js} +1151 -614
  99. package/dist/{chunk-O4XIVISU.js → chunk-UH347SHR.js} +227 -47
  100. package/dist/{chunk-OQBA45DZ.js → chunk-UH632ZYL.js} +2 -2
  101. package/dist/chunk-UXCU4E3T.js +303 -0
  102. package/dist/{chunk-CMZWFGD2.js → chunk-VAVR4IJY.js} +19 -15
  103. package/dist/{chunk-IQ7KR472.js → chunk-VIA6RFQZ.js} +8 -13
  104. package/dist/{chunk-V5DHCITQ.js → chunk-VKPAQYEB.js} +49 -19
  105. package/dist/{chunk-5LXZXPKX.js → chunk-VN3SHNBN.js} +2 -2
  106. package/dist/{chunk-UOSL25KY.js → chunk-VXMFAE2W.js} +1 -1
  107. package/dist/{chunk-3XML7CDN.js → chunk-W4YEMFBX.js} +3 -3
  108. package/dist/{chunk-U77AMWDL.js → chunk-W6NIE6OW.js} +44 -23
  109. package/dist/{chunk-BBVYXMFO.js → chunk-WNP7O5WZ.js} +2 -2
  110. package/dist/{chunk-QREDIESB.js → chunk-X7IARSHT.js} +15 -9
  111. package/dist/{chunk-3URVFKWK.js → chunk-XE3PCIXH.js} +5 -5
  112. package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
  113. package/dist/{chunk-F4CKPOEQ.js → chunk-XOXV5GKE.js} +119 -38
  114. package/dist/chunk-XQRY4DTA.js +657 -0
  115. package/dist/{chunk-NYS75XW5.js → chunk-YAKGTXEV.js} +5 -3
  116. package/dist/{chunk-NQQH3YT7.js → chunk-YJISEZKC.js} +3 -3
  117. package/dist/{chunk-X75E3D2N.js → chunk-ZGNYYXQ6.js} +18 -16
  118. package/dist/{chunk-LY4S7GJC.js → chunk-ZNT2M6TG.js} +20 -18
  119. package/dist/{chunk-HKIYEGME.js → chunk-ZTJUVLTU.js} +2 -2
  120. package/dist/{chunk-IBEBSCYA.js → chunk-ZW4HH5JJ.js} +43 -34
  121. package/dist/{chunk-2ANTL7MR.js → chunk-ZW55JB7N.js} +2 -2
  122. package/dist/cli/index.js +38 -37
  123. package/dist/{clio-2JXHBBY5.js → clio-7VB377CC.js} +12 -13
  124. package/dist/{code-nav-3YYRMYNF.js → code-nav-YVLCYA7V.js} +86 -18
  125. package/dist/codewiki/build-worker.js +1 -1
  126. package/dist/{compile-cache-7FPE6PS3.js → compile-cache-OQAVB7Y5.js} +2 -4
  127. package/dist/{components-RYZV4JGP.js → components-UBWCQSRW.js} +4 -4
  128. package/dist/{config-QZPCMYSO.js → config-4HVOS65E.js} +112 -63
  129. package/dist/{configure-TEGEBYCA.js → configure-PIWO7B24.js} +25 -22
  130. package/dist/{context-E6H5RNMC.js → context-IYEHL3WQ.js} +53 -47
  131. package/dist/{context-GSXUE4CT.js → context-KQYIWPWT.js} +68 -42
  132. package/dist/{context-AV7OEZ4D.js → context-N6ZE3LGJ.js} +11 -11
  133. package/dist/{context-clear-SHIBYK6T.js → context-clear-G4OGZJDS.js} +53 -47
  134. package/dist/{context-working-set-5ZGKPGZQ.js → context-working-set-BWLF6LJP.js} +12 -11
  135. package/dist/{dispatch-runner-EFMJT4LD.js → dispatch-runner-2QQAITS3.js} +67 -58
  136. package/dist/{docs-23KQS3XK.js → docs-PD3EXDKU.js} +20 -25
  137. package/dist/doctor-LHBD36VU.js +773 -0
  138. package/dist/{eval-TFBYQH4H.js → eval-C45FYRJ6.js} +68 -49
  139. package/dist/{eval-inventory-SXH7PDKX.js → eval-inventory-6DEJPLBF.js} +7 -8
  140. package/dist/{evidence-ERGESKGN.js → evidence-6SHONYAF.js} +50 -44
  141. package/dist/{evolve-VDXTSYCJ.js → evolve-KRKMV72X.js} +49 -43
  142. package/dist/{extensions-7BGBHN57.js → extensions-KPZ2UHBB.js} +8 -6
  143. package/dist/{fleet-2RRVDF2V.js → fleet-IVTCKDHT.js} +93 -79
  144. package/dist/{fleet-commands-VJ726XIA.js → fleet-commands-EDWL3IT7.js} +10 -9
  145. package/dist/{fleet-decisions-EPAPM3XJ.js → fleet-decisions-YP3YEFGK.js} +6 -6
  146. package/dist/{fleet-graph-JF5QOATM.js → fleet-graph-ZFWKHY2M.js} +19 -15
  147. package/dist/{fleet-inspect-VLY4S7QM.js → fleet-inspect-FVUNCBML.js} +50 -45
  148. package/dist/{fleet-preflight-AIZUEJOY.js → fleet-preflight-UN5XED4R.js} +5 -9
  149. package/dist/{fleet-validate-AJRPDMDV.js → fleet-validate-XOWC4HSX.js} +22 -17
  150. package/dist/{fleet-verify-JFEL2L3H.js → fleet-verify-UN3SODEL.js} +48 -43
  151. package/dist/fleet-view-TWHJKCN6.js +96 -0
  152. package/dist/{init-DN2WWLFE.js → init-T2QORQ3Y.js} +72 -66
  153. package/dist/{install-XGLBQY5E.js → install-NKNG7KD4.js} +2 -2
  154. package/dist/{interop-OZBKXAYL.js → interop-IN5I2A66.js} +13 -11
  155. package/dist/{library-YWZG7IMW.js → library-LSCATDLZ.js} +23 -18
  156. package/dist/{memory-I4C4HMLW.js → memory-HYOKAGGJ.js} +51 -45
  157. package/dist/{models-CEYXJBO6.js → models-2GPMFYCM.js} +42 -33
  158. package/dist/{monitor-NZ6GCI3P.js → monitor-E4ASVUJH.js} +56 -50
  159. package/dist/{orchestrator-GCGQ4N5I.js → orchestrator-DDMPR3PY.js} +2676 -1507
  160. package/dist/{panes-KY6W3V2E.js → panes-E3RUXOW5.js} +5 -5
  161. package/dist/panes-IXKLOKA2.js +75 -0
  162. package/dist/{paths-II4K7DNR.js → paths-L7LGY6RN.js} +4 -4
  163. package/dist/{reset-DQ6FGCSH.js → reset-OAQP3W4O.js} +7 -8
  164. package/dist/{resources-BB3MVJMD.js → resources-OTRSN34L.js} +23 -17
  165. package/dist/{run-H2GQDUER.js → run-5DEYH5QK.js} +95 -84
  166. package/dist/{share-GTJN6A5O.js → share-IHWTLO3M.js} +26 -19
  167. package/dist/{skills-L55TEW6R.js → skills-IYMXMKW4.js} +25 -20
  168. package/dist/{skills-eval-XVXPH2JI.js → skills-eval-DROHSJAR.js} +63 -65
  169. package/dist/{skills-inventory-S4MXPJFV.js → skills-inventory-D7X4L4ZX.js} +21 -16
  170. package/dist/{slash-commands-ZSGASKJC.js → slash-commands-QBM7UZ3B.js} +38 -33
  171. package/dist/{steer-RZGSCY4R.js → steer-Z5DO23FJ.js} +3 -3
  172. package/dist/{support-PKEUNNQL.js → support-U7QOWY26.js} +6 -6
  173. package/dist/{targets-NCPZ644J.js → targets-P2FUC4IL.js} +64 -61
  174. package/dist/{terminal-lease-44SV3YCN.js → terminal-lease-YREJ3JX2.js} +15 -10
  175. package/dist/{tools-DAF3DI3C.js → tools-5B7RO6MV.js} +10 -8
  176. package/dist/{trace-FYVW2MQA.js → trace-YMGMUM6A.js} +101 -8
  177. package/dist/{tui-primitives-2AKXQNZK.js → tui-primitives-K5PASC3O.js} +8 -4
  178. package/dist/{uninstall-DW2PNOIC.js → uninstall-N34PCTGJ.js} +4 -6
  179. package/dist/{upgrade-3XPP6OQL.js → upgrade-PXK3S2YM.js} +36 -61
  180. package/dist/{usage-3NLHGTU2.js → usage-ME5MPXGX.js} +58 -53
  181. package/dist/{verifiers-SSQONKRT.js → verifiers-BVZ7IWOO.js} +10 -9
  182. package/dist/{verify-3U6J7FZI.js → verify-5K7ZKQFC.js} +9 -8
  183. package/dist/{web-fetch-S7RR6GZ7.js → web-fetch-MPARV2K7.js} +2 -3
  184. package/dist/{wiki-generate-CEHYGPGQ.js → wiki-generate-F5W5QTYY.js} +74 -70
  185. package/dist/{with-panes-MKB46MPQ.js → with-panes-BYOJCLAM.js} +78 -246
  186. package/dist/worker/entry.js +83 -63
  187. package/docs/README.md +176 -81
  188. package/docs/{acp.md → architecture/acp.md} +36 -20
  189. package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
  190. package/docs/{architecture.md → architecture/architecture.md} +43 -22
  191. package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
  192. package/docs/architecture/artifact-versions.md +90 -0
  193. package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
  194. package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
  195. package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
  196. package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
  197. package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
  198. package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
  199. package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
  200. package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
  201. package/docs/{observability.md → architecture/observability.md} +26 -13
  202. package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
  203. package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
  204. package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
  205. package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
  206. package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
  207. package/docs/architecture/time-conventions.md +125 -0
  208. package/docs/{trace-store.md → architecture/trace-store.md} +26 -13
  209. package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
  210. package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
  211. package/docs/{built-in-agents.md → guide/built-in-agents.md} +70 -46
  212. package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +73 -62
  213. package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +323 -444
  214. package/docs/guide/configuration-reference.md +1158 -0
  215. package/docs/{environment-variables.md → guide/environment-variables.md} +31 -27
  216. package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +8 -3
  217. package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
  218. package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +47 -49
  219. package/docs/{glossary.md → guide/glossary.md} +14 -11
  220. package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +45 -14
  221. package/docs/guide/panes-and-files.md +290 -0
  222. package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
  223. package/docs/{resource-library.md → guide/resource-library.md} +13 -4
  224. package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
  225. package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
  226. package/docs/{troubleshooting.md → guide/troubleshooting.md} +10 -5
  227. package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +13 -10
  228. package/docs/history/release-cut-checklist.md +207 -0
  229. package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
  230. package/docs/process/documentation-coverage.md +100 -0
  231. package/docs/process/documentation-guide.md +187 -0
  232. package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
  233. package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
  234. package/docs/{evolution.md → process/evolution.md} +2 -2
  235. package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +17 -10
  236. package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
  237. package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
  238. package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
  239. package/evals/README.md +5 -0
  240. package/evals/behavioral-corpus-grader.mjs +103 -0
  241. package/evals/behavioral-machinery-baseline.json +2276 -0
  242. package/evals/behavioral-machinery-driver.ts +250 -0
  243. package/evals/behavioral-machinery-support.ts +253 -0
  244. package/evals/behavioral-machinery.yaml +614 -0
  245. package/evals/behavioral-model-negative-control.yaml +68 -0
  246. package/evals/behavioral-model.yaml +216 -0
  247. package/evals/fixtures/behavioral-facts.txt +3 -0
  248. package/evals/fixtures/behavioral-main.ts +7 -0
  249. package/evals/fixtures/decoy/note.txt +2 -0
  250. package/evals/fixtures/private/credentials.txt +1 -0
  251. package/evals/tracked-metrics-baseline.yaml +229 -0
  252. package/evals/tracked-metrics-grader.mjs +129 -0
  253. package/package.json +13 -21
  254. package/skills/README.md +51 -42
  255. package/skills/coding/ast-grep/SKILL.md +9 -3
  256. package/skills/coding/coding-standards/SKILL.md +9 -3
  257. package/skills/coding/prototype/SKILL.md +9 -3
  258. package/skills/coding/tdd/SKILL.md +9 -3
  259. package/skills/context/context-handoff/SKILL.md +13 -4
  260. package/skills/context/context-handoff/evals.md +3 -3
  261. package/skills/context/context-prime/SKILL.md +9 -3
  262. package/skills/context/context-prime/evals.md +2 -2
  263. package/skills/git/file-ticket/SKILL.md +10 -5
  264. package/skills/git/file-ticket/evals.md +2 -2
  265. package/skills/git/fix-issue/SKILL.md +12 -5
  266. package/skills/git/fix-issue/evals.md +4 -4
  267. package/skills/git/resolve-merge-conflicts/SKILL.md +9 -3
  268. package/skills/git/resolve-merge-conflicts/evals.md +2 -2
  269. package/skills/git/ship/SKILL.md +10 -4
  270. package/skills/git/ship/evals.md +4 -4
  271. package/skills/git/worktree-create/SKILL.md +8 -3
  272. package/skills/git/worktree-create/evals.md +6 -6
  273. package/skills/git/worktree-merge/SKILL.md +8 -3
  274. package/skills/git/worktree-merge/evals.md +6 -6
  275. package/skills/meta/{clio-dev → clio-coder-dev}/SKILL.md +22 -12
  276. package/skills/meta/{clio-dev → clio-coder-dev}/evals.md +5 -4
  277. package/skills/meta/clio-coder-test/SKILL.md +146 -0
  278. package/skills/meta/{clio-test → clio-coder-test}/evals.md +10 -5
  279. package/skills/meta/clio-coder-test/references/harness.md +102 -0
  280. package/skills/meta/clio-coder-test/references/test-map.md +96 -0
  281. package/skills/meta/credentials/SKILL.md +10 -3
  282. package/skills/meta/find-skills/SKILL.md +9 -3
  283. package/skills/meta/herdr/SKILL.md +9 -3
  284. package/skills/meta/skill-craft/SKILL.md +39 -16
  285. package/skills/planning/architecture/SKILL.md +9 -3
  286. package/skills/planning/backlog/SKILL.md +9 -3
  287. package/skills/planning/prd/SKILL.md +9 -3
  288. package/skills/planning/product-intent/SKILL.md +9 -3
  289. package/skills/planning/tech-spec/SKILL.md +9 -3
  290. package/skills/registry.yaml +66 -66
  291. package/skills/research/arxiv-literature/SKILL.md +9 -3
  292. package/skills/research/experiment-protocol/SKILL.md +10 -3
  293. package/skills/research/scientific-debugging/SKILL.md +10 -3
  294. package/skills/research/scientific-debugging/evals.md +2 -2
  295. package/skills/research/scientific-modernization/SKILL.md +10 -3
  296. package/skills/skill-marketplace.json +285 -66
  297. package/skills/workflow/cut-it/SKILL.md +11 -3
  298. package/skills/workflow/design-council/SKILL.md +12 -3
  299. package/skills/workflow/grill-me/SKILL.md +9 -3
  300. package/skills/workflow/workflow-distiller/SKILL.md +9 -3
  301. package/src/cli/acp.ts +2 -2
  302. package/src/cli/args.ts +2 -2
  303. package/src/cli/auth.ts +2 -2
  304. package/src/cli/bootstrap-generate.ts +6 -6
  305. package/src/cli/clio.ts +6 -1
  306. package/src/cli/config-inspect.ts +68 -15
  307. package/src/cli/configure-interop.ts +1 -1
  308. package/src/cli/configure.ts +27 -31
  309. package/src/cli/default-target.ts +1 -1
  310. package/src/cli/docs.ts +28 -20
  311. package/src/cli/doctor-naming.ts +323 -0
  312. package/src/cli/doctor-panes.ts +46 -14
  313. package/src/cli/doctor-toolchain.ts +31 -10
  314. package/src/cli/doctor.ts +15 -1
  315. package/src/cli/eval-inventory.ts +8 -8
  316. package/src/cli/eval.ts +1 -2
  317. package/src/cli/evidence-detail.ts +1 -1
  318. package/src/cli/evidence-inventory.ts +1 -1
  319. package/src/cli/extensions.ts +2 -1
  320. package/src/cli/fleet-decisions.ts +1 -1
  321. package/src/cli/fleet-inspect.ts +1 -1
  322. package/src/cli/fleet-preflight.ts +1 -1
  323. package/src/cli/fleet-verify.ts +1 -1
  324. package/src/cli/fleet-view.ts +40 -23
  325. package/src/cli/fleet.ts +9 -6
  326. package/src/cli/index.ts +2 -1
  327. package/src/cli/internal-dispatch.ts +3 -4
  328. package/src/cli/interop-inspect.ts +2 -2
  329. package/src/cli/models.ts +3 -3
  330. package/src/cli/modes/print.ts +1 -1
  331. package/src/cli/panes.ts +19 -5
  332. package/src/cli/reset.ts +1 -1
  333. package/src/cli/run.ts +13 -17
  334. package/src/cli/share.ts +6 -2
  335. package/src/cli/skills-eval.ts +14 -14
  336. package/src/cli/targets.ts +25 -30
  337. package/src/cli/trace-inspect.ts +1 -1
  338. package/src/cli/trace.ts +96 -4
  339. package/src/cli/uninstall.ts +2 -2
  340. package/src/cli/upgrade.ts +29 -34
  341. package/src/cli/usage.ts +2 -2
  342. package/src/cli/validate-model.ts +1 -1
  343. package/src/cli/verifiers-inspect.ts +1 -1
  344. package/src/cli/wiki-generate.ts +6 -6
  345. package/src/core/artifact-paths.ts +1 -1
  346. package/src/core/bash-exec.ts +132 -87
  347. package/src/core/boot-trace.ts +3 -3
  348. package/src/core/bus-events.ts +51 -6
  349. package/src/core/bus-trace.ts +2 -2
  350. package/src/core/compile-cache.ts +1 -1
  351. package/src/core/config.ts +1066 -886
  352. package/src/core/defaults.ts +326 -530
  353. package/src/core/dispatch-outcome.ts +16 -0
  354. package/src/core/domain-loader.ts +6 -4
  355. package/src/core/event-bus.ts +1 -1
  356. package/src/core/file-references.ts +78 -88
  357. package/src/core/git-commit-attribution.ts +3 -9
  358. package/src/core/guardrails.ts +33 -52
  359. package/src/core/naming-compat.ts +45 -0
  360. package/src/core/naming-events.ts +62 -0
  361. package/src/core/prompt-hint.ts +9 -0
  362. package/src/core/recent-models.ts +1 -7
  363. package/src/core/residency-protection.ts +4 -8
  364. package/src/core/resolve-config-value.ts +1 -1
  365. package/src/core/response-model-id.ts +0 -14
  366. package/src/core/session-routing.ts +84 -74
  367. package/src/core/skill-activation.ts +18 -0
  368. package/src/core/termination.ts +4 -4
  369. package/src/core/timers.ts +2 -12
  370. package/src/domains/agents/builtins/architect.md +2 -3
  371. package/src/domains/agents/builtins/coder.md +3 -2
  372. package/src/domains/agents/builtins/debugger.md +2 -2
  373. package/src/domains/agents/builtins/documenter.md +2 -2
  374. package/src/domains/agents/builtins/git-master.md +1 -1
  375. package/src/domains/agents/builtins/oracle.md +1 -1
  376. package/src/domains/agents/builtins/provenance.md +1 -1
  377. package/src/domains/agents/builtins/researcher.md +1 -1
  378. package/src/domains/agents/builtins/scout.md +1 -1
  379. package/src/domains/agents/builtins/tester.md +2 -2
  380. package/src/domains/agents/builtins/verifier.md +2 -2
  381. package/src/domains/agents/builtins/wiki-writer.md +1 -1
  382. package/src/domains/agents/catalog.ts +14 -26
  383. package/src/domains/agents/contract.ts +2 -0
  384. package/src/domains/agents/extension.ts +26 -4
  385. package/src/domains/agents/registry.ts +7 -7
  386. package/src/domains/agents/result-contract.ts +1 -1
  387. package/src/domains/agents/spec.ts +0 -11
  388. package/src/domains/config/classify.ts +35 -47
  389. package/src/domains/config/extension.ts +5 -5
  390. package/src/domains/config/keybindings.ts +56 -47
  391. package/src/domains/config/watcher.ts +1 -1
  392. package/src/domains/context/codewiki/indexer.ts +1 -1
  393. package/src/domains/context/extension.ts +3 -6
  394. package/src/domains/context/prompt-context.ts +1 -1
  395. package/src/domains/context/wiki/assemble.ts +2 -2
  396. package/src/domains/context/working-set/path-index.ts +1 -0
  397. package/src/domains/context/working-set/replay/metrics.ts +0 -4
  398. package/src/domains/context/working-set/replay/report.ts +1 -1
  399. package/src/domains/context/working-set/replay/synthetic.ts +2 -2
  400. package/src/domains/dispatch/active-route-planner.ts +2 -2
  401. package/src/domains/dispatch/agent-candidates.ts +1 -1
  402. package/src/domains/dispatch/agent-ledger-store.ts +1 -1
  403. package/src/domains/dispatch/agent-ledger.ts +1 -1
  404. package/src/domains/dispatch/assignment.ts +5 -5
  405. package/src/domains/dispatch/capability-match.ts +10 -0
  406. package/src/domains/dispatch/capacity-lease.ts +2 -5
  407. package/src/domains/dispatch/code-step.ts +1 -1
  408. package/src/domains/dispatch/contract.ts +2 -2
  409. package/src/domains/dispatch/extension.ts +169 -82
  410. package/src/domains/dispatch/fleet-node-prompt.ts +1 -1
  411. package/src/domains/dispatch/fleet-preflight.ts +8 -17
  412. package/src/domains/dispatch/fleet-run.ts +0 -7
  413. package/src/domains/dispatch/gate-decisions.ts +25 -14
  414. package/src/domains/dispatch/host-verification.ts +435 -39
  415. package/src/domains/dispatch/intent-requirements.ts +10 -0
  416. package/src/domains/dispatch/intent.ts +18 -1
  417. package/src/domains/dispatch/joint-route-resolver.ts +1 -1
  418. package/src/domains/dispatch/path-scope.ts +220 -70
  419. package/src/domains/dispatch/placement.ts +2 -2
  420. package/src/domains/dispatch/receipt-findings.ts +1 -1
  421. package/src/domains/dispatch/receipt-integrity.ts +20 -8
  422. package/src/domains/dispatch/reservation-store.ts +0 -23
  423. package/src/domains/dispatch/route-decision.ts +1 -1
  424. package/src/domains/dispatch/route-history.ts +1 -1
  425. package/src/domains/dispatch/route-policy.ts +1 -1
  426. package/src/domains/dispatch/route-readiness.ts +0 -28
  427. package/src/domains/dispatch/run-event-journal.ts +9 -19
  428. package/src/domains/dispatch/state.ts +2 -3
  429. package/src/domains/dispatch/tool-stats.ts +1 -1
  430. package/src/domains/dispatch/transport.ts +47 -40
  431. package/src/domains/dispatch/types.ts +58 -6
  432. package/src/domains/dispatch/worker-protocol.ts +2 -2
  433. package/src/domains/eval/artifacts/store.ts +10 -4
  434. package/src/domains/eval/compare/thresholds.ts +0 -8
  435. package/src/domains/eval/execution-provenance.ts +1 -1
  436. package/src/domains/eval/metrics/token-stream.ts +0 -7
  437. package/src/domains/eval/report.ts +1 -1
  438. package/src/domains/eval/runner.ts +1 -1
  439. package/src/domains/eval/runners/clio-run.ts +7 -6
  440. package/src/domains/eval/runners/external-command.ts +4 -3
  441. package/src/domains/eval/schema/artifact.ts +1 -1
  442. package/src/domains/eval/schema/behavioral-metrics.ts +3 -2
  443. package/src/domains/eval/schema/behavioral.ts +7 -6
  444. package/src/domains/eval/schema/execution-envelope.ts +4 -2
  445. package/src/domains/eval/schema/naming.ts +10 -0
  446. package/src/domains/eval/schema/suite.ts +2 -2
  447. package/src/domains/eval/schema/validate.ts +9 -5
  448. package/src/domains/eval/schema/verdict.ts +4 -2
  449. package/src/domains/eval/store.ts +20 -3
  450. package/src/domains/eval/suites/run.ts +12 -6
  451. package/src/domains/eval/types.ts +1 -1
  452. package/src/domains/eval/workspaces/git.ts +1 -1
  453. package/src/domains/eval/workspaces/temp-copy.ts +1 -1
  454. package/src/domains/evidence/build.ts +13 -5
  455. package/src/domains/evidence/trust-status.ts +10 -1
  456. package/src/domains/extensions/contract.ts +15 -1
  457. package/src/domains/extensions/discovery.ts +238 -41
  458. package/src/domains/extensions/extension.ts +105 -6
  459. package/src/domains/extensions/index.ts +24 -0
  460. package/src/domains/extensions/integrity.ts +189 -0
  461. package/src/domains/extensions/manager.ts +17 -1
  462. package/src/domains/extensions/resource-path.ts +27 -0
  463. package/src/domains/extensions/resources.ts +18 -38
  464. package/src/domains/extensions/snapshot-store.ts +39 -0
  465. package/src/domains/extensions/snapshot.ts +180 -0
  466. package/src/domains/extensions/state.ts +385 -57
  467. package/src/domains/extensions/types.ts +118 -1
  468. package/src/domains/interop/consent.ts +7 -7
  469. package/src/domains/interop/extension.ts +1 -1
  470. package/src/domains/lifecycle/doctor.ts +27 -21
  471. package/src/domains/lifecycle/migrations/2026-09-01-clio-coder-naming.ts +155 -0
  472. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
  473. package/src/domains/lifecycle/migrations/2026-09-01-retire-panes-knobs.ts +59 -0
  474. package/src/domains/lifecycle/migrations/2026-09-01-settings-v2.ts +338 -0
  475. package/src/domains/lifecycle/migrations/index.ts +22 -1
  476. package/src/domains/lifecycle/naming-history.ts +153 -0
  477. package/src/domains/lifecycle/naming-mutable-state.ts +104 -0
  478. package/src/domains/lifecycle/naming-resources.ts +276 -0
  479. package/src/domains/lifecycle/naming-tool-markers.ts +139 -0
  480. package/src/domains/lifecycle/naming-yazi.ts +86 -0
  481. package/src/domains/lifecycle/upgrade-notice.ts +1 -1
  482. package/src/domains/memory/task-memory-handoff.ts +6 -3
  483. package/src/domains/middleware/contract.ts +26 -0
  484. package/src/domains/middleware/extension.ts +24 -24
  485. package/src/domains/middleware/hook-receipts.ts +27 -4
  486. package/src/domains/middleware/hooks-io.ts +65 -32
  487. package/src/domains/middleware/hooks.ts +64 -0
  488. package/src/domains/middleware/index.ts +35 -4
  489. package/src/domains/middleware/marketplace-offer.ts +339 -0
  490. package/src/domains/middleware/registrations.ts +326 -0
  491. package/src/domains/middleware/runtime.ts +30 -2
  492. package/src/domains/middleware/snapshot.ts +20 -7
  493. package/src/domains/mux/contract.ts +195 -25
  494. package/src/domains/mux/detect.ts +23 -6
  495. package/src/domains/mux/dock-controller.ts +365 -0
  496. package/src/domains/mux/extension.ts +7 -1
  497. package/src/domains/mux/index.ts +21 -1
  498. package/src/domains/mux/operations.ts +72 -5
  499. package/src/domains/mux/protocol.ts +19 -6
  500. package/src/domains/mux/socket-client.ts +167 -19
  501. package/src/domains/mux/types.ts +49 -6
  502. package/src/domains/mux/yazi/assets/yazi.toml +2 -2
  503. package/src/domains/mux/yazi/event-stream.ts +6 -4
  504. package/src/domains/mux/yazi/profile.ts +1 -1
  505. package/src/domains/mux/yazi/session.ts +79 -7
  506. package/src/domains/mux/yazi/theme.ts +117 -17
  507. package/src/domains/observability/contract.ts +10 -11
  508. package/src/domains/observability/extension.ts +12 -4
  509. package/src/domains/observability/out-of-turn-usage.ts +2 -2
  510. package/src/domains/observability/projection.ts +15 -91
  511. package/src/domains/observability/trace-store.ts +65 -19
  512. package/src/domains/prompts/compiler.ts +75 -55
  513. package/src/domains/prompts/contract.ts +15 -3
  514. package/src/domains/prompts/extension.ts +100 -12
  515. package/src/domains/prompts/fragments/identity/clio-worker.md +2 -4
  516. package/src/domains/prompts/fragments/identity/clio.md +6 -12
  517. package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
  518. package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
  519. package/src/domains/prompts/fragments/operating/contract.md +7 -15
  520. package/src/domains/prompts/fragments/operating/delegation.md +32 -34
  521. package/src/domains/prompts/fragments/operating/skills.md +11 -18
  522. package/src/domains/prompts/fragments/operating/worker.md +1 -8
  523. package/src/domains/providers/extension.ts +5 -5
  524. package/src/domains/providers/index.ts +1 -1
  525. package/src/domains/providers/knowledge-base-path.ts +1 -1
  526. package/src/domains/providers/model-runtime-capabilities.ts +99 -23
  527. package/src/domains/providers/models/cloud-models/alcf.yaml +1 -1
  528. package/src/domains/providers/models/local-models/{clio-local-coding-targets.yaml → clio-coder-local-coding-targets.yaml} +671 -106
  529. package/src/domains/providers/plugins.ts +1 -1
  530. package/src/domains/providers/resolver.ts +1 -1
  531. package/src/domains/providers/runtime-resolution.ts +31 -0
  532. package/src/domains/providers/runtimes/cloud/alcf.ts +4 -4
  533. package/src/domains/providers/runtimes/common/lmstudio-http.ts +1 -5
  534. package/src/domains/providers/runtimes/common/local-synth.ts +3 -3
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +9 -4
  536. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  537. package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
  538. package/src/domains/providers/runtimes/local-native/lmstudio.ts +2 -9
  539. package/src/domains/providers/runtimes/protocol/litellm.ts +1 -91
  540. package/src/domains/providers/types/cost-provenance.ts +19 -0
  541. package/src/domains/providers/types/knowledge-base.ts +13 -0
  542. package/src/domains/providers/types/local-model-quirks.ts +87 -39
  543. package/src/domains/providers/types/target-descriptor.ts +3 -3
  544. package/src/domains/resources/extension.ts +1 -1
  545. package/src/domains/resources/library.ts +6 -6
  546. package/src/domains/resources/prompts/loader.ts +1 -1
  547. package/src/domains/resources/skills/content-hash.ts +7 -6
  548. package/src/domains/resources/skills/evals.ts +1 -1
  549. package/src/domains/resources/skills/install.ts +36 -12
  550. package/src/domains/resources/skills/loader.ts +41 -18
  551. package/src/domains/resources/skills/marketplace.ts +21 -2
  552. package/src/domains/resources/skills/promotion.ts +214 -0
  553. package/src/domains/safety/audit.ts +2 -2
  554. package/src/domains/safety/call-target.ts +1 -1
  555. package/src/domains/safety/finish-contract.ts +2 -1
  556. package/src/domains/safety/loop-detector.ts +7 -4
  557. package/src/domains/safety/run-effects.ts +1 -1
  558. package/src/domains/scheduling/extension.ts +4 -4
  559. package/src/domains/session/archive-readers.ts +9 -1
  560. package/src/domains/session/compaction/branch-summary.ts +4 -0
  561. package/src/domains/session/compaction/compact.ts +1 -1
  562. package/src/domains/session/compaction/tokens.ts +4 -0
  563. package/src/domains/session/context-accounting.ts +1 -1
  564. package/src/domains/session/decision-board.ts +1 -1
  565. package/src/domains/session/extension.ts +1 -1
  566. package/src/domains/session/handoff.ts +2 -2
  567. package/src/domains/session/prompt-manifest.ts +0 -5
  568. package/src/domains/session/protected-artifact-journal.ts +12 -6
  569. package/src/domains/session/retry.ts +1 -1
  570. package/src/domains/session/task-board.ts +10 -9
  571. package/src/domains/share/archive.ts +249 -43
  572. package/src/domains/toolchain/install.ts +1 -1
  573. package/src/engine/acp/adapter.ts +3 -3
  574. package/src/engine/acp/event-mapper.ts +3 -3
  575. package/src/engine/acp/server.ts +89 -35
  576. package/src/engine/acp/tool-mediator.ts +2 -2
  577. package/src/engine/acp/types.ts +1 -1
  578. package/src/engine/alcf-oauth.ts +5 -5
  579. package/src/engine/antigravity/subprocess-runtime.ts +2 -2
  580. package/src/engine/api-registry.ts +1 -1
  581. package/src/engine/apis/llamacpp-residency.ts +4 -23
  582. package/src/engine/apis/lmstudio.ts +4 -9
  583. package/src/engine/apis/ollama-native.ts +9 -9
  584. package/src/engine/apis/openai-completions.ts +30 -27
  585. package/src/engine/apis/output-budget.ts +8 -18
  586. package/src/engine/apis/residency.ts +10 -35
  587. package/src/engine/claude/sdk-module.ts +1 -12
  588. package/src/engine/claude/sdk-runtime.ts +6 -6
  589. package/src/engine/claude/subprocess-runtime.ts +1 -1
  590. package/src/engine/claude/tool-safety.ts +4 -4
  591. package/src/engine/gemma-channel-filter.ts +19 -0
  592. package/src/engine/loop-guard.ts +92 -17
  593. package/src/engine/session.ts +14 -7
  594. package/src/engine/tui-primitives.ts +1 -1
  595. package/src/engine/worker-events.ts +6 -6
  596. package/src/engine/worker-runtime.ts +54 -24
  597. package/src/engine/worker-tools.ts +3 -1
  598. package/src/entry/extension-hook-sources.ts +28 -0
  599. package/src/entry/extension-reload.ts +309 -0
  600. package/src/entry/orchestrator.ts +163 -120
  601. package/src/interactive/application-controller.ts +23 -22
  602. package/src/interactive/bus-notices.ts +10 -3
  603. package/src/interactive/chat-loop-messages.ts +3 -13
  604. package/src/interactive/chat-loop.ts +18 -9
  605. package/src/interactive/chat-panel.ts +37 -14
  606. package/src/interactive/chat-renderer.ts +71 -7
  607. package/src/interactive/clio-editor.ts +105 -1
  608. package/src/interactive/context-activity.ts +8 -6
  609. package/src/interactive/context-meter.ts +3 -6
  610. package/src/interactive/context-overlay.ts +1 -1
  611. package/src/interactive/cost-overlay.ts +1 -1
  612. package/src/interactive/council-grid.ts +2 -2
  613. package/src/interactive/dispatch-board.ts +36 -44
  614. package/src/interactive/editor-bash.ts +21 -0
  615. package/src/interactive/editor-steer.ts +9 -4
  616. package/src/interactive/editor-submit.ts +24 -18
  617. package/src/interactive/external-editor.ts +1 -1
  618. package/src/interactive/file-reference-completion.ts +360 -0
  619. package/src/interactive/footer/dashboard.ts +15 -17
  620. package/src/interactive/footer/notifications.ts +14 -8
  621. package/src/interactive/footer/widgets.ts +15 -44
  622. package/src/interactive/interactive-application.ts +116 -61
  623. package/src/interactive/interactive-event-projection.ts +1 -1
  624. package/src/interactive/interactive-input-runtime.ts +6 -2
  625. package/src/interactive/interactive-presentation.ts +22 -17
  626. package/src/interactive/interactive-shell.ts +2 -2
  627. package/src/interactive/interactive-slash-runtime.ts +65 -17
  628. package/src/interactive/interactive-subscriptions.ts +1 -1
  629. package/src/interactive/interactive-tickers.ts +1 -1
  630. package/src/interactive/keybinding-manager.ts +4 -4
  631. package/src/interactive/layout.ts +1 -1
  632. package/src/interactive/memory-overlay.ts +2 -2
  633. package/src/interactive/modal-marker.ts +2 -21
  634. package/src/interactive/mutation-preview.ts +1 -1
  635. package/src/interactive/overlay-frame.ts +4 -12
  636. package/src/interactive/overlay-general-openers.ts +6 -2
  637. package/src/interactive/overlay-key-routing.ts +7 -7
  638. package/src/interactive/overlay-lifecycle.ts +1 -1
  639. package/src/interactive/overlay-model-selectors.ts +3 -3
  640. package/src/interactive/overlays/agents.ts +2 -2
  641. package/src/interactive/overlays/ask-user.ts +25 -11
  642. package/src/interactive/overlays/context-reset.ts +28 -4
  643. package/src/interactive/overlays/cwd-fallback.ts +28 -4
  644. package/src/interactive/overlays/decisions.ts +4 -2
  645. package/src/interactive/overlays/extensions.ts +9 -1
  646. package/src/interactive/overlays/fleet-run-approval.ts +3 -3
  647. package/src/interactive/overlays/handoff-review.ts +2 -2
  648. package/src/interactive/overlays/help-reference.ts +13 -0
  649. package/src/interactive/overlays/interop.ts +1 -1
  650. package/src/interactive/overlays/library-install-confirm.ts +1 -1
  651. package/src/interactive/overlays/message-picker.ts +1 -1
  652. package/src/interactive/overlays/model-selector.ts +39 -31
  653. package/src/interactive/overlays/prompts.ts +10 -4
  654. package/src/interactive/overlays/session-selector.ts +2 -2
  655. package/src/interactive/overlays/settings.ts +360 -303
  656. package/src/interactive/overlays/side-question.ts +2 -2
  657. package/src/interactive/overlays/skills-hub.ts +8 -8
  658. package/src/interactive/overlays/tree-selector.ts +2 -2
  659. package/src/interactive/panes-runtime.ts +145 -43
  660. package/src/interactive/permission-overlay.ts +2 -2
  661. package/src/interactive/prompt-cache-identity.ts +88 -0
  662. package/src/interactive/renderers/retry-status.ts +12 -4
  663. package/src/interactive/renderers/tool-execution.ts +4 -4
  664. package/src/interactive/session-transcript.ts +3 -3
  665. package/src/interactive/slash-autocomplete.ts +454 -165
  666. package/src/interactive/slash-commands.ts +401 -190
  667. package/src/interactive/slash-spec.ts +160 -17
  668. package/src/interactive/status/controller.ts +2 -2
  669. package/src/interactive/stream-pacing-policy.ts +1 -24
  670. package/src/interactive/tasks-overlay.ts +20 -13
  671. package/src/interactive/terminal-lease.ts +6 -7
  672. package/src/interactive/turn-context.ts +41 -26
  673. package/src/interactive/turn-persistence.ts +2 -2
  674. package/src/interactive/turn-prewarm.ts +2 -2
  675. package/src/interactive/turn-runtime.ts +8 -8
  676. package/src/interactive/turn-state.ts +1 -1
  677. package/src/interactive/view/artifacts.ts +12 -9
  678. package/src/interactive/view/view-overlay.ts +13 -10
  679. package/src/interactive/watch-pane.ts +38 -10
  680. package/src/interactive/welcome-dashboard.ts +15 -15
  681. package/src/interactive/worker-progress.ts +4 -4
  682. package/src/interactive/worker-receipts.ts +1 -1
  683. package/src/interactive/worker-stream.ts +1 -4
  684. package/src/interactive/yazi-bridge.ts +72 -11
  685. package/src/tools/agent-tools.ts +30 -1
  686. package/src/tools/artifact.ts +2 -2
  687. package/src/tools/ask-user.ts +6 -6
  688. package/src/tools/bash.ts +2 -2
  689. package/src/tools/bootstrap.ts +4 -0
  690. package/src/tools/builtin-tool-catalog.ts +52 -22
  691. package/src/tools/codewiki/code-nav-surface.ts +6 -0
  692. package/src/tools/codewiki/code-nav.ts +99 -13
  693. package/src/tools/compete-worktrees.ts +27 -17
  694. package/src/tools/context/docs-engine.ts +20 -7
  695. package/src/tools/context/index.ts +44 -13
  696. package/src/tools/core-bootstrap.ts +28 -6
  697. package/src/tools/credential-present.ts +1 -2
  698. package/src/tools/dispatch-admission.ts +4 -2
  699. package/src/tools/dispatch-arguments.ts +6 -2
  700. package/src/tools/dispatch-plan.ts +48 -15
  701. package/src/tools/dispatch-run-events.ts +13 -11
  702. package/src/tools/dispatch-runner.ts +11 -6
  703. package/src/tools/dispatch-schema.ts +338 -0
  704. package/src/tools/dispatch-types.ts +3 -0
  705. package/src/tools/dispatch.ts +9 -254
  706. package/src/tools/find.ts +1 -6
  707. package/src/tools/ledger.ts +3 -5
  708. package/src/tools/monitor-surface.ts +5 -13
  709. package/src/tools/monitor.ts +4 -4
  710. package/src/tools/observation.ts +4 -5
  711. package/src/tools/observers.ts +0 -33
  712. package/src/tools/panes-surface.ts +4 -11
  713. package/src/tools/panes.ts +4 -2
  714. package/src/tools/policy.ts +15 -2
  715. package/src/tools/read.ts +5 -6
  716. package/src/tools/registry.ts +30 -7
  717. package/src/tools/result-shaping.ts +18 -14
  718. package/src/tools/steer-surface.ts +1 -1
  719. package/src/tools/task-worktree.ts +28 -7
  720. package/src/tools/tasks.ts +1 -1
  721. package/src/tools/truncate.ts +6 -5
  722. package/src/tools/verify/authoring.ts +3 -6
  723. package/src/tools/verify/frontend.ts +1 -1
  724. package/src/tools/verify/surface.ts +6 -12
  725. package/src/tools/web-fetch-surface.ts +1 -3
  726. package/src/tools/web-fetch.ts +1 -1
  727. package/src/worker/entry.ts +4 -3
  728. package/src/worker/protocol.ts +16 -14
  729. package/src/worker/spec-contract.ts +2 -2
  730. package/src/worker/stdin-demux.ts +2 -2
  731. package/dist/chunk-36EJLSQQ.js +0 -814
  732. package/dist/chunk-GXNLGKAB.js +0 -571
  733. package/dist/chunk-K7VKOLQQ.js +0 -15
  734. package/dist/chunk-PMZCIOCJ.js +0 -25
  735. package/dist/chunk-SUCTJL45.js +0 -45
  736. package/dist/chunk-SUW5DORT.js +0 -819
  737. package/dist/chunk-TZ3SGWZZ.js +0 -48
  738. package/dist/chunk-UOV2BYIW.js +0 -107
  739. package/dist/chunk-VFA6GDY5.js +0 -1625
  740. package/dist/doctor-QOA5FNY5.js +0 -313
  741. package/dist/fleet-view-ZCON35AG.js +0 -102
  742. package/dist/panes-HMABYVO4.js +0 -58
  743. package/docs/artifact-versions.md +0 -67
  744. package/docs/documentation-coverage.md +0 -46
  745. package/docs/documentation-guide.md +0 -167
  746. package/docs/release-cut-checklist.md +0 -193
  747. package/docs/time-conventions.md +0 -101
  748. package/skills/meta/clio-test/SKILL.md +0 -133
  749. package/skills/meta/clio-test/references/harness.md +0 -126
  750. package/skills/meta/clio-test/references/test-map.md +0 -69
  751. package/src/engine/apis/degraded-inference.ts +0 -95
@@ -6,7 +6,7 @@ import type { ToolSurface } from "./lazy-tool.js";
6
6
  export const monitorToolSurface = {
7
7
  name: ToolNames.Monitor,
8
8
  description:
9
- "Inspect known dispatched runs. Parent-model mid-run observation requires detach:true because ordinary dispatch auto-waits. wait observes without collecting. collect is the authoritative terminal batch operation; collect detached runs before final synthesis. receipt exposes stored evidence. Receipt integrity, evidence verification, briefing provenance, and project-context provenance are separate fields.",
9
+ "Inspect dispatched runs: list enumerates them; status, peek, receipt, and tools observe one run; wait blocks on one run without collecting; collect is the terminal operation for a detached batch or run list, required before final synthesis.",
10
10
  parameters: Type.Object({
11
11
  run_id: Type.Optional(
12
12
  Type.String({ description: "Run id from dispatch output or monitor list; omit with mode=list." }),
@@ -14,21 +14,13 @@ export const monitorToolSurface = {
14
14
  mode: Type.Optional(
15
15
  StringEnum(["status", "peek", "receipt", "list", "wait", "collect", "tools"], {
16
16
  description:
17
- "What to return. Defaults to status when run_id is present and list when it is absent. status, peek, receipt, tools, and wait each observe one run and require a run_id; list takes none. tools answers what a run executed: its tool calls with outcomes, plus per-tool totals from the receipt.",
18
- }),
19
- ),
20
- batch_id: Type.Optional(Type.String({ description: "Detached batch id from dispatch detach:true (mode=collect)." })),
21
- run_ids: Type.Optional(
22
- Type.Array(Type.String(), {
23
- description:
24
- "Explicit run ids for mode=collect; a one-element array is also accepted by single-run modes when run_id is absent.",
17
+ "Defaults to status with run_id and list without. tools lists a run's tool calls with outcomes and per-tool totals.",
25
18
  }),
26
19
  ),
20
+ batch_id: Type.Optional(Type.String({ description: "Detached batch id (mode=collect)." })),
21
+ run_ids: Type.Optional(Type.Array(Type.String(), { description: "Run ids to collect (mode=collect)." })),
27
22
  timeout_ms: Type.Optional(
28
- Type.Number({
29
- description:
30
- "mode=wait: max ms to block (default 60000, capped at 600000); mode=collect never blocks and ignores this value with a notice.",
31
- }),
23
+ Type.Number({ description: "mode=wait: max ms to block (default 60000, max 600000); collect never blocks." }),
32
24
  ),
33
25
  }),
34
26
  baseActionClass: "read",
@@ -214,16 +214,16 @@ const TOOLS_MAX_BYTES = 8 * 1024;
214
214
  const TOOLS_ARGUMENTS_CHARS = 160;
215
215
 
216
216
  /**
217
- * Tail event types that describe one tool call. `clio_tool_finish` is the
217
+ * Tail event types that describe one tool call. `clio_coder_tool_finish` is the
218
218
  * authoritative per-call outcome (it distinguishes a permission block from a
219
219
  * command that ran and exited nonzero); the engine's own `tool_execution_end`
220
220
  * is kept only when the tail recorded a detail for it, since a bare type line
221
221
  * says nothing the finish event does not.
222
222
  */
223
223
  const TOOL_CALL_EVENT_TYPES: ReadonlySet<string> = new Set([
224
- "clio_tool_finish",
225
- "clio_permission_resolved",
226
- "clio_permission_escalated",
224
+ "clio_coder_tool_finish",
225
+ "clio_coder_permission_resolved",
226
+ "clio_coder_permission_escalated",
227
227
  ]);
228
228
 
229
229
  function toolCallLines(entries: ReadonlyArray<{ at: string; type: string; detail?: string }>): string[] {
@@ -1,4 +1,4 @@
1
- import { GUARDRAIL_DEFAULTS, GUARDRAIL_ENV_VARS, resolveGuardrail } from "../core/guardrails.js";
1
+ import { GUARDRAIL_DEFAULTS, resolveGuardrail } from "../core/guardrails.js";
2
2
  import type { ToolInvokeOptions, ToolResult } from "./registry.js";
3
3
  import { offloadPointer, writeToolOffload } from "./result-shaping.js";
4
4
  import { formatSize } from "./truncate.js";
@@ -64,9 +64,8 @@ export const OBSERVE_SELF_CAPS = {
64
64
 
65
65
  // Per-turn observation budget pool. One pool per sessionId:turnId shared by
66
66
  // every OBSERVE tool; LRU-pruned so abandoned turns cannot grow the map.
67
- // Value, settings key, and env override live in core/guardrails.ts.
67
+ // The configurable value lives at safety.limits.observationBytesPerTurn.
68
68
  export const DEFAULT_OBSERVATION_TURN_BUDGET_BYTES = GUARDRAIL_DEFAULTS.observationTurnBudgetBytes;
69
- export const OBSERVATION_TURN_BUDGET_ENV = GUARDRAIL_ENV_VARS.observationTurnBudgetBytes;
70
69
  const MIN_BUDGET_SLICE_BYTES = 1024;
71
70
  const BUDGET_TRACK_LIMIT = 256;
72
71
 
@@ -130,8 +129,8 @@ function boundContinuation(next: string | undefined): string | undefined {
130
129
  return `${Array.from(next).slice(0, MAX_CONTINUATION_CHARS).join("")}…`;
131
130
  }
132
131
 
133
- function observationTurnBudgetLimit(env: NodeJS.ProcessEnv = process.env): number {
134
- return Math.max(MIN_BUDGET_SLICE_BYTES, resolveGuardrail("observationTurnBudgetBytes", env));
132
+ function observationTurnBudgetLimit(): number {
133
+ return Math.max(MIN_BUDGET_SLICE_BYTES, resolveGuardrail("observationTurnBudgetBytes"));
135
134
  }
136
135
 
137
136
  function budgetKey(options: ToolInvokeOptions | undefined): string | null {
@@ -44,39 +44,6 @@ export interface FileMutationEvent {
44
44
  toolName: string;
45
45
  }
46
46
 
47
- /**
48
- * Defers file-mutation sinks off the after_tool hot path and coalesces rapid
49
- * events into one best-effort batch. Lifecycle-owned sinks that must drain at
50
- * shutdown should admit work synchronously instead of using this convenience.
51
- */
52
- export function coalescePathSink(sink: (paths: string[]) => void): (event: FileMutationEvent) => void {
53
- const pending = new Set<string>();
54
- let flushScheduled = false;
55
-
56
- const scheduleFlush = (): void => {
57
- if (flushScheduled) return;
58
- flushScheduled = true;
59
- setImmediate(() => {
60
- flushScheduled = false;
61
- if (pending.size === 0) return;
62
- const paths = [...pending];
63
- pending.clear();
64
- try {
65
- sink(paths);
66
- } catch {
67
- // Incremental indexing is best-effort and must not change tool execution.
68
- }
69
- if (pending.size > 0) scheduleFlush();
70
- });
71
- };
72
-
73
- return (event) => {
74
- if (event.paths.length === 0) return;
75
- for (const path of event.paths) pending.add(path);
76
- scheduleFlush();
77
- };
78
- }
79
-
80
47
  /** Notifies the caller after a successful file-mutating tool, for incremental indexing. */
81
48
  export function createFileMutationObserver(sink: (event: FileMutationEvent) => void): MiddlewareHookRegistration {
82
49
  return {
@@ -15,23 +15,16 @@ import type { ToolSurface } from "./lazy-tool.js";
15
15
  export const panesToolSurface = {
16
16
  name: ToolNames.Panes,
17
17
  description:
18
- "Look at, focus, and manage the terminal panes Clio owns beside this session. Use show to bring a dispatched run's live viewer pane to the front when the operator asks to see an agent (\"show me the tester\"). open starts one of the fixed utility presets; there is no way to run an arbitrary command. close removes a pane Clio created. list reports the current inventory and the pane layer's health.",
18
+ "Manage the terminal panes Clio owns beside this session: show focuses a dispatched run's viewer pane, open starts a fixed utility preset (files, logs, or shell; never an arbitrary command) or focuses it when it is already open, close removes a Clio-created pane, list reports the inventory and the pane layer's health.",
19
19
  parameters: Type.Object({
20
- action: StringEnum(["show", "open", "close", "list"], {
21
- description:
22
- "show focuses a run's viewer pane; open starts a preset utility pane; close removes a Clio-owned pane; list reports the inventory.",
23
- }),
20
+ action: StringEnum(["show", "open", "close", "list"], { description: "Pane action." }),
24
21
  target: Type.Optional(
25
22
  Type.String({
26
23
  description:
27
- 'action=show: an agent id or run id prefix, most recent match wins. action=close: a pane id, a pane label, an agent id, or "all".',
28
- }),
29
- ),
30
- preset: Type.Optional(
31
- StringEnum([...PANES_PRESET_IDS], {
32
- description: "action=open: which fixed utility pane to start.",
24
+ 'show: an agent id or run id prefix, most recent match wins. close: a pane id, label, agent id, or "all".',
33
25
  }),
34
26
  ),
27
+ preset: Type.Optional(StringEnum([...PANES_PRESET_IDS], { description: "open: which utility pane to start." })),
35
28
  }),
36
29
  baseActionClass: "read",
37
30
  executionMode: "sequential",
@@ -78,8 +78,10 @@ export function createPanesTool(deps: PanesToolDeps): ToolSpec {
78
78
  kind: "ok",
79
79
  output:
80
80
  result.paneId === null
81
- ? `completed the ${result.label} chooser.`
82
- : `opened the ${result.label} pane (${result.paneId}).`,
81
+ ? `completed the ${result.label} pick.`
82
+ : result.existing
83
+ ? `the ${result.label} pane was already open and is now focused (${result.paneId}).`
84
+ : `opened the ${result.label} pane (${result.paneId}).`,
83
85
  details: { action: "open", preset, paneId: result.paneId },
84
86
  };
85
87
  }
@@ -81,6 +81,13 @@ const DISPATCH_BOUND_TOOLS = new Set<ToolName>([ToolNames.Dispatch, ToolNames.Mo
81
81
  const INTERACTIVE_BOUND_TOOLS = new Set<ToolName>([ToolNames.AskUser]);
82
82
  /** Registered only when a pane host answered detection and the mux is live. */
83
83
  const PANES_BOUND_TOOLS = new Set<ToolName>([ToolNames.Panes]);
84
+ /**
85
+ * Registered only when a dispatch bound an agent-ledger port to this registry,
86
+ * which only a worker process does. The session has no peers to coordinate
87
+ * with, so on that surface the tool could only answer "no ledger" and its
88
+ * schema was 444 tokens of every first turn for nothing.
89
+ */
90
+ const LEDGER_BOUND_TOOLS = new Set<ToolName>([ToolNames.Ledger]);
84
91
  /** The RETRIEVE plane, omitted wholesale by a hermetic run (tools/network-policy.ts). */
85
92
  const NETWORK_BOUND_TOOLS = new Set<ToolName>([ToolNames.WebFetch]);
86
93
 
@@ -89,15 +96,19 @@ export interface BuiltinToolPolicyOptions {
89
96
  includeDispatchTools?: boolean;
90
97
  includeInteractiveTools?: boolean;
91
98
  includePanesTools?: boolean;
99
+ includeLedgerTools?: boolean;
92
100
  /**
93
- * Unlike the other four, this defaults to true: every registry registers
101
+ * Unlike the others, this defaults to true: every registry registers
94
102
  * the network plane unless a run explicitly asked to be hermetic, so an
95
103
  * unset option must keep demanding it.
96
104
  */
97
105
  includeNetworkTools?: boolean;
98
106
  }
99
107
 
100
- function validateBuiltinToolPolicy(specs: ReadonlyArray<ToolSpec>, options: BuiltinToolPolicyOptions = {}): string[] {
108
+ export function validateBuiltinToolPolicy(
109
+ specs: ReadonlyArray<ToolSpec>,
110
+ options: BuiltinToolPolicyOptions = {},
111
+ ): string[] {
101
112
  const errors: string[] = [];
102
113
  const registered = new Map<ToolName, ToolSpec>();
103
114
 
@@ -140,6 +151,7 @@ function validateBuiltinToolPolicy(specs: ReadonlyArray<ToolSpec>, options: Buil
140
151
  const includeDispatchTools = options.includeDispatchTools ?? false;
141
152
  const includeInteractiveTools = options.includeInteractiveTools ?? false;
142
153
  const includePanesTools = options.includePanesTools ?? false;
154
+ const includeLedgerTools = options.includeLedgerTools ?? false;
143
155
  const includeNetworkTools = options.includeNetworkTools ?? true;
144
156
  const required = new Set<ToolName>(Object.values(ToolNames));
145
157
  for (const tool of [...required]) {
@@ -147,6 +159,7 @@ function validateBuiltinToolPolicy(specs: ReadonlyArray<ToolSpec>, options: Buil
147
159
  if (!includeDispatchTools && DISPATCH_BOUND_TOOLS.has(tool)) required.delete(tool);
148
160
  if (!includeInteractiveTools && INTERACTIVE_BOUND_TOOLS.has(tool)) required.delete(tool);
149
161
  if (!includePanesTools && PANES_BOUND_TOOLS.has(tool)) required.delete(tool);
162
+ if (!includeLedgerTools && LEDGER_BOUND_TOOLS.has(tool)) required.delete(tool);
150
163
  if (!includeNetworkTools && NETWORK_BOUND_TOOLS.has(tool)) required.delete(tool);
151
164
  }
152
165
  for (const tool of required) {
package/src/tools/read.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { readFileSync, statSync } from "node:fs";
2
2
  import { Type } from "typebox";
3
- import { GUARDRAIL_DEFAULTS, GUARDRAIL_ENV_VARS, resolveGuardrail } from "../core/guardrails.js";
3
+ import { GUARDRAIL_DEFAULTS, resolveGuardrail } from "../core/guardrails.js";
4
4
  import { ToolNames } from "../core/tool-names.js";
5
5
  import { finalizeObservation, observationBudgetExhausted, reserveObservation } from "./observation.js";
6
6
  import { resolveReadPath } from "./path-utils.js";
@@ -19,14 +19,13 @@ import { truncateUtf8 } from "./truncate-utf8.js";
19
19
  // Per-call read cap. Raised from the 16KB per-observation source cap toward
20
20
  // pi's 50KB so large source/generated files finish in fewer calls (a 144KB file
21
21
  // took ~9 sequential 16KB reads before). The per-turn observation budget
22
- // (src/tools/observation.ts) still bounds the aggregate. Value, settings key,
23
- // and env override (CLIO_CODER_READ_MAX_BYTES) live in core/guardrails.ts.
22
+ // (src/tools/observation.ts) still bounds the aggregate. The configurable
23
+ // value lives at safety.limits.readBytesPerCall.
24
24
  export const DEFAULT_READ_MAX_BYTES = GUARDRAIL_DEFAULTS.readMaxBytes;
25
- export const READ_MAX_BYTES_ENV = GUARDRAIL_ENV_VARS.readMaxBytes;
26
25
  const MIN_READ_CAP_BYTES = 1024;
27
26
 
28
- export function readMaxBytes(env: NodeJS.ProcessEnv = process.env): number {
29
- return Math.max(MIN_READ_CAP_BYTES, resolveGuardrail("readMaxBytes", env));
27
+ export function readMaxBytes(): number {
28
+ return Math.max(MIN_READ_CAP_BYTES, resolveGuardrail("readMaxBytes"));
30
29
  }
31
30
 
32
31
  export const readTool: ToolSpec = {
@@ -2,6 +2,7 @@ import { createHash, randomBytes } from "node:crypto";
2
2
  import type { TSchema } from "typebox";
3
3
  import { isWorkerToolCallCapExceededReason } from "../core/guardrails.js";
4
4
  import { HEADLESS_PERMISSION_DENIED_MARKER } from "../core/headless-permission.js";
5
+ import { normalizePromptHint } from "../core/prompt-hint.js";
5
6
  import {
6
7
  evaluateSkillToolSurface,
7
8
  type PendingSkillToolPolicy,
@@ -49,6 +50,27 @@ export type ToolExecutionMode = "sequential" | "parallel";
49
50
  export type ToolSourceScope = "core" | "domain";
50
51
  export type ToolRetrySafety = "idempotent" | "retry_safe" | "not_retry_safe" | "unknown";
51
52
  export type ToolCostLatencyClass = "local_fast" | "local_medium" | "local_slow" | "network" | "agent";
53
+ export type ToolPromptHintRole = "session" | "worker" | "bound-worker";
54
+
55
+ export interface ToolPromptHintVariants {
56
+ session?: string;
57
+ worker?: string;
58
+ boundWorker?: string;
59
+ }
60
+
61
+ export type ToolPromptHintMetadata = string | ToolPromptHintVariants;
62
+
63
+ /** Resolve one tool's guidance for the exact prompt role being compiled. */
64
+ export function resolveToolPromptHint(
65
+ hint: ToolPromptHintMetadata | undefined,
66
+ role: ToolPromptHintRole,
67
+ ): string | undefined {
68
+ if (typeof hint === "string") return normalizePromptHint(hint);
69
+ if (!hint) return undefined;
70
+ const selected =
71
+ role === "session" ? hint.session : role === "bound-worker" ? (hint.boundWorker ?? hint.worker) : hint.worker;
72
+ return normalizePromptHint(selected);
73
+ }
52
74
 
53
75
  export interface ToolSourceInfo {
54
76
  path: string;
@@ -77,12 +99,11 @@ export interface ToolMetadata {
77
99
  /** Coarse cost/latency bucket for dashboard diagnostics. */
78
100
  costLatency: ToolCostLatencyClass;
79
101
  /**
80
- * One sentence of usage guidance rendered into the session Tool Contract
81
- * when this tool is on the frozen surface. Hints render sorted by tool
82
- * name, so the compiled prompt stays byte-stable per surface. Most tools
83
- * need none; the schema description covers them.
102
+ * One sentence of usage guidance rendered when this tool is on the frozen
103
+ * surface. A string applies to every role; variants keep session consent
104
+ * rules out of ordinary and recipe-bound workers. Most tools need none.
84
105
  */
85
- promptHint?: string;
106
+ promptHint?: ToolPromptHintMetadata;
86
107
  /**
87
108
  * How transcript surfaces present this tool's block under `/output default`.
88
109
  * Optional: tools that declare nothing fold like every other tool.
@@ -199,6 +220,8 @@ export interface ToolInvokeOptions {
199
220
  turnId?: string;
200
221
  toolCallId?: string;
201
222
  correlationId?: string;
223
+ /** Session-effective ceiling for one tool result, read again before every invocation. */
224
+ toolResultMaxBytes?: number;
202
225
  pendingSkillPolicy?: PendingSkillToolPolicy;
203
226
  askUserPolicy?: AskUserToolPolicy;
204
227
  /** Host-derived display copy for an ask_user round. It has no admission authority. */
@@ -442,14 +465,14 @@ export function createRegistry(deps: RegistryDeps): ToolRegistry {
442
465
  const preparedArgs = prepareToolArgs(spec, call.args ?? {});
443
466
  resultDisposition = resolveToolResultDisposition(spec, preparedArgs);
444
467
  const result = await spec.run(preparedArgs, options);
445
- const digest = toolResultDigestFor(spec, result, resultDisposition);
468
+ const digest = toolResultDigestFor(spec, result, resultDisposition, options);
446
469
  const afterEffects = runToolHook("after_tool", spec, call, decision, options, result, digest);
447
470
  const finalResult = shapeToolResult(spec, applyToolResultEffects(result, afterEffects), options, resultDisposition);
448
471
  return { kind: "ok", result: finalResult, decision };
449
472
  } catch (err) {
450
473
  const message = err instanceof Error ? err.message : String(err);
451
474
  const result: ToolResult = { kind: "error", message };
452
- const digest = toolResultDigestFor(spec, result, resultDisposition);
475
+ const digest = toolResultDigestFor(spec, result, resultDisposition, options);
453
476
  const afterEffects = runToolHook("after_tool", spec, call, decision, options, result, digest);
454
477
  return {
455
478
  kind: "ok",
@@ -16,27 +16,30 @@ import {
16
16
  import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, formatSize, truncateTail } from "./truncate.js";
17
17
  import { byteLength, truncateUtf8 } from "./truncate-utf8.js";
18
18
 
19
- // Backstop for tools without an explicit resultSizePolicy. Sits above the
20
- // per-observation source cap (src/tools/truncate.ts) so a tool's own truncation
21
- // notice (with its precise continuation offset) survives shaping instead of
22
- // being cut again and replaced by a generic hint.
23
- export const DEFAULT_TOOL_RESULT_MAX_BYTES = DEFAULT_MAX_BYTES + 2 * 1024;
19
+ // Backstop for tools without an explicit resultSizePolicy. Session settings may
20
+ // lower or raise this fallback, while explicit per-tool policies remain tighter.
21
+ export const DEFAULT_TOOL_RESULT_MAX_BYTES = DEFAULT_MAX_BYTES;
24
22
  const RESULT_TRUNCATION_MARKER = "\n[tool result truncated]";
25
23
  const RESULT_OFFLOAD_MAX_BYTES = 10 * 1024 * 1024;
26
24
  const TAIL_NOTICE_RESERVE_BYTES = 512;
27
25
  export const TOOL_OFFLOAD_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1000;
28
26
 
29
- type ToolResultShapeContext = Pick<ToolInvokeOptions, "sessionId" | "toolCallId">;
27
+ type ToolResultShapeContext = Pick<ToolInvokeOptions, "sessionId" | "toolCallId" | "toolResultMaxBytes">;
30
28
 
31
29
  function mergeDetails(details: ToolResultDetails | undefined, resultSize: Record<string, unknown>): ToolResultDetails {
32
30
  return { ...(details ?? {}), resultSize };
33
31
  }
34
32
 
35
- function maxBytesFor(spec: ToolSpec): number {
33
+ function maxBytesFor(spec: ToolSpec, context?: ToolResultShapeContext): number {
36
34
  const configured = spec.metadata?.resultSizePolicy?.maxBytes;
37
- return typeof configured === "number" && Number.isFinite(configured) && configured > 0
38
- ? Math.floor(configured)
39
- : DEFAULT_TOOL_RESULT_MAX_BYTES;
35
+ const policyMax =
36
+ typeof configured === "number" && Number.isFinite(configured) && configured > 0
37
+ ? Math.floor(configured)
38
+ : DEFAULT_TOOL_RESULT_MAX_BYTES;
39
+ const sessionMax = context?.toolResultMaxBytes;
40
+ return typeof sessionMax === "number" && Number.isFinite(sessionMax) && sessionMax > 0
41
+ ? Math.min(policyMax, Math.floor(sessionMax))
42
+ : policyMax;
40
43
  }
41
44
 
42
45
  function followUpHint(spec: ToolSpec): string {
@@ -61,11 +64,12 @@ export function toolResultDigestFor(
61
64
  spec: ToolSpec,
62
65
  result: ToolResult,
63
66
  requestedDisposition?: ToolResultDisposition,
67
+ context?: ToolResultShapeContext,
64
68
  ): ToolResultDigest {
65
69
  const text = resultText(result);
66
- const disposition = normalizeToolResultDisposition(spec, maxBytesFor(spec), requestedDisposition);
70
+ const disposition = normalizeToolResultDisposition(spec, maxBytesFor(spec, context), requestedDisposition);
67
71
  if (disposition === null) {
68
- const projected = shapeLegacyToolResult(spec, result);
72
+ const projected = shapeLegacyToolResult(spec, result, context);
69
73
  return legacyToolResultDigest(resultText(projected), { outcome: result.kind });
70
74
  }
71
75
  const capturedBytes = capturedBytesFor(result, text);
@@ -298,7 +302,7 @@ function shapeLegacyToolResult(
298
302
  overflow: "head" | "tail" = "head",
299
303
  ): ToolResult {
300
304
  if (existingOffloadPath(result.details) !== null) return result;
301
- const maxBytes = maxBytesFor(spec);
305
+ const maxBytes = maxBytesFor(spec, context);
302
306
  const offloadMaxBytes = offloadMaxBytesFor(spec);
303
307
  const text = result.kind === "ok" ? result.output : result.message;
304
308
  const bytes = byteLength(text);
@@ -410,7 +414,7 @@ export function shapeToolResult(
410
414
  requestedDisposition?: ToolResultDisposition,
411
415
  ): ToolResult {
412
416
  if (existingDisposition(result.details) !== null) return result;
413
- const hardMaxBytes = maxBytesFor(spec);
417
+ const hardMaxBytes = maxBytesFor(spec, context);
414
418
  const disposition = normalizeToolResultDisposition(spec, hardMaxBytes, requestedDisposition);
415
419
  if (disposition === null) return shapeLegacyToolResult(spec, result, context);
416
420
 
@@ -6,7 +6,7 @@ import type { ToolSurface } from "./lazy-tool.js";
6
6
  export const steerToolSurface = {
7
7
  name: ToolNames.Steer,
8
8
  description:
9
- "Control a running native worker whose run id is already available. Parent-model mid-run control requires detach:true because ordinary dispatch auto-waits and dispatch/steer are sequential; the interactive operator/TUI may steer an active synchronous native run through the dispatch contract. ACP runs have no input channel.",
9
+ "Guide or cancel a running native worker by run id. Only a detached run can be steered from here, because an ordinary dispatch auto-waits; ACP runs have no input channel.",
10
10
  parameters: Type.Object({
11
11
  run_id: Type.String({ description: "Run id from dispatch output or monitor list." }),
12
12
  action: StringEnum(["guide", "cancel"], { description: "What to do." }),
@@ -1,6 +1,6 @@
1
1
  import { execFileSync } from "node:child_process";
2
2
  import { createHash, randomBytes } from "node:crypto";
3
- import { existsSync, mkdirSync, realpathSync, rmSync, writeFileSync } from "node:fs";
3
+ import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { isAbsolute, join, relative, resolve, sep } from "node:path";
5
5
 
6
6
  export type TaskWorktreeApply = "merge" | "preserve";
@@ -25,7 +25,9 @@ export interface TaskWorktreeReceipt {
25
25
 
26
26
  const SAFE_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
27
27
  const OWNER_FILE_SUFFIX = ".task-owner.json";
28
- const COMMIT_IDENTITY = "clio-task";
28
+ const TASK_WORKTREE_KIND = "clio-coder-task-worktree";
29
+ const LEGACY_TASK_WORKTREE_KIND = "clio-task-worktree";
30
+ const COMMIT_IDENTITY = "clio-coder-task";
29
31
 
30
32
  function gitBytes(root: string, args: string[]): Buffer {
31
33
  return execFileSync("git", ["-C", root, ...args], {
@@ -160,7 +162,7 @@ export function createTaskWorktree(root: string, runId: string, base?: string):
160
162
  const resolvedBase = base ?? git(canonical, ["rev-parse", "HEAD"]);
161
163
  const parent = join(canonical, ".clio-coder", "worktrees");
162
164
  const path = join(parent, runId);
163
- const branch = `clio/task/${runId}`;
165
+ const branch = `clio-coder/task/${runId}`;
164
166
  mkdirSync(parent, { recursive: true });
165
167
  if (!isCanonicalWorktreePathInside(parent, path))
166
168
  throw new Error(`task worktree path escapes its parent for run ${runId}`);
@@ -168,7 +170,7 @@ export function createTaskWorktree(root: string, runId: string, base?: string):
168
170
  const ownerToken = randomBytes(16).toString("hex");
169
171
  writeFileSync(
170
172
  `${path}${OWNER_FILE_SUFFIX}`,
171
- `${JSON.stringify({ version: 1, kind: "clio-task-worktree", root: canonical, runId, branch, base: resolvedBase, ownerToken }, null, 2)}\n`,
173
+ `${JSON.stringify({ version: 1, kind: TASK_WORKTREE_KIND, root: canonical, runId, branch, base: resolvedBase, ownerToken }, null, 2)}\n`,
172
174
  { encoding: "utf8", flag: "wx" },
173
175
  );
174
176
  return { root: canonical, runId, path, branch, base: resolvedBase, ownerToken };
@@ -182,11 +184,30 @@ function assertOwnership(worktree: TaskWorktree): void {
182
184
  ) {
183
185
  throw new Error(`task worktree ${worktree.runId} has an invalid ownership path`);
184
186
  }
185
- if (!existsSync(`${worktree.path}${OWNER_FILE_SUFFIX}`))
186
- throw new Error(`task worktree ${worktree.runId} has no ownership file`);
187
+ const ownerPath = `${worktree.path}${OWNER_FILE_SUFFIX}`;
188
+ if (!existsSync(ownerPath)) throw new Error(`task worktree ${worktree.runId} has no ownership file`);
189
+ let marker: Record<string, unknown>;
190
+ try {
191
+ const value = JSON.parse(readFileSync(ownerPath, "utf8")) as unknown;
192
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("not an object");
193
+ marker = value as Record<string, unknown>;
194
+ } catch {
195
+ throw new Error(`task worktree ${worktree.runId} has an invalid ownership file`);
196
+ }
197
+ if (
198
+ marker.version !== 1 ||
199
+ (marker.kind !== TASK_WORKTREE_KIND && marker.kind !== LEGACY_TASK_WORKTREE_KIND) ||
200
+ marker.root !== worktree.root ||
201
+ marker.runId !== worktree.runId ||
202
+ marker.branch !== worktree.branch ||
203
+ marker.base !== worktree.base ||
204
+ marker.ownerToken !== worktree.ownerToken
205
+ ) {
206
+ throw new Error(`task worktree ${worktree.runId} ownership facts do not match`);
207
+ }
187
208
  }
188
209
 
189
- function commitTaskWorktree(worktree: TaskWorktree, message = `Clio task ${worktree.runId}`): boolean {
210
+ function commitTaskWorktree(worktree: TaskWorktree, message = `Clio Coder task ${worktree.runId}`): boolean {
190
211
  assertOwnership(worktree);
191
212
  return commitWorktreePath(worktree.path, COMMIT_IDENTITY, message);
192
213
  }
@@ -139,7 +139,7 @@ export function createTasksTool(deps: TasksToolDeps): ToolSpec {
139
139
  description:
140
140
  "Session task board. plan declares a titled board (replaces any prior board); add appends tasks; " +
141
141
  "pick moves one operator task uN onto the board; start marks one task active (the current focus); " +
142
- "done completes a started task and requires note as the " +
142
+ "done completes a task (started or still pending) and requires note as the " +
143
143
  "evidence the work actually finished; block parks it with a required reason; drop cancels it; list shows the board. " +
144
144
  "Work that did not happen is blocked or dropped, never done.",
145
145
  parameters: Type.Object({
@@ -8,12 +8,13 @@ import {
8
8
  truncateTail as truncatePiTail,
9
9
  } from "../engine/truncate.js";
10
10
 
11
- // Per-observation source cap. Pi defaults to 50 KiB; Clio deliberately keeps
12
- // one result proportional to its per-turn observation budget at 16 KiB. The
13
- // wrappers below retain only that product-level delta while Pi owns UTF-8-safe
14
- // head/tail truncation, line limits, grep-line clipping, and size formatting.
11
+ // Per-observation source cap. Pi defaults to 50 KiB; Clio allows 64 KiB while
12
+ // its default 192 KiB turn pool remains authoritative across calls. Three full
13
+ // results consume that pool, so a fourth finds it filled. The wrappers below
14
+ // retain only that product-level delta while Pi owns UTF-8-safe head/tail
15
+ // truncation, line limits, grep-line clipping, and size formatting.
15
16
  export const DEFAULT_MAX_LINES = 2000;
16
- export const DEFAULT_MAX_BYTES = 16 * 1024;
17
+ export const DEFAULT_MAX_BYTES = 64 * 1024;
17
18
  export type { TruncationResult };
18
19
  export { formatSize, GREP_MAX_LINE_LENGTH, truncateLine };
19
20
 
@@ -234,7 +234,7 @@ function boundedId(base: string, suffix = ""): string {
234
234
  }
235
235
 
236
236
  /** Allocate the same stable suffix for the same ordered set of occupied IDs. */
237
- export function deterministicVerifierId(preferredId: string, occupied: ReadonlySet<string>): string {
237
+ function deterministicVerifierId(preferredId: string, occupied: ReadonlySet<string>): string {
238
238
  const base = boundedId(slug(preferredId, "check"));
239
239
  if (!occupied.has(base) && base !== "frontend") return base;
240
240
  for (let index = 2; index <= PROJECT_VERIFIER_CATALOG_CAPS.checks + 2; index += 1) {
@@ -892,7 +892,7 @@ function serializeVerifierDraft(draft: VerifierDraft): string {
892
892
  }
893
893
 
894
894
  /** Validate with the same production parser used by verify(). */
895
- export function validateVerifierDraft(draft: VerifierDraft): VerifierDraftValidation {
895
+ function validateVerifierDraft(draft: VerifierDraft): VerifierDraftValidation {
896
896
  const text = serializeVerifierDraft(draft);
897
897
  const parsed = parseProjectVerifierCatalogText(text, draft.workspaceRoot, draft.catalogPath);
898
898
  if (!parsed.ok) return { ok: false, reason: parsed.reason, text };
@@ -944,10 +944,7 @@ function cloneDraft(draft: VerifierDraft): VerifierDraft {
944
944
  }
945
945
 
946
946
  /** Apply edits to a copy so a collision or schema failure leaves the prior draft intact. */
947
- export function reviseVerifierDraft(
948
- draft: VerifierDraft,
949
- revisions: ReadonlyArray<VerifierRevision>,
950
- ): VerifierRevisionResult {
947
+ function reviseVerifierDraft(draft: VerifierDraft, revisions: ReadonlyArray<VerifierRevision>): VerifierRevisionResult {
951
948
  const next = cloneDraft(draft);
952
949
  const diagnostics: string[] = [];
953
950
  for (const revision of revisions) {
@@ -447,7 +447,7 @@ async function checkModuleJavaScript(
447
447
  label: string,
448
448
  options: ValidationOptions,
449
449
  ): Promise<string | null> {
450
- const dir = mkdtempSync(path.join(tmpdir(), "clio-frontend-check-"));
450
+ const dir = mkdtempSync(path.join(tmpdir(), "clio-coder-frontend-check-"));
451
451
  const file = path.join(dir, "module.mjs");
452
452
  try {
453
453
  writeFileSync(file, source, "utf8");
@@ -28,20 +28,14 @@ export const verifyToolSurface = {
28
28
  parameters: Type.Object({
29
29
  check: Type.Optional(
30
30
  Type.String({
31
- description: `Declared project check ID, package script (${VERIFICATION_SCRIPT_FAMILY_HINT}), or "frontend". Omit to list available checks.`,
31
+ description: `Check id, package script (${VERIFICATION_SCRIPT_FAMILY_HINT}), or "frontend"; omit to list.`,
32
32
  }),
33
33
  ),
34
- path: Type.Optional(Type.String({ description: "check=frontend: artifact file under the workspace root." })),
35
- args: Type.Optional(
36
- Type.Array(Type.String(), { description: "Package scripts only: extra arguments passed after --." }),
37
- ),
38
- browser: Type.Optional(
39
- StringEnum(BROWSER_MODES, { description: "check=frontend: headless browser mode (default auto)." }),
40
- ),
41
- cwd: Type.Optional(Type.String({ description: "Package-script working directory; ignored by project checks." })),
42
- timeout_ms: Type.Optional(
43
- Type.Number({ description: "Package/frontend timeout in ms; project checks use their declared timeoutMs." }),
44
- ),
34
+ path: Type.Optional(Type.String({ description: "frontend: artifact file under the workspace root." })),
35
+ args: Type.Optional(Type.Array(Type.String(), { description: "Package scripts only: arguments after --." })),
36
+ browser: Type.Optional(StringEnum(BROWSER_MODES, { description: "frontend: headless browser mode (default auto)." })),
37
+ cwd: Type.Optional(Type.String({ description: "Package scripts only: working directory." })),
38
+ timeout_ms: Type.Optional(Type.Number({ description: "Package and frontend checks only: timeout in ms." })),
45
39
  max_output_bytes: Type.Optional(Type.Number({ description: "Output cap in bytes (default 600000)." })),
46
40
  }),
47
41
  baseActionClass: "execute",
@@ -13,9 +13,7 @@ export const webFetchToolSurface = {
13
13
  timeout_ms: Type.Optional(Type.Number({ description: "Timeout ms (default 30000)." })),
14
14
  max_bytes: Type.Optional(Type.Number({ description: "Max bytes returned (default 600000)." })),
15
15
  format: Type.Optional(
16
- Type.String({
17
- description: "auto (default: HTML is cleaned to Markdown, other content passes through) or raw (no conversion).",
18
- }),
16
+ Type.String({ description: "auto (default) converts HTML to Markdown; raw returns the body unconverted." }),
19
17
  ),
20
18
  }),
21
19
  baseActionClass: "read",
@@ -256,7 +256,7 @@ function htmlToMarkdown(html: string, baseUrl: string): string {
256
256
  .trim();
257
257
  }
258
258
 
259
- export function extractWebFetchContent(
259
+ function extractWebFetchContent(
260
260
  rawText: string,
261
261
  contentType: string,
262
262
  finalUrl: string,
@@ -122,7 +122,7 @@ async function main(): Promise<number> {
122
122
  setResidencyNoticeSink((notice) => {
123
123
  process.stderr.write(`[worker] residency ${notice.kind}: ${notice.message}\n`);
124
124
  if (notice.kind === "will-not-fit") {
125
- emitEvent({ type: "clio_run_outcome", payload: { outcomeCode: "vram_capacity_fit_failure" } });
125
+ emitEvent({ type: "clio_coder_run_outcome", payload: { outcomeCode: "vram_capacity_fit_failure" } });
126
126
  }
127
127
  });
128
128
  const demux = createWorkerStdinDemux();
@@ -227,12 +227,13 @@ async function main(): Promise<number> {
227
227
  const handle = startWorkerRun(input, (event) => emitEvent(projectWorkerEventForStdout(event)));
228
228
  // The demux buffers lines that landed before the runtime handle existed.
229
229
  // Single-shot subprocesses expose no steer method, and an SDK query can race
230
- // completion. The runtime emits the receipt-bearing clio_steer_received event
230
+ // completion. The runtime emits the receipt-bearing clio_coder_steer_received event
231
231
  // only after it accepts the message; rejected input is diagnostic-only.
232
232
  demux.onSteer(
233
233
  createOrderedSteerHandler(
234
234
  (text) => handle.steer?.(text) ?? false,
235
- ({ text, sequence }) => emitEvent({ type: "clio_steer_received", payload: { chars: text.trim().length, sequence } }),
235
+ ({ text, sequence }) =>
236
+ emitEvent({ type: "clio_coder_steer_received", payload: { chars: text.trim().length, sequence } }),
236
237
  (reason) => process.stderr.write(`[worker] dropped steer: ${reason}\n`),
237
238
  ),
238
239
  );