@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
package/src/engine/loop-guard.ts
CHANGED
|
@@ -441,6 +441,8 @@ export interface CreateLoopGuardRegistrationOptions {
|
|
|
441
441
|
* operator who can intervene; workers do not).
|
|
442
442
|
*/
|
|
443
443
|
toolCallCap?: number;
|
|
444
|
+
/** Observe estimated work without disabling tools; fault-loop detection remains active. */
|
|
445
|
+
toolBudgetAdvisory?: boolean;
|
|
444
446
|
/**
|
|
445
447
|
* Worker only: successful exploration attempts allowed before a graceful,
|
|
446
448
|
* text-only synthesis phase. Unlike {@link toolCallCap}, crossing this soft
|
|
@@ -523,8 +525,10 @@ export interface LoopGuardRegistration extends MiddlewareHookRegistration {
|
|
|
523
525
|
|
|
524
526
|
export function createLoopGuardRegistration(options: CreateLoopGuardRegistrationOptions): LoopGuardRegistration {
|
|
525
527
|
const budget = options.turnBlockBudget ?? INTERACTIVE_LOOP_BLOCK_BUDGET;
|
|
526
|
-
const cap = options.toolCallCap;
|
|
528
|
+
const cap = options.toolBudgetAdvisory ? undefined : options.toolCallCap;
|
|
529
|
+
let advisoryEmitted = false;
|
|
527
530
|
let softLimit =
|
|
531
|
+
!options.toolBudgetAdvisory &&
|
|
528
532
|
options.toolCallSoftLimit !== undefined &&
|
|
529
533
|
Number.isSafeInteger(options.toolCallSoftLimit) &&
|
|
530
534
|
options.toolCallSoftLimit > 0 &&
|
|
@@ -561,7 +565,8 @@ export function createLoopGuardRegistration(options: CreateLoopGuardRegistration
|
|
|
561
565
|
* has no cap and no bound here; it has an operator instead.
|
|
562
566
|
*/
|
|
563
567
|
let deniedAttempts = 0;
|
|
564
|
-
const denialBudget =
|
|
568
|
+
const denialBudget =
|
|
569
|
+
options.toolCallCap === undefined ? undefined : Math.max(options.toolCallCap, WIDE_BATCH_DENIAL_FLOOR);
|
|
565
570
|
const boundRunDenials = (
|
|
566
571
|
effects: ReadonlyArray<MiddlewareEffect>,
|
|
567
572
|
input: MiddlewareHookInput,
|
|
@@ -948,6 +953,18 @@ export function createLoopGuardRegistration(options: CreateLoopGuardRegistration
|
|
|
948
953
|
recordSuccessfulResult(input);
|
|
949
954
|
recordResultForStagnation(input);
|
|
950
955
|
const effects = [...crossArgumentResultEffects(input)];
|
|
956
|
+
if (
|
|
957
|
+
options.toolBudgetAdvisory &&
|
|
958
|
+
!advisoryEmitted &&
|
|
959
|
+
count >= (options.toolCallSoftLimit ?? options.toolCallCap ?? Infinity)
|
|
960
|
+
) {
|
|
961
|
+
advisoryEmitted = true;
|
|
962
|
+
effects.push({
|
|
963
|
+
kind: "annotate_tool_result",
|
|
964
|
+
message: `Advisory tool estimate reached (${count} calls). Reassess remaining work and finish the assignment; tools remain available. Explicit task requirements still apply.`,
|
|
965
|
+
severity: "warn",
|
|
966
|
+
});
|
|
967
|
+
}
|
|
951
968
|
if (
|
|
952
969
|
softReadReserveEntered &&
|
|
953
970
|
softLockout === null &&
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, constants, fstatSync, openSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { isAbsolute } from "node:path";
|
|
4
|
+
import type { Api, AssistantMessageEventStream, Model, StreamOptions } from "@earendil-works/pi-ai";
|
|
5
|
+
import { findEngineEnvKeys } from "./env-api-keys.js";
|
|
6
|
+
|
|
7
|
+
/** Process-owned opt-in reaches every native engine call, including prewarm and workers. */
|
|
8
|
+
export function instrumentProviderCall<T extends StreamOptions>(
|
|
9
|
+
model: Model<Api>,
|
|
10
|
+
options: T | undefined,
|
|
11
|
+
invoke: (options: T | undefined) => AssistantMessageEventStream,
|
|
12
|
+
): AssistantMessageEventStream {
|
|
13
|
+
let effective = options;
|
|
14
|
+
if (model.api === "anthropic-messages" && options?.cacheRetention === undefined) {
|
|
15
|
+
const retention = process.env.CLIO_CODER_ANTHROPIC_CACHE_RETENTION;
|
|
16
|
+
if (retention !== undefined && retention !== "") {
|
|
17
|
+
if (retention !== "none" && retention !== "short" && retention !== "long") {
|
|
18
|
+
throw new Error("CLIO_CODER_ANTHROPIC_CACHE_RETENTION must be none, short, or long");
|
|
19
|
+
}
|
|
20
|
+
effective = { ...options, cacheRetention: retention } as T;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const path = process.env.CLIO_CODER_PROVIDER_DUMP_PATH;
|
|
24
|
+
if (!path) return invoke(effective);
|
|
25
|
+
const sink = openDump(path);
|
|
26
|
+
const payloads: unknown[] = [];
|
|
27
|
+
const redact = diagnosticSerializer(model, effective);
|
|
28
|
+
const callId = randomUUID();
|
|
29
|
+
const onPayload = effective?.onPayload;
|
|
30
|
+
const instrumented = {
|
|
31
|
+
...effective,
|
|
32
|
+
onPayload: async (payload: unknown, currentModel: Model<Api>) => {
|
|
33
|
+
// Caller-owned thinking/tool/schema patches finish first. Snapshot now:
|
|
34
|
+
// providers and callbacks can retain or mutate their objects afterward.
|
|
35
|
+
const replacement = await onPayload?.(payload, currentModel);
|
|
36
|
+
try {
|
|
37
|
+
payloads.push(JSON.parse(redact(replacement === undefined ? payload : replacement)));
|
|
38
|
+
} catch {
|
|
39
|
+
payloads.push({ diagnosticError: "payload could not be serialized" });
|
|
40
|
+
}
|
|
41
|
+
return replacement;
|
|
42
|
+
},
|
|
43
|
+
} as T;
|
|
44
|
+
const finish = (terminal: { response: unknown } | { error: string }) => {
|
|
45
|
+
try {
|
|
46
|
+
writeFileSync(sink, `${redact({ callId, api: model.api, model: model.id, payloads, ...terminal })}\n`, "utf8");
|
|
47
|
+
} catch {
|
|
48
|
+
// Diagnostics must not turn a completed provider call into a retry or
|
|
49
|
+
// inject content into the ledger. Report only the sink failure category.
|
|
50
|
+
process.emitWarning("Provider diagnostic dump could not be written", { code: "CLIO_CODER_PROVIDER_DUMP_FAILED" });
|
|
51
|
+
} finally {
|
|
52
|
+
try {
|
|
53
|
+
closeSync(sink);
|
|
54
|
+
} catch {
|
|
55
|
+
process.emitWarning("Provider diagnostic dump could not be closed", { code: "CLIO_CODER_PROVIDER_DUMP_FAILED" });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
try {
|
|
60
|
+
const stream = invoke(instrumented);
|
|
61
|
+
// result() observes the existing terminal promise; it never consumes the
|
|
62
|
+
// event iterator that the agent and durable ledger projection own.
|
|
63
|
+
void stream.result().then(
|
|
64
|
+
(response) => finish({ response }),
|
|
65
|
+
(error) => finish({ error: String(error) }),
|
|
66
|
+
);
|
|
67
|
+
return stream;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
finish({ error: error instanceof Error ? error.message : String(error) });
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Refuse insecure existing files instead of silently changing their permissions. */
|
|
75
|
+
function openDump(path: string): number {
|
|
76
|
+
if (!isAbsolute(path)) throw new Error("CLIO_CODER_PROVIDER_DUMP_PATH must be an absolute file path");
|
|
77
|
+
const fd = openSync(
|
|
78
|
+
path,
|
|
79
|
+
constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_NOFOLLOW | constants.O_NONBLOCK,
|
|
80
|
+
0o600,
|
|
81
|
+
);
|
|
82
|
+
try {
|
|
83
|
+
const stat = fstatSync(fd);
|
|
84
|
+
if (
|
|
85
|
+
!stat.isFile() ||
|
|
86
|
+
(stat.mode & 0o777) !== 0o600 ||
|
|
87
|
+
(process.getuid !== undefined && stat.uid !== process.getuid())
|
|
88
|
+
) {
|
|
89
|
+
throw new Error("CLIO_CODER_PROVIDER_DUMP_PATH must be an operator-owned regular file with mode 0600");
|
|
90
|
+
}
|
|
91
|
+
return fd;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
closeSync(fd);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function diagnosticSerializer(model: Model<Api>, options: StreamOptions | undefined): (value: unknown) => string {
|
|
99
|
+
const secrets = new Set<string>();
|
|
100
|
+
const ambientKeys = (findEngineEnvKeys(model.provider, options?.env) ?? []).map(
|
|
101
|
+
(name) => options?.env?.[name] || process.env[name],
|
|
102
|
+
);
|
|
103
|
+
for (const key of [options?.apiKey, ...ambientKeys]) {
|
|
104
|
+
if (key && key !== "<authenticated>") secrets.add(key);
|
|
105
|
+
}
|
|
106
|
+
for (const headers of [options?.headers, model.headers]) {
|
|
107
|
+
for (const [key, value] of Object.entries(headers ?? {})) {
|
|
108
|
+
if (typeof value === "string" && value.length > 0 && /auth|api[-_]?key|cookie|token|secret/iu.test(key)) {
|
|
109
|
+
secrets.add(value);
|
|
110
|
+
const token = value.match(/^(?:Bearer|Basic)\s+(.+)$/iu)?.[1];
|
|
111
|
+
if (token) secrets.add(token);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return (value) => {
|
|
116
|
+
// This is a body-level diagnostic, never an HTTP/auth/options dump. Keep
|
|
117
|
+
// nested tool schemas intact, including tools with a parameter named headers.
|
|
118
|
+
const body =
|
|
119
|
+
typeof value === "object" && value !== null && !Array.isArray(value)
|
|
120
|
+
? Object.fromEntries(
|
|
121
|
+
Object.entries(value).filter(([key]) => !/^(?:headers|env|apiKey|api_key|authorization)$/iu.test(key)),
|
|
122
|
+
)
|
|
123
|
+
: value;
|
|
124
|
+
let serialized = JSON.stringify(body);
|
|
125
|
+
if (serialized === undefined) serialized = "null";
|
|
126
|
+
for (const secret of secrets) serialized = serialized.replaceAll(JSON.stringify(secret).slice(1, -1), "[REDACTED]");
|
|
127
|
+
return serialized;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -150,7 +150,9 @@ export function patchToolChoiceNamedPayload(
|
|
|
150
150
|
if (Object.keys(outputConfig).length > 0) patched.output_config = outputConfig;
|
|
151
151
|
else delete patched.output_config;
|
|
152
152
|
}
|
|
153
|
-
|
|
153
|
+
// Keep the cacheable schema prefix intact. The request-level choice
|
|
154
|
+
// already identifies the required tool; narrowing changes it twice.
|
|
155
|
+
return { ...patched, tool_choice: { type: "tool", name: toolName } };
|
|
154
156
|
}
|
|
155
157
|
if (model.api === "google-generative-ai" || model.api === "google-vertex") {
|
|
156
158
|
if (!isRecord(payload.config) || payload.config.tools === undefined || payload.config.tools === null)
|
|
@@ -215,6 +215,14 @@ function assistantMessageText(message: AgentMessage | undefined): string | null
|
|
|
215
215
|
*/
|
|
216
216
|
function isTerminalAssistantMessage(message: AgentMessage | undefined): boolean {
|
|
217
217
|
if (!isAssistantMessage(message)) return false;
|
|
218
|
+
// pi refuses truncated tool calls and continues with their error results.
|
|
219
|
+
// That turn has no final artifact/report to repair yet.
|
|
220
|
+
if (
|
|
221
|
+
message.stopReason === "length" &&
|
|
222
|
+
Array.isArray(message.content) &&
|
|
223
|
+
message.content.some((block) => block.type === "toolCall")
|
|
224
|
+
)
|
|
225
|
+
return false;
|
|
218
226
|
return message.stopReason !== "toolUse" && message.stopReason !== "error";
|
|
219
227
|
}
|
|
220
228
|
|
|
@@ -442,6 +450,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
442
450
|
const loopGuardRegistration = createLoopGuardRegistration({
|
|
443
451
|
safety,
|
|
444
452
|
toolCallCap: workerBudget.hardCap,
|
|
453
|
+
toolBudgetAdvisory: workerBudget.mode === "advisory",
|
|
445
454
|
toolCallSoftLimit: workerBudget.toolCalls,
|
|
446
455
|
// A worker's blocks all land in one run-long bucket, so the bound on
|
|
447
456
|
// them is a statement about this run's length, not about a turn.
|
|
@@ -600,6 +609,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
600
609
|
invokeOptions: () => ({
|
|
601
610
|
correlationId: `worker-model-round-${workerModelRound}`,
|
|
602
611
|
toolResultMaxBytes: workerSettings.context.toolResultMaxBytes,
|
|
612
|
+
supportsImages: model.input.includes("image"),
|
|
603
613
|
...(agentSkillPolicy ? { pendingSkillPolicy: agentSkillPolicy } : {}),
|
|
604
614
|
}),
|
|
605
615
|
});
|
|
@@ -724,8 +734,9 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
724
734
|
stopAfterToolResultCallId = null;
|
|
725
735
|
}
|
|
726
736
|
}
|
|
727
|
-
const revisionToolsAvailable =
|
|
728
|
-
|
|
737
|
+
const revisionToolsAvailable =
|
|
738
|
+
(workerBudget.mode === "advisory" || resultContractRevisionActive) && !synthesisToolLock;
|
|
739
|
+
// Legacy enforced budgets need preauthorized growth to retain repair tools.
|
|
729
740
|
if (!revisionToolsAvailable) synthesisToolLock = true;
|
|
730
741
|
// Delivered as a paired tool exchange, never a user turn. Templates
|
|
731
742
|
// that key history rendering off the last `user` message re-render
|
|
@@ -114,7 +114,11 @@ export function createWorkerSafety(options: WorkerSafetyOptions = {}): SafetyCon
|
|
|
114
114
|
},
|
|
115
115
|
scopes: { readonly: READONLY_SCOPE, workspace: WORKSPACE_SCOPE, confirmed: CONFIRMED_SCOPE },
|
|
116
116
|
isSubset,
|
|
117
|
-
policy: {
|
|
117
|
+
policy: {
|
|
118
|
+
metadata: (posture) => policyEngine.metadata(posture),
|
|
119
|
+
allowsObservationPath: (path) =>
|
|
120
|
+
policyEngine.evaluate({ tool: "read", args: { path } }).reasonCode !== "path-policy:zeroAccessPaths",
|
|
121
|
+
},
|
|
118
122
|
audit: { recordCount: () => 0 },
|
|
119
123
|
};
|
|
120
124
|
}
|
|
@@ -125,6 +125,7 @@ export function createExtensionReloadCoordinator(deps: ExtensionReloadCoordinato
|
|
|
125
125
|
workspaceRoot: workspace,
|
|
126
126
|
...(captured !== null ? { capturedSources: captured } : {}),
|
|
127
127
|
recordReceipt: deps.recordReceipt,
|
|
128
|
+
report: deps.report,
|
|
128
129
|
...(deps.runCommand !== undefined ? { runCommand: deps.runCommand } : {}),
|
|
129
130
|
...(deps.now !== undefined ? { now: deps.now } : {}),
|
|
130
131
|
});
|
|
@@ -12,7 +12,7 @@ import { DEFAULT_DELEGATION_PERMISSION_TIMEOUT_MS } from "../core/defaults.js";
|
|
|
12
12
|
import { loadDomains } from "../core/domain-loader.js";
|
|
13
13
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
14
14
|
import { expandInlineFileReferencesAsync } from "../core/file-references.js";
|
|
15
|
-
import { setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
|
|
15
|
+
import { setCommitDecisionRefsProvider, setGitCommitAttributionEnabled } from "../core/git-commit-attribution.js";
|
|
16
16
|
import { configureGuardrails, guardrailValuesFromSettings } from "../core/guardrails.js";
|
|
17
17
|
import { HEADLESS_PERMISSION_DENIED_REASON } from "../core/headless-permission.js";
|
|
18
18
|
import { rememberRecentModel } from "../core/recent-models.js";
|
|
@@ -37,6 +37,7 @@ import { getSharedBus } from "../core/shared-bus.js";
|
|
|
37
37
|
import { isSkillActivation } from "../core/skill-activation.js";
|
|
38
38
|
import { StartupTimer } from "../core/startup-timer.js";
|
|
39
39
|
import { getTerminationCoordinator } from "../core/termination.js";
|
|
40
|
+
import { captureProjectSurface, projectSurfaceTrustNotice } from "../core/workspace-trust.js";
|
|
40
41
|
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
41
42
|
import { renderAgentCatalogSectionsFromSpecs } from "../domains/agents/catalog.js";
|
|
42
43
|
import type { AgentsContract } from "../domains/agents/contract.js";
|
|
@@ -157,12 +158,11 @@ import {
|
|
|
157
158
|
import type { SchedulingContract } from "../domains/scheduling/contract.js";
|
|
158
159
|
import { SchedulingDomainModule } from "../domains/scheduling/index.js";
|
|
159
160
|
import type { CompactionCallObservation } from "../domains/session/compaction/compact.js";
|
|
160
|
-
import { type CompactResult, compact } from "../domains/session/compaction/compact.js";
|
|
161
|
+
import { type CompactInput, type CompactResult, compact } from "../domains/session/compaction/compact.js";
|
|
161
162
|
import { collectSessionEntries } from "../domains/session/compaction/session-entries.js";
|
|
162
163
|
import { estimateTokens } from "../domains/session/compaction/tokens.js";
|
|
163
|
-
import { ceilChars } from "../domains/session/context-accounting.js";
|
|
164
164
|
import type { SessionContract, SessionMeta } from "../domains/session/contract.js";
|
|
165
|
-
import { createDecisionBoardStore } from "../domains/session/decision-board.js";
|
|
165
|
+
import { activeDecisionRefs, createDecisionBoardStore } from "../domains/session/decision-board.js";
|
|
166
166
|
import type { CompactionSummaryEntry, CompactionTrigger, SessionEntry } from "../domains/session/entries.js";
|
|
167
167
|
import { SessionDomainModule } from "../domains/session/index.js";
|
|
168
168
|
import {
|
|
@@ -178,6 +178,7 @@ import { createTaskBoardStore } from "../domains/session/task-board.js";
|
|
|
178
178
|
import { filterEntriesToActivePath } from "../domains/session/tree/active-path.js";
|
|
179
179
|
import { type ShareContract, ShareDomainModule } from "../domains/share/index.js";
|
|
180
180
|
import { ToolchainDomainModule } from "../domains/toolchain/index.js";
|
|
181
|
+
import { activeUserTaskAcceptance } from "../domains/user-tasks/active-acceptance.js";
|
|
181
182
|
import { createUserTasksStore } from "../domains/user-tasks/store.js";
|
|
182
183
|
import { type AcpSafeSettingsPatch, type AcpSafeSettingsSnapshot, serveClioAcpAgent } from "../engine/acp/server.js";
|
|
183
184
|
import { createStdioServerTransport } from "../engine/acp/transport.js";
|
|
@@ -614,6 +615,7 @@ function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<
|
|
|
614
615
|
async function resolveCompactionModel(
|
|
615
616
|
settings: ClioSettings,
|
|
616
617
|
providers: ProvidersContract,
|
|
618
|
+
signal?: AbortSignal,
|
|
617
619
|
): Promise<CompactionResolution | null> {
|
|
618
620
|
const override = settings.context.compaction.model;
|
|
619
621
|
let targetId = settings.chat.target;
|
|
@@ -634,7 +636,7 @@ async function resolveCompactionModel(
|
|
|
634
636
|
wireModelId = selected.ref.model;
|
|
635
637
|
}
|
|
636
638
|
if (!targetId || !wireModelId) return null;
|
|
637
|
-
await prepareBackgroundModelMetadata(providers, targetId);
|
|
639
|
+
await prepareBackgroundModelMetadata(providers, targetId, signal);
|
|
638
640
|
const status = providers.list().find((entry) => entry.target.id === targetId);
|
|
639
641
|
if (!status?.available) {
|
|
640
642
|
throw new Error("context.compaction.model target is unavailable; check the selected target with clio-coder targets");
|
|
@@ -673,7 +675,7 @@ async function resolveCompactionModel(
|
|
|
673
675
|
applyModelCapabilityPatch(model, refined.capabilities);
|
|
674
676
|
let apiKey: string | undefined = LOCAL_API_KEY_FALLBACK;
|
|
675
677
|
if (targetRequiresAuth(route.target, route.runtime)) {
|
|
676
|
-
const auth = await providers.auth.resolveForTarget(route.target, route.runtime);
|
|
678
|
+
const auth = await providers.auth.resolveForTarget(route.target, route.runtime, signal ? { signal } : undefined);
|
|
677
679
|
if (!auth.available || !auth.apiKey) {
|
|
678
680
|
throw new Error(
|
|
679
681
|
"context.compaction.model authentication is unavailable; authenticate the selected target with clio-coder auth",
|
|
@@ -794,6 +796,8 @@ async function runCompactionFlow(
|
|
|
794
796
|
instructions?: string,
|
|
795
797
|
trigger?: CompactionTrigger,
|
|
796
798
|
observability?: BackgroundMemoryUsageSink,
|
|
799
|
+
budget?: Pick<CompactInput, "keepRecentTokens" | "preserveUserTurnId" | "skillContextState" | "signal">,
|
|
800
|
+
summarize?: CompactInput["summarize"],
|
|
797
801
|
): Promise<CompactResult | null> {
|
|
798
802
|
const meta = session.current();
|
|
799
803
|
if (!meta) {
|
|
@@ -805,8 +809,11 @@ async function runCompactionFlow(
|
|
|
805
809
|
session.current()?.id === meta.id && (session.tree(meta.id).leafId ?? undefined) === activeLeafTurnId;
|
|
806
810
|
const entries = filterEntriesToActivePath(readSessionEntriesForCompact(meta.id), activeLeafTurnId);
|
|
807
811
|
if (entries.length === 0) return null;
|
|
812
|
+
budget?.signal?.throwIfAborted();
|
|
808
813
|
const systemPrompt = await readCompactionSystemPrompt(settings.context.compaction.systemPrompt, meta.cwd);
|
|
809
|
-
|
|
814
|
+
budget?.signal?.throwIfAborted();
|
|
815
|
+
const resolved = await resolveCompactionModel(settings, providers, budget?.signal);
|
|
816
|
+
budget?.signal?.throwIfAborted();
|
|
810
817
|
if (!resolved) {
|
|
811
818
|
throw new Error("no model configured; set chat.target + chat.model");
|
|
812
819
|
}
|
|
@@ -841,6 +848,8 @@ async function runCompactionFlow(
|
|
|
841
848
|
try {
|
|
842
849
|
result = await compact({
|
|
843
850
|
entries,
|
|
851
|
+
...budget,
|
|
852
|
+
...(summarize ? { summarize } : {}),
|
|
844
853
|
onCall: (call) => calls.push(call),
|
|
845
854
|
model: resolved.model,
|
|
846
855
|
...(systemPrompt !== undefined ? { systemPrompt } : {}),
|
|
@@ -858,6 +867,10 @@ async function runCompactionFlow(
|
|
|
858
867
|
} finally {
|
|
859
868
|
releaseEndpointSlot();
|
|
860
869
|
}
|
|
870
|
+
if (budget?.signal?.aborted) {
|
|
871
|
+
preserveCalls();
|
|
872
|
+
budget.signal.throwIfAborted();
|
|
873
|
+
}
|
|
861
874
|
if (!isOriginCurrent()) {
|
|
862
875
|
preserveCalls();
|
|
863
876
|
throw new Error("compaction session or branch changed; summary discarded and originating usage retained");
|
|
@@ -876,6 +889,8 @@ async function runCompactionFlow(
|
|
|
876
889
|
turnId: randomUUID(),
|
|
877
890
|
parentTurnId: result.firstKeptTurnId ?? null,
|
|
878
891
|
summary: result.summary,
|
|
892
|
+
...(result.skillContext ? { skillContext: result.skillContext } : {}),
|
|
893
|
+
...(result.userContext ? { userContext: result.userContext } : {}),
|
|
879
894
|
tokensBefore: result.tokensBefore,
|
|
880
895
|
firstKeptTurnId: result.firstKeptTurnId ?? "",
|
|
881
896
|
messagesSummarized: result.messagesSummarized,
|
|
@@ -939,17 +954,28 @@ export function createProductionAutoCompact(
|
|
|
939
954
|
getSettings: () => ClioSettings,
|
|
940
955
|
providers: ProvidersContract,
|
|
941
956
|
observability?: BackgroundMemoryUsageSink,
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
957
|
+
summarize?: CompactInput["summarize"],
|
|
958
|
+
): (
|
|
959
|
+
instructions?: string,
|
|
960
|
+
trigger?: CompactionTrigger,
|
|
961
|
+
budget?: Pick<CompactInput, "keepRecentTokens" | "preserveUserTurnId" | "skillContextState" | "signal">,
|
|
962
|
+
) => Promise<CompactResult | null> {
|
|
963
|
+
return (instructions, trigger, budget) =>
|
|
964
|
+
runCompactionFlow(session, getSettings(), providers, instructions, trigger, observability, budget, summarize);
|
|
945
965
|
}
|
|
946
966
|
|
|
947
|
-
function estimateTokensFromSummary(
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
967
|
+
function estimateTokensFromSummary(result: CompactResult): number {
|
|
968
|
+
return estimateTokens({
|
|
969
|
+
kind: "compactionSummary",
|
|
970
|
+
turnId: "estimate",
|
|
971
|
+
parentTurnId: null,
|
|
972
|
+
timestamp: "",
|
|
973
|
+
summary: result.summary,
|
|
974
|
+
firstKeptTurnId: result.firstKeptTurnId ?? "",
|
|
975
|
+
tokensBefore: result.tokensBefore,
|
|
976
|
+
...(result.skillContext ? { skillContext: result.skillContext } : {}),
|
|
977
|
+
...(result.userContext ? { userContext: result.userContext } : {}),
|
|
978
|
+
});
|
|
953
979
|
}
|
|
954
980
|
|
|
955
981
|
/**
|
|
@@ -972,7 +998,7 @@ function estimateTokensFromSummary(summary: string): number {
|
|
|
972
998
|
function estimateTokensAfterCompaction(entries: ReadonlyArray<SessionEntry>, result: CompactResult): number {
|
|
973
999
|
let droppedTokens = 0;
|
|
974
1000
|
for (const entry of entries.slice(0, result.firstKeptEntryIndex)) droppedTokens += estimateTokens(entry);
|
|
975
|
-
const summaryTokens = estimateTokensFromSummary(result
|
|
1001
|
+
const summaryTokens = estimateTokensFromSummary(result);
|
|
976
1002
|
// The summary alone is the floor: a session whose dropped estimate exceeds
|
|
977
1003
|
// the measured anchor must not report a negative or sub-summary context.
|
|
978
1004
|
return Math.max(summaryTokens, result.tokensBefore - droppedTokens + summaryTokens);
|
|
@@ -1041,6 +1067,15 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1041
1067
|
termination.installSignalHandlers();
|
|
1042
1068
|
|
|
1043
1069
|
ensureClioState();
|
|
1070
|
+
for (const surface of ["safety", "settings"] as const) {
|
|
1071
|
+
const snapshot = captureProjectSurface(process.cwd(), surface);
|
|
1072
|
+
if (snapshot.verdict === "trusted") continue;
|
|
1073
|
+
for (const file of snapshot.files) {
|
|
1074
|
+
if (file.text !== null || file.error !== undefined) {
|
|
1075
|
+
bootStderr(`[clio-coder:trust] ${projectSurfaceTrustNotice(snapshot, file.path)}\n`);
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1044
1079
|
sweepExpiredToolOffloads();
|
|
1045
1080
|
timer.mark("install check");
|
|
1046
1081
|
|
|
@@ -1499,6 +1534,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1499
1534
|
// different generation. The owner slot is anchored here, so user hooks
|
|
1500
1535
|
// keep evaluating after the guards and before the assessors below.
|
|
1501
1536
|
const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
|
|
1537
|
+
let bootHookNotices = true;
|
|
1502
1538
|
const extensionReload = createExtensionReloadCoordinator({
|
|
1503
1539
|
extensions,
|
|
1504
1540
|
middleware,
|
|
@@ -1506,10 +1542,13 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1506
1542
|
recordReceipt: (receipt) => hookReceiptLog.record(receipt),
|
|
1507
1543
|
report: (line) => {
|
|
1508
1544
|
if (!interactive) process.stderr.write(`${line}\n`);
|
|
1545
|
+
else if (bootHookNotices) initialNotices.push(line);
|
|
1546
|
+
else bus.emit(BusChannels.ExtensionsLoadIssue, { message: line });
|
|
1509
1547
|
},
|
|
1510
1548
|
onCommitted: (event) => bus.emit(BusChannels.ExtensionsReloaded, event),
|
|
1511
1549
|
});
|
|
1512
1550
|
extensionReload.applyBoot();
|
|
1551
|
+
bootHookNotices = false;
|
|
1513
1552
|
termination.onDrain(() => hookReceiptLog.flush());
|
|
1514
1553
|
// Autonomy is hot-reloaded for interactive and headless admissions. ACP
|
|
1515
1554
|
// server prompts use the snapshot captured at session/new.
|
|
@@ -1550,6 +1589,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1550
1589
|
if (resources) {
|
|
1551
1590
|
middleware.registerHook(
|
|
1552
1591
|
createMarketplaceOfferRegistration({
|
|
1592
|
+
interactive,
|
|
1553
1593
|
listInstalledSkillNames: () => resources.skills(process.cwd()).items.map((skill) => skill.name),
|
|
1554
1594
|
listMarketplaceEntries: () => discoverMarketplaceSkills({ cwd: process.cwd() }).skills,
|
|
1555
1595
|
installEntry: (entry, scope) => {
|
|
@@ -1627,6 +1667,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1627
1667
|
session.appendEntry(entry);
|
|
1628
1668
|
},
|
|
1629
1669
|
});
|
|
1670
|
+
// Every Clio-spawned commit from this session is stamped with the decisions
|
|
1671
|
+
// active on the board at spawn time, the same way it is stamped as assisted.
|
|
1672
|
+
setCommitDecisionRefsProvider(() => activeDecisionRefs(decisionBoard.snapshot()));
|
|
1630
1673
|
// getSessionId alone never notices a /tree switch: it moves the active
|
|
1631
1674
|
// append point inside the same session, so the id-keyed cache above kept
|
|
1632
1675
|
// showing the abandoned branch's board (issue #94). SessionTurnSwitched is
|
|
@@ -1686,6 +1729,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1686
1729
|
}
|
|
1687
1730
|
: {}),
|
|
1688
1731
|
taskBoard,
|
|
1732
|
+
decisionBoard,
|
|
1733
|
+
getDecisionBoard: () => decisionBoard.snapshot(),
|
|
1689
1734
|
userTasks,
|
|
1690
1735
|
dispatch,
|
|
1691
1736
|
bus,
|
|
@@ -2016,6 +2061,8 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
2016
2061
|
},
|
|
2017
2062
|
resolveRigor: () =>
|
|
2018
2063
|
resolveRigor({ cwd: process.cwd(), override: parseRigorOverride(process.env.CLIO_CODER_RIGOR) }),
|
|
2064
|
+
readActiveAcceptance: (window) =>
|
|
2065
|
+
activeUserTaskAcceptance(userTasks.snapshot(), taskBoard.snapshot(), session.current()?.id ?? null, window),
|
|
2019
2066
|
recordDecision: (record) => safety.audit.recordCompletionContract?.(record),
|
|
2020
2067
|
}),
|
|
2021
2068
|
);
|
|
@@ -162,10 +162,9 @@ export function isLengthStopAssistantMessage(message: AgentMessage | undefined):
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
/**
|
|
165
|
-
* An aborted assistant message with no
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* loop-guard interrupt has already written a durable closing turn.
|
|
165
|
+
* An aborted assistant message with no text, thinking, or structured tool
|
|
166
|
+
* call. Only a hollow abort needs a synthetic closing record; streamed
|
|
167
|
+
* thinking belongs to the same durable assistant as any partial answer.
|
|
169
168
|
*/
|
|
170
169
|
export function isEmptyAbortedAssistantMessage(message: AgentMessage | undefined): boolean {
|
|
171
170
|
if (
|
|
@@ -179,9 +178,17 @@ export function isEmptyAbortedAssistantMessage(message: AgentMessage | undefined
|
|
|
179
178
|
}
|
|
180
179
|
if ((message as { stopReason?: unknown }).stopReason !== "aborted") return false;
|
|
181
180
|
if (extractText(message).trim().length > 0) return false;
|
|
181
|
+
if (extractThinking(message).trim().length > 0) return false;
|
|
182
182
|
return !hasStructuredToolCall(message);
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
+
/** Apply host cancellation provenance only to a structurally aborted message. */
|
|
186
|
+
export function explainInterruptedAssistant(message: AgentMessage, reason: string | null): boolean {
|
|
187
|
+
if (reason === null || message.role !== "assistant" || message.stopReason !== "aborted") return false;
|
|
188
|
+
message.errorMessage = reason;
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
|
|
185
192
|
function lengthStopMetadata(message: AgentMessage): Record<string, unknown> {
|
|
186
193
|
const usage = (message as { usage?: unknown }).usage;
|
|
187
194
|
const metadata: Record<string, unknown> = {
|
|
@@ -497,6 +504,7 @@ export function assistantSessionPayload(
|
|
|
497
504
|
"model",
|
|
498
505
|
"responseModel",
|
|
499
506
|
"responseId",
|
|
507
|
+
"providerThinkingLevel",
|
|
500
508
|
"gatewayRouting",
|
|
501
509
|
"diagnostics",
|
|
502
510
|
]) {
|