@iowarp/clio-coder 0.4.6 → 0.4.8

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 (1142) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +79 -0
  3. package/CONTRIBUTING.md +178 -96
  4. package/NOTICE +8 -0
  5. package/README.md +100 -47
  6. package/dist/acp-JWPQZM2D.js +130 -0
  7. package/dist/agents-4GCDIRVX.js +149 -0
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
  13. package/dist/assets/web-notices/hono-LICENSE +21 -0
  14. package/dist/auth-SYAKTDQE.js +551 -0
  15. package/dist/background-OW67WMYR.js +37 -0
  16. package/dist/builtins-TKS63VNV.js +22 -0
  17. package/dist/chunk-2JSCCEKO.js +85 -0
  18. package/dist/chunk-2SXGG2IV.js +391 -0
  19. package/dist/chunk-2U2U5POA.js +59 -0
  20. package/dist/chunk-2ZWLMA3T.js +658 -0
  21. package/dist/chunk-36XSBPXL.js +579 -0
  22. package/dist/chunk-3IQOZRQ6.js +396 -0
  23. package/dist/chunk-3XE4NRLF.js +324 -0
  24. package/dist/chunk-44U2OUSM.js +243 -0
  25. package/dist/chunk-4P6M2TTE.js +119 -0
  26. package/dist/chunk-526ABLHD.js +1219 -0
  27. package/dist/chunk-5C2OQHLR.js +674 -0
  28. package/dist/chunk-5D2FNBMG.js +185 -0
  29. package/dist/chunk-5EQO5NWP.js +243 -0
  30. package/dist/chunk-5HULHKT2.js +32 -0
  31. package/dist/chunk-5UG6EZI3.js +66 -0
  32. package/dist/chunk-5W4FRA5Q.js +22283 -0
  33. package/dist/chunk-6R5MBXBJ.js +386 -0
  34. package/dist/chunk-6TKOFFGE.js +1058 -0
  35. package/dist/chunk-6UJ7RDI7.js +1143 -0
  36. package/dist/chunk-6X7VOCDY.js +44 -0
  37. package/dist/chunk-7QQRPB2E.js +915 -0
  38. package/dist/chunk-ARRUMZ7X.js +1377 -0
  39. package/dist/chunk-ATB3Q7YO.js +663 -0
  40. package/dist/chunk-AUHVBIDW.js +19 -0
  41. package/dist/chunk-BE4I3UJ2.js +668 -0
  42. package/dist/chunk-BFPHMSK7.js +169 -0
  43. package/dist/chunk-BHJMMCXS.js +466 -0
  44. package/dist/chunk-BIY22UUK.js +1322 -0
  45. package/dist/chunk-D55WO5J7.js +110 -0
  46. package/dist/chunk-DVJL77SO.js +162 -0
  47. package/dist/chunk-E2NSPYLC.js +814 -0
  48. package/dist/chunk-EFXMQYI6.js +4484 -0
  49. package/dist/chunk-EPYATQMG.js +2718 -0
  50. package/dist/chunk-EXKUF426.js +1801 -0
  51. package/dist/chunk-F7Y6QTPL.js +689 -0
  52. package/dist/chunk-FB3KTE2J.js +1710 -0
  53. package/dist/chunk-FNVPQQYT.js +117 -0
  54. package/dist/chunk-GEVQNST4.js +101 -0
  55. package/dist/chunk-GEYX2NZ5.js +697 -0
  56. package/dist/chunk-GJBJHJNY.js +2120 -0
  57. package/dist/chunk-GM4TY6VN.js +1233 -0
  58. package/dist/chunk-GVU4CXPJ.js +5191 -0
  59. package/dist/chunk-H5DPSUBB.js +637 -0
  60. package/dist/chunk-H77XBUBM.js +688 -0
  61. package/dist/chunk-HMGAKB7E.js +380 -0
  62. package/dist/chunk-HP7KJ5O2.js +797 -0
  63. package/dist/chunk-HVCAY2FH.js +67 -0
  64. package/dist/chunk-ICYIUNO4.js +35 -0
  65. package/dist/chunk-IILXVWJY.js +223 -0
  66. package/dist/chunk-JCVIL6TY.js +595 -0
  67. package/dist/chunk-JIMWEYWO.js +63 -0
  68. package/dist/chunk-JLBVCROW.js +562 -0
  69. package/dist/chunk-JOBN2YQQ.js +176 -0
  70. package/dist/chunk-JOL2QRLE.js +152 -0
  71. package/dist/chunk-JRA6OBHY.js +974 -0
  72. package/dist/chunk-JV25I7ID.js +1865 -0
  73. package/dist/chunk-JYKUMHCQ.js +705 -0
  74. package/dist/chunk-K3W6BF5C.js +283 -0
  75. package/dist/chunk-K45LHSCI.js +194 -0
  76. package/dist/chunk-K53E2PTW.js +1289 -0
  77. package/dist/chunk-K5UJD6MM.js +39 -0
  78. package/dist/chunk-KGP3UQGJ.js +200 -0
  79. package/dist/chunk-KKRXONXG.js +43 -0
  80. package/dist/chunk-KWJXCL2X.js +103 -0
  81. package/dist/chunk-L75H5B3B.js +446 -0
  82. package/dist/chunk-LLCGGVSW.js +108 -0
  83. package/dist/chunk-LZCCBLRC.js +57 -0
  84. package/dist/chunk-LZDLYSUN.js +197 -0
  85. package/dist/chunk-MATCRH3M.js +667 -0
  86. package/dist/chunk-MEHBW2SP.js +132 -0
  87. package/dist/chunk-MUXNDNMZ.js +659 -0
  88. package/dist/chunk-MWMW53WW.js +7346 -0
  89. package/dist/chunk-MZDPF35R.js +45 -0
  90. package/dist/chunk-MZKYVIWW.js +188 -0
  91. package/dist/chunk-O2QJDRWP.js +362 -0
  92. package/dist/chunk-O3HSB2YL.js +693 -0
  93. package/dist/chunk-OEMFEL26.js +891 -0
  94. package/dist/chunk-OH3YYA3B.js +15 -0
  95. package/dist/chunk-OPC4DQD6.js +634 -0
  96. package/dist/chunk-ORRNGQDV.js +207 -0
  97. package/dist/chunk-P4JS3MH5.js +165 -0
  98. package/dist/chunk-P7GTE4FX.js +308 -0
  99. package/dist/chunk-PAQVETLA.js +962 -0
  100. package/dist/chunk-PFZJMXIY.js +146 -0
  101. package/dist/chunk-PGEFOTJB.js +1974 -0
  102. package/dist/chunk-PJ5H5B7A.js +3151 -0
  103. package/dist/chunk-PMUUAABD.js +604 -0
  104. package/dist/chunk-Q32C6AWI.js +236 -0
  105. package/dist/chunk-QGIC5SX5.js +139 -0
  106. package/dist/chunk-QLAGXTTV.js +482 -0
  107. package/dist/chunk-QLKCCC2J.js +573 -0
  108. package/dist/chunk-QWUSS2QP.js +3630 -0
  109. package/dist/chunk-QYSAZMSH.js +47 -0
  110. package/dist/chunk-R5NRX5N4.js +123 -0
  111. package/dist/chunk-RAUOKUZV.js +1572 -0
  112. package/dist/chunk-RBES4TCZ.js +302 -0
  113. package/dist/chunk-RFCKPS2V.js +26 -0
  114. package/dist/chunk-RFULVPBX.js +318 -0
  115. package/dist/chunk-RKFNU5UA.js +404 -0
  116. package/dist/chunk-RM3XJX7P.js +1148 -0
  117. package/dist/chunk-RNLAPBJL.js +386 -0
  118. package/dist/chunk-RPMNIFRY.js +65 -0
  119. package/dist/chunk-RRZFRIJP.js +42 -0
  120. package/dist/chunk-RXI7K4J5.js +4493 -0
  121. package/dist/chunk-SER7RRAE.js +4271 -0
  122. package/dist/chunk-STC6CWUZ.js +402 -0
  123. package/dist/chunk-TEHVMHOK.js +97 -0
  124. package/dist/chunk-TOPICHGR.js +33 -0
  125. package/dist/chunk-U3TPUXOQ.js +2653 -0
  126. package/dist/chunk-UB33F3YW.js +709 -0
  127. package/dist/chunk-UDAK6GR2.js +175 -0
  128. package/dist/chunk-USBBEKHW.js +177 -0
  129. package/dist/chunk-V4ZKOKRB.js +13433 -0
  130. package/dist/chunk-W5RM7YAH.js +78 -0
  131. package/dist/chunk-W7KNI3F5.js +215 -0
  132. package/dist/chunk-WFTSK7N3.js +637 -0
  133. package/dist/chunk-WJWNZXRM.js +395 -0
  134. package/dist/chunk-WLHX3MM5.js +63 -0
  135. package/dist/chunk-WS4FOGLY.js +686 -0
  136. package/dist/chunk-WTZVSMQZ.js +52 -0
  137. package/dist/chunk-WWRV5RJI.js +165 -0
  138. package/dist/chunk-X6FLVUM5.js +141 -0
  139. package/dist/chunk-XC5POIL4.js +68 -0
  140. package/dist/chunk-XTLJDC2X.js +1013 -0
  141. package/dist/chunk-XW2UZICE.js +372 -0
  142. package/dist/chunk-Y3JU5RPK.js +8 -0
  143. package/dist/chunk-YGIV24MF.js +1018 -0
  144. package/dist/chunk-YJCCMYYT.js +125 -0
  145. package/dist/chunk-YKIIWURD.js +36 -0
  146. package/dist/chunk-YQ3GFEUY.js +341 -0
  147. package/dist/chunk-YXANQGCX.js +179 -0
  148. package/dist/chunk-YXFKLMX2.js +222 -0
  149. package/dist/chunk-ZST3FRCV.js +132 -0
  150. package/dist/cli/index.js +40 -40
  151. package/dist/clio-BPBAPZGA.js +26 -0
  152. package/dist/code-nav-KBQ3RIFK.js +686 -0
  153. package/dist/components-6DKAXWFN.js +674 -0
  154. package/dist/config-FWL5JK2H.js +270 -0
  155. package/dist/config-graph-ACDB26L2.js +156 -0
  156. package/dist/configure-ZIZ4YV62.js +85 -0
  157. package/dist/context-EZZPT2ZV.js +1074 -0
  158. package/dist/context-VIL5MFRH.js +282 -0
  159. package/dist/context-Z3GOBHDK.js +344 -0
  160. package/dist/context-clear-ZPB3L7MN.js +188 -0
  161. package/dist/context-index-W6A4V7OC.js +120 -0
  162. package/dist/context-map-DKL3QT6D.js +555 -0
  163. package/dist/context-working-set-2GLBVF7L.js +1559 -0
  164. package/dist/detail-VSBWYSGZ.js +119 -0
  165. package/dist/dispatch-runner-EEEHGKX4.js +2442 -0
  166. package/dist/docs-VMMWFVHL.js +101 -0
  167. package/dist/doctor-V5L4IQGP.js +812 -0
  168. package/dist/eval-VJYJ2BV3.js +5050 -0
  169. package/dist/eval-inventory-CX24K2JT.js +260 -0
  170. package/dist/evals-J2H5V6DD.js +104 -0
  171. package/dist/evidence-POWAEBEW.js +229 -0
  172. package/dist/evidence-XCCCLS36.js +242 -0
  173. package/dist/evidence-Y35YSXH6.js +388 -0
  174. package/dist/evolve-GPG72VB6.js +613 -0
  175. package/dist/extensions-YIZ7W3DA.js +308 -0
  176. package/dist/fleet-2MDCQ2VK.js +264 -0
  177. package/dist/fleet-W2AF3TOJ.js +919 -0
  178. package/dist/fleet-commands-WS56G26H.js +75 -0
  179. package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
  180. package/dist/fleet-graph-ELTBXBAV.js +136 -0
  181. package/dist/fleet-inspect-45IK73L4.js +308 -0
  182. package/dist/fleet-preflight-T5NCZKHE.js +22 -0
  183. package/dist/fleet-validate-VG4JBLA4.js +91 -0
  184. package/dist/fleet-verify-VTSABAYO.js +206 -0
  185. package/dist/fleet-view-XC7WMKSS.js +123 -0
  186. package/dist/init-VTJNNTIP.js +329 -0
  187. package/dist/install-6PIF6F6W.js +19 -0
  188. package/dist/interop-IU6BNA7C.js +246 -0
  189. package/dist/inventory-QPQUTUUZ.js +123 -0
  190. package/dist/library-HUTAS57T.js +492 -0
  191. package/dist/library-LF7DLU6S.js +306 -0
  192. package/dist/library-Q3NWL5CM.js +75 -0
  193. package/dist/library-import-PPW4YUC5.js +183 -0
  194. package/dist/library-inventory-DIRVFRZU.js +56 -0
  195. package/dist/library-validation-XHUZ3INE.js +42 -0
  196. package/dist/memory-Z2LSKNV6.js +516 -0
  197. package/dist/models-3FTREYPY.js +302 -0
  198. package/dist/monitor-HF2MQRB3.js +781 -0
  199. package/dist/orchestrator-UYPA6W4S.js +41502 -0
  200. package/dist/panes-736XB73K.js +74 -0
  201. package/dist/panes-C4P3PIWT.js +103 -0
  202. package/dist/paths-JQ4QYIYB.js +67 -0
  203. package/dist/preload-XSLRYH3Y.js +120 -0
  204. package/dist/reset-V7QSPZYE.js +345 -0
  205. package/dist/resources-OJGDFHYT.js +181 -0
  206. package/dist/run-T354SMDW.js +892 -0
  207. package/dist/settings-MWZXO6RV.js +72 -0
  208. package/dist/share-Y5ZKJPND.js +293 -0
  209. package/dist/skills-4GLZC4LN.js +100 -0
  210. package/dist/skills-eval-L5T7GODM.js +1074 -0
  211. package/dist/skills-inventory-LASKXEZI.js +138 -0
  212. package/dist/slash-commands-OIMRU36D.js +95 -0
  213. package/dist/steer-KMAM2Y2C.js +77 -0
  214. package/dist/support-AWC3XKPX.js +38 -0
  215. package/dist/system-CD75NYBU.js +116 -0
  216. package/dist/targets-VSZX2J2S.js +1116 -0
  217. package/dist/tasks-AN567LYH.js +36 -0
  218. package/dist/terminal-lease-6KTWNHVY.js +418 -0
  219. package/dist/tools-AGRK3V5J.js +28 -0
  220. package/dist/trace-P4MQZD33.js +524 -0
  221. package/dist/tui-primitives-A6MUW32V.js +18 -0
  222. package/dist/uninstall-BRUTEPIC.js +432 -0
  223. package/dist/upgrade-SBCGHQGJ.js +307 -0
  224. package/dist/usage-BIDVTO6V.js +1061 -0
  225. package/dist/verifiers-LTGCAMXS.js +630 -0
  226. package/dist/verify-OZU4LLNP.js +30 -0
  227. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  228. package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
  229. package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
  230. package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
  231. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +36 -0
  232. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  233. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  234. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  235. package/dist/web/client/assets/blockDiagram-I7D4REHJ-wi0_CYHL.js +129 -0
  236. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
  237. package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
  238. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  239. package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
  240. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  241. package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
  242. package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
  243. package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
  244. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  245. package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
  246. package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
  247. package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
  248. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  249. package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
  250. package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
  251. package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
  252. package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
  253. package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
  254. package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
  255. package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
  256. package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
  257. package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
  258. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  259. package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
  260. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +1 -0
  261. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  262. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  263. package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +1 -0
  264. package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
  265. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.js +62 -0
  266. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  267. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  268. package/dist/web/client/assets/dagre-GXQ25YYZ-C9mZmAPe.js +4 -0
  269. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  270. package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
  271. package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
  272. package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
  273. package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
  274. package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
  275. package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
  276. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
  277. package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
  278. package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
  279. package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
  280. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
  281. package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
  282. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
  283. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  284. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  285. package/dist/web/client/assets/index-FSIC94pi.js +83 -0
  286. package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
  287. package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
  288. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  289. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
  290. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
  291. package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
  292. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  293. package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
  294. package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
  295. package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
  296. package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
  297. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.js +96 -0
  298. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  299. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  300. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  301. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  302. package/dist/web/client/assets/packet-AYTQ26CC-OqVl_07o.js +1 -0
  303. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  304. package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
  305. package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
  306. package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.js +39 -0
  307. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  308. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  309. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  310. package/dist/web/client/assets/prism-core-BngLtbUd.js +1 -0
  311. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  312. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  313. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  314. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  315. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  316. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  317. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  318. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  319. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  320. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  321. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  322. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  323. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  324. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  325. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  326. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  327. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  328. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  329. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  330. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  331. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  332. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  333. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  334. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  335. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  336. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  337. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-Bjs4yjgs.js +7 -0
  338. package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
  339. package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
  340. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
  341. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
  342. package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
  343. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
  344. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
  345. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  346. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
  347. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
  348. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  349. package/dist/web/client/assets/src-yeptRXpt.js +1 -0
  350. package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
  351. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
  352. package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
  353. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
  354. package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
  355. package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
  356. package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
  357. package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
  358. package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
  359. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
  360. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.js +7 -0
  361. package/dist/web/client/clio-coder-logo.webp +0 -0
  362. package/dist/web/client/icon-192.png +0 -0
  363. package/dist/web/client/icon-512.png +0 -0
  364. package/dist/web/client/index.html +4 -0
  365. package/dist/web/client/manifest.webmanifest +15 -0
  366. package/dist/web/client/offline.css +55 -0
  367. package/dist/web/client/offline.html +5 -0
  368. package/dist/web/client/offline.js +27 -0
  369. package/dist/web/client/sw.js +34 -0
  370. package/dist/web/ops-worker.js +37 -0
  371. package/dist/web/reads-worker.js +1726 -0
  372. package/dist/web/server.js +8499 -0
  373. package/dist/web-EU6ATJWA.js +13 -0
  374. package/dist/web-fetch-U22Q7HV4.js +788 -0
  375. package/dist/wiki-generate-LZRLFG6I.js +623 -0
  376. package/dist/with-panes-X5CZOGML.js +628 -0
  377. package/dist/worker/entry.js +300 -93
  378. package/docs/README.md +58 -14
  379. package/docs/architecture/acp.md +5 -9
  380. package/docs/architecture/alcf-provider.md +0 -3
  381. package/docs/architecture/architecture.md +8 -10
  382. package/docs/architecture/artifact-placement.md +0 -3
  383. package/docs/architecture/artifact-versions.md +3 -6
  384. package/docs/architecture/capacity-and-scheduling.md +0 -3
  385. package/docs/architecture/context-engine.md +35 -4
  386. package/docs/architecture/context-working-set.md +0 -3
  387. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  388. package/docs/architecture/dispatch-typed-intent.md +0 -3
  389. package/docs/architecture/evidence-and-memory.md +0 -3
  390. package/docs/architecture/library.md +30 -0
  391. package/docs/architecture/middleware-and-components.md +1 -4
  392. package/docs/architecture/model-catalog.md +21 -4
  393. package/docs/architecture/observability.md +0 -3
  394. package/docs/architecture/pi-boundary.md +23 -8
  395. package/docs/architecture/prompt-envelope-and-tools.md +6 -9
  396. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  397. package/docs/architecture/safety-model.md +21 -5
  398. package/docs/architecture/session-lifecycle.md +12 -4
  399. package/docs/architecture/time-conventions.md +0 -3
  400. package/docs/architecture/trace-store.md +28 -20
  401. package/docs/architecture/tui-design.md +108 -12
  402. package/docs/architecture/worker-context.md +104 -0
  403. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  404. package/docs/guide/authoring-plugins.md +158 -0
  405. package/docs/guide/built-in-agents.md +5 -8
  406. package/docs/guide/commands-and-modes.md +162 -61
  407. package/docs/guide/configuration-and-targets.md +198 -5
  408. package/docs/guide/configuration-reference.md +36 -38
  409. package/docs/guide/environment-variables.md +2 -5
  410. package/docs/guide/exit-codes-and-output.md +1 -4
  411. package/docs/guide/extensions-and-sharing.md +92 -55
  412. package/docs/guide/fleet-dispatch.md +31 -7
  413. package/docs/guide/glossary.md +1 -4
  414. package/docs/guide/harness-extensions.md +289 -0
  415. package/docs/guide/installation-and-lifecycle.md +10 -13
  416. package/docs/guide/interop.md +241 -0
  417. package/docs/guide/panes-and-files.md +3 -6
  418. package/docs/guide/plugins.md +77 -0
  419. package/docs/guide/proactive-memory.md +0 -3
  420. package/docs/guide/resource-library.md +109 -45
  421. package/docs/guide/skills-marketplace.md +34 -73
  422. package/docs/guide/tool-usage.md +19 -10
  423. package/docs/guide/troubleshooting.md +1 -4
  424. package/docs/history/config-knobs-audit.md +0 -3
  425. package/docs/history/release-cut-checklist.md +0 -3
  426. package/docs/process/development-pipeline.md +14 -17
  427. package/docs/process/documentation-coverage.md +31 -4
  428. package/docs/process/documentation-guide.md +28 -27
  429. package/docs/process/eval-runner.md +8 -6
  430. package/docs/process/evals-internal.md +0 -3
  431. package/docs/process/evolution.md +0 -3
  432. package/docs/process/fleet-demo-runbook.md +0 -3
  433. package/docs/process/git-commit-provenance.md +0 -3
  434. package/docs/process/performance-methodology.md +2 -5
  435. package/docs/process/release-cut-checklist.md +114 -217
  436. package/docs/process/scientific-validation.md +23 -3
  437. package/evals/scalar-decision-machinery.ts +1 -1
  438. package/examples/extensions/README.md +67 -0
  439. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  440. package/examples/extensions/lab-status/extension.mjs +68 -0
  441. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  442. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  443. package/examples/extensions/measurements/summarize.cjs +23 -0
  444. package/library/README.md +109 -0
  445. package/library/_authoring/templates/agent/README.md +28 -0
  446. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  447. package/library/_authoring/templates/agent/plugin.json +23 -0
  448. package/library/_authoring/templates/fleet/README.md +29 -0
  449. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  450. package/library/_authoring/templates/fleet/plugin.json +23 -0
  451. package/library/_authoring/templates/plugin/README.md +37 -0
  452. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  453. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  454. package/library/_authoring/templates/plugin/plugin.json +42 -0
  455. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  456. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  457. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  458. package/library/_authoring/templates/prompt/README.md +28 -0
  459. package/library/_authoring/templates/prompt/plugin.json +23 -0
  460. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  461. package/library/_authoring/templates/skill/README.md +24 -0
  462. package/library/_authoring/templates/skill/SKILL.md +39 -0
  463. package/library/_authoring/templates/skill/evals.md +30 -0
  464. package/library/_authoring/templates/skill/plugin.json +23 -0
  465. package/library/agents/README.md +7 -0
  466. package/library/fleets/README.md +7 -0
  467. package/library/plugins/materio/README.md +137 -0
  468. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  469. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  470. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  471. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  472. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  473. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  474. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  475. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  476. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  477. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  478. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  479. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  480. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  481. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  482. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  483. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  484. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  485. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  486. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  487. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  488. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  489. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  490. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  491. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  492. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  493. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  494. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  495. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  496. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  497. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  498. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  499. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  500. package/library/plugins/materio/assets/actions/help.md +140 -0
  501. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  502. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  503. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  504. package/library/plugins/materio/assets/actions/progress.md +125 -0
  505. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  506. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  507. package/library/plugins/materio/assets/actions/settings.md +38 -0
  508. package/library/plugins/materio/assets/actions/status.md +112 -0
  509. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  510. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  511. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  512. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  513. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  514. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  515. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  516. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  517. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  518. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  519. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  520. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  521. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  522. package/library/plugins/materio/assets/templates/config.json +5 -0
  523. package/library/plugins/materio/evals/scripts.yaml +29 -0
  524. package/library/plugins/materio/plugin.json +530 -0
  525. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  526. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  527. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  528. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  529. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  530. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  531. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  532. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  533. package/library/plugins/materio/tests/test_research_state.py +291 -0
  534. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  535. package/library/prompts/README.md +7 -0
  536. package/library/registry.yaml +921 -0
  537. package/library/skills/README.md +120 -0
  538. package/library/skills/coding/ast-grep/SKILL.md +213 -0
  539. package/library/skills/coding/ast-grep/evals.md +82 -0
  540. package/library/skills/coding/ast-grep/plugin.json +23 -0
  541. package/library/skills/coding/coding-standards/SKILL.md +164 -0
  542. package/library/skills/coding/coding-standards/evals.md +57 -0
  543. package/library/skills/coding/coding-standards/plugin.json +23 -0
  544. package/library/skills/coding/prototype/SKILL.md +151 -0
  545. package/library/skills/coding/prototype/evals.md +61 -0
  546. package/library/skills/coding/prototype/plugin.json +23 -0
  547. package/library/skills/coding/tdd/SKILL.md +134 -0
  548. package/library/skills/coding/tdd/evals.md +61 -0
  549. package/library/skills/coding/tdd/plugin.json +23 -0
  550. package/library/skills/context/context-handoff/SKILL.md +176 -0
  551. package/library/skills/context/context-handoff/evals.md +101 -0
  552. package/library/skills/context/context-handoff/plugin.json +23 -0
  553. package/library/skills/context/context-prime/SKILL.md +131 -0
  554. package/library/skills/context/context-prime/evals.md +99 -0
  555. package/library/skills/context/context-prime/plugin.json +23 -0
  556. package/library/skills/git/branch-closeout/SKILL.md +132 -0
  557. package/library/skills/git/branch-closeout/plugin.json +23 -0
  558. package/library/skills/git/file-ticket/SKILL.md +126 -0
  559. package/library/skills/git/file-ticket/plugin.json +23 -0
  560. package/library/skills/git/fix-issue/SKILL.md +136 -0
  561. package/library/skills/git/fix-issue/plugin.json +23 -0
  562. package/library/skills/git/resolve-merge-conflicts/SKILL.md +151 -0
  563. package/library/skills/git/resolve-merge-conflicts/evals.md +85 -0
  564. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  565. package/library/skills/git/ship/SKILL.md +134 -0
  566. package/library/skills/git/ship/plugin.json +23 -0
  567. package/library/skills/git/worktree-create/SKILL.md +127 -0
  568. package/library/skills/git/worktree-create/plugin.json +23 -0
  569. package/library/skills/git/worktree-merge/SKILL.md +147 -0
  570. package/library/skills/git/worktree-merge/plugin.json +23 -0
  571. package/library/skills/meta/clio-coder-dev/SKILL.md +101 -0
  572. package/library/skills/meta/clio-coder-dev/evals.md +46 -0
  573. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  574. package/library/skills/meta/clio-coder-test/SKILL.md +156 -0
  575. package/library/skills/meta/clio-coder-test/evals.md +62 -0
  576. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  577. package/library/skills/meta/clio-coder-test/references/test-map.md +97 -0
  578. package/library/skills/meta/credentials/SKILL.md +132 -0
  579. package/library/skills/meta/credentials/evals.md +104 -0
  580. package/library/skills/meta/credentials/plugin.json +23 -0
  581. package/library/skills/meta/find-skills/SKILL.md +85 -0
  582. package/library/skills/meta/find-skills/evals.md +65 -0
  583. package/library/skills/meta/find-skills/plugin.json +23 -0
  584. package/library/skills/meta/herdr/SKILL.md +133 -0
  585. package/library/skills/meta/herdr/evals.md +38 -0
  586. package/library/skills/meta/herdr/plugin.json +23 -0
  587. package/library/skills/meta/skill-craft/SKILL.md +139 -0
  588. package/library/skills/meta/skill-craft/evals.md +49 -0
  589. package/library/skills/meta/skill-craft/plugin.json +23 -0
  590. package/library/skills/planning/archify/SKILL.md +196 -0
  591. package/library/skills/planning/archify/plugin.json +23 -0
  592. package/library/skills/planning/architecture/SKILL.md +184 -0
  593. package/library/skills/planning/architecture/evals.md +101 -0
  594. package/library/skills/planning/architecture/plugin.json +23 -0
  595. package/library/skills/planning/backlog/SKILL.md +212 -0
  596. package/library/skills/planning/backlog/evals.md +185 -0
  597. package/library/skills/planning/backlog/plugin.json +23 -0
  598. package/library/skills/planning/prd/SKILL.md +129 -0
  599. package/library/skills/planning/prd/evals.md +103 -0
  600. package/library/skills/planning/prd/plugin.json +23 -0
  601. package/library/skills/planning/product-intent/SKILL.md +173 -0
  602. package/library/skills/planning/product-intent/evals.md +106 -0
  603. package/library/skills/planning/product-intent/plugin.json +23 -0
  604. package/library/skills/planning/tech-spec/SKILL.md +172 -0
  605. package/library/skills/planning/tech-spec/evals.md +120 -0
  606. package/library/skills/planning/tech-spec/plugin.json +23 -0
  607. package/library/skills/registry.yaml +144 -0
  608. package/library/skills/remote.yaml +13 -0
  609. package/library/skills/research/arxiv-literature/SKILL.md +168 -0
  610. package/library/skills/research/arxiv-literature/evals.md +108 -0
  611. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  612. package/library/skills/research/experiment-protocol/SKILL.md +148 -0
  613. package/library/skills/research/experiment-protocol/evals.md +114 -0
  614. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  615. package/library/skills/research/scientific-debugging/SKILL.md +149 -0
  616. package/library/skills/research/scientific-debugging/evals.md +156 -0
  617. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  618. package/library/skills/research/scientific-modernization/SKILL.md +170 -0
  619. package/library/skills/research/scientific-modernization/evals.md +111 -0
  620. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  621. package/library/skills/skill-marketplace.json +507 -0
  622. package/library/skills/workflow/cut-it/SKILL.md +153 -0
  623. package/library/skills/workflow/cut-it/evals.md +143 -0
  624. package/library/skills/workflow/cut-it/plugin.json +23 -0
  625. package/library/skills/workflow/design-council/SKILL.md +233 -0
  626. package/library/skills/workflow/design-council/evals.md +258 -0
  627. package/library/skills/workflow/design-council/plugin.json +23 -0
  628. package/library/skills/workflow/grill-me/SKILL.md +267 -0
  629. package/library/skills/workflow/grill-me/evals.md +231 -0
  630. package/library/skills/workflow/grill-me/plugin.json +23 -0
  631. package/library/skills/workflow/workflow-distiller/SKILL.md +204 -0
  632. package/library/skills/workflow/workflow-distiller/evals.md +233 -0
  633. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  634. package/package.json +23 -14
  635. package/src/cli/agents.ts +1 -1
  636. package/src/cli/config-inspect.ts +1 -1
  637. package/src/cli/configure.ts +2 -2
  638. package/src/cli/docs.ts +65 -328
  639. package/src/cli/eval.ts +40 -6
  640. package/src/cli/extensions.ts +74 -8
  641. package/src/cli/fleet-preflight.ts +2 -0
  642. package/src/cli/fleet.ts +2 -0
  643. package/src/cli/index.ts +4 -4
  644. package/src/cli/interop-inspect.ts +61 -33
  645. package/src/cli/interop.ts +79 -9
  646. package/src/cli/library-import.ts +139 -0
  647. package/src/cli/library.ts +418 -120
  648. package/src/cli/run.ts +26 -9
  649. package/src/cli/skills-eval.ts +43 -6
  650. package/src/cli/skills-inventory.ts +6 -2
  651. package/src/cli/skills.ts +44 -491
  652. package/src/cli/trace.ts +4 -65
  653. package/src/cli/uninstall.ts +26 -0
  654. package/src/cli/usage.ts +3 -0
  655. package/src/cli/web.ts +79 -0
  656. package/src/core/bus-events.ts +8 -4
  657. package/src/core/config.ts +71 -0
  658. package/src/core/defaults.ts +1 -1
  659. package/src/core/domain-loader.ts +37 -28
  660. package/src/core/recent-models.ts +2 -2
  661. package/src/core/session-routing.ts +3 -3
  662. package/src/core/state-file-lock.ts +1 -1
  663. package/src/core/termination.ts +13 -9
  664. package/src/core/tool-names.ts +5 -0
  665. package/src/domains/agents/contract.ts +1 -1
  666. package/src/domains/agents/extension.ts +53 -9
  667. package/src/domains/agents/fleet-commands.ts +92 -1
  668. package/src/domains/agents/fleet-contract.ts +87 -19
  669. package/src/domains/agents/recipe.ts +5 -4
  670. package/src/domains/agents/registry.ts +80 -24
  671. package/src/domains/config/extension.ts +5 -4
  672. package/src/domains/config/keybindings.ts +155 -95
  673. package/src/domains/context/worker/contract.ts +91 -0
  674. package/src/domains/context/worker/pressure.ts +120 -0
  675. package/src/domains/context/worker/recall.ts +62 -0
  676. package/src/domains/context/worker/select.ts +164 -0
  677. package/src/domains/context/worker/snapshot.ts +35 -0
  678. package/src/domains/context/worker/store.ts +16 -0
  679. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  680. package/src/domains/dispatch/active-route-planner.ts +2 -0
  681. package/src/domains/dispatch/backoff.ts +1 -0
  682. package/src/domains/dispatch/code-step.ts +12 -2
  683. package/src/domains/dispatch/contract.ts +3 -0
  684. package/src/domains/dispatch/execution-plan.ts +2 -0
  685. package/src/domains/dispatch/extension.ts +184 -39
  686. package/src/domains/dispatch/fleet-plan.ts +10 -0
  687. package/src/domains/dispatch/fleet-run.ts +1 -0
  688. package/src/domains/dispatch/index.ts +1 -0
  689. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  690. package/src/domains/dispatch/receipt-integrity.ts +7 -0
  691. package/src/domains/dispatch/state.ts +2 -2
  692. package/src/domains/dispatch/types.ts +7 -0
  693. package/src/domains/dispatch/validation.ts +12 -0
  694. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  695. package/src/domains/eval/metrics/tracked.ts +22 -2
  696. package/src/domains/evidence/failure-attribution.ts +1 -0
  697. package/src/domains/evidence/trust-status.ts +22 -3
  698. package/src/domains/extensions/command-schema.ts +145 -0
  699. package/src/domains/extensions/command-tools.ts +15 -0
  700. package/src/domains/extensions/compatibility.ts +7 -0
  701. package/src/domains/extensions/contract.ts +0 -4
  702. package/src/domains/extensions/discovery.ts +69 -205
  703. package/src/domains/extensions/extension.ts +0 -4
  704. package/src/domains/extensions/index.ts +1 -5
  705. package/src/domains/extensions/manager.ts +1 -6
  706. package/src/domains/extensions/operator-commands.ts +29 -0
  707. package/src/domains/extensions/operator-runtime.ts +485 -0
  708. package/src/domains/extensions/public-api.ts +53 -0
  709. package/src/domains/extensions/runtime-child.mjs +114 -0
  710. package/src/domains/extensions/runtime-process.ts +306 -0
  711. package/src/domains/extensions/runtime-schema.ts +146 -0
  712. package/src/domains/extensions/snapshot-access.ts +21 -0
  713. package/src/domains/extensions/snapshot.ts +4 -32
  714. package/src/domains/extensions/state.ts +5 -83
  715. package/src/domains/extensions/types.ts +33 -34
  716. package/src/domains/interop/adopt.ts +546 -0
  717. package/src/domains/interop/detect.ts +50 -12
  718. package/src/domains/interop/foreign.ts +554 -0
  719. package/src/domains/interop/import.ts +277 -0
  720. package/src/domains/interop/index.ts +24 -0
  721. package/src/domains/interop/install.ts +6 -0
  722. package/src/domains/interop/inventory.ts +351 -0
  723. package/src/domains/interop/projection.ts +360 -0
  724. package/src/domains/interop/registry.ts +106 -3
  725. package/src/domains/interop/types.ts +51 -0
  726. package/src/domains/lifecycle/migrations/index.ts +0 -2
  727. package/src/domains/lifecycle/naming-resources.ts +1 -1
  728. package/src/domains/middleware/hooks.ts +2 -2
  729. package/src/domains/middleware/marketplace-offer.ts +1 -1
  730. package/src/domains/mux/contract.ts +1 -1
  731. package/src/domains/observability/background-memory-usage.ts +3 -0
  732. package/src/domains/observability/compaction-usage.ts +2 -0
  733. package/src/domains/observability/cost.ts +5 -0
  734. package/src/domains/observability/extension.ts +1 -0
  735. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  736. package/src/domains/observability/trace-store.ts +65 -5
  737. package/src/domains/plugins/catalog.ts +204 -0
  738. package/src/domains/plugins/contract.ts +24 -0
  739. package/src/domains/plugins/discovery.ts +316 -0
  740. package/src/domains/plugins/extension.ts +40 -0
  741. package/src/domains/plugins/index.ts +77 -0
  742. package/src/domains/plugins/integrity.ts +6 -0
  743. package/src/domains/plugins/manifest.ts +3 -0
  744. package/src/domains/plugins/resources.ts +102 -0
  745. package/src/domains/plugins/state.ts +753 -0
  746. package/src/domains/plugins/types.ts +217 -0
  747. package/src/domains/prompts/extension.ts +4 -10
  748. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  749. package/src/domains/providers/cache-deployment.ts +147 -0
  750. package/src/domains/providers/catalog.ts +12 -7
  751. package/src/domains/providers/extension.ts +27 -5
  752. package/src/domains/providers/index.ts +1 -0
  753. package/src/domains/providers/plugins.ts +3 -13
  754. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  755. package/src/domains/providers/types/target-descriptor.ts +17 -0
  756. package/src/domains/resources/common-loader.ts +9 -6
  757. package/src/domains/resources/index.ts +67 -0
  758. package/src/domains/resources/library-actions.ts +836 -0
  759. package/src/domains/resources/library-evals.ts +38 -0
  760. package/src/domains/resources/library-inventory.ts +1048 -0
  761. package/src/domains/resources/library-types.ts +50 -0
  762. package/src/domains/resources/library-validation.ts +634 -0
  763. package/src/domains/resources/library.ts +437 -156
  764. package/src/domains/resources/package-references.ts +66 -0
  765. package/src/domains/resources/prompts/loader.ts +75 -41
  766. package/src/domains/resources/skills/install.ts +2 -2
  767. package/src/domains/resources/skills/loader.ts +77 -22
  768. package/src/domains/resources/skills/marketplace.ts +48 -57
  769. package/src/domains/resources/skills/promotion.ts +2 -2
  770. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  771. package/src/domains/safety/action-classifier.ts +2 -2
  772. package/src/domains/safety/default-path-policy.ts +3 -1
  773. package/src/domains/safety/policy-engine.ts +1 -1
  774. package/src/domains/safety/protected-artifacts.ts +21 -5
  775. package/src/domains/safety/skill-authority.ts +5 -2
  776. package/src/domains/session/compaction/compact.ts +4 -1
  777. package/src/domains/session/entries.ts +1 -0
  778. package/src/domains/session/usage.ts +6 -7
  779. package/src/domains/share/archive.ts +1 -1
  780. package/src/engine/acp/server.ts +11 -0
  781. package/src/engine/ai.ts +2 -0
  782. package/src/engine/apis/openai-completions.ts +61 -6
  783. package/src/engine/notices/pi-tui-LICENSE +21 -0
  784. package/src/engine/prewarm.ts +232 -0
  785. package/src/engine/provider-diagnostics.ts +6 -1
  786. package/src/engine/tui.ts +3 -0
  787. package/src/engine/worker-runtime.ts +58 -14
  788. package/src/engine/worker-tools.ts +5 -0
  789. package/src/entry/orchestrator.ts +46 -21
  790. package/src/entry/plugin-reload.ts +18 -0
  791. package/src/interactive/application-controller.ts +67 -21
  792. package/src/interactive/chat-loop-messages.ts +3 -0
  793. package/src/interactive/chat-loop.ts +32 -11
  794. package/src/interactive/chat-panel.ts +5 -1
  795. package/src/interactive/clio-editor.ts +53 -21
  796. package/src/interactive/command-output.ts +56 -1
  797. package/src/interactive/editor-submit.ts +65 -28
  798. package/src/interactive/fleet-run-preview.ts +2 -0
  799. package/src/interactive/follow-up-queue-panel.ts +3 -3
  800. package/src/interactive/footer/dashboard.ts +4 -1
  801. package/src/interactive/footer/notifications.ts +2 -2
  802. package/src/interactive/footer/widgets.ts +2 -2
  803. package/src/interactive/interactive-application.ts +209 -21
  804. package/src/interactive/interactive-input-runtime.ts +254 -7
  805. package/src/interactive/interactive-presentation.ts +41 -12
  806. package/src/interactive/interactive-slash-runtime.ts +37 -8
  807. package/src/interactive/keybinding-manager.ts +156 -79
  808. package/src/interactive/keyboard-owner.ts +37 -0
  809. package/src/interactive/leader-key.ts +49 -102
  810. package/src/interactive/leader-menu.ts +45 -0
  811. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  812. package/src/interactive/overlay-frame.ts +15 -0
  813. package/src/interactive/overlay-key-routing.ts +46 -47
  814. package/src/interactive/overlay-lifecycle.ts +30 -15
  815. package/src/interactive/overlay-resource-openers.ts +56 -46
  816. package/src/interactive/overlays/ask-user.ts +630 -556
  817. package/src/interactive/overlays/extension-panel.ts +70 -0
  818. package/src/interactive/overlays/extensions.ts +28 -5
  819. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  820. package/src/interactive/overlays/help-reference.ts +89 -40
  821. package/src/interactive/overlays/interop.ts +122 -3
  822. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  823. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  824. package/src/interactive/overlays/library-model.ts +574 -0
  825. package/src/interactive/overlays/library-review.ts +557 -0
  826. package/src/interactive/overlays/library-tabs.ts +3 -15
  827. package/src/interactive/overlays/library.ts +602 -0
  828. package/src/interactive/overlays/list-overlay.ts +218 -39
  829. package/src/interactive/overlays/model-selector.ts +28 -25
  830. package/src/interactive/overlays/session-selector.ts +9 -3
  831. package/src/interactive/overlays/settings.ts +25 -18
  832. package/src/interactive/overlays/tree-selector.ts +16 -11
  833. package/src/interactive/permission-hint.ts +13 -0
  834. package/src/interactive/permission-overlay.ts +77 -28
  835. package/src/interactive/prewarm.ts +11 -197
  836. package/src/interactive/prompt-source-label.ts +21 -0
  837. package/src/interactive/renderers/reference-card.ts +35 -0
  838. package/src/interactive/renderers/worker-entry.ts +35 -3
  839. package/src/interactive/session-usage-reseed.ts +2 -0
  840. package/src/interactive/side-question.ts +2 -0
  841. package/src/interactive/slash-autocomplete.ts +99 -1
  842. package/src/interactive/slash-commands.ts +390 -67
  843. package/src/interactive/slash-spec.ts +0 -1
  844. package/src/interactive/terminal-lease.ts +44 -12
  845. package/src/interactive/turn-context.ts +1 -0
  846. package/src/interactive/turn-persistence.ts +3 -0
  847. package/src/interactive/turn-prewarm.ts +126 -19
  848. package/src/interactive/turn-queues.ts +8 -7
  849. package/src/interactive/turn-runtime.ts +15 -1
  850. package/src/interactive/view/view-overlay.ts +19 -14
  851. package/src/interactive/welcome-dashboard.ts +525 -408
  852. package/src/tools/bootstrap.ts +8 -0
  853. package/src/tools/builtin-tool-catalog.ts +15 -6
  854. package/src/tools/context/index.ts +58 -5
  855. package/src/tools/context/library.ts +465 -0
  856. package/src/tools/context/surface.ts +20 -6
  857. package/src/tools/core-bootstrap.ts +3 -0
  858. package/src/tools/dispatch-admission.ts +24 -1
  859. package/src/tools/dispatch-arguments.ts +8 -0
  860. package/src/tools/dispatch-plan.ts +32 -0
  861. package/src/tools/dispatch-schema.ts +31 -1
  862. package/src/tools/dispatch-types.ts +3 -0
  863. package/src/tools/dispatch.ts +1 -1
  864. package/src/tools/harness-extensions.ts +169 -0
  865. package/src/tools/observation.ts +4 -0
  866. package/src/tools/policy.ts +7 -1
  867. package/src/tools/registry.ts +31 -3
  868. package/src/tools/worker-evidence.ts +5 -0
  869. package/src/worker/context-seed.ts +192 -0
  870. package/src/worker/entry.ts +1 -0
  871. package/src/worker/spec-contract.ts +35 -1
  872. package/dist/acp-UVEVWSDL.js +0 -130
  873. package/dist/agents-VWY37DTK.js +0 -148
  874. package/dist/auth-PCV2XQDV.js +0 -551
  875. package/dist/builtins-PD652MTK.js +0 -22
  876. package/dist/chunk-22PQ4TX4.js +0 -360
  877. package/dist/chunk-24T2YZ7A.js +0 -22648
  878. package/dist/chunk-2AKYFREM.js +0 -1008
  879. package/dist/chunk-2QPI3TR3.js +0 -162
  880. package/dist/chunk-3BJGMT2D.js +0 -324
  881. package/dist/chunk-3HQVBIKD.js +0 -308
  882. package/dist/chunk-3JLFK5MW.js +0 -193
  883. package/dist/chunk-3O2ZAUGQ.js +0 -283
  884. package/dist/chunk-3QKXHCGS.js +0 -59
  885. package/dist/chunk-3T4DXWP6.js +0 -668
  886. package/dist/chunk-3UW3KU4A.js +0 -21
  887. package/dist/chunk-3WBALRQH.js +0 -5076
  888. package/dist/chunk-4DU2TVI4.js +0 -108
  889. package/dist/chunk-4U4TKZFR.js +0 -5052
  890. package/dist/chunk-4VMV6OS6.js +0 -101
  891. package/dist/chunk-536HXRFE.js +0 -1257
  892. package/dist/chunk-5CMARGPF.js +0 -477
  893. package/dist/chunk-5CY4Q6QI.js +0 -141
  894. package/dist/chunk-5QRX7SLS.js +0 -1018
  895. package/dist/chunk-5VTJP36Q.js +0 -36
  896. package/dist/chunk-5ZSZEYJK.js +0 -119
  897. package/dist/chunk-6HAO6X5B.js +0 -197
  898. package/dist/chunk-6OII3LOK.js +0 -404
  899. package/dist/chunk-6RYDAVQT.js +0 -4338
  900. package/dist/chunk-6VRRJT7L.js +0 -146
  901. package/dist/chunk-6YA46L5A.js +0 -386
  902. package/dist/chunk-77CZRFTE.js +0 -634
  903. package/dist/chunk-7JSSKXG2.js +0 -1215
  904. package/dist/chunk-7WUZEB2M.js +0 -165
  905. package/dist/chunk-7YJWEF2L.js +0 -974
  906. package/dist/chunk-ACCKVSHU.js +0 -44
  907. package/dist/chunk-B3MOMLJ4.js +0 -433
  908. package/dist/chunk-BBV5TKE6.js +0 -35
  909. package/dist/chunk-BLTEAUCB.js +0 -668
  910. package/dist/chunk-BS4GAMUB.js +0 -233
  911. package/dist/chunk-BT7HGDOX.js +0 -3151
  912. package/dist/chunk-CBSKDFWL.js +0 -101
  913. package/dist/chunk-CXQ37WJH.js +0 -45
  914. package/dist/chunk-DXLUVUD4.js +0 -1490
  915. package/dist/chunk-DZK63TZJ.js +0 -1334
  916. package/dist/chunk-E7RF4KBO.js +0 -266
  917. package/dist/chunk-ECOMVOHP.js +0 -139
  918. package/dist/chunk-EHOSNVVM.js +0 -59
  919. package/dist/chunk-F5Z7EWMN.js +0 -4484
  920. package/dist/chunk-FQOOGXBH.js +0 -579
  921. package/dist/chunk-GLYBJ4RQ.js +0 -396
  922. package/dist/chunk-HHVJNVUJ.js +0 -179
  923. package/dist/chunk-HL26ADLH.js +0 -77
  924. package/dist/chunk-HPTJF6DG.js +0 -2465
  925. package/dist/chunk-HXHFDHB6.js +0 -962
  926. package/dist/chunk-HZ2T2YED.js +0 -1687
  927. package/dist/chunk-HZFBVU5X.js +0 -666
  928. package/dist/chunk-I2K2NCZQ.js +0 -659
  929. package/dist/chunk-IGLVVNEG.js +0 -402
  930. package/dist/chunk-IKRWLEDA.js +0 -1567
  931. package/dist/chunk-J2FYEQ5L.js +0 -33
  932. package/dist/chunk-JMPL7NUB.js +0 -108
  933. package/dist/chunk-K2HL3GBL.js +0 -998
  934. package/dist/chunk-KAFMW7WM.js +0 -386
  935. package/dist/chunk-KTFSFCVN.js +0 -46
  936. package/dist/chunk-LIN2K3EL.js +0 -66
  937. package/dist/chunk-LUL5Z66S.js +0 -221
  938. package/dist/chunk-LVFANMOH.js +0 -466
  939. package/dist/chunk-LY4N4TTL.js +0 -117
  940. package/dist/chunk-LZBMXNLP.js +0 -1196
  941. package/dist/chunk-M6TAYK66.js +0 -807
  942. package/dist/chunk-N2OKBREN.js +0 -243
  943. package/dist/chunk-NC4KV7EL.js +0 -39
  944. package/dist/chunk-NF3BK5WR.js +0 -42
  945. package/dist/chunk-NNWJYUNO.js +0 -573
  946. package/dist/chunk-NTK3WTHM.js +0 -141
  947. package/dist/chunk-ODUTYZIU.js +0 -688
  948. package/dist/chunk-OQM5IVJY.js +0 -1377
  949. package/dist/chunk-P5JMBPDJ.js +0 -7192
  950. package/dist/chunk-P5SC4DLJ.js +0 -47
  951. package/dist/chunk-P6M7RKMI.js +0 -97
  952. package/dist/chunk-PWWSIB2A.js +0 -52
  953. package/dist/chunk-PZN2LQY6.js +0 -674
  954. package/dist/chunk-Q7NNUHQV.js +0 -705
  955. package/dist/chunk-QCOV5DFY.js +0 -911
  956. package/dist/chunk-QNWRHOMF.js +0 -692
  957. package/dist/chunk-QRFXEO6Y.js +0 -17
  958. package/dist/chunk-QXFBABFJ.js +0 -380
  959. package/dist/chunk-RGZNQ5CT.js +0 -657
  960. package/dist/chunk-SRZOW5L2.js +0 -1865
  961. package/dist/chunk-SXQKNKRA.js +0 -223
  962. package/dist/chunk-T334FW2H.js +0 -362
  963. package/dist/chunk-T52TPHYC.js +0 -318
  964. package/dist/chunk-TJFDL26W.js +0 -658
  965. package/dist/chunk-TN5FW4XY.js +0 -172
  966. package/dist/chunk-U7H5WRG5.js +0 -123
  967. package/dist/chunk-UFYNOQK4.js +0 -302
  968. package/dist/chunk-URBGEOH3.js +0 -32
  969. package/dist/chunk-USZA7GWL.js +0 -341
  970. package/dist/chunk-UUQ5G6EZ.js +0 -697
  971. package/dist/chunk-VAHLPXPY.js +0 -399
  972. package/dist/chunk-VANN3GDP.js +0 -2488
  973. package/dist/chunk-VHMX7SXF.js +0 -1289
  974. package/dist/chunk-WJIMKGD6.js +0 -132
  975. package/dist/chunk-WKUYQBCG.js +0 -795
  976. package/dist/chunk-WNGF5AJX.js +0 -1911
  977. package/dist/chunk-WV6TDAPN.js +0 -3627
  978. package/dist/chunk-X3BI7HTV.js +0 -562
  979. package/dist/chunk-XWMSPJYN.js +0 -149
  980. package/dist/chunk-YPRSNUTC.js +0 -395
  981. package/dist/chunk-ZS43Y2FT.js +0 -438
  982. package/dist/clio-QQCMTUZE.js +0 -26
  983. package/dist/code-nav-GUPM6766.js +0 -686
  984. package/dist/components-TNIKXCBH.js +0 -674
  985. package/dist/config-IIM7YOD3.js +0 -621
  986. package/dist/configure-4ZM5HWJX.js +0 -73
  987. package/dist/context-44BZLJ3J.js +0 -344
  988. package/dist/context-AIDVQKMW.js +0 -278
  989. package/dist/context-OL5P3HEP.js +0 -1031
  990. package/dist/context-clear-OQV76MYP.js +0 -184
  991. package/dist/context-index-HP2JFUWA.js +0 -120
  992. package/dist/context-map-INTXD54D.js +0 -555
  993. package/dist/context-working-set-ZUW3EGLS.js +0 -1556
  994. package/dist/detail-UXPWRANG.js +0 -115
  995. package/dist/dispatch-runner-P3ZW6G77.js +0 -2438
  996. package/dist/docs-BL7ROUFN.js +0 -292
  997. package/dist/doctor-JJVGPZWT.js +0 -797
  998. package/dist/eval-V2RTN3UH.js +0 -4972
  999. package/dist/eval-inventory-QOYZERXJ.js +0 -315
  1000. package/dist/evidence-35PYWGSO.js +0 -225
  1001. package/dist/evidence-CIGGKI6J.js +0 -383
  1002. package/dist/evolve-33SM3NJP.js +0 -609
  1003. package/dist/extensions-YVRHX6ZI.js +0 -229
  1004. package/dist/fleet-LFO7SIPC.js +0 -908
  1005. package/dist/fleet-commands-RLK72GU3.js +0 -75
  1006. package/dist/fleet-decisions-3SBSCTCW.js +0 -159
  1007. package/dist/fleet-graph-JZIBCGMW.js +0 -134
  1008. package/dist/fleet-inspect-2L5YGGZJ.js +0 -469
  1009. package/dist/fleet-preflight-QRSHIIDE.js +0 -22
  1010. package/dist/fleet-validate-LIAVKDUU.js +0 -92
  1011. package/dist/fleet-verify-JIK3OQZR.js +0 -202
  1012. package/dist/fleet-view-IWHYGQKK.js +0 -118
  1013. package/dist/init-NJEDOTQW.js +0 -321
  1014. package/dist/interop-RVCAYECG.js +0 -115
  1015. package/dist/inventory-74UL7UHU.js +0 -118
  1016. package/dist/library-CTKZA7K3.js +0 -226
  1017. package/dist/memory-I76I5VUH.js +0 -512
  1018. package/dist/models-D4YDIQZQ.js +0 -289
  1019. package/dist/monitor-NKVD55HX.js +0 -775
  1020. package/dist/orchestrator-I6OATVPK.js +0 -39518
  1021. package/dist/panes-7BTYH3XQ.js +0 -103
  1022. package/dist/panes-WPOMEMRH.js +0 -74
  1023. package/dist/paths-J3KN7UAO.js +0 -67
  1024. package/dist/preload-EJAWJEIO.js +0 -116
  1025. package/dist/reset-4XMQKDNZ.js +0 -345
  1026. package/dist/resources-TVYVXK3Q.js +0 -125
  1027. package/dist/run-OWQNNSJU.js +0 -872
  1028. package/dist/share-NPZZMUXG.js +0 -290
  1029. package/dist/skills-OXFEAWMT.js +0 -510
  1030. package/dist/skills-eval-J5TCKSJA.js +0 -1034
  1031. package/dist/skills-inventory-7II4DM57.js +0 -133
  1032. package/dist/slash-commands-MDSDSWYF.js +0 -92
  1033. package/dist/steer-S7D7IKPU.js +0 -77
  1034. package/dist/support-5VAEC32W.js +0 -38
  1035. package/dist/targets-KILZEOCE.js +0 -1109
  1036. package/dist/tasks-R6P6OV22.js +0 -36
  1037. package/dist/terminal-lease-LZCG2KN3.js +0 -405
  1038. package/dist/tools-6OCQ6SVB.js +0 -28
  1039. package/dist/trace-JHLXWUMN.js +0 -572
  1040. package/dist/tui-primitives-RCY2HN7G.js +0 -17
  1041. package/dist/uninstall-FXYMFFRT.js +0 -407
  1042. package/dist/upgrade-D2OZH6IQ.js +0 -307
  1043. package/dist/usage-PIASNUS4.js +0 -1052
  1044. package/dist/verifiers-LTHUY2PX.js +0 -630
  1045. package/dist/verify-HYF7KBVE.js +0 -30
  1046. package/dist/web-fetch-MQN4FH3X.js +0 -788
  1047. package/dist/wiki-generate-RK7JQ5NP.js +0 -615
  1048. package/dist/with-panes-OFTNAR4Y.js +0 -628
  1049. package/skills/README.md +0 -418
  1050. package/skills/coding/ast-grep/SKILL.md +0 -213
  1051. package/skills/coding/ast-grep/evals.md +0 -82
  1052. package/skills/coding/coding-standards/SKILL.md +0 -164
  1053. package/skills/coding/coding-standards/evals.md +0 -57
  1054. package/skills/coding/prototype/SKILL.md +0 -151
  1055. package/skills/coding/prototype/evals.md +0 -61
  1056. package/skills/coding/tdd/SKILL.md +0 -134
  1057. package/skills/coding/tdd/evals.md +0 -61
  1058. package/skills/context/context-handoff/SKILL.md +0 -176
  1059. package/skills/context/context-handoff/evals.md +0 -101
  1060. package/skills/context/context-prime/SKILL.md +0 -131
  1061. package/skills/context/context-prime/evals.md +0 -99
  1062. package/skills/git/branch-closeout/SKILL.md +0 -132
  1063. package/skills/git/file-ticket/SKILL.md +0 -126
  1064. package/skills/git/fix-issue/SKILL.md +0 -136
  1065. package/skills/git/resolve-merge-conflicts/SKILL.md +0 -151
  1066. package/skills/git/resolve-merge-conflicts/evals.md +0 -85
  1067. package/skills/git/ship/SKILL.md +0 -134
  1068. package/skills/git/worktree-create/SKILL.md +0 -127
  1069. package/skills/git/worktree-merge/SKILL.md +0 -147
  1070. package/skills/meta/clio-coder-dev/SKILL.md +0 -101
  1071. package/skills/meta/clio-coder-dev/evals.md +0 -46
  1072. package/skills/meta/clio-coder-test/SKILL.md +0 -146
  1073. package/skills/meta/clio-coder-test/evals.md +0 -48
  1074. package/skills/meta/clio-coder-test/references/test-map.md +0 -96
  1075. package/skills/meta/credentials/SKILL.md +0 -132
  1076. package/skills/meta/credentials/evals.md +0 -104
  1077. package/skills/meta/find-skills/SKILL.md +0 -78
  1078. package/skills/meta/find-skills/evals.md +0 -47
  1079. package/skills/meta/herdr/SKILL.md +0 -133
  1080. package/skills/meta/herdr/evals.md +0 -38
  1081. package/skills/meta/skill-craft/SKILL.md +0 -125
  1082. package/skills/meta/skill-craft/evals.md +0 -41
  1083. package/skills/planning/archify/SKILL.md +0 -196
  1084. package/skills/planning/architecture/SKILL.md +0 -184
  1085. package/skills/planning/architecture/evals.md +0 -101
  1086. package/skills/planning/backlog/SKILL.md +0 -212
  1087. package/skills/planning/backlog/evals.md +0 -185
  1088. package/skills/planning/prd/SKILL.md +0 -129
  1089. package/skills/planning/prd/evals.md +0 -103
  1090. package/skills/planning/product-intent/SKILL.md +0 -173
  1091. package/skills/planning/product-intent/evals.md +0 -106
  1092. package/skills/planning/tech-spec/SKILL.md +0 -172
  1093. package/skills/planning/tech-spec/evals.md +0 -120
  1094. package/skills/registry.yaml +0 -144
  1095. package/skills/remote.yaml +0 -13
  1096. package/skills/research/arxiv-literature/SKILL.md +0 -168
  1097. package/skills/research/arxiv-literature/evals.md +0 -108
  1098. package/skills/research/experiment-protocol/SKILL.md +0 -148
  1099. package/skills/research/experiment-protocol/evals.md +0 -114
  1100. package/skills/research/scientific-debugging/SKILL.md +0 -149
  1101. package/skills/research/scientific-debugging/evals.md +0 -156
  1102. package/skills/research/scientific-modernization/SKILL.md +0 -170
  1103. package/skills/research/scientific-modernization/evals.md +0 -111
  1104. package/skills/skill-marketplace.json +0 -507
  1105. package/skills/workflow/cut-it/SKILL.md +0 -153
  1106. package/skills/workflow/cut-it/evals.md +0 -143
  1107. package/skills/workflow/design-council/SKILL.md +0 -233
  1108. package/skills/workflow/design-council/evals.md +0 -258
  1109. package/skills/workflow/grill-me/SKILL.md +0 -267
  1110. package/skills/workflow/grill-me/evals.md +0 -231
  1111. package/skills/workflow/workflow-distiller/SKILL.md +0 -201
  1112. package/skills/workflow/workflow-distiller/evals.md +0 -225
  1113. package/src/domains/extensions/resource-path.ts +0 -27
  1114. package/src/domains/extensions/resources.ts +0 -37
  1115. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  1116. package/src/interactive/overlays/agents.ts +0 -70
  1117. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  1118. package/src/interactive/overlays/prompts.ts +0 -89
  1119. package/src/interactive/overlays/skills-hub.ts +0 -615
  1120. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  1121. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  1122. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  1123. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  1124. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  1125. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  1126. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  1127. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  1128. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  1129. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  1130. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  1131. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  1132. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  1133. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  1134. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  1135. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  1136. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  1137. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  1138. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  1139. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  1140. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  1141. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  1142. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -0,0 +1,1219 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ formatSize,
