@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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
3
|
+
import type { DecisionBoardStore } from "../domains/session/decision-board.js";
|
|
4
|
+
import { decisionRef } from "../domains/session/entries.js";
|
|
5
|
+
import type { ToolResult, ToolSpec } from "./registry.js";
|
|
6
|
+
import { byteLength } from "./truncate-utf8.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The model's own design decisions, recorded on the session decision board
|
|
10
|
+
* beside the operator's `ask_user` answers. A `decide` call appends one
|
|
11
|
+
* `decisionLedger` entry with `origin: "agent"` and one `DecisionRecord` with
|
|
12
|
+
* `source: "agent"`, the alternatives the model rejected, and why. Dispatch
|
|
13
|
+
* seals every active decision's ref onto the run envelope and receipt, and
|
|
14
|
+
* the commit seams turn the same refs into `Clio-Decision:` trailers, so a
|
|
15
|
+
* receipt or a commit names the choices it was made under.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export const DECIDE_CAPS = Object.freeze({
|
|
19
|
+
keyBytes: 64,
|
|
20
|
+
valueBytes: 512,
|
|
21
|
+
alternatives: 6,
|
|
22
|
+
alternativeBytes: 256,
|
|
23
|
+
rationaleBytes: 1024,
|
|
24
|
+
labelBytes: 128,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const KEBAB_KEY = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
|
|
28
|
+
|
|
29
|
+
export interface DecideToolDeps {
|
|
30
|
+
decisionBoard?: DecisionBoardStore;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function boundedText(value: unknown, field: string, cap: number): string | Error {
|
|
34
|
+
if (typeof value !== "string") return new Error(`decide: ${field} must be a string`);
|
|
35
|
+
const trimmed = value.trim();
|
|
36
|
+
if (trimmed.length === 0) return new Error(`decide: ${field} is required`);
|
|
37
|
+
if (byteLength(trimmed) > cap) return new Error(`decide: ${field} exceeds the ${cap}-byte cap`);
|
|
38
|
+
return trimmed;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function boundedAlternatives(value: unknown): string[] | Error {
|
|
42
|
+
if (!Array.isArray(value) || value.length === 0) {
|
|
43
|
+
return new Error("decide: alternatives must list at least one option you rejected");
|
|
44
|
+
}
|
|
45
|
+
if (value.length > DECIDE_CAPS.alternatives) {
|
|
46
|
+
return new Error(`decide: alternatives exceeds the ${DECIDE_CAPS.alternatives}-entry cap`);
|
|
47
|
+
}
|
|
48
|
+
const alternatives: string[] = [];
|
|
49
|
+
for (const [index, entry] of value.entries()) {
|
|
50
|
+
const text = boundedText(entry, `alternatives[${index}]`, DECIDE_CAPS.alternativeBytes);
|
|
51
|
+
if (text instanceof Error) return text;
|
|
52
|
+
alternatives.push(text);
|
|
53
|
+
}
|
|
54
|
+
return alternatives;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function createDecideTool(deps: DecideToolDeps = {}): ToolSpec {
|
|
58
|
+
return {
|
|
59
|
+
name: ToolNames.Decide,
|
|
60
|
+
description:
|
|
61
|
+
"Record a design decision between viable options, with rejected alternatives and rationale, before implementing. Verify implementation against the active choice before commit; decision trailers do not prove adherence. If policy changes, a call with the same key revises your earlier agent choice; operator choices require operator revision through ask_user. Record the revision before commit.",
|
|
62
|
+
parameters: Type.Object({
|
|
63
|
+
key: Type.String({
|
|
64
|
+
description: `Stable kebab-case name for the decision, e.g. "cache-key-shape" (at most ${DECIDE_CAPS.keyBytes} bytes).`,
|
|
65
|
+
}),
|
|
66
|
+
value: Type.String({ description: `The option you chose (at most ${DECIDE_CAPS.valueBytes} bytes).` }),
|
|
67
|
+
alternatives: Type.Array(Type.String(), {
|
|
68
|
+
description: `Options you considered and rejected, 1 to ${DECIDE_CAPS.alternatives} entries.`,
|
|
69
|
+
}),
|
|
70
|
+
rationale: Type.String({
|
|
71
|
+
description: `Why the chosen option won over the alternatives (at most ${DECIDE_CAPS.rationaleBytes} bytes).`,
|
|
72
|
+
}),
|
|
73
|
+
label: Type.Optional(Type.String({ description: "Short human-readable title for the decision." })),
|
|
74
|
+
}),
|
|
75
|
+
// Read class on purpose: the only effect is one session-ledger append,
|
|
76
|
+
// so it must stay available at every autonomy level without a prompt.
|
|
77
|
+
baseActionClass: "read",
|
|
78
|
+
executionMode: "sequential",
|
|
79
|
+
async run(args): Promise<ToolResult> {
|
|
80
|
+
const key = boundedText(args.key, "key", DECIDE_CAPS.keyBytes);
|
|
81
|
+
if (key instanceof Error) return { kind: "error", message: key.message };
|
|
82
|
+
if (!KEBAB_KEY.test(key)) {
|
|
83
|
+
return { kind: "error", message: "decide: key must be kebab-case (lowercase letters, digits, single hyphens)" };
|
|
84
|
+
}
|
|
85
|
+
const value = boundedText(args.value, "value", DECIDE_CAPS.valueBytes);
|
|
86
|
+
if (value instanceof Error) return { kind: "error", message: value.message };
|
|
87
|
+
const alternatives = boundedAlternatives(args.alternatives);
|
|
88
|
+
if (alternatives instanceof Error) return { kind: "error", message: alternatives.message };
|
|
89
|
+
const rationale = boundedText(args.rationale, "rationale", DECIDE_CAPS.rationaleBytes);
|
|
90
|
+
if (rationale instanceof Error) return { kind: "error", message: rationale.message };
|
|
91
|
+
let label: string | undefined;
|
|
92
|
+
if (args.label !== undefined && args.label !== null) {
|
|
93
|
+
const bounded = boundedText(args.label, "label", DECIDE_CAPS.labelBytes);
|
|
94
|
+
if (bounded instanceof Error) return { kind: "error", message: bounded.message };
|
|
95
|
+
label = bounded;
|
|
96
|
+
}
|
|
97
|
+
if (deps.decisionBoard === undefined) {
|
|
98
|
+
return { kind: "error", message: "decide: no session decision board is available in this context" };
|
|
99
|
+
}
|
|
100
|
+
let outcome: ReturnType<DecisionBoardStore["recordAgentDecision"]>;
|
|
101
|
+
try {
|
|
102
|
+
outcome = deps.decisionBoard.recordAgentDecision({
|
|
103
|
+
key,
|
|
104
|
+
value,
|
|
105
|
+
alternatives,
|
|
106
|
+
rationale,
|
|
107
|
+
...(label !== undefined ? { label } : {}),
|
|
108
|
+
});
|
|
109
|
+
} catch (error) {
|
|
110
|
+
return { kind: "error", message: error instanceof Error ? error.message : String(error) };
|
|
111
|
+
}
|
|
112
|
+
const ref = decisionRef(outcome.entry.interviewId, key);
|
|
113
|
+
const supersededNote =
|
|
114
|
+
outcome.superseded === null
|
|
115
|
+
? ""
|
|
116
|
+
: ` (supersedes ${decisionRef(outcome.superseded.interviewId, outcome.superseded.key)})`;
|
|
117
|
+
return {
|
|
118
|
+
kind: "ok",
|
|
119
|
+
output: `decision recorded: ${key} = ${value} [${ref}]${supersededNote}\n`,
|
|
120
|
+
details: {
|
|
121
|
+
decision: {
|
|
122
|
+
ref,
|
|
123
|
+
key,
|
|
124
|
+
value,
|
|
125
|
+
alternatives,
|
|
126
|
+
rationale,
|
|
127
|
+
...(label !== undefined ? { label } : {}),
|
|
128
|
+
...(outcome.superseded !== null
|
|
129
|
+
? { superseded: decisionRef(outcome.superseded.interviewId, outcome.superseded.key) }
|
|
130
|
+
: {}),
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from "../domains/dispatch/gate-role-prompts.js";
|
|
13
13
|
import { narrowDispatchIntentToReadOnly, normalizeDispatchIntent } from "../domains/dispatch/intent.js";
|
|
14
14
|
import { renderDispatchReviewerTask } from "../domains/dispatch/intent-requirements.js";
|
|
15
|
+
import { parallelWriterConflict } from "../domains/dispatch/parallel-writers.js";
|
|
15
16
|
import { approvedRouteCandidates } from "../domains/dispatch/route-approval.js";
|
|
16
17
|
import { defaultRoutingIntent } from "../domains/dispatch/routing-intent.js";
|
|
17
18
|
import type { DispatchFailoverMode } from "../domains/dispatch/validation.js";
|
|
@@ -26,6 +27,7 @@ import {
|
|
|
26
27
|
DISPATCH_PLAN_PREPARATION_ERROR_ARGUMENT,
|
|
27
28
|
type DispatchPlanView,
|
|
28
29
|
describeDispatchPlan,
|
|
30
|
+
dispatchPlanTopology,
|
|
29
31
|
RESOLVED_DISPATCH_PLAN_ARGUMENT,
|
|
30
32
|
type ResolvedDispatchPlanArtifact,
|
|
31
33
|
resolvedDispatchPlanFromArgs,
|
|
@@ -246,6 +248,27 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
246
248
|
argv: [...check.command],
|
|
247
249
|
cwd: resolve(process.cwd(), check.cwd),
|
|
248
250
|
timeoutMs: entry.timeoutMs,
|
|
251
|
+
// A judged check seals its kind and absolute file paths here, so
|
|
252
|
+
// host verification judges against what the catalog declared at
|
|
253
|
+
// admission rather than whatever the file says at run time.
|
|
254
|
+
...(check.kind !== "command" ? { kind: check.kind } : {}),
|
|
255
|
+
...(check.numeric !== undefined
|
|
256
|
+
? {
|
|
257
|
+
numeric: {
|
|
258
|
+
reference: resolve(process.cwd(), check.numeric.reference),
|
|
259
|
+
tolerance: { ...check.numeric.tolerance },
|
|
260
|
+
},
|
|
261
|
+
}
|
|
262
|
+
: {}),
|
|
263
|
+
...(check.perf !== undefined
|
|
264
|
+
? {
|
|
265
|
+
perf: {
|
|
266
|
+
...(check.perf.budget !== undefined ? { budget: structuredClone(check.perf.budget) } : {}),
|
|
267
|
+
...(check.perf.baseline !== undefined ? { baseline: resolve(process.cwd(), check.perf.baseline) } : {}),
|
|
268
|
+
...(check.perf.tolerance !== undefined ? { tolerance: { ...check.perf.tolerance } } : {}),
|
|
269
|
+
},
|
|
270
|
+
}
|
|
271
|
+
: {}),
|
|
249
272
|
};
|
|
250
273
|
}),
|
|
251
274
|
};
|
|
@@ -512,6 +535,10 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
512
535
|
if (args.writers === 1 && mode !== "parallel") {
|
|
513
536
|
return shapeRejection(args, "dispatch: writers is supported only for parallel dispatch");
|
|
514
537
|
}
|
|
538
|
+
if (mode === "parallel" && args.writers !== 1) {
|
|
539
|
+
const conflict = parallelWriterConflict(parsed.requests, deps.getAgentSpecs());
|
|
540
|
+
if (conflict !== null) return shapeRejection(args, conflict);
|
|
541
|
+
}
|
|
515
542
|
const parentCheckout = gitCheckoutRoot(process.cwd());
|
|
516
543
|
for (const request of parsed.requests) {
|
|
517
544
|
if (request.worktree !== true) continue;
|
|
@@ -584,6 +611,7 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
584
611
|
resolveTask(
|
|
585
612
|
{
|
|
586
613
|
agentId: gateDeciderAgentId(reviewResult.review.reviewer),
|
|
614
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
587
615
|
executionRole: "reviewer",
|
|
588
616
|
task: renderDispatchReviewerTask(base.task, subject.runId, cycle, base.intent),
|
|
589
617
|
systemPrompt: REVIEWER_GATE_PROMPT,
|
|
@@ -619,6 +647,7 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
619
647
|
resolveTask(
|
|
620
648
|
{
|
|
621
649
|
agentId: gateDeciderAgentId(compete.judge?.agent),
|
|
650
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
622
651
|
executionRole: "judge",
|
|
623
652
|
task: `Plan-time capability check for the ${compete.candidates}-candidate judge.`,
|
|
624
653
|
systemPrompt: JUDGE_GATE_PROMPT,
|
|
@@ -691,6 +720,7 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
691
720
|
if (council.synthesis === "judge") {
|
|
692
721
|
const judgeRequest: DispatchRequest = {
|
|
693
722
|
agentId: council.judge?.agent ?? base.agentId,
|
|
723
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
694
724
|
executionRole: "judge",
|
|
695
725
|
task: "Plan-time capability check for council synthesis.",
|
|
696
726
|
systemPrompt: COUNCIL_JUDGE_PROMPT,
|
|
@@ -717,7 +747,9 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
|
|
|
717
747
|
for (const [index, request] of parsed.requests.entries()) tasks.push(resolveTask(request, "task", index + 1));
|
|
718
748
|
}
|
|
719
749
|
|
|
720
|
-
|
|
750
|
+
// Scope has already been resolved on tasks. Rendering the raw call here
|
|
751
|
+
// would discard its typed intent and run legacy prose inference again.
|
|
752
|
+
const topology = dispatchPlanTopology(args);
|
|
721
753
|
const planScale =
|
|
722
754
|
tasks.length > 1 ||
|
|
723
755
|
topology === "compete" ||
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Pure model-argument parsing; every returned DispatchRequest has a concrete agent id. */
|
|
2
2
|
|
|
3
|
+
import { parseResultSummaryMaxBytes } from "../domains/agents/result-contract.js";
|
|
3
4
|
import type { AgentAutomationAuthority } from "../domains/agents/spec.js";
|
|
4
5
|
import { type AgentTaskType, classifyAgentTask } from "../domains/dispatch/agent-candidates.js";
|
|
5
6
|
import { cloneDispatchBudgetRequest } from "../domains/dispatch/budget-envelope.js";
|
|
@@ -108,6 +109,29 @@ export function maxOutputBytesArg(args: Record<string, unknown>): number {
|
|
|
108
109
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : DEFAULT_MAX_OUTPUT_BYTES;
|
|
109
110
|
}
|
|
110
111
|
|
|
112
|
+
/**
|
|
113
|
+
* The caller's inline-summary allowance, range-checked here so a bad value is
|
|
114
|
+
* a tool error rather than a sealed run failure. The scope records whether
|
|
115
|
+
* this assignment set it or inherited a batch default (see
|
|
116
|
+
* `dispatchResultContract`).
|
|
117
|
+
*/
|
|
118
|
+
function resultSummaryArg(
|
|
119
|
+
args: Record<string, unknown>,
|
|
120
|
+
scope: "task" | "batch",
|
|
121
|
+
): { ok: true; value: DispatchRequest["resultSummary"] } | { ok: false; message: string } {
|
|
122
|
+
if (!("result_summary_max_bytes" in args) || args.result_summary_max_bytes === undefined) {
|
|
123
|
+
return { ok: true, value: undefined };
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
return {
|
|
127
|
+
ok: true,
|
|
128
|
+
value: { maxBytes: parseResultSummaryMaxBytes(args.result_summary_max_bytes, "result_summary_max_bytes"), scope },
|
|
129
|
+
};
|
|
130
|
+
} catch (error) {
|
|
131
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
111
135
|
export function timeoutMsArg(args: Record<string, unknown>): number | undefined {
|
|
112
136
|
const value = args.timeout_ms;
|
|
113
137
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : undefined;
|
|
@@ -116,6 +140,7 @@ export function timeoutMsArg(args: Record<string, unknown>): number | undefined
|
|
|
116
140
|
function dispatchRequestFromArgs(
|
|
117
141
|
args: Record<string, unknown>,
|
|
118
142
|
options: DispatchArgumentParserOptions,
|
|
143
|
+
resultSummaryScope: "task" | "batch" = "task",
|
|
119
144
|
): { ok: true; request: DispatchRequest } | { ok: false; message: string } {
|
|
120
145
|
const task = stringArg(args, "task");
|
|
121
146
|
if (!task) return { ok: false, message: "missing task (pass list:true to see available agents)" };
|
|
@@ -223,6 +248,9 @@ function dispatchRequestFromArgs(
|
|
|
223
248
|
}
|
|
224
249
|
}
|
|
225
250
|
}
|
|
251
|
+
const resultSummary = resultSummaryArg(args, resultSummaryScope);
|
|
252
|
+
if (!resultSummary.ok) return resultSummary;
|
|
253
|
+
if (resultSummary.value !== undefined) request.resultSummary = resultSummary.value;
|
|
226
254
|
if ("persona" in args && args.persona !== undefined) {
|
|
227
255
|
if (typeof args.persona !== "string") return { ok: false, message: "persona must be a string" };
|
|
228
256
|
const persona = args.persona.trim();
|
|
@@ -278,10 +306,19 @@ export function dispatchRequestsFromArgs(
|
|
|
278
306
|
for (let index = 0; index < tasks.length; index += 1) {
|
|
279
307
|
const item = tasks[index];
|
|
280
308
|
const itemArgs: Record<string, unknown> = isRecord(item) ? { ...shared, ...item } : { ...shared, task: item };
|
|
309
|
+
// A shared allowance over several members is inherited, not chosen for
|
|
310
|
+
// each of them; a one-task batch is the single-task form the tool
|
|
311
|
+
// normalizes every call into, so its shared value is that task's own.
|
|
312
|
+
const resultSummaryScope =
|
|
313
|
+
tasks.length > 1 &&
|
|
314
|
+
Object.hasOwn(shared, "result_summary_max_bytes") &&
|
|
315
|
+
!(isRecord(item) && Object.hasOwn(item, "result_summary_max_bytes"))
|
|
316
|
+
? "batch"
|
|
317
|
+
: "task";
|
|
281
318
|
const sharedIntent = isRecord(shared.intent) ? shared.intent : null;
|
|
282
319
|
const itemIntent = isRecord(item) && Object.hasOwn(item, "intent") && isRecord(item.intent) ? item.intent : null;
|
|
283
320
|
if (sharedIntent !== null && itemIntent !== null) itemArgs.intent = { ...sharedIntent, ...itemIntent };
|
|
284
|
-
const parsed = dispatchRequestFromArgs(itemArgs, options);
|
|
321
|
+
const parsed = dispatchRequestFromArgs(itemArgs, options, resultSummaryScope);
|
|
285
322
|
if (!parsed.ok) return { ok: false, message: `dispatch: task ${index + 1}: ${parsed.message}` };
|
|
286
323
|
if (sharedIntent !== null && itemIntent !== null) {
|
|
287
324
|
if (options.resolveIntent === undefined) {
|
|
@@ -376,7 +376,8 @@ function canonicalCandidates(value: unknown): DispatchFailoverCandidate[] | null
|
|
|
376
376
|
return out.length > 0 ? out : null;
|
|
377
377
|
}
|
|
378
378
|
|
|
379
|
-
|
|
379
|
+
/** Select topology without rendering unresolved task scope or consulting provider state. */
|
|
380
|
+
export function dispatchPlanTopology(args: Record<string, unknown>): DispatchPlanTopology {
|
|
380
381
|
if (isRecord(args.apply_winner)) return "compete";
|
|
381
382
|
if (args.mode === "compete") return "compete";
|
|
382
383
|
if (args.mode === "council") return "council";
|
|
@@ -400,8 +401,8 @@ function renderPlanText(
|
|
|
400
401
|
): string {
|
|
401
402
|
const lines = [
|
|
402
403
|
`dispatch plan: topology=${topology} tasks=${tasks.length}`,
|
|
403
|
-
`cost
|
|
404
|
-
`deadline: ${deadlineMs === null ? "
|
|
404
|
+
`advisory session cost baseline: ${costCeilingUsd === undefined ? "unavailable" : `$${costCeilingUsd.toFixed(4)}`}`,
|
|
405
|
+
`deadline: ${deadlineMs === null ? "none (advisory planning)" : `${deadlineMs}ms whole-plan`}`,
|
|
405
406
|
];
|
|
406
407
|
if (confirmation !== undefined) {
|
|
407
408
|
lines.push(
|
|
@@ -450,7 +451,7 @@ function renderPlanText(
|
|
|
450
451
|
const approval = task.routeApproval;
|
|
451
452
|
const selected = approval.decision.selected;
|
|
452
453
|
lines.push(
|
|
453
|
-
` active policy=${safeField(approval.decision.policyVersion)} decision=${approval.decision.decisionHash} runtime=${safeField(selected.runtimeId)} thinking=${safeField(selected.thinkingLevel ?? "default")} totalCostUpperBoundUsd=${approval.totalCostUpperBoundUsd.toFixed(6)} deadlineMs=${approval.deadlineMs} maxAttempts=${approval.maxAttempts}`,
|
|
454
|
+
` active policy=${safeField(approval.decision.policyVersion)} decision=${approval.decision.decisionHash} runtime=${safeField(selected.runtimeId)} thinking=${safeField(selected.thinkingLevel ?? "default")} totalCostUpperBoundUsd=${approval.totalCostUpperBoundUsd.toFixed(6)} deadlineMs=${approval.deadlineMs ?? "none"} maxAttempts=${approval.maxAttempts}`,
|
|
454
455
|
);
|
|
455
456
|
}
|
|
456
457
|
if (task.agentSelection !== null) {
|
|
@@ -487,7 +488,7 @@ function renderPlanText(
|
|
|
487
488
|
lines.push(...renderLegacyPathScope(task, cwd));
|
|
488
489
|
for (const check of task.resolvedVerification ?? []) {
|
|
489
490
|
lines.push(
|
|
490
|
-
` verification check=${safeField(check.check)} argv=${JSON.stringify(check.argv)} cwd=${JSON.stringify(check.cwd)} timeout_ms=${check.timeoutMs}`,
|
|
491
|
+
` verification check=${safeField(check.check)}${check.kind !== undefined ? ` kind=${check.kind}` : ""} argv=${JSON.stringify(check.argv)} cwd=${JSON.stringify(check.cwd)} timeout_ms=${check.timeoutMs}`,
|
|
491
492
|
);
|
|
492
493
|
}
|
|
493
494
|
}
|
|
@@ -616,7 +617,10 @@ function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["
|
|
|
616
617
|
Array.isArray(check.argv) &&
|
|
617
618
|
check.argv.every((arg) => typeof arg === "string") &&
|
|
618
619
|
typeof check.cwd === "string" &&
|
|
619
|
-
typeof check.timeoutMs === "number"
|
|
620
|
+
typeof check.timeoutMs === "number" &&
|
|
621
|
+
(check.kind === undefined || check.kind === "numeric-compare" || check.kind === "perf-budget") &&
|
|
622
|
+
(check.numeric === undefined || (isRecord(check.numeric) && typeof check.numeric.reference === "string")) &&
|
|
623
|
+
(check.perf === undefined || isRecord(check.perf)),
|
|
620
624
|
))
|
|
621
625
|
)
|
|
622
626
|
return false;
|
|
@@ -775,8 +779,7 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
|
|
|
775
779
|
!Number.isInteger(value.maxWorkers) ||
|
|
776
780
|
Number(value.maxWorkers) < 1 ||
|
|
777
781
|
(value.onFailure !== "stop" && value.onFailure !== "continue") ||
|
|
778
|
-
!Number.isInteger(value.deadlineMs) ||
|
|
779
|
-
Number(value.deadlineMs) < 1
|
|
782
|
+
(value.deadlineMs !== null && (!Number.isInteger(value.deadlineMs) || Number(value.deadlineMs) < 1))
|
|
780
783
|
)
|
|
781
784
|
return null;
|
|
782
785
|
if (
|
|
@@ -899,7 +902,7 @@ export function describeDispatchPlan(rawArgs: Record<string, unknown> | undefine
|
|
|
899
902
|
const args = prepareDispatchArguments(rawArgs ?? {});
|
|
900
903
|
const preparationFailed = typeof args[DISPATCH_PLAN_PREPARATION_ERROR_ARGUMENT] === "string";
|
|
901
904
|
const resolved = resolvedDispatchPlanFromArgs(args);
|
|
902
|
-
const topology = resolved?.topology ??
|
|
905
|
+
const topology = resolved?.topology ?? dispatchPlanTopology(args);
|
|
903
906
|
const tasks = resolved?.tasks ?? taskViews(args);
|
|
904
907
|
const costCeilingUsd = resolved?.costCeilingUsd;
|
|
905
908
|
const deadlineMs = resolved?.deadlineMs ?? null;
|
|
@@ -50,6 +50,8 @@ import { extractRunProvenance, provenanceCompactSuffix } from "../domains/eviden
|
|
|
50
50
|
import { summarizeTrustStatus } from "../domains/evidence/trust-projection.js";
|
|
51
51
|
import { adaptRunReceiptTrustStatus } from "../domains/evidence/trust-status.js";
|
|
52
52
|
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
53
|
+
import { activeDecisionRefs } from "../domains/session/decision-board.js";
|
|
54
|
+
import { renderCompeteJudgeTask } from "./compete-judge-task.js";
|
|
53
55
|
import {
|
|
54
56
|
type CandidateWorktree,
|
|
55
57
|
type CompeteGroupOwnership,
|
|
@@ -559,7 +561,12 @@ function dispatchDetails(
|
|
|
559
561
|
}
|
|
560
562
|
return {
|
|
561
563
|
mode,
|
|
562
|
-
assignmentIds: runs.map(
|
|
564
|
+
assignmentIds: runs.map(
|
|
565
|
+
(run) =>
|
|
566
|
+
deps.dispatch.assignments?.getStored(run.receipt.runId)?.assignmentId ??
|
|
567
|
+
run.receipt.lineage?.rootRunId ??
|
|
568
|
+
run.receipt.runId,
|
|
569
|
+
),
|
|
563
570
|
terminalRunIds: runs.map((run) => run.receipt.runId),
|
|
564
571
|
receiptCount: runs.length,
|
|
565
572
|
failedCount: failed.length,
|
|
@@ -786,6 +793,7 @@ async function runReviewGated(
|
|
|
786
793
|
}
|
|
787
794
|
const reviewerRequest: DispatchRequest = {
|
|
788
795
|
agentId: gateDeciderAgentId(review.reviewer),
|
|
796
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
789
797
|
executionRole: "reviewer",
|
|
790
798
|
task: renderDispatchReviewerTask(base.task, builder.receipt.runId, cycle, base.intent),
|
|
791
799
|
systemPrompt: REVIEWER_GATE_PROMPT,
|
|
@@ -802,6 +810,7 @@ async function runReviewGated(
|
|
|
802
810
|
...(review.target !== undefined ? { target: review.target } : {}),
|
|
803
811
|
...(base.plan !== undefined ? { plan: base.plan } : {}),
|
|
804
812
|
...(base.parentToolCallId !== undefined ? { parentToolCallId: base.parentToolCallId } : {}),
|
|
813
|
+
...(base.decisionRefs !== undefined ? { decisionRefs: base.decisionRefs } : {}),
|
|
805
814
|
...(base.reservation !== undefined
|
|
806
815
|
? { reservation: { ownerId: base.reservation.ownerId, memberId: base.reservation.memberId } }
|
|
807
816
|
: {}),
|
|
@@ -863,20 +872,6 @@ async function runReviewGated(
|
|
|
863
872
|
}
|
|
864
873
|
}
|
|
865
874
|
|
|
866
|
-
function judgeTask(originalTask: string, candidates: ReadonlyArray<CandidateWorktree>, stats: string[]): string {
|
|
867
|
-
const lines = [
|
|
868
|
-
`Rank ${candidates.length} candidate implementations of this task and pick the best one.`,
|
|
869
|
-
"Original task:",
|
|
870
|
-
originalTask,
|
|
871
|
-
"Candidates:",
|
|
872
|
-
...candidates.map(
|
|
873
|
-
(candidate, index) =>
|
|
874
|
-
` ${candidate.index}. branch=${candidate.branch} worktree=${candidate.path} (${stats[index] ?? "?"})`,
|
|
875
|
-
),
|
|
876
|
-
];
|
|
877
|
-
return lines.join("\n\n");
|
|
878
|
-
}
|
|
879
|
-
|
|
880
875
|
function readVerifiedGateReceipt(deps: DispatchToolDeps, runId: string): RunReceipt | null {
|
|
881
876
|
const envelope = deps.dispatch.getRun(runId);
|
|
882
877
|
if (envelope === null) return null;
|
|
@@ -1171,6 +1166,11 @@ async function runCompete(
|
|
|
1171
1166
|
const throwIfStopped = (): void => {
|
|
1172
1167
|
if (stop !== null) throw new Error(stop.message);
|
|
1173
1168
|
};
|
|
1169
|
+
// A stopped phase still has terminal receipts worth reporting. Keep the
|
|
1170
|
+
// ordinary error result and no winner, without discarding those identities
|
|
1171
|
+
// through the generic exception path after the settlement barrier.
|
|
1172
|
+
const stoppedOutcome = (): CompeteOutcome | null =>
|
|
1173
|
+
stop === null ? null : { runs, decisions, group, winner: null, needsDecision: stop.message };
|
|
1174
1174
|
const settleRun = async (
|
|
1175
1175
|
handle: Awaited<ReturnType<DispatchContract["dispatch"]>>,
|
|
1176
1176
|
request: DispatchRequest,
|
|
@@ -1329,12 +1329,17 @@ async function runCompete(
|
|
|
1329
1329
|
});
|
|
1330
1330
|
const candidateRuns = await settledCompletedRuns(candidateOwned, "candidate settlement");
|
|
1331
1331
|
runs.push(...candidateRuns);
|
|
1332
|
-
|
|
1332
|
+
const stoppedCandidates = stoppedOutcome();
|
|
1333
|
+
if (stoppedCandidates !== null) return stoppedCandidates;
|
|
1333
1334
|
const stats = worktrees.map((worktree, index) => {
|
|
1334
1335
|
const receipt = candidateRuns[index]?.receipt;
|
|
1335
1336
|
const failed = receipt !== undefined && isPipelineStepFailure(receipt);
|
|
1336
1337
|
if (failed) return "builder failed";
|
|
1337
|
-
|
|
1338
|
+
// The receipt records the candidate's effective authority after recipe
|
|
1339
|
+
// and invocation narrowing, independently of the coordinator's autonomy.
|
|
1340
|
+
if (receipt?.autonomyEnforcement?.autonomy !== "read-only") {
|
|
1341
|
+
commitCandidateWork(worktree, `clio-coder compete ${group} candidate ${worktree.index}`);
|
|
1342
|
+
}
|
|
1338
1343
|
return candidateDiffStat(root, worktree.branch);
|
|
1339
1344
|
});
|
|
1340
1345
|
if (candidateRuns.every((run) => isPipelineStepFailure(run.receipt))) {
|
|
@@ -1350,8 +1355,22 @@ async function runCompete(
|
|
|
1350
1355
|
}
|
|
1351
1356
|
const judgeRequest: DispatchRequest = {
|
|
1352
1357
|
agentId: gateDeciderAgentId(compete.judge?.agent),
|
|
1358
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
1353
1359
|
executionRole: "judge",
|
|
1354
|
-
task:
|
|
1360
|
+
task: renderCompeteJudgeTask(base.task, worktrees, stats, candidateRuns),
|
|
1361
|
+
// Candidate prose and receipt locators are evidence, not inferred authority.
|
|
1362
|
+
// Read-only execution is enforced by the role/autonomy, not empty write roots.
|
|
1363
|
+
intent: narrowDispatchIntentToReadOnly(
|
|
1364
|
+
base.intent ?? {
|
|
1365
|
+
version: 2,
|
|
1366
|
+
readRoots: [],
|
|
1367
|
+
writeRoots: [],
|
|
1368
|
+
relevantPaths: [],
|
|
1369
|
+
pathProvenance: [],
|
|
1370
|
+
expectedOutputs: [],
|
|
1371
|
+
verification: [],
|
|
1372
|
+
},
|
|
1373
|
+
),
|
|
1355
1374
|
systemPrompt: JUDGE_GATE_PROMPT,
|
|
1356
1375
|
autonomy: "read-only",
|
|
1357
1376
|
cwd: root,
|
|
@@ -1367,6 +1386,7 @@ async function runCompete(
|
|
|
1367
1386
|
...(compete.judge?.node !== undefined ? { node: compete.judge.node } : {}),
|
|
1368
1387
|
...(base.plan !== undefined ? { plan: base.plan } : {}),
|
|
1369
1388
|
...(base.parentToolCallId !== undefined ? { parentToolCallId: base.parentToolCallId } : {}),
|
|
1389
|
+
...(base.decisionRefs !== undefined ? { decisionRefs: base.decisionRefs } : {}),
|
|
1370
1390
|
...(base.reservation !== undefined
|
|
1371
1391
|
? { reservation: { ownerId: base.reservation.ownerId, memberId: base.reservation.memberId } }
|
|
1372
1392
|
: {}),
|
|
@@ -1383,7 +1403,8 @@ async function runCompete(
|
|
|
1383
1403
|
const judgeRun = (await settledCompletedRuns([judgeOwned], "judge settlement"))[0];
|
|
1384
1404
|
if (judgeRun === undefined) throw new Error("judge produced no completed run");
|
|
1385
1405
|
runs.push(judgeRun);
|
|
1386
|
-
|
|
1406
|
+
const stoppedJudge = stoppedOutcome();
|
|
1407
|
+
if (stoppedJudge !== null) return stoppedJudge;
|
|
1387
1408
|
const judgeReceipt = judgeRun.receipt;
|
|
1388
1409
|
const judgeSummary = judgeRun.summary;
|
|
1389
1410
|
// Every judged outcome names the same subjects, decider, and correlation;
|
|
@@ -1525,7 +1546,7 @@ async function runCompete(
|
|
|
1525
1546
|
|
|
1526
1547
|
// Losers are always cleaned; the winner's worktree and branch survive
|
|
1527
1548
|
// only while an operator decision is pending (supervised pick or a
|
|
1528
|
-
// failed merge). The durable state transition happens after the worker
|
|
1549
|
+
// failed merge). Every removed candidate is archived under a durable recovery ref. The durable state transition happens after the worker
|
|
1529
1550
|
// barrier and before deletion, defining the safe restart boundary.
|
|
1530
1551
|
const winnerAtFinalization = currentWinner();
|
|
1531
1552
|
if (ownership !== null) {
|
|
@@ -1581,8 +1602,7 @@ async function runCompete(
|
|
|
1581
1602
|
/**
|
|
1582
1603
|
* Apply a preserved compete winner. Plan-scale by definition, so supervised
|
|
1583
1604
|
* autonomy levels park this call for operator confirmation; the approval IS
|
|
1584
|
-
* the winner confirmation. After a successful merge
|
|
1585
|
-
* is cleaned up.
|
|
1605
|
+
* the winner confirmation. After a successful merge scratch worktrees are cleaned up; candidate recovery refs remain.
|
|
1586
1606
|
*/
|
|
1587
1607
|
function runApplyWinner(
|
|
1588
1608
|
input: { branch: string; cwd: string },
|
|
@@ -1729,7 +1749,7 @@ function runApplyWinner(
|
|
|
1729
1749
|
}
|
|
1730
1750
|
return {
|
|
1731
1751
|
kind: "ok",
|
|
1732
|
-
output: `winner ${branch} merged into the current branch; compete group ${group} cleaned up`,
|
|
1752
|
+
output: `winner ${branch} merged into the current branch; compete group ${group} scratch cleaned up; candidate states remain under refs/clio-coder/compete/ (list with git for-each-ref)`,
|
|
1733
1753
|
details: {
|
|
1734
1754
|
mode: "apply_winner",
|
|
1735
1755
|
branch,
|
|
@@ -1794,14 +1814,14 @@ function competeResult(
|
|
|
1794
1814
|
if (outcome.winner?.applied === true) {
|
|
1795
1815
|
return {
|
|
1796
1816
|
kind: "ok",
|
|
1797
|
-
output: `compete winner candidate ${outcome.winner.index} applied (branch ${outcome.winner.branch} merged)\n\n${body}`,
|
|
1817
|
+
output: `compete winner candidate ${outcome.winner.index} applied (branch ${outcome.winner.branch} merged); candidate states remain under refs/clio-coder/compete/ (list with git for-each-ref)\n\n${body}`,
|
|
1798
1818
|
details,
|
|
1799
1819
|
};
|
|
1800
1820
|
}
|
|
1801
1821
|
if (outcome.winner !== null && outcome.needsDecision === undefined) {
|
|
1802
1822
|
const lines = [
|
|
1803
1823
|
`compete winner: candidate ${outcome.winner.index} (branch ${outcome.winner.branch}), preserved for confirmation at autonomy ${autonomy}`,
|
|
1804
|
-
`Apply it with dispatch apply_winner={branch: "${outcome.winner.branch}"}; the approval prompt is the winner confirmation. Losing
|
|
1824
|
+
`Apply it with dispatch apply_winner={branch: "${outcome.winner.branch}"}; the approval prompt is the winner confirmation. Losing candidate states remain under refs/clio-coder/compete/; list them with git for-each-ref.`,
|
|
1805
1825
|
];
|
|
1806
1826
|
return { kind: "ok", output: `${lines.join("\n")}\n\n${body}`, details };
|
|
1807
1827
|
}
|
|
@@ -1991,6 +2011,7 @@ async function runCouncil(
|
|
|
1991
2011
|
const finalRuns = [...prior.values()];
|
|
1992
2012
|
const judgeRequest: DispatchRequest = {
|
|
1993
2013
|
agentId: council.judge?.agent ?? base.agentId,
|
|
2014
|
+
...(base.budget === undefined ? {} : { budget: base.budget }),
|
|
1994
2015
|
executionRole: "judge",
|
|
1995
2016
|
task: `Synthesize the council answers for this task:\n\n${base.task}`,
|
|
1996
2017
|
briefing: boundedCouncilBriefing(
|
|
@@ -2010,6 +2031,7 @@ async function runCouncil(
|
|
|
2010
2031
|
...(council.judge?.node ? { node: council.judge.node } : {}),
|
|
2011
2032
|
...(base.plan ? { plan: base.plan } : {}),
|
|
2012
2033
|
...(base.parentToolCallId ? { parentToolCallId: base.parentToolCallId } : {}),
|
|
2034
|
+
...(base.decisionRefs !== undefined ? { decisionRefs: base.decisionRefs } : {}),
|
|
2013
2035
|
};
|
|
2014
2036
|
const pinned = council.resolvedTasks?.find((task) => task.role === "synthesis");
|
|
2015
2037
|
const judgeRun = await runMember(
|
|
@@ -2157,6 +2179,7 @@ export async function runDispatchTool(
|
|
|
2157
2179
|
// admission bounds. Keep these off the serializable approved request.
|
|
2158
2180
|
const dispatch = deps.dispatch;
|
|
2159
2181
|
const preparation = {
|
|
2182
|
+
...(options?.hostRun === undefined ? {} : { hostRun: structuredClone(options.hostRun) }),
|
|
2160
2183
|
...(options?.signal === undefined ? {} : { signal: options.signal }),
|
|
2161
2184
|
...(timeoutMs === undefined ? {} : { deadlineAt: Date.now() + timeoutMs }),
|
|
2162
2185
|
};
|
|
@@ -2189,6 +2212,12 @@ export async function runDispatchTool(
|
|
|
2189
2212
|
parentToolCallId === undefined || parentToolCallId.length === 0
|
|
2190
2213
|
? structuredClone(snapshot.requests)
|
|
2191
2214
|
: snapshot.requests.map((request) => ({ ...structuredClone(request), parentToolCallId }));
|
|
2215
|
+
// Seal the parent board's active decisions onto every request on the same
|
|
2216
|
+
// terms as the parent id: from the live board here, never from model
|
|
2217
|
+
// arguments (the validation projection strips the field). Derived reviewer,
|
|
2218
|
+
// judge, and synthesis requests copy it from their base explicitly.
|
|
2219
|
+
const decisionRefs = activeDecisionRefs(deps.getDecisionBoard?.() ?? []);
|
|
2220
|
+
if (decisionRefs.length > 0) requests = requests.map((request) => ({ ...request, decisionRefs }));
|
|
2192
2221
|
if (planView.planScale && deps.dispatch.preview !== undefined && resolvedPlan === null) {
|
|
2193
2222
|
return { kind: "error", message: "dispatch: resolved plan is missing after admission" };
|
|
2194
2223
|
}
|
|
@@ -2291,12 +2320,7 @@ export async function runDispatchTool(
|
|
|
2291
2320
|
try {
|
|
2292
2321
|
if (resolvedPlan?.topology === "fleet") {
|
|
2293
2322
|
const executionPlan = admissionState.trustedExecutionPlans.get(args);
|
|
2294
|
-
if (
|
|
2295
|
-
executionPlan === undefined ||
|
|
2296
|
-
resolvedPlan.source === null ||
|
|
2297
|
-
resolvedPlan.deadlineMs === null ||
|
|
2298
|
-
reservationOwnerId === undefined
|
|
2299
|
-
) {
|
|
2323
|
+
if (executionPlan === undefined || resolvedPlan.source === null || reservationOwnerId === undefined) {
|
|
2300
2324
|
return { kind: "error", message: "dispatch: trusted Scout dependency plan is unavailable" };
|
|
2301
2325
|
}
|
|
2302
2326
|
if (executionPlan.hash !== resolvedPlan.source.executionPlanHash) {
|
|
@@ -2597,10 +2621,16 @@ async function runPipeline(
|
|
|
2597
2621
|
const { receipt, summary } = await registered.completion;
|
|
2598
2622
|
activeRunId = null;
|
|
2599
2623
|
runs.push(completeRun(deps, receipt, summary));
|
|
2600
|
-
|
|
2624
|
+
// Execution can succeed while a conforming report records a failed
|
|
2625
|
+
// check. Keep that receipt truthful, but do not feed failed quality
|
|
2626
|
+
// into a dependent step. Review/compete use failure to drive their
|
|
2627
|
+
// own repair loops, so this condition belongs only to the pipeline.
|
|
2628
|
+
const failedQuality = receipt.quality.resultContract?.quality === "fail";
|
|
2629
|
+
if (isPipelineStepFailure(receipt) || failedQuality) {
|
|
2601
2630
|
const skipped = requests.length - (index + 1);
|
|
2631
|
+
const reason = isPipelineStepFailure(receipt) ? pipelineFailureReason(receipt) : "result quality=fail";
|
|
2602
2632
|
throw new PipelineHaltError(
|
|
2603
|
-
`pipeline dispatch halted at step ${index + 1}/${requests.length} (run ${receipt.runId}, ${
|
|
2633
|
+
`pipeline dispatch halted at step ${index + 1}/${requests.length} (run ${receipt.runId}, ${reason}); skipped ${skipped} later step(s)`,
|
|
2604
2634
|
[...runs],
|
|
2605
2635
|
);
|
|
2606
2636
|
}
|