@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
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
1
2
|
import { spawn } from "node:child_process";
|
|
2
3
|
import { createInterface } from "node:readline";
|
|
4
|
+
import { StringDecoder } from "node:string_decoder";
|
|
3
5
|
import { buildSafeToolEnv } from "../core/safe-exec.js";
|
|
6
|
+
import { truncateUtf8 } from "./truncate-utf8.js";
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* Hygienic line-stream spawner for the search binaries (rg, fd). Matches the
|
|
@@ -13,7 +16,55 @@ import { buildSafeToolEnv } from "../core/safe-exec.js";
|
|
|
13
16
|
|
|
14
17
|
export const SEARCH_SPAWN_TIMEOUT_MS = 30_000;
|
|
15
18
|
const KILL_GRACE_MS = 3_000;
|
|
16
|
-
const
|
|
19
|
+
export const SEARCH_STDERR_CAP_BYTES = 16 * 1024;
|
|
20
|
+
const timeoutContext = new AsyncLocalStorage<number>();
|
|
21
|
+
|
|
22
|
+
/** Leave an incomplete trailing code point undecoded, and bound replacement text for invalid input. */
|
|
23
|
+
function decodeBoundedUtf8(buffer: Buffer): string {
|
|
24
|
+
const decoded = new StringDecoder("utf8").write(buffer);
|
|
25
|
+
return truncateUtf8(decoded, SEARCH_STDERR_CAP_BYTES, "");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Scope a shorter process deadline without changing tool arguments or concurrent calls. */
|
|
29
|
+
export function withSearchTimeout<T>(timeoutMs: number, run: () => T): T {
|
|
30
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) throw new Error("Invalid search timeout");
|
|
31
|
+
return timeoutContext.run(timeoutMs, run);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Decode UTF-8 lines incrementally with one fixed-size byte buffer, including without newlines. */
|
|
35
|
+
export class BoundedDiagnosticDecoder {
|
|
36
|
+
private readonly buffer = Buffer.alloc(SEARCH_STDERR_CAP_BYTES);
|
|
37
|
+
private used = 0;
|
|
38
|
+
private truncated = false;
|
|
39
|
+
oversizedLines = 0;
|
|
40
|
+
constructor(private readonly onLine: (line: string, truncated: boolean) => void) {}
|
|
41
|
+
get bufferedBytes(): number {
|
|
42
|
+
return this.used;
|
|
43
|
+
}
|
|
44
|
+
write(chunk: Buffer): void {
|
|
45
|
+
let start = 0;
|
|
46
|
+
while (start < chunk.length) {
|
|
47
|
+
const newline = chunk.indexOf(10, start);
|
|
48
|
+
const end = newline < 0 ? chunk.length : newline;
|
|
49
|
+
const take = Math.min(end - start, this.buffer.length - this.used);
|
|
50
|
+
chunk.copy(this.buffer, this.used, start, start + take);
|
|
51
|
+
this.used += take;
|
|
52
|
+
if (take < end - start) this.truncated = true;
|
|
53
|
+
if (newline < 0) break;
|
|
54
|
+
this.flush();
|
|
55
|
+
start = newline + 1;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
end(): void {
|
|
59
|
+
if (this.used || this.truncated) this.flush();
|
|
60
|
+
}
|
|
61
|
+
private flush(): void {
|
|
62
|
+
if (this.truncated) this.oversizedLines++;
|
|
63
|
+
this.onLine(decodeBoundedUtf8(this.buffer.subarray(0, this.used)).replace(/\r$/, ""), this.truncated);
|
|
64
|
+
this.used = 0;
|
|
65
|
+
this.truncated = false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
17
68
|
|
|
18
69
|
/**
|
|
19
70
|
* Per-argument byte ceiling for the search binaries. Linux caps a single argv
|
|
@@ -40,6 +91,96 @@ export function validateSearchPatternSize(pattern: string): { ok: true } | { ok:
|
|
|
40
91
|
};
|
|
41
92
|
}
|
|
42
93
|
|
|
94
|
+
export interface SearchCompleteness {
|
|
95
|
+
complete: boolean;
|
|
96
|
+
reason?: "timeout" | "errors" | "limit" | "cancelled";
|
|
97
|
+
skipped: { count: number; samples: string[]; unknown?: boolean };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function newSearchCompleteness(): SearchCompleteness {
|
|
101
|
+
return { complete: true, skipped: { count: 0, samples: [] } };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function skipSearchPath(
|
|
105
|
+
search: SearchCompleteness,
|
|
106
|
+
path: string,
|
|
107
|
+
allows: (path: string) => boolean = () => true,
|
|
108
|
+
): void {
|
|
109
|
+
search.complete = false;
|
|
110
|
+
search.reason ??= "errors";
|
|
111
|
+
search.skipped.count += 1;
|
|
112
|
+
if (allows(path) && search.skipped.samples.length < 5) search.skipped.samples.push(path);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Parse the path prefix, independently of the language used for OS error text. */
|
|
116
|
+
function searchDiagnosticPath(line: string): string | null {
|
|
117
|
+
const cleaned = line.replace(/^(?:rg: |\[fd error\]:? )/, "").replace(/^IO error for operation on /, "");
|
|
118
|
+
if (/^(?:regex parse error|error parsing (?:glob|regex)|invalid (?:glob|regex)|error:|Usage:)/i.test(cleaned))
|
|
119
|
+
return null;
|
|
120
|
+
// Skip a Windows drive colon. Diagnostics use a colon followed by whitespace
|
|
121
|
+
// or end of line; this also handles a path header followed by continuation lines.
|
|
122
|
+
const match = /^((?:[A-Za-z]:[\\/])?[^\r\n]+?):(?:\s|$)/.exec(cleaned);
|
|
123
|
+
return match?.[1] ?? null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export function createSearchDiagnostics(search: SearchCompleteness, allows: (path: string) => boolean) {
|
|
127
|
+
let continuation = false;
|
|
128
|
+
let realError = false;
|
|
129
|
+
return {
|
|
130
|
+
get realError() {
|
|
131
|
+
return realError;
|
|
132
|
+
},
|
|
133
|
+
onLine(line: string, truncated = false): void {
|
|
134
|
+
if (truncated) {
|
|
135
|
+
search.skipped.unknown = true;
|
|
136
|
+
search.complete = false;
|
|
137
|
+
search.reason ??= "errors";
|
|
138
|
+
}
|
|
139
|
+
if (!line.trim()) return;
|
|
140
|
+
if (continuation && /^\s/.test(line)) return;
|
|
141
|
+
const path = searchDiagnosticPath(line);
|
|
142
|
+
if (path) {
|
|
143
|
+
skipSearchPath(search, path, allows);
|
|
144
|
+
continuation = true;
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (continuation && /\(os error \d+\)/.test(line)) return;
|
|
148
|
+
continuation = false;
|
|
149
|
+
if (
|
|
150
|
+
/^(?:rg: |\[fd error\]:? )?(?:regex parse error|error parsing (?:glob|regex)|invalid (?:glob|regex)|error:|Usage:)/i.test(
|
|
151
|
+
line,
|
|
152
|
+
)
|
|
153
|
+
)
|
|
154
|
+
realError = true;
|
|
155
|
+
else search.skipped.unknown = true;
|
|
156
|
+
search.complete = false;
|
|
157
|
+
search.reason ??= "errors";
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export function finishSearch(search: SearchCompleteness, result: LineStreamResult): void {
|
|
163
|
+
const reason = result.aborted
|
|
164
|
+
? "cancelled"
|
|
165
|
+
: result.timedOut
|
|
166
|
+
? "timeout"
|
|
167
|
+
: result.stoppedEarly
|
|
168
|
+
? "limit"
|
|
169
|
+
: result.exitCode !== 0 && result.exitCode !== 1
|
|
170
|
+
? "errors"
|
|
171
|
+
: search.reason;
|
|
172
|
+
if (reason) {
|
|
173
|
+
search.complete = false;
|
|
174
|
+
search.reason = reason;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export function searchNotice(search: SearchCompleteness, shown: number, unit: string): string {
|
|
179
|
+
return search.complete
|
|
180
|
+
? ""
|
|
181
|
+
: `\n[Search incomplete: ${search.reason}; ${shown} ${unit} shown; ${search.skipped.count}${search.skipped.unknown ? "+ (diagnostic coverage unknown)" : ""} paths skipped.]`;
|
|
182
|
+
}
|
|
183
|
+
|
|
43
184
|
export interface LineStreamOptions {
|
|
44
185
|
/** Spawn cwd; defaults to the workspace root (process.cwd()). */
|
|
45
186
|
cwd?: string;
|
|
@@ -47,11 +188,14 @@ export interface LineStreamOptions {
|
|
|
47
188
|
timeoutMs?: number;
|
|
48
189
|
/** Called per stdout line. Invoke `stop()` to kill the child early. */
|
|
49
190
|
onLine(line: string, stop: () => void): void;
|
|
191
|
+
/** Receives every stderr line, independently of the retained diagnostic cap. */
|
|
192
|
+
onStderrLine?(line: string, truncated: boolean): void;
|
|
50
193
|
}
|
|
51
194
|
|
|
52
195
|
export interface LineStreamResult {
|
|
53
196
|
exitCode: number | null;
|
|
54
197
|
stderr: string;
|
|
198
|
+
oversizedDiagnostics: number;
|
|
55
199
|
timedOut: boolean;
|
|
56
200
|
aborted: boolean;
|
|
57
201
|
/** True when the caller's `stop()` killed the child (not an error). */
|
|
@@ -66,13 +210,14 @@ export function spawnLineStream(
|
|
|
66
210
|
options: LineStreamOptions,
|
|
67
211
|
): Promise<LineStreamResult> {
|
|
68
212
|
return new Promise((resolve) => {
|
|
69
|
-
const timeoutMs = options.timeoutMs ?? SEARCH_SPAWN_TIMEOUT_MS;
|
|
213
|
+
const timeoutMs = options.timeoutMs ?? timeoutContext.getStore() ?? SEARCH_SPAWN_TIMEOUT_MS;
|
|
70
214
|
let timedOut = false;
|
|
71
215
|
let aborted = false;
|
|
72
216
|
let stoppedEarly = false;
|
|
73
217
|
let killSent = false;
|
|
74
218
|
let settled = false;
|
|
75
|
-
|
|
219
|
+
const retainedStderr = Buffer.alloc(SEARCH_STDERR_CAP_BYTES);
|
|
220
|
+
let stderrBytes = 0;
|
|
76
221
|
let killGraceTimer: ReturnType<typeof setTimeout> | null = null;
|
|
77
222
|
|
|
78
223
|
// spawn can throw synchronously (e.g. an argv entry over MAX_ARG_STRLEN
|
|
@@ -100,6 +245,7 @@ export function spawnLineStream(
|
|
|
100
245
|
resolve({
|
|
101
246
|
exitCode: null,
|
|
102
247
|
stderr: "",
|
|
248
|
+
oversizedDiagnostics: 0,
|
|
103
249
|
timedOut: false,
|
|
104
250
|
aborted: false,
|
|
105
251
|
stoppedEarly: false,
|
|
@@ -109,6 +255,7 @@ export function spawnLineStream(
|
|
|
109
255
|
}
|
|
110
256
|
const child = spawned.child;
|
|
111
257
|
const rl = createInterface({ input: child.stdout });
|
|
258
|
+
const stderrLines = new BoundedDiagnosticDecoder((line, truncated) => options.onStderrLine?.(line, truncated));
|
|
112
259
|
|
|
113
260
|
const sendSignal = (signalName: NodeJS.Signals): void => {
|
|
114
261
|
const pid = child.pid;
|
|
@@ -157,9 +304,11 @@ export function spawnLineStream(
|
|
|
157
304
|
if (killGraceTimer) clearTimeout(killGraceTimer);
|
|
158
305
|
options.signal?.removeEventListener("abort", onAbort);
|
|
159
306
|
rl.close();
|
|
307
|
+
stderrLines.end();
|
|
160
308
|
resolve({
|
|
161
309
|
exitCode: child.exitCode,
|
|
162
|
-
stderr,
|
|
310
|
+
stderr: decodeBoundedUtf8(retainedStderr.subarray(0, stderrBytes)),
|
|
311
|
+
oversizedDiagnostics: stderrLines.oversizedLines,
|
|
163
312
|
timedOut,
|
|
164
313
|
aborted,
|
|
165
314
|
stoppedEarly,
|
|
@@ -174,7 +323,10 @@ export function spawnLineStream(
|
|
|
174
323
|
options.onLine(line, stop);
|
|
175
324
|
});
|
|
176
325
|
child.stderr?.on("data", (chunk: Buffer) => {
|
|
177
|
-
|
|
326
|
+
const take = Math.min(chunk.length, retainedStderr.length - stderrBytes);
|
|
327
|
+
chunk.copy(retainedStderr, stderrBytes, 0, take);
|
|
328
|
+
stderrBytes += take;
|
|
329
|
+
stderrLines.write(chunk);
|
|
178
330
|
});
|
|
179
331
|
child.on("error", (error) => finish(error.message));
|
|
180
332
|
child.on("close", () => finish(null));
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool placement: which registered tools carry an attached schema on every
|
|
3
|
+
* turn (direct) and which are reached through the gateway's find/describe/call
|
|
4
|
+
* results (gateway). One table for the builtins, one prefix rule for each
|
|
5
|
+
* dynamic namespace, and the helpers every consumer of a placement decision
|
|
6
|
+
* shares, so moving a tool between the two surfaces is a one-row edit here.
|
|
7
|
+
*
|
|
8
|
+
* Placement changes what the model sees, never what a call is allowed to do:
|
|
9
|
+
* a capability behind the gateway runs through the same admission as a direct
|
|
10
|
+
* call, under its own name and action class, and the ledger consumers unwrap
|
|
11
|
+
* a gateway call back to that capability through {@link effectiveToolCall}.
|
|
12
|
+
*
|
|
13
|
+
* Pure module: no I/O, no registry construction. Imported by the prompt
|
|
14
|
+
* compiler and by ledger consumers, so it depends on core/tool-names only.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
type BuiltinToolName,
|
|
19
|
+
isBuiltinToolName,
|
|
20
|
+
isHarnessExtensionToolName,
|
|
21
|
+
isMcpToolName,
|
|
22
|
+
type ToolName,
|
|
23
|
+
ToolNames,
|
|
24
|
+
} from "../core/tool-names.js";
|
|
25
|
+
|
|
26
|
+
export type ToolPlacement = "direct" | "gateway";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Builtin placement. Direct: the fundamental coding operations, context and
|
|
30
|
+
* repository understanding, executable verification, the script runner, the
|
|
31
|
+
* gateway itself, and the ORCHESTRATE and INTERACT planes (operator decision,
|
|
32
|
+
* v0.4.9 handoff §5). Gateway: everything secondary, discovered on demand.
|
|
33
|
+
*/
|
|
34
|
+
export const TOOL_PLACEMENT: Readonly<Record<BuiltinToolName, ToolPlacement>> = {
|
|
35
|
+
[ToolNames.Read]: "direct",
|
|
36
|
+
[ToolNames.Evidence]: "gateway",
|
|
37
|
+
[ToolNames.Grep]: "direct",
|
|
38
|
+
[ToolNames.Find]: "direct",
|
|
39
|
+
[ToolNames.Ls]: "direct",
|
|
40
|
+
[ToolNames.CodeNav]: "direct",
|
|
41
|
+
[ToolNames.Context]: "direct",
|
|
42
|
+
[ToolNames.CredentialPresent]: "gateway",
|
|
43
|
+
[ToolNames.ClioDocs]: "gateway",
|
|
44
|
+
[ToolNames.ClioLibrary]: "gateway",
|
|
45
|
+
[ToolNames.Data]: "gateway",
|
|
46
|
+
[ToolNames.Write]: "direct",
|
|
47
|
+
[ToolNames.Edit]: "direct",
|
|
48
|
+
[ToolNames.Bash]: "direct",
|
|
49
|
+
[ToolNames.Git]: "gateway",
|
|
50
|
+
[ToolNames.Verify]: "direct",
|
|
51
|
+
[ToolNames.RunScript]: "direct",
|
|
52
|
+
[ToolNames.Dispatch]: "direct",
|
|
53
|
+
[ToolNames.Monitor]: "direct",
|
|
54
|
+
[ToolNames.Steer]: "direct",
|
|
55
|
+
[ToolNames.Tasks]: "direct",
|
|
56
|
+
[ToolNames.Ledger]: "direct",
|
|
57
|
+
[ToolNames.Panes]: "direct",
|
|
58
|
+
[ToolNames.Limitation]: "direct",
|
|
59
|
+
[ToolNames.Decide]: "direct",
|
|
60
|
+
[ToolNames.WebRead]: "gateway",
|
|
61
|
+
[ToolNames.WebFetch]: "gateway",
|
|
62
|
+
[ToolNames.AskUser]: "direct",
|
|
63
|
+
[ToolNames.Artifact]: "gateway",
|
|
64
|
+
[ToolNames.Gateway]: "direct",
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** Placement of a tool by name: the builtin table, then the dynamic namespaces. Unknown names are direct. */
|
|
68
|
+
export function toolPlacement(name: string): ToolPlacement {
|
|
69
|
+
if (isBuiltinToolName(name as ToolName)) return TOOL_PLACEMENT[name as BuiltinToolName];
|
|
70
|
+
if (isHarnessExtensionToolName(name) || isMcpToolName(name)) return "gateway";
|
|
71
|
+
return "direct";
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Placement of a registered spec: its explicit declaration wins, then the name rule. */
|
|
75
|
+
export function toolSpecPlacement(spec: { name: string; placement?: ToolPlacement }): ToolPlacement {
|
|
76
|
+
return spec.placement ?? toolPlacement(spec.name);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function isGatewayPlacedToolName(name: string): boolean {
|
|
80
|
+
return toolPlacement(name) === "gateway";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export type GatewayCapabilityKind = "builtin" | "extension" | "mcp";
|
|
84
|
+
|
|
85
|
+
/** Which namespace a gateway capability belongs to, for find listings and describe notes. */
|
|
86
|
+
export function gatewayCapabilityKind(name: string): GatewayCapabilityKind {
|
|
87
|
+
if (isMcpToolName(name)) return "mcp";
|
|
88
|
+
if (isHarnessExtensionToolName(name)) return "extension";
|
|
89
|
+
return "builtin";
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Add `gateway` to a capability list that names any gateway-placed capability.
|
|
94
|
+
* The dispatch admission filter and the worker's `effectiveToolNames` both
|
|
95
|
+
* apply this rule to the same admitted list, which is what keeps the
|
|
96
|
+
* orchestrator's approved tool signature equal to the one the worker attests.
|
|
97
|
+
* A list that reaches nothing behind the gateway gains nothing.
|
|
98
|
+
*/
|
|
99
|
+
export function withGatewayForCapabilities(names: ReadonlyArray<ToolName>): ToolName[] {
|
|
100
|
+
const out = [...new Set(names)];
|
|
101
|
+
if (out.includes(ToolNames.Gateway)) return out;
|
|
102
|
+
if (!out.some((name) => isGatewayPlacedToolName(name))) return out;
|
|
103
|
+
out.push(ToolNames.Gateway);
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* The direct projection of a capability surface: the names that carry an
|
|
109
|
+
* attached schema. Gateway-placed capabilities drop out and, when any was
|
|
110
|
+
* present, `gateway` stands in for them. Used wherever a prompt or a display
|
|
111
|
+
* lists "direct tools" from an admitted capability list.
|
|
112
|
+
*/
|
|
113
|
+
export function directSurfaceNames(names: ReadonlyArray<string>): string[] {
|
|
114
|
+
const seen = new Set<string>();
|
|
115
|
+
const out: string[] = [];
|
|
116
|
+
let reachesGateway = false;
|
|
117
|
+
for (const name of names) {
|
|
118
|
+
if (seen.has(name)) continue;
|
|
119
|
+
seen.add(name);
|
|
120
|
+
if (isGatewayPlacedToolName(name)) {
|
|
121
|
+
reachesGateway = true;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
out.push(name);
|
|
125
|
+
}
|
|
126
|
+
if (reachesGateway && !out.includes(ToolNames.Gateway)) out.push(ToolNames.Gateway);
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface EffectiveToolCall {
|
|
131
|
+
/** The capability that actually ran: the inner tool for a gateway call, the tool itself otherwise. */
|
|
132
|
+
toolName: string;
|
|
133
|
+
/** That capability's own arguments, when the record carried any. */
|
|
134
|
+
args: Record<string, unknown> | undefined;
|
|
135
|
+
/** True when the record was a gateway call unwrapped to its capability. */
|
|
136
|
+
viaGateway: boolean;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
140
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Unwrap a ledger tool record to the capability it stands for. Every consumer
|
|
145
|
+
* keyed on tool names (artifact folding, the read ledger, the path index,
|
|
146
|
+
* mutation observers, evidence, transcript rendering) resolves the record
|
|
147
|
+
* through this one helper so a `gateway` row never becomes an opaque "gateway
|
|
148
|
+
* succeeded" entry that hides the artifact, git, or fetch it performed.
|
|
149
|
+
*
|
|
150
|
+
* The capability comes from the result details when they are present (the
|
|
151
|
+
* gateway stamps `details.capability` on every call result) and from the
|
|
152
|
+
* call arguments (`op: "call"`, `capability`) otherwise. Find and describe
|
|
153
|
+
* records stay `gateway`.
|
|
154
|
+
*/
|
|
155
|
+
export function effectiveToolCall(toolName: string, args: unknown, details?: unknown): EffectiveToolCall {
|
|
156
|
+
const record = isRecord(args) ? args : undefined;
|
|
157
|
+
if (toolName !== ToolNames.Gateway) return { toolName, args: record, viaGateway: false };
|
|
158
|
+
const fromDetails = isRecord(details) && typeof details.capability === "string" ? details.capability : null;
|
|
159
|
+
const fromArgs = record?.op === "call" && typeof record.capability === "string" ? record.capability : null;
|
|
160
|
+
const capability = (fromDetails ?? fromArgs)?.trim() ?? "";
|
|
161
|
+
if (capability.length === 0 || capability === ToolNames.Gateway) return { toolName, args: record, viaGateway: false };
|
|
162
|
+
return { toolName: capability, args: isRecord(record?.args) ? record.args : undefined, viaGateway: true };
|
|
163
|
+
}
|
|
@@ -716,7 +716,7 @@ function validationContractProposals(workspaceRoot: string, diagnostics: string[
|
|
|
716
716
|
* command is deliberately absent, so the proposal cannot become executable
|
|
717
717
|
* until the operator confirms an exact argv through `verifiers add`.
|
|
718
718
|
*/
|
|
719
|
-
function numericContractProposals(workspaceRoot: string): NumericProposal[] {
|
|
719
|
+
function numericContractProposals(workspaceRoot: string, diagnostics: string[]): NumericProposal[] {
|
|
720
720
|
const loaded = loadValidationContract(workspaceRoot);
|
|
721
721
|
if (!loaded.ok || loaded.contract === null) return [];
|
|
722
722
|
const proposals: NumericProposal[] = [];
|
|
@@ -724,7 +724,12 @@ function numericContractProposals(workspaceRoot: string): NumericProposal[] {
|
|
|
724
724
|
for (const artifact of loaded.contract.artifacts ?? []) {
|
|
725
725
|
if (artifact.numerical_tolerances === undefined) continue;
|
|
726
726
|
const tolerance = normalizeNumericTolerance(artifact.numerical_tolerances);
|
|
727
|
-
if (tolerance instanceof Error)
|
|
727
|
+
if (tolerance instanceof Error) {
|
|
728
|
+
diagnostics.push(
|
|
729
|
+
`${loaded.path}: artifact ${JSON.stringify(artifact.path)} numeric proposal skipped: ${tolerance.message}`,
|
|
730
|
+
);
|
|
731
|
+
continue;
|
|
732
|
+
}
|
|
728
733
|
const base = slug(path.basename(artifact.path).replace(/\.[^.]+$/u, ""), "artifact");
|
|
729
734
|
const preferred = boundedId(`numeric-${base}`);
|
|
730
735
|
let id = preferred;
|
|
@@ -842,7 +847,7 @@ export function discoverVerifierAuthoring(workspaceRoot = process.cwd()): Verifi
|
|
|
842
847
|
activeChecks,
|
|
843
848
|
existingChecks,
|
|
844
849
|
proposals,
|
|
845
|
-
numericProposals: numericContractProposals(workspaceRoot),
|
|
850
|
+
numericProposals: numericContractProposals(workspaceRoot, diagnostics),
|
|
846
851
|
diagnostics,
|
|
847
852
|
manualEntry,
|
|
848
853
|
...(typeof catalogText === "string" ? { catalogText } : {}),
|
|
@@ -39,6 +39,12 @@ export const DECLARED_CHECK_KINDS: ReadonlyArray<DeclaredCheckKind> = ["command"
|
|
|
39
39
|
export interface DeclaredNumericCompare {
|
|
40
40
|
/** Repository-relative JSON file of the same shape as the command's stdout. */
|
|
41
41
|
reference: string;
|
|
42
|
+
/**
|
|
43
|
+
* At least one of `relative`, `absolute`, `ulp`, plus the optional rule
|
|
44
|
+
* fields `combine` (`all`, the default, or `any`) and `nonFinite` (`fail`,
|
|
45
|
+
* the default, or `match`). A catalog that omits the rule fields judges
|
|
46
|
+
* exactly as before they existed.
|
|
47
|
+
*/
|
|
42
48
|
tolerance: NumericTolerance;
|
|
43
49
|
}
|
|
44
50
|
|
|
@@ -80,7 +86,14 @@ export type ProjectCatalogLoadResult = { ok: true; source: DeclaredCheckSource |
|
|
|
80
86
|
|
|
81
87
|
const ROOT_FIELDS = new Set(["version", "checks"]);
|
|
82
88
|
const CHECK_FIELDS = new Set(["id", "description", "command", "cwd", "timeoutMs", "tags"]);
|
|
83
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Version 2 adds the kind and its parameters; every one is optional and
|
|
91
|
+
* kind-gated. The numeric tolerance object's own fields (`relative`,
|
|
92
|
+
* `absolute`, `ulp`, `combine`, `nonFinite`) are validated by
|
|
93
|
+
* `normalizeNumericTolerance`, so this version admits a `combine` or
|
|
94
|
+
* `nonFinite` rule without a catalog version bump: a file that omits them
|
|
95
|
+
* keeps the original strict-conjunction, non-finite-fails judgement.
|
|
96
|
+
*/
|
|
84
97
|
const CHECK_FIELDS_V2 = new Set([...CHECK_FIELDS, "kind", "reference", "tolerance", "budget", "baseline"]);
|
|
85
98
|
const TAG_PATTERN = /^[a-z0-9][a-z0-9._-]*$/;
|
|
86
99
|
const SHELL_EXECUTABLES = new Set([
|