@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
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
1
2
|
import type { AskUserToolPolicy } from "../../tools/registry.js";
|
|
2
3
|
import type { AutonomyExposure } from "../safety/autonomy.js";
|
|
3
|
-
import type
|
|
4
|
+
import { type DecisionLedgerEntry, type DecisionRecord, type DecisionSource, decisionRef } from "./entries.js";
|
|
4
5
|
|
|
5
6
|
export interface DecisionLedgerEntryFields {
|
|
6
7
|
kind: "decisionLedger";
|
|
7
8
|
parentTurnId: string;
|
|
9
|
+
origin?: "interview" | "agent";
|
|
8
10
|
interviewId: string;
|
|
9
11
|
interviewStatus: "complete" | "cancelled";
|
|
10
12
|
startedAt: string;
|
|
@@ -28,11 +30,35 @@ export interface DecisionBoardStoreDeps {
|
|
|
28
30
|
now?: () => Date;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
/** One design choice the model records itself through the `decide` tool. */
|
|
34
|
+
export interface AgentDecisionInput {
|
|
35
|
+
key: string;
|
|
36
|
+
value: string;
|
|
37
|
+
alternatives: ReadonlyArray<string>;
|
|
38
|
+
rationale: string;
|
|
39
|
+
label?: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface AgentDecisionOutcome {
|
|
43
|
+
/** The appended agent decision set; `decisionRef(entry.interviewId, key)` cites it. */
|
|
44
|
+
entry: DecisionLedgerEntryFields;
|
|
45
|
+
/** The earlier active record with the same key that this decision superseded, when there was one. */
|
|
46
|
+
superseded: { interviewId: string; key: string } | null;
|
|
47
|
+
}
|
|
48
|
+
|
|
31
49
|
export interface DecisionBoardStore {
|
|
32
50
|
/** Latest snapshot per interview, newest interview first. */
|
|
33
51
|
snapshot(): ReadonlyArray<DecisionLedgerEntry>;
|
|
34
52
|
/** Persist the one host-finalized snapshot for a settled interview. */
|
|
35
53
|
recordFinalizedInterview(policy: AskUserToolPolicy): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Append one agent-recorded decision as its own complete set
|
|
56
|
+
* (`origin: "agent"`, `interviewId: "agent:<uuid>"`, `roundCount: 0`). An
|
|
57
|
+
* earlier active agent decision with the same key is superseded first with
|
|
58
|
+
* the new rationale as its correction. An active operator decision with the
|
|
59
|
+
* same key is never overwritten by the model; that throws.
|
|
60
|
+
*/
|
|
61
|
+
recordAgentDecision(input: AgentDecisionInput): AgentDecisionOutcome;
|
|
36
62
|
/** Append an operator revision snapshot anchored to the active branch leaf. */
|
|
37
63
|
supersede(interviewId: string, key: string, correction?: string): DecisionLedgerEntryFields;
|
|
38
64
|
/** Force the next read to refold, including after a same-session tree switch. */
|
|
@@ -90,6 +116,24 @@ function finalizedInterviewEntryFields(policy: AskUserToolPolicy): DecisionLedge
|
|
|
90
116
|
};
|
|
91
117
|
}
|
|
92
118
|
|
|
119
|
+
/** Most decision refs one dispatch request, envelope, or receipt carries. */
|
|
120
|
+
export const DECISION_REFS_CAP = 32;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Refs of every active decision on a board snapshot, sorted and capped at
|
|
124
|
+
* {@link DECISION_REFS_CAP}. Dispatch seals this onto each request it builds;
|
|
125
|
+
* an empty board yields an empty list, which callers leave off the request.
|
|
126
|
+
*/
|
|
127
|
+
export function activeDecisionRefs(board: ReadonlyArray<DecisionLedgerEntry>): string[] {
|
|
128
|
+
const refs = new Set<string>();
|
|
129
|
+
for (const entry of board) {
|
|
130
|
+
for (const decision of entry.decisions) {
|
|
131
|
+
if (decision.status === "active") refs.add(decisionRef(entry.interviewId, decision.key));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return [...refs].sort().slice(0, DECISION_REFS_CAP);
|
|
135
|
+
}
|
|
136
|
+
|
|
93
137
|
function isDecisionLedgerEntry(value: unknown): value is DecisionLedgerEntry {
|
|
94
138
|
return !!value && typeof value === "object" && (value as { kind?: unknown }).kind === "decisionLedger";
|
|
95
139
|
}
|
|
@@ -143,7 +187,47 @@ export function createDecisionBoardStore(deps: DecisionBoardStoreDeps = {}): Dec
|
|
|
143
187
|
dirty = true;
|
|
144
188
|
};
|
|
145
189
|
|
|
146
|
-
|
|
190
|
+
const revise = (
|
|
191
|
+
interviewId: string,
|
|
192
|
+
key: string,
|
|
193
|
+
revisionSource: DecisionSource,
|
|
194
|
+
correction?: string,
|
|
195
|
+
): DecisionLedgerEntryFields => {
|
|
196
|
+
syncToSession();
|
|
197
|
+
const interview = interviews.find((candidate) => candidate.interviewId === interviewId);
|
|
198
|
+
if (!interview) throw new Error(`decision board: interview ${interviewId} was not found on the active branch`);
|
|
199
|
+
const selected = interview.decisions.find((decision) => decision.key === key);
|
|
200
|
+
if (!selected) throw new Error(`decision board: decision ${key} was not found in interview ${interviewId}`);
|
|
201
|
+
const revisedAt = (deps.now?.() ?? new Date()).toISOString();
|
|
202
|
+
const normalizedCorrection = correction?.trim();
|
|
203
|
+
const entries = deps.readEntries?.() ?? [];
|
|
204
|
+
const parentTurnId = deps.getActiveLeafTurnId?.() ?? activeLeafFromEntries(entries);
|
|
205
|
+
if (!parentTurnId) throw new Error("decision board: no active branch leaf is available for the revision");
|
|
206
|
+
const revision: DecisionLedgerEntryFields = {
|
|
207
|
+
kind: "decisionLedger",
|
|
208
|
+
parentTurnId,
|
|
209
|
+
...(interview.origin !== undefined ? { origin: interview.origin } : {}),
|
|
210
|
+
interviewId: interview.interviewId,
|
|
211
|
+
interviewStatus: interview.interviewStatus,
|
|
212
|
+
startedAt: interview.startedAt,
|
|
213
|
+
endedAt: interview.endedAt,
|
|
214
|
+
roundCount: interview.roundCount,
|
|
215
|
+
...(interview.summary ? { summary: interview.summary } : {}),
|
|
216
|
+
...(interview.transcriptPath ? { transcriptPath: interview.transcriptPath } : {}),
|
|
217
|
+
...(interview.exposure ? { exposure: interview.exposure } : {}),
|
|
218
|
+
decisions: interview.decisions.map((decision) => {
|
|
219
|
+
if (decision.key !== selected.key) return { ...decision };
|
|
220
|
+
const next: DecisionRecord = { ...decision, status: "superseded", revisedAt, revisionSource };
|
|
221
|
+
if (normalizedCorrection) next.correction = normalizedCorrection;
|
|
222
|
+
else delete next.correction;
|
|
223
|
+
return next;
|
|
224
|
+
}),
|
|
225
|
+
};
|
|
226
|
+
append(revision);
|
|
227
|
+
return revision;
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
const store: DecisionBoardStore = {
|
|
147
231
|
snapshot(): ReadonlyArray<DecisionLedgerEntry> {
|
|
148
232
|
syncToSession();
|
|
149
233
|
return interviews;
|
|
@@ -154,41 +238,66 @@ export function createDecisionBoardStore(deps: DecisionBoardStoreDeps = {}): Dec
|
|
|
154
238
|
append(entry);
|
|
155
239
|
return true;
|
|
156
240
|
},
|
|
157
|
-
|
|
241
|
+
recordAgentDecision(input: AgentDecisionInput): AgentDecisionOutcome {
|
|
158
242
|
syncToSession();
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
243
|
+
let superseded: AgentDecisionOutcome["superseded"] = null;
|
|
244
|
+
for (const interview of interviews) {
|
|
245
|
+
const prior = interview.decisions.find((decision) => decision.key === input.key && decision.status === "active");
|
|
246
|
+
if (prior === undefined) continue;
|
|
247
|
+
if (interview.origin !== "agent" || prior.source !== "agent") {
|
|
248
|
+
throw new Error(
|
|
249
|
+
`decision board: '${input.key}' is an operator decision (${interview.interviewId}); it can only be revised through ask_user`,
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
superseded = { interviewId: interview.interviewId, key: prior.key };
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
if (superseded !== null) revise(superseded.interviewId, superseded.key, "agent", input.rationale);
|
|
256
|
+
const now = (deps.now?.() ?? new Date()).toISOString();
|
|
165
257
|
const entries = deps.readEntries?.() ?? [];
|
|
166
258
|
const parentTurnId = deps.getActiveLeafTurnId?.() ?? activeLeafFromEntries(entries);
|
|
167
|
-
if (!parentTurnId) throw new Error("decision board: no active branch leaf is available for the
|
|
168
|
-
const
|
|
259
|
+
if (!parentTurnId) throw new Error("decision board: no active branch leaf is available for the decision");
|
|
260
|
+
const entry: DecisionLedgerEntryFields = {
|
|
169
261
|
kind: "decisionLedger",
|
|
170
262
|
parentTurnId,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
263
|
+
origin: "agent",
|
|
264
|
+
interviewId: `agent:${randomUUID()}`,
|
|
265
|
+
interviewStatus: "complete",
|
|
266
|
+
startedAt: now,
|
|
267
|
+
endedAt: now,
|
|
268
|
+
roundCount: 0,
|
|
269
|
+
exposure: "local",
|
|
270
|
+
decisions: [
|
|
271
|
+
{
|
|
272
|
+
key: input.key,
|
|
273
|
+
value: input.value,
|
|
274
|
+
...(input.label ? { label: input.label } : {}),
|
|
275
|
+
status: "active",
|
|
276
|
+
decidedAt: now,
|
|
277
|
+
source: "agent",
|
|
278
|
+
alternatives: [...input.alternatives],
|
|
279
|
+
rationale: input.rationale,
|
|
280
|
+
},
|
|
281
|
+
],
|
|
186
282
|
};
|
|
187
|
-
append(
|
|
188
|
-
return
|
|
283
|
+
append(entry);
|
|
284
|
+
return { entry, superseded };
|
|
285
|
+
},
|
|
286
|
+
supersede(interviewId: string, key: string, correction?: string): DecisionLedgerEntryFields {
|
|
287
|
+
return revise(interviewId, key, "operator", correction);
|
|
189
288
|
},
|
|
190
289
|
invalidate(): void {
|
|
191
290
|
dirty = true;
|
|
192
291
|
},
|
|
193
292
|
};
|
|
293
|
+
return store;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/** Preserve the recorded argument wherever a decision is carried into another prompt. */
|
|
297
|
+
export function decisionRationale(decision: DecisionRecord): string | undefined {
|
|
298
|
+
const parts: string[] = [];
|
|
299
|
+
if (decision.alternatives?.length) parts.push(`Alternatives: ${decision.alternatives.join("; ")}`);
|
|
300
|
+
if (decision.rationale) parts.push(`Rationale: ${decision.rationale}`);
|
|
301
|
+
if (parts.length > 0) return parts.join(". ");
|
|
302
|
+
return decision.source_question ?? decision.correction;
|
|
194
303
|
}
|
|
@@ -5,13 +5,18 @@
|
|
|
5
5
|
* carries its `kind` discriminant, a `turnId` (uuid v7 where possible so
|
|
6
6
|
* entries sort by creation), a parent pointer, and an ISO timestamp.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* - compactionSummary is produced by compaction/compact.ts
|
|
10
|
-
* - branchSummary is produced by the fork path
|
|
11
|
-
* - bashExecution
|
|
8
|
+
* Non-message kinds and where they come from:
|
|
9
|
+
* - compactionSummary is produced by compaction/compact.ts.
|
|
10
|
+
* - branchSummary is produced by the fork path.
|
|
11
|
+
* - bashExecution is produced by the editor bash path
|
|
12
|
+
* (interactive/editor-bash.ts).
|
|
13
|
+
* - fileEntry is consumed by the renderer, compaction, handoff, and
|
|
14
|
+
* evidence builders but has no in-tree producer.
|
|
12
15
|
*/
|
|
13
16
|
|
|
14
|
-
import {
|
|
17
|
+
import { createHash } from "node:crypto";
|
|
18
|
+
|
|
19
|
+
import { isSkillActivation, type PendingSkillToolPolicy, type SkillActivation } from "../../core/skill-activation.js";
|
|
15
20
|
import type { ClioTurnRecord } from "../../engine/session.js";
|
|
16
21
|
import { AUTONOMY_EXPOSURES, type AutonomyExposure } from "../safety/autonomy.js";
|
|
17
22
|
|
|
@@ -116,8 +121,159 @@ export interface CompactionUsage {
|
|
|
116
121
|
apiCalls: number;
|
|
117
122
|
}
|
|
118
123
|
|
|
124
|
+
/** Exact historical skill context, independent of generated checkpoint prose. */
|
|
125
|
+
export interface PreservedSkillContext {
|
|
126
|
+
activationRef: string;
|
|
127
|
+
requestRef: string;
|
|
128
|
+
callRef: string;
|
|
129
|
+
resultRef: string;
|
|
130
|
+
activation: SkillActivation;
|
|
131
|
+
requestText: string;
|
|
132
|
+
content: Array<{ type: "text"; text: string }>;
|
|
133
|
+
/** Hash of the captured rendered text blocks, not the raw SKILL.md hash. */
|
|
134
|
+
contentHash: string;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export interface SkillContextCheckpoint {
|
|
138
|
+
version: 1;
|
|
139
|
+
skills: PreservedSkillContext[];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export const SKILL_CONTEXT_STATE = "skillContextState";
|
|
143
|
+
export interface SkillContextState {
|
|
144
|
+
version: 1;
|
|
145
|
+
/** Empty is an explicit off/replacement; absence is unknown legacy state. */
|
|
146
|
+
activationRefs: string[];
|
|
147
|
+
unknown?: true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export function skillContextContentHash(content: PreservedSkillContext["content"]): string {
|
|
151
|
+
return createHash("sha256").update(JSON.stringify(content)).digest("hex");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function isSkillContextState(value: unknown): value is SkillContextState {
|
|
155
|
+
return (
|
|
156
|
+
isRecord(value) &&
|
|
157
|
+
value.version === 1 &&
|
|
158
|
+
(value.unknown === undefined || value.unknown === true) &&
|
|
159
|
+
Array.isArray(value.activationRefs) &&
|
|
160
|
+
value.activationRefs.every((ref) => typeof ref === "string")
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Ledger validation is structural; bad evidence must not make the session unreadable. */
|
|
165
|
+
function isSkillContextCheckpoint(value: unknown): value is SkillContextCheckpoint {
|
|
166
|
+
return (
|
|
167
|
+
isRecord(value) &&
|
|
168
|
+
value.version === 1 &&
|
|
169
|
+
Array.isArray(value.skills) &&
|
|
170
|
+
value.skills.every(
|
|
171
|
+
(skill: unknown) =>
|
|
172
|
+
isRecord(skill) &&
|
|
173
|
+
[skill.activationRef, skill.requestRef, skill.callRef, skill.resultRef, skill.requestText, skill.contentHash].every(
|
|
174
|
+
isString,
|
|
175
|
+
) &&
|
|
176
|
+
isSkillActivation(skill.activation) &&
|
|
177
|
+
Array.isArray(skill.content) &&
|
|
178
|
+
skill.content.every((block: unknown) => isRecord(block) && block.type === "text" && typeof block.text === "string"),
|
|
179
|
+
)
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function verifiedSkillContextCheckpoint(value: unknown): value is SkillContextCheckpoint {
|
|
184
|
+
if (!isSkillContextCheckpoint(value)) return false;
|
|
185
|
+
const refs = new Set<string>();
|
|
186
|
+
const names = new Set<string>();
|
|
187
|
+
return value.skills.every((skill) => {
|
|
188
|
+
const activation = skill.activation;
|
|
189
|
+
if (
|
|
190
|
+
![skill.activationRef, skill.requestRef, skill.callRef, skill.resultRef].every((ref) => ref.length > 0) ||
|
|
191
|
+
activation.runId !== undefined ||
|
|
192
|
+
activation.triggeredBy !== "tool" ||
|
|
193
|
+
activation.turnId !== skill.requestRef ||
|
|
194
|
+
!activation.name ||
|
|
195
|
+
!activation.filePath ||
|
|
196
|
+
!activation.source ||
|
|
197
|
+
!activation.sourceOrigin ||
|
|
198
|
+
!/^[a-f0-9]{64}$/.test(activation.hash) ||
|
|
199
|
+
(activation.drift !== undefined && activation.drift !== "match") ||
|
|
200
|
+
skill.content.length === 0 ||
|
|
201
|
+
skill.content.every((block) => block.text.length === 0) ||
|
|
202
|
+
skill.contentHash !== skillContextContentHash(skill.content) ||
|
|
203
|
+
refs.has(skill.activationRef) ||
|
|
204
|
+
names.has(activation.name)
|
|
205
|
+
)
|
|
206
|
+
return false;
|
|
207
|
+
refs.add(skill.activationRef);
|
|
208
|
+
names.add(activation.name);
|
|
209
|
+
return true;
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export interface PreservedUserContext {
|
|
214
|
+
turnId: string;
|
|
215
|
+
text: string;
|
|
216
|
+
}
|
|
217
|
+
function isPreservedUserContext(value: unknown): value is PreservedUserContext {
|
|
218
|
+
return isRecord(value) && isString(value.turnId) && isString(value.text);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/** Undefined means no live policy; null explicitly forbids reuse during an uncertain replacement. */
|
|
222
|
+
export function mainSkillContextState(
|
|
223
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
224
|
+
policy: PendingSkillToolPolicy | undefined,
|
|
225
|
+
): SkillContextState | null | undefined {
|
|
226
|
+
if (!policy) return latestSkillContextState(entries);
|
|
227
|
+
// A cold turn may grant optional model activation without selecting or
|
|
228
|
+
// replacing any skill. Keep the recorded selection, including explicit off.
|
|
229
|
+
// This preserves historical content; it does not reconstruct tool authority.
|
|
230
|
+
if (
|
|
231
|
+
policy.modelActivation === true &&
|
|
232
|
+
policy.carriedSurface !== true &&
|
|
233
|
+
policy.requests.length === 0 &&
|
|
234
|
+
policy.loadedSkillNames.size === 0 &&
|
|
235
|
+
policy.loadedSkillPolicies.size === 0
|
|
236
|
+
)
|
|
237
|
+
return latestSkillContextState(entries);
|
|
238
|
+
if (policy.requests.some((request) => !policy.loadedSkillNames.has(request.name))) return null;
|
|
239
|
+
const names = [...policy.loadedSkillNames];
|
|
240
|
+
if (names.length === 0) return null;
|
|
241
|
+
const activationRefs: string[] = [];
|
|
242
|
+
for (const name of names) {
|
|
243
|
+
const entry = [...entries]
|
|
244
|
+
.reverse()
|
|
245
|
+
.find(
|
|
246
|
+
(candidate) =>
|
|
247
|
+
candidate.kind === "skillActivation" &&
|
|
248
|
+
candidate.activation.runId === undefined &&
|
|
249
|
+
candidate.activation.name === name,
|
|
250
|
+
);
|
|
251
|
+
if (!entry) return null;
|
|
252
|
+
activationRefs.push(entry.turnId);
|
|
253
|
+
}
|
|
254
|
+
return { version: 1, activationRefs };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** Caller supplies an already selected branch. Never infer active skills from audit metadata. */
|
|
258
|
+
export function latestSkillContextState(entries: ReadonlyArray<SessionEntry>): SkillContextState | undefined {
|
|
259
|
+
for (let index = entries.length - 1; index >= 0; index--) {
|
|
260
|
+
const entry = entries[index];
|
|
261
|
+
if (entry?.kind === "custom" && entry.customType === SKILL_CONTEXT_STATE) {
|
|
262
|
+
return isSkillContextState(entry.data) ? entry.data : undefined;
|
|
263
|
+
}
|
|
264
|
+
if (entry?.kind === "compactionSummary" && entry.skillContext !== undefined) {
|
|
265
|
+
return verifiedSkillContextCheckpoint(entry.skillContext)
|
|
266
|
+
? { version: 1, activationRefs: entry.skillContext.skills.map((skill) => skill.activationRef) }
|
|
267
|
+
: undefined;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
|
|
119
273
|
export interface CompactionSummaryEntry extends BaseSessionEntry {
|
|
120
274
|
kind: "compactionSummary";
|
|
275
|
+
skillContext?: SkillContextCheckpoint;
|
|
276
|
+
userContext?: PreservedUserContext;
|
|
121
277
|
summary: string;
|
|
122
278
|
tokensBefore: number;
|
|
123
279
|
firstKeptTurnId: string;
|
|
@@ -213,6 +369,14 @@ export interface TaskLedgerEntry extends BaseSessionEntry {
|
|
|
213
369
|
|
|
214
370
|
export type DecisionStatus = "active" | "superseded";
|
|
215
371
|
|
|
372
|
+
/**
|
|
373
|
+
* Who settled a decision. `operator` is an answer the operator gave in an
|
|
374
|
+
* `ask_user` interview. `agent` is a design choice the model recorded itself
|
|
375
|
+
* through the `decide` tool, with the alternatives it rejected and why. Absent
|
|
376
|
+
* on entries written before agent decisions existed, which were all operator.
|
|
377
|
+
*/
|
|
378
|
+
export type DecisionSource = "operator" | "agent";
|
|
379
|
+
|
|
216
380
|
export interface DecisionRecord {
|
|
217
381
|
key: string;
|
|
218
382
|
value: string;
|
|
@@ -221,12 +385,36 @@ export interface DecisionRecord {
|
|
|
221
385
|
status: DecisionStatus;
|
|
222
386
|
decidedAt: string;
|
|
223
387
|
revisedAt?: string;
|
|
388
|
+
/** Who made this revision, independently of the original decision source. Absent on legacy revisions. */
|
|
389
|
+
revisionSource?: DecisionSource;
|
|
224
390
|
correction?: string;
|
|
391
|
+
source?: DecisionSource;
|
|
392
|
+
/** Options considered and not taken. Only agent decisions carry these. */
|
|
393
|
+
alternatives?: string[];
|
|
394
|
+
/** Why `value` won over `alternatives`. Only agent decisions carry this. */
|
|
395
|
+
rationale?: string;
|
|
225
396
|
}
|
|
226
397
|
|
|
227
|
-
/**
|
|
398
|
+
/**
|
|
399
|
+
* Stable reference to one decision: `<interviewId>/<key>`. Both halves are
|
|
400
|
+
* already unique on the active path, so the pair needs no third id. Run
|
|
401
|
+
* envelopes, receipts, and commit trailers cite decisions by this string.
|
|
402
|
+
*/
|
|
403
|
+
export type DecisionRef = string;
|
|
404
|
+
|
|
405
|
+
export function decisionRef(interviewId: string, key: string): DecisionRef {
|
|
406
|
+
return `${interviewId}/${key}`;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* One complete, branch-anchored snapshot of a settled decision set. An
|
|
411
|
+
* `interview` origin is an operator `ask_user` round; an `agent` origin is a
|
|
412
|
+
* set the model recorded with the `decide` tool, where `interviewId` is the
|
|
413
|
+
* agent decision set id and `roundCount` is 0. Absent origin means interview.
|
|
414
|
+
*/
|
|
228
415
|
export interface DecisionLedgerEntry extends BaseSessionEntry {
|
|
229
416
|
kind: "decisionLedger";
|
|
417
|
+
origin?: "interview" | "agent";
|
|
230
418
|
interviewId: string;
|
|
231
419
|
interviewStatus: "complete" | "cancelled";
|
|
232
420
|
startedAt: string;
|
|
@@ -317,6 +505,8 @@ export interface WorkingSetRef {
|
|
|
317
505
|
}
|
|
318
506
|
|
|
319
507
|
export interface EvictedItem {
|
|
508
|
+
/** Stable session-local recall alias; absent on legacy ledger records. */
|
|
509
|
+
alias?: string;
|
|
320
510
|
ref: WorkingSetRef;
|
|
321
511
|
reason: EvictionReason;
|
|
322
512
|
/** Estimated tokens the projection removes for this item (marker cost already subtracted). */
|
|
@@ -503,15 +693,19 @@ function isTaskLedgerEvidence(value: unknown): value is TaskLedgerValidationEvid
|
|
|
503
693
|
);
|
|
504
694
|
}
|
|
505
695
|
|
|
506
|
-
function isDecisionRecord(value: unknown): value is DecisionRecord {
|
|
696
|
+
export function isDecisionRecord(value: unknown): value is DecisionRecord {
|
|
507
697
|
if (!isRecord(value)) return false;
|
|
508
|
-
if (!isString(value.key) || !/^[a-z0-9]+(?:_[a-z0-9]+)*$/.test(value.key)) return false;
|
|
698
|
+
if (!isString(value.key) || !/^[a-z0-9]+(?:[_-][a-z0-9]+)*$/.test(value.key)) return false;
|
|
509
699
|
if (!isString(value.value) || !isOneOf(value.status, DECISION_STATUSES) || !isString(value.decidedAt)) return false;
|
|
510
700
|
if (!isOptionalString(value.label) || !isOptionalString(value.source_question)) return false;
|
|
701
|
+
if (value.source !== undefined && !isOneOf(value.source, ["operator", "agent"])) return false;
|
|
702
|
+
if (value.revisionSource !== undefined && !isOneOf(value.revisionSource, ["operator", "agent"])) return false;
|
|
703
|
+
if (value.alternatives !== undefined && !isStringArray(value.alternatives)) return false;
|
|
704
|
+
if (!isOptionalString(value.rationale)) return false;
|
|
511
705
|
if (!isOptionalString(value.revisedAt) || !isOptionalString(value.correction)) return false;
|
|
512
706
|
return value.status === "superseded"
|
|
513
707
|
? isString(value.revisedAt)
|
|
514
|
-
: value.revisedAt === undefined && value.correction === undefined;
|
|
708
|
+
: value.revisedAt === undefined && value.revisionSource === undefined && value.correction === undefined;
|
|
515
709
|
}
|
|
516
710
|
|
|
517
711
|
function isOptionalCompactionUsage(value: unknown): boolean {
|
|
@@ -569,6 +763,7 @@ function isEvictedItem(value: unknown): value is EvictedItem {
|
|
|
569
763
|
isOneOf(value.reason, EVICTION_REASONS) &&
|
|
570
764
|
isNumber(value.tokensFreed) &&
|
|
571
765
|
isString(value.marker) &&
|
|
766
|
+
(value.alias === undefined || (typeof value.alias === "string" && /^r[1-9]\d*$/.test(value.alias))) &&
|
|
572
767
|
isOptionalString(value.by)
|
|
573
768
|
);
|
|
574
769
|
}
|
|
@@ -592,7 +787,11 @@ export function isSessionEntry(value: unknown): value is SessionEntry {
|
|
|
592
787
|
isOptionalBoolean(v.excludeFromContext)
|
|
593
788
|
);
|
|
594
789
|
case "custom":
|
|
595
|
-
return
|
|
790
|
+
return (
|
|
791
|
+
isString(v.customType) &&
|
|
792
|
+
isOptionalBoolean(v.display) &&
|
|
793
|
+
(v.customType !== SKILL_CONTEXT_STATE || isSkillContextState(v.data))
|
|
794
|
+
);
|
|
596
795
|
case "modelChange":
|
|
597
796
|
return isString(v.provider) && isString(v.modelId) && isOptionalString(v.target);
|
|
598
797
|
case "thinkingLevelChange":
|
|
@@ -612,7 +811,9 @@ export function isSessionEntry(value: unknown): value is SessionEntry {
|
|
|
612
811
|
(v.trigger === undefined || isOneOf(v.trigger, COMPACTION_TRIGGERS)) &&
|
|
613
812
|
isOptionalNumber(v.tokensAfter) &&
|
|
614
813
|
isOptionalNumber(v.messagesSummarized) &&
|
|
615
|
-
isOptionalBoolean(v.isSplitTurn)
|
|
814
|
+
isOptionalBoolean(v.isSplitTurn) &&
|
|
815
|
+
(v.skillContext === undefined || isSkillContextCheckpoint(v.skillContext)) &&
|
|
816
|
+
(v.userContext === undefined || isPreservedUserContext(v.userContext))
|
|
616
817
|
);
|
|
617
818
|
case "sessionInfo":
|
|
618
819
|
return isOptionalString(v.name) && isOptionalString(v.targetTurnId) && isOptionalString(v.label);
|
|
@@ -642,6 +843,7 @@ export function isSessionEntry(value: unknown): value is SessionEntry {
|
|
|
642
843
|
);
|
|
643
844
|
case "decisionLedger":
|
|
644
845
|
return (
|
|
846
|
+
(v.origin === undefined || isOneOf(v.origin, ["interview", "agent"])) &&
|
|
645
847
|
isString(v.interviewId) &&
|
|
646
848
|
isOneOf(v.interviewStatus, DECISION_INTERVIEW_STATUSES) &&
|
|
647
849
|
isString(v.startedAt) &&
|
|
@@ -282,10 +282,10 @@ export function createSessionBundle(context: DomainContext): DomainBundle<Sessio
|
|
|
282
282
|
return snapshotFor(id);
|
|
283
283
|
},
|
|
284
284
|
switchBranch(sessionId) {
|
|
285
|
-
// /tree-driven branch switch
|
|
286
|
-
//
|
|
287
|
-
//
|
|
288
|
-
//
|
|
285
|
+
// /tree-driven branch switch delegates to resume. Kept as a distinct
|
|
286
|
+
// contract method so telemetry or chat-loop rewiring can be layered on
|
|
287
|
+
// without changing resume's semantics. Same open-before-close ordering
|
|
288
|
+
// as resume() above and for the same reason.
|
|
289
289
|
if (state?.meta.id === sessionId) return state.meta;
|
|
290
290
|
const resumed = resumeSessionState(sessionId);
|
|
291
291
|
if (state) {
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { isAbsolute, normalize, relative, resolve } from "node:path";
|
|
25
|
+
import { decisionRationale } from "./decision-board.js";
|
|
25
26
|
import type { DecisionLedgerEntry, SessionEntry } from "./entries.js";
|
|
26
27
|
import { filterEntriesToActivePath } from "./tree/active-path.js";
|
|
27
28
|
|
|
@@ -480,7 +481,7 @@ export function mergeHandoffDecisions(
|
|
|
480
481
|
if (decision.status !== "active") continue;
|
|
481
482
|
const name = decision.label ?? decision.key;
|
|
482
483
|
const summary = boundHandoffString(`${name}: ${decision.value}`).text;
|
|
483
|
-
const rationale = decision
|
|
484
|
+
const rationale = decisionRationale(decision);
|
|
484
485
|
settled.push({
|
|
485
486
|
summary,
|
|
486
487
|
...(rationale ? { rationale: boundHandoffString(rationale).text } : {}),
|
|
@@ -111,9 +111,8 @@ export function appendTurn(state: SessionManagerState, input: TurnInput): ClioTu
|
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
113
|
* Append a rich SessionEntry via the engine writer. Non-message kinds are
|
|
114
|
-
* written as JSON lines to current.jsonl
|
|
115
|
-
*
|
|
116
|
-
* branch points too.
|
|
114
|
+
* written as JSON lines to current.jsonl and do not project into tree.json;
|
|
115
|
+
* the /fork picker offers assistant message turns only.
|
|
117
116
|
*/
|
|
118
117
|
export function appendEntry(state: SessionManagerState, input: SessionEntryInput): SessionEntry {
|
|
119
118
|
const turnId = input.turnId ?? newTurnId();
|
|
@@ -115,15 +115,54 @@ function isPromptManifestFragment(value: unknown): value is PromptManifestFragme
|
|
|
115
115
|
);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
/** Validate additive accounting when present, while accepting historical manifests. */
|
|
119
|
+
export function isProjectPreloadClass(value: unknown): value is ProjectPreloadClass {
|
|
120
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
121
|
+
const row = value as Record<string, unknown>;
|
|
122
|
+
const integer = (item: unknown): item is number => typeof item === "number" && Number.isInteger(item) && item >= 0;
|
|
123
|
+
const optionalInteger = (item: unknown): boolean => item === undefined || integer(item);
|
|
124
|
+
const range = (item: unknown): boolean =>
|
|
125
|
+
item === null ||
|
|
126
|
+
(Array.isArray(item) &&
|
|
127
|
+
item.length === 2 &&
|
|
128
|
+
integer(item[0]) &&
|
|
129
|
+
item[0] >= 1 &&
|
|
130
|
+
integer(item[1]) &&
|
|
131
|
+
item[1] >= item[0]);
|
|
120
132
|
return (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
(
|
|
125
|
-
typeof
|
|
126
|
-
typeof
|
|
133
|
+
typeof row.mode === "string" &&
|
|
134
|
+
["full", "partial", "synopsis", "none"].includes(row.mode) &&
|
|
135
|
+
integer(row.chars) &&
|
|
136
|
+
integer(row.lines) &&
|
|
137
|
+
(row.reason === null || (typeof row.reason === "string" && ["size", "lines", "no-clio-md"].includes(row.reason))) &&
|
|
138
|
+
typeof row.nearLimit === "boolean" &&
|
|
139
|
+
typeof row.label === "string" &&
|
|
140
|
+
optionalInteger(row.includedChars) &&
|
|
141
|
+
optionalInteger(row.includedLines) &&
|
|
142
|
+
optionalInteger(row.omittedSupportFragments) &&
|
|
143
|
+
(row.providerSupportsTools === undefined ||
|
|
144
|
+
row.providerSupportsTools === null ||
|
|
145
|
+
typeof row.providerSupportsTools === "boolean") &&
|
|
146
|
+
(row.sources === undefined ||
|
|
147
|
+
(Array.isArray(row.sources) &&
|
|
148
|
+
row.sources.every((source: unknown) => {
|
|
149
|
+
if (source === null || typeof source !== "object" || Array.isArray(source)) return false;
|
|
150
|
+
const s = source as Record<string, unknown>;
|
|
151
|
+
return (
|
|
152
|
+
typeof s.path === "string" &&
|
|
153
|
+
typeof s.contentHash === "string" &&
|
|
154
|
+
/^[a-f0-9]{64}$/.test(s.contentHash) &&
|
|
155
|
+
integer(s.availableChars) &&
|
|
156
|
+
integer(s.availableLines) &&
|
|
157
|
+
integer(s.includedChars) &&
|
|
158
|
+
integer(s.includedLines) &&
|
|
159
|
+
s.includedChars <= s.availableChars &&
|
|
160
|
+
s.includedLines <= s.availableLines &&
|
|
161
|
+
range(s.includedRange) &&
|
|
162
|
+
range(s.omittedRange) &&
|
|
163
|
+
(s.omissionReason === null || s.omissionReason === "budget")
|
|
164
|
+
);
|
|
165
|
+
})))
|
|
127
166
|
);
|
|
128
167
|
}
|
|
129
168
|
|