@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
@@ -1,3 +1,4 @@
1
+ import { existsSync } from "node:fs";
1
2
  import {
2
3
  asDirectoryPathBoundary,
3
4
  normalizePathBoundaryEntry,
@@ -14,6 +15,7 @@ const POSIX_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])((?:\/[\w.~+-]+)+)/gu;
14
15
  const WINDOWS_ABSOLUTE_TOKEN_RE = /(?:^|[\s("'])([A-Za-z]:[\\/][^\s"']+)/gu;
15
16
  const BACKSLASH_PATH_RE = /\b[A-Za-z_.-][\w.-]*\\(?:(?:[\w.-]+\\)+[\w.-]+|[\w-]+\.[A-Za-z0-9]{1,8})\b/gu;
16
17
  const DOUBLE_SEPARATOR_PATH_RE = /\b[\w.-]+\/\/[\w./-]+/gu;
18
+ const PARENT_PREFIX_RE = /^(?:\.\.\/)+/u;
17
19
 
18
20
  export type DispatchPathProvenanceKind = "declared" | "derived" | "inferred";
19
21
  export type DispatchPathConfidence = "certain" | "high" | "medium" | "low";
@@ -49,11 +51,24 @@ export interface DispatchPathScopeProvenance {
49
51
  writeBoundaries: DispatchPathProvenanceEntry[];
50
52
  }
51
53
 
54
+ /**
55
+ * A prose token whose leading "../" run inference had to reinterpret, kept so
56
+ * the notice can name the raw token beside the scope it produced. `resolved` is
57
+ * the repository path the stripped remainder anchored to, or null when nothing
58
+ * under the dispatch root carried it and the token took no part in scope.
59
+ */
60
+ export interface DispatchInferredParentToken {
61
+ token: string;
62
+ resolved: string | null;
63
+ source: "task" | "briefing";
64
+ }
65
+
52
66
  export interface DispatchPathScope {
53
67
  source: "declared" | "inferred";
54
68
  workingContextPaths: ReadonlyArray<string>;
55
69
  writeBoundaries: ReadonlyArray<string>;
56
70
  inferredOnlyPaths: ReadonlyArray<string>;
71
+ parentTokens: ReadonlyArray<DispatchInferredParentToken>;
57
72
  provenance: DispatchPathScopeProvenance;
58
73
  }
59
74
 
@@ -64,15 +79,15 @@ export interface DeclaredScopeReplacementNotice {
64
79
  message: string;
65
80
  }
66
81
 
67
- export interface LegacyScopeInferenceNotice {
68
- code: "legacy_scope_inferred" | "legacy_scope_empty";
82
+ export interface InferredScopeParentTokenNotice {
83
+ code: "legacy_scope_inferred";
69
84
  level: "warning";
70
85
  paths: ReadonlyArray<{
71
86
  path: string;
72
- policy: "working-context" | "write-boundary";
73
- provenance: DispatchPathProvenanceKind;
74
- source: DispatchPathProvenanceSource;
75
- confidence: DispatchPathConfidence;
87
+ policy: "working-context";
88
+ provenance: "inferred";
89
+ source: "task" | "briefing";
90
+ confidence: "low";
76
91
  }>;
77
92
  message: string;
78
93
  }
@@ -152,19 +167,78 @@ export function declaredIntentPathProvenance(input: {
152
167
  return sortedEntries(entries);
153
168
  }
154
169
 
155
- function inferredPaths(req: Pick<DispatchRequest, "task" | "briefing">): string[] {
170
+ /** One prose token read as a repository path, as an anchored "../" quote, or as neither. */
171
+ type InferredPathToken =
172
+ | { kind: "token"; token: string }
173
+ | { kind: "anchored"; token: string; resolved: string }
174
+ | { kind: "dropped"; token: string };
175
+
176
+ function inferredPaths(
177
+ req: Pick<DispatchRequest, "task" | "briefing">,
178
+ root: string,
179
+ ): { paths: string[]; droppedTokens: string[] } {
156
180
  const paths = new Set<string>();
181
+ const droppedTokens = new Set<string>();
157
182
  const text = `${req.task}\n${req.briefing ?? ""}`;
158
183
  for (const match of text.matchAll(DISPATCH_PATH_TOKEN_RE)) {
159
- const token = inferredPathToken(match[0]);
184
+ const inferred = inferredPathToken(match[0], root);
185
+ if (inferred.kind === "dropped") {
186
+ droppedTokens.add(inferred.token);
187
+ continue;
188
+ }
189
+ const token = inferred.kind === "anchored" ? inferred.resolved : inferred.token;
160
190
  if (token.startsWith("http://") || token.startsWith("https://")) continue;
161
191
  paths.add(token);
162
192
  }
163
- return [...paths];
193
+ return { paths: [...paths], droppedTokens: [...droppedTokens] };
164
194
  }
165
195
 
166
- function inferredPathToken(token: string): string {
167
- return token.replace(/\.+$/u, "");
196
+ /**
197
+ * A leading "./" is how prose quotes an import specifier ("./parser.js"); it
198
+ * names the same repository path without the prefix, and the boundary grammar
199
+ * would otherwise refuse the whole dispatch for a dot segment.
200
+ *
201
+ * A leading "../" run is that same quote copied out of a file whose location
202
+ * this function never sees. Both callers, strictInferredPaths and
203
+ * inferredPaths, are handed the task or briefing text and nothing else, so the
204
+ * origin the run is measured against is unknowable here and no arithmetic on
205
+ * the run's length can decide whether it escapes. What is decidable is whether
206
+ * the remainder names something under the dispatch root, so the run is
207
+ * stripped and the remainder probed: "../src/store.js" quoted out of
208
+ * test/store.test.ts anchors to src/store.js, and "../../../etc/passwd"
209
+ * anchors to nothing in a checkout that holds no etc/passwd.
210
+ *
211
+ * That is a deliberate reading of issue #266, recorded here because it is the
212
+ * one place the choice is made. Criterion 1 ("never rejects the dispatch") and
213
+ * criterion 2 ("a prose token whose .. segments would leave the repository
214
+ * root is still refused") ask for opposite answers on a leading run, and only
215
+ * criterion 1 is decidable without an origin, so a run that names nothing is
216
+ * dropped rather than refused. Neither outcome widens authority: an inferred
217
+ * path selects project rules and compiles context but never becomes a write
218
+ * boundary, and an anchored remainder carries no ".." so path.resolve keeps it
219
+ * under the root. Both outcomes are named to the operator by
220
+ * inferredScopeParentTokenNotice, so the reinterpretation is never silent.
221
+ *
222
+ * The probe costs one existsSync per "../"-leading token (3 microseconds on a
223
+ * hit and 2 on a miss over 5,000 warm calls on this checkout) and no stat at
224
+ * all for the ordinary token, which the grammar matches dozens of per dispatch
225
+ * (the 27 tokens per task measured for REPORTABLE_OMITTED_PATH_RE below).
226
+ *
227
+ * A ".." or "." outside the leading run ("../src/../../b.ts", "../src/./b.ts")
228
+ * walks back out of a segment it already anchored, which is decidable without
229
+ * an origin, so it falls through to the boundary grammar and keeps its
230
+ * refusal, as does a run that leaves no remainder at all ("../..").
231
+ */
232
+ function inferredPathToken(raw: string, root: string): InferredPathToken {
233
+ const token = raw.replace(/^\.\//u, "").replace(/\.+$/u, "");
234
+ const parents = PARENT_PREFIX_RE.exec(token)?.[0];
235
+ if (parents === undefined) return { kind: "token", token };
236
+ const rest = token.slice(parents.length);
237
+ const segments = rest.split("/");
238
+ if (rest.length === 0 || segments.includes("..") || segments.includes(".")) return { kind: "token", token };
239
+ return existsSync(resolvePathBoundary(root, rest))
240
+ ? { kind: "anchored", token, resolved: rest }
241
+ : { kind: "dropped", token };
168
242
  }
169
243
 
170
244
  function failMalformedText(text: string, source: "task" | "briefing"): void {
@@ -201,18 +275,31 @@ function failMalformedText(text: string, source: "task" | "briefing"): void {
201
275
  function strictInferredPaths(
202
276
  text: string,
203
277
  source: "task" | "briefing",
204
- ): Array<{ path: string; evidence: DispatchPathProvenanceEvidence }> {
278
+ root: string,
279
+ ): {
280
+ paths: Array<{ path: string; evidence: DispatchPathProvenanceEvidence }>;
281
+ parentTokens: DispatchInferredParentToken[];
282
+ } {
205
283
  failMalformedText(text, source);
206
284
  const withoutUrls = text.replace(HTTP_URL_RE, (url) => " ".repeat(url.length));
207
285
  const evidence: DispatchPathProvenanceEvidence =
208
286
  source === "task"
209
287
  ? { provenance: "inferred", source, confidence: "medium", reason: "task_path_token" }
210
288
  : { provenance: "inferred", source, confidence: "low", reason: "briefing_path_token" };
211
- const result: Array<{ path: string; evidence: DispatchPathProvenanceEvidence }> = [];
289
+ const paths: Array<{ path: string; evidence: DispatchPathProvenanceEvidence }> = [];
290
+ const parentTokens: DispatchInferredParentToken[] = [];
212
291
  for (const match of withoutUrls.matchAll(DISPATCH_PATH_TOKEN_RE)) {
213
- const token = inferredPathToken(match[0]);
292
+ const inferred = inferredPathToken(match[0], root);
293
+ if (inferred.kind === "dropped") {
294
+ parentTokens.push({ token: inferred.token, resolved: null, source });
295
+ continue;
296
+ }
297
+ if (inferred.kind === "anchored") {
298
+ parentTokens.push({ token: inferred.token, resolved: inferred.resolved, source });
299
+ }
300
+ const token = inferred.kind === "anchored" ? inferred.resolved : inferred.token;
214
301
  try {
215
- result.push({ path: normalizePathBoundaryEntry(token), evidence });
302
+ paths.push({ path: normalizePathBoundaryEntry(token), evidence });
216
303
  } catch (error) {
217
304
  const code =
218
305
  error instanceof PathBoundaryError && error.code === "absolute"
@@ -226,7 +313,7 @@ function strictInferredPaths(
226
313
  );
227
314
  }
228
315
  }
229
- return result;
316
+ return { paths, parentTokens };
230
317
  }
231
318
 
232
319
  function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
@@ -242,13 +329,21 @@ function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
242
329
  addProvenance(workingEntries, root, writeEvidence);
243
330
  addProvenance(writeEntries, asDirectoryPathBoundary(resolvePathBoundary(cwd, root)), writeEvidence);
244
331
  }
245
- for (const candidate of strictInferredPaths(req.task, "task")) {
246
- addProvenance(workingEntries, candidate.path, candidate.evidence);
247
- }
332
+ // One map across both fields, first field winning: an orchestrator that
333
+ // restates the file it is asking about quotes the same specifier in the task
334
+ // and in the briefing, and the notice must name it once rather than spend two
335
+ // of its twelve render slots on the same token.
336
+ const parentTokens = new Map<string, DispatchInferredParentToken>();
337
+ const recordParentTokens = (entries: ReadonlyArray<DispatchInferredParentToken>): void => {
338
+ for (const entry of entries) if (!parentTokens.has(entry.token)) parentTokens.set(entry.token, entry);
339
+ };
340
+ const taskScope = strictInferredPaths(req.task, "task", cwd);
341
+ for (const candidate of taskScope.paths) addProvenance(workingEntries, candidate.path, candidate.evidence);
342
+ recordParentTokens(taskScope.parentTokens);
248
343
  if (req.briefing !== undefined) {
249
- for (const candidate of strictInferredPaths(req.briefing, "briefing")) {
250
- addProvenance(workingEntries, candidate.path, candidate.evidence);
251
- }
344
+ const briefingScope = strictInferredPaths(req.briefing, "briefing", cwd);
345
+ for (const candidate of briefingScope.paths) addProvenance(workingEntries, candidate.path, candidate.evidence);
346
+ recordParentTokens(briefingScope.parentTokens);
252
347
  }
253
348
  const workingContext = [...workingEntries.values()].map((entry) => ({
254
349
  path: entry.path,
@@ -263,6 +358,7 @@ function legacyPathScope(req: DispatchRequest, cwd: string): DispatchPathScope {
263
358
  workingContextPaths: workingContext.map((entry) => entry.path),
264
359
  writeBoundaries: writeBoundaries.map((entry) => entry.path),
265
360
  inferredOnlyPaths: [],
361
+ parentTokens: [...parentTokens.values()],
266
362
  provenance: {
267
363
  version: 1,
268
364
  mode: "legacy-inferred",
@@ -279,7 +375,15 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
279
375
 
280
376
  const declaredProvenance = declaredIntentPathProvenance(req.intent);
281
377
  const declaredPaths = declaredProvenance.map((entry) => entry.path);
282
- const inferredOnlyPaths = inferredPaths(req).filter((candidate) => !pathBoundaryCovers(declaredPaths, candidate));
378
+ const inferred = inferredPaths(req, cwd);
379
+ // A dropped token cannot be covered by a declaration, so it is always listed.
380
+ // An anchored one is listed under the path it anchored to and goes through
381
+ // the same coverage test the notice has always applied, which is why
382
+ // "../src/store.js" under a declared "src/" stops reading as an omitted path.
383
+ const inferredOnlyPaths = [
384
+ ...inferred.paths.filter((candidate) => !pathBoundaryCovers(declaredPaths, candidate)),
385
+ ...inferred.droppedTokens,
386
+ ];
283
387
  const writeEvidence = DECLARED_EVIDENCE.writeRoots;
284
388
  const writeBoundaries = req.intent.writeRoots.map((root) => ({
285
389
  path: resolvePathBoundary(cwd, root),
@@ -290,6 +394,11 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
290
394
  workingContextPaths: declaredPaths,
291
395
  writeBoundaries: writeBoundaries.map((entry) => entry.path),
292
396
  inferredOnlyPaths,
397
+ // Empty on purpose: the declaration is the scope here, so no "../" token
398
+ // changed what the worker sees and there is nothing for the legacy notice
399
+ // to report. A dropped one still reaches the operator through
400
+ // inferredOnlyPaths above.
401
+ parentTokens: [],
293
402
  provenance: {
294
403
  version: 1,
295
404
  mode: "declared",
@@ -299,72 +408,113 @@ export function resolveDispatchPathScope(req: DispatchRequest): DispatchPathScop
299
408
  };
300
409
  }
301
410
 
411
+ /**
412
+ * The prose token grammar also matches version numbers, ratios, and Latin
413
+ * abbreviations ("0.5", "v24.9", "e.g", "dead/raw"). Those never select a rule
414
+ * or a boundary, so the replacement notice names only tokens that read as
415
+ * repository paths: a segment with a source or document file extension, or
416
+ * a trailing directory separator. Method names (`Store.fromText`, `store.set`)
417
+ * share the dotted shape and are excluded by the extension list. A live three-task dispatch printed 27
418
+ * "omitted paths" per task, most of them numbers, three times over.
419
+ */
420
+ const REPORTABLE_OMITTED_PATH_RE =
421
+ /\.(?:[cm]?[jt]sx?|json|ya?ml|md|txt|py|go|rs|c|h|cc|cpp|hpp|java|rb|sh|toml|css|html|sql|lock)(?:\/|$)|\/$/u;
422
+ const OMITTED_PATH_REPORT_CAP = 12;
423
+
424
+ /** Omitted prose paths worth telling the operator about, capped for the transcript. */
425
+ function reportableOmittedPaths(scope: DispatchPathScope): string[] {
426
+ return scope.inferredOnlyPaths.filter((path) => REPORTABLE_OMITTED_PATH_RE.test(path));
427
+ }
428
+
429
+ function renderOmittedPaths(paths: ReadonlyArray<string>): string {
430
+ if (paths.length <= OMITTED_PATH_REPORT_CAP) return paths.join(", ");
431
+ return `${paths.slice(0, OMITTED_PATH_REPORT_CAP).join(", ")} and ${paths.length - OMITTED_PATH_REPORT_CAP} more`;
432
+ }
433
+
302
434
  /** Render the named diagnostic for the declared-scope replacement tradeoff. */
303
435
  export function declaredScopeReplacementDiagnostic(scope: DispatchPathScope): string | null {
304
- if (scope.source !== "declared" || scope.inferredOnlyPaths.length === 0) return null;
305
- return `typed_scope_replaced_inferred_paths: typed intent omitted prose-inferred paths ${scope.inferredOnlyPaths.join(
306
- ", ",
436
+ if (scope.source !== "declared") return null;
437
+ const omitted = reportableOmittedPaths(scope);
438
+ if (omitted.length === 0) return null;
439
+ return `typed_scope_replaced_inferred_paths: typed intent omitted prose-inferred paths ${renderOmittedPaths(
440
+ omitted,
307
441
  )}; those paths did not select project rules or expand worker authority`;
308
442
  }
309
443
 
310
444
  /** Render the interactive warning for the declared-scope replacement tradeoff. */
311
445
  export function declaredScopeReplacementNotice(scope: DispatchPathScope): DeclaredScopeReplacementNotice | null {
312
- if (scope.source !== "declared" || scope.inferredOnlyPaths.length === 0) return null;
313
- const omittedPaths = [...scope.inferredOnlyPaths];
446
+ if (scope.source !== "declared") return null;
447
+ const omittedPaths = reportableOmittedPaths(scope);
448
+ if (omittedPaths.length === 0) return null;
314
449
  return {
315
450
  code: "typed_scope_replaced_inferred_paths",
316
451
  level: "warning",
317
452
  omittedPaths,
318
- message: `[dispatch scope] typed intent replaced prose path inference; omitted paths: ${omittedPaths.join(
319
- ", ",
453
+ message: `[dispatch scope] typed intent replaced prose path inference; omitted paths: ${renderOmittedPaths(
454
+ omittedPaths,
320
455
  )}. Those paths did not select project rules or expand worker authority.`,
321
456
  };
322
457
  }
323
458
 
324
- function legacyNoticePaths(scope: DispatchPathScope): LegacyScopeInferenceNotice["paths"] {
325
- const paths: Array<LegacyScopeInferenceNotice["paths"][number]> = [];
326
- for (const [policy, entries] of [
327
- ["working-context", scope.provenance.workingContextPaths],
328
- ["write-boundary", scope.provenance.writeBoundaries],
329
- ] as const) {
330
- for (const entry of entries) {
331
- for (const evidence of entry.evidence) {
332
- paths.push({
333
- path: entry.path,
334
- policy,
335
- provenance: evidence.provenance,
336
- source: evidence.source,
337
- confidence: evidence.confidence,
338
- });
339
- }
340
- }
341
- }
342
- return paths;
459
+ /**
460
+ * A reinterpreted "../" token is the one legacy-mode scope fact worth the
461
+ * transcript. It fires only where a leading "../" run made inference choose
462
+ * between a path the prose never literally spelled and no path at all, which
463
+ * before this release failed the whole dispatch, so unlike a per-dispatch
464
+ * inference notice it cannot warn on the ordinary case that
465
+ * `publishDispatchPathScope` deliberately keeps quiet. The anchored token earns
466
+ * the line more than the dropped one: dropping subtracts from scope, while
467
+ * anchoring puts "src/store.js" in working context because prose said
468
+ * "../src/store.js", and a rewrite the operator cannot see is one nobody can
469
+ * check.
470
+ *
471
+ * Declared mode records none. The declaration is the scope there, and a prose
472
+ * token that never entered it is already the subject of
473
+ * `declaredScopeReplacementNotice`. That notice filters by
474
+ * REPORTABLE_OMITTED_PATH_RE, so a declared-mode drop of "../data/blob.bin" or
475
+ * "../src/helper" is in fact named nowhere; that is the accepted cost of not
476
+ * spending a second per-dispatch notice on a token that took no part in a scope
477
+ * the intent had already fixed.
478
+ *
479
+ * The legacy list is not filtered by REPORTABLE_OMITTED_PATH_RE, because the
480
+ * "../" prefix is itself the filter: the version numbers, ratios, and Latin
481
+ * abbreviations that filter exists for ("0.5", "v24.9", "e.g", "4/10") cannot
482
+ * carry one.
483
+ *
484
+ * Both notices render one `<raw token> -> <anchored path or "dropped">` pair
485
+ * per entry, under the same twelve-entry cap the replacement notice uses.
486
+ */
487
+ function renderParentTokens(tokens: ReadonlyArray<DispatchInferredParentToken>): string {
488
+ return renderOmittedPaths(tokens.map((entry) => `${entry.token} -> ${entry.resolved ?? "dropped"}`));
343
489
  }
344
490
 
345
- /** Render the operator-visible warning for a legacy scope resolution. */
346
- export function legacyScopeInferenceNotice(scope: DispatchPathScope): LegacyScopeInferenceNotice | null {
347
- if (scope.source !== "inferred") return null;
348
- const paths = legacyNoticePaths(scope);
349
- if (paths.length === 0) {
350
- return {
351
- code: "legacy_scope_empty",
352
- level: "warning",
353
- paths,
354
- message:
355
- "[dispatch scope] legacy dispatch has no declared intent and inferred no policy-bearing paths. Path-scoped rules received no inferred match input, and worker authority did not expand.",
356
- };
357
- }
358
- const rendered = paths
359
- .map(
360
- (entry) =>
361
- `${entry.policy} ${entry.path} (provenance=${entry.provenance} source=${entry.source} confidence=${entry.confidence})`,
362
- )
363
- .join("; ");
491
+ /** Render the named diagnostic for prose tokens whose leading "../" run was reinterpreted. */
492
+ export function inferredScopeParentTokenDiagnostic(scope: DispatchPathScope): string | null {
493
+ const tokens = scope.parentTokens;
494
+ if (tokens.length === 0) return null;
495
+ return `legacy_scope_inferred: prose inference resolved path tokens carrying a leading '../' run against the dispatch root ${renderParentTokens(
496
+ tokens,
497
+ )}; an anchored token selects project rules without expanding worker authority and a dropped one took no part in scope`;
498
+ }
499
+
500
+ /** Render the interactive warning for prose tokens whose leading "../" run was reinterpreted. */
501
+ export function inferredScopeParentTokenNotice(scope: DispatchPathScope): InferredScopeParentTokenNotice | null {
502
+ const tokens = scope.parentTokens;
503
+ if (tokens.length === 0) return null;
364
504
  return {
365
505
  code: "legacy_scope_inferred",
366
506
  level: "warning",
367
- paths,
368
- message: `[dispatch scope] legacy dispatch resolved policy-bearing scope without declared intent: ${rendered}. Review this scope before execution.`,
507
+ // Every entry names the raw prose token, the one spelling both outcomes
508
+ // share; the message carries what each one resolved to.
509
+ paths: tokens.map((entry) => ({
510
+ path: entry.token,
511
+ policy: "working-context",
512
+ provenance: "inferred",
513
+ source: entry.source,
514
+ confidence: "low",
515
+ })),
516
+ message: `[dispatch scope] prose inference resolved path tokens carrying a leading '../' run against the dispatch root: ${renderParentTokens(
517
+ tokens,
518
+ )}. An anchored token selects project rules without expanding worker authority; a dropped one took no part in scope.`,
369
519
  };
370
520
  }
@@ -61,9 +61,9 @@ function completedReroutes(
61
61
 
62
62
  function requestedNodeId(req: DispatchRequest, settings: Readonly<ClioSettings> | undefined): string | null {
63
63
  if (req.node !== undefined && req.node.trim().length > 0) return req.node.trim();
64
- const workers = settings?.workers;
64
+ const workers = settings?.fleet;
65
65
  if (!workers) return null;
66
- const profileName = req.workerProfile ?? workers.agentBindings?.[req.agentId];
66
+ const profileName = req.workerProfile ?? workers.agentProfiles?.[req.agentId];
67
67
  if (!profileName) return null;
68
68
  const pin = workers.profiles?.[profileName]?.node;
69
69
  return pin !== undefined && pin.trim().length > 0 ? pin.trim() : null;
@@ -49,7 +49,7 @@ function canonicalJson(value: unknown): string {
49
49
  throw new Error(`response schema digest cannot represent ${typeof value}`);
50
50
  }
51
51
 
52
- export function canonicalResponseSchemaDigest(schema: Record<string, unknown>): string {
52
+ function canonicalResponseSchemaDigest(schema: Record<string, unknown>): string {
53
53
  return createHash("sha256").update(canonicalJson(schema), "utf8").digest("hex");
54
54
  }
55
55
 
@@ -123,7 +123,7 @@ export const RECEIPT_INTEGRITY_FIELD_COVERAGE = {
123
123
  dynamicHash: true,
124
124
  promptSignature: true,
125
125
  toolSignature: true,
126
- clioVersion: true,
126
+ clioCoderVersion: true,
127
127
  piMonoVersion: true,
128
128
  platform: true,
129
129
  nodeVersion: true,
@@ -172,8 +172,14 @@ function selectedReceiptFields(
172
172
  return result;
173
173
  }
174
174
 
175
- function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft): Record<string, unknown> {
175
+ function receiptDigestFields(receipt: RunReceipt | RunReceiptDraft, legacyNaming = false): Record<string, unknown> {
176
176
  const result = selectedReceiptFields(receipt, RECEIPT_FIELDS);
177
+ if (legacyNaming) {
178
+ const source = receipt as unknown as Record<string, unknown>;
179
+ const version = source.clioVersion ?? source.clioCoderVersion;
180
+ delete result.clioCoderVersion;
181
+ if (version !== undefined) result.clioVersion = version;
182
+ }
177
183
  result.briefing = receipt.briefing ?? null;
178
184
  result.outcomeCode = receipt.outcomeCode ?? null;
179
185
  result.steering = receipt.steering ?? null;
@@ -227,24 +233,29 @@ function ledgerDigestFields(envelope: RunEnvelope): Record<string, unknown> {
227
233
  };
228
234
  }
229
235
 
230
- function integrityPayload(receipt: RunReceipt | RunReceiptDraft, envelope: RunEnvelope): Record<string, unknown> {
236
+ function integrityPayload(
237
+ receipt: RunReceipt | RunReceiptDraft,
238
+ envelope: RunEnvelope,
239
+ legacyNaming = false,
240
+ ): Record<string, unknown> {
231
241
  return {
232
- contract: "clio.runReceipt.integrity",
242
+ contract: legacyNaming ? "clio.runReceipt.integrity" : "clio-coder.runReceipt.integrity",
233
243
  version: RUN_RECEIPT_INTEGRITY_VERSION,
234
244
  sources: ["receipt", "run-ledger"],
235
- receipt: receiptDigestFields(receipt),
245
+ receipt: receiptDigestFields(receipt, legacyNaming),
236
246
  ledger: ledgerDigestFields(envelope),
237
247
  };
238
248
  }
239
249
 
240
- export function computeReceiptIntegrity(
250
+ function computeReceiptIntegrity(
241
251
  receipt: RunReceipt | RunReceiptDraft,
242
252
  envelope: RunEnvelope,
253
+ legacyNaming = false,
243
254
  ): RunReceiptIntegrity {
244
255
  return {
245
256
  version: RUN_RECEIPT_INTEGRITY_VERSION,
246
257
  algorithm: RUN_RECEIPT_INTEGRITY_ALGORITHM,
247
- digest: sha256(canonicalJson(integrityPayload(receipt, envelope))),
258
+ digest: sha256(canonicalJson(integrityPayload(receipt, envelope, legacyNaming))),
248
259
  };
249
260
  }
250
261
 
@@ -385,7 +396,8 @@ export function verifyReceiptIntegrity(receipt: RunReceipt, envelope: RunEnvelop
385
396
  return { ok: false, reason: `ledger mismatch: ${mismatch}` };
386
397
  }
387
398
  const expected = computeReceiptIntegrity(receipt, envelope);
388
- if (expected.digest !== receipt.integrity.digest) {
399
+ const legacyExpected = computeReceiptIntegrity(receipt, envelope, true);
400
+ if (expected.digest !== receipt.integrity.digest && legacyExpected.digest !== receipt.integrity.digest) {
389
401
  return { ok: false, reason: "integrity mismatch" };
390
402
  }
391
403
  return { ok: true };
@@ -599,31 +599,8 @@ export function getDispatchReservation(ownerId: string): DispatchReservationReco
599
599
  return record ? copyRecord(record) : null;
600
600
  }
601
601
 
602
- export function listDispatchReservations(): ReadonlyArray<DispatchReservationRecord> {
603
- return readStore();
604
- }
605
-
606
602
  export function reservedBudgetUsd(): number {
607
603
  return readStore()
608
604
  .filter((record) => record.status === "active")
609
605
  .reduce((sum, record) => sum + outstandingBudget(record), 0);
610
606
  }
611
-
612
- export function reservedCapacity(): {
613
- globalSlots: number;
614
- nodeSlots: Readonly<Record<string, number>>;
615
- endpointSlots: Readonly<Record<string, number>>;
616
- } {
617
- let globalSlots = 0;
618
- const nodeSlots: Record<string, number> = {};
619
- const endpointSlots: Record<string, number> = {};
620
- for (const record of readStore().filter((entry) => entry.status === "active")) {
621
- const allocation = reservationAllocation(outstandingTasks(record));
622
- globalSlots += allocation.globalSlots;
623
- for (const [nodeId, count] of Object.entries(allocation.nodeSlots))
624
- nodeSlots[nodeId] = (nodeSlots[nodeId] ?? 0) + count;
625
- for (const [endpointKey, count] of Object.entries(allocation.endpointSlots))
626
- endpointSlots[endpointKey] = (endpointSlots[endpointKey] ?? 0) + count;
627
- }
628
- return { globalSlots, nodeSlots, endpointSlots };
629
- }
@@ -597,7 +597,7 @@ function readinessHashProjection(report: RouteReadinessReport): readonly [boolea
597
597
  * `decisionDurationMs`, which is a measurement of the decision rather than an
598
598
  * input to it, so a replay on a faster machine still reproduces the hash.
599
599
  */
600
- export function routeDecisionHash(input: RouteDecisionInput): string {
600
+ function routeDecisionHash(input: RouteDecisionInput): string {
601
601
  // Arrays give every field an explicit position, so native JSON serialization
602
602
  // is deterministic without recursively sorting hundreds of short-lived
603
603
  // objects at the maximum universe bound. Candidate identity uses the same
@@ -137,7 +137,7 @@ function retireHistory(path: string, version: unknown): void {
137
137
  const retired = `${path}.v${String(version)}.${stamp}.retired`;
138
138
  renameSync(path, retired);
139
139
  process.stderr.write(
140
- `[clio:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
140
+ `[clio-coder:dispatch] route history v${String(version)} is retired; starting empty at v${ROUTE_HISTORY_VERSION}. Prior observations: ${retired}\n`,
141
141
  );
142
142
  }
143
143
 
@@ -146,7 +146,7 @@ function rate(values: ReadonlyArray<boolean>, fallback = 0): number {
146
146
  }
147
147
 
148
148
  /** Conservative 95% Wilson lower confidence bound for a Bernoulli success rate. */
149
- export function wilsonLowerBound(successes: number, observations: number, z = 1.96): number {
149
+ function wilsonLowerBound(successes: number, observations: number, z = 1.96): number {
150
150
  if (observations <= 0) return 0;
151
151
  const proportion = successes / observations;
152
152
  const z2 = z * z;
@@ -90,31 +90,3 @@ export function evaluateRouteReadiness(input: RouteReadinessInput): RouteReadine
90
90
  labelsNeeded: Math.max(0, MINIMUM_ACTIVE_QUALITY_LABELS - estimate.qualityLabeledCount),
91
91
  };
92
92
  }
93
-
94
- /**
95
- * Human-readable one-liners for a refusal message. The wording names the
96
- * missing evidence, so an operator who sees an active refusal can tell whether
97
- * to wait for measurements or to fix a stale fact.
98
- */
99
- export function describeReadinessGap(gap: ReadinessGap): string {
100
- switch (gap) {
101
- case "hard-constraint-validity-below-one":
102
- return "hard-constraint evaluation was not consistently valid over the retained window";
103
- case "integrity-failures-in-window":
104
- return "the retained window contains receipt or source integrity failures";
105
- case "insufficient-quality-labels":
106
- return `fewer than ${MINIMUM_ACTIVE_QUALITY_LABELS} quality-labeled outcomes for this route and role`;
107
- case "quality-lower-bound-below-posture-floor":
108
- return "the conservative quality lower bound is below the posture floor";
109
- case "quality-lower-bound-below-requested-minimum":
110
- return "the conservative quality lower bound is below the request's minimumQuality";
111
- case "reliability-below-posture-floor":
112
- return "route-attributable reliability is below the posture floor";
113
- case "cost-upper-bound-unknown":
114
- return "the route has no conservative cost upper bound";
115
- case "route-facts-stale":
116
- return "node, endpoint, resource, capacity, or settings facts are stale";
117
- case "decision-latency-above-budget":
118
- return `shadow decision p95 exceeds ${DECISION_LATENCY_BUDGET_MS} ms at the configured universe bound`;
119
- }
120
- }