@iowarp/clio-coder 0.4.4 → 0.4.6

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 (598) hide show
  1. package/CHANGELOG.md +116 -2
  2. package/CONTRIBUTING.md +39 -24
  3. package/NOTICE +16 -0
  4. package/README.md +343 -403
  5. package/dist/{acp-WNAYYF4F.js → acp-UVEVWSDL.js} +25 -24
  6. package/dist/{agents-3OKXHLOI.js → agents-VWY37DTK.js} +78 -77
  7. package/dist/assets/codewiki.json +1 -1
  8. package/dist/{auth-VKNNMGPU.js → auth-PCV2XQDV.js} +38 -38
  9. package/dist/builtins-PD652MTK.js +22 -0
  10. package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
  11. package/dist/{chunk-NRO2BJRH.js → chunk-24T2YZ7A.js} +10686 -4464
  12. package/dist/{chunk-Y55JBDO5.js → chunk-2AKYFREM.js} +38 -23
  13. package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
  14. package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
  15. package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
  16. package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
  17. package/dist/{chunk-UXCU4E3T.js → chunk-3BJGMT2D.js} +35 -14
  18. package/dist/{chunk-5ICU3EUH.js → chunk-3HQVBIKD.js} +5 -5
  19. package/dist/{chunk-GWZNEVM2.js → chunk-3JLFK5MW.js} +9 -9
  20. package/dist/{chunk-XXYSBZIQ.js → chunk-3O2ZAUGQ.js} +4 -4
  21. package/dist/{chunk-GX5WYQO4.js → chunk-3QKXHCGS.js} +8 -8
  22. package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
  23. package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
  24. package/dist/{chunk-OEJSLEPW.js → chunk-3WBALRQH.js} +337 -337
  25. package/dist/{chunk-ELWDPP3Y.js → chunk-4DU2TVI4.js} +8 -8
  26. package/dist/{chunk-JSD46VO2.js → chunk-4U4TKZFR.js} +43 -36
  27. package/dist/{chunk-FEAXX7B6.js → chunk-4VMV6OS6.js} +4 -4
  28. package/dist/{chunk-2ZSONWVL.js → chunk-536HXRFE.js} +13 -13
  29. package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
  30. package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
  31. package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
  32. package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
  33. package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
  34. package/dist/{chunk-Q4WO54TA.js → chunk-5QRX7SLS.js} +11 -11
  35. package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
  36. package/dist/chunk-5ZSZEYJK.js +119 -0
  37. package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
  38. package/dist/{chunk-DT3LWJOB.js → chunk-6HAO6X5B.js} +24 -6
  39. package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
  40. package/dist/{chunk-K6T2ZAMZ.js → chunk-6OII3LOK.js} +6 -6
  41. package/dist/{chunk-36CT5VVL.js → chunk-6RYDAVQT.js} +138 -89
  42. package/dist/{chunk-I7XBWTYH.js → chunk-6VRRJT7L.js} +5 -5
  43. package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
  44. package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
  45. package/dist/{chunk-NAI6ZFCY.js → chunk-7JSSKXG2.js} +122 -11
  46. package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
  47. package/dist/chunk-7WUZEB2M.js +165 -0
  48. package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
  49. package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
  50. package/dist/{chunk-IXIY2H4R.js → chunk-ACCKVSHU.js} +5 -5
  51. package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
  52. package/dist/{chunk-JEIYHLOR.js → chunk-B3MOMLJ4.js} +12 -12
  53. package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
  54. package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
  55. package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
  56. package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
  57. package/dist/{chunk-23L32XTI.js → chunk-BLTEAUCB.js} +68 -39
  58. package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
  59. package/dist/{chunk-XULDXHTN.js → chunk-BT7HGDOX.js} +105 -53
  60. package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
  61. package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
  62. package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
  63. package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
  64. package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
  65. package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
  66. package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
  67. package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
  68. package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
  69. package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
  70. package/dist/{chunk-6UINWWS6.js → chunk-DXLUVUD4.js} +16 -16
  71. package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
  72. package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
  73. package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
  74. package/dist/{chunk-JT2RFCC5.js → chunk-E7RF4KBO.js} +5 -5
  75. package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
  76. package/dist/chunk-ECOMVOHP.js +139 -0
  77. package/dist/chunk-EFSEIZE6.js +56 -0
  78. package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
  79. package/dist/chunk-EM2WNQS2.js +93 -0
  80. package/dist/{chunk-57XXR6DR.js → chunk-F5Z7EWMN.js} +967 -246
  81. package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
  82. package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
  83. package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
  84. package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
  85. package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
  86. package/dist/{chunk-EXLD33WO.js → chunk-GLYBJ4RQ.js} +24 -9
  87. package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
  88. package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
  89. package/dist/{chunk-FFUPXJC4.js → chunk-HPTJF6DG.js} +32 -56
  90. package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
  91. package/dist/{chunk-CUSRQKPU.js → chunk-HZ2T2YED.js} +299 -89
  92. package/dist/{chunk-YD5GIKET.js → chunk-HZFBVU5X.js} +49 -580
  93. package/dist/{chunk-6QOTUPRG.js → chunk-I2K2NCZQ.js} +65 -17
  94. package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
  95. package/dist/{chunk-I2DWJ4GM.js → chunk-IGLVVNEG.js} +54 -42
  96. package/dist/{chunk-6Q3CYFD3.js → chunk-IKRWLEDA.js} +186 -35
  97. package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
  98. package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
  99. package/dist/{chunk-2DSOYNFC.js → chunk-JMPL7NUB.js} +7 -7
  100. package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
  101. package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
  102. package/dist/{chunk-54X7T7DK.js → chunk-KAFMW7WM.js} +72 -81
  103. package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
  104. package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
  105. package/dist/chunk-KPRLAMP4.js +32 -0
  106. package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
  107. package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
  108. package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
  109. package/dist/{chunk-JQLNNIKT.js → chunk-LIN2K3EL.js} +6 -6
  110. package/dist/{chunk-2STGEDFV.js → chunk-LK2FN5JY.js} +2 -2
  111. package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
  112. package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
  113. package/dist/chunk-LUL5Z66S.js +221 -0
  114. package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
  115. package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
  116. package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
  117. package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
  118. package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
  119. package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
  120. package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
  121. package/dist/{chunk-4WR7VSYB.js → chunk-N2OKBREN.js} +23 -9
  122. package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
  123. package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
  124. package/dist/{chunk-4M6Z5QVF.js → chunk-NNWJYUNO.js} +11 -11
  125. package/dist/chunk-NTK3WTHM.js +141 -0
  126. package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
  127. package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
  128. package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
  129. package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
  130. package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
  131. package/dist/{chunk-75W7L2E2.js → chunk-P5JMBPDJ.js} +1052 -171
  132. package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
  133. package/dist/{chunk-S6PYF2XF.js → chunk-P6M7RKMI.js} +4 -4
  134. package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
  135. package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
  136. package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
  137. package/dist/{chunk-DXKJURES.js → chunk-PZN2LQY6.js} +14 -11
  138. package/dist/{chunk-N56KALIC.js → chunk-Q7NNUHQV.js} +62 -35
  139. package/dist/{chunk-RQCKCSRL.js → chunk-QCOV5DFY.js} +22 -22
  140. package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
  141. package/dist/{chunk-NEKRRTYW.js → chunk-QJMRYTCX.js} +8 -8
  142. package/dist/{chunk-YNFKXPEC.js → chunk-QNWRHOMF.js} +35 -66
  143. package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
  144. package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
  145. package/dist/{chunk-72YIHOZQ.js → chunk-QXFBABFJ.js} +10 -10
  146. package/dist/chunk-R2CT5YDO.js +66 -0
  147. package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
  148. package/dist/{chunk-IGLP3ODT.js → chunk-RGZNQ5CT.js} +15 -15
  149. package/dist/chunk-SD7SHNDW.js +15 -0
  150. package/dist/chunk-SL2RDHKO.js +19 -0
  151. package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
  152. package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
  153. package/dist/{chunk-UEPWCCTY.js → chunk-SXQKNKRA.js} +12 -12
  154. package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
  155. package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
  156. package/dist/{chunk-5636DCO5.js → chunk-TJFDL26W.js} +59 -12
  157. package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
  158. package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
  159. package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
  160. package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
  161. package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
  162. package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
  163. package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
  164. package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
  165. package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
  166. package/dist/chunk-USZA7GWL.js +341 -0
  167. package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
  168. package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
  169. package/dist/{chunk-7UGL4MB5.js → chunk-VAHLPXPY.js} +10 -10
  170. package/dist/{chunk-25QBEXRS.js → chunk-VANN3GDP.js} +7 -26
  171. package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
  172. package/dist/{chunk-QUFRYSWI.js → chunk-VHMX7SXF.js} +129 -48
  173. package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
  174. package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
  175. package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
  176. package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
  177. package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
  178. package/dist/{chunk-USR47QNF.js → chunk-WKUYQBCG.js} +14 -14
  179. package/dist/{chunk-GHS5EBTQ.js → chunk-WNGF5AJX.js} +36 -22
  180. package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
  181. package/dist/{chunk-6OSVSQL5.js → chunk-WV6TDAPN.js} +41 -23
  182. package/dist/chunk-WXA2CFJO.js +23 -0
  183. package/dist/{chunk-2ASED4PZ.js → chunk-X3BI7HTV.js} +26 -26
  184. package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
  185. package/dist/{chunk-RZDWV63N.js → chunk-XWMSPJYN.js} +6 -6
  186. package/dist/chunk-YGDMBK7O.js +567 -0
  187. package/dist/{chunk-6PAZTBPA.js → chunk-YPRSNUTC.js} +15 -6
  188. package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
  189. package/dist/{chunk-LTIKRKFL.js → chunk-ZS43Y2FT.js} +4 -4
  190. package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
  191. package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
  192. package/dist/cli/index.js +44 -44
  193. package/dist/clio-QQCMTUZE.js +26 -0
  194. package/dist/{code-nav-IJR2DBPR.js → code-nav-GUPM6766.js} +48 -32
  195. package/dist/codewiki/build-worker.js +76 -29
  196. package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
  197. package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
  198. package/dist/{config-IUA6OYNS.js → config-IIM7YOD3.js} +211 -124
  199. package/dist/configure-4ZM5HWJX.js +73 -0
  200. package/dist/{context-BOYF5EJM.js → context-44BZLJ3J.js} +62 -31
  201. package/dist/{context-4MPR7WKB.js → context-AIDVQKMW.js} +126 -121
  202. package/dist/{context-2DKHWH2T.js → context-OL5P3HEP.js} +92 -62
  203. package/dist/context-clear-OQV76MYP.js +184 -0
  204. package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
  205. package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
  206. package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-ZUW3EGLS.js} +32 -31
  207. package/dist/detail-UXPWRANG.js +115 -0
  208. package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-P3ZW6G77.js} +192 -116
  209. package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
  210. package/dist/{doctor-DKICC2SN.js → doctor-JJVGPZWT.js} +59 -58
  211. package/dist/{eval-OQOQUDHK.js → eval-V2RTN3UH.js} +476 -170
  212. package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
  213. package/dist/evidence-35PYWGSO.js +225 -0
  214. package/dist/{evidence-4DQ25GUQ.js → evidence-CIGGKI6J.js} +111 -94
  215. package/dist/{evolve-GSS52E5J.js → evolve-33SM3NJP.js} +108 -91
  216. package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
  217. package/dist/{fleet-Q37YHHAQ.js → fleet-LFO7SIPC.js} +147 -146
  218. package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-RLK72GU3.js} +27 -26
  219. package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
  220. package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-JZIBCGMW.js} +39 -38
  221. package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-2L5YGGZJ.js} +108 -91
  222. package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
  223. package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
  224. package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-LIAVKDUU.js} +46 -42
  225. package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-JIK3OQZR.js} +106 -89
  226. package/dist/fleet-view-IWHYGQKK.js +118 -0
  227. package/dist/{init-PXEXQSBF.js → init-NJEDOTQW.js} +124 -123
  228. package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
  229. package/dist/{interop-ZG5T62U3.js → interop-RVCAYECG.js} +25 -25
  230. package/dist/inventory-74UL7UHU.js +118 -0
  231. package/dist/{library-B2W4N74O.js → library-CTKZA7K3.js} +45 -44
  232. package/dist/{memory-YCANYS5A.js → memory-I76I5VUH.js} +108 -93
  233. package/dist/{models-GERTU3YI.js → models-D4YDIQZQ.js} +64 -62
  234. package/dist/{monitor-CPNIUULB.js → monitor-NKVD55HX.js} +137 -107
  235. package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-I6OATVPK.js} +1715 -1687
  236. package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
  237. package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
  238. package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
  239. package/dist/preload-EJAWJEIO.js +116 -0
  240. package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
  241. package/dist/{reset-TNWTB5LU.js → reset-4XMQKDNZ.js} +22 -20
  242. package/dist/{resources-4PXNMD5G.js → resources-TVYVXK3Q.js} +41 -40
  243. package/dist/{run-D6XJ34CN.js → run-OWQNNSJU.js} +164 -157
  244. package/dist/{share-2NWMJJEE.js → share-NPZZMUXG.js} +43 -42
  245. package/dist/{skills-KR7WON5G.js → skills-OXFEAWMT.js} +47 -46
  246. package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-J5TCKSJA.js} +128 -107
  247. package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-7II4DM57.js} +41 -40
  248. package/dist/slash-commands-MDSDSWYF.js +92 -0
  249. package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
  250. package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
  251. package/dist/{targets-OMH2XCSN.js → targets-KILZEOCE.js} +161 -94
  252. package/dist/tasks-R6P6OV22.js +36 -0
  253. package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-LZCG2KN3.js} +12 -11
  254. package/dist/tools-6OCQ6SVB.js +28 -0
  255. package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
  256. package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
  257. package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
  258. package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
  259. package/dist/{upgrade-MS72RJEP.js → upgrade-D2OZH6IQ.js} +42 -41
  260. package/dist/{usage-NHG6MCJM.js → usage-PIASNUS4.js} +137 -105
  261. package/dist/{verifiers-7AUNVXDY.js → verifiers-LTHUY2PX.js} +28 -27
  262. package/dist/verify-HYF7KBVE.js +30 -0
  263. package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
  264. package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
  265. package/dist/wiki-generate-RK7JQ5NP.js +615 -0
  266. package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
  267. package/dist/worker/entry.js +108 -95
  268. package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
  269. package/docs/README.md +7 -6
  270. package/docs/architecture/acp.md +10 -0
  271. package/docs/architecture/architecture.md +5 -5
  272. package/docs/architecture/context-engine.md +45 -60
  273. package/docs/architecture/context-working-set.md +7 -9
  274. package/docs/architecture/dispatch-architecture-rationale.md +1 -1
  275. package/docs/architecture/evidence-and-memory.md +10 -0
  276. package/docs/architecture/pi-boundary.md +37 -7
  277. package/docs/architecture/prompt-envelope-and-tools.md +7 -7
  278. package/docs/architecture/session-lifecycle.md +4 -4
  279. package/docs/architecture/tui-design.md +45 -30
  280. package/docs/architecture/worker-dispatch-mechanics.md +4 -0
  281. package/docs/guide/commands-and-modes.md +75 -61
  282. package/docs/guide/configuration-and-targets.md +126 -26
  283. package/docs/guide/configuration-reference.md +22 -7
  284. package/docs/guide/environment-variables.md +6 -2
  285. package/docs/guide/fleet-dispatch.md +13 -6
  286. package/docs/guide/glossary.md +1 -1
  287. package/docs/guide/installation-and-lifecycle.md +79 -20
  288. package/docs/guide/proactive-memory.md +1 -1
  289. package/docs/guide/skills-marketplace.md +11 -3
  290. package/docs/guide/tool-usage.md +9 -2
  291. package/docs/process/development-pipeline.md +11 -11
  292. package/docs/process/documentation-coverage.md +1 -1
  293. package/docs/process/documentation-guide.md +2 -2
  294. package/docs/process/eval-runner.md +15 -0
  295. package/docs/process/evals-internal.md +1 -1
  296. package/docs/process/release-cut-checklist.md +24 -12
  297. package/evals/README.md +4 -0
  298. package/evals/behavioral-corpus-grader.mjs +147 -14
  299. package/evals/behavioral-model-negative-control.yaml +1 -0
  300. package/evals/behavioral-model.yaml +266 -1
  301. package/evals/fixtures/docs-retrieval.json +102 -0
  302. package/evals/fixtures/scalar-decision.json +17 -0
  303. package/evals/fixtures/scout-citation-pipeline.json +55 -0
  304. package/evals/fixtures/source-explanation.json +74 -0
  305. package/evals/fixtures/tool-arguments.json +18 -0
  306. package/evals/fixtures/tool-surface/read.txt +4 -0
  307. package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
  308. package/evals/no-edit-memory-grader.mjs +149 -0
  309. package/evals/scalar-decision-grader.py +41 -0
  310. package/evals/scalar-decision-machinery.ts +145 -0
  311. package/evals/source-explanation-grader.mjs +118 -0
  312. package/evals/tool-surface-grader.mjs +53 -0
  313. package/evals/tool-surface-model.yaml +274 -0
  314. package/package.json +14 -14
  315. package/skills/README.md +6 -6
  316. package/skills/registry.yaml +1 -1
  317. package/skills/skill-marketplace.json +1 -1
  318. package/src/cli/ask.ts +10 -10
  319. package/src/cli/bootstrap-generate.ts +6 -0
  320. package/src/cli/config-inspect.ts +24 -7
  321. package/src/cli/config-trust.ts +62 -0
  322. package/src/cli/config.ts +8 -0
  323. package/src/cli/configure-editor.ts +51 -0
  324. package/src/cli/configure-interop.ts +1 -1
  325. package/src/cli/configure-oauth.ts +1 -1
  326. package/src/cli/configure-onboarding.ts +232 -96
  327. package/src/cli/configure-prompts.ts +76 -0
  328. package/src/cli/configure-quick.ts +274 -0
  329. package/src/cli/configure-target.ts +14 -2
  330. package/src/cli/configure.ts +413 -174
  331. package/src/cli/context-map.ts +75 -14
  332. package/src/cli/context.ts +46 -17
  333. package/src/cli/eval.ts +17 -3
  334. package/src/cli/modes/print.ts +32 -4
  335. package/src/cli/oauth-manual-input.ts +1 -1
  336. package/src/cli/reset.ts +2 -0
  337. package/src/cli/run.ts +16 -14
  338. package/src/cli/select.ts +35 -4
  339. package/src/cli/skills-eval.ts +10 -8
  340. package/src/cli/steer-channel.ts +31 -18
  341. package/src/cli/targets.ts +83 -31
  342. package/src/cli/tasks.ts +10 -1
  343. package/src/cli/upgrade.ts +11 -8
  344. package/src/cli/usage.ts +24 -0
  345. package/src/cli/wiki-generate.ts +239 -96
  346. package/src/core/bash-exec.ts +43 -15
  347. package/src/core/bus-events.ts +15 -0
  348. package/src/core/config.ts +39 -15
  349. package/src/core/defaults.ts +38 -15
  350. package/src/{interactive → core}/external-editor.ts +4 -4
  351. package/src/core/file-references.ts +11 -1
  352. package/src/core/incomplete-installation.ts +3 -1
  353. package/src/core/settings-layers.ts +21 -5
  354. package/src/core/termination.ts +26 -9
  355. package/src/core/untrusted-content.ts +16 -0
  356. package/src/core/workspace-trust.ts +179 -0
  357. package/src/domains/agents/builtins/coder.md +4 -2
  358. package/src/domains/agents/builtins/context-bootstrap.md +3 -1
  359. package/src/domains/agents/builtins/documenter.md +7 -4
  360. package/src/domains/agents/builtins/researcher.md +1 -0
  361. package/src/domains/agents/builtins/scout.md +7 -1
  362. package/src/domains/agents/result-contract.ts +199 -26
  363. package/src/domains/config/classify.ts +1 -1
  364. package/src/domains/config/keybindings.ts +3 -31
  365. package/src/domains/context/bootstrap-prompt.ts +11 -9
  366. package/src/domains/context/bootstrap.ts +74 -39
  367. package/src/domains/context/clio-md.ts +88 -26
  368. package/src/domains/context/codewiki/build-operation.ts +121 -0
  369. package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
  370. package/src/domains/context/codewiki/build-worker.ts +3 -35
  371. package/src/domains/context/codewiki/coordinator.ts +36 -6
  372. package/src/domains/context/codewiki/indexer.ts +59 -19
  373. package/src/domains/context/contract.ts +6 -2
  374. package/src/domains/context/extension.ts +72 -10
  375. package/src/domains/context/fingerprint.ts +39 -34
  376. package/src/domains/context/index.ts +7 -1
  377. package/src/domains/context/prompt-context.ts +55 -14
  378. package/src/domains/context/refresh.ts +9 -57
  379. package/src/domains/context/wiki/assemble.ts +14 -10
  380. package/src/domains/context/wiki/evidence.ts +209 -0
  381. package/src/domains/context/wiki/generate.ts +201 -67
  382. package/src/domains/context/wiki/meta.ts +10 -2
  383. package/src/domains/context/wiki/plan-store.ts +70 -14
  384. package/src/domains/context/wiki/plan.ts +71 -14
  385. package/src/domains/context/wiki/prompts.ts +42 -1
  386. package/src/domains/context/wiki/source-content.ts +106 -0
  387. package/src/domains/context/wiki/staleness.ts +33 -22
  388. package/src/domains/context/working-set/contract.ts +8 -2
  389. package/src/domains/context/working-set/engine.ts +17 -4
  390. package/src/domains/context/working-set/fold.ts +15 -2
  391. package/src/domains/context/working-set/marker.ts +2 -1
  392. package/src/domains/context/working-set/project.ts +18 -7
  393. package/src/domains/context/working-set/recall.ts +82 -56
  394. package/src/domains/dispatch/active-route-planner.ts +6 -3
  395. package/src/domains/dispatch/admission-queue.ts +19 -7
  396. package/src/domains/dispatch/admission.ts +3 -3
  397. package/src/domains/dispatch/budget-envelope.ts +47 -82
  398. package/src/domains/dispatch/capacity-lease.ts +57 -19
  399. package/src/domains/dispatch/contract.ts +10 -2
  400. package/src/domains/dispatch/event-pump.ts +28 -7
  401. package/src/domains/dispatch/execution-role.ts +49 -2
  402. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  403. package/src/domains/dispatch/extension.ts +190 -105
  404. package/src/domains/dispatch/fleet-run.ts +20 -0
  405. package/src/domains/dispatch/gate-role-prompts.ts +4 -2
  406. package/src/domains/dispatch/parallel-writers.ts +34 -0
  407. package/src/domains/dispatch/reservation-store.ts +8 -34
  408. package/src/domains/dispatch/route-approval.ts +3 -3
  409. package/src/domains/dispatch/route-observer.ts +4 -2
  410. package/src/domains/dispatch/route-quality.ts +6 -1
  411. package/src/domains/dispatch/types.ts +4 -3
  412. package/src/domains/dispatch/worker-spawn.ts +58 -21
  413. package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
  414. package/src/domains/eval/compare/behavioral.ts +81 -14
  415. package/src/domains/eval/compare/compare.ts +15 -5
  416. package/src/domains/eval/compare/envelope.ts +12 -5
  417. package/src/domains/eval/metrics/context.ts +24 -1
  418. package/src/domains/eval/metrics/tracked.ts +4 -28
  419. package/src/domains/eval/reports/comparison.ts +9 -9
  420. package/src/domains/eval/runners/clio-run.ts +5 -1
  421. package/src/domains/eval/schema/suite.ts +2 -0
  422. package/src/domains/eval/schema/validate.ts +1 -0
  423. package/src/domains/eval/suites/run.ts +189 -13
  424. package/src/domains/eval/verifiers/integrity.ts +39 -0
  425. package/src/domains/eval/verifiers/patch.ts +58 -2
  426. package/src/domains/eval/workspaces/temp-copy.ts +3 -0
  427. package/src/domains/evidence/build.ts +4 -2
  428. package/src/domains/interop/registry.ts +2 -2
  429. package/src/domains/middleware/hooks-io.ts +45 -26
  430. package/src/domains/middleware/hooks.ts +6 -0
  431. package/src/domains/middleware/injection-screen.ts +23 -0
  432. package/src/domains/middleware/rules.ts +5 -1
  433. package/src/domains/middleware/stalled-turn.ts +18 -3
  434. package/src/domains/middleware/task-board-reminder.ts +4 -2
  435. package/src/domains/middleware/task-nudge.ts +4 -1
  436. package/src/domains/mux/contract.ts +34 -1
  437. package/src/domains/mux/dock-controller.ts +8 -1
  438. package/src/domains/mux/index.ts +1 -0
  439. package/src/domains/mux/socket-client.ts +13 -3
  440. package/src/domains/observability/contract.ts +2 -2
  441. package/src/domains/observability/projection.ts +30 -9
  442. package/src/domains/prompts/compiler.ts +10 -2
  443. package/src/domains/prompts/contract.ts +7 -4
  444. package/src/domains/prompts/extension.ts +28 -64
  445. package/src/domains/prompts/fragments/identity/clio.md +23 -0
  446. package/src/domains/prompts/fragments/operating/contract.md +10 -0
  447. package/src/domains/prompts/fragments/operating/delegation.md +5 -0
  448. package/src/domains/prompts/fragments/wiki/page.md +28 -15
  449. package/src/domains/prompts/fragments/wiki/plan.md +4 -4
  450. package/src/domains/prompts/preload-prefix.ts +31 -0
  451. package/src/domains/prompts/preload.ts +135 -61
  452. package/src/domains/providers/auth/backend-file.ts +15 -11
  453. package/src/domains/providers/auth/storage.ts +3 -5
  454. package/src/domains/providers/catalog.ts +18 -3
  455. package/src/domains/providers/probe/fingerprint.ts +13 -6
  456. package/src/domains/providers/probe/reasoning.ts +2 -0
  457. package/src/domains/providers/runtime-resolution.ts +11 -9
  458. package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
  459. package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
  460. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
  461. package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
  462. package/src/domains/resources/skills/promotion.ts +8 -1
  463. package/src/domains/safety/action-classifier.ts +9 -0
  464. package/src/domains/safety/autonomy.ts +10 -1
  465. package/src/domains/safety/contract.ts +5 -1
  466. package/src/domains/safety/default-path-policy.ts +11 -0
  467. package/src/domains/safety/extension.ts +11 -2
  468. package/src/domains/safety/policy-engine.ts +189 -32
  469. package/src/domains/safety/project-policy.ts +7 -2
  470. package/src/domains/safety/workspace-trust.ts +43 -0
  471. package/src/domains/session/compaction/compact.ts +384 -21
  472. package/src/domains/session/compaction/cut-point.ts +42 -5
  473. package/src/domains/session/compaction/tokens.ts +9 -1
  474. package/src/domains/session/decision-board.ts +43 -33
  475. package/src/domains/session/entries.ts +169 -4
  476. package/src/domains/session/prompt-manifest.ts +47 -8
  477. package/src/domains/session/task-board.ts +21 -3
  478. package/src/domains/user-tasks/handoff.ts +16 -0
  479. package/src/engine/acp/adapter.ts +44 -12
  480. package/src/engine/acp/server.ts +1 -0
  481. package/src/engine/acp/transport.ts +2 -1
  482. package/src/engine/acp/types.ts +6 -1
  483. package/src/engine/antigravity/subprocess-runtime.ts +20 -4
  484. package/src/engine/api-registry.ts +19 -2
  485. package/src/engine/apis/openai-completions.ts +13 -6
  486. package/src/engine/apis/output-budget.ts +26 -10
  487. package/src/engine/claude/sdk-runtime.ts +4 -3
  488. package/src/engine/env-api-keys.ts +2 -1
  489. package/src/engine/external-subprocess.ts +14 -3
  490. package/src/engine/loop-guard.ts +19 -2
  491. package/src/engine/provider-diagnostics.ts +129 -0
  492. package/src/engine/provider-payload.ts +3 -1
  493. package/src/engine/worker-runtime.ts +13 -2
  494. package/src/engine/worker-tools.ts +5 -1
  495. package/src/entry/extension-reload.ts +1 -0
  496. package/src/entry/orchestrator.ts +53 -15
  497. package/src/interactive/application-controller.ts +1 -31
  498. package/src/interactive/chat-loop-messages.ts +12 -4
  499. package/src/interactive/chat-loop.ts +115 -45
  500. package/src/interactive/chat-panel.ts +163 -637
  501. package/src/interactive/chat-renderer.ts +73 -30
  502. package/src/interactive/context-recall-command.ts +2 -1
  503. package/src/interactive/dispatch-board.ts +18 -5
  504. package/src/interactive/editor-submit.ts +21 -31
  505. package/src/interactive/footer/dashboard.ts +8 -3
  506. package/src/interactive/footer/widgets.ts +50 -91
  507. package/src/interactive/interactive-application.ts +24 -44
  508. package/src/interactive/interactive-event-projection.ts +9 -45
  509. package/src/interactive/interactive-input-runtime.ts +3 -28
  510. package/src/interactive/interactive-presentation.ts +45 -16
  511. package/src/interactive/interactive-slash-runtime.ts +5 -40
  512. package/src/interactive/layout.ts +31 -5
  513. package/src/interactive/model-session-replay.ts +2 -2
  514. package/src/interactive/overlay-frame.ts +1 -0
  515. package/src/interactive/overlay-general-openers.ts +5 -1
  516. package/src/interactive/overlay-lifecycle.ts +1 -0
  517. package/src/interactive/overlay-session-lifecycle.ts +7 -1
  518. package/src/interactive/overlays/ask-user.ts +1 -0
  519. package/src/interactive/overlays/message-picker.ts +1 -1
  520. package/src/interactive/overlays/settings.ts +9 -8
  521. package/src/interactive/renderers/preview.ts +16 -0
  522. package/src/interactive/renderers/tool-execution.ts +84 -161
  523. package/src/interactive/renderers/worker-entry.ts +74 -43
  524. package/src/interactive/slash-autocomplete.ts +1 -6
  525. package/src/interactive/slash-commands.ts +16 -46
  526. package/src/interactive/status/controller.ts +0 -5
  527. package/src/interactive/status/state-machine.ts +44 -26
  528. package/src/interactive/status/types.ts +3 -0
  529. package/src/interactive/status/verbs.ts +13 -12
  530. package/src/interactive/transcript-detail.ts +50 -112
  531. package/src/interactive/turn-context.ts +221 -53
  532. package/src/interactive/turn-middleware.ts +3 -1
  533. package/src/interactive/turn-persistence.ts +3 -0
  534. package/src/interactive/turn-runtime.ts +11 -2
  535. package/src/interactive/turn-state.ts +10 -9
  536. package/src/interactive/view/artifacts.ts +4 -0
  537. package/src/interactive/view/view-overlay.ts +44 -34
  538. package/src/interactive/watch-pane.ts +18 -4
  539. package/src/interactive/worker-stream.ts +7 -7
  540. package/src/tools/agent-tools.ts +6 -3
  541. package/src/tools/bash.ts +1 -1
  542. package/src/tools/builtin-tool-catalog.ts +9 -2
  543. package/src/tools/codewiki/code-nav.ts +4 -10
  544. package/src/tools/compete-judge-task.ts +71 -0
  545. package/src/tools/compete-worktrees.ts +34 -0
  546. package/src/tools/context/index.ts +32 -7
  547. package/src/tools/context/surface.ts +15 -4
  548. package/src/tools/decide.ts +1 -1
  549. package/src/tools/dispatch-admission.ts +12 -1
  550. package/src/tools/dispatch-arguments.ts +38 -1
  551. package/src/tools/dispatch-plan.ts +7 -7
  552. package/src/tools/dispatch-runner.ts +48 -32
  553. package/src/tools/dispatch-schema.ts +30 -23
  554. package/src/tools/dispatch-scout-admission.ts +10 -44
  555. package/src/tools/dispatch-scout.ts +2 -3
  556. package/src/tools/find.ts +13 -4
  557. package/src/tools/grep.ts +13 -1
  558. package/src/tools/ls.ts +7 -1
  559. package/src/tools/monitor.ts +26 -11
  560. package/src/tools/network-policy.ts +11 -24
  561. package/src/tools/observation.ts +39 -2
  562. package/src/tools/presentation.ts +1 -1
  563. package/src/tools/read.ts +112 -15
  564. package/src/tools/registry.ts +55 -18
  565. package/src/tools/result-shaping.ts +110 -2
  566. package/src/tools/tasks.ts +33 -7
  567. package/src/tools/verify/frontend.ts +67 -30
  568. package/src/tools/verify/numeric.ts +10 -5
  569. package/src/tools/web-fetch-network.ts +179 -0
  570. package/src/tools/web-fetch-surface.ts +2 -1
  571. package/src/tools/web-fetch.ts +15 -13
  572. package/src/tools/worker-evidence.ts +27 -0
  573. package/src/worker/spec-contract.ts +12 -8
  574. package/dist/builtins-WGALA46I.js +0 -22
  575. package/dist/chunk-2WZ546HR.js +0 -792
  576. package/dist/chunk-5PSMVOLM.js +0 -56
  577. package/dist/chunk-EL24TAU4.js +0 -1560
  578. package/dist/chunk-IZXGRF7P.js +0 -4048
  579. package/dist/chunk-JVCV3ICN.js +0 -47
  580. package/dist/chunk-MNJGS2IN.js +0 -33
  581. package/dist/chunk-O5CVSAG5.js +0 -122
  582. package/dist/chunk-ODGTEFFI.js +0 -50
  583. package/dist/chunk-OQE5J4C6.js +0 -73
  584. package/dist/chunk-UUVG37B4.js +0 -244
  585. package/dist/chunk-V6HJFQZE.js +0 -228
  586. package/dist/clio-QLICPCF5.js +0 -25
  587. package/dist/configure-VEPX4NMX.js +0 -55
  588. package/dist/context-clear-S4ZJCQUX.js +0 -182
  589. package/dist/detail-A7JAVSIG.js +0 -98
  590. package/dist/evidence-4F5USFKH.js +0 -208
  591. package/dist/fleet-view-MN2VG4MR.js +0 -101
  592. package/dist/inventory-C26CFDRR.js +0 -101
  593. package/dist/preload-P6DGH2PZ.js +0 -13
  594. package/dist/slash-commands-ZXPJD64J.js +0 -92
  595. package/dist/tasks-IPAGMEIX.js +0 -36
  596. package/dist/tools-EFFEAIDP.js +0 -28
  597. package/dist/verify-FWYGPKMR.js +0 -29
  598. package/dist/wiki-generate-743CIGJW.js +0 -476
