@iowarp/clio-coder 0.4.4 → 0.4.5
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 +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- 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-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- 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-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
- 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-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- 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-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- 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-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- 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-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- 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-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- 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-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- 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-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- 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-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.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-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
- 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-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- 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-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- 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-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- 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-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- 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-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.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-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
- package/dist/context-clear-TMEQCOTH.js +183 -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-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -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-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- 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-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -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-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.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-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.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-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- 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 +44 -59
- 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/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +12 -0
- package/docs/guide/installation-and-lifecycle.md +35 -9
- 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 +10 -10
- 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 +6 -6
- 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/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/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/run.ts +16 -14
- 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 +9 -6
- 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 +33 -14
- package/src/core/defaults.ts +5 -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/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/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- 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/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-renderer.ts +60 -0
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +3 -1
- package/src/interactive/overlay-session-lifecycle.ts +6 -0
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/renderers/tool-execution.ts +17 -1
- package/src/interactive/renderers/worker-entry.ts +25 -10
- package/src/interactive/slash-commands.ts +9 -7
- 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/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/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- 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 +6 -1
- 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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic #351 fixture; no provider or model is called.
|
|
3
|
+
* Run: node --import tsx evals/scalar-decision-machinery.ts /path/to/python
|
|
4
|
+
* Requires an existing NumPy interpreter. All commits belong to owned scratch
|
|
5
|
+
* repos. This checks grading/decision/commit machinery, not model compliance.
|
|
6
|
+
*/
|
|
7
|
+
import { deepStrictEqual, match, ok, strictEqual } from "node:assert/strict";
|
|
8
|
+
import { execFileSync, spawnSync } from "node:child_process";
|
|
9
|
+
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
import {
|
|
14
|
+
setCommitDecisionRefsProvider,
|
|
15
|
+
withManagedGitCommitAttributionEnvironment,
|
|
16
|
+
} from "../src/core/git-commit-attribution.js";
|
|
17
|
+
import { activeDecisionRefs, createDecisionBoardStore } from "../src/domains/session/decision-board.js";
|
|
18
|
+
import type { DecisionLedgerEntry } from "../src/domains/session/entries.js";
|
|
19
|
+
import { createDecideTool } from "../src/tools/decide.js";
|
|
20
|
+
import { isolateClioEnv } from "../tests/harness/scratch-env.js";
|
|
21
|
+
|
|
22
|
+
const python = process.argv[2];
|
|
23
|
+
if (!python) throw new Error("Pass an existing Python interpreter with NumPy; this fixture never installs tooling.");
|
|
24
|
+
const fixture = JSON.parse(readFileSync(new URL("./fixtures/scalar-decision.json", import.meta.url), "utf8"));
|
|
25
|
+
const grader = fileURLToPath(new URL("./scalar-decision-grader.py", import.meta.url));
|
|
26
|
+
const { restore } = await isolateClioEnv();
|
|
27
|
+
const root = mkdtempSync(join(tmpdir(), "clio-scalar-decision-"));
|
|
28
|
+
|
|
29
|
+
function grade(source: string, value: string) {
|
|
30
|
+
const policy = value === fixture.pythonPolicy ? "python-int" : value === fixture.numpyPolicy ? "numpy-integer" : null;
|
|
31
|
+
ok(policy, "Only an explicitly recorded fixture policy can select the grader");
|
|
32
|
+
const result = spawnSync(python as string, [grader, policy], { input: source, encoding: "utf8", timeout: 10_000 });
|
|
33
|
+
if (result.error) throw result.error;
|
|
34
|
+
strictEqual(result.signal, null);
|
|
35
|
+
const measurements = JSON.parse(result.stdout);
|
|
36
|
+
strictEqual(measurements.indexable, true);
|
|
37
|
+
strictEqual(measurements.roundTrip, true);
|
|
38
|
+
return { status: result.status, stderr: result.stderr, ...measurements };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
for (const scenario of ["old-numpy", "python-int", "explicit-revision"] as const) {
|
|
43
|
+
const cwd = join(root, scenario);
|
|
44
|
+
mkdirSync(cwd);
|
|
45
|
+
const env = {
|
|
46
|
+
...process.env,
|
|
47
|
+
GIT_CONFIG_NOSYSTEM: "1",
|
|
48
|
+
GIT_CONFIG_GLOBAL: join(root, "absent-config"),
|
|
49
|
+
GIT_AUTHOR_NAME: "Scalar Fixture",
|
|
50
|
+
GIT_AUTHOR_EMAIL: "fixture@example.invalid",
|
|
51
|
+
GIT_COMMITTER_NAME: "Scalar Fixture",
|
|
52
|
+
GIT_COMMITTER_EMAIL: "fixture@example.invalid",
|
|
53
|
+
};
|
|
54
|
+
const git = (args: string[], spawnEnv = env) =>
|
|
55
|
+
execFileSync("git", args, { cwd, env: spawnEnv, encoding: "utf8", timeout: 10_000 }).trim();
|
|
56
|
+
git(["init", "--quiet"]);
|
|
57
|
+
const entries: DecisionLedgerEntry[] = [];
|
|
58
|
+
const operations: string[] = [];
|
|
59
|
+
const board = createDecisionBoardStore({
|
|
60
|
+
getSessionId: () => scenario,
|
|
61
|
+
readEntries: () => entries,
|
|
62
|
+
getActiveLeafTurnId: () => "fixture-turn",
|
|
63
|
+
appendEntry: (entry) => {
|
|
64
|
+
operations.push("decision");
|
|
65
|
+
entries.push({ ...entry, turnId: `entry-${entries.length}`, timestamp: new Date().toISOString() });
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
const tool = createDecideTool({ decisionBoard: board });
|
|
69
|
+
strictEqual(
|
|
70
|
+
(
|
|
71
|
+
await tool.run({
|
|
72
|
+
key: fixture.key,
|
|
73
|
+
value: fixture.pythonPolicy,
|
|
74
|
+
alternatives: [fixture.numpyPolicy],
|
|
75
|
+
rationale: "Pinned council selected ordinary Python ints.",
|
|
76
|
+
})
|
|
77
|
+
).kind,
|
|
78
|
+
"ok",
|
|
79
|
+
);
|
|
80
|
+
const initialRefs = activeDecisionRefs(board.snapshot());
|
|
81
|
+
if (scenario === "explicit-revision") {
|
|
82
|
+
const revision = await tool.run({
|
|
83
|
+
key: fixture.key,
|
|
84
|
+
value: fixture.numpyPolicy,
|
|
85
|
+
alternatives: [fixture.pythonPolicy],
|
|
86
|
+
rationale: "Scripted alternative task explicitly chooses NumPy scalar preservation before commit.",
|
|
87
|
+
});
|
|
88
|
+
strictEqual(revision.kind, "ok");
|
|
89
|
+
if (revision.kind !== "ok") throw new Error("revision failed");
|
|
90
|
+
strictEqual((revision.details?.decision as { superseded: string }).superseded, initialRefs[0]);
|
|
91
|
+
const superseded = board
|
|
92
|
+
.snapshot()
|
|
93
|
+
.flatMap((entry) => entry.decisions)
|
|
94
|
+
.find((decision) => decision.status === "superseded");
|
|
95
|
+
strictEqual(superseded?.revisionSource, "agent");
|
|
96
|
+
ok(superseded?.correction);
|
|
97
|
+
strictEqual(entries.length, 3);
|
|
98
|
+
}
|
|
99
|
+
const active = board
|
|
100
|
+
.snapshot()
|
|
101
|
+
.flatMap((entry) => entry.decisions)
|
|
102
|
+
.filter((decision) => decision.status === "active");
|
|
103
|
+
strictEqual(active.length, 1);
|
|
104
|
+
const policy = active[0]?.value;
|
|
105
|
+
ok(policy);
|
|
106
|
+
const source =
|
|
107
|
+
scenario === "python-int"
|
|
108
|
+
? fixture.source.replace("return tuple(idx)", "return tuple(int(value) for value in idx)")
|
|
109
|
+
: fixture.source;
|
|
110
|
+
writeFileSync(join(cwd, "index-policy.py"), source);
|
|
111
|
+
const before = grade(source, policy);
|
|
112
|
+
// The negative control deliberately commits the old failure to prove
|
|
113
|
+
// that valid attribution cannot make its implementation grade pass.
|
|
114
|
+
strictEqual(before.status, scenario === "old-numpy" ? 1 : 0, before.stderr);
|
|
115
|
+
if (scenario === "old-numpy") match(before.stderr, /active Python-int policy requires type\(value\) is int/u);
|
|
116
|
+
git(["add", "index-policy.py"]);
|
|
117
|
+
setCommitDecisionRefsProvider(() => activeDecisionRefs(board.snapshot()));
|
|
118
|
+
const managed = withManagedGitCommitAttributionEnvironment(env, { cwd, enabled: true });
|
|
119
|
+
strictEqual(managed.diagnostic, null);
|
|
120
|
+
operations.push("commit");
|
|
121
|
+
git(["-c", "commit.gpgSign=false", "commit", "--quiet", "-m", `fixture: ${scenario}`], managed.env as typeof env);
|
|
122
|
+
deepStrictEqual(
|
|
123
|
+
operations,
|
|
124
|
+
scenario === "explicit-revision" ? ["decision", "decision", "decision", "commit"] : ["decision", "commit"],
|
|
125
|
+
);
|
|
126
|
+
const commit = git(["rev-parse", "HEAD"]);
|
|
127
|
+
const message = git(["show", "-s", "--format=%B", commit]);
|
|
128
|
+
const trailers = message
|
|
129
|
+
.split("\n")
|
|
130
|
+
.filter((line) => line.startsWith("Clio-Decision: "))
|
|
131
|
+
.map((line) => line.slice("Clio-Decision: ".length));
|
|
132
|
+
deepStrictEqual(trailers, activeDecisionRefs(board.snapshot()));
|
|
133
|
+
if (scenario === "explicit-revision") ok(!trailers.includes(initialRefs[0] as string));
|
|
134
|
+
const after = grade(git(["show", `${commit}:index-policy.py`]), policy);
|
|
135
|
+
strictEqual(after.status, before.status);
|
|
136
|
+
strictEqual(after.pythonInts, scenario === "python-int");
|
|
137
|
+
process.stdout.write(
|
|
138
|
+
`${JSON.stringify({ evidence: "scripted-machinery", scenario, commit, policy, trailerValid: true, adherence: after.status === 0, ...after })}\n`,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
} finally {
|
|
142
|
+
setCommitDecisionRefsProvider(null);
|
|
143
|
+
rmSync(root, { recursive: true, force: true });
|
|
144
|
+
restore();
|
|
145
|
+
}
|
|
@@ -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.5",
|
|
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
|
}
|