@iowarp/clio-coder 0.4.3 → 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 +153 -0
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-H2NGRPWO.js → acp-H3CU2HBQ.js} +25 -25
- package/dist/{agents-TL5LLUQP.js → agents-IXQQZ7BD.js} +77 -75
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-E5SW4HMS.js → auth-R7KYF7N3.js} +38 -39
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-7DRAWPTZ.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-5TSRNF4G.js → chunk-3T4DXWP6.js} +170 -12
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-XIVNBFZS.js → chunk-4SVIVOMC.js} +208 -39
- package/dist/{chunk-NMJXSHBJ.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-5DDOTTG4.js +402 -0
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-PUVDKJ2Y.js → chunk-5VTJP36Q.js} +5 -7
- package/dist/{chunk-JGRC33J2.js → chunk-5ZMXGW7P.js} +90 -9
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/chunk-633EXGZA.js +44 -0
- package/dist/{chunk-IWT4SF4R.js → chunk-6CDNRHWH.js} +361 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-INY6HTFL.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-SKHCAU7K.js → chunk-6YA46L5A.js} +5 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-L47TF46W.js → chunk-7HBHHVCK.js} +24 -3
- package/dist/{chunk-DWUOQKRU.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-6PTFB5VS.js → chunk-7YJWEF2L.js} +59 -28
- 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-B6UM3OZC.js +15 -0
- package/dist/{chunk-MCEPRMZW.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-42FMPA75.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-WCXUNS7U.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-2UG5F4C5.js → chunk-DRD2A54W.js} +116 -52
- 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-IJNZMHLA.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-K6BSR66V.js → chunk-EHOSNVVM.js} +6 -2
- package/dist/{chunk-RRNP2ANY.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-JKKCYP3C.js → chunk-F34AR6O3.js} +21 -15
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-MWUZBSAQ.js → chunk-FSTIBAGM.js} +358 -63
- 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-JSC3U7TI.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-B4VEBZKF.js → chunk-GNQRWTMY.js} +139 -52
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/chunk-GXCCHKN6.js +59 -0
- package/dist/{chunk-V2ANDPVT.js → chunk-HGSLRG33.js} +170 -8
- package/dist/{chunk-LLDJM5XK.js → chunk-HHVJNVUJ.js} +6 -6
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-VA5FNYMT.js → chunk-HR3HPQ76.js} +42 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-OML5D5V5.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-VW6DOEDG.js → chunk-ICO4TQ2F.js} +16 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-WBKFA554.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-EKCHAPYA.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-N2Z7HLVY.js → chunk-K6RDB7IA.js} +28 -28
- package/dist/{chunk-TM6LQDI3.js → chunk-KDWLXVMN.js} +85 -335
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-RSJ25QSL.js → chunk-KF6GFW6O.js} +217 -50
- 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-IUE3Y34X.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-7E7I3WLS.js → chunk-KYKNBD4Y.js} +36 -34
- package/dist/chunk-L4N3DWNW.js +539 -0
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-JIEGK6UF.js → chunk-LTR5QCLS.js} +51 -7
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/chunk-LVFANMOH.js +466 -0
- 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-I7ZPNEJM.js → chunk-M6TAYK66.js} +8 -8
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/chunk-MDU3C27C.js +674 -0
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-4UVU7BJ5.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-JEQ3XTHC.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-UPZU6GE4.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/chunk-O2RQ7LCK.js +283 -0
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-WRBAGUNF.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-E3TPLWFX.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-B4OAX3SI.js → chunk-OQM5IVJY.js} +118 -225
- 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-64I3JVYM.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-R6MAYTMS.js +108 -0
- package/dist/{chunk-MUW2BDDH.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-JDAY6FIL.js → chunk-RLTT5GVY.js} +132 -17
- package/dist/{chunk-ZWPRK62N.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-NIQJ66N4.js → chunk-S32UQ5GL.js} +62 -35
- package/dist/{chunk-AX2THNSA.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/{chunk-TXOTCRLG.js → chunk-SD7SHNDW.js} +2 -2
- package/dist/{chunk-AF4YM7Z4.js → chunk-SDWNDICN.js} +10284 -3756
- 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-KKOJXO6R.js → chunk-SRZOW5L2.js} +46 -14
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/chunk-T52TPHYC.js +318 -0
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-LDJG7DW3.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-XPWWI35G.js → chunk-TEG3RYVZ.js} +59 -41
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-PAJQJ7BS.js → chunk-TZ7MFRG4.js} +1263 -835
- package/dist/{chunk-GI7YYQ3F.js → chunk-U2JOLB7O.js} +415 -83
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-CE5AX47J.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-G76U63X4.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-7ZYNNDKC.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-QWGDJJYJ.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-HEQY7ZFI.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-W6RRQCPQ.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-F5JHEYZM.js → chunk-UXAC2FX4.js} +73 -41
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/chunk-VLPTKCKT.js +396 -0
- 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-2UH2KFUP.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-ZDN3Y73Y.js → chunk-WJIMKGD6.js} +9 -51
- package/dist/{chunk-YQWYVTMC.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-2APPQIER.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-2VIKGWFZ.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-54CBCGIR.js → chunk-ZMZQEBKI.js} +136 -81
- 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 +45 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-MDZNQS33.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-UCUQ4QXW.js → components-TNIKXCBH.js} +13 -14
- package/dist/{config-SVM5P5YI.js → config-Y2JDJ3JJ.js} +210 -119
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-2OHRKS42.js → context-P5YSEO55.js} +125 -115
- package/dist/{context-VNCR7KAG.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-E3VC7RX5.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-VDS25HXZ.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-5AHT53RF.js → dispatch-runner-FRHD6P2O.js} +214 -126
- package/dist/{docs-PD3EXDKU.js → docs-BL7ROUFN.js} +5 -7
- package/dist/{doctor-WNNVO6FY.js → doctor-N3LCM2LG.js} +89 -66
- package/dist/{eval-7G7SGAYO.js → eval-BUU3ZOUZ.js} +493 -197
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-VD6736FQ.js → evidence-SQ5DNFEN.js} +114 -195
- package/dist/{evolve-AL3NGVRL.js → evolve-IJNUFZDS.js} +107 -88
- package/dist/{extensions-MOVJ32NM.js → extensions-YVRHX6ZI.js} +16 -17
- package/dist/{fleet-QZHUMAGI.js → fleet-ZNNVSYFO.js} +147 -141
- package/dist/{fleet-commands-BAYT5FJZ.js → fleet-commands-5YE7NPJL.js} +27 -23
- package/dist/{fleet-decisions-IREVMRU4.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-YCTT3HTI.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-QVJTDAVB.js → fleet-inspect-JEYMGCGC.js} +107 -87
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-25QAFPK4.js → fleet-preflight-QRSHIIDE.js} +10 -10
- package/dist/{fleet-validate-5O57AAJ7.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-CPH2W2T6.js → fleet-verify-NJDTHTO3.js} +105 -85
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-J477LKZH.js → init-S3GZQ5ZF.js} +123 -117
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-3FCM6XLG.js → interop-YOTGXFJM.js} +25 -26
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-QUQEIUG6.js → library-GJI6W6OK.js} +45 -45
- package/dist/{memory-SGGSEP65.js → memory-OQOXQGYD.js} +107 -90
- package/dist/{models-HEKUAXXK.js → models-3IK2Y5WE.js} +64 -65
- package/dist/{monitor-HKU57TYQ.js → monitor-FTJLTKCQ.js} +136 -101
- package/dist/{orchestrator-VDFAEFAI.js → orchestrator-N47O7SFD.js} +1442 -1671
- package/dist/{panes-DN2SSFOH.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-TALGNPZT.js → panes-WPOMEMRH.js} +22 -23
- package/dist/{paths-NBMFAIEZ.js → paths-J3KN7UAO.js} +12 -13
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-EAJFFJVB.js → reset-MUVQDLNL.js} +20 -21
- package/dist/{resources-OVKSEFVE.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-7DP7ZF2J.js → run-3VFZQ33N.js} +168 -166
- package/dist/{share-WML67FT3.js → share-4JUB4BL7.js} +43 -43
- package/dist/{skills-SG662R2K.js → skills-S36AAJHU.js} +47 -47
- package/dist/{skills-eval-VVZEUU46.js → skills-eval-G6T57L7M.js} +127 -104
- package/dist/{skills-inventory-I2E23GET.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-2LQOMCPB.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-CC2UJBJ6.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-4QC3HIEW.js → targets-N5REUETU.js} +147 -98
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-TUHIJ6Y2.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-5PEVOE5B.js → uninstall-FXYMFFRT.js} +19 -20
- package/dist/{upgrade-M4WXY6KN.js → upgrade-4HD5HAIV.js} +49 -45
- package/dist/{usage-N7ZNVLEM.js → usage-4GWM2WWP.js} +143 -103
- package/dist/{verifiers-DJTP4XX6.js → verifiers-GSKWKWVG.js} +162 -28
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-MPARV2K7.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-4GCGSL7J.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -85
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +10 -8
- package/docs/architecture/acp.md +27 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/artifact-versions.md +1 -1
- 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/dispatch-typed-intent.md +1 -1
- package/docs/architecture/evidence-and-memory.md +11 -1
- package/docs/architecture/observability.md +7 -1
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +22 -12
- package/docs/architecture/safety-model.md +10 -17
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/tui-design.md +1 -1
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/built-in-agents.md +8 -8
- package/docs/guide/commands-and-modes.md +66 -38
- package/docs/guide/configuration-and-targets.md +10 -3
- package/docs/guide/configuration-reference.md +23 -8
- package/docs/guide/environment-variables.md +8 -4
- 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 +87 -5
- package/docs/history/config-knobs-audit.md +2 -2
- package/docs/process/development-pipeline.md +15 -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/git-commit-provenance.md +15 -0
- package/docs/process/release-cut-checklist.md +207 -0
- package/docs/process/scientific-validation.md +18 -17
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-machinery-support.ts +1 -0
- package/evals/behavioral-machinery.yaml +1 -1
- 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/coding/coding-standards/SKILL.md +14 -4
- package/skills/context/context-handoff/SKILL.md +3 -3
- package/skills/context/context-prime/SKILL.md +3 -3
- package/skills/planning/architecture/SKILL.md +5 -5
- package/skills/planning/backlog/SKILL.md +4 -4
- package/skills/planning/prd/SKILL.md +4 -3
- package/skills/planning/product-intent/SKILL.md +8 -8
- package/skills/planning/tech-spec/SKILL.md +4 -4
- package/skills/registry.yaml +33 -33
- package/skills/research/arxiv-literature/SKILL.md +3 -3
- package/skills/research/experiment-protocol/SKILL.md +3 -3
- package/skills/research/scientific-debugging/SKILL.md +3 -2
- package/skills/research/scientific-modernization/SKILL.md +3 -3
- package/skills/skill-marketplace.json +17 -17
- package/skills/workflow/cut-it/SKILL.md +3 -4
- package/skills/workflow/design-council/SKILL.md +5 -10
- package/skills/workflow/grill-me/SKILL.md +14 -15
- package/skills/workflow/workflow-distiller/SKILL.md +4 -4
- package/src/cli/args.ts +0 -8
- 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.ts +2 -1
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/doctor-state-size.ts +1 -12
- package/src/cli/doctor-validation-contract.ts +28 -0
- package/src/cli/doctor.ts +5 -0
- package/src/cli/eval.ts +17 -3
- package/src/cli/evidence-detail.ts +1 -75
- package/src/cli/evidence-inventory.ts +1 -167
- package/src/cli/index.ts +2 -0
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -16
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +84 -32
- package/src/cli/tasks.ts +93 -0
- package/src/cli/upgrade.ts +19 -11
- package/src/cli/usage.ts +30 -0
- package/src/cli/verifiers.ts +147 -1
- package/src/cli/wiki-generate.ts +240 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/commit-attribution.ts +41 -1
- 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/git-commit-attribution.ts +46 -3
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/run-overrides.ts +0 -5
- package/src/core/settings-layers.ts +21 -5
- package/src/core/skill-activation.ts +3 -0
- package/src/core/termination.ts +26 -9
- package/src/core/tool-names.ts +5 -2
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/builtins/coder.md +5 -3
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +8 -5
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/provenance.md +7 -7
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +4 -3
- 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 +97 -11
- 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 +12 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/frontmatter.ts +5 -2
- package/src/domains/context/wiki/generate.ts +207 -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 +85 -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 +10 -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/code-step.ts +11 -4
- package/src/domains/dispatch/contract.ts +41 -9
- 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 +4 -0
- package/src/domains/dispatch/extension.ts +240 -132
- package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
- package/src/domains/dispatch/fleet-run.ts +21 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/host-verification.ts +114 -13
- package/src/domains/dispatch/intent.ts +28 -18
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/reservation-store.ts +13 -37
- 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/state.ts +15 -2
- package/src/domains/dispatch/types.ts +21 -5
- 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 +17 -10
- package/src/domains/eval/runners/context-index.ts +2 -7
- package/src/domains/eval/runners/context-init.ts +3 -6
- package/src/domains/eval/runners/external-command.ts +29 -11
- 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 +106 -17
- package/src/domains/evidence/detail.ts +69 -0
- package/src/domains/evidence/eval.ts +13 -1
- package/src/domains/evidence/finish-contract-map.ts +5 -1
- package/src/domains/evidence/inventory.ts +167 -0
- package/src/domains/evidence/store.ts +16 -0
- package/src/domains/evidence/types.ts +12 -0
- package/src/domains/extensions/resources.ts +7 -0
- 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/marketplace-offer.ts +20 -1
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/runtime.ts +7 -3
- 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/detect.ts +3 -6
- 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/accountability.ts +15 -1
- package/src/domains/observability/contract.ts +54 -9
- package/src/domains/observability/evidence-index.ts +10 -0
- package/src/domains/observability/extension.ts +9 -5
- package/src/domains/observability/projection.ts +423 -53
- package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
- 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 +12 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +36 -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/model-discovery.ts +1 -4
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +16 -14
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/providers/support.ts +1 -1
- package/src/domains/providers/types/runtime-descriptor.ts +1 -1
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +16 -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 +13 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/finish-contract-registration.ts +29 -14
- package/src/domains/safety/finish-contract.ts +252 -40
- package/src/domains/safety/index.ts +20 -1
- package/src/domains/safety/policy-engine.ts +211 -34
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/rigor.ts +53 -39
- package/src/domains/safety/validation-contract.ts +388 -0
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/archive-readers.ts +10 -1
- 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 +137 -28
- package/src/domains/session/entries.ts +213 -11
- package/src/domains/session/extension.ts +4 -4
- package/src/domains/session/handoff.ts +2 -1
- package/src/domains/session/manager.ts +2 -3
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +32 -1
- package/src/domains/session/tree/fork.ts +1 -2
- package/src/domains/session/tree/navigator.ts +1 -1
- package/src/domains/user-tasks/acceptance.ts +56 -0
- package/src/domains/user-tasks/active-acceptance.ts +40 -0
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/domains/user-tasks/store.ts +34 -3
- package/src/engine/acp/adapter.ts +60 -10
- package/src/engine/acp/server.ts +22 -4
- package/src/engine/acp/transport.ts +55 -9
- package/src/engine/acp/types.ts +9 -0
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/ollama-native.ts +15 -0
- 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/claude/subprocess-runtime.ts +107 -60
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +26 -7
- 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 +64 -17
- 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 +58 -714
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/fleet-run-preview.ts +2 -1
- package/src/interactive/interactive-application.ts +11 -4
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +63 -12
- package/src/interactive/interactive-slash-runtime.ts +4 -1
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/oracle.ts +5 -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/fleet-run-approval.ts +3 -2
- package/src/interactive/overlays/message-picker.ts +3 -3
- package/src/interactive/overlays/settings.ts +2 -2
- package/src/interactive/overlays/tree-selector.ts +2 -2
- package/src/interactive/renderers/branch-summary.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-autocomplete.ts +4 -6
- package/src/interactive/slash-commands.ts +31 -43
- package/src/interactive/slash-spec.ts +28 -0
- 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 +2 -0
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +14 -10
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +40 -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 +41 -1
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/core-bootstrap.ts +16 -0
- package/src/tools/decide.ts +136 -0
- package/src/tools/dispatch-admission.ts +33 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +12 -9
- package/src/tools/dispatch-runner.ts +63 -33
- 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/dispatch-types.ts +6 -0
- package/src/tools/evidence.ts +96 -0
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/limitation.ts +76 -0
- 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/policy.ts +9 -0
- package/src/tools/presentation.ts +3 -0
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +55 -18
- package/src/tools/result-shaping.ts +127 -7
- package/src/tools/task-worktree.ts +13 -3
- package/src/tools/tasks.ts +40 -5
- package/src/tools/verify/authoring.ts +170 -83
- package/src/tools/verify/catalog.ts +122 -5
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/index.ts +2 -1
- package/src/tools/verify/numeric.ts +303 -0
- package/src/tools/verify/perf.ts +143 -0
- package/src/tools/verify/scripts.ts +229 -2
- 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-IA7V7FUC.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-7DICMOS6.js +0 -313
- package/dist/chunk-BEPZRGGU.js +0 -1560
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-KK4JZPBQ.js +0 -3982
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-NDINPTJ4.js +0 -641
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-RVG5JXAL.js +0 -41
- package/dist/chunk-T56WDKA5.js +0 -183
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-VPKWYKEY.js +0 -169
- package/dist/chunk-Y3CBHOR6.js +0 -228
- package/dist/clio-CMMK4KRR.js +0 -25
- package/dist/configure-LE3IK2TJ.js +0 -56
- package/dist/context-clear-BW4O37TG.js +0 -176
- package/dist/fleet-view-SWBR3VGQ.js +0 -97
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-S7MBJDQK.js +0 -83
- package/dist/tools-TFGJICCU.js +0 -29
- package/dist/verify-RWE4PPEK.js +0 -27
- package/dist/wiki-generate-C7IQOXSP.js +0 -469
|
@@ -2,6 +2,7 @@ import { readdir, readFile } from "node:fs/promises";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { assertSafeId } from "../../core/safe-id.js";
|
|
4
4
|
import { type GateDecisionArtifact, verifyGateDecisionArtifact } from "../dispatch/index.js";
|
|
5
|
+
import { isDecisionRecord } from "../session/entries.js";
|
|
5
6
|
import { compareCodepoints as compareStrings } from "./ordering.js";
|
|
6
7
|
import { hasRunProvenance, type RunProvenanceView, runProvenanceFromUnknown } from "./provenance.js";
|
|
7
8
|
import { normalizeTrustStatus } from "./trust-status.js";
|
|
@@ -230,6 +231,7 @@ function parseOverview(value: unknown, source: string): EvidenceOverview {
|
|
|
230
231
|
tags,
|
|
231
232
|
files,
|
|
232
233
|
...(redactionCount === undefined ? {} : { redactionCount }),
|
|
234
|
+
...(value.decisions === undefined ? {} : { decisions: readDecisions(value.decisions, `${source}.decisions`) }),
|
|
233
235
|
};
|
|
234
236
|
}
|
|
235
237
|
|
|
@@ -335,3 +337,17 @@ function isRecord(value: unknown): value is Record<string, unknown> {
|
|
|
335
337
|
export function findingsFile(evidenceId: string, findings: EvidenceFinding[]): EvidenceFindingsFile {
|
|
336
338
|
return { version: 1, evidenceId, findings };
|
|
337
339
|
}
|
|
340
|
+
|
|
341
|
+
function readDecisions(value: unknown, source: string): NonNullable<EvidenceOverview["decisions"]> {
|
|
342
|
+
if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
|
|
343
|
+
return value.map((entry: unknown, index) => {
|
|
344
|
+
const path = `${source}[${index}]`;
|
|
345
|
+
if (!isRecord(entry) || !isDecisionRecord(entry.record)) throw new Error(`${path}: expected recorded decision`);
|
|
346
|
+
return {
|
|
347
|
+
runId: readString(entry, path, "runId"),
|
|
348
|
+
sessionId: readString(entry, path, "sessionId"),
|
|
349
|
+
ref: readString(entry, path, "ref"),
|
|
350
|
+
record: entry.record,
|
|
351
|
+
};
|
|
352
|
+
});
|
|
353
|
+
}
|
|
@@ -2,6 +2,7 @@ import type { GateDecisionArtifact, RunEnvelope, RunReceipt, ToolCallStat } from
|
|
|
2
2
|
import type { RunPersonaOverride, RunPipelineProvenance, RunReceiptAutonomyEnforcement } from "../dispatch/types.js";
|
|
3
3
|
import type { EvalCommandPhase, EvalFailureClass, EvalRunRecord } from "../eval/index.js";
|
|
4
4
|
import type { ProtectedArtifact } from "../safety/protected-artifacts.js";
|
|
5
|
+
import type { DecisionRecord } from "../session/entries.js";
|
|
5
6
|
import type { RunEscalationCounts } from "./provenance.js";
|
|
6
7
|
import type { CanonicalTrustStatus } from "./trust-status.js";
|
|
7
8
|
|
|
@@ -81,7 +82,16 @@ export interface EvidenceTotals {
|
|
|
81
82
|
wallTimeMs: number;
|
|
82
83
|
}
|
|
83
84
|
|
|
85
|
+
export interface EvidenceDecision {
|
|
86
|
+
runId: string;
|
|
87
|
+
sessionId: string;
|
|
88
|
+
ref: string;
|
|
89
|
+
record: DecisionRecord;
|
|
90
|
+
}
|
|
91
|
+
|
|
84
92
|
export interface EvidenceOverview {
|
|
93
|
+
/** Recorded arguments resolved from authenticated receipts on the linked active session path. */
|
|
94
|
+
decisions?: EvidenceDecision[];
|
|
85
95
|
version: 1;
|
|
86
96
|
evidenceId: string;
|
|
87
97
|
source: EvidenceSource;
|
|
@@ -137,6 +147,8 @@ export interface EvidenceBuildResult {
|
|
|
137
147
|
overview: EvidenceOverview;
|
|
138
148
|
findings: EvidenceFinding[];
|
|
139
149
|
trustStatus: EvidenceTrustStatusFile;
|
|
150
|
+
/** Total claims without matching commands, from integrity-verified receipts only. */
|
|
151
|
+
ungroundedClaims: number;
|
|
140
152
|
}
|
|
141
153
|
|
|
142
154
|
export interface EvidenceInspectable {
|
|
@@ -22,6 +22,13 @@ export function extensionSnapshotFor(cwd = process.cwd()): ExtensionSnapshot {
|
|
|
22
22
|
return buildExtensionSnapshot({ cwd, generation: 0 });
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* The canonical accessor for the enabled roots of one extension resource
|
|
27
|
+
* kind. The agent registry, fleet contract, skill and common resource
|
|
28
|
+
* loaders, and the extensions contract all read through it, so each of them
|
|
29
|
+
* sees the committed snapshot for the booted cwd or the ephemeral
|
|
30
|
+
* generation-0 build otherwise. Returns a fresh array the caller may mutate.
|
|
31
|
+
*/
|
|
25
32
|
export function enabledExtensionResourceRoots(
|
|
26
33
|
kind: ExtensionResourceKind,
|
|
27
34
|
cwd = process.cwd(),
|
|
@@ -19,7 +19,7 @@ export const INTEROP_AGENT_KINDS: ReadonlyArray<InteropAgentKind> = [
|
|
|
19
19
|
instructionFiles: ["CLAUDE.md", ".claude/CLAUDE.md"],
|
|
20
20
|
acp: {
|
|
21
21
|
command: "npx",
|
|
22
|
-
args: ["-y", "@zed-industries/claude-code-acp"],
|
|
22
|
+
args: ["-y", "@zed-industries/claude-code-acp@0.16.2"],
|
|
23
23
|
npmPackage: "@zed-industries/claude-code-acp",
|
|
24
24
|
npmPackageBin: "claude-code-acp",
|
|
25
25
|
},
|
|
@@ -39,7 +39,7 @@ export const INTEROP_AGENT_KINDS: ReadonlyArray<InteropAgentKind> = [
|
|
|
39
39
|
instructionFiles: ["AGENTS.md", "CODEX.md", ".codex/AGENTS.md"],
|
|
40
40
|
acp: {
|
|
41
41
|
command: "npx",
|
|
42
|
-
args: ["-y", "@agentclientprotocol/codex-acp"],
|
|
42
|
+
args: ["-y", "@agentclientprotocol/codex-acp@1.10.0"],
|
|
43
43
|
npmPackage: "@agentclientprotocol/codex-acp",
|
|
44
44
|
npmPackageBin: "codex-acp",
|
|
45
45
|
},
|
|
@@ -19,13 +19,18 @@
|
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
import { spawnSync } from "node:child_process";
|
|
22
|
-
import { readFileSync } from "node:fs";
|
|
23
|
-
import { join } from "node:path";
|
|
24
22
|
import { parse as parseYaml } from "yaml";
|
|
25
23
|
import {
|
|
24
|
+
gitCommitAttributionEnabled,
|
|
26
25
|
reportCommitAttributionDiagnostic,
|
|
27
26
|
withManagedGitCommitAttributionEnvironment,
|
|
28
27
|
} from "../../core/git-commit-attribution.js";
|
|
28
|
+
import { buildSafeToolEnv } from "../../core/safe-exec.js";
|
|
29
|
+
import {
|
|
30
|
+
captureProjectSurface,
|
|
31
|
+
type ProjectSurfaceSnapshot,
|
|
32
|
+
projectSurfaceTrustNotice,
|
|
33
|
+
} from "../../core/workspace-trust.js";
|
|
29
34
|
import {
|
|
30
35
|
type HookReceiptSink,
|
|
31
36
|
loadUserHooks,
|
|
@@ -49,6 +54,7 @@ export interface HookFileIssue {
|
|
|
49
54
|
export interface ReadHookSourcesResult {
|
|
50
55
|
batches: UserHookDeclarationBatch[];
|
|
51
56
|
fileIssues: HookFileIssue[];
|
|
57
|
+
projectSurface: ProjectSurfaceSnapshot;
|
|
52
58
|
}
|
|
53
59
|
|
|
54
60
|
/** One package's hook declarations, captured by the supplier from verified bytes. */
|
|
@@ -77,15 +83,9 @@ export interface ReadHookSourcesOptions {
|
|
|
77
83
|
function readBatch(
|
|
78
84
|
source: UserHookSource,
|
|
79
85
|
filePath: string,
|
|
86
|
+
text: string,
|
|
80
87
|
fileIssues: HookFileIssue[],
|
|
81
88
|
): UserHookDeclarationBatch | null {
|
|
82
|
-
let text: string;
|
|
83
|
-
try {
|
|
84
|
-
text = readFileSync(filePath, "utf8");
|
|
85
|
-
} catch {
|
|
86
|
-
// Missing file: not an error, the source is simply absent.
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
89
|
try {
|
|
90
90
|
const parsed = parseYaml(text) as unknown;
|
|
91
91
|
return { source, declarations: parsed ?? [] };
|
|
@@ -125,21 +125,22 @@ export function readHookSources(options: ReadHookSourcesOptions): ReadHookSource
|
|
|
125
125
|
batches.push({ source, declarations: entry.declarations });
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
128
|
+
const projectSurface = captureProjectSurface(options.cwd, "hooks");
|
|
129
|
+
for (const [index, file] of projectSurface.files.entries()) {
|
|
130
|
+
const source: UserHookSource = {
|
|
131
|
+
origin: index === 0 ? "project" : "project.local",
|
|
132
|
+
sourcePath: index === 0 ? ".clio-coder/hooks.yaml" : ".clio-coder/hooks.local.yaml",
|
|
133
|
+
};
|
|
134
|
+
if (file.error !== undefined) fileIssues.push({ source, message: file.error });
|
|
135
|
+
if (file.text === null) continue;
|
|
136
|
+
if (projectSurface.verdict !== "trusted") {
|
|
137
|
+
fileIssues.push({ source, message: projectSurfaceTrustNotice(projectSurface, file.path) });
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const batch = readBatch(source, file.path, file.text, fileIssues);
|
|
141
|
+
if (batch) batches.push(batch);
|
|
142
|
+
}
|
|
143
|
+
return { batches, fileIssues, projectSurface };
|
|
143
144
|
}
|
|
144
145
|
|
|
145
146
|
export interface BuildUserHookRegistrationsOptions {
|
|
@@ -151,6 +152,8 @@ export interface BuildUserHookRegistrationsOptions {
|
|
|
151
152
|
/** Injected for tests; defaults to the spawnSync runner. */
|
|
152
153
|
runCommand?: UserHookCommandRunner;
|
|
153
154
|
now?: () => number;
|
|
155
|
+
/** Operator notice when an already published project's trust changes. */
|
|
156
|
+
report?: (line: string) => void;
|
|
154
157
|
}
|
|
155
158
|
|
|
156
159
|
export interface BuildUserHookRegistrationsResult extends UserHookLoadResult {
|
|
@@ -173,13 +176,28 @@ export function buildUserHookRegistrations(
|
|
|
173
176
|
const workspaceRoot = options.workspaceRoot ?? options.cwd;
|
|
174
177
|
const readOptions: ReadHookSourcesOptions = { cwd: options.cwd };
|
|
175
178
|
if (options.capturedSources !== undefined) readOptions.capturedSources = options.capturedSources;
|
|
176
|
-
const { batches, fileIssues } = readHookSources(readOptions);
|
|
179
|
+
const { batches, fileIssues, projectSurface } = readHookSources(readOptions);
|
|
177
180
|
const loaded = loadUserHooks(batches, { workspaceRoot });
|
|
178
181
|
const runCommand = options.runCommand ?? spawnSyncCommandRunner();
|
|
182
|
+
let reportedUntrusted = false;
|
|
183
|
+
const projectStillTrusted = (): boolean => {
|
|
184
|
+
const current = captureProjectSurface(options.cwd, "hooks");
|
|
185
|
+
if (current.verdict === "trusted" && current.contentHash === projectSurface.contentHash) return true;
|
|
186
|
+
if (!reportedUntrusted) {
|
|
187
|
+
reportedUntrusted = true;
|
|
188
|
+
options.report?.(
|
|
189
|
+
`[clio-coder:hooks] project hooks changed or trust was revoked; hooks skipped. Review with clio-coder config trust hooks, then reload extensions.`,
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
return false;
|
|
193
|
+
};
|
|
179
194
|
const registrations = loaded.hooks.map((hook) =>
|
|
180
195
|
userHookToRegistration(hook, {
|
|
181
196
|
recordReceipt: options.recordReceipt,
|
|
182
197
|
runCommand,
|
|
198
|
+
...(hook.source.origin === "project" || hook.source.origin === "project.local"
|
|
199
|
+
? { isTrusted: projectStillTrusted }
|
|
200
|
+
: {}),
|
|
183
201
|
...(options.now !== undefined ? { now: options.now } : {}),
|
|
184
202
|
}),
|
|
185
203
|
);
|
|
@@ -195,8 +213,9 @@ export function spawnSyncCommandRunner(): UserHookCommandRunner {
|
|
|
195
213
|
const [command, ...args] = argv;
|
|
196
214
|
// A user hook is operator automation, not Clio work: the environment is
|
|
197
215
|
// normalized so a nested seam sees consistent state, but no role is claimed.
|
|
198
|
-
const attribution = withManagedGitCommitAttributionEnvironment(
|
|
216
|
+
const attribution = withManagedGitCommitAttributionEnvironment(buildSafeToolEnv(), {
|
|
199
217
|
cwd: options.cwd ?? process.cwd(),
|
|
218
|
+
enabled: gitCommitAttributionEnabled(process.env),
|
|
200
219
|
evidence: {},
|
|
201
220
|
});
|
|
202
221
|
reportCommitAttributionDiagnostic(attribution.diagnostic);
|
|
@@ -397,6 +397,8 @@ export interface UserHookRegistrationDeps {
|
|
|
397
397
|
/** Synchronous command runner. Injected so tests need no real subprocess. */
|
|
398
398
|
runCommand: UserHookCommandRunner;
|
|
399
399
|
now?: () => number;
|
|
400
|
+
/** Published project hooks stop executing after their approved surface changes or is revoked. */
|
|
401
|
+
isTrusted?: () => boolean;
|
|
400
402
|
}
|
|
401
403
|
|
|
402
404
|
function reminderEffect(message: string, severity: MiddlewareReminderSeverity): MiddlewareEffect {
|
|
@@ -441,6 +443,10 @@ export function userHookToRegistration(
|
|
|
441
443
|
evaluate: (input) => {
|
|
442
444
|
if (!hook.enabled) return [];
|
|
443
445
|
try {
|
|
446
|
+
if (deps.isTrusted?.() === false) {
|
|
447
|
+
deps.recordReceipt({ ...baseReceipt(input), outcome: "skipped" });
|
|
448
|
+
return [];
|
|
449
|
+
}
|
|
444
450
|
return evaluateHook(hook, deps, baseReceipt(input));
|
|
445
451
|
} catch {
|
|
446
452
|
// A hook must never throw into a turn; report a skipped receipt.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { INSTRUCTION_SHAPED_WARNING } from "../../core/untrusted-content.js";
|
|
2
|
+
import type { MiddlewareRuleDefinition } from "./runtime.js";
|
|
3
|
+
|
|
4
|
+
/** Raw-body marker detection is supplied by the registry before result shaping. */
|
|
5
|
+
export const INJECTION_SCREEN_RULE: MiddlewareRuleDefinition = {
|
|
6
|
+
rule: {
|
|
7
|
+
id: "safety.untrusted-instructions",
|
|
8
|
+
source: "builtin",
|
|
9
|
+
description: "Warn when external tool data contains instruction-shaped markers",
|
|
10
|
+
enabled: true,
|
|
11
|
+
hooks: ["after_tool"],
|
|
12
|
+
effectKinds: ["annotate_tool_result"],
|
|
13
|
+
},
|
|
14
|
+
toolNames: ["web_fetch", "read", "bash", "dispatch", "monitor"],
|
|
15
|
+
predicate: (input) => input.metadata?.untrustedInstructionMarkers === true,
|
|
16
|
+
effects: [
|
|
17
|
+
{
|
|
18
|
+
kind: "annotate_tool_result",
|
|
19
|
+
severity: "warn",
|
|
20
|
+
message: INSTRUCTION_SHAPED_WARNING,
|
|
21
|
+
},
|
|
22
|
+
],
|
|
23
|
+
};
|
|
@@ -53,6 +53,8 @@ export interface MarketplaceOfferInstallResult {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export interface MarketplaceOfferDeps {
|
|
56
|
+
/** Whether the session can render ask_user. Defaults to interactive offers. */
|
|
57
|
+
interactive?: boolean;
|
|
56
58
|
/** Installed skill names the matcher must exclude. */
|
|
57
59
|
listInstalledSkillNames(): ReadonlyArray<string>;
|
|
58
60
|
/** The local marketplace lookup (catalog + index); already local-only. */
|
|
@@ -80,10 +82,18 @@ export function offerBindingTag(offerTag: string): string {
|
|
|
80
82
|
return `[clio-install:${offerTag}]`;
|
|
81
83
|
}
|
|
82
84
|
|
|
85
|
+
function boundedDescription(text: string): string {
|
|
86
|
+
return text
|
|
87
|
+
.replace(/\[[^[\]]*\]/gu, " ")
|
|
88
|
+
.replace(/\s+/gu, " ")
|
|
89
|
+
.trim()
|
|
90
|
+
.slice(0, 200);
|
|
91
|
+
}
|
|
92
|
+
|
|
83
93
|
export function marketplaceOfferReminder(entry: MarketplaceSkill, offerTag: string): string {
|
|
84
94
|
return (
|
|
85
95
|
`[Marketplace] This request may need expertise no installed skill covers. The local marketplace has ` +
|
|
86
|
-
`"${entry.name}" (not installed): ${entry.description} ` +
|
|
96
|
+
`"${entry.name}" (not installed): ${boundedDescription(entry.description)} ` +
|
|
87
97
|
`First check the installed side with context(scope="skills"); if ${entry.name} is genuinely the right fit ` +
|
|
88
98
|
`and nothing installed serves, ask the operator with ask_user (mode=single_question, header "Install skill") ` +
|
|
89
99
|
`whether to install ${entry.name}, offering exactly these options in this order: ` +
|
|
@@ -299,6 +309,15 @@ export function createMarketplaceOfferRegistration(deps: MarketplaceOfferDeps):
|
|
|
299
309
|
const match = bestMatch(input.text ?? "");
|
|
300
310
|
if (!match) return NO_EFFECTS;
|
|
301
311
|
offeredNames.add(match.entry.name);
|
|
312
|
+
if (deps.interactive === false) {
|
|
313
|
+
return [
|
|
314
|
+
{
|
|
315
|
+
kind: "inject_reminder",
|
|
316
|
+
severity: "info",
|
|
317
|
+
message: `[Marketplace] Skill "${match.entry.name}" matches this request; install with clio-coder skills install ${match.entry.name}.`,
|
|
318
|
+
},
|
|
319
|
+
];
|
|
320
|
+
}
|
|
302
321
|
const tag = newOfferTag();
|
|
303
322
|
pendingOffer = { entry: match.entry, tag };
|
|
304
323
|
return [{ kind: "inject_reminder", severity: "info", message: marketplaceOfferReminder(match.entry, tag) }];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { INJECTION_SCREEN_RULE } from "./injection-screen.js";
|
|
1
2
|
import type { MiddlewareRuleDefinition } from "./runtime.js";
|
|
2
3
|
import { STALLED_TURN_RULE_DEFINITION } from "./stalled-turn.js";
|
|
3
4
|
import type { MiddlewareRule } from "./types.js";
|
|
@@ -8,7 +9,10 @@ import type { MiddlewareRule } from "./types.js";
|
|
|
8
9
|
* channel delivers the declarative half to workers, which resolve payloads
|
|
9
10
|
* from this table by rule id.
|
|
10
11
|
*/
|
|
11
|
-
const BUILTIN_MIDDLEWARE_RULE_DEFINITIONS: ReadonlyArray<MiddlewareRuleDefinition> = [
|
|
12
|
+
const BUILTIN_MIDDLEWARE_RULE_DEFINITIONS: ReadonlyArray<MiddlewareRuleDefinition> = [
|
|
13
|
+
STALLED_TURN_RULE_DEFINITION,
|
|
14
|
+
INJECTION_SCREEN_RULE,
|
|
15
|
+
];
|
|
12
16
|
|
|
13
17
|
export const BUILTIN_MIDDLEWARE_RULE_IDS = BUILTIN_MIDDLEWARE_RULE_DEFINITIONS.map((definition) => definition.rule.id);
|
|
14
18
|
|
|
@@ -110,9 +110,13 @@ export type MiddlewareDiagnostic =
|
|
|
110
110
|
export type MiddlewareDiagnosticSink = (diagnostic: MiddlewareDiagnostic) => void;
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
* Default diagnostic sink
|
|
114
|
-
*
|
|
115
|
-
*
|
|
113
|
+
* Default diagnostic sink, and the one the domain loader constructs the
|
|
114
|
+
* bundle with. It writes to stderr only. The composition root
|
|
115
|
+
* (src/entry/orchestrator.ts) replaces it through setDiagnosticSink with a
|
|
116
|
+
* sink that publishes every diagnostic on the typed bus as
|
|
117
|
+
* `middleware.hookFailed`, which the interactive warn notice consumes, and
|
|
118
|
+
* that still calls this writer for non-interactive runs, which have no
|
|
119
|
+
* notice subscriber.
|
|
116
120
|
*/
|
|
117
121
|
export function writeMiddlewareDiagnosticToStderr(diagnostic: MiddlewareDiagnostic): void {
|
|
118
122
|
if (diagnostic.kind === "hook_failed") {
|
|
@@ -9,7 +9,7 @@ export const STALLED_TURN_REQUEST_CONTINUATION_MESSAGE =
|
|
|
9
9
|
"You ended your turn after announcing an action without executing it: no tools were called. Continue now and perform the announced action, or state plainly that you are finished and waiting for the user.";
|
|
10
10
|
|
|
11
11
|
export const SKILL_SUGGESTION_WAIT_CONTINUATION_MESSAGE =
|
|
12
|
-
"You ended your turn on a skill suggestion without doing the task. The suggestion line has already made the offer and only the operator loads a skill, so
|
|
12
|
+
"You ended your turn on a skill suggestion without doing the task. The suggestion line has already made the offer and only the operator loads a skill, so the skill choice needs nothing from them before you proceed. Continue the already-authorized task now without the skill. This continuation is not an operator answer to any other question: if the remaining work is a proposal awaiting an explicit operator go-ahead, park it on the task board and say so instead of implementing.";
|
|
13
13
|
|
|
14
14
|
const INTENT_PATTERN = /\b(let me|i['’]ll|i will|i am going to|i['’]m going to|now i|next i|let's|let us)\b/i;
|
|
15
15
|
|
|
@@ -110,12 +110,25 @@ const ACTION_OBJECT_CONNECTOR_PATTERN = /^(?:at|for|in|into|on|through|to)\s+/i;
|
|
|
110
110
|
const ACTION_OBJECT_DETERMINER_PATTERN = /^(?:a|an|my|our|that|the|their|these|this|those|your)\s+/i;
|
|
111
111
|
const ACTION_OBJECT_PATTERN = /^(?!(?:again|everyone|later|next|now|soon|then|you)\b)[`"'./~]*[\p{L}\p{N}_-]/iu;
|
|
112
112
|
const CONDITIONAL_LEAD_IN_PATTERN = /\b(?:if|once|unless|until|when|whenever)\b/i;
|
|
113
|
-
|
|
113
|
+
// "say go and", "confirm and", "reply yes and": the sentence hands the operator
|
|
114
|
+
// the decision and promises work only after it.
|
|
115
|
+
const CONDITIONAL_INVITATION_PATTERN =
|
|
116
|
+
/\b(?:answer|approve|ask|confirm|give|point|reply|respond|say|send|share|tell|type)\b[\s\S]*\b(?:and|then)\s*$/i;
|
|
114
117
|
// "if needed", and any conditional whose condition is about the user: "if you
|
|
115
118
|
// want", "if that is what you need". Conditions about the work ("if the config
|
|
116
119
|
// is valid") stay announcements.
|
|
120
|
+
// Any condition that waits on the operator ("after you approve", "once you
|
|
121
|
+
// confirm", "until you say", "upon your go-ahead") is a proposal awaiting a
|
|
122
|
+
// decision, not an announcement: the operator's answer is the missing input,
|
|
123
|
+
// and an automatic continuation would stand in for it (issue #365).
|
|
117
124
|
const CONDITIONAL_OFFER_SUFFIX_PATTERN =
|
|
118
|
-
/\b(?:if\s+(?:needed|necessary|requested)\b|if\b[^.!?]*\byou\b|
|
|
125
|
+
/\b(?:if\s+(?:needed|necessary|requested|approved|confirmed)\b|(?:if|after|once|until|unless|when(?:ever)?|as\s+soon\s+as|provided|assuming)\b[^.!?]*\byou\b|(?:upon|on|after|with|pending|awaiting|following)\s+(?:your\s+|the\s+operator(?:'s)?\s+)?(?:approval|go-?ahead|confirmation|sign-?off|decision|word|green\s+light|okay|ok)\b)/i;
|
|
126
|
+
// A lead-in that is itself a wait ("Awaiting your go-ahead; I'll then write
|
|
127
|
+
// the test") defers whatever the intent clause goes on to name.
|
|
128
|
+
const OPERATOR_WAIT_LEAD_PATTERN = /\b(?:await(?:ing)?|pending|waiting\s+(?:for|on))\b/i;
|
|
129
|
+
// "I will not edit files" announces a refusal, and "next I would create
|
|
130
|
+
// clamp.py" describes a hypothetical; neither promises an action now.
|
|
131
|
+
const NEGATED_OR_HYPOTHETICAL_CLAUSE_PATTERN = /^\s*(?:not|never|would|could|might|may)\b/i;
|
|
119
132
|
const LET_ME_KNOW_PATTERN = /\blet me know\b/i;
|
|
120
133
|
// "I'll wait for your go-ahead before I touch src/cli/index.ts" names a path
|
|
121
134
|
// and promises nothing now. A clause that opens by deferring is a wait
|
|
@@ -199,12 +212,14 @@ function announcesConcreteAction(sentence: string): boolean {
|
|
|
199
212
|
if (
|
|
200
213
|
CONDITIONAL_LEAD_IN_PATTERN.test(leadIn) ||
|
|
201
214
|
CONDITIONAL_INVITATION_PATTERN.test(leadIn) ||
|
|
215
|
+
OPERATOR_WAIT_LEAD_PATTERN.test(leadIn) ||
|
|
202
216
|
CONDITIONAL_OFFER_SUFFIX_PATTERN.test(sentence)
|
|
203
217
|
) {
|
|
204
218
|
return false;
|
|
205
219
|
}
|
|
206
220
|
const clause = sentence.slice(intent.index + intent[0].length);
|
|
207
221
|
if (DEFERRAL_LEAD_PATTERN.test(clause)) return false;
|
|
222
|
+
if (NEGATED_OR_HYPOTHETICAL_CLAUSE_PATTERN.test(clause)) return false;
|
|
208
223
|
if (hasActionWithObject(clause)) return true;
|
|
209
224
|
// A path or command is evidence of an immediate action only when the
|
|
210
225
|
// announcement itself is unconditional; "once package.json is updated"
|
|
@@ -17,8 +17,10 @@ export const TASK_BOARD_REMINDER_REGISTRATION_ID = "observer.task-board-reminder
|
|
|
17
17
|
export function taskBoardReminderMessage(steps: number): string {
|
|
18
18
|
return (
|
|
19
19
|
`[Tasks] This request enumerates ${steps} steps. Before the first edit, declare the task board: ` +
|
|
20
|
-
'tasks action="plan" with a title and one task per step, then work them one at a time ' +
|
|
21
|
-
'("start", then "done" with an evidence note).'
|
|
20
|
+
'tasks action="plan" with a title and one task per authorized step, then work them one at a time ' +
|
|
21
|
+
'("start", then "done" with an evidence note). A plan does not authorize implementation: ' +
|
|
22
|
+
'for proposed work awaiting an operator go-ahead, use action="block" with a note naming the pending operator decision, ' +
|
|
23
|
+
'or action="drop", and wait.'
|
|
22
24
|
);
|
|
23
25
|
}
|
|
24
26
|
|
|
@@ -36,7 +36,10 @@ export function buildOpenTasksMessage(board: TaskBoardSnapshot): string {
|
|
|
36
36
|
return (
|
|
37
37
|
`[Clio Coder] task board "${board.title}" still has ${open.length} of ${counts.total} task(s) open:\n` +
|
|
38
38
|
`${rows.join("\n")}\n` +
|
|
39
|
-
`Continue
|
|
39
|
+
`Continue only work already authorized by the operator. This reminder and a self-created plan are not authorization ` +
|
|
40
|
+
`to implement a proposal. If implementation awaits an operator decision, use tasks action="block" with a note ` +
|
|
41
|
+
`naming that pending operator decision, or action="drop"; then wait for an explicit operator go-ahead. ` +
|
|
42
|
+
`A skill-install choice does not authorize implementation. Otherwise record the honest state on the board: ` +
|
|
40
43
|
`tasks action="done" with an evidence note, action="block" with a reason, or action="drop". ` +
|
|
41
44
|
`Do not end the turn with a stale board.`
|
|
42
45
|
);
|
|
@@ -61,7 +61,13 @@ const TOKEN_VALUE_MAX = 80;
|
|
|
61
61
|
/** How long `available()` stays false after a transport failure before probing again. */
|
|
62
62
|
const DEGRADE_COOLDOWN_MS = 5_000;
|
|
63
63
|
|
|
64
|
+
export type MuxPaneOpenFailure =
|
|
65
|
+
| { source: "mux"; kind: MuxError["kind"]; wireCode: string | null; method: string | null; message: string }
|
|
66
|
+
| { source: "local"; message: string };
|
|
67
|
+
|
|
64
68
|
export interface MuxOpenUtilityPaneRequest {
|
|
69
|
+
/** Request-scoped diagnostics; the pane-or-null best-effort result is unchanged. */
|
|
70
|
+
onFailure?: (failure: MuxPaneOpenFailure) => void;
|
|
65
71
|
argv: ReadonlyArray<string>;
|
|
66
72
|
cwd: string;
|
|
67
73
|
label: string;
|
|
@@ -230,7 +236,12 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
230
236
|
* is what the caller sees when the pane layer is not there, which is the same
|
|
231
237
|
* value it sees in `none` mode.
|
|
232
238
|
*/
|
|
233
|
-
const attempt = async <T>(
|
|
239
|
+
const attempt = async <T>(
|
|
240
|
+
what: string,
|
|
241
|
+
run: (live: MuxClient) => Promise<T>,
|
|
242
|
+
fallback: T,
|
|
243
|
+
onError?: (error: unknown) => void,
|
|
244
|
+
): Promise<T> => {
|
|
234
245
|
if (!usable() || client === null) return fallback;
|
|
235
246
|
try {
|
|
236
247
|
const value = await run(client);
|
|
@@ -238,6 +249,7 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
238
249
|
return value;
|
|
239
250
|
} catch (error) {
|
|
240
251
|
degrade(what, error);
|
|
252
|
+
onError?.(error);
|
|
241
253
|
return fallback;
|
|
242
254
|
}
|
|
243
255
|
};
|
|
@@ -301,6 +313,13 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
301
313
|
},
|
|
302
314
|
|
|
303
315
|
async openUtilityPane(request: MuxOpenUtilityPaneRequest): Promise<MuxPaneRef | null> {
|
|
316
|
+
const report = (failure: MuxPaneOpenFailure): void => {
|
|
317
|
+
try {
|
|
318
|
+
request.onFailure?.(failure);
|
|
319
|
+
} catch {
|
|
320
|
+
// Diagnostics must not break the best-effort contract.
|
|
321
|
+
}
|
|
322
|
+
};
|
|
304
323
|
// Idempotence for docks: a slot that already has a pane answers with it.
|
|
305
324
|
const dockSlot = request.dock?.slot;
|
|
306
325
|
if (dockSlot && docks) {
|
|
@@ -314,6 +333,7 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
314
333
|
let ref: MuxPaneRef;
|
|
315
334
|
if (request.dock && docks) {
|
|
316
335
|
const placed = await docks.open(request.dock.slot, {
|
|
336
|
+
onRefused: (message) => report({ source: "local", message }),
|
|
317
337
|
...(request.dock.share === undefined ? {} : { share: request.dock.share }),
|
|
318
338
|
cwd: request.cwd,
|
|
319
339
|
...(request.env ? { env: request.env } : {}),
|
|
@@ -356,6 +376,19 @@ export function createMuxRuntime(options: MuxRuntimeOptions): MuxRuntime {
|
|
|
356
376
|
return ref;
|
|
357
377
|
},
|
|
358
378
|
null,
|
|
379
|
+
(error) => {
|
|
380
|
+
if (error instanceof MuxError) {
|
|
381
|
+
report({
|
|
382
|
+
source: "mux",
|
|
383
|
+
kind: error.kind,
|
|
384
|
+
wireCode: error.wireCode,
|
|
385
|
+
method: error.method,
|
|
386
|
+
message: error.message,
|
|
387
|
+
});
|
|
388
|
+
} else {
|
|
389
|
+
report({ source: "local", message: error instanceof Error ? error.message : String(error) });
|
|
390
|
+
}
|
|
391
|
+
},
|
|
359
392
|
);
|
|
360
393
|
},
|
|
361
394
|
|
|
@@ -126,12 +126,9 @@ export async function detectMux(options: DetectMuxOptions = {}): Promise<MuxDete
|
|
|
126
126
|
return { detection: none("panes are turned off"), client: null };
|
|
127
127
|
}
|
|
128
128
|
if (enabled === "embedded") {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
// mode actually runs. When the guest ladder also fails, that failure is
|
|
133
|
-
// reported on its own terms.
|
|
134
|
-
log("info", "interface.panes.enabled=embedded is not implemented yet; detecting a guest pane host instead");
|
|
129
|
+
const reason = "embedded pane hosting is not implemented; use auto or guest";
|
|
130
|
+
log("warning", reason);
|
|
131
|
+
return { detection: none(reason, [], true), client: null };
|
|
135
132
|
}
|
|
136
133
|
if (env.HERDR_ENV !== "1") {
|
|
137
134
|
return { detection: none("HERDR_ENV is not 1, so Clio is not running inside a pane host"), client: null };
|
|
@@ -198,7 +198,12 @@ export interface DockController {
|
|
|
198
198
|
*/
|
|
199
199
|
open(
|
|
200
200
|
slot: DockSlot,
|
|
201
|
-
options?: {
|
|
201
|
+
options?: {
|
|
202
|
+
share?: number;
|
|
203
|
+
cwd?: string;
|
|
204
|
+
env?: Readonly<Record<string, string>>;
|
|
205
|
+
onRefused?: (reason: string) => void;
|
|
206
|
+
},
|
|
202
207
|
): Promise<MuxPaneRef | null>;
|
|
203
208
|
/** Record an adopted pane (crash recovery) as this slot's dock. */
|
|
204
209
|
adopt(slot: DockSlot, ref: MuxPaneRef): void;
|
|
@@ -265,11 +270,13 @@ export function createDockController(options: DockControllerOptions): DockContro
|
|
|
265
270
|
const geometry = await client.paneLayout(anchorPaneId);
|
|
266
271
|
const anchorRect = geometry.panes.find((pane) => pane.paneId === anchorPaneId)?.rect;
|
|
267
272
|
if (!anchorRect) {
|
|
273
|
+
openOptions.onRefused?.(`no anchor geometry for ${anchorPaneId}; check the pane host layout before trying again`);
|
|
268
274
|
log("debug", `mux ${slot} dock open found no anchor rect for ${anchorPaneId}`);
|
|
269
275
|
return null;
|
|
270
276
|
}
|
|
271
277
|
const plan = planDockOpen(anchorRect, spec, openOptions.share);
|
|
272
278
|
if ("refused" in plan) {
|
|
279
|
+
openOptions.onRefused?.(`${plan.refused}; enlarge the anchor pane before trying again`);
|
|
273
280
|
log("info", `mux ${slot} dock refused: ${plan.refused}`);
|
|
274
281
|
return null;
|
|
275
282
|
}
|
package/src/domains/mux/index.ts
CHANGED
|
@@ -645,9 +645,19 @@ export function createMuxClient(options: MuxClientOptions): MuxClient {
|
|
|
645
645
|
// so an empty-id error line on this connection is still ours.
|
|
646
646
|
if (responseId !== id && !(responseId === "" && error)) return;
|
|
647
647
|
if (error) {
|
|
648
|
-
const code = typeof error.code === "string" ? error.code :
|
|
649
|
-
|
|
650
|
-
|
|
648
|
+
const code = typeof error.code === "string" ? error.code : undefined;
|
|
649
|
+
// Absence is different from a host literally saying "unknown".
|
|
650
|
+
// Keep supplied text verbatim and make missing text explicit here.
|
|
651
|
+
const message =
|
|
652
|
+
typeof error.message === "string" ? error.message : "no failure message was supplied by the pane host";
|
|
653
|
+
finish(() =>
|
|
654
|
+
reject(
|
|
655
|
+
new MuxError(muxErrorKind(code ?? "unknown"), message, {
|
|
656
|
+
...(code === undefined ? {} : { wireCode: code }),
|
|
657
|
+
method,
|
|
658
|
+
}),
|
|
659
|
+
),
|
|
660
|
+
);
|
|
651
661
|
return;
|
|
652
662
|
}
|
|
653
663
|
finish(() => resolve(line.result));
|
|
@@ -27,6 +27,8 @@ export interface AccountabilitySummary {
|
|
|
27
27
|
totalRuns: number;
|
|
28
28
|
firstPassRuns: number;
|
|
29
29
|
firstPassRate: number;
|
|
30
|
+
unverifiedSuccesses: number;
|
|
31
|
+
ungroundedClaims: number;
|
|
30
32
|
failureCauses: ReadonlyArray<{ tag: EvidenceTag; count: number }>;
|
|
31
33
|
}
|
|
32
34
|
|
|
@@ -38,9 +40,19 @@ export interface AccountabilitySummary {
|
|
|
38
40
|
export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): AccountabilitySummary {
|
|
39
41
|
const totalRuns = rows.length;
|
|
40
42
|
let firstPassRuns = 0;
|
|
43
|
+
let unverifiedSuccesses = 0;
|
|
44
|
+
let ungroundedClaims = 0;
|
|
41
45
|
const counts = new Map<EvidenceTag, number>();
|
|
42
46
|
for (const row of rows) {
|
|
43
47
|
if (row.firstPassSuccess) firstPassRuns += 1;
|
|
48
|
+
if (
|
|
49
|
+
row.succeeded === true &&
|
|
50
|
+
(row.tags.includes("no-validation") ||
|
|
51
|
+
row.tags.includes("proxy-validation") ||
|
|
52
|
+
row.completionEvidenceWarning === true)
|
|
53
|
+
)
|
|
54
|
+
unverifiedSuccesses += 1;
|
|
55
|
+
ungroundedClaims += row.ungroundedClaims ?? 0;
|
|
44
56
|
for (const tag of row.tags) {
|
|
45
57
|
if (!FAILURE_CAUSE_TAGS.has(tag)) continue;
|
|
46
58
|
counts.set(tag, (counts.get(tag) ?? 0) + 1);
|
|
@@ -53,6 +65,8 @@ export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): A
|
|
|
53
65
|
totalRuns,
|
|
54
66
|
firstPassRuns,
|
|
55
67
|
firstPassRate: totalRuns === 0 ? 0 : firstPassRuns / totalRuns,
|
|
68
|
+
unverifiedSuccesses,
|
|
69
|
+
ungroundedClaims,
|
|
56
70
|
failureCauses,
|
|
57
71
|
};
|
|
58
72
|
}
|
|
@@ -60,7 +74,7 @@ export function summarizeEvidenceIndex(rows: ReadonlyArray<EvidenceIndexRow>): A
|
|
|
60
74
|
/**
|
|
61
75
|
* Read the sidecar index from the state dir and summarize it. Tolerant by way of
|
|
62
76
|
* `readEvidenceIndex`: a missing or corrupt index yields the empty summary
|
|
63
|
-
*
|
|
77
|
+
* with zero counters and an empty failure-cause histogram.
|
|
64
78
|
*/
|
|
65
79
|
export function readAccountabilitySummary(stateDir: string): AccountabilitySummary {
|
|
66
80
|
return summarizeEvidenceIndex(readEvidenceIndex(stateDir));
|