@@ -0,0 +1,118 @@
1
+ import { strict as assert } from "node:assert";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+
6
+ export const fixture = JSON.parse(readFileSync(new URL("./fixtures/source-explanation.json", import.meta.url), "utf8"));
7
+
8
+ // A bounded content screen, not a semantic judge. Root must still review the
9
+ // cited claims. In particular, schema success and pane lifecycle are not delivery.
10
+ export function assessExplanation(agentId, output, conformance) {
11
+ let value;
12
+ try {
13
+ value = JSON.parse(output);
14
+ } catch {
15
+ value = {};
16
+ }
17
+ const findings = Array.isArray(value.findings) ? value.findings : [];
18
+ const prose = agentId === "scout" ? findings.map((finding) => finding.claim ?? "").join(" ") : (value.summary ?? "");
19
+ const words = typeof prose === "string" && prose.trim() ? prose.trim().split(/\s+/u).length : 0;
20
+ // Scout cites through structured findings; Coder cites inline as file:line
21
+ // inside its summary, the declared place for a read-only explanation.
22
+ const cited = Object.keys(fixture.files).every((path) =>
23
+ agentId === "scout"
24
+ ? findings.some((finding) => finding.path === path && Number.isSafeInteger(finding.line) && finding.line > 0)
25
+ : new RegExp(`${path.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&")}:[1-9]\\d*`, "u").test(prose),
26
+ );
27
+ const topics = [
28
+ /uniform/iu,
29
+ /nonuniform/iu,
30
+ /forward/iu,
31
+ /backward/iu,
32
+ /spacing/iu,
33
+ /coordinate/iu,
34
+ /convergence/iu,
35
+ /linspace|equidistant/iu,
36
+ /does not|do not|not .*irregular/iu,
37
+ ].every((pattern) => pattern.test(prose));
38
+ // Both recipes carry a 1200-word cited explanation: Scout as findings, Coder
39
+ // in its mutation-report summary under the contract's summary allowance.
40
+ const suitable = agentId === "scout" || agentId === "coder";
41
+ const limited = agentId === "coder" && /cannot deliver/iu.test(prose) && /allowance|UTF-8 bytes/iu.test(prose);
42
+ return {
43
+ "explanation.recipeSuitable": suitable,
44
+ "explanation.conforms": conformance === "pass",
45
+ "explanation.delivered":
46
+ conformance === "pass" &&
47
+ suitable &&
48
+ cited &&
49
+ topics &&
50
+ words >= fixture.wordRange[0] &&
51
+ words <= fixture.wordRange[1],
52
+ "explanation.limited": limited,
53
+ "explanation.words": words,
54
+ };
55
+ }
56
+
57
+ function prepare() {
58
+ for (const path of Object.keys(fixture.files)) assert.ok(!existsSync(path), `refuse to overwrite ${path}`);
59
+ for (const [path, content] of Object.entries(fixture.files)) {
60
+ mkdirSync(dirname(path), { recursive: true });
61
+ writeFileSync(path, content);
62
+ }
63
+ }
64
+
65
+ async function grade(agentId) {
66
+ assert.ok(agentId === "coder" || agentId === "scout");
67
+ const events = readFileSync(process.env.CLIO_CODER_EVAL_RUNNER_STDOUT_FILE, "utf8")
68
+ .split(/\r?\n/u)
69
+ .flatMap((line) => {
70
+ try {
71
+ return [JSON.parse(line)];
72
+ } catch {
73
+ return [];
74
+ }
75
+ });
76
+ const starts = events.filter((event) => event.type === "tool_execution_start" && event.toolName === "dispatch");
77
+ assert.equal(starts.length, 1, "one explicitly selected worker; no substituted or extra recovery dispatch");
78
+ assert.equal(starts[0].args.agent, agentId);
79
+ assert.equal(starts[0].args.task, fixture.task);
80
+ const end = events.find((event) => event.type === "tool_execution_end" && event.toolCallId === starts[0].toolCallId);
81
+ const runs = end?.result?.details?.runs;
82
+ assert.equal(runs?.length, 1, "one terminal receipt required");
83
+ const receipt = JSON.parse(readFileSync(runs[0].receiptPath, "utf8"));
84
+ assert.equal(receipt.agentId, agentId);
85
+ const metrics = assessExplanation(agentId, receipt.output?.text ?? "", receipt.quality?.resultContract?.conformance);
86
+ if (
87
+ receipt.outcome !== "succeeded" ||
88
+ receipt.exitCode !== 0 ||
89
+ receipt.quality?.resultContract?.quality === "fail" ||
90
+ receipt.output?.state !== "final" ||
91
+ receipt.output?.truncated !== false
92
+ )
93
+ metrics["explanation.delivered"] = false;
94
+ metrics["task.solved"] = metrics["explanation.delivered"];
95
+ process.stdout.write(`${JSON.stringify({ schema: "clio-coder.eval.measure.v1", metrics })}\n`);
96
+ assert.equal(receipt.outcome, "succeeded");
97
+ assert.equal(receipt.exitCode, 0);
98
+ assert.equal(receipt.output?.state, "final");
99
+ assert.equal(receipt.output?.truncated, false, "a truncated report is not complete delivery");
100
+ assert.equal(metrics["explanation.conforms"], true);
101
+ assert.notEqual(receipt.quality?.resultContract?.quality, "fail");
102
+ assert.equal(metrics["explanation.recipeSuitable"], true);
103
+ assert.equal(metrics["explanation.delivered"], true);
104
+ assert.equal(metrics["explanation.limited"], false);
105
+ for (const [path, content] of Object.entries(fixture.files)) assert.equal(readFileSync(path, "utf8"), content);
106
+ // Headless runs cannot assert watch-pane lifecycle. Root records it separately.
107
+ assert.ok(metrics["task.solved"], "the requested explanation was not delivered in the declared result shape");
108
+ }
109
+
110
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
111
+ try {
112
+ if (process.argv[2] === "--prepare") prepare();
113
+ else await grade(process.argv[2]);
114
+ } catch (error) {
115
+ process.stderr.write(`${error instanceof Error ? error.stack : String(error)}\n`);
116
+ process.exitCode = 1;
117
+ }
118
+ }
@@ -0,0 +1,53 @@
1
+ import assert from "node:assert/strict";
2
+ import { readFileSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+
5
+ const events = readFileSync(process.env.CLIO_CODER_EVAL_RUNNER_STDOUT_FILE, "utf8")
6
+ .split(/\r?\n/u)
7
+ .flatMap((line) => {
8
+ try {
9
+ return [JSON.parse(line)];
10
+ } catch {
11
+ return [];
12
+ }
13
+ });
14
+ const starts = events.filter((event) => event.type === "tool_execution_start");
15
+ const ends = events.filter((event) => event.type === "tool_execution_end");
16
+ function output(call) {
17
+ const end = ends.find((event) => event.toolCallId === call.toolCallId);
18
+ assert.ok(end, "required tool call did not finish");
19
+ return JSON.stringify(end.result);
20
+ }
21
+ switch (process.argv[2]) {
22
+ case "read-tail": {
23
+ assert.equal(starts.length, 1);
24
+ const call = starts[0];
25
+ assert.equal(call.toolName, "read");
26
+ assert.equal(resolve(call.args.path), resolve("evals/fixtures/tool-surface/read.txt"));
27
+ assert.equal(call.args.tail, 2, "last-line probe must use the advertised tail argument");
28
+ assert.match(output(call), /gamma/u);
29
+ assert.match(output(call), /delta/u);
30
+ assert.doesNotMatch(output(call), /alpha|beta/u);
31
+ break;
32
+ }
33
+ case "bash-cwd-reset": {
34
+ assert.equal(starts.length, 2);
35
+ assert.ok(starts.every((call) => call.toolName === "bash"));
36
+ assert.equal(starts[0].args.command.trim(), "cd evals/fixtures/tool-surface/subdir && pwd");
37
+ assert.equal(starts[1].args.command.trim(), "pwd");
38
+ assert.equal(starts[1].args.cwd, undefined);
39
+ assert.ok(output(starts[0]).includes(resolve("evals/fixtures/tool-surface/subdir")));
40
+ assert.ok(output(starts[1]).includes(process.cwd()));
41
+ assert.ok(!output(starts[1]).includes("/tool-surface/subdir"));
42
+ break;
43
+ }
44
+ case "web-fetch-scheme": {
45
+ assert.equal(starts.length, 1);
46
+ assert.equal(starts[0].toolName, "web_fetch");
47
+ assert.equal(starts[0].args.url, "file:///tool-surface-fixture");
48
+ assert.match(output(starts[0]), /(?:unsupported|invalid|only)[\s\S]*(?:scheme|https?)/iu);
49
+ break;
50
+ }
51
+ default:
52
+ throw new Error("unknown tool surface case");
53
+ }
@@ -0,0 +1,274 @@
1
+ version: 2
2
+ suite:
3
+ id: tool-surface-model
4
+ title: Tool description and argument behavior
5
+ visibility: public
6
+ description: Model-required probes of read tail selection, bash child directory
7
+ reset, and web_fetch URL rejection. Expected rejection is distinct from
8
+ unintended tool errors.
9
+ matrix:
10
+ targets:
11
+ - id: mini
12
+ repeats: 3
13
+ tasks:
14
+ - id: read-tail
15
+ tags:
16
+ - behavioral
17
+ - model-required
18
+ - tool:read
19
+ behavioral:
20
+ schema: clio-coder.eval.scenario.v1
21
+ corpus:
22
+ id: tool-surface-model
23
+ version: 1.0.0
24
+ execution:
25
+ mode: model-required
26
+ subject:
27
+ kind: main-agent
28
+ role: main
29
+ toolTarget: available
30
+ expectedBehavior:
31
+ - id: read-tail-calls
32
+ category: tool_choice
33
+ fact:
34
+ source: tool
35
+ key: tools.calls.read
36
+ op: eq
37
+ value: 1
38
+ - id: read-tail-errors
39
+ category: tool_choice
40
+ fact:
41
+ source: tool
42
+ key: tools.failed.read
43
+ op: eq
44
+ value: 0
45
+ - id: read-tail-blocks
46
+ category: safety_comprehension
47
+ fact:
48
+ source: tool
49
+ key: tools.blocked.read
50
+ op: eq
51
+ value: 0
52
+ - id: read-tail-successes
53
+ category: tool_choice
54
+ fact:
55
+ source: tool
56
+ key: tools.succeeded.read
57
+ op: eq
58
+ value: 1
59
+ - id: read-tail-correct
60
+ category: task_correctness
61
+ fact:
62
+ source: grader
63
+ key: task.solved
64
+ op: eq
65
+ value: true
66
+ forbiddenBehavior: []
67
+ judge:
68
+ maxEvidenceItems: 32
69
+ maxExplanationChars: 500
70
+ workspace:
71
+ kind: temp-copy
72
+ path: ..
73
+ excludes:
74
+ - .git
75
+ - .superpowers
76
+ - node_modules
77
+ - dist
78
+ runner:
79
+ kind: clio-coder-run
80
+ autonomy: auto-edit
81
+ prompt: Read only the final two lines of evals/fixtures/tool-surface/read.txt
82
+ using one read call. Do not read the entire file or use other tools.
83
+ Report those lines. Do not edit files.
84
+ verify:
85
+ measure:
86
+ - node evals/tool-surface-grader.mjs read-tail
87
+ protectedFiles:
88
+ - evals/tool-surface-grader.mjs
89
+ - evals/fixtures/tool-surface/read.txt
90
+ - evals/fixtures/tool-surface/subdir/keep.txt
91
+ metrics:
92
+ collect:
93
+ - task.solved
94
+ - tools.totalCalls
95
+ - tools.calls.read
96
+ - tools.failed.read
97
+ - tools.blocked.read
98
+ - tools.succeeded.read
99
+ timeoutMs: 120000
100
+ - id: bash-cwd-reset
101
+ tags:
102
+ - behavioral
103
+ - model-required
104
+ - tool:bash
105
+ behavioral:
106
+ schema: clio-coder.eval.scenario.v1
107
+ corpus:
108
+ id: tool-surface-model
109
+ version: 1.0.0
110
+ execution:
111
+ mode: model-required
112
+ subject:
113
+ kind: main-agent
114
+ role: main
115
+ toolTarget: available
116
+ expectedBehavior:
117
+ - id: bash-cwd-reset-calls
118
+ category: tool_choice
119
+ fact:
120
+ source: tool
121
+ key: tools.calls.bash
122
+ op: eq
123
+ value: 2
124
+ - id: bash-cwd-reset-errors
125
+ category: tool_choice
126
+ fact:
127
+ source: tool
128
+ key: tools.failed.bash
129
+ op: eq
130
+ value: 0
131
+ - id: bash-cwd-reset-blocks
132
+ category: safety_comprehension
133
+ fact:
134
+ source: tool
135
+ key: tools.blocked.bash
136
+ op: eq
137
+ value: 0
138
+ - id: bash-cwd-reset-successes
139
+ category: tool_choice
140
+ fact:
141
+ source: tool
142
+ key: tools.succeeded.bash
143
+ op: eq
144
+ value: 2
145
+ - id: bash-cwd-reset-correct
146
+ category: task_correctness
147
+ fact:
148
+ source: grader
149
+ key: task.solved
150
+ op: eq
151
+ value: true
152
+ forbiddenBehavior: []
153
+ judge:
154
+ maxEvidenceItems: 32
155
+ maxExplanationChars: 500
156
+ workspace:
157
+ kind: temp-copy
158
+ path: ..
159
+ excludes:
160
+ - .git
161
+ - .superpowers
162
+ - node_modules
163
+ - dist
164
+ runner:
165
+ kind: clio-coder-run
166
+ autonomy: auto-edit
167
+ prompt: Use exactly two bash calls and no other tools. First run cd
168
+ evals/fixtures/tool-surface/subdir && pwd. Then run pwd with no cwd
169
+ argument, relying on the documented default directory of a new bash
170
+ call. Report whether the second call starts at the workspace root. Do
171
+ not edit files.
172
+ verify:
173
+ measure:
174
+ - node evals/tool-surface-grader.mjs bash-cwd-reset
175
+ protectedFiles:
176
+ - evals/tool-surface-grader.mjs
177
+ - evals/fixtures/tool-surface/read.txt
178
+ - evals/fixtures/tool-surface/subdir/keep.txt
179
+ metrics:
180
+ collect:
181
+ - task.solved
182
+ - tools.totalCalls
183
+ - tools.calls.bash
184
+ - tools.failed.bash
185
+ - tools.blocked.bash
186
+ - tools.succeeded.bash
187
+ timeoutMs: 120000
188
+ - id: web-fetch-scheme
189
+ tags:
190
+ - behavioral
191
+ - model-required
192
+ - tool:web_fetch
193
+ behavioral:
194
+ schema: clio-coder.eval.scenario.v1
195
+ corpus:
196
+ id: tool-surface-model
197
+ version: 1.0.0
198
+ execution:
199
+ mode: model-required
200
+ subject:
201
+ kind: main-agent
202
+ role: main
203
+ toolTarget: available
204
+ expectedBehavior:
205
+ - id: web-fetch-scheme-calls
206
+ category: tool_choice
207
+ fact:
208
+ source: tool
209
+ key: tools.calls.web_fetch
210
+ op: eq
211
+ value: 1
212
+ - id: web-fetch-scheme-errors
213
+ category: tool_choice
214
+ fact:
215
+ source: tool
216
+ key: tools.failed.web_fetch
217
+ op: eq
218
+ value: 1
219
+ - id: web-fetch-scheme-blocks
220
+ category: safety_comprehension
221
+ fact:
222
+ source: tool
223
+ key: tools.blocked.web_fetch
224
+ op: eq
225
+ value: 0
226
+ - id: web-fetch-scheme-successes
227
+ category: tool_choice
228
+ fact:
229
+ source: tool
230
+ key: tools.succeeded.web_fetch
231
+ op: eq
232
+ value: 0
233
+ - id: web-fetch-scheme-correct
234
+ category: task_correctness
235
+ fact:
236
+ source: grader
237
+ key: task.solved
238
+ op: eq
239
+ value: true
240
+ forbiddenBehavior: []
241
+ judge:
242
+ maxEvidenceItems: 32
243
+ maxExplanationChars: 500
244
+ workspace:
245
+ kind: temp-copy
246
+ path: ..
247
+ excludes:
248
+ - .git
249
+ - .superpowers
250
+ - node_modules
251
+ - dist
252
+ runner:
253
+ kind: clio-coder-run
254
+ autonomy: auto-edit
255
+ prompt: "Probe the web_fetch URL validation once with
256
+ file:///tool-surface-fixture. This is an intentional invalid-scheme
257
+ test: invoke web_fetch exactly once, report the rejection, and do not
258
+ retry or use other tools. Do not edit files."
259
+ verify:
260
+ measure:
261
+ - node evals/tool-surface-grader.mjs web-fetch-scheme
262
+ protectedFiles:
263
+ - evals/tool-surface-grader.mjs
264
+ - evals/fixtures/tool-surface/read.txt
265
+ - evals/fixtures/tool-surface/subdir/keep.txt
266
+ metrics:
267
+ collect:
268
+ - task.solved
269
+ - tools.totalCalls
270
+ - tools.calls.web_fetch
271
+ - tools.failed.web_fetch
272
+ - tools.blocked.web_fetch
273
+ - tools.succeeded.web_fetch
274
+ timeoutMs: 120000
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iowarp/clio-coder",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "The terminal coding agent for people who maintain the code that science runs on, with user-chosen models and inspectable evidence.",
5
5
  "keywords": [
6
6
  "ai",
@@ -76,15 +76,15 @@
76
76
  "pi:surface-diff": "node --import tsx scripts/pi-surface-diff.ts",
77
77
  "pi:surface-snapshot": "node --import tsx scripts/pi-surface-diff.ts --write",
78
78
  "test:file": "node --import tsx --import ./tests/harness/tmp-root.ts --test",
79
- "pretest": "test -f dist/cli/index.js || npm run build",
79
+ "pretest": "test -f dist/cli/index.js || pnpm run build",
80
80
  "test": "node --import tsx --import ./tests/harness/tmp-root.ts --test tests/contracts/*.test.ts tests/smoke/*.test.ts",
81
- "test:trace-viewer": "npm --prefix apps/trace-viewer test",
81
+ "test:trace-viewer": "pnpm --filter @iowarp/clio-trace-viewer test",
82
82
  "trace:ui": "node apps/trace-viewer/server.mjs",
83
- "ci": "npm run typecheck && npm run lint && npm run build && npm run test && npm run test:trace-viewer",
84
- "ci:release": "npm run ci && node scripts/check-release.mjs",
83
+ "ci": "pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run test && pnpm run test:trace-viewer",
84
+ "ci:release": "pnpm run ci && node scripts/check-release.mjs",
85
85
  "install:local": "bash scripts/install-local.sh",
86
86
  "smoke:real-home": "bash scripts/smoke-real-home.sh",
87
- "prepublishOnly": "CLIO_CODER_RELEASE_CONTEXT=publish npm run ci:release",
87
+ "prepublishOnly": "CLIO_CODER_RELEASE_CONTEXT=publish pnpm run ci:release",
88
88
  "skills:pin": "node --import tsx scripts/pin-skills.ts",
89
89
  "skills:check": "node --import tsx scripts/pin-skills.ts --check"
90
90
  },
@@ -92,18 +92,14 @@
92
92
  "@anthropic-ai/claude-agent-sdk": "0.3.186"
93
93
  },
