@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
@@ -296,6 +296,35 @@ function errorMessage(err: unknown): string {
296
296
  return err instanceof Error ? err.message : String(err);
297
297
  }
298
298
 
299
+ /**
300
+ * The parameter schema as the provider should see it.
301
+ *
302
+ * TypeBox 1.x annotates every schema it builds with string-keyed markers
303
+ * (`~unsafe` on `Type.Unsafe`, `~optional` on `Type.Optional`, and so on).
304
+ * Unlike the older symbol keys they survive `JSON.stringify`, so each enum
305
+ * field reached the model as `{"~unsafe": null, "~optional": true, ...}`:
306
+ * 44 junk keys on the default surface, and a small model has no way to know
307
+ * that `"~unsafe": null` means nothing. Validation does not need them
308
+ * (`Value.Check` answers identically with and without), so the copy handed
309
+ * to the agent loop drops every `~`-prefixed key. Symbol keys are copied
310
+ * through untouched because pi-ai picks its coercion path by the TypeBox
311
+ * kind symbol on the root schema.
312
+ */
313
+ function wireParameterSchema<T>(schema: T): T {
314
+ if (Array.isArray(schema)) return schema.map((entry) => wireParameterSchema(entry)) as T;
315
+ if (typeof schema !== "object" || schema === null) return schema;
316
+ const source = schema as Record<PropertyKey, unknown>;
317
+ const out: Record<PropertyKey, unknown> = {};
318
+ for (const key of Object.keys(source)) {
319
+ if (key.startsWith("~")) continue;
320
+ out[key] = wireParameterSchema(source[key]);
321
+ }
322
+ for (const symbol of Object.getOwnPropertySymbols(source)) {
323
+ out[symbol] = source[symbol];
324
+ }
325
+ return out as T;
326
+ }
327
+
299
328
  function toAgentTool(
300
329
  spec: ToolSpec,
301
330
  registry: ToolRegistry,
@@ -305,7 +334,7 @@ function toAgentTool(
305
334
  const tool: AgentTool<TSchema> = {
306
335
  name: spec.name,
307
336
  description: spec.description,
308
- parameters: spec.parameters,
337
+ parameters: wireParameterSchema(spec.parameters),
309
338
  label: spec.metadata?.uiLabel ?? spec.name,
310
339
  async execute(
311
340
  toolCallId: string,
@@ -20,7 +20,7 @@ import type { ToolResult, ToolSpec } from "./registry.js";
20
20
  * tree holds files a human asked for, and everything Clio generates on its own
21
21
  * belongs in the gitignored project directory. An explicit `path` still writes
22
22
  * wherever the caller says, inside the workspace. See core/artifact-paths.ts
23
- * and docs/artifact-placement.md.
23
+ * and docs/architecture/artifact-placement.md.
24
24
  *
25
25
  * Skills are not artifacts: a skill is a SKILL.md folder written with the
26
26
  * ordinary write tool and validated by the skills loader on load. The
@@ -83,7 +83,7 @@ async function writeTerminalArtifact(
83
83
  export function createArtifactTool(deps: ArtifactToolDeps = {}): ToolSpec {
84
84
  return {
85
85
  name: ToolNames.Artifact,
86
- description: `Write a named artifact: kind=plan|review|report writes a terminal Markdown document and completes the turn. Without an explicit path it lands in ${CLIO_ARTIFACT_DIR}/ (PLAN.md, REVIEW.md, REPORT.md); pass path only when the user asked for a file at a specific place.`,
86
+ description: `Write a named artifact: kind=plan|review|report writes a terminal Markdown document and completes the turn, so close the task board (tasks done/block/drop) before writing it. Without an explicit path it lands in ${CLIO_ARTIFACT_DIR}/ (PLAN.md, REVIEW.md, REPORT.md); pass path only when the user asked for a file at a specific place.`,
87
87
  parameters: Type.Object({
88
88
  kind: StringEnum(ARTIFACT_KINDS, { description: "Artifact kind." }),
89
89
  content: Type.String({ description: "Full Markdown body." }),
@@ -92,13 +92,13 @@ export interface AskUserToolDeps {
92
92
  export const askUserParameters = Type.Object({
93
93
  action: Type.Optional(
94
94
  StringEnum(["ask", "complete"], {
95
- description: "ask presents a round of questions; complete (exactly once) records decisions before final prose.",
95
+ description: "ask presents a round of questions; complete records the decisions, once, before final prose.",
96
96
  }),
97
97
  ),
98
98
  mode: Type.Optional(
99
99
  StringEnum(["round", "single_question"], {
100
100
  description:
101
- "Caps how many questions this call may carry. single_question accepts exactly 1 and rejects the call otherwise (interviews); round accepts 1 to 4 tightly related confirmations. Default is round.",
101
+ "round (default) accepts 1 to 4 tightly related questions; single_question accepts exactly one, for interviews.",
102
102
  }),
103
103
  ),
104
104
  questions: Type.Optional(
@@ -135,7 +135,7 @@ export const askUserParameters = Type.Object({
135
135
  exposure: Type.Optional(
136
136
  StringEnum(["local", "outward"], {
137
137
  description:
138
- "Blast radius of this gate. local (default) stays inside the workspace. outward means answering it publishes or sends something the operator cannot take back (filing an issue or PR, posting a comment, pushing, releasing); at autonomy auto-edit an outward gate parks for the operator instead of being answered automatically.",
138
+ "local (default) stays inside the workspace; outward publishes or sends something the operator cannot take back (issue, PR, comment, push, release) and parks for the operator at auto-edit.",
139
139
  }),
140
140
  ),
141
141
  });
@@ -261,7 +261,7 @@ function normalizeDecisions(value: unknown): { decisions?: AskUserDecision[]; er
261
261
  return { decisions };
262
262
  }
263
263
 
264
- export function normalizeAskUserCall(args: Record<string, unknown>): { call?: AskUserCall; error?: string } {
264
+ function normalizeAskUserCall(args: Record<string, unknown>): { call?: AskUserCall; error?: string } {
265
265
  const rawAction = trimOptionalString(args.action)?.toLowerCase() ?? "ask";
266
266
  if (rawAction !== "ask" && rawAction !== "complete") {
267
267
  return { error: "action must be ask or complete" };
@@ -499,7 +499,7 @@ async function persistAskUserTranscript(
499
499
  await mkdir(dir, { recursive: true });
500
500
  if (!policy.transcriptPath) policy.transcriptPath = path.join(dir, transcriptFileName(policy));
501
501
  const transcript = {
502
- schema: "clio.ask_user.interview.v1",
502
+ schema: "clio-coder.ask_user.interview.v1",
503
503
  id: policy.id,
504
504
  status: policy.status,
505
505
  startedAt: policy.startedAt,
@@ -595,7 +595,7 @@ async function completeInterview(
595
595
  return okInterviewResult(policy, event);
596
596
  }
597
597
 
598
- export async function finalizeAskUserInterview(
598
+ async function finalizeAskUserInterview(
599
599
  policy: AskUserToolPolicy,
600
600
  reason: string,
601
601
  options?: ToolInvokeOptions,
package/src/tools/bash.ts CHANGED
@@ -48,7 +48,7 @@ export const BASH_DEFAULT_RESULT_DISPOSITION: ToolResultDisposition = {
48
48
  };
49
49
 
50
50
  /** Pure, idempotent normalization used by registry admission and direct calls. */
51
- export function normalizeBashArguments(args: Record<string, unknown>): Record<string, unknown> {
51
+ function normalizeBashArguments(args: Record<string, unknown>): Record<string, unknown> {
52
52
  return args.output_policy === undefined ? { ...args, output_policy: "bounded" } : args;
53
53
  }
54
54
 
@@ -163,7 +163,7 @@ export const bashTool: ToolSpec = {
163
163
  cwd: Type.Optional(
164
164
  Type.String({
165
165
  description:
166
- "Omit this. The command already runs at the session workspace root. Set it only to run in a subdirectory of that root, as a relative path; an absolute path outside the root is blocked.",
166
+ "Omit unless the command must run in a subdirectory of the workspace root, given as a relative path; outside the root is blocked.",
167
167
  }),
168
168
  ),
169
169
  timeout_ms: Type.Optional(Type.Number({ description: "Timeout in milliseconds." })),
@@ -10,6 +10,7 @@ import type { CompeteMuxWorktrees } from "./compete-worktrees.js";
10
10
  import { assertRegisteredBuiltinTools, type CoreToolBootstrapDeps, registerCoreTools } from "./core-bootstrap.js";
11
11
  import { createDispatchRunEventRegistry, createDispatchTool } from "./dispatch.js";
12
12
  import type { DispatchBackgroundRegistry } from "./dispatch-background.js";
13
+ import type { DispatchSchemaComposition } from "./dispatch-schema.js";
13
14
  import { lazyTool } from "./lazy-tool.js";
14
15
  import { monitorToolSurface } from "./monitor-surface.js";
15
16
  import { panesToolSurface } from "./panes-surface.js";
@@ -27,6 +28,8 @@ export interface ToolBootstrapDeps extends CoreToolBootstrapDeps {
27
28
  getAutonomy?: () => AutonomyLevel;
28
29
  getCostCeilingUsd?: () => number;
29
30
  getWorkerRosters?: () => WorkerRosters;
31
+ /** Which optional `dispatch` schema blocks this session advertises; absent means every block. */
32
+ getDispatchSchemaComposition?: () => DispatchSchemaComposition;
30
33
  dispatchBackground?: DispatchBackgroundRegistry;
31
34
  /** Optional herdr worktree lifecycle for compete candidates. */
32
35
  competeMuxWorktrees?: CompeteMuxWorktrees;
@@ -61,6 +64,7 @@ export function registerAllTools(registry: ToolRegistry, deps: ToolBootstrapDeps
61
64
  ...(deps.getAutonomy ? { getAutonomy: deps.getAutonomy } : {}),
62
65
  ...(deps.getCostCeilingUsd ? { getCostCeilingUsd: deps.getCostCeilingUsd } : {}),
63
66
  ...(deps.getWorkerRosters ? { getWorkerRosters: deps.getWorkerRosters } : {}),
67
+ ...(deps.getDispatchSchemaComposition ? { getSchemaComposition: deps.getDispatchSchemaComposition } : {}),
64
68
  ...(deps.dispatchBackground ? { background: deps.dispatchBackground } : {}),
65
69
  ...(deps.competeMuxWorktrees ? { competeWorktrees: { mux: deps.competeMuxWorktrees } } : {}),
66
70
  };
@@ -4,7 +4,13 @@ import { BASH_DEFAULT_RESULT_DISPOSITION } from "./bash.js";
4
4
  import { OBSERVATION_POLICY_SLACK_BYTES, OBSERVE_SELF_CAPS } from "./observation.js";
5
5
  import { toolPresentationPolicy } from "./presentation.js";
6
6
  import { readMaxBytes } from "./read.js";
7
- import type { ToolMetadata, ToolSourceInfo, ToolSpec } from "./registry.js";
7
+ import {
8
+ resolveToolPromptHint,
9
+ type ToolMetadata,
10
+ type ToolPromptHintRole,
11
+ type ToolSourceInfo,
12
+ type ToolSpec,
13
+ } from "./registry.js";
8
14
 
9
15
  function withSourceInfo<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
10
16
  return { ...spec, sourceInfo };
@@ -83,7 +89,7 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
83
89
  resultSizePolicy: observePolicy(OBSERVE_SELF_CAPS.codeNav, "Raise limit or use a narrower mode/query."),
84
90
  costLatency: "local_fast",
85
91
  promptHint:
86
- "Use code_nav for indexed code navigation (modes: symbol, path, entries, outline, deps, dependents, wiki).",
92
+ "Use code_nav with source=workspace (default) for project code and source=clio for Clio's shipped code map; modes: symbol, path, entries, outline, deps, dependents, wiki (workspace only).",
87
93
  },
88
94
  [ToolNames.Context]: {
89
95
  objective: "Return workspace, bundled-docs, or skill context.",
@@ -94,8 +100,14 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
94
100
  "Use a narrower query or scope to inspect omitted content.",
95
101
  ),
96
102
  costLatency: "local_fast",
97
- promptHint:
98
- 'Call context with scope="skills" to list installed and marketplace skills; when one matches the task, or the operator names a skill or asks how one works, suggest the operator run /skill <name> (a marketplace skill is offered for install) and never load it uninvited. When the user message carries a skill request, first load that skill via context (scope="skills", name=<skill>) before doing anything else. When an [evicted ...] marker names content you need, recall it with context(scope="recall", ref=...); re-read the file only when the marker says it changed.',
103
+ promptHint: {
104
+ session:
105
+ 'On an explicit pending skill request, first load exactly that skill with context(scope="skills", name=<skill>). Follow a [Marketplace] reminder\'s exact ask_user options. Recall needed [evicted ...] content with context(scope="recall", ref=...).',
106
+ worker:
107
+ 'This worker has no operator skill-activation channel; do not load or suggest skills. Recall needed [evicted ...] content with context(scope="recall", ref=...).',
108
+ boundWorker:
109
+ 'Load only the harness-activated recipe-bound skills named in the persona, and only when they match the assigned task. This worker cannot install or suggest marketplace skills. Recall needed [evicted ...] content with context(scope="recall", ref=...).',
110
+ },
99
111
  },
100
112
  [ToolNames.CredentialPresent]: {
101
113
  objective: "Check whether a credential key is present without returning its value.",
@@ -135,7 +147,7 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
135
147
  resultDisposition: BASH_DEFAULT_RESULT_DISPOSITION,
136
148
  costLatency: "local_slow",
137
149
  promptHint:
138
- "Bash output_policy defaults to bounded diagnostic tail. Use summary for noisy commands, metadata-only when only outcome and retrieval matter, and full only when output is known to fit the bounded result budget.",
150
+ "bash output_policy: omit for a bounded tail; summary for noisy commands; metadata-only when only the outcome matters; full only when the output is known to fit.",
139
151
  },
140
152
  [ToolNames.Git]: {
141
153
  objective: "Read-only git inspection: status, diff, or log.",
@@ -167,9 +179,8 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
167
179
  },
168
180
  costLatency: "local_fast",
169
181
  promptHint:
170
- 'When a request contains three or more distinct steps, declare the board before your first edit: tasks action="plan" with a title and the task list. ' +
171
- 'Mark one task active with "start" before working it, close it with "done" plus an evidence note ' +
172
- '(what proves it works), and use "block" with a reason instead of silently stalling.',
182
+ 'For a request with three or more distinct steps, declare the board before the first edit: tasks(action="plan") with a title and the task list. ' +
183
+ "start one task before working it, close it with done plus an evidence note, and block with a reason instead of stalling.",
173
184
  },
174
185
  [ToolNames.Ledger]: {
175
186
  objective: "Coordinate with the peer workers of this dispatch through typed claims, findings, and reviews.",
@@ -191,9 +202,10 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
191
202
  resultSizePolicy: summaryPolicy(
192
203
  "Use the dispatch receipt paths or ask a narrower worker follow-up for omitted output.",
193
204
  ),
205
+ // No hint: the Tool Contract's inventory line already says when
206
+ // dispatch(list:true) is the right answer, and the Fleet section says
207
+ // everything else about routing.
194
208
  costLatency: "agent",
195
- promptHint:
196
- "Call dispatch with list:true only when the operator asks about agents, workers, or the fleet; never use it to inventory direct tools.",
197
209
  },
198
210
  [ToolNames.Monitor]: {
199
211
  objective: "Inspect dispatched runs: state, recent events, receipts.",
@@ -226,7 +238,7 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
226
238
  },
227
239
  costLatency: "local_fast",
228
240
  promptHint:
229
- 'When the operator asks to see a dispatched agent ("show me the tester"), call panes with action="show" and the agent id. Utility panes are presets only; an arbitrary command is the operator\'s own /panes open.',
241
+ 'When the operator asks to see a dispatched agent ("show me the tester"), call panes(action="show", target=<agent id>).',
230
242
  },
231
243
  // RETRIEVE: network-class.
232
244
  [ToolNames.WebFetch]: {
@@ -252,7 +264,7 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
252
264
  },
253
265
  costLatency: "local_slow",
254
266
  promptHint:
255
- 'Use ask_user only when blocked on a decision the request does not answer; never ask about anything the operator already stated. One question per round in interview workflows, up to four tightly related questions otherwise, recommended option first. Finish with action="complete" and a compact decisions array before final prose. If cancelled, continue with defaults and do not ask again.',
267
+ 'Use ask_user only when blocked on a decision the request does not answer, never about something the operator already stated: one question per round in interviews, up to four related questions otherwise, recommended option first, then action="complete" with the decisions before final prose.',
256
268
  },
257
269
  // ARTIFACT: terminal writers.
258
270
  [ToolNames.Artifact]: {
@@ -264,15 +276,21 @@ const TOOL_METADATA: Readonly<Record<string, ToolMetadata>> = {
264
276
  },
265
277
  };
266
278
 
267
- /** Canonical, registry-owned prompt hints for an already-admitted tool set. */
268
- export function toolPromptHintsForNames(names: ReadonlyArray<ToolName>): ReadonlyArray<{ tool: string; hint: string }> {
269
- const seen = new Set<string>();
279
+ /** Canonical, role-aware prompt hints for an already-admitted tool set. */
280
+ export function toolPromptHintsForNames(
281
+ names: ReadonlyArray<ToolName>,
282
+ role: ToolPromptHintRole = "session",
283
+ ): ReadonlyArray<{ tool: string; hint: string }> {
284
+ const seenTools = new Set<string>();
285
+ const seenHints = new Set<string>();
270
286
  const hints: Array<{ tool: string; hint: string }> = [];
271
287
  for (const name of [...names].sort()) {
272
- if (seen.has(name)) continue;
273
- seen.add(name);
274
- const hint = TOOL_METADATA[name]?.promptHint?.trim();
275
- if (hint) hints.push({ tool: name, hint });
288
+ if (seenTools.has(name)) continue;
289
+ seenTools.add(name);
290
+ const hint = resolveToolPromptHint(TOOL_METADATA[name]?.promptHint, role);
291
+ if (!hint || seenHints.has(hint)) continue;
292
+ seenHints.add(hint);
293
+ hints.push({ tool: name, hint });
276
294
  }
277
295
  return hints;
278
296
  }
@@ -282,9 +300,21 @@ export function toolPromptHintsForNames(names: ReadonlyArray<ToolName>): Readonl
282
300
  // live panel (which has no registry) answer the fold question identically.
283
301
  function withBuiltinMetadata<T extends ToolSpec>(spec: T): T {
284
302
  const metadata = TOOL_METADATA[spec.name];
285
- return metadata
286
- ? withMetadata(spec, { ...metadata, presentation: toolPresentationPolicy(spec.name, undefined) })
287
- : spec;
303
+ if (!metadata) return spec;
304
+ // The read cap is a guardrail (`safety.limits.readBytesPerCall`) installed
305
+ // from settings after this module loads, so the table's import-time value
306
+ // is the default, not the operator's. Recompute the policy cap when the tool
307
+ // is registered; the drift check in policy.ts compares against the live cap
308
+ // and a settings file raising the read cap used to fail boot.
309
+ const resultSizePolicy =
310
+ spec.name === ToolNames.Read
311
+ ? observePolicy(readMaxBytes(), metadata.resultSizePolicy?.followUpHint ?? "")
312
+ : metadata.resultSizePolicy;
313
+ return withMetadata(spec, {
314
+ ...metadata,
315
+ ...(resultSizePolicy ? { resultSizePolicy } : {}),
316
+ presentation: toolPresentationPolicy(spec.name, undefined),
317
+ });
288
318
  }
289
319
 
290
320
  export function builtin<T extends ToolSpec>(spec: T, sourceInfo: ToolSourceInfo): T {
@@ -12,6 +12,12 @@ export const codeNavToolSurface = {
12
12
  description:
13
13
  "Navigate the indexed codewiki: mode=symbol finds files by symbol, path finds files by glob/regex/substring, entries lists likely entry points, outline lists file symbols, deps lists imports, and dependents lists importers. mode=wiki without query lists generated Markdown wiki pages; with query it resolves a page id/title and returns its summary plus a path to open with read. For Clio's bundled product docs use context scope=docs.",
14
14
  parameters: Type.Object({
15
+ source: Type.Optional(
16
+ StringEnum(["workspace", "clio"], {
17
+ description: "Code map source (default workspace).",
18
+ default: "workspace",
19
+ }),
20
+ ),
15
21
  mode: StringEnum(["symbol", "path", "entries", "outline", "deps", "dependents", "wiki"], {
16
22
  description: "Lookup mode.",
17
23
  }),
@@ -1,6 +1,8 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
- import { join, normalize } from "node:path";
2
+ import { isAbsolute, join, normalize, relative, resolve } from "node:path";
3
+ import { resolvePackageRoot } from "../../core/package-root.js";
3
4
  import { ToolNames } from "../../core/tool-names.js";
5
+ import { parseCodewikiRaw } from "../../domains/context/codewiki/artifact.js";
4
6
  import type { Codewiki, CodewikiFile, CodewikiSymbol } from "../../domains/context/codewiki/schema.js";
5
7
  import { listWikiPages } from "../../domains/context/wiki/layout.js";
6
8
  import { readWikiMeta } from "../../domains/context/wiki/meta.js";
@@ -22,6 +24,14 @@ import {
22
24
  import { loadCodewikiForTool, renderJson } from "./shared.js";
23
25
 
24
26
  const REGEX_SYNTAX_HINTS = /\.\*|\.\+|\^|\$|\\[dDwWsSbB]|\(\?:|\(\?=|\(\?!/;
27
+ const CLIO_CODEWIKI_RELATIVE_PATH = join("dist", "assets", "codewiki.json");
28
+
29
+ type CodeNavSource = "workspace" | "clio";
30
+
31
+ interface LoadedNavSource {
32
+ codewiki: Codewiki;
33
+ entryRoot: string | null;
34
+ }
25
35
 
26
36
  interface NavIndex {
27
37
  filesById: Map<string, CodewikiFile>;
@@ -42,6 +52,62 @@ interface NavPayload {
42
52
  }
43
53
 
44
54
  const navIndexCache = new WeakMap<Codewiki, NavIndex>();
55
+ let clioCodewikiCache: { packageRoot: string; codewiki: Codewiki } | null = null;
56
+
57
+ function packageRootResolvedPath(packageRoot: string, indexedPath: string): string {
58
+ const resolved = resolve(packageRoot, indexedPath);
59
+ const rel = relative(packageRoot, resolved);
60
+ if (
61
+ rel.length === 0 ||
62
+ rel === ".." ||
63
+ rel.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) ||
64
+ isAbsolute(rel)
65
+ ) {
66
+ throw new Error(`invalid package-root-relative path in bundled code map: ${indexedPath}`);
67
+ }
68
+ return resolved;
69
+ }
70
+
71
+ function packageRootResolvedCodewiki(packageRoot: string, codewiki: Codewiki): Codewiki {
72
+ return {
73
+ ...codewiki,
74
+ files: codewiki.files.map((file) => ({
75
+ ...file,
76
+ path: packageRootResolvedPath(packageRoot, file.path),
77
+ })),
78
+ };
79
+ }
80
+
81
+ function loadClioCodewikiForTool(): { ok: true; loaded: LoadedNavSource } | { ok: false; message: string } {
82
+ try {
83
+ const packageRoot = resolvePackageRoot();
84
+ if (clioCodewikiCache?.packageRoot === packageRoot) {
85
+ return { ok: true, loaded: { codewiki: clioCodewikiCache.codewiki, entryRoot: packageRoot } };
86
+ }
87
+ const artifactPath = join(packageRoot, CLIO_CODEWIKI_RELATIVE_PATH);
88
+ const parsed = parseCodewikiRaw(readFileSync(artifactPath, "utf8"));
89
+ if (!parsed) throw new Error("bundled artifact is not a valid codewiki");
90
+ const codewiki = packageRootResolvedCodewiki(packageRoot, parsed);
91
+ clioCodewikiCache = { packageRoot, codewiki };
92
+ return { ok: true, loaded: { codewiki, entryRoot: packageRoot } };
93
+ } catch (err) {
94
+ const message = err instanceof Error ? err.message : String(err);
95
+ return {
96
+ ok: false,
97
+ message: `code_nav: bundled Clio code map unavailable at ${CLIO_CODEWIKI_RELATIVE_PATH}: ${message}`,
98
+ };
99
+ }
100
+ }
101
+
102
+ async function loadNavSource(
103
+ source: CodeNavSource,
104
+ ): Promise<{ ok: true; loaded: LoadedNavSource } | { ok: false; message: string }> {
105
+ if (source === "clio") return loadClioCodewikiForTool();
106
+ const loaded = await loadCodewikiForTool();
107
+ return loaded.ok
108
+ ? { ok: true, loaded: { codewiki: loaded.codewiki, entryRoot: null } }
109
+ : { ok: false, message: loaded.message };
110
+ }
45
111
 
46
112
  function regexFromPattern(pattern: string): RegExp | null {
47
113
  if (pattern.startsWith("/") && pattern.lastIndexOf("/") > 0) {
@@ -73,7 +139,7 @@ function regexFromPattern(pattern: string): RegExp | null {
73
139
  return null;
74
140
  }
75
141
 
76
- function readPackageEntryPaths(cwd: string): Set<string> {
142
+ function readPackageEntryPaths(cwd: string, resolveFromRoot: boolean): Set<string> {
77
143
  const out = new Set<string>();
78
144
  const pkgPath = join(cwd, "package.json");
79
145
  if (!existsSync(pkgPath)) return out;
@@ -85,11 +151,15 @@ function readPackageEntryPaths(cwd: string): Set<string> {
85
151
  }
86
152
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return out;
87
153
  const pkg = parsed as Record<string, unknown>;
88
- if (typeof pkg.main === "string") out.add(normalizeEntryPath(pkg.main));
89
- if (typeof pkg.bin === "string") out.add(normalizeEntryPath(pkg.bin));
154
+ const add = (value: string): void => {
155
+ const normalized = normalizeEntryPath(value);
156
+ out.add(resolveFromRoot ? packageRootResolvedPath(cwd, normalized) : normalized);
157
+ };
158
+ if (typeof pkg.main === "string") add(pkg.main);
159
+ if (typeof pkg.bin === "string") add(pkg.bin);
90
160
  if (typeof pkg.bin === "object" && pkg.bin !== null && !Array.isArray(pkg.bin)) {
91
161
  for (const value of Object.values(pkg.bin)) {
92
- if (typeof value === "string") out.add(normalizeEntryPath(value));
162
+ if (typeof value === "string") add(value);
93
163
  }
94
164
  }
95
165
  return out;
@@ -243,9 +313,9 @@ function runPath(index: NavIndex, query: string, limit: number): NavPayload {
243
313
  };
244
314
  }
245
315
 
246
- function runEntries(index: NavIndex, limit: number): NavPayload {
247
- const cwd = process.cwd();
248
- const packageEntries = readPackageEntryPaths(cwd);
316
+ function runEntries(index: NavIndex, limit: number, entryRoot: string | null): NavPayload {
317
+ const cwd = entryRoot ?? process.cwd();
318
+ const packageEntries = readPackageEntryPaths(cwd, entryRoot !== null);
249
319
  const candidates = [...index.filesByPath.values()].filter(
250
320
  (file) => file.lang !== "config" && (file.role === "entry" || packageEntries.has(file.path)),
251
321
  );
@@ -488,10 +558,24 @@ function parseLimit(value: unknown, fallback: number): number {
488
558
  export const codeNavTool: ToolSpec = {
489
559
  ...codeNavToolSurface,
490
560
  async run(args, options): Promise<ToolResult> {
561
+ const rawSource = args.source;
562
+ if (rawSource !== undefined && rawSource !== "workspace" && rawSource !== "clio") {
563
+ return {
564
+ kind: "error",
565
+ message: `code_nav: source must be workspace or clio; got '${String(rawSource)}'`,
566
+ };
567
+ }
568
+ const source: CodeNavSource = rawSource === "clio" ? "clio" : "workspace";
491
569
  const mode = typeof args.mode === "string" ? args.mode : "";
492
- const loaded = await loadCodewikiForTool();
570
+ if (source === "clio" && mode === "wiki") {
571
+ return {
572
+ kind: "error",
573
+ message: "code_nav: source=clio does not provide mode=wiki; use context scope=docs for Clio documentation",
574
+ };
575
+ }
576
+ const loaded = await loadNavSource(source);
493
577
  if (!loaded.ok) return { kind: "error", message: loaded.message };
494
- const index = navIndexFor(loaded.codewiki);
578
+ const index = navIndexFor(loaded.loaded.codewiki);
495
579
  const query = typeof args.query === "string" ? args.query.trim() : "";
496
580
  const limit = parseLimit(args.limit, mode === "entries" ? DEFAULT_ENTRY_LIMIT : DEFAULT_LIMIT);
497
581
  const reservation = reserveObservation(OBSERVE_SELF_CAPS.codeNav, options);
@@ -506,15 +590,17 @@ export const codeNavTool: ToolSpec = {
506
590
  }
507
591
  const close = (nav: NavPayload | ToolResult): ToolResult => {
508
592
  if ("kind" in nav) return nav;
593
+ const next = source === "clio" && nav.next !== undefined ? `source=clio ${nav.next}` : nav.next;
594
+ const payload = next === nav.next ? nav.payload : { ...nav.payload, next };
509
595
  return finalizeObservation({
510
596
  tool: ToolNames.CodeNav,
511
597
  unit: "results",
512
598
  format: "json",
513
- output: renderJson(nav.payload),
599
+ output: renderJson(payload),
514
600
  shownCount: nav.shownCount,
515
601
  totalCount: nav.totalCount,
516
602
  truncated: nav.shownCount < nav.totalCount,
517
- ...(nav.next !== undefined ? { next: nav.next } : {}),
603
+ ...(next !== undefined ? { next } : {}),
518
604
  reservation,
519
605
  ...(options ? { options } : {}),
520
606
  });
@@ -527,7 +613,7 @@ export const codeNavTool: ToolSpec = {
527
613
  if (query.length === 0) return { kind: "error", message: "code_nav: mode=path requires query" };
528
614
  return close(runPath(index, query, limit));
529
615
  }
530
- if (mode === "entries") return close(runEntries(index, limit));
616
+ if (mode === "entries") return close(runEntries(index, limit, loaded.loaded.entryRoot));
531
617
  if (mode === "outline") {
532
618
  if (query.length === 0) return { kind: "error", message: "code_nav: mode=outline requires query path" };
533
619
  return close(runOutline(index, query, limit));
@@ -2,7 +2,7 @@
2
2
  * Scratch git worktrees for the compete dispatch topology.
3
3
  *
4
4
  * Each candidate builds in its own worktree on its own branch
5
- * (`clio/compete/<group>/<n>`), created from the repository HEAD under
5
+ * (`clio-coder/compete/<group>/<n>`), created from the repository HEAD under
6
6
  * `<root>/.clio-coder/worktrees/<group>/candidate-<n>`. The path sits inside the
7
7
  * project root because remote fleet nodes share the filesystem and doctor
8
8
  * preflight verifies path parity only for the project root; `.clio-coder/` is
@@ -127,8 +127,9 @@ export interface CompeteRunAdmission {
127
127
 
128
128
  const COMPETE_PARENT_SEGMENTS = [".clio-coder", "worktrees"] as const;
129
129
  const COMPETE_MANIFEST_FILE = ".clio-coder-compete-owner.json";
130
- const COMPETE_MANIFEST_KIND = "clio-compete-group";
131
- const COMPETE_COMMIT_IDENTITY = "clio-compete";
130
+ const COMPETE_MANIFEST_KIND = "clio-coder-compete-group";
131
+ const LEGACY_COMPETE_MANIFEST_KIND = "clio-compete-group";
132
+ const COMPETE_COMMIT_IDENTITY = "clio-coder-compete";
132
133
 
133
134
  const SAFE_GROUP = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
134
135
  const PROCESS_EXIT_GRACE_MS = 750;
@@ -324,7 +325,7 @@ function isCanonicalDirectoryAt(path: string): boolean {
324
325
  * `relative()` makes the decision by path segment, so `/group-a2` can never
325
326
  * be mistaken for a child of `/group-a` as it can with textual startsWith.
326
327
  */
327
- export function isCanonicalPathInside(parent: string, candidate: string): boolean {
328
+ function isCanonicalPathInside(parent: string, candidate: string): boolean {
328
329
  return isCanonicalWorktreePathInside(parent, candidate);
329
330
  }
330
331
 
@@ -333,7 +334,7 @@ function manifestFromUnknown(value: unknown): CompeteGroupManifest | null {
333
334
  const manifest = value as Record<string, unknown>;
334
335
  if (
335
336
  manifest.version !== 2 ||
336
- manifest.kind !== COMPETE_MANIFEST_KIND ||
337
+ (manifest.kind !== COMPETE_MANIFEST_KIND && manifest.kind !== LEGACY_COMPETE_MANIFEST_KIND) ||
337
338
  typeof manifest.root !== "string" ||
338
339
  typeof manifest.group !== "string" ||
339
340
  typeof manifest.token !== "string" ||
@@ -417,10 +418,14 @@ export function isGitRepository(root: string): boolean {
417
418
  }
418
419
  }
419
420
 
420
- function competeBranch(group: string, index: number): string {
421
+ function competeBranch(group: string, index: number, legacy = false): string {
421
422
  validateGroup(group);
422
423
  if (!Number.isInteger(index) || index < 1) throw new Error(`invalid compete candidate index ${index}`);
423
- return `clio/compete/${group}/${index}`;
424
+ return `${legacy ? "clio" : "clio-coder"}/compete/${group}/${index}`;
425
+ }
426
+
427
+ function competeBranchMatches(branch: string, group: string, index: number): boolean {
428
+ return branch === competeBranch(group, index) || branch === competeBranch(group, index, true);
424
429
  }
425
430
 
426
431
  /** Claim the group before creating a branch or candidate worktree. */
@@ -549,11 +554,7 @@ export function markCompeteGroupWinnerPreserved(
549
554
  * baseline is a parameter rather than HEAD so every candidate in a compete
550
555
  * transaction starts from the same approved state.
551
556
  */
552
- export function createCandidateWorktree(
553
- ownership: CompeteGroupOwnership,
554
- index: number,
555
- baseline: string,
556
- ): CandidateWorktree {
557
+ function createCandidateWorktree(ownership: CompeteGroupOwnership, index: number, baseline: string): CandidateWorktree {
557
558
  assertOwnership(ownership);
558
559
  const branch = competeBranch(ownership.group, index);
559
560
  const path = join(ownership.directory, `candidate-${index}`);
@@ -589,7 +590,7 @@ export async function createCandidateWorktreeMapped(
589
590
  branch,
590
591
  base: baseline,
591
592
  path,
592
- label: `clio compete ${ownership.group} candidate ${index}`,
593
+ label: `clio-coder compete ${ownership.group} candidate ${index}`,
593
594
  focus: false,
594
595
  })
595
596
  .catch(() => null);
@@ -652,7 +653,7 @@ function exactGroupBranches(root: string, group: string): string[] {
652
653
  const parts = branch.split("/");
653
654
  return (
654
655
  parts.length === 4 &&
655
- parts[0] === "clio" &&
656
+ (parts[0] === "clio-coder" || parts[0] === "clio") &&
656
657
  parts[1] === "compete" &&
657
658
  parts[2] === group &&
658
659
  /^\d+$/.test(parts[3] ?? "")
@@ -660,6 +661,16 @@ function exactGroupBranches(root: string, group: string): string[] {
660
661
  });
661
662
  }
662
663
 
664
+ /** Resolve a current candidate branch while retaining indefinite read support for released refs. */
665
+ export function competeBranchForCandidate(root: string, group: string, index: number): string {
666
+ const branches = exactGroupBranches(root, group);
667
+ return (
668
+ branches.find((branch) => branch === competeBranch(group, index)) ??
669
+ branches.find((branch) => branch === competeBranch(group, index, true)) ??
670
+ competeBranch(group, index)
671
+ );
672
+ }
673
+
663
674
  function removeRegisteredWorktree(root: string, path: string): void {
664
675
  try {
665
676
  git(root, ["worktree", "remove", "--force", path]);
@@ -676,10 +687,9 @@ function removeCandidateWorktree(
676
687
  ): void {
677
688
  assertOwnership(ownership);
678
689
  const expectedPath = join(ownership.directory, `candidate-${worktree.index}`);
679
- const expectedBranch = competeBranch(ownership.group, worktree.index);
680
690
  if (
681
691
  resolve(worktree.path) !== resolve(expectedPath) ||
682
- worktree.branch !== expectedBranch ||
692
+ !competeBranchMatches(worktree.branch, ownership.group, worktree.index) ||
683
693
  !isCanonicalPathInside(ownership.directory, worktree.path)
684
694
  ) {
685
695
  throw new Error(`candidate ${worktree.index} does not belong to compete group ${ownership.group}`);
@@ -819,8 +829,8 @@ export function settleRecoveredCompeteDecision(
819
829
  cleanupWorktreeGroup(ownership);
820
830
  return null;
821
831
  }
822
- const winnerBranch = competeBranch(group, winnerIndex);
823
832
  const branches = exactGroupBranches(ownership.root, group);
833
+ const winnerBranch = competeBranchForCandidate(ownership.root, group, winnerIndex);
824
834
  const winnerPath = join(ownership.directory, `candidate-${winnerIndex}`);
825
835
  if (
826
836
  !branches.includes(winnerBranch) ||