@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.
- package/CHANGELOG.md +116 -2
- package/CONTRIBUTING.md +39 -24
- package/NOTICE +16 -0
- package/README.md +343 -403
- package/dist/{acp-WNAYYF4F.js → acp-UVEVWSDL.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-VWY37DTK.js} +78 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-PCV2XQDV.js} +38 -38
- package/dist/builtins-PD652MTK.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NRO2BJRH.js → chunk-24T2YZ7A.js} +10686 -4464
- package/dist/{chunk-Y55JBDO5.js → chunk-2AKYFREM.js} +38 -23
- package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
- package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
- package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
- package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
- package/dist/{chunk-UXCU4E3T.js → chunk-3BJGMT2D.js} +35 -14
- package/dist/{chunk-5ICU3EUH.js → chunk-3HQVBIKD.js} +5 -5
- package/dist/{chunk-GWZNEVM2.js → chunk-3JLFK5MW.js} +9 -9
- package/dist/{chunk-XXYSBZIQ.js → chunk-3O2ZAUGQ.js} +4 -4
- package/dist/{chunk-GX5WYQO4.js → chunk-3QKXHCGS.js} +8 -8
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-OEJSLEPW.js → chunk-3WBALRQH.js} +337 -337
- package/dist/{chunk-ELWDPP3Y.js → chunk-4DU2TVI4.js} +8 -8
- package/dist/{chunk-JSD46VO2.js → chunk-4U4TKZFR.js} +43 -36
- package/dist/{chunk-FEAXX7B6.js → chunk-4VMV6OS6.js} +4 -4
- package/dist/{chunk-2ZSONWVL.js → chunk-536HXRFE.js} +13 -13
- package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
- package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
- package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-5QRX7SLS.js} +11 -11
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-DT3LWJOB.js → chunk-6HAO6X5B.js} +24 -6
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-K6T2ZAMZ.js → chunk-6OII3LOK.js} +6 -6
- package/dist/{chunk-36CT5VVL.js → chunk-6RYDAVQT.js} +138 -89
- package/dist/{chunk-I7XBWTYH.js → chunk-6VRRJT7L.js} +5 -5
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-NAI6ZFCY.js → chunk-7JSSKXG2.js} +122 -11
- package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
- package/dist/chunk-7WUZEB2M.js +165 -0
- package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
- package/dist/{chunk-IXIY2H4R.js → chunk-ACCKVSHU.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-B3MOMLJ4.js} +12 -12
- package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
- package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
- package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
- package/dist/{chunk-23L32XTI.js → chunk-BLTEAUCB.js} +68 -39
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-XULDXHTN.js → chunk-BT7HGDOX.js} +105 -53
- package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
- package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
- package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
- package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
- package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
- package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
- package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-6UINWWS6.js → chunk-DXLUVUD4.js} +16 -16
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-E7RF4KBO.js} +5 -5
- package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
- package/dist/chunk-ECOMVOHP.js +139 -0
- package/dist/chunk-EFSEIZE6.js +56 -0
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/chunk-EM2WNQS2.js +93 -0
- package/dist/{chunk-57XXR6DR.js → chunk-F5Z7EWMN.js} +967 -246
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
- package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
- package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
- package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-EXLD33WO.js → chunk-GLYBJ4RQ.js} +24 -9
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-FFUPXJC4.js → chunk-HPTJF6DG.js} +32 -56
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-CUSRQKPU.js → chunk-HZ2T2YED.js} +299 -89
- package/dist/{chunk-YD5GIKET.js → chunk-HZFBVU5X.js} +49 -580
- package/dist/{chunk-6QOTUPRG.js → chunk-I2K2NCZQ.js} +65 -17
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-I2DWJ4GM.js → chunk-IGLVVNEG.js} +54 -42
- package/dist/{chunk-6Q3CYFD3.js → chunk-IKRWLEDA.js} +186 -35
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-2DSOYNFC.js → chunk-JMPL7NUB.js} +7 -7
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-KAFMW7WM.js} +72 -81
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
- package/dist/chunk-KPRLAMP4.js +32 -0
- package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
- package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-JQLNNIKT.js → chunk-LIN2K3EL.js} +6 -6
- package/dist/{chunk-2STGEDFV.js → chunk-LK2FN5JY.js} +2 -2
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
- package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
- package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
- package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-4WR7VSYB.js → chunk-N2OKBREN.js} +23 -9
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/{chunk-4M6Z5QVF.js → chunk-NNWJYUNO.js} +11 -11
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-75W7L2E2.js → chunk-P5JMBPDJ.js} +1052 -171
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-S6PYF2XF.js → chunk-P6M7RKMI.js} +4 -4
- package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
- package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
- package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
- package/dist/{chunk-DXKJURES.js → chunk-PZN2LQY6.js} +14 -11
- package/dist/{chunk-N56KALIC.js → chunk-Q7NNUHQV.js} +62 -35
- package/dist/{chunk-RQCKCSRL.js → chunk-QCOV5DFY.js} +22 -22
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-NEKRRTYW.js → chunk-QJMRYTCX.js} +8 -8
- package/dist/{chunk-YNFKXPEC.js → chunk-QNWRHOMF.js} +35 -66
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-QXFBABFJ.js} +10 -10
- package/dist/chunk-R2CT5YDO.js +66 -0
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-IGLP3ODT.js → chunk-RGZNQ5CT.js} +15 -15
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/chunk-SL2RDHKO.js +19 -0
- package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
- package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-UEPWCCTY.js → chunk-SXQKNKRA.js} +12 -12
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-5636DCO5.js → chunk-TJFDL26W.js} +59 -12
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-7UGL4MB5.js → chunk-VAHLPXPY.js} +10 -10
- package/dist/{chunk-25QBEXRS.js → chunk-VANN3GDP.js} +7 -26
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-QUFRYSWI.js → chunk-VHMX7SXF.js} +129 -48
- package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
- package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
- package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
- package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-USR47QNF.js → chunk-WKUYQBCG.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-WNGF5AJX.js} +36 -22
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/{chunk-6OSVSQL5.js → chunk-WV6TDAPN.js} +41 -23
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-2ASED4PZ.js → chunk-X3BI7HTV.js} +26 -26
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-RZDWV63N.js → chunk-XWMSPJYN.js} +6 -6
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-6PAZTBPA.js → chunk-YPRSNUTC.js} +15 -6
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-LTIKRKFL.js → chunk-ZS43Y2FT.js} +4 -4
- package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
- package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
- package/dist/cli/index.js +44 -44
- package/dist/clio-QQCMTUZE.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-GUPM6766.js} +48 -32
- package/dist/codewiki/build-worker.js +76 -29
- package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
- package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-IIM7YOD3.js} +211 -124
- package/dist/configure-4ZM5HWJX.js +73 -0
- package/dist/{context-BOYF5EJM.js → context-44BZLJ3J.js} +62 -31
- package/dist/{context-4MPR7WKB.js → context-AIDVQKMW.js} +126 -121
- package/dist/{context-2DKHWH2T.js → context-OL5P3HEP.js} +92 -62
- package/dist/context-clear-OQV76MYP.js +184 -0
- package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
- package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
- package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-ZUW3EGLS.js} +32 -31
- package/dist/detail-UXPWRANG.js +115 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-P3ZW6G77.js} +192 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-JJVGPZWT.js} +59 -58
- package/dist/{eval-OQOQUDHK.js → eval-V2RTN3UH.js} +476 -170
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-35PYWGSO.js +225 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-CIGGKI6J.js} +111 -94
- package/dist/{evolve-GSS52E5J.js → evolve-33SM3NJP.js} +108 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-LFO7SIPC.js} +147 -146
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-RLK72GU3.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-JZIBCGMW.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-2L5YGGZJ.js} +108 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-LIAVKDUU.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-JIK3OQZR.js} +106 -89
- package/dist/fleet-view-IWHYGQKK.js +118 -0
- package/dist/{init-PXEXQSBF.js → init-NJEDOTQW.js} +124 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-RVCAYECG.js} +25 -25
- package/dist/inventory-74UL7UHU.js +118 -0
- package/dist/{library-B2W4N74O.js → library-CTKZA7K3.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-I76I5VUH.js} +108 -93
- package/dist/{models-GERTU3YI.js → models-D4YDIQZQ.js} +64 -62
- package/dist/{monitor-CPNIUULB.js → monitor-NKVD55HX.js} +137 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-I6OATVPK.js} +1715 -1687
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-EJAWJEIO.js +116 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-4XMQKDNZ.js} +22 -20
- package/dist/{resources-4PXNMD5G.js → resources-TVYVXK3Q.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-OWQNNSJU.js} +164 -157
- package/dist/{share-2NWMJJEE.js → share-NPZZMUXG.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-OXFEAWMT.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-J5TCKSJA.js} +128 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-7II4DM57.js} +41 -40
- package/dist/slash-commands-MDSDSWYF.js +92 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-KILZEOCE.js} +161 -94
- package/dist/tasks-R6P6OV22.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-LZCG2KN3.js} +12 -11
- package/dist/tools-6OCQ6SVB.js +28 -0
- package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
- package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
- package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
- package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-D2OZH6IQ.js} +42 -41
- package/dist/{usage-NHG6MCJM.js → usage-PIASNUS4.js} +137 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-LTHUY2PX.js} +28 -27
- package/dist/verify-HYF7KBVE.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-RK7JQ5NP.js +615 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +108 -95
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/context-engine.md +45 -60
- package/docs/architecture/context-working-set.md +7 -9
- package/docs/architecture/dispatch-architecture-rationale.md +1 -1
- package/docs/architecture/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/tui-design.md +45 -30
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +75 -61
- package/docs/guide/configuration-and-targets.md +126 -26
- package/docs/guide/configuration-reference.md +22 -7
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +13 -6
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +79 -20
- package/docs/guide/proactive-memory.md +1 -1
- package/docs/guide/skills-marketplace.md +11 -3
- package/docs/guide/tool-usage.md +9 -2
- package/docs/process/development-pipeline.md +11 -11
- package/docs/process/documentation-coverage.md +1 -1
- package/docs/process/documentation-guide.md +2 -2
- package/docs/process/eval-runner.md +15 -0
- package/docs/process/evals-internal.md +1 -1
- package/docs/process/release-cut-checklist.md +24 -12
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-model-negative-control.yaml +1 -0
- package/evals/behavioral-model.yaml +266 -1
- package/evals/fixtures/docs-retrieval.json +102 -0
- package/evals/fixtures/scalar-decision.json +17 -0
- package/evals/fixtures/scout-citation-pipeline.json +55 -0
- package/evals/fixtures/source-explanation.json +74 -0
- package/evals/fixtures/tool-arguments.json +18 -0
- package/evals/fixtures/tool-surface/read.txt +4 -0
- package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
- package/evals/no-edit-memory-grader.mjs +149 -0
- package/evals/scalar-decision-grader.py +41 -0
- package/evals/scalar-decision-machinery.ts +145 -0
- package/evals/source-explanation-grader.mjs +118 -0
- package/evals/tool-surface-grader.mjs +53 -0
- package/evals/tool-surface-model.yaml +274 -0
- package/package.json +14 -14
- package/skills/README.md +6 -6
- package/skills/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/ask.ts +10 -10
- package/src/cli/bootstrap-generate.ts +6 -0
- package/src/cli/config-inspect.ts +24 -7
- package/src/cli/config-trust.ts +62 -0
- package/src/cli/config.ts +8 -0
- package/src/cli/configure-editor.ts +51 -0
- package/src/cli/configure-interop.ts +1 -1
- package/src/cli/configure-oauth.ts +1 -1
- package/src/cli/configure-onboarding.ts +232 -96
- package/src/cli/configure-prompts.ts +76 -0
- package/src/cli/configure-quick.ts +274 -0
- package/src/cli/configure-target.ts +14 -2
- package/src/cli/configure.ts +413 -174
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/oauth-manual-input.ts +1 -1
- package/src/cli/reset.ts +2 -0
- package/src/cli/run.ts +16 -14
- package/src/cli/select.ts +35 -4
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +11 -8
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/config.ts +39 -15
- package/src/core/defaults.ts +38 -15
- package/src/{interactive → core}/external-editor.ts +4 -4
- package/src/core/file-references.ts +11 -1
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/result-contract.ts +199 -26
- package/src/domains/config/classify.ts +1 -1
- package/src/domains/config/keybindings.ts +3 -31
- package/src/domains/context/bootstrap-prompt.ts +11 -9
- package/src/domains/context/bootstrap.ts +74 -39
- package/src/domains/context/clio-md.ts +88 -26
- package/src/domains/context/codewiki/build-operation.ts +121 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
- package/src/domains/context/codewiki/build-worker.ts +3 -35
- package/src/domains/context/codewiki/coordinator.ts +36 -6
- package/src/domains/context/codewiki/indexer.ts +59 -19
- package/src/domains/context/contract.ts +6 -2
- package/src/domains/context/extension.ts +72 -10
- package/src/domains/context/fingerprint.ts +39 -34
- package/src/domains/context/index.ts +7 -1
- package/src/domains/context/prompt-context.ts +55 -14
- package/src/domains/context/refresh.ts +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -67
- package/src/domains/context/wiki/meta.ts +10 -2
- package/src/domains/context/wiki/plan-store.ts +70 -14
- package/src/domains/context/wiki/plan.ts +71 -14
- package/src/domains/context/wiki/prompts.ts +42 -1
- package/src/domains/context/wiki/source-content.ts +106 -0
- package/src/domains/context/wiki/staleness.ts +33 -22
- package/src/domains/context/working-set/contract.ts +8 -2
- package/src/domains/context/working-set/engine.ts +17 -4
- package/src/domains/context/working-set/fold.ts +15 -2
- package/src/domains/context/working-set/marker.ts +2 -1
- package/src/domains/context/working-set/project.ts +18 -7
- package/src/domains/context/working-set/recall.ts +82 -56
- package/src/domains/dispatch/active-route-planner.ts +6 -3
- package/src/domains/dispatch/admission-queue.ts +19 -7
- package/src/domains/dispatch/admission.ts +3 -3
- package/src/domains/dispatch/budget-envelope.ts +47 -82
- package/src/domains/dispatch/capacity-lease.ts +57 -19
- package/src/domains/dispatch/contract.ts +10 -2
- package/src/domains/dispatch/event-pump.ts +28 -7
- package/src/domains/dispatch/execution-role.ts +49 -2
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- package/src/domains/dispatch/route-approval.ts +3 -3
- package/src/domains/dispatch/route-observer.ts +4 -2
- package/src/domains/dispatch/route-quality.ts +6 -1
- package/src/domains/dispatch/types.ts +4 -3
- package/src/domains/dispatch/worker-spawn.ts +58 -21
- package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
- package/src/domains/eval/compare/behavioral.ts +81 -14
- package/src/domains/eval/compare/compare.ts +15 -5
- package/src/domains/eval/compare/envelope.ts +12 -5
- package/src/domains/eval/metrics/context.ts +24 -1
- package/src/domains/eval/metrics/tracked.ts +4 -28
- package/src/domains/eval/reports/comparison.ts +9 -9
- package/src/domains/eval/runners/clio-run.ts +5 -1
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +1 -0
- package/src/domains/eval/suites/run.ts +189 -13
- package/src/domains/eval/verifiers/integrity.ts +39 -0
- package/src/domains/eval/verifiers/patch.ts +58 -2
- package/src/domains/eval/workspaces/temp-copy.ts +3 -0
- package/src/domains/evidence/build.ts +4 -2
- package/src/domains/interop/registry.ts +2 -2
- package/src/domains/middleware/hooks-io.ts +45 -26
- package/src/domains/middleware/hooks.ts +6 -0
- package/src/domains/middleware/injection-screen.ts +23 -0
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/stalled-turn.ts +18 -3
- package/src/domains/middleware/task-board-reminder.ts +4 -2
- package/src/domains/middleware/task-nudge.ts +4 -1
- package/src/domains/mux/contract.ts +34 -1
- package/src/domains/mux/dock-controller.ts +8 -1
- package/src/domains/mux/index.ts +1 -0
- package/src/domains/mux/socket-client.ts +13 -3
- package/src/domains/observability/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- package/src/domains/prompts/compiler.ts +10 -2
- package/src/domains/prompts/contract.ts +7 -4
- package/src/domains/prompts/extension.ts +28 -64
- package/src/domains/prompts/fragments/identity/clio.md +23 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -15
- package/src/domains/prompts/fragments/wiki/plan.md +4 -4
- package/src/domains/prompts/preload-prefix.ts +31 -0
- package/src/domains/prompts/preload.ts +135 -61
- package/src/domains/providers/auth/backend-file.ts +15 -11
- package/src/domains/providers/auth/storage.ts +3 -5
- package/src/domains/providers/catalog.ts +18 -3
- package/src/domains/providers/probe/fingerprint.ts +13 -6
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -0
- package/src/domains/safety/autonomy.ts +10 -1
- package/src/domains/safety/contract.ts +5 -1
- package/src/domains/safety/default-path-policy.ts +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/compaction/compact.ts +384 -21
- package/src/domains/session/compaction/cut-point.ts +42 -5
- package/src/domains/session/compaction/tokens.ts +9 -1
- package/src/domains/session/decision-board.ts +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/openai-completions.ts +13 -6
- package/src/engine/apis/output-budget.ts +26 -10
- package/src/engine/claude/sdk-runtime.ts +4 -3
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- package/src/engine/loop-guard.ts +19 -2
- package/src/engine/provider-diagnostics.ts +129 -0
- package/src/engine/provider-payload.ts +3 -1
- package/src/engine/worker-runtime.ts +13 -2
- package/src/engine/worker-tools.ts +5 -1
- package/src/entry/extension-reload.ts +1 -0
- package/src/entry/orchestrator.ts +53 -15
- package/src/interactive/application-controller.ts +1 -31
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-panel.ts +163 -637
- package/src/interactive/chat-renderer.ts +73 -30
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +18 -5
- package/src/interactive/editor-submit.ts +21 -31
- package/src/interactive/footer/dashboard.ts +8 -3
- package/src/interactive/footer/widgets.ts +50 -91
- package/src/interactive/interactive-application.ts +24 -44
- package/src/interactive/interactive-event-projection.ts +9 -45
- package/src/interactive/interactive-input-runtime.ts +3 -28
- package/src/interactive/interactive-presentation.ts +45 -16
- package/src/interactive/interactive-slash-runtime.ts +5 -40
- package/src/interactive/layout.ts +31 -5
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +5 -1
- package/src/interactive/overlay-lifecycle.ts +1 -0
- package/src/interactive/overlay-session-lifecycle.ts +7 -1
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/overlays/settings.ts +9 -8
- package/src/interactive/renderers/preview.ts +16 -0
- package/src/interactive/renderers/tool-execution.ts +84 -161
- package/src/interactive/renderers/worker-entry.ts +74 -43
- package/src/interactive/slash-autocomplete.ts +1 -6
- package/src/interactive/slash-commands.ts +16 -46
- package/src/interactive/status/controller.ts +0 -5
- package/src/interactive/status/state-machine.ts +44 -26
- package/src/interactive/status/types.ts +3 -0
- package/src/interactive/status/verbs.ts +13 -12
- package/src/interactive/transcript-detail.ts +50 -112
- package/src/interactive/turn-context.ts +221 -53
- package/src/interactive/turn-middleware.ts +3 -1
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-runtime.ts +11 -2
- package/src/interactive/turn-state.ts +10 -9
- package/src/interactive/view/artifacts.ts +4 -0
- package/src/interactive/view/view-overlay.ts +44 -34
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -2
- package/src/tools/codewiki/code-nav.ts +4 -10
- package/src/tools/compete-judge-task.ts +71 -0
- package/src/tools/compete-worktrees.ts +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- package/src/tools/dispatch-schema.ts +30 -23
- package/src/tools/dispatch-scout-admission.ts +10 -44
- package/src/tools/dispatch-scout.ts +2 -3
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/ls.ts +7 -1
- package/src/tools/monitor.ts +26 -11
- package/src/tools/network-policy.ts +11 -24
- package/src/tools/observation.ts +39 -2
- package/src/tools/presentation.ts +1 -1
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +55 -18
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +10 -5
- package/src/tools/web-fetch-network.ts +179 -0
- package/src/tools/web-fetch-surface.ts +2 -1
- package/src/tools/web-fetch.ts +15 -13
- package/src/tools/worker-evidence.ts +27 -0
- package/src/worker/spec-contract.ts +12 -8
- package/dist/builtins-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- 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.
|
|
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 ||
|
|
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": "
|
|
81
|
+
"test:trace-viewer": "pnpm --filter @iowarp/clio-trace-viewer test",
|
|
82
82
|
"trace:ui": "node apps/trace-viewer/server.mjs",
|
|
83
|
-
"ci": "
|
|
84
|
-
"ci:release": "
|
|
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
|
|
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.
|
|
96
|
-
"@earendil-works/pi-ai": "0.
|
|
97
|
-
"@earendil-works/pi-tui": "0.
|
|
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
|
-
`
|
|
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. `
|
|
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 `
|
|
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, `
|
|
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
|
-
`
|
|
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. `
|
|
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
|
package/skills/registry.yaml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Pinned marketplace skill content hashes (provenance-stripped sha256).
|
|
2
|
-
# Generated by `
|
|
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:
|
package/src/cli/ask.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { createInterface } from "node:readline/promises";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
label: string,
|
|
6
|
-
|
|
7
|
-
|
|
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:
|
|
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,
|