94
94
  "dependencies": {
95
- "@earendil-works/pi-agent-core": "0.84.4",
96
- "@earendil-works/pi-ai": "0.84.4",
97
- "@earendil-works/pi-tui": "0.84.4",
95
+ "@earendil-works/pi-agent-core": "0.85.1",
96
+ "@earendil-works/pi-ai": "0.85.1",
97
+ "@earendil-works/pi-tui": "0.85.1",
98
98
  "@silvia-odwyer/photon-node": "^0.3.4",
99
99
  "grok-mermaid": "0.2.2",
100
100
  "ollama": "0.6.3",
101
101
  "smol-toml": "1.8.0"
102
102
  },
103
- "overrides": {
104
- "@anthropic-ai/sdk": "0.105.0",
105
- "esbuild": "0.28.1"
106
- },
107
103
  "devDependencies": {
108
104
  "@biomejs/biome": "2.5.1",
109
105
  "@types/node": "24.12.2",
@@ -119,5 +115,9 @@
119
115
  "typescript": "6.0.3",
120
116
  "uuid": "14.0.1",
121
117
  "yaml": "2.9.0"
122
- }
118
+ },
119
+ "packageManager": "pnpm@10.34.5",
120
+ "workspaces": [
121
+ "apps/*"
122
+ ]
123
123
  }
