@iowarp/clio-coder 0.4.8 → 0.4.9
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 +82 -0
- package/README.md +7 -6
- package/dist/{acp-JWPQZM2D.js → acp-ZWZCPS2A.js} +13 -13
- package/dist/{agents-4GCDIRVX.js → agents-LYSOWZUE.js} +53 -52
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-SYAKTDQE.js → auth-WBQGKWQ5.js} +27 -27
- package/dist/{background-OW67WMYR.js → background-BUMOBAQN.js} +4 -4
- package/dist/{builtins-TKS63VNV.js → builtins-ODRJOEDI.js} +7 -7
- package/dist/{chunk-JLBVCROW.js → chunk-2DRRZ57Q.js} +33 -24
- package/dist/chunk-2JBZYUPY.js +105 -0
- package/dist/chunk-2KUBKL63.js +336 -0
- package/dist/{chunk-K45LHSCI.js → chunk-2VBWFXYE.js} +7 -3
- package/dist/{chunk-XTLJDC2X.js → chunk-2X2R3UTH.js} +23 -18
- package/dist/{chunk-5HULHKT2.js → chunk-37LW32LZ.js} +5 -5
- package/dist/{chunk-W7KNI3F5.js → chunk-3AND2EFU.js} +5 -5
- package/dist/{chunk-36XSBPXL.js → chunk-3RDHGNU7.js} +95 -27
- package/dist/{chunk-BIY22UUK.js → chunk-3SUDBGEI.js} +11 -10
- package/dist/{chunk-3IQOZRQ6.js → chunk-3TQN67I2.js} +7 -7
- package/dist/{chunk-KWJXCL2X.js → chunk-3U4BL2EV.js} +3 -3
- package/dist/{chunk-RBES4TCZ.js → chunk-3UQADNG2.js} +3 -3
- package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
- package/dist/{chunk-MWMW53WW.js → chunk-4ATBOFRP.js} +649 -193
- package/dist/{chunk-QGIC5SX5.js → chunk-4DNL43EZ.js} +3 -3
- package/dist/{chunk-GVU4CXPJ.js → chunk-4HFJKRGZ.js} +113 -54
- package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
- package/dist/{chunk-LZDLYSUN.js → chunk-5RTEFNBP.js} +3 -3
- package/dist/{chunk-HMGAKB7E.js → chunk-64XJW7NT.js} +15 -15
- package/dist/{chunk-EXKUF426.js → chunk-7FBCRWVT.js} +280 -280
- package/dist/{chunk-K3W6BF5C.js → chunk-7JSOSVLP.js} +2 -2
- package/dist/{chunk-WFTSK7N3.js → chunk-7N3OLLSL.js} +4 -4
- package/dist/{chunk-JRA6OBHY.js → chunk-A6DULIMH.js} +17 -5
- package/dist/{chunk-R5NRX5N4.js → chunk-AB3QXXBC.js} +2 -2
- package/dist/chunk-ACCECAH4.js +49 -0
- package/dist/{chunk-GJBJHJNY.js → chunk-AM6CEP2K.js} +5 -5
- package/dist/{chunk-MUXNDNMZ.js → chunk-AY4XE6GN.js} +19 -13
- package/dist/{chunk-MATCRH3M.js → chunk-BBA2TAWV.js} +9 -9
- package/dist/{chunk-PMUUAABD.js → chunk-BMNVVKEW.js} +9 -9
- package/dist/{chunk-TOPICHGR.js → chunk-CTGZCEI6.js} +2 -2
- package/dist/{chunk-L75H5B3B.js → chunk-DIAJYJYG.js} +2 -2
- package/dist/{chunk-JIMWEYWO.js → chunk-EHZRAB4U.js} +2 -2
- package/dist/{chunk-YXANQGCX.js → chunk-EM2DIQAJ.js} +6 -6
- package/dist/{chunk-JCVIL6TY.js → chunk-ETF4ROKH.js} +4 -4
- package/dist/{chunk-5W4FRA5Q.js → chunk-F2YM3JY4.js} +483 -253
- package/dist/{chunk-YGIV24MF.js → chunk-FEBQWHJT.js} +21 -16
- package/dist/{chunk-PGEFOTJB.js → chunk-FPS4R2RN.js} +5 -4
- package/dist/{chunk-XC5POIL4.js → chunk-G5R53COU.js} +1 -1
- package/dist/chunk-GHXGMFQ5.js +40 -0
- package/dist/{chunk-QLKCCC2J.js → chunk-GJDRMBDI.js} +14 -14
- package/dist/{chunk-2ZWLMA3T.js → chunk-GREYLTZ5.js} +7 -7
- package/dist/{chunk-YXFKLMX2.js → chunk-H2WSCZZT.js} +22 -6
- package/dist/{chunk-FNVPQQYT.js → chunk-H6IUCY6Q.js} +2 -2
- package/dist/{chunk-5C2OQHLR.js → chunk-H72DCH3E.js} +92 -203
- package/dist/{chunk-JYKUMHCQ.js → chunk-H7TXJR23.js} +21 -21
- package/dist/chunk-HBJQQTKM.js +40 -0
- package/dist/chunk-HCVKSGNZ.js +990 -0
- package/dist/{chunk-ARRUMZ7X.js → chunk-I47EJPYL.js} +3 -3
- package/dist/{chunk-YKIIWURD.js → chunk-IALGWTLO.js} +3 -3
- package/dist/{chunk-FB3KTE2J.js → chunk-IALZJE37.js} +4 -4
- package/dist/{chunk-RAUOKUZV.js → chunk-IC7JXLOM.js} +15 -10
- package/dist/{chunk-LLCGGVSW.js → chunk-IOSVTTCD.js} +7 -7
- package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
- package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
- package/dist/{chunk-UDAK6GR2.js → chunk-JIYWMQZ5.js} +2 -2
- package/dist/{chunk-O3HSB2YL.js → chunk-JKU34ACI.js} +2 -2
- package/dist/{chunk-6X7VOCDY.js → chunk-JTR3VSV3.js} +3 -3
- package/dist/{chunk-O2QJDRWP.js → chunk-JU6MAMRJ.js} +4 -4
- package/dist/chunk-JURMQWVJ.js +15 -0
- package/dist/{chunk-STC6CWUZ.js → chunk-K3XN4LZ4.js} +5 -5
- package/dist/{chunk-ATB3Q7YO.js → chunk-KIVFXGBM.js} +27 -2
- package/dist/{chunk-WJWNZXRM.js → chunk-KOAHT3N2.js} +2 -2
- package/dist/chunk-KP5BPXR3.js +73 -0
- package/dist/{chunk-K53E2PTW.js → chunk-KRJQG47M.js} +3 -3
- package/dist/{chunk-IILXVWJY.js → chunk-KW6OJ7IY.js} +19 -21
- package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
- package/dist/{chunk-2U2U5POA.js → chunk-L4RUTLRL.js} +5 -5
- package/dist/{chunk-QYSAZMSH.js → chunk-LGTVWPRN.js} +2 -2
- package/dist/{chunk-KGP3UQGJ.js → chunk-LSQW6KZO.js} +5 -5
- package/dist/{chunk-P4JS3MH5.js → chunk-LWJYOHT3.js} +8 -8
- package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
- package/dist/{chunk-5D2FNBMG.js → chunk-MJ4QEJVT.js} +2 -2
- package/dist/{chunk-RM3XJX7P.js → chunk-MO65K5CH.js} +5 -5
- package/dist/{chunk-H5DPSUBB.js → chunk-MTOZEQHL.js} +3 -3
- package/dist/{chunk-6R5MBXBJ.js → chunk-NBPA5QM6.js} +2 -2
- package/dist/{chunk-H77XBUBM.js → chunk-NMBEW4PP.js} +3 -3
- package/dist/{chunk-QWUSS2QP.js → chunk-NPLLK3HO.js} +67 -87
- package/dist/{chunk-K5UJD6MM.js → chunk-NSYGPIVW.js} +5 -5
- package/dist/{context-EZZPT2ZV.js → chunk-NXTV5OI5.js} +30 -84
- package/dist/{chunk-F7Y6QTPL.js → chunk-NYDG4QP4.js} +4 -4
- package/dist/{chunk-PFZJMXIY.js → chunk-OA2GDACN.js} +2 -2
- package/dist/{chunk-Q32C6AWI.js → chunk-PJI57EC6.js} +4 -4
- package/dist/{chunk-EFXMQYI6.js → chunk-PJJBUGMR.js} +52 -52
- package/dist/{chunk-ICYIUNO4.js → chunk-PNJE7JPS.js} +18 -3
- package/dist/chunk-PP23PZEV.js +1347 -0
- package/dist/chunk-PPIFDSBK.js +409 -0
- package/dist/{chunk-RFULVPBX.js → chunk-PTFISXQO.js} +6 -5
- package/dist/{chunk-JV25I7ID.js → chunk-QB33Z5S7.js} +5 -5
- package/dist/{chunk-D55WO5J7.js → chunk-QGNII5VC.js} +8 -8
- package/dist/{chunk-RKFNU5UA.js → chunk-QI72X67S.js} +104 -27
- package/dist/chunk-QKHZZFKH.js +98 -0
- package/dist/{chunk-5UG6EZI3.js → chunk-RDKX2PME.js} +4 -4
- package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
- package/dist/{chunk-BE4I3UJ2.js → chunk-RQROVOV3.js} +15 -13
- package/dist/{chunk-TEHVMHOK.js → chunk-S34A7BSP.js} +3 -3
- package/dist/{chunk-4P6M2TTE.js → chunk-SJETVJHX.js} +2 -2
- package/dist/{chunk-OPC4DQD6.js → chunk-SJMNU4ZS.js} +2 -2
- package/dist/{chunk-2JSCCEKO.js → chunk-SLLG2G44.js} +2 -2
- package/dist/{chunk-EPYATQMG.js → chunk-SQAZN2V3.js} +42 -16
- package/dist/{chunk-E2NSPYLC.js → chunk-SQBT46OF.js} +5 -5
- package/dist/{chunk-WTZVSMQZ.js → chunk-TCUOGIL2.js} +5 -5
- package/dist/{chunk-RRZFRIJP.js → chunk-TIWPKCVO.js} +5 -5
- package/dist/{chunk-QLAGXTTV.js → chunk-UIU7MGZ3.js} +5 -1
- package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
- package/dist/{chunk-PJ5H5B7A.js → chunk-VPWGADBG.js} +18 -18
- package/dist/{chunk-GEYX2NZ5.js → chunk-VWFCAK34.js} +6 -6
- package/dist/{chunk-44U2OUSM.js → chunk-W72LLZAV.js} +2 -2
- package/dist/{chunk-ORRNGQDV.js → chunk-WGRDABW7.js} +4 -4
- package/dist/{chunk-RNLAPBJL.js → chunk-XFLSL7BT.js} +2 -2
- package/dist/{chunk-2SXGG2IV.js → chunk-XJZEDCNT.js} +6 -6
- package/dist/{chunk-UB33F3YW.js → chunk-XLLEL3K7.js} +5 -5
- package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
- package/dist/{chunk-WS4FOGLY.js → chunk-XNZWWDC3.js} +2 -2
- package/dist/{chunk-P7GTE4FX.js → chunk-XRECG65F.js} +2 -2
- package/dist/chunk-XTQ7MEJG.js +457 -0
- package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
- package/dist/{chunk-OEMFEL26.js → chunk-Y3M2T5RO.js} +3 -3
- package/dist/{chunk-HP7KJ5O2.js → chunk-YPQOPFP7.js} +6 -6
- package/dist/{chunk-MEHBW2SP.js → chunk-YQYINEJI.js} +6 -6
- package/dist/{chunk-RXI7K4J5.js → chunk-ZF6CV4WZ.js} +1338 -217
- package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
- package/dist/{chunk-526ABLHD.js → chunk-ZKQ63XZ5.js} +12 -35
- package/dist/{chunk-PAQVETLA.js → chunk-ZKVMDNAN.js} +5 -5
- package/dist/cli/index.js +47 -37
- package/dist/{clio-BPBAPZGA.js → clio-JUDCLNHC.js} +7 -7
- package/dist/clio-context-tools-FT672MNZ.js +136 -0
- package/dist/{code-nav-KBQ3RIFK.js → code-nav-7OVCTP2Z.js} +28 -26
- package/dist/{components-6DKAXWFN.js → components-OZXZMDWU.js} +5 -5
- package/dist/{config-FWL5JK2H.js → config-P3ZQVF63.js} +80 -75
- package/dist/{config-graph-ACDB26L2.js → config-graph-GKAOBAS5.js} +74 -70
- package/dist/{configure-ZIZ4YV62.js → configure-25LRYZJG.js} +45 -44
- package/dist/context-72VQV7JX.js +73 -0
- package/dist/{context-VIL5MFRH.js → context-COWRWXP3.js} +74 -70
- package/dist/{context-Z3GOBHDK.js → context-WB3D474G.js} +12 -12
- package/dist/{context-clear-ZPB3L7MN.js → context-clear-Y4LYMWC6.js} +70 -66
- package/dist/{context-working-set-2GLBVF7L.js → context-working-set-TMZYVC7A.js} +15 -14
- package/dist/data-tool-KMBWKKWR.js +2987 -0
- package/dist/{detail-VSBWYSGZ.js → detail-4GLROGY5.js} +71 -67
- package/dist/{dispatch-runner-EEEHGKX4.js → dispatch-runner-TR3LBP5P.js} +92 -88
- package/dist/{docs-VMMWFVHL.js → docs-ZK777W2G.js} +3 -3
- package/dist/{doctor-V5L4IQGP.js → doctor-WC4OV2OB.js} +61 -59
- package/dist/{eval-VJYJ2BV3.js → eval-FUNWJNUJ.js} +45 -45
- package/dist/{evals-J2H5V6DD.js → evals-L73EBHSU.js} +4 -4
- package/dist/{evidence-Y35YSXH6.js → evidence-AVJ2RTHX.js} +80 -76
- package/dist/{evidence-POWAEBEW.js → evidence-P4NZOAK7.js} +70 -66
- package/dist/{evidence-XCCCLS36.js → evidence-Y55WKYHH.js} +79 -75
- package/dist/{evolve-GPG72VB6.js → evolve-MAWKRYWF.js} +75 -71
- package/dist/{extensions-YIZ7W3DA.js → extensions-PYQH3H47.js} +8 -8
- package/dist/{fleet-2MDCQ2VK.js → fleet-M4H2QBWT.js} +84 -80
- package/dist/{fleet-W2AF3TOJ.js → fleet-ULBXXRDR.js} +123 -119
- package/dist/{fleet-commands-WS56G26H.js → fleet-commands-7NNC4JZU.js} +17 -16
- package/dist/{fleet-decisions-MYGZ3JW7.js → fleet-decisions-EHEY7KPU.js} +9 -9
- package/dist/{fleet-graph-ELTBXBAV.js → fleet-graph-LQ2AHZT3.js} +15 -15
- package/dist/{fleet-inspect-45IK73L4.js → fleet-inspect-5IGBIIYZ.js} +76 -72
- package/dist/{fleet-preflight-T5NCZKHE.js → fleet-preflight-UTTNOKMG.js} +7 -2
- package/dist/{fleet-validate-VG4JBLA4.js → fleet-validate-YGILJKA6.js} +20 -20
- package/dist/{fleet-verify-VTSABAYO.js → fleet-verify-AUWTCDKR.js} +70 -66
- package/dist/{fleet-view-XC7WMKSS.js → fleet-view-TGUFCY5A.js} +73 -69
- package/dist/{init-VTJNNTIP.js → init-GFN2Z7NF.js} +94 -90
- package/dist/{interop-IU6BNA7C.js → interop-EF5JUWWK.js} +21 -21
- package/dist/{inventory-QPQUTUUZ.js → inventory-I6VJDDYF.js} +73 -69
- package/dist/{library-Q3NWL5CM.js → library-3J5IO2OJ.js} +13 -13
- package/dist/{library-LF7DLU6S.js → library-IJTOFTDS.js} +16 -15
- package/dist/{library-HUTAS57T.js → library-Z3KZSHPE.js} +27 -27
- package/dist/{library-import-PPW4YUC5.js → library-import-IMKFLDHX.js} +21 -21
- package/dist/{library-inventory-DIRVFRZU.js → library-inventory-CQP5D6GU.js} +13 -13
- package/dist/{library-validation-XHUZ3INE.js → library-validation-33UTX7AI.js} +11 -11
- package/dist/mcp-5FWZKUS6.js +26 -0
- package/dist/{memory-Z2LSKNV6.js → memory-36CWN67Y.js} +75 -71
- package/dist/{models-3FTREYPY.js → models-KQ6PQJJQ.js} +49 -49
- package/dist/{monitor-HF2MQRB3.js → monitor-XX6ZD6KC.js} +83 -79
- package/dist/{orchestrator-UYPA6W4S.js → orchestrator-SK6HDAOP.js} +1337 -772
- package/dist/{panes-736XB73K.js → panes-L27QRXUH.js} +12 -12
- package/dist/{panes-C4P3PIWT.js → panes-LXZIWNOZ.js} +4 -4
- package/dist/{paths-JQ4QYIYB.js → paths-7DJDU4P4.js} +5 -5
- package/dist/{preload-XSLRYH3Y.js → preload-K2TDYI4Y.js} +70 -66
- package/dist/{reset-V7QSPZYE.js → reset-73VU3XNT.js} +10 -10
- package/dist/{resources-OJGDFHYT.js → resources-3BYJYVYL.js} +16 -16
- package/dist/{run-T354SMDW.js → run-AR7PY6GW.js} +132 -128
- package/dist/run-script-H2KUDIII.js +41 -0
- package/dist/{settings-MWZXO6RV.js → settings-3VMBMWID.js} +4 -4
- package/dist/{share-Y5ZKJPND.js → share-HVWH4FPF.js} +21 -21
- package/dist/{skills-4GLZC4LN.js → skills-5TYEY75Q.js} +22 -22
- package/dist/{skills-eval-L5T7GODM.js → skills-eval-CK3MD63Z.js} +96 -87
- package/dist/{skills-inventory-LASKXEZI.js → skills-inventory-KSFYG3I6.js} +16 -16
- package/dist/{slash-commands-OIMRU36D.js → slash-commands-DMVHML7P.js} +47 -44
- package/dist/{steer-KMAM2Y2C.js → steer-XCD6V3EW.js} +4 -4
- package/dist/{support-AWC3XKPX.js → support-JAZL6VBR.js} +7 -7
- package/dist/{system-CD75NYBU.js → system-3TDQRMZZ.js} +26 -26
- package/dist/{targets-VSZX2J2S.js → targets-EZKHAYRN.js} +66 -65
- package/dist/{tasks-AN567LYH.js → tasks-SNEFHWYW.js} +12 -12
- package/dist/{terminal-lease-6KTWNHVY.js → terminal-lease-BNLFA4OF.js} +8 -7
- package/dist/{tools-AGRK3V5J.js → tools-7IM6BDCE.js} +12 -12
- package/dist/{trace-P4MQZD33.js → trace-C3MBGD4S.js} +8 -8
- package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
- package/dist/{uninstall-BRUTEPIC.js → uninstall-WWLOSZ42.js} +10 -10
- package/dist/{upgrade-SBCGHQGJ.js → upgrade-ETK2JNSJ.js} +37 -47
- package/dist/{usage-BIDVTO6V.js → usage-S2HOB7BZ.js} +93 -89
- package/dist/{verifiers-LTGCAMXS.js → verifiers-QDTEVH7R.js} +24 -22
- package/dist/{verify-OZU4LLNP.js → verify-SUKUK6XM.js} +15 -14
- package/dist/web/client/assets/{abnfDiagram-VCTEODGH-C5wfoHm3.js → abnfDiagram-VCTEODGH-BznNOe_I.js} +1 -1
- package/dist/web/client/assets/{arc-oH91sfLl.js → arc-Pry-7G1_.js} +1 -1
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
- package/dist/web/client/assets/{blockDiagram-I7D4REHJ-wi0_CYHL.js → blockDiagram-I7D4REHJ-prINbpbM.js} +1 -1
- package/dist/web/client/assets/{c4Diagram-7LVT6UL2-DV7NYc2W.js → c4Diagram-7LVT6UL2-DkVRKtyU.js} +1 -1
- package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
- package/dist/web/client/assets/{chunk-4HAMMTFA-Bhsegh3F.js → chunk-4HAMMTFA-CV0Z1ApC.js} +1 -1
- package/dist/web/client/assets/{chunk-75Z2AOVW-RQCckcQG.js → chunk-75Z2AOVW-D34Nohxq.js} +1 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
- package/dist/web/client/assets/{chunk-F27PBJKO-BcNqv2x1.js → chunk-F27PBJKO-CmRojxkG.js} +1 -1
- package/dist/web/client/assets/{chunk-GMAD6QVW-Bq8JWiZT.js → chunk-GMAD6QVW-ClYZmc73.js} +1 -1
- package/dist/web/client/assets/{chunk-GVQU2GXP-DbchrAeJ.js → chunk-GVQU2GXP-B2BiHFt-.js} +1 -1
- package/dist/web/client/assets/{chunk-IMKFNOWR-DrpvjocK.js → chunk-IMKFNOWR-BGApZ8nP.js} +1 -1
- package/dist/web/client/assets/{chunk-L3NEJ4N5-DHLmTnCe.js → chunk-L3NEJ4N5-DIzCgpkY.js} +1 -1
- package/dist/web/client/assets/{chunk-OSK3NFVY-CsRbtN9n.js → chunk-OSK3NFVY-BPT-yePv.js} +1 -1
- package/dist/web/client/assets/{chunk-P2QGCYS3-aqPbxoMh.js → chunk-P2QGCYS3-BC1WTc2t.js} +1 -1
- package/dist/web/client/assets/{chunk-POPQ4Y6H-Dl5vw0h0.js → chunk-POPQ4Y6H-BSjzBmZU.js} +1 -1
- package/dist/web/client/assets/{chunk-PWAF6VOD-D7OBRSdO.js → chunk-PWAF6VOD-BIjLs86Z.js} +1 -1
- package/dist/web/client/assets/{chunk-SHT3W25Y-CdKCIwuB.js → chunk-SHT3W25Y-CduDz2cm.js} +1 -1
- package/dist/web/client/assets/{chunk-SVP7TREG-B94Nu_1-.js → chunk-SVP7TREG-XUn4pPAP.js} +1 -1
- package/dist/web/client/assets/{chunk-TICWLB2K-jjRQI_hk.js → chunk-TICWLB2K-DcBy2DKy.js} +1 -1
- package/dist/web/client/assets/{chunk-XXDRQBXY-azkbKE37.js → chunk-XXDRQBXY-DqAYeljN.js} +1 -1
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
- package/dist/web/client/assets/{cynefin-OW5HDTMX--i9RDU5f.js → cynefin-OW5HDTMX-BecPbyM6.js} +1 -1
- package/dist/web/client/assets/{cynefinDiagram-5FMLGOSQ-cRcvyBdp.js → cynefinDiagram-5FMLGOSQ-BzMzFwyT.js} +1 -1
- package/dist/web/client/assets/{dagre-GXQ25YYZ-C9mZmAPe.js → dagre-GXQ25YYZ-CAWJmRMG.js} +1 -1
- package/dist/web/client/assets/{diagram-S7CK7UJ4-Oj_zlLDY.js → diagram-S7CK7UJ4--lp0ALmn.js} +1 -1
- package/dist/web/client/assets/{diagram-UQ7AKVKN-BWKbbfcR.js → diagram-UQ7AKVKN-gKUnsjcj.js} +1 -1
- package/dist/web/client/assets/{diagram-VSXAHHWV-C3N3f7DO.js → diagram-VSXAHHWV-BoN5D1Gh.js} +1 -1
- package/dist/web/client/assets/{diagram-VX7I27RA-CtDKDAWe.js → diagram-VX7I27RA-BMtuswQ6.js} +1 -1
- package/dist/web/client/assets/{diagram-Z3DM3KII-B8bkBRCz.js → diagram-Z3DM3KII-DtU8LXrA.js} +1 -1
- package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/web/client/assets/{ebnfDiagram-PWID7BFC-CskW-Whx.js → ebnfDiagram-PWID7BFC-DDcnv9BH.js} +1 -1
- package/dist/web/client/assets/{erDiagram-RLTQ6QDP-C-83cgCW.js → erDiagram-RLTQ6QDP-DvRb4iDL.js} +1 -1
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
- package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
- package/dist/web/client/assets/{gitGraph-4MIJSDKK-B40cQtBE.js → gitGraph-4MIJSDKK-DjD_AAMj.js} +1 -1
- package/dist/web/client/assets/{gitGraphDiagram-WWUBYQGX-CH-7P7Di.js → gitGraphDiagram-WWUBYQGX-CDyN9n2u.js} +1 -1
- package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
- package/dist/web/client/assets/{info-A6RAGUB7-eCCE9D_Q.js → info-A6RAGUB7-C_XK8Hq0.js} +1 -1
- package/dist/web/client/assets/{infoDiagram-27XIBGKW-DRnvqMjM.js → infoDiagram-27XIBGKW-DIe4tJ1i.js} +1 -1
- package/dist/web/client/assets/{ishikawaDiagram-5VMMS53U-DBA_55wp.js → ishikawaDiagram-5VMMS53U-CVl5unKI.js} +1 -1
- package/dist/web/client/assets/{journeyDiagram-3NMN7TZE-C-ewpNl7.js → journeyDiagram-3NMN7TZE-CPEB1Vt8.js} +1 -1
- package/dist/web/client/assets/{kanban-definition-UXKFOSKX-B1taGsu0.js → kanban-definition-UXKFOSKX-j-9WXjYQ.js} +1 -1
- package/dist/web/client/assets/{line-lZ0kyxDI.js → line-BIDAcEtX.js} +1 -1
- package/dist/web/client/assets/{linear-DIc8FgZj.js → linear-SzVmGSw4.js} +1 -1
- package/dist/web/client/assets/{mermaid-parser.core-SXolxpXw.js → mermaid-parser.core-Ux4vssh0.js} +3 -3
- package/dist/web/client/assets/{mermaid.core-DXgQtkNg.js → mermaid.core-CDuwVKeh.js} +4 -4
- package/dist/web/client/assets/{mindmap-definition-YA3MSWOX-DXJas9K7.js → mindmap-definition-YA3MSWOX-5MlQEeQ6.js} +1 -1
- package/dist/web/client/assets/{packet-AYTQ26CC-OqVl_07o.js → packet-AYTQ26CC-DRO66c9Q.js} +1 -1
- package/dist/web/client/assets/{pegDiagram-XKGWAZYB-CPE_zdfN.js → pegDiagram-XKGWAZYB-BakZnSjM.js} +1 -1
- package/dist/web/client/assets/{pie-WAS4IAKB-DAxnMBLe.js → pie-WAS4IAKB-BEzcmhz8.js} +1 -1
- package/dist/web/client/assets/{pieDiagram-E7YTZNPT-Uwjpufxv.js → pieDiagram-E7YTZNPT-DpmqgoPt.js} +1 -1
- package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
- package/dist/web/client/assets/{quadrantDiagram-AXDQQJYC-Bjs4yjgs.js → quadrantDiagram-AXDQQJYC-DuMPwwV2.js} +1 -1
- package/dist/web/client/assets/{radar-RG4KPBEZ-CuCKjHM3.js → radar-RG4KPBEZ-Djm3oXl5.js} +1 -1
- package/dist/web/client/assets/{railroad-74A4TZTK-CnQK-Cc1.js → railroad-74A4TZTK-Cpvkwsao.js} +1 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
- package/dist/web/client/assets/{railroadDiagram-O6MQD6OU-BDDIPNLL.js → railroadDiagram-O6MQD6OU-CgMS4B6R.js} +1 -1
- package/dist/web/client/assets/{requirementDiagram-BXWQKSXE-B5Ydyxc1.js → requirementDiagram-BXWQKSXE-CX5eoNdN.js} +1 -1
- package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/web/client/assets/{sankeyDiagram-P5KCCOFB-Bw2Qym75.js → sankeyDiagram-P5KCCOFB-CODBX2N3.js} +1 -1
- package/dist/web/client/assets/{sequenceDiagram-WJ2MYXX4-BZf36nO0.js → sequenceDiagram-WJ2MYXX4-eUhhF8OR.js} +1 -1
- package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
- package/dist/web/client/assets/{stateDiagram-D77RDMKH-DnH6JRkp.js → stateDiagram-D77RDMKH-vR6l0NC2.js} +1 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
- package/dist/web/client/assets/{swimlanes-42K2YHIH-D9PZmtZg.js → swimlanes-42K2YHIH-v9Tw_zX7.js} +1 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
- package/dist/web/client/assets/{timeline-definition-24CTP7MA-CrkZZBo7.js → timeline-definition-24CTP7MA-DxianbhU.js} +1 -1
- package/dist/web/client/assets/{treeView-Q6P3EWNA-C9zDShoC.js → treeView-Q6P3EWNA-DLxnZb9R.js} +1 -1
- package/dist/web/client/assets/{treemap-WGGIJYW6-B-plj9yK.js → treemap-WGGIJYW6-I7UnZ6xJ.js} +1 -1
- package/dist/web/client/assets/{vennDiagram-4TSXK5OY-VeOdaphN.js → vennDiagram-4TSXK5OY-Ar7M8Mrj.js} +1 -1
- package/dist/web/client/assets/{wardley-WFR3VGLG-Wl1P_m6L.js → wardley-WFR3VGLG-B8ZSHeDu.js} +1 -1
- package/dist/web/client/assets/{wardleyDiagram-VM6X3IG4-B85-R9t2.js → wardleyDiagram-VM6X3IG4-Qks2FmIn.js} +1 -1
- package/dist/web/client/assets/{xychartDiagram-S5SC5T6Z-BrD8OW8m.js → xychartDiagram-S5SC5T6Z-BBBjRtiE.js} +1 -1
- package/dist/web/client/index.html +3 -1
- package/dist/web/reads-worker.js +17 -17
- package/dist/web/server.js +25 -25
- package/dist/{web-EU6ATJWA.js → web-EMGUGGEI.js} +3 -3
- package/dist/{web-fetch-U22Q7HV4.js → web-fetch-6BRRVQON.js} +22 -5
- package/dist/{wiki-generate-LZRLFG6I.js → wiki-generate-XHSJTDOP.js} +104 -100
- package/dist/{with-panes-X5CZOGML.js → with-panes-Z6BTEHMZ.js} +11 -11
- package/dist/worker/entry.js +101 -87
- package/docs/README.md +1 -1
- package/docs/architecture/artifact-placement.md +12 -1
- package/docs/architecture/library.md +1 -1
- package/docs/architecture/prompt-envelope-and-tools.md +37 -27
- package/docs/architecture/safety-model.md +19 -6
- package/docs/architecture/session-lifecycle.md +10 -4
- package/docs/architecture/tui-design.md +37 -14
- package/docs/guide/commands-and-modes.md +39 -19
- package/docs/guide/configuration-and-targets.md +7 -5
- package/docs/guide/configuration-reference.md +116 -13
- package/docs/guide/environment-variables.md +2 -5
- package/docs/guide/fleet-dispatch.md +3 -2
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +2 -2
- package/docs/guide/resource-library.md +1 -1
- package/docs/guide/tool-usage.md +166 -64
- package/docs/guide/troubleshooting.md +1 -1
- package/docs/process/documentation-guide.md +1 -0
- package/docs/process/fleet-demo-runbook.md +6 -6
- package/docs/process/scientific-validation.md +22 -2
- package/docs/process/tool-audit-v0.4.9.md +357 -0
- package/package.json +1 -1
- package/src/cli/argv.ts +31 -0
- package/src/cli/clio.ts +17 -13
- package/src/cli/config.ts +4 -0
- package/src/cli/doctor-panes.ts +1 -1
- package/src/cli/doctor.ts +3 -1
- package/src/cli/index.ts +14 -1
- package/src/cli/mcp.ts +106 -0
- package/src/cli/skills-eval.ts +8 -2
- package/src/cli/upgrade.ts +34 -38
- package/src/cli/verifiers.ts +1 -1
- package/src/core/bash-exec.ts +27 -4
- package/src/core/config.ts +2 -1
- package/src/core/defaults.ts +10 -1
- package/src/core/event-bus.ts +1 -1
- package/src/core/run-records.ts +438 -0
- package/src/core/safe-exec.ts +506 -56
- package/src/core/skill-activation.ts +5 -3
- package/src/core/termination.ts +3 -3
- package/src/core/tool-names.ts +33 -12
- package/src/domains/context/clio-md.ts +1 -1
- package/src/domains/context/worker/pressure.ts +6 -2
- package/src/domains/context/working-set/path-index.ts +7 -2
- package/src/domains/dispatch/code-step.ts +7 -2
- package/src/domains/dispatch/contract.ts +7 -0
- package/src/domains/dispatch/execution-role.ts +3 -3
- package/src/domains/dispatch/execution-scheduler.ts +204 -79
- package/src/domains/dispatch/extension.ts +131 -14
- package/src/domains/dispatch/fleet-preflight.ts +18 -3
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/gate-decisions.ts +3 -3
- package/src/domains/dispatch/heartbeat.ts +1 -1
- package/src/domains/dispatch/host-verification.ts +16 -14
- package/src/domains/dispatch/receipt-findings.ts +3 -4
- package/src/domains/dispatch/reservation-store.ts +7 -9
- package/src/domains/dispatch/route-facts.ts +1 -1
- package/src/domains/dispatch/state.ts +3 -3
- package/src/domains/dispatch/types.ts +1 -1
- package/src/domains/evidence/build.ts +35 -7
- package/src/domains/gateway/mcp/client.ts +923 -0
- package/src/domains/gateway/mcp/config.ts +456 -0
- package/src/domains/gateway/mcp/index.ts +88 -0
- package/src/domains/gateway/mcp/protocol.ts +273 -0
- package/src/domains/gateway/mcp/trust.ts +263 -0
- package/src/domains/lifecycle/doctor.ts +17 -3
- package/src/domains/mux/contract.ts +5 -9
- package/src/domains/mux/detect.ts +1 -1
- package/src/domains/mux/extension.ts +1 -1
- package/src/domains/mux/protocol.ts +5 -7
- package/src/domains/mux/socket-client.ts +3 -3
- package/src/domains/observability/accountability.ts +2 -2
- package/src/domains/observability/contract.ts +7 -3
- package/src/domains/observability/evidence-index.ts +2 -2
- package/src/domains/observability/projection.ts +10 -0
- package/src/domains/prompts/compiler.ts +41 -23
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
- package/src/domains/prompts/fragments/operating/skills.md +12 -10
- package/src/domains/providers/index.ts +5 -1
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
- package/src/domains/providers/probe/http.ts +44 -59
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
- package/src/domains/safety/action-classifier.ts +17 -1
- package/src/domains/safety/call-target.ts +14 -0
- package/src/domains/safety/contract.ts +1 -1
- package/src/domains/safety/finish-contract.ts +9 -3
- package/src/domains/safety/loop-detector.ts +1 -1
- package/src/domains/safety/policy-engine.ts +7 -0
- package/src/domains/safety/protected-artifacts.ts +3 -4
- package/src/domains/safety/rejection-feedback.ts +1 -1
- package/src/domains/safety/scope.ts +2 -3
- package/src/domains/safety/validation-contract.ts +3 -2
- package/src/domains/scheduling/budget.ts +5 -3
- package/src/domains/scheduling/contract.ts +2 -1
- package/src/domains/scheduling/extension.ts +3 -3
- package/src/domains/session/compaction/branch-summary.ts +1 -1
- package/src/domains/session/compaction/compact.ts +25 -2
- package/src/domains/session/compaction/cut-point.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +5 -10
- package/src/domains/session/contract.ts +1 -1
- package/src/domains/session/cwd-fallback.ts +2 -2
- package/src/domains/session/handoff.ts +5 -1
- package/src/domains/session/history.ts +6 -0
- package/src/domains/session/manager.ts +14 -7
- package/src/domains/session/retry.ts +2 -1
- package/src/domains/session/session-artifacts.ts +12 -7
- package/src/domains/session/task-board.ts +2 -3
- package/src/engine/apis/openai-completions.ts +8 -0
- package/src/engine/loop-guard.ts +7 -0
- package/src/engine/provider-error-body.ts +65 -0
- package/src/engine/session.ts +118 -29
- package/src/engine/worker-runtime.ts +3 -0
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +18 -2
- package/src/interactive/chat-loop-policy.ts +1 -0
- package/src/interactive/chat-loop.ts +8 -4
- package/src/interactive/chat-panel.ts +23 -9
- package/src/interactive/chat-renderer.ts +33 -11
- package/src/interactive/clio-editor.ts +13 -5
- package/src/interactive/dispatch-board.ts +70 -30
- package/src/interactive/editor-submit.ts +30 -25
- package/src/interactive/footer/widgets.ts +12 -9
- package/src/interactive/interactive-presentation.ts +2 -3
- package/src/interactive/mux-bridge.ts +3 -7
- package/src/interactive/overlay-general-openers.ts +14 -7
- package/src/interactive/overlays/cwd-fallback.ts +1 -1
- package/src/interactive/overlays/library-model.ts +114 -35
- package/src/interactive/overlays/library.ts +52 -5
- package/src/interactive/overlays/list-overlay.ts +4 -1
- package/src/interactive/overlays/session-selector.ts +28 -23
- package/src/interactive/overlays/settings.ts +20 -1
- package/src/interactive/overlays/tree-selector.ts +47 -10
- package/src/interactive/panes-runtime.ts +1 -1
- package/src/interactive/renderers/compaction-summary.ts +1 -1
- package/src/interactive/renderers/provider-error.ts +118 -0
- package/src/interactive/renderers/retry-status.ts +59 -23
- package/src/interactive/renderers/tool-execution.ts +67 -7
- package/src/interactive/renderers/worker-answer.ts +198 -0
- package/src/interactive/renderers/worker-entry.ts +57 -163
- package/src/interactive/slash-commands.ts +26 -1
- package/src/interactive/slash-spec.ts +2 -2
- package/src/interactive/theme/labels.ts +66 -30
- package/src/interactive/turn-persistence.ts +6 -1
- package/src/interactive/turn-recovery.ts +2 -1
- package/src/interactive/turn-runtime.ts +22 -5
- package/src/interactive/view/artifacts.ts +3 -2
- package/src/interactive/view/view-overlay.ts +96 -20
- package/src/tools/agent-tools.ts +21 -7
- package/src/tools/artifact.ts +16 -8
- package/src/tools/bash.ts +90 -11
- package/src/tools/bootstrap.ts +42 -4
- package/src/tools/builtin-tool-catalog.ts +72 -7
- package/src/tools/context/index.ts +27 -31
- package/src/tools/context/library.ts +3 -1
- package/src/tools/context/surface.ts +12 -26
- package/src/tools/core-bootstrap.ts +72 -1
- package/src/tools/data/csv.ts +1189 -0
- package/src/tools/data/index.ts +308 -0
- package/src/tools/data/json.ts +1799 -0
- package/src/tools/data/jsonl.ts +561 -0
- package/src/tools/data/shared.ts +452 -0
- package/src/tools/edit-diff.ts +0 -7
- package/src/tools/edit.ts +115 -18
- package/src/tools/file-mutation-queue.ts +114 -4
- package/src/tools/find.ts +108 -29
- package/src/tools/gateway/caps.ts +11 -0
- package/src/tools/gateway/clio-context-surface.ts +41 -0
- package/src/tools/gateway/clio-context-tools.ts +77 -0
- package/src/tools/gateway/data-surface.ts +138 -0
- package/src/tools/gateway/data-tool.ts +201 -0
- package/src/tools/gateway/index.ts +342 -0
- package/src/tools/gateway/mcp-capabilities.ts +469 -0
- package/src/tools/grep.ts +88 -33
- package/src/tools/harness-extensions.ts +3 -0
- package/src/tools/ignore-policy.ts +7 -5
- package/src/tools/ls.ts +111 -20
- package/src/tools/policy.ts +35 -13
- package/src/tools/presentation.ts +6 -0
- package/src/tools/read.ts +634 -156
- package/src/tools/registry.ts +94 -6
- package/src/tools/run-script.ts +997 -0
- package/src/tools/spawn-hygiene.ts +157 -5
- package/src/tools/surface.ts +163 -0
- package/src/tools/verify/authoring.ts +8 -3
- package/src/tools/verify/catalog.ts +14 -1
- package/src/tools/verify/numeric.ts +367 -59
- package/src/tools/verify/perf.ts +171 -9
- package/src/tools/verify/scripts.ts +178 -26
- package/src/tools/web-fetch-surface.ts +22 -0
- package/src/tools/web-fetch.ts +26 -1
- package/src/tools/write.ts +45 -19
- package/dist/chunk-B6UM3OZC.js +0 -15
- package/dist/chunk-GJ24ODAX.js +0 -196
- package/dist/chunk-LZCCBLRC.js +0 -57
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +0 -1
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +0 -36
- package/dist/web/client/assets/channel-CiUWbHN9.js +0 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +0 -125
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +0 -1
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +0 -1
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +0 -1
- package/dist/web/client/assets/dist-D0_q-A2b.js +0 -1
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +0 -1
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +0 -1
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +0 -292
- package/dist/web/client/assets/index-FSIC94pi.js +0 -83
- package/dist/web/client/assets/prism-core-BngLtbUd.js +0 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +0 -1
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +0 -1
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +0 -1
- package/dist/web/client/assets/src-yeptRXpt.js +0 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +0 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +0 -8
package/src/core/tool-names.ts
CHANGED
|
@@ -2,15 +2,19 @@
|
|
|
2
2
|
* Canonical tool names. Everything that dispatches a tool call references these constants
|
|
3
3
|
* so mode matrices, safety classifiers, and audit filters never diverge on spelling.
|
|
4
4
|
*
|
|
5
|
-
* The surface is organized in
|
|
5
|
+
* The surface is organized in eight planes; each plane is one policy unit
|
|
6
6
|
* (action class, size posture, details schema, concurrency rule):
|
|
7
|
-
* OBSERVE evidence, read, grep, find, ls, code_nav, context, credential_present
|
|
7
|
+
* OBSERVE evidence, read, grep, find, ls, code_nav, context, credential_present, clio_docs, clio_library, data
|
|
8
8
|
* MUTATE write, edit
|
|
9
|
-
* EXECUTE bash, git, verify
|
|
9
|
+
* EXECUTE bash, git, verify, run_script
|
|
10
10
|
* ORCHESTRATE dispatch, monitor, steer, tasks, ledger, panes, limitation, decide
|
|
11
|
-
* RETRIEVE web_fetch
|
|
11
|
+
* RETRIEVE web_read, web_fetch
|
|
12
12
|
* INTERACT ask_user
|
|
13
13
|
* ARTIFACT artifact
|
|
14
|
+
* GATEWAY gateway
|
|
15
|
+
*
|
|
16
|
+
* Placement (which names carry an attached schema and which are reached
|
|
17
|
+
* through the gateway) is a separate axis, declared in src/tools/surface.ts.
|
|
14
18
|
*/
|
|
15
19
|
|
|
16
20
|
export const ToolNames = {
|
|
@@ -23,6 +27,9 @@ export const ToolNames = {
|
|
|
23
27
|
CodeNav: "code_nav",
|
|
24
28
|
Context: "context",
|
|
25
29
|
CredentialPresent: "credential_present",
|
|
30
|
+
ClioDocs: "clio_docs",
|
|
31
|
+
ClioLibrary: "clio_library",
|
|
32
|
+
Data: "data",
|
|
26
33
|
// MUTATE
|
|
27
34
|
Write: "write",
|
|
28
35
|
Edit: "edit",
|
|
@@ -30,6 +37,7 @@ export const ToolNames = {
|
|
|
30
37
|
Bash: "bash",
|
|
31
38
|
Git: "git",
|
|
32
39
|
Verify: "verify",
|
|
40
|
+
RunScript: "run_script",
|
|
33
41
|
// ORCHESTRATE
|
|
34
42
|
Dispatch: "dispatch",
|
|
35
43
|
Monitor: "monitor",
|
|
@@ -40,19 +48,16 @@ export const ToolNames = {
|
|
|
40
48
|
Limitation: "limitation",
|
|
41
49
|
Decide: "decide",
|
|
42
50
|
// RETRIEVE
|
|
51
|
+
WebRead: "web_read",
|
|
43
52
|
WebFetch: "web_fetch",
|
|
44
53
|
// INTERACT
|
|
45
54
|
AskUser: "ask_user",
|
|
46
55
|
// ARTIFACT
|
|
47
56
|
Artifact: "artifact",
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
// -> JSON capability listings / schemas / call results, network action
|
|
53
|
-
// class, sequential. Reserving the name here keeps classifiers and
|
|
54
|
-
// profiles from ever assigning "gateway" to a dynamic tool.
|
|
55
|
-
// Gateway: "gateway",
|
|
57
|
+
// GATEWAY: one fixed schema; secondary capabilities are surfaced through
|
|
58
|
+
// find/describe/call RESULTS, never as per-capability schemas in the
|
|
59
|
+
// prompt prefix.
|
|
60
|
+
Gateway: "gateway",
|
|
56
61
|
} as const;
|
|
57
62
|
|
|
58
63
|
export type BuiltinToolName = (typeof ToolNames)[keyof typeof ToolNames];
|
|
@@ -72,3 +77,19 @@ export function isBuiltinToolName(name: ToolName): name is BuiltinToolName {
|
|
|
72
77
|
export function isHarnessExtensionToolName(name: string): name is DynamicToolName {
|
|
73
78
|
return name.length <= 64 && /^extension_[a-z0-9][a-z0-9_-]*__[a-z][a-z0-9_]*$/.test(name);
|
|
74
79
|
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Reserved MCP capability namespace: `mcp_<serverId>__<tool>`. The server id
|
|
83
|
+
* follows the mcp.yaml id charset; the tool segment keeps the server's own
|
|
84
|
+
* spelling (letters, digits, `_`, `-`, `.`). Syntax conveys origin, never trust
|
|
85
|
+
* or availability: the gateway launches only trusted servers.
|
|
86
|
+
*/
|
|
87
|
+
export function isMcpToolName(name: string): name is DynamicToolName {
|
|
88
|
+
return name.length <= 96 && /^mcp_[a-z0-9][a-z0-9_-]*__[A-Za-z0-9][A-Za-z0-9_.-]*$/.test(name);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** Compose the registry name of one MCP server tool; null when the tool's name cannot be carried. */
|
|
92
|
+
export function mcpToolName(serverId: string, tool: string): DynamicToolName | null {
|
|
93
|
+
const composed = `mcp_${serverId}__${tool}`;
|
|
94
|
+
return isMcpToolName(composed) ? composed : null;
|
|
95
|
+
}
|
|
@@ -130,7 +130,7 @@ function normalizeNestedMarkdown(value: string): string {
|
|
|
130
130
|
let cursor = 0;
|
|
131
131
|
for (const match of mask.matchAll(/^(#{1,2})(\s+)/gm)) {
|
|
132
132
|
if (match.index === undefined) continue;
|
|
133
|
-
out += body.slice(cursor, match.index)
|
|
133
|
+
out += `${body.slice(cursor, match.index)}###${match[2] ?? ""}`;
|
|
134
134
|
cursor = match.index + match[0].length;
|
|
135
135
|
}
|
|
136
136
|
return out + body.slice(cursor);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentMessage } from "../../../engine/types.js";
|
|
2
|
+
import { effectiveToolCall } from "../../../tools/surface.js";
|
|
2
3
|
import { estimateAgentContextBreakdown, estimateAgentMessageTokens } from "../../session/context-accounting.js";
|
|
3
4
|
import { contextHash, messageToolCalls } from "./snapshot.js";
|
|
4
5
|
|
|
@@ -93,9 +94,12 @@ export function createWorkerContextGuard(archive: (ref: string, message: AgentMe
|
|
|
93
94
|
const projected = { ...message, content };
|
|
94
95
|
replace(index, message, projected);
|
|
95
96
|
} else if (message.role === "toolResult" && !message.isError) {
|
|
96
|
-
const
|
|
97
|
+
const call = toolCalls.get(message.toolCallId);
|
|
98
|
+
// A gateway call carries its capability's read semantics: a page
|
|
99
|
+
// fetched through the gateway is as evictable as a direct fetch.
|
|
100
|
+
const name = call ? effectiveToolCall(call.name, call.arguments).toolName : undefined;
|
|
97
101
|
// Only observations with known read semantics. Preserve mutations and opaque tools.
|
|
98
|
-
if (!name || !["read", "grep", "find", "ls", "code_nav", "web_fetch"].includes(name)) continue;
|
|
102
|
+
if (!name || !["read", "grep", "find", "ls", "code_nav", "web_read", "web_fetch"].includes(name)) continue;
|
|
99
103
|
if (JSON.stringify(message.content).length < 1000) continue;
|
|
100
104
|
const ref = key(message);
|
|
101
105
|
const file = archive(ref, structuredClone(message));
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import { basename, isAbsolute, join, normalize, resolve } from "node:path";
|
|
28
|
+
import { effectiveToolCall } from "../../../tools/surface.js";
|
|
28
29
|
import type { MessageEntry, SessionEntry } from "../../session/entries.js";
|
|
29
30
|
import type { WorkingSetRef } from "./contract.js";
|
|
30
31
|
import { isTurnStart } from "./horizon.js";
|
|
@@ -175,8 +176,12 @@ interface ToolCallFacts {
|
|
|
175
176
|
argsKey: string;
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
function callFacts(
|
|
179
|
-
|
|
179
|
+
function callFacts(recordedTool: string, recordedArgs: unknown): ToolCallFacts {
|
|
180
|
+
// A gateway call indexes as the capability it reached (git reads the cwd,
|
|
181
|
+
// artifact writes its path), never as an opaque `gateway` observation.
|
|
182
|
+
const effective = effectiveToolCall(recordedTool, recordedArgs);
|
|
183
|
+
const args = effective.viaGateway ? effective.args : recordedArgs;
|
|
184
|
+
return { toolName: effective.toolName, args, argsKey: args === undefined ? "" : stableStringify(args) };
|
|
180
185
|
}
|
|
181
186
|
|
|
182
187
|
function stringField(record: Record<string, unknown> | null, ...keys: string[]): string | null {
|
|
@@ -53,6 +53,8 @@ export interface CodeStepRunInput {
|
|
|
53
53
|
workspaceRoot: string;
|
|
54
54
|
/** Absolute directory the command log is written to; omitted means no artifact. */
|
|
55
55
|
artifactDir?: string;
|
|
56
|
+
/** Shared stdout/stderr capture ceiling; defaults to CODE_STEP_CAPTURE_MAX_BYTES. */
|
|
57
|
+
maxOutputBytes?: number;
|
|
56
58
|
/** Full process environment the allowlist is drawn from. Defaults to the orchestrator's. */
|
|
57
59
|
env?: NodeJS.ProcessEnv;
|
|
58
60
|
/**
|
|
@@ -221,6 +223,9 @@ interface SpawnOutcome {
|
|
|
221
223
|
|
|
222
224
|
async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: ReadonlyArray<string>): Promise<SpawnOutcome> {
|
|
223
225
|
const command = input.command;
|
|
226
|
+
const captureMaxBytes = input.maxOutputBytes ?? CODE_STEP_CAPTURE_MAX_BYTES;
|
|
227
|
+
if (!Number.isSafeInteger(captureMaxBytes) || captureMaxBytes <= 0)
|
|
228
|
+
throw new Error("code step: maxOutputBytes must be a positive safe integer");
|
|
224
229
|
const [executable, ...args] = argv;
|
|
225
230
|
if (executable === undefined) throw new Error(`code step: command '${command.id}' has no executable`);
|
|
226
231
|
return await new Promise<SpawnOutcome>((resolvePromise) => {
|
|
@@ -247,8 +252,8 @@ async function spawnCommand(input: CodeStepRunInput, cwd: string, argv: Readonly
|
|
|
247
252
|
});
|
|
248
253
|
const collect = (chunk: Buffer, stdout: boolean): void => {
|
|
249
254
|
outputBytes += chunk.length;
|
|
250
|
-
if (captured >=
|
|
251
|
-
const room =
|
|
255
|
+
if (captured >= captureMaxBytes) return;
|
|
256
|
+
const room = captureMaxBytes - captured;
|
|
252
257
|
const slice = chunk.length <= room ? chunk : chunk.subarray(0, room);
|
|
253
258
|
chunks.push(slice);
|
|
254
259
|
if (stdout) stdoutChunks.push(slice);
|
|
@@ -348,6 +348,13 @@ export interface DispatchContract {
|
|
|
348
348
|
*/
|
|
349
349
|
abort(runId: string, reason?: AbortReason): void;
|
|
350
350
|
|
|
351
|
+
/**
|
|
352
|
+
* Wait for one member's attempts, queued retries and retry admissions to
|
|
353
|
+
* settle. Does not cancel work; fleet owners call synchronous abort first
|
|
354
|
+
* when stopping. Other members and the global drain lifecycle are untouched.
|
|
355
|
+
*/
|
|
356
|
+
drainMember?(runId: string): Promise<void>;
|
|
357
|
+
|
|
351
358
|
/**
|
|
352
359
|
* Queue operator guidance on a running HTTP or SDK worker. A logical
|
|
353
360
|
* assignment id addresses its current attempt. The text is sent as a JSON
|
|
@@ -51,7 +51,7 @@ export type GateTopologyRole = "builder" | "reviewer" | "candidate" | "judge" |
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Facts the role is derived from. `capabilityClass` and `resultContractKind`
|
|
54
|
-
* both come from the strict
|
|
54
|
+
* both come from the strict recipe schema, so a role can never be read
|
|
55
55
|
* off free-form prose or a display-only field.
|
|
56
56
|
*/
|
|
57
57
|
export interface ExecutionRoleInput {
|
|
@@ -79,7 +79,7 @@ export interface ExecutionRoleInput {
|
|
|
79
79
|
* 3. Outside a gate, the recipe's own typed contract decides. A declared
|
|
80
80
|
* `verifier-report` is the only contract that makes a direct run a
|
|
81
81
|
* verifier; a Debugger's `debugger-report` deliberately does not, because
|
|
82
|
-
*
|
|
82
|
+
* the result schema distinguishes diagnosis from a gate verdict.
|
|
83
83
|
* 4. A read-only recipe with no verifier contract is reconnaissance.
|
|
84
84
|
*/
|
|
85
85
|
export function deriveExecutionRole(input: ExecutionRoleInput): ExecutionRole {
|
|
@@ -151,7 +151,7 @@ export function withAttemptRole(requestRole: ExecutionRole, attempt: number): Ex
|
|
|
151
151
|
* Defaulting a reviewer or judge to the builder agent makes the gate a
|
|
152
152
|
* self-review: the same recipe, the same prompt surface, and usually the same
|
|
153
153
|
* model family grading its own output. That verdict is correlated by
|
|
154
|
-
* construction and
|
|
154
|
+
* construction and cannot count as an independent quality label, so
|
|
155
155
|
* the default has to be an agent whose entire contract is independent typed
|
|
156
156
|
* validation.
|
|
157
157
|
*/
|
|
@@ -141,6 +141,8 @@ export interface ExecutionSchedulerAdapter {
|
|
|
141
141
|
*/
|
|
142
142
|
verifyWriteBoundary?(window: string, stepIds: ReadonlyArray<string>): Promise<ExecutionWriteBoundaryOutcome>;
|
|
143
143
|
cancel(assignmentId: string): void;
|
|
144
|
+
/** Wait for owned continuations, including retry admission, before release. */
|
|
145
|
+
drainMember?(assignmentId: string): Promise<void>;
|
|
144
146
|
release(ownerId: string): void;
|
|
145
147
|
releaseUnconsumed(ownerId: string): void;
|
|
146
148
|
/** Persist a settled result after boundary enforcement and before a dependent starts. */
|
|
@@ -230,7 +232,6 @@ export async function executePlan(
|
|
|
230
232
|
// A plan with a single agent step has no peers, so it gets no board.
|
|
231
233
|
const ledgerId = agentSteps.length >= 2 ? `ledger-plan-${plan.hash.slice(0, 12)}-${Date.now().toString(36)}` : null;
|
|
232
234
|
const ledger = ledgerId === null ? undefined : { id: ledgerId, sequence: 0 };
|
|
233
|
-
if (ledgerId !== null) await openAgentLedger(ledgerId);
|
|
234
235
|
const admissions = agentSteps.map((step) => adapter.preflight(step));
|
|
235
236
|
const reservation = adapter.reserve(plan, admissions);
|
|
236
237
|
const reservationOwners = new Set([reservation.ownerId]);
|
|
@@ -239,7 +240,10 @@ export async function executePlan(
|
|
|
239
240
|
const skipped = new Set<string>();
|
|
240
241
|
const unneeded = new Set<string>();
|
|
241
242
|
const needsDecision: string[] = [];
|
|
242
|
-
const running = new Map<string, { assignmentId: string | null }>();
|
|
243
|
+
const running = new Map<string, { assignmentId: string | null; canceled: boolean }>();
|
|
244
|
+
const cleanupErrors: unknown[] = [];
|
|
245
|
+
const memberIds = new Set<string>();
|
|
246
|
+
const canceledSteps = new Set<string>();
|
|
243
247
|
/** Per-check verdict, so a loop's resolution is recomputed from live results. */
|
|
244
248
|
const checkPassed = new Map<string, boolean>();
|
|
245
249
|
/** Findings a failed agent verification threaded to its repair attempt. */
|
|
@@ -258,11 +262,19 @@ export async function executePlan(
|
|
|
258
262
|
// aborted through this signal, which the runner turns into a process-group
|
|
259
263
|
// kill on the whole command tree.
|
|
260
264
|
const codeAbort = new AbortController();
|
|
265
|
+
const cancelOne = (owned: { assignmentId: string | null; canceled: boolean }): void => {
|
|
266
|
+
if (owned.assignmentId === null || owned.canceled) return;
|
|
267
|
+
owned.canceled = true;
|
|
268
|
+
try {
|
|
269
|
+
adapter.cancel(owned.assignmentId);
|
|
270
|
+
} catch (error) {
|
|
271
|
+
cleanupErrors.push(error);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
261
274
|
const cancelOwned = (): void => {
|
|
262
275
|
stopped = true;
|
|
263
|
-
for (const owned of running.values()) if (owned.assignmentId !== null) adapter.cancel(owned.assignmentId);
|
|
264
276
|
codeAbort.abort();
|
|
265
|
-
for (const
|
|
277
|
+
for (const owned of running.values()) cancelOne(owned);
|
|
266
278
|
};
|
|
267
279
|
signal?.addEventListener("abort", cancelOwned, { once: true });
|
|
268
280
|
|
|
@@ -277,42 +289,44 @@ export async function executePlan(
|
|
|
277
289
|
results.set(step.id, result);
|
|
278
290
|
if (isWorkspaceMutator(step)) lastMutationSeq = sequence;
|
|
279
291
|
};
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
recordCompletion(step, result);
|
|
287
|
-
if (step.loop?.role === "check" && step.kind === "code") {
|
|
288
|
-
checkPassed.set(step.id, result.succeeded);
|
|
289
|
-
attemptsRun.set(step.loop.loopId, (attemptsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
290
|
-
}
|
|
291
|
-
if (step.loop?.role === "check" && step.kind === "agent") {
|
|
292
|
-
const loop = loopsById.get(step.loop.loopId);
|
|
293
|
-
const decide = adapter.decideLoop;
|
|
294
|
-
if (loop === undefined || decide === undefined) {
|
|
295
|
-
throw new Error(`execution plan: replayed loop check '${step.id}' has no decider`);
|
|
292
|
+
const replayPrefix = async (): Promise<void> => {
|
|
293
|
+
for (const step of plan.steps) {
|
|
294
|
+
const result = replayed.get(step.id);
|
|
295
|
+
if (result === undefined) continue;
|
|
296
|
+
if (!result.succeeded || !result.integrityValid) {
|
|
297
|
+
throw new Error(`execution plan: replayed step '${step.id}' is not a completed successful step`);
|
|
296
298
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
step,
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
299
|
+
recordCompletion(step, result);
|
|
300
|
+
if (step.loop?.role === "check" && step.kind === "code") {
|
|
301
|
+
checkPassed.set(step.id, result.succeeded);
|
|
302
|
+
attemptsRun.set(step.loop.loopId, (attemptsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
303
|
+
}
|
|
304
|
+
if (step.loop?.role === "check" && step.kind === "agent") {
|
|
305
|
+
const loop = loopsById.get(step.loop.loopId);
|
|
306
|
+
const decide = adapter.decideLoop;
|
|
307
|
+
if (loop === undefined || decide === undefined) {
|
|
308
|
+
throw new Error(`execution plan: replayed loop check '${step.id}' has no decider`);
|
|
309
|
+
}
|
|
310
|
+
const decision = await decide({
|
|
311
|
+
loop,
|
|
312
|
+
step,
|
|
313
|
+
attempt: step.loop.attempt,
|
|
314
|
+
terminalAttempt: step.loop.attempt >= loop.maxAttempts,
|
|
315
|
+
result,
|
|
316
|
+
priorResults: results,
|
|
317
|
+
});
|
|
318
|
+
checkPassed.set(step.id, decision.resolved);
|
|
319
|
+
attemptsRun.set(step.loop.loopId, (attemptsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
320
|
+
if (decision.findings !== null) loopFindings.set(`${loop.id}:${step.loop.attempt}`, decision.findings);
|
|
321
|
+
if (decision.needsDecision !== undefined && decision.needsDecision !== null) {
|
|
322
|
+
needsDecision.push(decision.needsDecision);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
if (step.loop?.role === "repair") {
|
|
326
|
+
repairsRun.set(step.loop.loopId, (repairsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
310
327
|
}
|
|
311
328
|
}
|
|
312
|
-
|
|
313
|
-
repairsRun.set(step.loop.loopId, (repairsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
329
|
+
};
|
|
316
330
|
|
|
317
331
|
/**
|
|
318
332
|
* A failed predecessor normally disqualifies its dependents. Two deliberate
|
|
@@ -422,7 +436,10 @@ export async function executePlan(
|
|
|
422
436
|
): Promise<ExecutionStepResult> => {
|
|
423
437
|
const runCode = adapter.runCode;
|
|
424
438
|
if (runCode === undefined) throw new Error(`execution plan: no runner for code step '${step.id}'`);
|
|
425
|
-
|
|
439
|
+
const result = await runCode(step, handoffs, codeAbort.signal, results);
|
|
440
|
+
if (!codeAbort.signal.aborted) return result;
|
|
441
|
+
canceledSteps.add(step.id);
|
|
442
|
+
return { ...result, succeeded: false, failureReason: result.failureReason ?? "execution plan canceled this step" };
|
|
426
443
|
};
|
|
427
444
|
|
|
428
445
|
/**
|
|
@@ -447,6 +464,7 @@ export async function executePlan(
|
|
|
447
464
|
}
|
|
448
465
|
let halt = false;
|
|
449
466
|
for (const id of [...candidates].sort()) {
|
|
467
|
+
if (stopped || signal?.aborted) return true;
|
|
450
468
|
const step = stepsById.get(id);
|
|
451
469
|
if (step?.kind !== "code") continue;
|
|
452
470
|
const spent = revalidations.get(id) ?? 0;
|
|
@@ -474,7 +492,7 @@ export async function executePlan(
|
|
|
474
492
|
if (plan.onFailure === "stop") {
|
|
475
493
|
stopped = true;
|
|
476
494
|
codeAbort.abort();
|
|
477
|
-
|
|
495
|
+
|
|
478
496
|
halt = true;
|
|
479
497
|
}
|
|
480
498
|
}
|
|
@@ -544,7 +562,12 @@ export async function executePlan(
|
|
|
544
562
|
return { loopId: loop.id, resolved: false, attempts, repairs, reason };
|
|
545
563
|
});
|
|
546
564
|
|
|
565
|
+
let outcome: ExecutionPlanResult | undefined;
|
|
566
|
+
let primaryError: unknown;
|
|
567
|
+
let failed = false;
|
|
547
568
|
try {
|
|
569
|
+
if (ledgerId !== null) await openAgentLedger(ledgerId);
|
|
570
|
+
await replayPrefix();
|
|
548
571
|
let waveIndex = 0;
|
|
549
572
|
while (waveIndex < plan.waves.length) {
|
|
550
573
|
const wave = plan.waves[waveIndex];
|
|
@@ -588,56 +611,119 @@ export async function executePlan(
|
|
|
588
611
|
boundaryWindow,
|
|
589
612
|
group.map((entry) => entry.step),
|
|
590
613
|
);
|
|
591
|
-
const
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
handoffs,
|
|
597
|
-
{ ownerId: reservationByStep.get(step.id) ?? reservation.ownerId, memberId: step.id },
|
|
598
|
-
ledger,
|
|
599
|
-
),
|
|
600
|
-
})),
|
|
601
|
-
);
|
|
602
|
-
for (const { step, handle } of started) running.set(step.id, { assignmentId: handle.assignmentId });
|
|
614
|
+
const failures: unknown[] = [];
|
|
615
|
+
const fail = (error: unknown): void => {
|
|
616
|
+
failures.push(error);
|
|
617
|
+
cancelOwned();
|
|
618
|
+
};
|
|
603
619
|
const onSettled = (step: ExecutionPlanStep, result: ExecutionStepResult): void => {
|
|
604
|
-
if (isPlanFailure(step, result) && plan.onFailure === "stop")
|
|
605
|
-
stopped = true;
|
|
606
|
-
for (const [runningStepId, owned] of running) {
|
|
607
|
-
if (runningStepId !== step.id && owned.assignmentId !== null) adapter.cancel(owned.assignmentId);
|
|
608
|
-
}
|
|
609
|
-
codeAbort.abort();
|
|
610
|
-
for (const ownerId of reservationOwners) adapter.releaseUnconsumed(ownerId);
|
|
611
|
-
}
|
|
620
|
+
if (isPlanFailure(step, result) && plan.onFailure === "stop") cancelOwned();
|
|
612
621
|
};
|
|
613
|
-
const
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
})
|
|
619
|
-
|
|
620
|
-
const
|
|
621
|
-
|
|
622
|
-
|
|
622
|
+
const terminals: Array<Promise<PromiseSettledResult<{ step: ExecutionPlanStep; result: ExecutionStepResult }>[]>> =
|
|
623
|
+
[];
|
|
624
|
+
// Own each launch independently and observe its terminal promise as
|
|
625
|
+
// soon as it arrives, even while a sibling is still starting.
|
|
626
|
+
await Promise.allSettled(
|
|
627
|
+
launch.map(async ({ step, handoffs }) => {
|
|
628
|
+
if (stopped || signal?.aborted) return;
|
|
629
|
+
const owned = { assignmentId: null as string | null, canceled: false };
|
|
630
|
+
running.set(step.id, owned);
|
|
631
|
+
try {
|
|
632
|
+
const handle = await adapter.run(
|
|
633
|
+
step,
|
|
634
|
+
handoffs,
|
|
635
|
+
{ ownerId: reservationByStep.get(step.id) ?? reservation.ownerId, memberId: step.id },
|
|
636
|
+
ledger,
|
|
637
|
+
);
|
|
638
|
+
owned.assignmentId = handle.assignmentId;
|
|
639
|
+
memberIds.add(handle.assignmentId);
|
|
640
|
+
const terminal = handle.result.then(
|
|
641
|
+
(result) => {
|
|
642
|
+
// Preserve receipt references and output; this overlay records
|
|
643
|
+
// scheduler cancellation, not a fabricated worker receipt.
|
|
644
|
+
if (owned.canceled) canceledSteps.add(step.id);
|
|
645
|
+
const settled = owned.canceled
|
|
646
|
+
? { ...result, succeeded: false, failureReason: result.failureReason ?? "execution plan canceled this step" }
|
|
647
|
+
: result;
|
|
648
|
+
onSettled(step, settled);
|
|
649
|
+
if (settled.succeeded) running.delete(step.id);
|
|
650
|
+
return { step: step as ExecutionPlanStep, result: settled };
|
|
651
|
+
},
|
|
652
|
+
(error: unknown) => {
|
|
653
|
+
fail(error);
|
|
654
|
+
throw error;
|
|
655
|
+
},
|
|
656
|
+
);
|
|
657
|
+
terminals.push(Promise.allSettled([terminal]));
|
|
658
|
+
if (stopped || signal?.aborted) cancelOne(owned);
|
|
659
|
+
} catch (error) {
|
|
660
|
+
running.delete(step.id);
|
|
661
|
+
fail(error);
|
|
662
|
+
}
|
|
663
|
+
return;
|
|
623
664
|
}),
|
|
624
|
-
|
|
665
|
+
);
|
|
666
|
+
// Code work retains the startup barrier and shares cancellation with
|
|
667
|
+
// agents, but has no assignment handle to release.
|
|
668
|
+
const codeTerminals =
|
|
669
|
+
stopped || signal?.aborted
|
|
670
|
+
? []
|
|
671
|
+
: codeWork.map(async ({ step, handoffs }) => {
|
|
672
|
+
try {
|
|
673
|
+
const result = await runCodeStepNode(step, handoffs);
|
|
674
|
+
onSettled(step, result);
|
|
675
|
+
return { step: step as ExecutionPlanStep, result };
|
|
676
|
+
} catch (error) {
|
|
677
|
+
fail(error);
|
|
678
|
+
throw error;
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
const outcomes = (await Promise.all([...terminals, Promise.allSettled(codeTerminals)])).flat();
|
|
682
|
+
for (const id of memberIds) {
|
|
683
|
+
try {
|
|
684
|
+
await adapter.drainMember?.(id);
|
|
685
|
+
memberIds.delete(id);
|
|
686
|
+
} catch (error) {
|
|
687
|
+
fail(error);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
const ran = outcomes.flatMap((outcome) => (outcome.status === "fulfilled" ? [outcome.value] : []));
|
|
691
|
+
const settlementOrder = [...launch, ...codeWork].map(({ step }) => step.id);
|
|
692
|
+
ran.sort((a, b) => settlementOrder.indexOf(a.step.id) - settlementOrder.indexOf(b.step.id));
|
|
693
|
+
|
|
625
694
|
// The boundary is settled before anything is recorded or handed on, so
|
|
626
695
|
// a rolled-back step never appears upstream of the work it would have
|
|
627
696
|
// contaminated.
|
|
628
|
-
|
|
697
|
+
let settled: typeof ran;
|
|
698
|
+
try {
|
|
699
|
+
settled = await closeBoundary(boundaryWindow, enforced, ran);
|
|
700
|
+
} catch (error) {
|
|
701
|
+
if (failures.length === 0) throw error;
|
|
702
|
+
throw new AggregateError([...failures, error], "execution plan failure and boundary verification failed", {
|
|
703
|
+
cause: failures[0],
|
|
704
|
+
});
|
|
705
|
+
}
|
|
629
706
|
for (const { step, result } of settled) {
|
|
630
|
-
running.set(step.id, { assignmentId: result.assignmentId });
|
|
631
707
|
recordCompletion(step, result);
|
|
632
|
-
|
|
708
|
+
try {
|
|
709
|
+
await adapter.onStepSettled?.(step, result);
|
|
710
|
+
} catch (error) {
|
|
711
|
+
failures.push(error);
|
|
712
|
+
cancelOwned();
|
|
713
|
+
}
|
|
633
714
|
if (step.loop?.role === "repair") {
|
|
634
715
|
repairsRun.set(step.loop.loopId, (repairsRun.get(step.loop.loopId) ?? 0) + 1);
|
|
635
716
|
}
|
|
636
717
|
running.delete(step.id);
|
|
637
718
|
}
|
|
719
|
+
if (failures.length === 1) throw failures[0];
|
|
720
|
+
if (failures.length > 1)
|
|
721
|
+
throw new AggregateError(failures, "execution plan launch or result failed", { cause: failures[0] });
|
|
638
722
|
// Loop continuation is decided after the wave settles, so a gate's
|
|
639
723
|
// verdict is read from a sealed result rather than from a live stream.
|
|
640
|
-
for (const { step, result } of settled)
|
|
724
|
+
for (const { step, result } of settled) {
|
|
725
|
+
if (!signal?.aborted && !canceledSteps.has(step.id)) await settleCheck(step, result);
|
|
726
|
+
}
|
|
641
727
|
// A loop that spent its last attempt without converging ends the run
|
|
642
728
|
// under a stop policy, whether the verdict came from an exit code or
|
|
643
729
|
// from a gate that answered "no" perfectly well.
|
|
@@ -647,7 +733,6 @@ export async function executePlan(
|
|
|
647
733
|
});
|
|
648
734
|
if ((exhausted || settled.some(({ step, result }) => isPlanFailure(step, result))) && plan.onFailure === "stop") {
|
|
649
735
|
stopped = true;
|
|
650
|
-
for (const ownerId of reservationOwners) adapter.releaseUnconsumed(ownerId);
|
|
651
736
|
}
|
|
652
737
|
}
|
|
653
738
|
if (!stopped && adapter.spliceAfter !== undefined) {
|
|
@@ -682,7 +767,7 @@ export async function executePlan(
|
|
|
682
767
|
}
|
|
683
768
|
waveIndex += 1;
|
|
684
769
|
}
|
|
685
|
-
|
|
770
|
+
outcome = {
|
|
686
771
|
planHash: plan.hash,
|
|
687
772
|
results,
|
|
688
773
|
skipped: [...skipped],
|
|
@@ -693,11 +778,51 @@ export async function executePlan(
|
|
|
693
778
|
writeBoundaries: [...writeBoundaries],
|
|
694
779
|
};
|
|
695
780
|
} catch (error) {
|
|
781
|
+
failed = true;
|
|
782
|
+
primaryError = error;
|
|
696
783
|
cancelOwned();
|
|
697
|
-
throw error;
|
|
698
784
|
} finally {
|
|
699
785
|
signal?.removeEventListener("abort", cancelOwned);
|
|
700
|
-
for (const
|
|
701
|
-
|
|
786
|
+
for (const id of memberIds) {
|
|
787
|
+
try {
|
|
788
|
+
await adapter.drainMember?.(id);
|
|
789
|
+
} catch (error) {
|
|
790
|
+
cleanupErrors.push(error);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
// Every started launch and terminal is settled before capacity or the
|
|
795
|
+
// shared ledger is released, including late handles after cancellation.
|
|
796
|
+
for (const ownerId of reservationOwners) {
|
|
797
|
+
if (stopped || signal?.aborted) {
|
|
798
|
+
try {
|
|
799
|
+
adapter.releaseUnconsumed(ownerId);
|
|
800
|
+
} catch (error) {
|
|
801
|
+
cleanupErrors.push(error);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
try {
|
|
805
|
+
adapter.release(ownerId);
|
|
806
|
+
} catch (error) {
|
|
807
|
+
cleanupErrors.push(error);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
if (ledgerId !== null) {
|
|
811
|
+
try {
|
|
812
|
+
await closeAgentLedger(ledgerId);
|
|
813
|
+
} catch (error) {
|
|
814
|
+
cleanupErrors.push(error);
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
if (cleanupErrors.length > 0) {
|
|
819
|
+
throw new AggregateError(
|
|
820
|
+
failed ? [primaryError, ...cleanupErrors] : cleanupErrors,
|
|
821
|
+
"execution plan cleanup failed",
|
|
822
|
+
failed ? { cause: primaryError } : undefined,
|
|
823
|
+
);
|
|
702
824
|
}
|
|
825
|
+
if (failed) throw primaryError;
|
|
826
|
+
if (outcome === undefined) throw new Error("execution plan did not produce an outcome");
|
|
827
|
+
return outcome;
|
|
703
828
|
}
|