@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
|
@@ -29,6 +29,8 @@ export interface TaskBoardTask {
|
|
|
29
29
|
status: TaskLedgerStatus;
|
|
30
30
|
origin?: "agent" | "user";
|
|
31
31
|
userTaskId?: string;
|
|
32
|
+
/** Operator requirements are declarations, not projected verifier execution results. */
|
|
33
|
+
requiredValidationEvidence?: TaskLedgerValidationEvidence[];
|
|
32
34
|
/** Block or drop reason; empty for pending/active/completed tasks. */
|
|
33
35
|
reason?: string;
|
|
34
36
|
/** Evidence note recorded when the task was completed. */
|
|
@@ -64,7 +66,7 @@ export interface TaskBoardCounts {
|
|
|
64
66
|
export type TaskBoardMutation =
|
|
65
67
|
| { op: "plan"; title: string; tasks: ReadonlyArray<string> }
|
|
66
68
|
| { op: "add"; tasks: ReadonlyArray<string> }
|
|
67
|
-
| { op: "pick"; title: string; userTaskId: string }
|
|
69
|
+
| { op: "pick"; title: string; userTaskId: string; verification?: ReadonlyArray<{ check: string; timeoutMs: number }> }
|
|
68
70
|
| { op: "start"; id: string }
|
|
69
71
|
| { op: "done"; id: string; evidence: string }
|
|
70
72
|
| { op: "block"; id: string; reason: string }
|
|
@@ -179,6 +181,7 @@ function boardStatus(tasks: ReadonlyArray<TaskBoardTask>): TaskLedgerStatus {
|
|
|
179
181
|
export function toTaskLedgerEntryFields(board: TaskBoardSnapshot, now: Date): TaskLedgerEntryFields {
|
|
180
182
|
const evidence: TaskLedgerValidationEvidence[] = [];
|
|
181
183
|
const subgoals: TaskLedgerGoal[] = board.tasks.map((task) => {
|
|
184
|
+
evidence.push(...(task.requiredValidationEvidence ?? []).map((item) => ({ ...item })));
|
|
182
185
|
if (task.status === "completed" && task.evidence) {
|
|
183
186
|
evidence.push({
|
|
184
187
|
id: `${task.id}.evidence`,
|
|
@@ -284,6 +287,23 @@ export function foldSessionTaskHistory(entries: ReadonlyArray<unknown>): Session
|
|
|
284
287
|
.map(({ lastIndex: _lastIndex, tasks, ...board }) => ({ ...board, tasks: [...tasks.values()] }));
|
|
285
288
|
}
|
|
286
289
|
|
|
290
|
+
function acceptanceRequirementDescription(check: string): string {
|
|
291
|
+
return `Operator acceptance requirement: ${check} (declaration only; see verification receipts for execution status)`;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/** Old pickup snapshots used pending for declarations; preserve any actual observations. */
|
|
295
|
+
function acceptanceRequirement(item: TaskLedgerValidationEvidence): TaskLedgerValidationEvidence {
|
|
296
|
+
if (
|
|
297
|
+
item.status === "pending" &&
|
|
298
|
+
item.command &&
|
|
299
|
+
item.description === `Operator acceptance: ${item.command}` &&
|
|
300
|
+
item.observedAt === undefined
|
|
301
|
+
) {
|
|
302
|
+
return { ...item, status: "required", description: acceptanceRequirementDescription(item.command) };
|
|
303
|
+
}
|
|
304
|
+
return { ...item };
|
|
305
|
+
}
|
|
306
|
+
|
|
287
307
|
function toEntryView(entry: {
|
|
288
308
|
boardId?: string;
|
|
289
309
|
goals: TaskLedgerGoal[];
|
|
@@ -308,6 +328,8 @@ function toEntryView(entry: {
|
|
|
308
328
|
origin: goal.origin ?? "agent",
|
|
309
329
|
};
|
|
310
330
|
if (goal.userTaskId) task.userTaskId = goal.userTaskId;
|
|
331
|
+
const required = entry.requiredValidationEvidence.filter((item) => item.id.startsWith(`${goal.id}.acceptance.`));
|
|
332
|
+
if (required.length > 0) task.requiredValidationEvidence = required.map(acceptanceRequirement);
|
|
311
333
|
if (goal.description) task.reason = goal.description;
|
|
312
334
|
const evidence = evidenceByTask.get(goal.id);
|
|
313
335
|
if (evidence) task.evidence = evidence;
|
|
@@ -390,6 +412,15 @@ function applyMutation(
|
|
|
390
412
|
origin: "user",
|
|
391
413
|
userTaskId: mutation.userTaskId,
|
|
392
414
|
};
|
|
415
|
+
if (mutation.verification && mutation.verification.length > 0) {
|
|
416
|
+
picked.requiredValidationEvidence = mutation.verification.map((item, index) => ({
|
|
417
|
+
id: `${picked.id}.acceptance.${index}`,
|
|
418
|
+
description: acceptanceRequirementDescription(item.check),
|
|
419
|
+
command: item.check,
|
|
420
|
+
status: "required",
|
|
421
|
+
notes: `timeoutMs=${item.timeoutMs}`,
|
|
422
|
+
}));
|
|
423
|
+
}
|
|
393
424
|
return {
|
|
394
425
|
board: {
|
|
395
426
|
boardId: board?.boardId ?? "",
|
|
@@ -14,8 +14,7 @@ import { entryBelongsToPath } from "./active-path.js";
|
|
|
14
14
|
* install it as current.
|
|
15
15
|
*
|
|
16
16
|
* Used by SessionContract.fork (current session) and the /fork message
|
|
17
|
-
* picker
|
|
18
|
-
* bundle wiring stays thin.
|
|
17
|
+
* picker overlay. Kept out of extension.ts so the bundle wiring stays thin.
|
|
19
18
|
*/
|
|
20
19
|
export interface ForkInput {
|
|
21
20
|
/** The state we are forking from. Must carry a live writer. */
|
|
@@ -6,7 +6,7 @@ import type { ResolvedLabel } from "./manager.js";
|
|
|
6
6
|
* Purely functional tree-walk helpers. Given the raw SessionTreeNode[] that
|
|
7
7
|
* the engine persists plus a label map and a leaf pointer, produce a
|
|
8
8
|
* render-friendly snapshot. No I/O. Used by SessionContract.tree() to
|
|
9
|
-
* deliver a serializable structure to
|
|
9
|
+
* deliver a serializable structure to the /tree overlay renderer.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DISPATCH_INTENT_TIMEOUT_MIN_MS,
|
|
3
|
+
type DispatchIntentCheckBound,
|
|
4
|
+
type DispatchIntentVerification,
|
|
5
|
+
normalizeIntentExpectedOutputs,
|
|
6
|
+
normalizeIntentVerification,
|
|
7
|
+
} from "../dispatch/intent.js";
|
|
8
|
+
|
|
9
|
+
export interface UserTaskAcceptance {
|
|
10
|
+
expectedOutputs: string[];
|
|
11
|
+
verification: DispatchIntentVerification[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Validate stored acceptance without consulting a catalog that may have changed. */
|
|
15
|
+
export function normalizeUserTaskAcceptance(raw: unknown): UserTaskAcceptance {
|
|
16
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
17
|
+
throw new Error("acceptance must be an object");
|
|
18
|
+
}
|
|
19
|
+
const value = raw as Record<string, unknown>;
|
|
20
|
+
if (Object.keys(value).some((key) => key !== "expectedOutputs" && key !== "verification")) {
|
|
21
|
+
throw new Error("acceptance contains an unknown field");
|
|
22
|
+
}
|
|
23
|
+
if (!Array.isArray(value.expectedOutputs) || !Array.isArray(value.verification)) {
|
|
24
|
+
throw new Error("acceptance requires expectedOutputs and verification arrays");
|
|
25
|
+
}
|
|
26
|
+
const checks = new Map<string, DispatchIntentCheckBound>();
|
|
27
|
+
const rawVerification = value.verification.map((entry: unknown) => {
|
|
28
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
29
|
+
throw new Error("acceptance verification must contain check and timeoutMs");
|
|
30
|
+
}
|
|
31
|
+
const item = entry as Record<string, unknown>;
|
|
32
|
+
if (Object.keys(item).some((key) => key !== "check" && key !== "timeoutMs")) {
|
|
33
|
+
throw new Error("acceptance verification contains an unknown field");
|
|
34
|
+
}
|
|
35
|
+
if (
|
|
36
|
+
typeof item.check !== "string" ||
|
|
37
|
+
typeof item.timeoutMs !== "number" ||
|
|
38
|
+
!Number.isSafeInteger(item.timeoutMs) ||
|
|
39
|
+
item.timeoutMs <= 0
|
|
40
|
+
) {
|
|
41
|
+
throw new Error("acceptance verification requires a check and a positive integer timeoutMs");
|
|
42
|
+
}
|
|
43
|
+
checks.set(item.check.trim(), {
|
|
44
|
+
id: item.check.trim(),
|
|
45
|
+
timeoutMs: Math.max(DISPATCH_INTENT_TIMEOUT_MIN_MS, item.timeoutMs, checks.get(item.check.trim())?.timeoutMs ?? 0),
|
|
46
|
+
});
|
|
47
|
+
return { check: item.check, timeout_ms: item.timeoutMs };
|
|
48
|
+
});
|
|
49
|
+
const expectedOutputs = normalizeIntentExpectedOutputs(value.expectedOutputs);
|
|
50
|
+
if (!Array.isArray(expectedOutputs))
|
|
51
|
+
throw new Error(expectedOutputs.ok ? "invalid acceptance outputs" : expectedOutputs.message);
|
|
52
|
+
const verification = normalizeIntentVerification(rawVerification, checks);
|
|
53
|
+
if (!Array.isArray(verification))
|
|
54
|
+
throw new Error(verification.ok ? "invalid acceptance verification" : verification.message);
|
|
55
|
+
return { expectedOutputs, verification };
|
|
56
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isSessionEntry } from "../session/entries.js";
|
|
2
|
+
import type { TaskBoardSnapshot } from "../session/task-board.js";
|
|
3
|
+
import type { UserTaskAcceptance } from "./acceptance.js";
|
|
4
|
+
import type { UserTask } from "./store.js";
|
|
5
|
+
|
|
6
|
+
/** Keep a task's acceptance through the turn that finishes or blocks its board row. */
|
|
7
|
+
export function activeUserTaskAcceptance(
|
|
8
|
+
tasks: ReadonlyArray<UserTask>,
|
|
9
|
+
board: TaskBoardSnapshot | null,
|
|
10
|
+
sessionId: string | null,
|
|
11
|
+
window: ReadonlyArray<unknown>,
|
|
12
|
+
): UserTaskAcceptance | undefined {
|
|
13
|
+
if (!board || !sessionId) return undefined;
|
|
14
|
+
const touched = new Set<string>();
|
|
15
|
+
for (const entry of window) {
|
|
16
|
+
if (!isSessionEntry(entry) || entry.kind !== "message" || entry.role !== "tool_call") continue;
|
|
17
|
+
if (!entry.payload || typeof entry.payload !== "object") continue;
|
|
18
|
+
const payload = entry.payload as { name?: string; toolName?: string; args?: { action?: string; id?: string } };
|
|
19
|
+
if (
|
|
20
|
+
(payload.name ?? payload.toolName) === "tasks" &&
|
|
21
|
+
payload.args?.id &&
|
|
22
|
+
["done", "block", "drop"].includes(payload.args.action ?? "")
|
|
23
|
+
)
|
|
24
|
+
touched.add(payload.args.id);
|
|
25
|
+
}
|
|
26
|
+
const linked = new Set(
|
|
27
|
+
board.tasks
|
|
28
|
+
.filter((task) => task.status === "pending" || task.status === "active" || touched.has(task.id))
|
|
29
|
+
.map((task) => task.userTaskId),
|
|
30
|
+
);
|
|
31
|
+
const acceptance = tasks
|
|
32
|
+
.filter((task) => task.handedSessionId === sessionId && linked.has(task.id))
|
|
33
|
+
.flatMap((task) => (task.acceptance ? [task.acceptance] : []));
|
|
34
|
+
return acceptance.length > 0
|
|
35
|
+
? {
|
|
36
|
+
expectedOutputs: [...new Set(acceptance.flatMap((item) => item.expectedOutputs))],
|
|
37
|
+
verification: acceptance.flatMap((item) => item.verification),
|
|
38
|
+
}
|
|
39
|
+
: undefined;
|
|
40
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UserTask } from "./store.js";
|
|
2
|
+
|
|
3
|
+
/** The operator-authored pickup turn shared by CLI, slash, and overlay handoffs. */
|
|
4
|
+
export function formatUserTaskHandoff(task: Pick<UserTask, "id" | "title" | "note" | "acceptance">): string {
|
|
5
|
+
const note = task.note ? ` ${task.note}.` : "";
|
|
6
|
+
const acceptance = task.acceptance ? ` Acceptance: ${JSON.stringify(task.acceptance)}.` : "";
|
|
7
|
+
return (
|
|
8
|
+
`Operator task ${task.id}: ${task.title}.${note}${acceptance} ` +
|
|
9
|
+
`Before working this task, call tasks action="pick" id="${task.id}" and confirm its durable session/board link. ` +
|
|
10
|
+
"Use the returned linked tN for start and done; do not replace the pickup with a self-created plan or pick unrelated inbox tasks. " +
|
|
11
|
+
"Respect the task's authorized scope, including proposal-only limits. If pickup fails, report the actual state and stop this task's work. " +
|
|
12
|
+
"After work and required verification, call tasks done on that linked tN with concrete evidence, then tasks list. " +
|
|
13
|
+
`Claim ${task.id} completed only if the linked board row is completed and the durable operator task is done with the same session/board link. ` +
|
|
14
|
+
"Report the IDs, actual state, and verification results or limitations; an unpicked or still-handed task is not done."
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { CLIO_PROJECT_DIR } from "../../core/artifact-paths.js";
|
|
4
4
|
import { atomicWrite } from "../../engine/session.js";
|
|
5
|
+
import { normalizeUserTaskAcceptance, type UserTaskAcceptance } from "./acceptance.js";
|
|
5
6
|
|
|
6
7
|
export const USER_TASKS_FILE_VERSION = 1 as const;
|
|
7
8
|
export const USER_TASKS_RELATIVE_PATH = `${CLIO_PROJECT_DIR}/user-tasks.json`;
|
|
@@ -12,6 +13,7 @@ export interface UserTask {
|
|
|
12
13
|
id: string;
|
|
13
14
|
title: string;
|
|
14
15
|
note?: string;
|
|
16
|
+
acceptance?: UserTaskAcceptance;
|
|
15
17
|
status: UserTaskStatus;
|
|
16
18
|
createdAt: string;
|
|
17
19
|
updatedAt: string;
|
|
@@ -37,7 +39,8 @@ export interface UserTasksStore {
|
|
|
37
39
|
readonly path: string;
|
|
38
40
|
snapshot(): ReadonlyArray<UserTask>;
|
|
39
41
|
get(id: string): UserTask | null;
|
|
40
|
-
add(title: string, note?: string): UserTask;
|
|
42
|
+
add(title: string, note?: string, acceptance?: UserTaskAcceptance): UserTask;
|
|
43
|
+
setAcceptance(id: string, acceptance: UserTaskAcceptance): UserTask;
|
|
41
44
|
hand(id: string, sessionId?: string): UserTask;
|
|
42
45
|
done(id: string): UserTask;
|
|
43
46
|
drop(id: string): UserTask;
|
|
@@ -65,6 +68,7 @@ const TASK_KEYS = new Set([
|
|
|
65
68
|
"id",
|
|
66
69
|
"title",
|
|
67
70
|
"note",
|
|
71
|
+
"acceptance",
|
|
68
72
|
"status",
|
|
69
73
|
"createdAt",
|
|
70
74
|
"updatedAt",
|
|
@@ -86,6 +90,13 @@ function isOptionalString(value: unknown): boolean {
|
|
|
86
90
|
|
|
87
91
|
function isUserTask(value: unknown): value is UserTask {
|
|
88
92
|
if (!isRecord(value) || !hasOnlyKeys(value, TASK_KEYS)) return false;
|
|
93
|
+
if (value.acceptance !== undefined) {
|
|
94
|
+
try {
|
|
95
|
+
normalizeUserTaskAcceptance(value.acceptance);
|
|
96
|
+
} catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
89
100
|
return (
|
|
90
101
|
typeof value.id === "string" &&
|
|
91
102
|
/^u[1-9]\d*$/.test(value.id) &&
|
|
@@ -138,7 +149,7 @@ function parseFile(body: string, path: string): UserTasksFile {
|
|
|
138
149
|
}
|
|
139
150
|
|
|
140
151
|
function copyTask(task: UserTask): UserTask {
|
|
141
|
-
return { ...task };
|
|
152
|
+
return { ...task, ...(task.acceptance ? { acceptance: normalizeUserTaskAcceptance(task.acceptance) } : {}) };
|
|
142
153
|
}
|
|
143
154
|
|
|
144
155
|
function initialFile(): UserTasksFile {
|
|
@@ -219,7 +230,8 @@ export function createUserTasksStore(deps: UserTasksStoreDeps): UserTasksStore {
|
|
|
219
230
|
const task = load().tasks.find((candidate) => candidate.id === id);
|
|
220
231
|
return task ? copyTask(task) : null;
|
|
221
232
|
},
|
|
222
|
-
add(title: string, note?: string): UserTask {
|
|
233
|
+
add(title: string, note?: string, acceptance?: UserTaskAcceptance): UserTask {
|
|
234
|
+
const normalizedAcceptance = acceptance === undefined ? undefined : normalizeAcceptance(acceptance);
|
|
223
235
|
const normalizedTitle = title.trim();
|
|
224
236
|
if (normalizedTitle.length === 0) throw new UserTasksStoreError("operator task title cannot be empty");
|
|
225
237
|
const normalizedNote = note?.trim();
|
|
@@ -229,6 +241,7 @@ export function createUserTasksStore(deps: UserTasksStoreDeps): UserTasksStore {
|
|
|
229
241
|
id: `u${file.nextId}`,
|
|
230
242
|
title: normalizedTitle,
|
|
231
243
|
...(normalizedNote ? { note: normalizedNote } : {}),
|
|
244
|
+
...(normalizedAcceptance ? { acceptance: normalizedAcceptance } : {}),
|
|
232
245
|
status: "open",
|
|
233
246
|
createdAt: timestamp,
|
|
234
247
|
updatedAt: timestamp,
|
|
@@ -238,6 +251,16 @@ export function createUserTasksStore(deps: UserTasksStoreDeps): UserTasksStore {
|
|
|
238
251
|
save(file);
|
|
239
252
|
return copyTask(task);
|
|
240
253
|
},
|
|
254
|
+
setAcceptance(id: string, acceptance: UserTaskAcceptance): UserTask {
|
|
255
|
+
const normalized = normalizeAcceptance(acceptance);
|
|
256
|
+
const file = load();
|
|
257
|
+
const task = file.tasks.find((item) => item.id === id);
|
|
258
|
+
if (!task) throw new UserTasksStoreError(`operator task ${id} was not found`);
|
|
259
|
+
task.acceptance = normalized;
|
|
260
|
+
task.updatedAt = now();
|
|
261
|
+
save(file);
|
|
262
|
+
return copyTask(task);
|
|
263
|
+
},
|
|
241
264
|
hand(id: string, sessionId?: string): UserTask {
|
|
242
265
|
return mutate(id, ["open"], "handed", sessionId);
|
|
243
266
|
},
|
|
@@ -295,3 +318,11 @@ export function createUserTasksStore(deps: UserTasksStoreDeps): UserTasksStore {
|
|
|
295
318
|
},
|
|
296
319
|
};
|
|
297
320
|
}
|
|
321
|
+
|
|
322
|
+
function normalizeAcceptance(raw: unknown): UserTaskAcceptance {
|
|
323
|
+
try {
|
|
324
|
+
return normalizeUserTaskAcceptance(raw);
|
|
325
|
+
} catch (error) {
|
|
326
|
+
throw new UserTasksStoreError(error instanceof Error ? error.message : String(error), { cause: error });
|
|
327
|
+
}
|
|
328
|
+
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type DelegationAgentConfig,
|
|
6
6
|
} from "../../core/defaults.js";
|
|
7
7
|
import type { HeartbeatStamp } from "../../domains/dispatch/heartbeat.js";
|
|
8
|
+
import { resolveCostProvenance } from "../../domains/providers/types/cost-provenance.js";
|
|
8
9
|
import type { AutonomyLevel } from "../../domains/safety/autonomy.js";
|
|
9
10
|
import type { SafetyContract } from "../../domains/safety/contract.js";
|
|
10
11
|
import type { AgentEvent } from "../types.js";
|
|
@@ -134,13 +135,16 @@ function flattenPrompt(input: AcpDelegationRunInput): string {
|
|
|
134
135
|
return parts.join("\n\n");
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
function emptyUsage(): AcpDelegationUsage {
|
|
138
|
+
export function emptyUsage(): AcpDelegationUsage {
|
|
138
139
|
return {
|
|
140
|
+
tokensReported: false,
|
|
139
141
|
inputTokens: 0,
|
|
140
142
|
outputTokens: 0,
|
|
141
143
|
cacheReadTokens: 0,
|
|
142
144
|
cacheWriteTokens: 0,
|
|
143
145
|
reasoningTokens: 0,
|
|
146
|
+
totalTokens: 0,
|
|
147
|
+
costUsd: 0,
|
|
144
148
|
};
|
|
145
149
|
}
|
|
146
150
|
|
|
@@ -148,13 +152,59 @@ function finite(value: unknown): number {
|
|
|
148
152
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
149
153
|
}
|
|
150
154
|
|
|
151
|
-
|
|
155
|
+
/** Presence matters: an explicit zero must not fall back to another observation. */
|
|
156
|
+
function nonnegative(value: unknown): number | undefined {
|
|
157
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export function mergeUsage(into: AcpDelegationUsage, raw: unknown): void {
|
|
152
161
|
if (!isRecord(raw)) return;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
162
|
+
const tokensReported = [
|
|
163
|
+
raw.input,
|
|
164
|
+
raw.inputTokens,
|
|
165
|
+
raw.input_tokens,
|
|
166
|
+
raw.output,
|
|
167
|
+
raw.outputTokens,
|
|
168
|
+
raw.output_tokens,
|
|
169
|
+
raw.cacheRead,
|
|
170
|
+
raw.cacheReadTokens,
|
|
171
|
+
raw.cache_read_tokens,
|
|
172
|
+
raw.cacheWrite,
|
|
173
|
+
raw.cacheWriteTokens,
|
|
174
|
+
raw.cache_write_tokens,
|
|
175
|
+
raw.reasoning,
|
|
176
|
+
raw.reasoningTokens,
|
|
177
|
+
raw.reasoning_tokens,
|
|
178
|
+
raw.totalTokens,
|
|
179
|
+
raw.total_tokens,
|
|
180
|
+
].some((value) => nonnegative(value) !== undefined);
|
|
181
|
+
into.tokensReported ||= tokensReported;
|
|
182
|
+
const input = finite(raw.input) + finite(raw.inputTokens) + finite(raw.input_tokens);
|
|
183
|
+
const output = finite(raw.output) + finite(raw.outputTokens) + finite(raw.output_tokens);
|
|
184
|
+
const cacheRead = finite(raw.cacheRead) + finite(raw.cacheReadTokens) + finite(raw.cache_read_tokens);
|
|
185
|
+
const cacheWrite = finite(raw.cacheWrite) + finite(raw.cacheWriteTokens) + finite(raw.cache_write_tokens);
|
|
186
|
+
into.inputTokens += input;
|
|
187
|
+
into.outputTokens += output;
|
|
188
|
+
into.cacheReadTokens += cacheRead;
|
|
189
|
+
into.cacheWriteTokens += cacheWrite;
|
|
157
190
|
into.reasoningTokens += finite(raw.reasoning) + finite(raw.reasoningTokens) + finite(raw.reasoning_tokens);
|
|
191
|
+
// Prefer the peer's explicit total, including zero,
|
|
192
|
+
// otherwise sum the four billed categories (reasoning excluded, since a peer
|
|
193
|
+
// that reports it separately still counts it inside output).
|
|
194
|
+
const explicitTotal = nonnegative(raw.totalTokens) ?? nonnegative(raw.total_tokens);
|
|
195
|
+
into.totalTokens += explicitTotal ?? input + output + cacheRead + cacheWrite;
|
|
196
|
+
// Clio metadata uses costUsd; legacy message usage uses cost.total. These
|
|
197
|
+
// are alternate representations of one amount, never additive sources.
|
|
198
|
+
const cost = (isRecord(raw.cost) ? nonnegative(raw.cost.total) : undefined) ?? nonnegative(raw.costUsd);
|
|
199
|
+
into.costUsd += cost ?? 0;
|
|
200
|
+
if (tokensReported || cost !== undefined) {
|
|
201
|
+
const provenance = cost === undefined ? "unknown" : resolveCostProvenance(raw.costProvenance, "unknown");
|
|
202
|
+
const previous = into.costProvenance;
|
|
203
|
+
if (previous === undefined || previous === provenance) into.costProvenance = provenance;
|
|
204
|
+
else if (previous === "unknown" || provenance === "unknown") into.costProvenance = "unknown";
|
|
205
|
+
else if (previous === "estimated" || provenance === "estimated") into.costProvenance = "estimated";
|
|
206
|
+
else into.costProvenance = "known";
|
|
207
|
+
}
|
|
158
208
|
}
|
|
159
209
|
|
|
160
210
|
function errorMessage(value: unknown): string {
|
|
@@ -177,9 +227,9 @@ function errorEvents(messageText: string): AgentEvent[] {
|
|
|
177
227
|
}
|
|
178
228
|
|
|
179
229
|
export function startAcpDelegationRun(input: AcpDelegationRunInput): AcpDelegationRunHandle {
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
//
|
|
230
|
+
// Connection faults stay bounded. Elapsed turn time is not a progress signal;
|
|
231
|
+
// only an explicit positive timeout stops a healthy turn. Dispatch owns its
|
|
232
|
+
// event-inactivity watchdog and cancellation/process cleanup.
|
|
183
233
|
const connectTimeoutMs = input.agent.connectTimeoutMs ?? DEFAULT_DELEGATION_CONNECT_TIMEOUT_MS;
|
|
184
234
|
const turnTimeoutMs = input.agent.turnTimeoutMs ?? DEFAULT_DELEGATION_TURN_TIMEOUT_MS;
|
|
185
235
|
const now = input.now ?? Date.now;
|
|
@@ -304,7 +354,7 @@ export function startAcpDelegationRun(input: AcpDelegationRunInput): AcpDelegati
|
|
|
304
354
|
sessionId,
|
|
305
355
|
prompt: [{ type: "text", text: flattenPrompt(input) }],
|
|
306
356
|
},
|
|
307
|
-
turnTimeoutMs,
|
|
357
|
+
turnTimeoutMs === 0 ? undefined : turnTimeoutMs,
|
|
308
358
|
);
|
|
309
359
|
// ACP v1 has no usage field on PromptResponse. Clio servers report it in
|
|
310
360
|
// _meta; other agents (Copilot/Codex/OpenCode) report nothing here, so usage
|
package/src/engine/acp/server.ts
CHANGED
|
@@ -60,7 +60,7 @@ export interface AcpServerChat {
|
|
|
60
60
|
onEvent(handler: (event: AcpServerEvent) => void): () => void;
|
|
61
61
|
isStreaming(): boolean;
|
|
62
62
|
getSessionId(): string | null;
|
|
63
|
-
/** Replace provider context and the next persisted parent
|
|
63
|
+
/** Replace provider context and the next persisted parent for a new or loaded session. */
|
|
64
64
|
resetForSession?(leafTurnId: string | null, replayMessages?: ReadonlyArray<AgentMessage>): void;
|
|
65
65
|
dispose?(): void;
|
|
66
66
|
}
|
|
@@ -268,6 +268,7 @@ const ACP_ADMISSION_REASONS = new Set([
|
|
|
268
268
|
"model-not-configured",
|
|
269
269
|
"chat-unsupported",
|
|
270
270
|
"streaming-unsupported",
|
|
271
|
+
"context-window-exceeded",
|
|
271
272
|
"admission-failed",
|
|
272
273
|
]);
|
|
273
274
|
|
|
@@ -1406,6 +1407,7 @@ function installPermissionBridge(input: {
|
|
|
1406
1407
|
toolCallSnapshot: (wireId: string) => AcpToolCallSnapshot | null;
|
|
1407
1408
|
permissionTimeoutMs: number;
|
|
1408
1409
|
expireActivePrompt: () => void;
|
|
1410
|
+
cancelActivePrompt: (reason: string) => void;
|
|
1409
1411
|
}): AcpPermissionBridge {
|
|
1410
1412
|
if (!input.toolRegistry) return { unregister: () => {}, cancelPending: () => {} };
|
|
1411
1413
|
let pendingCancel: ((reason: string) => void) | null = null;
|
|
@@ -1573,6 +1575,17 @@ function installPermissionBridge(input: {
|
|
|
1573
1575
|
// client mint `allow-always` and get a grant this server never
|
|
1574
1576
|
// offered as an option.
|
|
1575
1577
|
const answer = outcome.response.outcome;
|
|
1578
|
+
if (answer.outcome === "cancelled") {
|
|
1579
|
+
const reason = "ACP client cancelled permission";
|
|
1580
|
+
// Abort before releasing the parked tools so their results cannot
|
|
1581
|
+
// start another model request while session/cancel is in flight.
|
|
1582
|
+
input.cancelActivePrompt(reason);
|
|
1583
|
+
emitResolution({ status: "denied", decidedBy: "cancelled", reason });
|
|
1584
|
+
queuedRequestIds.clear();
|
|
1585
|
+
queuedRequestDetails.clear();
|
|
1586
|
+
input.toolRegistry?.cancelParkedCalls(reason);
|
|
1587
|
+
return;
|
|
1588
|
+
}
|
|
1576
1589
|
if (answer.outcome === "selected" && answer.optionId === "allow-once") {
|
|
1577
1590
|
emitResolution({ status: "granted", decidedBy: "acp-client" });
|
|
1578
1591
|
await input.toolRegistry?.resumeParkedCalls({
|
|
@@ -1695,6 +1708,10 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
1695
1708
|
activePromptState.permissionExpired = true;
|
|
1696
1709
|
options.chat.cancel();
|
|
1697
1710
|
},
|
|
1711
|
+
cancelActivePrompt: (reason) => {
|
|
1712
|
+
const session = activeSessionId === null ? undefined : sessions.get(activeSessionId);
|
|
1713
|
+
if (session) cancelSession(session, reason);
|
|
1714
|
+
},
|
|
1698
1715
|
});
|
|
1699
1716
|
/**
|
|
1700
1717
|
* Sends one frame of the opt-in stream. Every forwarded channel goes through
|
|
@@ -2128,9 +2145,8 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2128
2145
|
|
|
2129
2146
|
options.transport.onRequest("session/new", (params) => {
|
|
2130
2147
|
requireInitialized();
|
|
2131
|
-
//
|
|
2132
|
-
// session
|
|
2133
|
-
// so the honest answer is to refuse and let the client start a process.
|
|
2148
|
+
// The chat instance can bind only one session at a time. Closing that
|
|
2149
|
+
// session releases the slot; the next creation resets its conversation.
|
|
2134
2150
|
if (sessionCreated) {
|
|
2135
2151
|
throw new AcpRequestError(-32000, "this server hosts one session per process", { code: "session_limit" });
|
|
2136
2152
|
}
|
|
@@ -2144,6 +2160,7 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2144
2160
|
if (safeStoredIdentifier(id, ACP_MAX_SESSION_ID_BYTES) === null) {
|
|
2145
2161
|
throw new AcpRequestError(-32000, "session creation failed", { code: "internal_error" });
|
|
2146
2162
|
}
|
|
2163
|
+
options.chat.resetForSession?.(null);
|
|
2147
2164
|
const autonomy = options.autonomy?.() ?? DEFAULT_AUTONOMY_LEVEL;
|
|
2148
2165
|
const boundTarget = safeConfiguredIdentifier(meta?.target ?? route.target, ACP_MAX_TARGET_ID_BYTES);
|
|
2149
2166
|
const boundModel = safeConfiguredIdentifier(meta?.model ?? route.model, ACP_MAX_MODEL_ID_BYTES);
|
|
@@ -2529,6 +2546,7 @@ export async function serveClioAcpAgent(options: ClioAcpServerOptions): Promise<
|
|
|
2529
2546
|
if (options.session?.current()?.id === session.id) await options.session.close();
|
|
2530
2547
|
sessions.delete(session.id);
|
|
2531
2548
|
if (boundSessionId === session.id) boundSessionId = null;
|
|
2549
|
+
sessionCreated = false;
|
|
2532
2550
|
closedSessionIds.add(session.id);
|
|
2533
2551
|
return {};
|
|
2534
2552
|
});
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
reportCommitAttributionDiagnostic,
|
|
7
7
|
withManagedGitCommitAttributionEnvironment,
|
|
8
8
|
} from "../../core/git-commit-attribution.js";
|
|
9
|
+
import { buildSafeToolEnv } from "../../core/safe-exec.js";
|
|
9
10
|
import { MAX_TIMER_DELAY_MS } from "../../core/timers.js";
|
|
10
11
|
import {
|
|
11
12
|
ACP_INTERNAL_ERROR_MESSAGE,
|
|
@@ -207,7 +208,7 @@ class StdioJsonRpcTransport implements AcpJsonRpcTransport {
|
|
|
207
208
|
this.childClosePromise = new Promise((resolve) => {
|
|
208
209
|
this.resolveChildClose = resolve;
|
|
209
210
|
});
|
|
210
|
-
const childEnvironment = options.env
|
|
211
|
+
const childEnvironment = buildSafeToolEnv(options.env);
|
|
211
212
|
// A delegated external harness authors its own commits. Clio only
|
|
212
213
|
// assisted by delegating, so no Co-authored-by is claimed for it.
|
|
213
214
|
const attribution = withManagedGitCommitAttributionEnvironment(childEnvironment, {
|
|
@@ -534,6 +535,10 @@ export function createStdioTransport(
|
|
|
534
535
|
}
|
|
535
536
|
|
|
536
537
|
class StreamJsonRpcPeerTransport implements AcpJsonRpcPeerTransport {
|
|
538
|
+
private outputPaused = false;
|
|
539
|
+
private queuedOutputBytes = 0;
|
|
540
|
+
private sinkOutputBytes = 0;
|
|
541
|
+
private readonly outputQueue: string[] = [];
|
|
537
542
|
private nextId = 1;
|
|
538
543
|
private buffer = "";
|
|
539
544
|
/** True while the bytes of an oversized line are being dropped up to its terminating newline. */
|
|
@@ -626,18 +631,56 @@ class StreamJsonRpcPeerTransport implements AcpJsonRpcPeerTransport {
|
|
|
626
631
|
}
|
|
627
632
|
|
|
628
633
|
private write(message: AcpJsonRpcMessage): void {
|
|
634
|
+
if (this.closed) return;
|
|
629
635
|
const line = `${JSON.stringify(message)}\n`;
|
|
630
|
-
if (this.
|
|
631
|
-
|
|
632
|
-
|
|
636
|
+
if (this.outputPaused) {
|
|
637
|
+
const bytes = Buffer.byteLength(line, "utf8");
|
|
638
|
+
// Include bytes already held by the sink in the existing frame budget.
|
|
639
|
+
if (this.queuedOutputBytes + this.sinkOutputBytes + bytes > ACP_MAX_INPUT_LINE_BYTES) {
|
|
640
|
+
this.markClosed(new AcpProcessError("ACP output buffer exceeded byte limit"));
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
633
643
|
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
// C001 §6 leaves stdout backpressure out of this profile).
|
|
638
|
-
this.output.write(line);
|
|
644
|
+
this.outputQueue.push(line);
|
|
645
|
+
this.queuedOutputBytes += Buffer.byteLength(line, "utf8");
|
|
646
|
+
if (!this.outputPaused) this.flushOutput();
|
|
639
647
|
}
|
|
640
648
|
|
|
649
|
+
private readonly flushOutput = (): void => {
|
|
650
|
+
this.outputPaused = false;
|
|
651
|
+
while (!this.closed && !this.outputPaused && this.outputQueue.length > 0) {
|
|
652
|
+
const line = this.outputQueue.shift();
|
|
653
|
+
if (line === undefined) break;
|
|
654
|
+
this.queuedOutputBytes -= Buffer.byteLength(line, "utf8");
|
|
655
|
+
try {
|
|
656
|
+
// Stdout can count buffered strings in UTF-16 units rather than bytes.
|
|
657
|
+
// Retain their byte count until drain, bounding earlier writes by at
|
|
658
|
+
// most three UTF-8 bytes per unit still held by the sink.
|
|
659
|
+
this.sinkOutputBytes = Math.min(this.sinkOutputBytes, this.output.writableLength * 3);
|
|
660
|
+
let ready: boolean;
|
|
661
|
+
if (this.writeOverride) {
|
|
662
|
+
this.writeOverride(line);
|
|
663
|
+
// The stdout guard writes to this sink but does not return write's boolean.
|
|
664
|
+
ready = !this.output.writableNeedDrain;
|
|
665
|
+
} else {
|
|
666
|
+
ready = this.output.write(line);
|
|
667
|
+
}
|
|
668
|
+
this.sinkOutputBytes =
|
|
669
|
+
this.output.writableLength === 0 ? 0 : this.sinkOutputBytes + Buffer.byteLength(line, "utf8");
|
|
670
|
+
if (!ready && !this.closed) {
|
|
671
|
+
if (this.queuedOutputBytes + this.sinkOutputBytes > ACP_MAX_INPUT_LINE_BYTES) {
|
|
672
|
+
this.markClosed(new AcpProcessError("ACP output buffer exceeded byte limit"));
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
this.outputPaused = true;
|
|
676
|
+
this.output.once("drain", this.flushOutput);
|
|
677
|
+
}
|
|
678
|
+
} catch (err) {
|
|
679
|
+
this.markClosed(new AcpProcessError(`ACP output write failed: ${errorMessage(err)}`));
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
|
|
641
684
|
private consume(chunk: string): void {
|
|
642
685
|
this.buffer += chunk;
|
|
643
686
|
for (;;) {
|
|
@@ -757,6 +800,9 @@ class StreamJsonRpcPeerTransport implements AcpJsonRpcPeerTransport {
|
|
|
757
800
|
private markClosed(reason: unknown): void {
|
|
758
801
|
if (this.isClosed) return;
|
|
759
802
|
this.isClosed = true;
|
|
803
|
+
this.output.removeListener("drain", this.flushOutput);
|
|
804
|
+
this.outputQueue.length = 0;
|
|
805
|
+
this.queuedOutputBytes = 0;
|
|
760
806
|
this.failAll(reason);
|
|
761
807
|
for (const handler of this.closeHandlers) handler();
|
|
762
808
|
}
|
package/src/engine/acp/types.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CostProvenance } from "../../domains/providers/types/cost-provenance.js";
|
|
1
2
|
import type { AgentMessage } from "../types.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -189,11 +190,19 @@ export interface AcpPromptResponse {
|
|
|
189
190
|
}
|
|
190
191
|
|
|
191
192
|
export interface AcpDelegationUsage {
|
|
193
|
+
/** A valid peer token field was present, including an explicit zero. */
|
|
194
|
+
tokensReported: boolean;
|
|
192
195
|
inputTokens: number;
|
|
193
196
|
outputTokens: number;
|
|
194
197
|
cacheReadTokens: number;
|
|
195
198
|
cacheWriteTokens: number;
|
|
196
199
|
reasoningTokens: number;
|
|
200
|
+
/** Peer-reported total when present, otherwise input+output+cacheRead+cacheWrite, matching the ACP server side. */
|
|
201
|
+
totalTokens: number;
|
|
202
|
+
/** Sum of peer cost.total (legacy) or costUsd (Clio metadata); never re-priced. */
|
|
203
|
+
costUsd: number;
|
|
204
|
+
/** Absent until usage is reported; missing or unsupported pricing provenance stays unknown. */
|
|
205
|
+
costProvenance?: CostProvenance;
|
|
197
206
|
}
|
|
198
207
|
|
|
199
208
|
export interface AcpDelegationResult {
|