package/skills/README.md CHANGED
@@ -193,7 +193,7 @@ clio-coder skills install find-skills --project # strongest discovered project
193
193
 
194
194
  ## Publishing: the marketplace index
195
195
 
196
- `npm run skills:pin` writes two files. `registry.yaml` pins content hashes and
196
+ `pnpm run skills:pin` writes two files. `registry.yaml` pins content hashes and
197
197
  is what drift is measured against. `skill-marketplace.json` is the published
198
198
  index: one entry per skill with `name`, `description`, optional `triggers`,
199
199
  `sourceUrl` (the skill's own `clio-coder.source-url`), `version`, `audit`, and
@@ -213,7 +213,7 @@ Install then clones the repository named in that entry's `sourceUrl` and copies
213
213
  the skill out of it, so the index is only as live as the branch its URLs name.
214
214
  The catalog's `source-url` values all point at `main`; until a release branch
215
215
  lands there, an install through the index fails naming the repository, the
216
- branch, and the missing path. `npm run skills:check` fails if a skill's
216
+ branch, and the missing path. `pnpm run skills:check` fails if a skill's
217
217
  `source-url` stops ending with its catalog path, which is how a skill moved
218
218
  between categories cannot ship a stale pointer.
219
219
 
@@ -292,7 +292,7 @@ dependency warnings, and other harnesses ignore it like any unknown key.
292
292
 
293
293
  The deprecated nested `clio:` mapping and legacy flat keys (`registry-id`,
294
294
  `source-url`, `audit` at the top level) are still read as fallbacks for older
295
- installed copies. The catalog itself must use `clio-coder:`, and `npm run
295
+ installed copies. The catalog itself must use `clio-coder:`, and `pnpm run
296
296
  skills:check` enforces that.
297
297
 
298
298
  ### Versioning policy
@@ -350,7 +350,7 @@ names rather than mapping them. Translating `bash` to `Bash` for
350
350
  Claude-compatibility would not restrict anything; it would silently add `Bash`
351
351
  to the always-allow rules of every session that loaded the skill. The same goes
352
352
  for a `clio-coder skills export --for claude` lane, so there is no such lane. To keep
353
- a well-meaning edit from introducing that, `npm run skills:check` fails on any
353
+ a well-meaning edit from introducing that, `pnpm run skills:check` fails on any
354
354
  `allowed-tools` entry that is not a Clio tool name in canonical lowercase.
355
355
 
356
356
  The rest of the surface, read from the same build:
@@ -401,10 +401,10 @@ observed writing outside its workspace. Eval numbers are evidence about a
401
401
  cooperative model, not an isolation guarantee. Run campaigns with `CLIO_CODER_*`
402
402
  pointed at throwaway directories.
403
403
 
404
- `npm run skills:pin` enforces this contract structurally: it refuses to pin a
404
+ `pnpm run skills:pin` enforces this contract structurally: it refuses to pin a
405
405
  catalog where any skill is missing the required frontmatter, `audit: pass`, or
406
406
  its `evals.md`, declares a tool name Clio does not have, or carries a
407
- `source-url` that no longer ends with its catalog path. `npm run skills:check`
407
+ `source-url` that no longer ends with its catalog path. `pnpm run skills:check`
408
408
  (run in CI) fails on any drift between the catalog and either generated file,
409
409
  `registry.yaml` or `skill-marketplace.json`. Each pin covers the normalized
410
410
  `SKILL.md`, not the whole skill directory. Install-lifecycle stamps such as
@@ -1,5 +1,5 @@
1
1
  # Pinned marketplace skill content hashes (provenance-stripped sha256).
2
- # Generated by `npm run skills:pin`. At activation, an installed skill
2
+ # Generated by `pnpm run skills:pin`. At activation, an installed skill
3
3
  # carrying registry-id provenance is compared against its pinned hash;
4
4
  # a mismatch surfaces a drift warning.
5
5
  skills:
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedBy": "npm run skills:pin",
2
+ "generatedBy": "pnpm run skills:pin",
3
3
  "skills": [
4
4
  {
5
5
  "name": "ast-grep",
package/src/cli/ask.ts CHANGED
@@ -1,10 +1,13 @@
1
1
  import type { createInterface } from "node:readline/promises";
2
2
 
3
- export async function ask(
4
- rl: ReturnType<typeof createInterface>,
5
- label: string,
6
- defaultValue?: string,
7
- ): Promise<string | null> {
3
+ type QuestionReader = Pick<ReturnType<typeof createInterface>, "question"> & {
4
+ interactive?: boolean;
5
+ text?: (label: string, initial?: string) => Promise<string>;
6
+ choose?: (label: string, choices: ReadonlyArray<string>, current: string) => Promise<string>;
7
+ };
8
+
9
+ export async function ask(rl: QuestionReader, label: string, defaultValue?: string): Promise<string | null> {
10
+ if (rl.text) return rl.text(label, defaultValue);
8
11
  const suffix = defaultValue && defaultValue.length > 0 ? ` [${defaultValue}]` : "";
9
12
  try {
10
13
  const answer = (await rl.question(`${label}${suffix}: `)).trim();
@@ -16,11 +19,8 @@ export async function ask(
16
19
  }
17
20
  }
18
21
 
19
- export async function askYesNo(
20
- rl: ReturnType<typeof createInterface>,
21
- label: string,
22
- defaultValue: boolean,
23
- ): Promise<boolean> {
22
+ export async function askYesNo(rl: QuestionReader, label: string, defaultValue: boolean): Promise<boolean> {
23
+ if (rl.choose && rl.interactive) return (await rl.choose(label, ["yes", "no"], defaultValue ? "yes" : "no")) === "yes";
24
24
  const marker = defaultValue ? "Y/n" : "y/N";
25
25
  for (;;) {
26
26
  const answer = await ask(rl, `${label} [${marker}]`);
@@ -22,6 +22,7 @@ import {
22
22
  } from "../domains/context/index.js";
23
23
  import type { DispatchContract } from "../domains/dispatch/contract.js";
24
24
  import { DispatchDomainModule } from "../domains/dispatch/index.js";
25
+ import { declaredScopeIntent } from "../domains/dispatch/intent.js";
25
26
  import type { RunReceipt } from "../domains/dispatch/types.js";
26
27
  import { MiddlewareDomainModule } from "../domains/middleware/index.js";
27
28
  import { createObservabilityDomainModule } from "../domains/observability/index.js";
@@ -384,6 +385,10 @@ async function generateBootstrapWithModel(
384
385
  route?: BootstrapRoute,
385
386
  ): Promise<BootstrapStructuredOutput> {
386
387
  const prompt = buildBootstrapPrompt(input);
388
+ // The internal researcher reads this repository and returns JSON. Authored
389
+ // handbook text is evidence, not a source of inferred filesystem authority.
390
+ const scope = declaredScopeIntent({ readRoots: ["."] });
391
+ if (!scope.ok) throw new Error(`${scope.reason}: ${scope.message}`);
387
392
  const startedAtClock = performance.now();
388
393
  input.progress?.({
389
394
  phase: "generate",
@@ -393,6 +398,7 @@ async function generateBootstrapWithModel(
393
398
  });
394
399
  const dispatchBootstrap = (nativeSchema: boolean) =>
395
400
  dispatch.dispatch({
401
+ intent: scope.intent,
396
402
  agentId: CONTEXT_BOOTSTRAP_AGENT_ID,
397
403
  executionRole: "researcher",
398
404
  task: prompt,