4
+ truncateHead,
5
+ truncateTail
6
+ } from "./chunk-KECNXMDE.js";
7
+ import {
8
+ INSTRUCTION_SHAPED_WARNING
9
+ } from "./chunk-WXA2CFJO.js";
10
+ import {
11
+ createSafetyPolicyEngine
12
+ } from "./chunk-RAUOKUZV.js";
13
+ import {
14
+ byteLength,
15
+ truncateUtf8
16
+ } from "./chunk-MYI32N4R.js";
17
+ import {
18
+ GUARDRAIL_DEFAULTS,
19
+ resolveGuardrail
20
+ } from "./chunk-C27U2TYG.js";
21
+ import {
22
+ createRedactionTally,
23
+ redactSecretsText
24
+ } from "./chunk-O3VV6IVK.js";
25
+ import {
26
+ clioStateDir
27
+ } from "./chunk-CTTI7G3T.js";
28
+ import {
29
+ init_esm_shims
30
+ } from "./chunk-ECBHH7LU.js";
31
+
32
+ // src/tools/truncate.ts
33
+ init_esm_shims();
34
+ var DEFAULT_MAX_LINES = 2e3;
35
+ var DEFAULT_MAX_BYTES = 64 * 1024;
36
+ function splitLinesForCounting(content) {
37
+ if (content.length === 0) return [];
38
+ const lines = content.split("\n");
39
+ if (content.endsWith("\n")) lines.pop();
40
+ return lines;
41
+ }
42
+ function withClioDefaults(options) {
43
+ return {
44
+ maxLines: options.maxLines ?? DEFAULT_MAX_LINES,
45
+ maxBytes: options.maxBytes ?? DEFAULT_MAX_BYTES
46
+ };
47
+ }
48
+ function truncateHead2(content, options = {}) {
49
+ return truncateHead(content, withClioDefaults(options));
50
+ }
51
+ function truncateTail2(content, options = {}) {
52
+ return truncateTail(content, withClioDefaults(options));
53
+ }
54
+
55
+ // src/tools/result-shaping.ts
56
+ init_esm_shims();
57
+ import { createHash as createHash2 } from "node:crypto";
58
+ import { mkdirSync, readdirSync, rmdirSync, rmSync, statSync, writeFileSync } from "node:fs";
59
+ import { isAbsolute, join, relative, resolve } from "node:path";
60
+
61
+ // src/tools/result-disposition.ts
62
+ init_esm_shims();
63
+ import { createHash } from "node:crypto";
64
+ var TOOL_RESULT_DIGEST_MAX_BYTES = 240;
65
+ var ESSENTIAL_DETAIL_KEYS = /* @__PURE__ */ new Set([
66
+ "aborted",
67
+ "continuation",
68
+ "continuationHint",
69
+ "decision",
70
+ "error",
71
+ "errors",
72
+ "evidence",
73
+ "exitCode",
74
+ "exitStatus",
75
+ "outputBytes",
76
+ "outputCapped",
77
+ "next",
78
+ "outcome",
79
+ "safety",
80
+ "safetyDecision",
81
+ "status",
82
+ "signal",
83
+ "terminate",
84
+ "timedOut",
85
+ "retainedBytes",
86
+ "stderrBytes",
87
+ "stdoutBytes"
88
+ ]);
89
+ function positiveByteCap(value, fallback) {
90
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
91
+ }
92
+ function normalizeToolResultDisposition(spec, hardMaxBytes, requested = spec.metadata?.resultDisposition) {
93
+ const declared = requested;
94
+ if (declared === void 0) return null;
95
+ const hardCap = positiveByteCap(hardMaxBytes, 1);
96
+ const presentationCap = Math.min(positiveByteCap(declared.presentation.maxBytes, hardCap), hardCap);
97
+ const contextCap = Math.min(positiveByteCap(declared.context.maxBytes, hardCap), hardCap);
98
+ return {
99
+ presentation: {
100
+ foldDefault: declared.presentation.foldDefault,
101
+ showDiffWhenFolded: declared.presentation.showDiffWhenFolded,
102
+ failureExcerpt: declared.presentation.failureExcerpt,
103
+ maxBytes: presentationCap,
104
+ ...declared.presentation.overflow === void 0 ? {} : { overflow: declared.presentation.overflow }
105
+ },
106
+ context: { ...declared.context, maxBytes: contextCap },
107
+ ...declared.fallback === void 0 ? {} : { fallback: declared.fallback }
108
+ };
109
+ }
110
+ function isRecord(value) {
111
+ return value !== null && typeof value === "object" && !Array.isArray(value);
112
+ }
113
+ function stableValue(value, seen) {
114
+ if (value === null || typeof value !== "object") return value;
115
+ if (seen.has(value)) return "[circular]";
116
+ seen.add(value);
117
+ if (Array.isArray(value)) {
118
+ const items = value.map((item) => stableValue(item, seen));
119
+ seen.delete(value);
120
+ return items;
121
+ }
122
+ const record = value;
123
+ const out = {};
124
+ for (const key of Object.keys(record).sort()) out[key] = stableValue(record[key], seen);
125
+ seen.delete(value);
126
+ return out;
127
+ }
128
+ function stableJson(value) {
129
+ try {
130
+ return JSON.stringify(stableValue(value, /* @__PURE__ */ new Set())) ?? "null";
131
+ } catch {
132
+ return JSON.stringify(String(value));
133
+ }
134
+ }
135
+ function essentialFacts(details) {
136
+ if (details === void 0) return null;
137
+ const facts = {};
138
+ for (const key of Object.keys(details).sort()) {
139
+ if (ESSENTIAL_DETAIL_KEYS.has(key)) facts[key] = details[key];
140
+ }
141
+ const observation = isRecord(details.observation) ? details.observation : null;
142
+ if (observation !== null && observation.next !== void 0) facts.next = observation.next;
143
+ return Object.keys(facts).length > 0 ? facts : null;
144
+ }
145
+ function utf8Prefix(text, maxBytes) {
146
+ if (maxBytes <= 0) return "";
147
+ const buffer = Buffer.from(text, "utf8");
148
+ if (buffer.byteLength <= maxBytes) return text;
149
+ let end = Math.min(maxBytes, buffer.byteLength);
150
+ while (end > 0 && end < buffer.byteLength && (buffer[end] ?? 0) >>> 6 === 2) end -= 1;
151
+ return buffer.subarray(0, end).toString("utf8");
152
+ }
153
+ function utf8Suffix(text, maxBytes) {
154
+ if (maxBytes <= 0) return "";
155
+ const buffer = Buffer.from(text, "utf8");
156
+ if (buffer.byteLength <= maxBytes) return text;
157
+ let start = Math.max(0, buffer.byteLength - maxBytes);
158
+ while (start < buffer.byteLength && (buffer[start] ?? 0) >>> 6 === 2) start += 1;
159
+ return buffer.subarray(start).toString("utf8");
160
+ }
161
+ function capUtf8(text, maxBytes) {
162
+ return byteLength(text) <= maxBytes ? text : utf8Prefix(text, maxBytes);
163
+ }
164
+ function capDigestUtf8(text, maxBytes) {
165
+ if (byteLength(text) <= maxBytes) return text;
166
+ const marker = "\u2026";
167
+ const markerBytes = byteLength(marker);
168
+ if (markerBytes >= maxBytes) return utf8Prefix(text, maxBytes);
169
+ return `${utf8Prefix(text, maxBytes - markerBytes).trimEnd()}${marker}`;
170
+ }
171
+ function boundedToolResultExcerpt(text, maxBytes, bias = "head-tail") {
172
+ if (maxBytes <= 0) return "";
173
+ if (byteLength(text) <= maxBytes) return text;
174
+ if (bias === "tail") return utf8Suffix(text, maxBytes);
175
+ const marker = "\n[\u2026 omitted \u2026]\n";
176
+ const markerBytes = byteLength(marker);
177
+ if (markerBytes >= maxBytes) return utf8Prefix(text, maxBytes);
178
+ const bodyBudget = maxBytes - markerBytes;
179
+ const headBudget = Math.floor(bodyBudget / 2);
180
+ const tailBudget = bodyBudget - headBudget;
181
+ return `${utf8Prefix(text, headBudget)}${marker}${utf8Suffix(text, tailBudget)}`;
182
+ }
183
+ function sourceLineCount(text) {
184
+ if (text.length === 0) return 0;
185
+ return text.replace(/\r\n/gu, "\n").replace(/\r/gu, "\n").split("\n").length;
186
+ }
187
+ function summaryProvenance(text, algorithm = "sha256-head-tail-v1", redactions = 0) {
188
+ return {
189
+ producer: "code",
190
+ algorithm,
191
+ sourceSha256: createHash("sha256").update(text).digest("hex"),
192
+ sourceLines: sourceLineCount(text),
193
+ ...redactions > 0 ? { redactions } : {}
194
+ };
195
+ }
196
+ var ERROR_LIKE_LINE = /(?:\b(?:abort(?:ed)?|assert(?:ion)?|error|exception|fail(?:ed|ure)?|fatal|killed|panic|signal|timed?\s*out|timeout)\b|\bnot ok\b|\bERR!\b)/iu;
197
+ var SUMMARY_LINE_MAX_BYTES = 768;
198
+ function summaryLine(line) {
199
+ return boundedToolResultExcerpt(line, SUMMARY_LINE_MAX_BYTES);
200
+ }
201
+ function normalizeNewlines(text) {
202
+ return text.replace(/\r\n/gu, "\n").replace(/\r/gu, "\n");
203
+ }
204
+ function contentLines(text) {
205
+ return normalizeNewlines(text).split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
206
+ }
207
+ function deterministicHeadTailSummary(text, redact = true) {
208
+ const tally = createRedactionTally();
209
+ const safeText = redact ? redactSecretsText(text, tally) : text;
210
+ return { text: contentLines(safeText).join("\n"), redactions: tally.count, complete: tally.count === 0 };
211
+ }
212
+ function renderSummarySection(label, lines) {
213
+ return lines.length === 0 ? "" : `[${label}]
214
+ ${lines.map(summaryLine).join("\n")}`;
215
+ }
216
+ function deterministicDiagnosticSummary(text, maxBytes, redact = true) {
217
+ if (maxBytes <= 0 || text.length === 0) return { text: "", redactions: 0, complete: text.length === 0 };
218
+ const tally = createRedactionTally();
219
+ const safeText = redact ? redactSecretsText(text, tally) : text;
220
+ const lines = normalizeNewlines(safeText).split("\n");
221
+ const nonempty = lines.map((line, index) => ({ line: line.trim(), index })).filter((entry) => entry.line.length > 0);
222
+ if (nonempty.length === 0) return { text: "", redactions: tally.count, complete: tally.count === 0 };
223
+ if (nonempty.length === 1) {
224
+ const only = nonempty[0]?.line ?? "";
225
+ return {
226
+ text: boundedToolResultExcerpt(only, maxBytes),
227
+ redactions: tally.count,
228
+ complete: tally.count === 0 && byteLength(only) <= maxBytes
229
+ };
230
+ }
231
+ const head = nonempty.slice(0, 4);
232
+ const tail = nonempty.slice(Math.max(head.length, nonempty.length - 6));
233
+ const edgeIndexes = new Set([...head, ...tail].map((entry) => entry.index));
234
+ const diagnostics = nonempty.filter((entry) => !edgeIndexes.has(entry.index) && ERROR_LIKE_LINE.test(entry.line));
235
+ const sections = [
236
+ renderSummarySection(
237
+ "diagnostic head",
238
+ head.map((entry) => entry.line)
239
+ ),
240
+ renderSummarySection(
241
+ "error-like lines",
242
+ diagnostics.map((entry) => entry.line)
243
+ ),
244
+ renderSummarySection(
245
+ "diagnostic tail",
246
+ tail.map((entry) => entry.line)
247
+ )
248
+ ].filter((section) => section.length > 0);
249
+ const selected = [...head, ...diagnostics, ...tail];
250
+ const keepsEveryLine = selected.length === nonempty.length && selected.every((entry) => byteLength(entry.line) <= SUMMARY_LINE_MAX_BYTES);
251
+ const rendered = keepsEveryLine ? selected.map((entry) => summaryLine(entry.line)).join("\n") : sections.join("\n");
252
+ if (byteLength(rendered) <= maxBytes) {
253
+ return { text: rendered, redactions: tally.count, complete: keepsEveryLine && tally.count === 0 };
254
+ }
255
+ const weights = diagnostics.length > 0 ? [0.25, 0.45, 0.3] : [0.4, 0, 0.6];
256
+ const boundedSections = [];
257
+ for (const [index, section] of sections.entries()) {
258
+ const weight = diagnostics.length > 0 ? weights[index] ?? 0 : index === 0 ? 0.4 : 0.6;
259
+ const budget = Math.floor(maxBytes * weight);
260
+ if (budget > 0) boundedSections.push(boundedToolResultExcerpt(section ?? "", budget));
261
+ }
262
+ return { text: capUtf8(boundedSections.join("\n"), maxBytes), redactions: tally.count, complete: false };
263
+ }
264
+ function retrievalLine(offloadPath, followUpHint2) {
265
+ return offloadPath === null ? `retrieve=${JSON.stringify(followUpHint2)}` : `retrieve=${JSON.stringify(`read ${offloadPath} with offset and limit`)}`;
266
+ }
267
+ function contextHeader(input, appliedMode, truncated, provenance) {
268
+ const lines = [
269
+ `[tool-result ${appliedMode}]`,
270
+ `kind=${input.kind} capturedBytes=${input.capturedBytes} displayedBytes=${input.displayedBytes} truncated=${String(truncated)}`,
271
+ retrievalLine(input.offloadPath, input.followUpHint),
272
+ `followUp=${JSON.stringify(input.followUpHint)}`
273
+ ];
274
+ if (provenance !== void 0) {
275
+ lines.push(`summary=code/${provenance.algorithm} sha256=${provenance.sourceSha256} lines=${provenance.sourceLines}`);
276
+ }
277
+ if (input.disposition.fallback !== void 0) {
278
+ lines.push(`fallback=${input.disposition.fallback.reason} ${JSON.stringify(input.disposition.fallback.message)}`);
279
+ }
280
+ const facts = essentialFacts(input.details);
281
+ if (facts !== null) lines.push(`facts=${stableJson(facts)}`);
282
+ return lines.join("\n");
283
+ }
284
+ function joinHeaderAndBody(header, body, maxBytes, bias = "head-tail") {
285
+ if (body.length === 0) return capUtf8(header, maxBytes);
286
+ const separator = "\n";
287
+ const headerBytes = byteLength(header);
288
+ const separatorBytes = byteLength(separator);
289
+ if (headerBytes + separatorBytes >= maxBytes) return capUtf8(header, maxBytes);
290
+ const bodyBudget = maxBytes - headerBytes - separatorBytes;
291
+ return `${header}${separator}${boundedToolResultExcerpt(body, bodyBudget, bias)}`;
292
+ }
293
+ function fullTrailer(input) {
294
+ const facts = essentialFacts(input.details);
295
+ const lines = [];
296
+ if (facts !== null) lines.push(`facts=${stableJson(facts)}`);
297
+ if (input.followUpHint.length > 0) lines.push(`followUp=${JSON.stringify(input.followUpHint)}`);
298
+ return lines.length === 0 ? "" : `[tool-result metadata]
299
+ ${lines.join("\n")}`;
300
+ }
301
+ var NUL = "\0";
302
+ function stripNulForContext(text) {
303
+ const parts = text.split(NUL);
304
+ return parts.length === 1 ? { text, stripped: 0 } : { text: parts.join(""), stripped: parts.length - 1 };
305
+ }
306
+ function projectToolResultContext(input) {
307
+ const requestedMode = input.disposition.context.mode;
308
+ const maxBytes = input.disposition.context.maxBytes;
309
+ const sanitized = stripNulForContext(input.text);
310
+ const body = sanitized.text;
311
+ const capturedTextIsComplete = input.capturedBytes <= byteLength(input.text) && sanitized.stripped === 0;
312
+ if (requestedMode === "full") {
313
+ const trailer = fullTrailer(input);
314
+ const candidate = trailer.length === 0 ? body : `${body}
315
+
316
+ ${trailer}`;
317
+ if (capturedTextIsComplete && byteLength(candidate) <= maxBytes) {
318
+ return { text: candidate, appliedMode: "full", truncated: false };
319
+ }
320
+ const header2 = contextHeader(input, "bounded", true);
321
+ return {
322
+ text: joinHeaderAndBody(header2, body, maxBytes, input.disposition.context.downgradeExcerpt),
323
+ appliedMode: "bounded",
324
+ truncated: true,
325
+ downgrade: { from: "full", to: "bounded", reason: "hard-budget" }
326
+ };
327
+ }
328
+ if (requestedMode === "metadata-only") {
329
+ return {
330
+ text: capUtf8(contextHeader(input, "metadata-only", input.capturedBytes > 0), maxBytes),
331
+ appliedMode: "metadata-only",
332
+ truncated: input.capturedBytes > 0
333
+ };
334
+ }
335
+ if (requestedMode === "summary") {
336
+ const diagnostic = input.disposition.context.strategy === "diagnostic";
337
+ const algorithm = diagnostic ? "sha256-diagnostic-v1" : "sha256-head-tail-v1";
338
+ const redact = input.disposition.context.redact !== false;
339
+ const budgetHeader = contextHeader(input, "summary", true, summaryProvenance(input.text, algorithm));
340
+ const bodyBudget = Math.max(0, maxBytes - byteLength(budgetHeader) - 1);
341
+ const selected = diagnostic ? deterministicDiagnosticSummary(body, bodyBudget, redact) : deterministicHeadTailSummary(body, redact);
342
+ const provenance = summaryProvenance(input.text, algorithm, selected.redactions);
343
+ const completeHeader = contextHeader(input, "summary", false, provenance);
344
+ const fits = byteLength(completeHeader) + 1 + byteLength(selected.text) <= maxBytes;
345
+ const truncated = input.capturedBytes > 0 && !(capturedTextIsComplete && selected.complete && fits);
346
+ const header2 = contextHeader(input, "summary", truncated, provenance);
347
+ return {
348
+ text: joinHeaderAndBody(header2, selected.text, maxBytes),
349
+ appliedMode: "summary",
350
+ truncated,
351
+ summaryProvenance: provenance
352
+ };
353
+ }
354
+ const header = contextHeader(input, "bounded", input.capturedBytes > maxBytes);
355
+ const text = joinHeaderAndBody(header, body, maxBytes, input.disposition.context.excerpt);
356
+ return {
357
+ text,
358
+ appliedMode: "bounded",
359
+ truncated: byteLength(header) + 1 + byteLength(body) > maxBytes || !capturedTextIsComplete
360
+ };
361
+ }
362
+ var DIGEST_FACT_KEYS = [
363
+ "outcome",
364
+ "exitCode",
365
+ "timedOut",
366
+ "aborted",
367
+ "outputCapped",
368
+ "signal",
369
+ "status",
370
+ "error",
371
+ "decision",
372
+ "next"
373
+ ];
374
+ function digestFactText(details) {
375
+ if (details === void 0) return "";
376
+ const facts = [];
377
+ for (const key of DIGEST_FACT_KEYS) {
378
+ if (details[key] !== void 0) facts.push(`${key}=${stableJson(details[key])}`);
379
+ }
380
+ return facts.join(" ");
381
+ }
382
+ function projectionBody(input, projection) {
383
+ if (projection.appliedMode === "metadata-only") return "";
384
+ if (projection.appliedMode === "full") {
385
+ const trailer = fullTrailer(input);
386
+ return trailer.length > 0 && projection.text.endsWith(`
387
+
388
+ ${trailer}`) ? projection.text.slice(0, -(trailer.length + 2)) : projection.text;
389
+ }
390
+ const header = contextHeader(input, projection.appliedMode, projection.truncated, projection.summaryProvenance);
391
+ const prefix = `${header}
392
+ `;
393
+ return projection.text.startsWith(prefix) ? projection.text.slice(prefix.length) : "";
394
+ }
395
+ function digestText(status, facts, body, redactions, maxBytes) {
396
+ const tally = createRedactionTally();
397
+ const safeStatus = redactSecretsText(status, tally);
398
+ const safeFacts = redactSecretsText(facts, tally);
399
+ const statusAndFacts = [safeStatus, safeFacts].filter((value) => value.length > 0).join(" ");
400
+ const bodyBudget = Math.max(0, maxBytes - byteLength(statusAndFacts) - 2);
401
+ const selected = deterministicDiagnosticSummary(body, bodyBudget, true);
402
+ const candidate = [statusAndFacts, selected.text.replace(/\s+/gu, " ").trim()].filter((value) => value.length > 0).join("; ");
403
+ return {
404
+ text: capDigestUtf8(candidate, maxBytes),
405
+ redactions: redactions + tally.count + selected.redactions
406
+ };
407
+ }
408
+ function deterministicToolResultDigest(input, maxBytes = TOOL_RESULT_DIGEST_MAX_BYTES) {
409
+ const projection = projectToolResultContext(input);
410
+ const status = [
411
+ `kind=${input.kind}`,
412
+ `mode=${projection.appliedMode}`,
413
+ `truncated=${String(projection.truncated)}`,
414
+ ...projection.appliedMode === "metadata-only" || projection.truncated ? [`capturedBytes=${input.capturedBytes}`] : []
415
+ ].join(" ");
416
+ const digest = digestText(
417
+ status,
418
+ digestFactText(input.details),
419
+ projectionBody(input, projection),
420
+ projection.summaryProvenance?.redactions ?? 0,
421
+ Math.max(1, Math.floor(maxBytes))
422
+ );
423
+ return {
424
+ text: digest.text,
425
+ provenance: {
426
+ producer: "code",
427
+ source: "canonical-result-disposition",
428
+ algorithm: "redacted-context-digest-v1",
429
+ contextMode: projection.appliedMode,
430
+ ...projection.summaryProvenance === void 0 ? {} : { summaryAlgorithm: projection.summaryProvenance.algorithm },
431
+ ...digest.redactions > 0 ? { redactions: digest.redactions } : {}
432
+ }
433
+ };
434
+ }
435
+ function legacyToolResultDigest(text, options) {
436
+ const maxBytes = Math.max(1, Math.floor(options.maxBytes ?? TOOL_RESULT_DIGEST_MAX_BYTES));
437
+ const fallback = options.outcome === "error" && text.trim().length === 0 ? "an unknown tool error" : text;
438
+ const digest = digestText("", "", fallback, 0, maxBytes);
439
+ return {
440
+ text: digest.text,
441
+ provenance: {
442
+ producer: "code",
443
+ source: "legacy-fallback",
444
+ algorithm: "redacted-legacy-digest-v1",
445
+ ...digest.redactions > 0 ? { redactions: digest.redactions } : {}
446
+ }
447
+ };
448
+ }
449
+ function sanitizeToolResultDigest(digest, maxBytes = TOOL_RESULT_DIGEST_MAX_BYTES) {
450
+ const tally = createRedactionTally();
451
+ const safe = redactSecretsText(digest.text, tally).replace(/\s+/gu, " ").trim();
452
+ const redactions = (digest.provenance.redactions ?? 0) + tally.count;
453
+ return {
454
+ text: capDigestUtf8(safe, Math.max(1, Math.floor(maxBytes))),
455
+ provenance: {
456
+ ...digest.provenance,
457
+ ...redactions > 0 ? { redactions } : {}
458
+ }
459
+ };
460
+ }
461
+ function toolResultContextText(result) {
462
+ if (result.modelContext !== void 0) return result.modelContext;
463
+ return result.kind === "ok" ? result.output : result.message;
464
+ }
465
+ function isDispositionedToolResultError(result) {
466
+ if (!isRecord(result)) return false;
467
+ const details = isRecord(result.details) ? result.details : null;
468
+ const metadata = details !== null && isRecord(details.resultDisposition) ? details.resultDisposition : null;
469
+ const kind = result.kind ?? details?.kind;
470
+ return kind === "error" && metadata?.version === 1 && metadata.applications === 1;
471
+ }
472
+ function toolResultPresentationText(result) {
473
+ if (!isRecord(result)) return null;
474
+ const details = isRecord(result.details) ? result.details : null;
475
+ const metadata = details !== null && isRecord(details.resultDisposition) ? details.resultDisposition : null;
476
+ const presentation = metadata !== null && isRecord(metadata.presentation) ? metadata.presentation : null;
477
+ return presentation !== null && typeof presentation.content === "string" ? presentation.content : null;
478
+ }
479
+ function toolResultPresentationPolicy(result) {
480
+ if (!isRecord(result)) return null;
481
+ const details = isRecord(result.details) ? result.details : null;
482
+ const metadata = details !== null && isRecord(details.resultDisposition) ? details.resultDisposition : null;
483
+ const presentation = metadata !== null && isRecord(metadata.presentation) ? metadata.presentation : null;
484
+ if (presentation === null || presentation.foldDefault !== "folded" && presentation.foldDefault !== "expanded" || typeof presentation.showDiffWhenFolded !== "boolean" || typeof presentation.failureExcerpt !== "boolean") {
485
+ return null;
486
+ }
487
+ return {
488
+ foldDefault: presentation.foldDefault,
489
+ showDiffWhenFolded: presentation.showDiffWhenFolded,
490
+ failureExcerpt: presentation.failureExcerpt
491
+ };
492
+ }
493
+
494
+ // src/tools/result-shaping.ts
495
+ var DEFAULT_TOOL_RESULT_MAX_BYTES = DEFAULT_MAX_BYTES;
496
+ var RESULT_TRUNCATION_MARKER = "\n[tool result truncated]";
497
+ var RESULT_OFFLOAD_MAX_BYTES = 10 * 1024 * 1024;
498
+ var TAIL_NOTICE_RESERVE_BYTES = 512;
499
+ var TOOL_OFFLOAD_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1e3;
500
+ function mergeDetails(details, resultSize) {
501
+ return { ...details ?? {}, resultSize };
502
+ }
503
+ function maxBytesFor(spec, context) {
504
+ const configured = spec.metadata?.resultSizePolicy?.maxBytes;
505
+ const policyMax = typeof configured === "number" && Number.isFinite(configured) && configured > 0 ? Math.floor(configured) : DEFAULT_TOOL_RESULT_MAX_BYTES;
506
+ const sessionMax = context?.toolResultMaxBytes;
507
+ return typeof sessionMax === "number" && Number.isFinite(sessionMax) && sessionMax > 0 ? Math.min(policyMax, Math.floor(sessionMax)) : policyMax;
508
+ }
509
+ function followUpHint(spec) {
510
+ return spec.metadata?.resultSizePolicy?.followUpHint ?? "Use a narrower query, offset/limit arguments, or a more specific tool call to inspect the omitted content.";
511
+ }
512
+ function offloadMaxBytesFor(spec) {
513
+ const configured = spec.metadata?.resultSizePolicy?.offloadMaxBytes;
514
+ return typeof configured === "number" && Number.isFinite(configured) && configured > 0 ? Math.floor(configured) : RESULT_OFFLOAD_MAX_BYTES;
515
+ }
516
+ function toolResultDigestFor(spec, result, requestedDisposition, context) {
517
+ const text = resultText(result);
518
+ const disposition = normalizeToolResultDisposition(spec, maxBytesFor(spec, context), requestedDisposition);
519
+ if (disposition === null) {
520
+ const projected = shapeLegacyToolResult(spec, result, context);
521
+ return legacyToolResultDigest(resultText(projected), { outcome: result.kind });
522
+ }
523
+ const capturedBytes = capturedBytesFor(result, text);
524
+ return deterministicToolResultDigest({
525
+ text,
526
+ kind: result.kind,
527
+ details: result.details,
528
+ disposition,
529
+ capturedBytes,
530
+ displayedBytes: Math.min(capturedBytes, disposition.presentation.maxBytes),
531
+ offloadPath: existingOffloadPath(result.details),
532
+ followUpHint: followUpHint(spec)
533
+ });
534
+ }
535
+ function detailsRecord(details, key) {
536
+ const candidate = details?.[key];
537
+ return candidate !== null && typeof candidate === "object" && !Array.isArray(candidate) ? candidate : null;
538
+ }
539
+ function existingOffloadPath(details) {
540
+ const fromResultSize = detailsRecord(details, "resultSize")?.offloadPath;
541
+ if (typeof fromResultSize === "string" && fromResultSize.length > 0) return fromResultSize;
542
+ const fromObservation = detailsRecord(details, "observation")?.offloadPath;
543
+ return typeof fromObservation === "string" && fromObservation.length > 0 ? fromObservation : null;
544
+ }
545
+ function existingDisposition(details) {
546
+ const disposition = detailsRecord(details, "resultDisposition");
547
+ return disposition?.version === 1 && disposition.applications === 1 ? disposition : null;
548
+ }
549
+ function safePathSegment(value) {
550
+ const safe = value.trim().replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 128);
551
+ return safe.length > 0 ? safe : "unnamed";
552
+ }
553
+ function offloadBody(text, bytes, maxBytes) {
554
+ if (bytes <= maxBytes) return text;
555
+ const notice = `
556
+ [clio-coder scratch output truncated at ${maxBytes} bytes; original size ${bytes} bytes]`;
557
+ const prefixBudget = maxBytes - byteLength(notice);
558
+ return `${truncateUtf8(text, Math.max(0, prefixBudget), "")}${notice}`;
559
+ }
560
+ function sweepExpiredToolOffloads(now = Date.now()) {
561
+ const root = join(clioStateDir(), "scratch");
562
+ const cutoff = now - TOOL_OFFLOAD_MAX_AGE_MS;
563
+ let removed = 0;
564
+ let skipped = 0;
565
+ try {
566
+ for (const session of readdirSync(root, { withFileTypes: true })) {
567
+ if (!session.isDirectory()) continue;
568
+ const sessionDir = join(root, session.name);
569
+ for (const entry of readdirSync(sessionDir, { withFileTypes: true })) {
570
+ if (!entry.isFile()) continue;
571
+ const path = join(sessionDir, entry.name);
572
+ try {
573
+ if (statSync(path).mtimeMs >= cutoff) continue;
574
+ rmSync(path, { force: true });
575
+ removed += 1;
576
+ } catch (error) {
577
+ if (error?.code !== "ENOENT") skipped += 1;
578
+ }
579
+ }
580
+ try {
581
+ if (readdirSync(sessionDir).length === 0) rmdirSync(sessionDir);
582
+ } catch (error) {
583
+ if (error?.code !== "ENOENT") skipped += 1;
584
+ }
585
+ }
586
+ } catch (error) {
587
+ if (error?.code !== "ENOENT") skipped += 1;
588
+ }
589
+ return { removed, skipped };
590
+ }
591
+ function writeToolOffload(text, context, maxBytes = RESULT_OFFLOAD_MAX_BYTES, digest = createHash2("sha256").update(text).digest("hex")) {
592
+ try {
593
+ const bytes = byteLength(text);
594
+ const sessionId = safePathSegment(context?.sessionId ?? "no-session");
595
+ const dir = join(clioStateDir(), "scratch", sessionId);
596
+ const path = join(dir, `${digest}.txt`);
597
+ mkdirSync(dir, { recursive: true });
598
+ writeFileSync(path, offloadBody(text, bytes, maxBytes), "utf8");
599
+ return path;
600
+ } catch {
601
+ return null;
602
+ }
603
+ }
604
+ var OFFLOAD_POINTER_NOTE = "overflow copy, read-only; not the workspace";
605
+ function offloadPointer(offloadPath) {
606
+ return `full: ${offloadPath} (${OFFLOAD_POINTER_NOTE})`;
607
+ }
608
+ function isSessionOffloadPath(filePath, sessionId) {
609
+ const dir = join(clioStateDir(), "scratch", safePathSegment(sessionId ?? "no-session"));
610
+ const rel = relative(dir, resolve(filePath));
611
+ return rel.length > 0 && !rel.startsWith("..") && !isAbsolute(rel);
612
+ }
613
+ function bracketedHint(spec, offloadPath) {
614
+ const hint = followUpHint(spec);
615
+ if (offloadPath === null) return hint;
616
+ return `${hint} ${offloadPointer(offloadPath)}; read it with offset and limit to inspect the rest.`;
617
+ }
618
+ function shapeJsonOverflow(spec, result, text, bytes, maxBytes, context, offloadMaxBytes) {
619
+ const observation = detailsRecord(result.details, "observation");
620
+ const offloadPath = writeToolOffload(text, context, offloadMaxBytes);
621
+ const next = typeof observation?.next === "string" && observation.next.length > 0 ? observation.next : followUpHint(spec);
622
+ const stub = JSON.stringify({
623
+ error: `result exceeded ${maxBytes} bytes`,
624
+ ...offloadPath !== null ? { offloadPath, offloadPathNote: OFFLOAD_POINTER_NOTE } : {},
625
+ next
626
+ });
627
+ const resultSize = {
628
+ bytes,
629
+ shownBytes: byteLength(stub),
630
+ maxBytes,
631
+ truncated: true,
632
+ policy: spec.metadata?.resultSizePolicy?.kind ?? "truncate",
633
+ followUpHint: followUpHint(spec),
634
+ ...offloadPath !== null ? { offloadPath } : {}
635
+ };
636
+ if (result.kind === "ok") {
637
+ return { ...result, output: stub, details: mergeDetails(result.details, resultSize) };
638
+ }
639
+ return { ...result, message: stub, details: mergeDetails(result.details, resultSize) };
640
+ }
641
+ function shapeTailOverflow(spec, result, text, bytes, maxBytes, context, offloadMaxBytes) {
642
+ const truncation = truncateTail2(text, {
643
+ maxLines: DEFAULT_MAX_LINES,
644
+ maxBytes: Math.max(1, maxBytes - TAIL_NOTICE_RESERVE_BYTES)
645
+ });
646
+ const offloadPath = writeToolOffload(text, context, offloadMaxBytes);
647
+ const startLine = truncation.totalLines - truncation.outputLines + 1;
648
+ const scope = truncation.lastLinePartial ? `last ${formatSize(truncation.outputBytes)} of line ${truncation.totalLines} (line is large)` : `lines ${startLine}-${truncation.totalLines} of ${truncation.totalLines}`;
649
+ const location = offloadPath === null ? "" : ` Full output saved to ${offloadPath}; ${OFFLOAD_POINTER_NOTE}; read it with offset/limit.`;
650
+ const note = `[Output tail-truncated: showing ${scope} (${formatSize(maxBytes)} display limit).${location}]`;
651
+ const resultSize = {
652
+ bytes,
653
+ shownBytes: truncation.outputBytes,
654
+ maxBytes,
655
+ truncated: true,
656
+ policy: "tail",
657
+ followUpHint: followUpHint(spec),
658
+ ...offloadPath === null ? {} : { offloadPath }
659
+ };
660
+ const displayed = `${truncation.content}
661
+
662
+ ${note}`;
663
+ if (result.kind === "ok") return { ...result, output: displayed, details: mergeDetails(result.details, resultSize) };
664
+ return { ...result, message: displayed, details: mergeDetails(result.details, resultSize) };
665
+ }
666
+ function shapeLegacyToolResult(spec, result, context, overflow = "head") {
667
+ if (existingOffloadPath(result.details) !== null) return result;
668
+ const maxBytes = maxBytesFor(spec, context);
669
+ const offloadMaxBytes = offloadMaxBytesFor(spec);
670
+ const text = result.kind === "ok" ? result.output : result.message;
671
+ const bytes = byteLength(text);
672
+ if (bytes <= maxBytes) return result;
673
+ const observation = detailsRecord(result.details, "observation");
674
+ if (observation?.format === "json") {
675
+ return shapeJsonOverflow(spec, result, text, bytes, maxBytes, context, offloadMaxBytes);
676
+ }
677
+ if (overflow === "tail") {
678
+ return shapeTailOverflow(spec, result, text, bytes, maxBytes, context, offloadMaxBytes);
679
+ }
680
+ const truncated = truncateUtf8(text, maxBytes, RESULT_TRUNCATION_MARKER);
681
+ const offloadPath = writeToolOffload(text, context, offloadMaxBytes);
682
+ const resultSize = {
683
+ bytes,
684
+ shownBytes: byteLength(truncated),
685
+ maxBytes,
686
+ truncated: true,
687
+ policy: spec.metadata?.resultSizePolicy?.kind ?? "truncate",
688
+ followUpHint: followUpHint(spec),
689
+ ...offloadPath !== null ? { offloadPath } : {}
690
+ };
691
+ if (result.kind === "ok") {
692
+ return {
693
+ ...result,
694
+ output: `${truncated}
695
+
696
+ [${bracketedHint(spec, offloadPath)}]`,
697
+ details: mergeDetails(result.details, resultSize)
698
+ };
699
+ }
700
+ return {
701
+ ...result,
702
+ message: `${truncated}
703
+
704
+ [${bracketedHint(spec, offloadPath)}]`,
705
+ details: mergeDetails(result.details, resultSize)
706
+ };
707
+ }
708
+ function specWithDisplayCap(spec, maxBytes) {
709
+ const metadata = spec.metadata;
710
+ if (metadata === void 0) return spec;
711
+ return {
712
+ ...spec,
713
+ metadata: {
714
+ ...metadata,
715
+ resultSizePolicy: { ...metadata.resultSizePolicy, maxBytes }
716
+ }
717
+ };
718
+ }
719
+ function resultText(result) {
720
+ return result.kind === "ok" ? result.output : result.message;
721
+ }
722
+ function withFallbackNotice(result, fallback) {
723
+ const note = `
724
+
725
+ [result disposition fell back to metadata-only: ${fallback.reason} (${fallback.message}); the model received facts and retrieval only]`;
726
+ return result.kind === "ok" ? { ...result, output: `${result.output}${note}` } : { ...result, message: `${result.message}${note}` };
727
+ }
728
+ function numberField(record, key) {
729
+ const value = record?.[key];
730
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : null;
731
+ }
732
+ function capturedBytesFor(result, text) {
733
+ const declared = numberField(detailsRecord(result.details, "resultSize"), "bytes");
734
+ return Math.max(byteLength(text), declared ?? 0);
735
+ }
736
+ function resultWasTruncated(result) {
737
+ return detailsRecord(result.details, "resultSize")?.truncated === true;
738
+ }
739
+ function withOffloadMetadata(result, offloadPath, capturedBytes, displayedBytes, maxBytes, hint) {
740
+ const current = detailsRecord(result.details, "resultSize") ?? {};
741
+ const resultSize = {
742
+ bytes: numberField(current, "bytes") ?? capturedBytes,
743
+ shownBytes: numberField(current, "shownBytes") ?? displayedBytes,
744
+ maxBytes: numberField(current, "maxBytes") ?? maxBytes,
745
+ truncated: current.truncated === true,
746
+ policy: typeof current.policy === "string" ? current.policy : "disposition",
747
+ followUpHint: typeof current.followUpHint === "string" ? current.followUpHint : hint,
748
+ ...current,
749
+ offloadPath
750
+ };
751
+ return { ...result, details: mergeDetails(result.details, resultSize) };
752
+ }
753
+ function shapeTextToolResultBody(spec, result, context, requestedDisposition) {
754
+ if (existingDisposition(result.details) !== null) return result;
755
+ const hardMaxBytes = maxBytesFor(spec, context);
756
+ const disposition = normalizeToolResultDisposition(spec, hardMaxBytes, requestedDisposition);
757
+ if (disposition === null) return shapeLegacyToolResult(spec, result, context);
758
+ const capturedText = resultText(result);
759
+ const capturedBytes = capturedBytesFor(result, capturedText);
760
+ let displayed = shapeLegacyToolResult(
761
+ specWithDisplayCap(spec, disposition.presentation.maxBytes),
762
+ result,
763
+ context,
764
+ disposition.presentation.overflow
765
+ );
766
+ if (disposition.fallback !== void 0) displayed = withFallbackNotice(displayed, disposition.fallback);
767
+ let displayedText = resultText(displayed);
768
+ let displayedBytes = byteLength(displayedText);
769
+ let offloadPath = existingOffloadPath(displayed.details);
770
+ const projectionInput = {
771
+ text: capturedText,
772
+ kind: result.kind,
773
+ details: displayed.details,
774
+ disposition,
775
+ capturedBytes,
776
+ displayedBytes,
777
+ offloadPath,
778
+ followUpHint: followUpHint(spec)
779
+ };
780
+ let projection = projectToolResultContext(projectionInput);
781
+ if (offloadPath === null && projection.truncated) {
782
+ offloadPath = writeToolOffload(
783
+ capturedText,
784
+ context,
785
+ offloadMaxBytesFor(spec),
786
+ projection.summaryProvenance?.sourceSha256
787
+ );
788
+ if (offloadPath !== null) {
789
+ displayed = withOffloadMetadata(
790
+ displayed,
791
+ offloadPath,
792
+ capturedBytes,
793
+ displayedBytes,
794
+ disposition.presentation.maxBytes,
795
+ followUpHint(spec)
796
+ );
797
+ displayedText = resultText(displayed);
798
+ displayedBytes = byteLength(displayedText);
799
+ projection = projectToolResultContext({
800
+ ...projectionInput,
801
+ details: displayed.details,
802
+ displayedBytes,
803
+ offloadPath
804
+ });
805
+ }
806
+ }
807
+ const metadata = {
808
+ version: 1,
809
+ applications: 1,
810
+ presentation: { ...disposition.presentation, content: displayedText },
811
+ context: {
812
+ requestedMode: disposition.context.mode,
813
+ appliedMode: projection.appliedMode,
814
+ maxBytes: disposition.context.maxBytes,
815
+ ...disposition.context.mode === "bounded" && disposition.context.excerpt !== void 0 ? { excerpt: disposition.context.excerpt } : {},
816
+ ...disposition.context.mode === "full" && disposition.context.downgradeExcerpt !== void 0 ? { excerpt: disposition.context.downgradeExcerpt } : {},
817
+ ...disposition.context.mode === "summary" && disposition.context.strategy !== void 0 ? { summaryStrategy: disposition.context.strategy } : {}
818
+ },
819
+ capturedBytes,
820
+ displayedBytes,
821
+ contextBytes: byteLength(projection.text),
822
+ presentationTruncated: resultWasTruncated(displayed),
823
+ contextTruncated: projection.truncated,
824
+ ...projection.downgrade === void 0 ? {} : { downgrade: projection.downgrade },
825
+ ...offloadPath === null ? {} : { offloadPath },
826
+ retrieval: offloadPath === null ? followUpHint(spec) : `read ${offloadPath} with offset and limit to retrieve omitted content`,
827
+ ...projection.summaryProvenance === void 0 ? {} : { summaryProvenance: projection.summaryProvenance },
828
+ ...disposition.fallback === void 0 ? {} : { fallback: disposition.fallback }
829
+ };
830
+ return {
831
+ ...displayed,
832
+ details: { ...displayed.details ?? {}, resultDisposition: metadata },
833
+ modelContext: projection.text
834
+ };
835
+ }
836
+ function shapeTextToolResult(spec, result, context, requestedDisposition) {
837
+ const shaped = shapeTextToolResultBody(spec, result, context, requestedDisposition);
838
+ const warning = `[middleware:warn] ${INSTRUCTION_SHAPED_WARNING}`;
839
+ if (!resultText(result).includes(warning)) return shaped;
840
+ const hardMaxBytes = maxBytesFor(spec, context);
841
+ const disposition = normalizeToolResultDisposition(spec, hardMaxBytes, requestedDisposition);
842
+ const preserve = (text, cap, tail) => {
843
+ if (text.startsWith(warning) && byteLength(text) <= cap) return text;
844
+ const prefix = `${warning}
845
+
846
+ `;
847
+ const remainder = text.split(warning).join("").trimStart();
848
+ const allowance = Math.max(0, cap - byteLength(prefix));
849
+ if (allowance === 0) return truncateUtf8(warning, cap, "");
850
+ const body = tail ? truncateTail2(remainder, { maxBytes: allowance, maxLines: Number.MAX_SAFE_INTEGER }).content : truncateUtf8(remainder, allowance, "");
851
+ return prefix + body;
852
+ };
853
+ const output = preserve(
854
+ resultText(shaped),
855
+ Math.min(hardMaxBytes, disposition?.presentation.maxBytes ?? hardMaxBytes),
856
+ disposition?.presentation.overflow === "tail"
857
+ );
858
+ const modelContext = shaped.modelContext === void 0 ? void 0 : preserve(
859
+ shaped.modelContext,
860
+ Math.min(hardMaxBytes, disposition?.context.maxBytes ?? hardMaxBytes),
861
+ disposition?.context.mode === "bounded" && disposition.context.excerpt === "tail"
862
+ );
863
+ const previous = existingDisposition(shaped.details);
864
+ const details = { ...shaped.details };
865
+ if (previous !== null)
866
+ details.resultDisposition = {
867
+ ...previous,
868
+ presentation: { ...previous.presentation, content: output },
869
+ displayedBytes: byteLength(output),
870
+ contextBytes: byteLength(modelContext ?? output),
871
+ presentationTruncated: previous.presentationTruncated || byteLength(resultText(shaped)) > byteLength(output),
872
+ contextTruncated: previous.contextTruncated || byteLength(shaped.modelContext ?? "") > byteLength(modelContext ?? "")
873
+ };
874
+ const size = detailsRecord(shaped.details, "resultSize");
875
+ if (size !== null) details.resultSize = { ...size, shownBytes: byteLength(output) };
876
+ return {
877
+ ...shaped,
878
+ ...shaped.kind === "ok" ? { output } : { message: output },
879
+ ...modelContext === void 0 ? {} : { modelContext },
880
+ details
881
+ };
882
+ }
883
+ function shapeToolResult(spec, result, context, requestedDisposition) {
884
+ if (result.kind !== "ok" || !result.images?.length)
885
+ return shapeTextToolResult(spec, result, context, requestedDisposition);
886
+ const hardMaxBytes = maxBytesFor(spec, context);
887
+ const disposition = normalizeToolResultDisposition(spec, hardMaxBytes, requestedDisposition);
888
+ const maxBytes = Math.min(hardMaxBytes, disposition?.context.maxBytes ?? hardMaxBytes);
889
+ const images = [];
890
+ let imageBytes = 0;
891
+ for (const image of result.images) {
892
+ const bytes = byteLength(image.data);
893
+ if (context?.supportsImages === true && disposition?.context.mode !== "metadata-only" && bytes + imageBytes < maxBytes - 512) {
894
+ images.push(image);
895
+ imageBytes += bytes;
896
+ }
897
+ }
898
+ const omitted = result.images.length - images.length;
899
+ const notice = omitted > 0 ? `[${omitted} image(s) omitted: model capability, context policy, or tool result byte cap.]
900
+ ` : "";
901
+ const remaining = Math.max(1, maxBytes - imageBytes);
902
+ const shaped = shapeTextToolResult(
903
+ spec,
904
+ { ...result, output: notice + result.output, images },
905
+ { ...context, toolResultMaxBytes: remaining },
906
+ requestedDisposition
907
+ );
908
+ if (shaped.kind !== "ok") return shaped;
909
+ return {
910
+ ...shaped,
911
+ images,
912
+ output: truncateUtf8(shaped.output, remaining, ""),
913
+ ...shaped.modelContext === void 0 ? {} : { modelContext: truncateUtf8(shaped.modelContext, remaining, "") }
914
+ };
915
+ }
916
+
917
+ // src/tools/observation.ts
918
+ init_esm_shims();
919
+ var OBSERVATION_POLICY_SLACK_BYTES = 2 * 1024;
920
+ var OBSERVE_SELF_CAPS = {
921
+ grepContent: 16 * 1024,
922
+ grepFilesCount: 8 * 1024,
923
+ find: 8 * 1024,
924
+ ls: 8 * 1024,
925
+ codeNav: 16 * 1024,
926
+ contextDocs: 16 * 1024,
927
+ contextSkills: 50 * 1024,
928
+ contextWorkspace: 50 * 1024,
929
+ // Library rows are metadata: name, owner, origin, availability, invocation.
930
+ // A full page of 50 stays well inside this, and a smaller cap than the
931
+ // skills catalog is what keeps a catalog read from crowding out the turn.
932
+ contextLibrary: 16 * 1024
933
+ };
934
+ var DEFAULT_OBSERVATION_TURN_BUDGET_BYTES = GUARDRAIL_DEFAULTS.observationTurnBudgetBytes;
935
+ var MIN_BUDGET_SLICE_BYTES = 1024;
936
+ var BUDGET_TRACK_LIMIT = 256;
937
+ var MAX_EXHAUSTED_NOTICES_PER_TURN = 3;
938
+ var turnBudgets = /* @__PURE__ */ new Map();
939
+ var MAX_CONTINUATION_CHARS = 200;
940
+ function boundContinuation(next) {
941
+ if (next === void 0 || next.length <= MAX_CONTINUATION_CHARS) return next;
942
+ return `${Array.from(next).slice(0, MAX_CONTINUATION_CHARS).join("")}\u2026`;
943
+ }
944
+ function observationTurnBudgetLimit() {
945
+ return Math.max(MIN_BUDGET_SLICE_BYTES, resolveGuardrail("observationTurnBudgetBytes"));
946
+ }
947
+ function budgetKey(options) {
948
+ const turnId = options?.turnId?.trim();
949
+ if (!turnId) return null;
950
+ const sessionId = options?.sessionId?.trim() || "no-session";
951
+ return `${sessionId}:${turnId}`;
952
+ }
953
+ function pruneBudgetMap() {
954
+ while (turnBudgets.size > BUDGET_TRACK_LIMIT) {
955
+ let oldestKey = null;
956
+ let oldestSeen = Number.POSITIVE_INFINITY;
957
+ for (const [key, state] of turnBudgets) {
958
+ if (state.lastSeenAt >= oldestSeen) continue;
959
+ oldestKey = key;
960
+ oldestSeen = state.lastSeenAt;
961
+ }
962
+ if (oldestKey === null) break;
963
+ turnBudgets.delete(oldestKey);
964
+ }
965
+ }
966
+ function reserveObservation(selfCapBytes, options) {
967
+ const key = budgetKey(options);
968
+ if (key === null) {
969
+ return {
970
+ key,
971
+ limitBytes: observationTurnBudgetLimit(),
972
+ usedBeforeBytes: 0,
973
+ selfCapBytes,
974
+ callCapBytes: selfCapBytes,
975
+ limited: false,
976
+ exhausted: false,
977
+ committed: false,
978
+ settled: false
979
+ };
980
+ }
981
+ const limitBytes = observationTurnBudgetLimit();
982
+ const state = turnBudgets.get(key) ?? { usedBytes: 0, lastSeenAt: Date.now(), exhaustedStreak: 0 };
983
+ state.lastSeenAt = Date.now();
984
+ turnBudgets.set(key, state);
985
+ pruneBudgetMap();
986
+ const remaining = Math.max(0, limitBytes - state.usedBytes);
987
+ if (remaining < MIN_BUDGET_SLICE_BYTES) {
988
+ return {
989
+ key,
990
+ limitBytes,
991
+ usedBeforeBytes: state.usedBytes,
992
+ selfCapBytes,
993
+ callCapBytes: 0,
994
+ limited: true,
995
+ exhausted: true,
996
+ committed: false,
997
+ settled: false
998
+ };
999
+ }
1000
+ state.exhaustedStreak = 0;
1001
+ const callCapBytes = Math.min(selfCapBytes, remaining);
1002
+ return {
1003
+ key,
1004
+ limitBytes,
1005
+ usedBeforeBytes: state.usedBytes,
1006
+ selfCapBytes,
1007
+ callCapBytes,
1008
+ limited: callCapBytes < selfCapBytes,
1009
+ exhausted: false,
1010
+ committed: false,
1011
+ settled: false
1012
+ };
1013
+ }
1014
+ function commitObservationReservation(reservation) {
1015
+ if (reservation.key === null || reservation.committed || reservation.settled) return;
1016
+ if (reservation.callCapBytes <= 0) return;
1017
+ reservation.committed = true;
1018
+ const state = turnBudgets.get(reservation.key) ?? {
1019
+ usedBytes: reservation.usedBeforeBytes,
1020
+ lastSeenAt: Date.now(),
1021
+ exhaustedStreak: 0
1022
+ };
1023
+ state.usedBytes += reservation.callCapBytes;
1024
+ state.lastSeenAt = Date.now();
1025
+ turnBudgets.set(reservation.key, state);
1026
+ }
1027
+ function releaseObservation(reservation) {
1028
+ if (reservation.key === null || reservation.settled) return;
1029
+ reservation.settled = true;
1030
+ if (!reservation.committed) return;
1031
+ const state = turnBudgets.get(reservation.key);
1032
+ if (state === void 0) return;
1033
+ state.usedBytes = Math.max(0, state.usedBytes - reservation.callCapBytes);
1034
+ state.lastSeenAt = Date.now();
1035
+ turnBudgets.set(reservation.key, state);
1036
+ }
1037
+ function recordSpentBytes(reservation, bytes) {
1038
+ if (reservation.key === null || reservation.settled) return;
1039
+ reservation.settled = true;
1040
+ const committedBytes = reservation.committed ? reservation.callCapBytes : 0;
1041
+ const state = turnBudgets.get(reservation.key) ?? {
1042
+ usedBytes: reservation.usedBeforeBytes + committedBytes,
1043
+ lastSeenAt: Date.now(),
1044
+ exhaustedStreak: 0
1045
+ };
1046
+ state.usedBytes = Math.max(0, state.usedBytes + bytes - committedBytes);
1047
+ state.lastSeenAt = Date.now();
1048
+ turnBudgets.set(reservation.key, state);
1049
+ }
1050
+ function budgetDetails(reservation) {
1051
+ if (reservation.key === null) return null;
1052
+ return {
1053
+ limitBytes: reservation.limitBytes,
1054
+ usedBeforeBytes: reservation.usedBeforeBytes,
1055
+ exhausted: reservation.exhausted
1056
+ };
1057
+ }
1058
+ function bumpExhaustedStreak(key) {
1059
+ if (key === null) return 1;
1060
+ const state = turnBudgets.get(key);
1061
+ if (state === void 0) return 1;
1062
+ state.exhaustedStreak += 1;
1063
+ state.lastSeenAt = Date.now();
1064
+ turnBudgets.set(key, state);
1065
+ return state.exhaustedStreak;
1066
+ }
1067
+ function observationBudgetExhausted(input) {
1068
+ const { tool, unit, reservation, subject, hint } = input;
1069
+ const streak = bumpExhaustedStreak(reservation.key);
1070
+ const spent = `${formatSize(reservation.usedBeforeBytes)} already returned of ${formatSize(reservation.limitBytes)}`;
1071
+ if (streak > MAX_EXHAUSTED_NOTICES_PER_TURN) {
1072
+ const message = `observation budget exhausted for this turn before ${tool} ${subject}: ${spent}. This is the ${streak}th call to hit it, so no observation tool can return content until the next turn. Do not retry this call and do not substitute another one. Re-plan with what you already have: say what you found, name what is still unread, and propose the next step.`;
1073
+ recordSpentBytes(reservation, byteLength(message));
1074
+ return { kind: "error", message };
1075
+ }
1076
+ const output = `[observation budget exhausted for this turn before ${tool} ${subject}: ${spent}. ${hint}]`;
1077
+ const shownBytes = byteLength(output);
1078
+ recordSpentBytes(reservation, shownBytes);
1079
+ const budget = budgetDetails(reservation);
1080
+ const observation = {
1081
+ tool,
1082
+ unit,
1083
+ shownCount: 0,
1084
+ totalCount: null,
1085
+ shownBytes,
1086
+ // The notice message is the whole rendering here (the search never ran), so
1087
+ // the full size is the message itself; keep totalBytes >= shownBytes.
1088
+ totalBytes: shownBytes,
1089
+ truncated: true,
1090
+ format: "text",
1091
+ ...budget !== null ? { budget } : {}
1092
+ };
1093
+ return { kind: "ok", output, details: { observation } };
1094
+ }
1095
+ function noticeLine(input, bodyBytes, totalBytes, offloadPath, next) {
1096
+ const totalSegment = input.totalCount === null ? `${input.shownCount}+` : String(input.totalCount);
1097
+ const parts = [
1098
+ `${input.tool}: ${input.shownCount}/${totalSegment} ${input.unit} shown (${formatSize(bodyBytes)} of ${formatSize(totalBytes)})`
1099
+ ];
1100
+ if (offloadPath !== null) parts.push(offloadPointer(offloadPath));
1101
+ if (next !== void 0 && next.length > 0) parts.push(`next: ${next}`);
1102
+ return `[${parts.join(" | ")}]`;
1103
+ }
1104
+ function limitedBudgetNote(reservation) {
1105
+ return `[Per-turn observation budget: ${formatSize(reservation.usedBeforeBytes)} already returned of ${formatSize(
1106
+ reservation.limitBytes
1107
+ )} before this call. Use narrower arguments or continue in a follow-up turn for more content.]`;
1108
+ }
1109
+ function jsonStubBudgetNote(reservation) {
1110
+ return `per-turn observation budget nearly exhausted: ${formatSize(reservation.usedBeforeBytes)} of ${formatSize(reservation.limitBytes)} already returned this turn. Do not retry this call; answer from what you have gathered, or continue in a follow-up turn.`;
1111
+ }
1112
+ function finalizeObservation(input) {
1113
+ const format = input.format ?? "text";
1114
+ let output = input.output;
1115
+ let truncated = input.truncated;
1116
+ let shownCount = input.shownCount;
1117
+ let offloadPath = null;
1118
+ const bodyBytes = byteLength(output);
1119
+ const totalBytes = input.totalBytes ?? byteLength(input.fullOutput ?? input.output);
1120
+ const next = boundContinuation(input.next);
1121
+ if (format === "json" && bodyBytes > input.reservation.callCapBytes) {
1122
+ truncated = true;
1123
+ shownCount = 0;
1124
+ offloadPath = writeToolOffload(input.fullOutput ?? output, input.options);
1125
+ const poolBound = input.reservation.limited;
1126
+ output = JSON.stringify({
1127
+ error: `result exceeded ${formatSize(input.reservation.callCapBytes)}`,
1128
+ ...poolBound ? { budget: jsonStubBudgetNote(input.reservation) } : {},
1129
+ ...offloadPath !== null ? { offloadPath } : {},
1130
+ ...!poolBound && next !== void 0 && next.length > 0 ? { next } : {}
1131
+ });
1132
+ } else if (truncated && input.fullOutput !== void 0) {
1133
+ offloadPath = writeToolOffload(input.fullOutput, input.options);
1134
+ }
1135
+ if (format === "text") {
1136
+ if (truncated && input.omitNotice !== true)
1137
+ output += `
1138
+
1139
+ ${noticeLine(input, bodyBytes, totalBytes, offloadPath, next)}`;
1140
+ if (input.reservation.limited && !input.reservation.exhausted) {
1141
+ output += `
1142
+
1143
+ ${limitedBudgetNote(input.reservation)}`;
1144
+ }
1145
+ }
1146
+ if ((input.withheldPaths ?? 0) > 0 && format === "text")
1147
+ output += `
1148
+
1149
+ [${input.withheldPaths} protected paths withheld by zero-access policy]`;
1150
+ const shownBytes = byteLength(output) + (input.images ?? []).reduce((bytes, image) => bytes + byteLength(image.data), 0);
1151
+ recordSpentBytes(input.reservation, shownBytes);
1152
+ const budget = budgetDetails(input.reservation);
1153
+ const observation = {
1154
+ tool: input.tool,
1155
+ unit: input.unit,
1156
+ shownCount,
1157
+ totalCount: input.totalCount,
1158
+ shownBytes,
1159
+ // shownBytes counts the appended notice/limited-budget lines; totalBytes
1160
+ // measured only the pre-notice rendering (and equals it when a count-limited
1161
+ // tool like ls offloads nothing). Floor the full-rendering size at the bytes
1162
+ // actually returned so the envelope invariant totalBytes >= shownBytes holds.
1163
+ totalBytes: Math.max(totalBytes, shownBytes),
1164
+ truncated,
1165
+ format,
1166
+ ...next !== void 0 && next.length > 0 ? { next } : {},
1167
+ ...offloadPath !== null ? { offloadPath } : {},
1168
+ ...budget !== null ? { budget } : {}
1169
+ };
1170
+ return {
1171
+ kind: "ok",
1172
+ output,
1173
+ ...input.images?.length ? { images: input.images } : {},
1174
+ details: { ...input.details ?? {}, observation }
1175
+ };
1176
+ }
1177
+ function createObservationPathFilter(cwd = process.cwd(), allowsPath) {
1178
+ const policy = allowsPath ? void 0 : createSafetyPolicyEngine({ cwd });
1179
+ const allows = allowsPath ?? ((path) => policy?.evaluate({ tool: "read", args: { path } }).reasonCode !== "path-policy:zeroAccessPaths");
1180
+ const withheld = /* @__PURE__ */ new Set();
1181
+ return {
1182
+ allows(path) {
1183
+ if (allows(path)) return true;
1184
+ withheld.add(path);
1185
+ return false;
1186
+ },
1187
+ get withheldPaths() {
1188
+ return withheld.size;
1189
+ }
1190
+ };
1191
+ }
1192
+
1193
+ export {
1194
+ deterministicDiagnosticSummary,
1195
+ legacyToolResultDigest,
1196
+ sanitizeToolResultDigest,
1197
+ toolResultContextText,
1198
+ isDispositionedToolResultError,
1199
+ toolResultPresentationText,
1200
+ toolResultPresentationPolicy,
1201
+ DEFAULT_MAX_LINES,
1202
+ splitLinesForCounting,
1203
+ truncateHead2 as truncateHead,
1204
+ truncateTail2 as truncateTail,
1205
+ DEFAULT_TOOL_RESULT_MAX_BYTES,
1206
+ toolResultDigestFor,
1207
+ sweepExpiredToolOffloads,
1208
+ isSessionOffloadPath,
1209
+ shapeToolResult,
1210
+ OBSERVATION_POLICY_SLACK_BYTES,
1211
+ OBSERVE_SELF_CAPS,
1212
+ reserveObservation,
1213
+ commitObservationReservation,
1214
+ releaseObservation,
1215
+ observationBudgetExhausted,
1216
+ finalizeObservation,
1217
+ createObservationPathFilter
1218
+ };
1219
+ //# sourceMappingURL=chunk-526ABLHD.js.map