@iowarp/clio-coder 0.4.7 → 0.4.8
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +29 -0
- package/CONTRIBUTING.md +83 -74
- package/README.md +66 -45
- package/dist/{acp-W3Y3TRHD.js → acp-JWPQZM2D.js} +14 -14
- package/dist/{agents-J4ICNLQ3.js → agents-4GCDIRVX.js} +55 -54
- package/dist/assets/codewiki.json +1 -1
- package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
- package/dist/assets/web-notices/hono-LICENSE +21 -0
- package/dist/{auth-X2UJUMOC.js → auth-SYAKTDQE.js} +22 -22
- package/dist/background-OW67WMYR.js +37 -0
- package/dist/{builtins-XLXWWSRF.js → builtins-TKS63VNV.js} +4 -4
- package/dist/chunk-2JSCCEKO.js +85 -0
- package/dist/{chunk-QKWL7SYE.js → chunk-2SXGG2IV.js} +49 -38
- package/dist/{chunk-MZHXENL7.js → chunk-2U2U5POA.js} +5 -5
- package/dist/{chunk-NCCQ6DVS.js → chunk-2ZWLMA3T.js} +6 -6
- package/dist/{chunk-FQOOGXBH.js → chunk-36XSBPXL.js} +7 -7
- package/dist/{chunk-5AJPUR72.js → chunk-3IQOZRQ6.js} +7 -7
- package/dist/{chunk-4MFBBY2Z.js → chunk-44U2OUSM.js} +3 -3
- package/dist/{chunk-5ZSZEYJK.js → chunk-4P6M2TTE.js} +2 -2
- package/dist/{chunk-IZYTT3CD.js → chunk-526ABLHD.js} +6 -6
- package/dist/{chunk-BO4XV5VX.js → chunk-5C2OQHLR.js} +4 -4
- package/dist/chunk-5D2FNBMG.js +185 -0
- package/dist/{chunk-M6Z2V6YU.js → chunk-5HULHKT2.js} +5 -5
- package/dist/{chunk-PFLOULP3.js → chunk-5UG6EZI3.js} +4 -4
- package/dist/{chunk-WN552PKN.js → chunk-5W4FRA5Q.js} +280 -900
- package/dist/{chunk-KAFMW7WM.js → chunk-6R5MBXBJ.js} +1 -1
- package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
- package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
- package/dist/{chunk-GXIWHXDB.js → chunk-6X7VOCDY.js} +3 -3
- package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
- package/dist/{chunk-34XHRVKG.js → chunk-ARRUMZ7X.js} +2 -2
- package/dist/{chunk-3T4DXWP6.js → chunk-ATB3Q7YO.js} +1 -6
- package/dist/chunk-AUHVBIDW.js +19 -0
- package/dist/{chunk-L3Z5ANCV.js → chunk-BE4I3UJ2.js} +7 -7
- package/dist/chunk-BFPHMSK7.js +169 -0
- package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
- package/dist/{chunk-D2T66PDV.js → chunk-BIY22UUK.js} +35 -203
- package/dist/{chunk-VMATUZB6.js → chunk-D55WO5J7.js} +11 -11
- package/dist/{chunk-2O2LVQQK.js → chunk-E2NSPYLC.js} +4 -4
- package/dist/{chunk-IJMW64DX.js → chunk-EFXMQYI6.js} +32 -32
- package/dist/{chunk-GVZFCJHE.js → chunk-EPYATQMG.js} +18 -18
- package/dist/{chunk-MZNWZUJM.js → chunk-EXKUF426.js} +11 -11
- package/dist/{chunk-IMOD2YPV.js → chunk-F7Y6QTPL.js} +9 -19
- package/dist/{chunk-IQCNVLO6.js → chunk-FB3KTE2J.js} +10 -7
- package/dist/{chunk-3LXJOICS.js → chunk-FNVPQQYT.js} +2 -2
- package/dist/{chunk-UUQ5G6EZ.js → chunk-GEYX2NZ5.js} +2 -2
- package/dist/{chunk-CP3HIR5H.js → chunk-GJBJHJNY.js} +19 -18
- package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
- package/dist/{chunk-WT5TRMO4.js → chunk-GVU4CXPJ.js} +179 -65
- package/dist/{chunk-TZ6UVP2H.js → chunk-H5DPSUBB.js} +8 -8
- package/dist/{chunk-EUEXGXXR.js → chunk-H77XBUBM.js} +5 -5
- package/dist/{config-YXARKGTX.js → chunk-HMGAKB7E.js} +15 -259
- package/dist/{chunk-EUZRMP4Y.js → chunk-HP7KJ5O2.js} +19 -19
- package/dist/chunk-HVCAY2FH.js +67 -0
- package/dist/{chunk-CPXGJI2A.js → chunk-ICYIUNO4.js} +4 -4
- package/dist/{chunk-GI5RRMAH.js → chunk-IILXVWJY.js} +7 -7
- package/dist/{chunk-MNQN3X6Y.js → chunk-JCVIL6TY.js} +5 -5
- package/dist/chunk-JIMWEYWO.js +63 -0
- package/dist/{chunk-C3G5PNUO.js → chunk-JLBVCROW.js} +25 -25
- package/dist/chunk-JOBN2YQQ.js +176 -0
- package/dist/chunk-JOL2QRLE.js +152 -0
- package/dist/{chunk-N37QC5FV.js → chunk-JRA6OBHY.js} +5 -5
- package/dist/{chunk-C6GEXX4L.js → chunk-JV25I7ID.js} +7 -7
- package/dist/{chunk-SEDI5K5B.js → chunk-JYKUMHCQ.js} +16 -16
- package/dist/{chunk-UA6W4XFJ.js → chunk-K3W6BF5C.js} +2 -2
- package/dist/chunk-K45LHSCI.js +194 -0
- package/dist/{chunk-UA3W4FGC.js → chunk-K53E2PTW.js} +5 -5
- package/dist/{chunk-VCRVEDUC.js → chunk-K5UJD6MM.js} +5 -5
- package/dist/{chunk-65BGHOUR.js → chunk-KGP3UQGJ.js} +5 -5
- package/dist/chunk-KKRXONXG.js +43 -0
- package/dist/{chunk-LBFQMYS3.js → chunk-KWJXCL2X.js} +5 -3
- package/dist/{chunk-RTLNFZMD.js → chunk-L75H5B3B.js} +3 -3
- package/dist/{chunk-G4LGUTOE.js → chunk-LLCGGVSW.js} +6 -6
- package/dist/{chunk-HRAKUPIH.js → chunk-LZCCBLRC.js} +5 -5
- package/dist/{chunk-WURGVOZJ.js → chunk-LZDLYSUN.js} +18 -14
- package/dist/{chunk-ISNCCX42.js → chunk-MATCRH3M.js} +7 -6
- package/dist/{chunk-BAU36233.js → chunk-MEHBW2SP.js} +7 -7
- package/dist/{chunk-BQQ5MXUC.js → chunk-MUXNDNMZ.js} +3 -3
- package/dist/{chunk-NO7J45X6.js → chunk-MWMW53WW.js} +90 -51
- package/dist/chunk-MZDPF35R.js +45 -0
- package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
- package/dist/{chunk-T334FW2H.js → chunk-O2QJDRWP.js} +5 -5
- package/dist/{chunk-T7QQBNLH.js → chunk-O3HSB2YL.js} +9 -7
- package/dist/{chunk-WB7POC6M.js → chunk-OEMFEL26.js} +6 -6
- package/dist/{chunk-77CZRFTE.js → chunk-OPC4DQD6.js} +2 -2
- package/dist/{chunk-4UHVS5T7.js → chunk-ORRNGQDV.js} +8 -8
- package/dist/{chunk-TZHN5ITX.js → chunk-P4JS3MH5.js} +5 -5
- package/dist/{chunk-WBVKKTUT.js → chunk-P7GTE4FX.js} +2 -2
- package/dist/{chunk-6TAATXXH.js → chunk-PAQVETLA.js} +6 -6
- package/dist/{chunk-6CA2BHOR.js → chunk-PFZJMXIY.js} +4 -4
- package/dist/{chunk-4QKAITQT.js → chunk-PGEFOTJB.js} +70 -7
- package/dist/{chunk-MBJO5VNZ.js → chunk-PJ5H5B7A.js} +25 -25
- package/dist/{chunk-DO7M3LSX.js → chunk-PMUUAABD.js} +43 -96
- package/dist/{chunk-A67NR5AT.js → chunk-Q32C6AWI.js} +11 -8
- package/dist/{chunk-ECOMVOHP.js → chunk-QGIC5SX5.js} +2 -2
- package/dist/{chunk-5CMARGPF.js → chunk-QLAGXTTV.js} +7 -2
- package/dist/{chunk-GFQ7P2UF.js → chunk-QLKCCC2J.js} +9 -9
- package/dist/{chunk-SELG4SUR.js → chunk-QWUSS2QP.js} +7 -4
- package/dist/{chunk-P5SC4DLJ.js → chunk-QYSAZMSH.js} +2 -2
- package/dist/{fleet-decisions-S3PTZV2D.js → chunk-R5NRX5N4.js} +5 -41
- package/dist/{chunk-DLIYANB7.js → chunk-RAUOKUZV.js} +11 -11
- package/dist/{chunk-UFYNOQK4.js → chunk-RBES4TCZ.js} +7 -7
- package/dist/{chunk-T52TPHYC.js → chunk-RFULVPBX.js} +4 -4
- package/dist/{chunk-TLTGZTXI.js → chunk-RKFNU5UA.js} +3 -3
- package/dist/{chunk-T4TY5GG3.js → chunk-RM3XJX7P.js} +3 -3
- package/dist/{chunk-6YA46L5A.js → chunk-RNLAPBJL.js} +2 -2
- package/dist/chunk-RPMNIFRY.js +65 -0
- package/dist/{chunk-DACXIVVF.js → chunk-RRZFRIJP.js} +5 -5
- package/dist/{chunk-CE64C5K5.js → chunk-RXI7K4J5.js} +61 -61
- package/dist/{chunk-CULVKYTK.js → chunk-STC6CWUZ.js} +5 -5
- package/dist/{chunk-6YHPAAZR.js → chunk-TEHVMHOK.js} +3 -3
- package/dist/{chunk-VTYHHQ57.js → chunk-TOPICHGR.js} +2 -2
- package/dist/{chunk-UWD3JD5X.js → chunk-UB33F3YW.js} +10 -10
- package/dist/{chunk-TN5FW4XY.js → chunk-UDAK6GR2.js} +12 -9
- package/dist/chunk-USBBEKHW.js +177 -0
- package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
- package/dist/{chunk-6LRLOJHQ.js → chunk-W7KNI3F5.js} +11 -62
- package/dist/chunk-WFTSK7N3.js +637 -0
- package/dist/{chunk-YPRSNUTC.js → chunk-WJWNZXRM.js} +2 -2
- package/dist/chunk-WS4FOGLY.js +686 -0
- package/dist/{chunk-ZGIGW4ZG.js → chunk-WTZVSMQZ.js} +5 -5
- package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
- package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
- package/dist/chunk-XC5POIL4.js +68 -0
- package/dist/{chunk-XZ6UFQ52.js → chunk-XTLJDC2X.js} +22 -17
- package/dist/{chunk-7EEGBKV4.js → chunk-YGIV24MF.js} +8 -8
- package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
- package/dist/{chunk-4N2RZ4TO.js → chunk-YKIIWURD.js} +3 -3
- package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
- package/dist/{chunk-KS7ETA3P.js → chunk-YXANQGCX.js} +6 -6
- package/dist/{chunk-HOX4YZ2K.js → chunk-YXFKLMX2.js} +5 -5
- package/dist/chunk-ZST3FRCV.js +132 -0
- package/dist/cli/index.js +39 -37
- package/dist/{clio-L2P7S2R2.js → clio-BPBAPZGA.js} +9 -9
- package/dist/{code-nav-B5LNX4KU.js → code-nav-KBQ3RIFK.js} +33 -33
- package/dist/{components-63MMQKUT.js → components-6DKAXWFN.js} +10 -10
- package/dist/config-FWL5JK2H.js +270 -0
- package/dist/config-graph-ACDB26L2.js +156 -0
- package/dist/{configure-LMVQJ46J.js → configure-ZIZ4YV62.js} +48 -48
- package/dist/{context-7HJEWTTP.js → context-EZZPT2ZV.js} +49 -49
- package/dist/{context-YG2LZDYZ.js → context-VIL5MFRH.js} +86 -84
- package/dist/{context-XSZKKFBW.js → context-Z3GOBHDK.js} +16 -16
- package/dist/{context-clear-AC5NXHM2.js → context-clear-ZPB3L7MN.js} +72 -70
- package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
- package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
- package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-2GLBVF7L.js} +23 -22
- package/dist/{detail-H73BEF2N.js → detail-VSBWYSGZ.js} +73 -71
- package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-EEEHGKX4.js} +78 -76
- package/dist/docs-VMMWFVHL.js +101 -0
- package/dist/{doctor-EQYJOGUG.js → doctor-V5L4IQGP.js} +63 -62
- package/dist/{eval-4P7O6CCE.js → eval-VJYJ2BV3.js} +80 -65
- package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
- package/dist/evals-J2H5V6DD.js +104 -0
- package/dist/{evidence-D6GUSYJW.js → evidence-POWAEBEW.js} +72 -70
- package/dist/evidence-XCCCLS36.js +242 -0
- package/dist/{evidence-O76QF7TZ.js → evidence-Y35YSXH6.js} +80 -78
- package/dist/{evolve-H47BCETS.js → evolve-GPG72VB6.js} +74 -72
- package/dist/{extensions-NNL3ZOCU.js → extensions-YIZ7W3DA.js} +12 -11
- package/dist/fleet-2MDCQ2VK.js +264 -0
- package/dist/{fleet-KMNS6NOM.js → fleet-W2AF3TOJ.js} +127 -123
- package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-WS56G26H.js} +11 -11
- package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
- package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-ELTBXBAV.js} +22 -22
- package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-45IK73L4.js} +84 -248
- package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-T5NCZKHE.js} +4 -4
- package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-VG4JBLA4.js} +26 -26
- package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-VTSABAYO.js} +72 -70
- package/dist/{fleet-view-BHJFW26B.js → fleet-view-XC7WMKSS.js} +75 -73
- package/dist/{init-XAT5N5YM.js → init-VTJNNTIP.js} +95 -92
- package/dist/install-6PIF6F6W.js +19 -0
- package/dist/{interop-FVECHFKG.js → interop-IU6BNA7C.js} +25 -25
- package/dist/{inventory-7KFQGLCV.js → inventory-QPQUTUUZ.js} +75 -73
- package/dist/{library-NY2XOT75.js → library-HUTAS57T.js} +33 -33
- package/dist/{library-QAPAO23R.js → library-LF7DLU6S.js} +13 -13
- package/dist/library-Q3NWL5CM.js +75 -0
- package/dist/{library-import-5Y6MAS3R.js → library-import-PPW4YUC5.js} +25 -25
- package/dist/{library-inventory-JT6HWITQ.js → library-inventory-DIRVFRZU.js} +19 -19
- package/dist/{library-validation-EQUH25DC.js → library-validation-XHUZ3INE.js} +17 -17
- package/dist/{memory-DYVTTCP6.js → memory-Z2LSKNV6.js} +74 -72
- package/dist/{models-MASFJ6Y2.js → models-3FTREYPY.js} +53 -52
- package/dist/{monitor-YMP4NXJJ.js → monitor-HF2MQRB3.js} +83 -80
- package/dist/{orchestrator-AFQRRTEI.js → orchestrator-UYPA6W4S.js} +498 -358
- package/dist/{panes-NICTHQCV.js → panes-736XB73K.js} +14 -14
- package/dist/{panes-D3Y2KFG5.js → panes-C4P3PIWT.js} +4 -4
- package/dist/{paths-PSFAUIGO.js → paths-JQ4QYIYB.js} +6 -6
- package/dist/{preload-5Q7VXRFJ.js → preload-XSLRYH3Y.js} +72 -70
- package/dist/{reset-7NKZK7JN.js → reset-V7QSPZYE.js} +9 -9
- package/dist/{resources-NILSIZAT.js → resources-OJGDFHYT.js} +22 -22
- package/dist/{run-BPZGEBZV.js → run-T354SMDW.js} +129 -125
- package/dist/settings-MWZXO6RV.js +72 -0
- package/dist/{share-EZ6ERBMH.js → share-Y5ZKJPND.js} +26 -26
- package/dist/{skills-BTVVNYVM.js → skills-4GLZC4LN.js} +28 -28
- package/dist/{skills-eval-UY34MNK7.js → skills-eval-L5T7GODM.js} +87 -85
- package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-LASKXEZI.js} +22 -22
- package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-OIMRU36D.js} +49 -49
- package/dist/{steer-2B3EQGFH.js → steer-KMAM2Y2C.js} +4 -4
- package/dist/{support-L2SOL3IE.js → support-AWC3XKPX.js} +8 -8
- package/dist/system-CD75NYBU.js +116 -0
- package/dist/{targets-44VKGFLN.js → targets-VSZX2J2S.js} +66 -65
- package/dist/{tasks-3KODKFU7.js → tasks-AN567LYH.js} +14 -14
- package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-6KTWNHVY.js} +3 -3
- package/dist/{tools-3UB7TEVR.js → tools-AGRK3V5J.js} +13 -13
- package/dist/{trace-TAMIU4OJ.js → trace-P4MQZD33.js} +18 -67
- package/dist/{uninstall-QYVRPEM4.js → uninstall-BRUTEPIC.js} +37 -12
- package/dist/{upgrade-7PMKM2JH.js → upgrade-SBCGHQGJ.js} +22 -21
- package/dist/{usage-6EQV7EQK.js → usage-BIDVTO6V.js} +93 -87
- package/dist/{verifiers-JLITWSHU.js → verifiers-LTGCAMXS.js} +12 -12
- package/dist/{verify-T7NAEVIG.js → verify-OZU4LLNP.js} +9 -9
- package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
- package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +36 -0
- package/dist/web/client/assets/array-BifhSqXX.js +1 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
- package/dist/web/client/assets/blockDiagram-I7D4REHJ-wi0_CYHL.js +129 -0
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
- package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
- package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
- package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
- package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
- package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
- package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
- package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
- package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
- package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
- package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
- package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
- package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
- package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
- package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
- package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
- package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
- package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
- package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +1 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +1 -0
- package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.js +62 -0
- package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
- package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
- package/dist/web/client/assets/dagre-GXQ25YYZ-C9mZmAPe.js +4 -0
- package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
- package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
- package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
- package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
- package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
- package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
- package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
- package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web/client/assets/index-Dsi52apB.css +1 -0
- package/dist/web/client/assets/index-FSIC94pi.js +83 -0
- package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
- package/dist/web/client/assets/init-C-OQMol4.js +1 -0
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
- package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
- package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
- package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
- package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
- package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.js +96 -0
- package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/web/client/assets/packet-AYTQ26CC-OqVl_07o.js +1 -0
- package/dist/web/client/assets/path-fybaL0A-.js +1 -0
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
- package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.js +39 -0
- package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
- package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
- package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
- package/dist/web/client/assets/prism-core-BngLtbUd.js +1 -0
- package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
- package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
- package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
- package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
- package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
- package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
- package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
- package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
- package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
- package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
- package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
- package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
- package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
- package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
- package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
- package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
- package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
- package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
- package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
- package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
- package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
- package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
- package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
- package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
- package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
- package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
- package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-Bjs4yjgs.js +7 -0
- package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
- package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
- package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
- package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/web/client/assets/src-yeptRXpt.js +1 -0
- package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
- package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
- package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
- package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
- package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
- package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.js +7 -0
- package/dist/web/client/clio-coder-logo.webp +0 -0
- package/dist/web/client/icon-192.png +0 -0
- package/dist/web/client/icon-512.png +0 -0
- package/dist/web/client/index.html +4 -0
- package/dist/web/client/manifest.webmanifest +15 -0
- package/dist/web/client/offline.css +55 -0
- package/dist/web/client/offline.html +5 -0
- package/dist/web/client/offline.js +27 -0
- package/dist/web/client/sw.js +34 -0
- package/dist/web/ops-worker.js +37 -0
- package/dist/web/reads-worker.js +1726 -0
- package/dist/web/server.js +8499 -0
- package/dist/web-EU6ATJWA.js +13 -0
- package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-U22Q7HV4.js} +3 -3
- package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-LZRLFG6I.js} +98 -95
- package/dist/{with-panes-CHFC7HGI.js → with-panes-X5CZOGML.js} +9 -9
- package/dist/worker/entry.js +68 -68
- package/docs/README.md +27 -26
- package/docs/architecture/acp.md +5 -9
- package/docs/architecture/alcf-provider.md +0 -3
- package/docs/architecture/architecture.md +0 -3
- package/docs/architecture/artifact-placement.md +0 -3
- package/docs/architecture/artifact-versions.md +0 -3
- package/docs/architecture/capacity-and-scheduling.md +0 -3
- package/docs/architecture/context-engine.md +0 -3
- package/docs/architecture/context-working-set.md +0 -3
- package/docs/architecture/dispatch-architecture-rationale.md +0 -3
- package/docs/architecture/dispatch-typed-intent.md +0 -3
- package/docs/architecture/evidence-and-memory.md +0 -3
- package/docs/architecture/library.md +0 -2
- package/docs/architecture/middleware-and-components.md +0 -3
- package/docs/architecture/model-catalog.md +1 -4
- package/docs/architecture/observability.md +0 -3
- package/docs/architecture/pi-boundary.md +6 -9
- package/docs/architecture/prompt-envelope-and-tools.md +1 -4
- package/docs/architecture/provider-adapter-cookbook.md +1 -4
- package/docs/architecture/safety-model.md +0 -3
- package/docs/architecture/session-lifecycle.md +0 -3
- package/docs/architecture/time-conventions.md +0 -3
- package/docs/architecture/trace-store.md +28 -20
- package/docs/architecture/tui-design.md +1 -4
- package/docs/architecture/worker-context.md +1 -3
- package/docs/architecture/worker-dispatch-mechanics.md +1 -4
- package/docs/guide/authoring-plugins.md +1 -3
- package/docs/guide/built-in-agents.md +0 -3
- package/docs/guide/commands-and-modes.md +2 -6
- package/docs/guide/configuration-and-targets.md +197 -4
- package/docs/guide/configuration-reference.md +9 -4
- package/docs/guide/environment-variables.md +0 -3
- package/docs/guide/exit-codes-and-output.md +0 -3
- package/docs/guide/extensions-and-sharing.md +0 -3
- package/docs/guide/fleet-dispatch.md +0 -3
- package/docs/guide/glossary.md +0 -3
- package/docs/guide/harness-extensions.md +0 -2
- package/docs/guide/installation-and-lifecycle.md +1 -4
- package/docs/guide/interop.md +0 -2
- package/docs/guide/panes-and-files.md +0 -3
- package/docs/guide/plugins.md +0 -3
- package/docs/guide/proactive-memory.md +0 -3
- package/docs/guide/resource-library.md +0 -2
- package/docs/guide/skills-marketplace.md +0 -2
- package/docs/guide/tool-usage.md +0 -3
- package/docs/guide/troubleshooting.md +0 -3
- package/docs/history/config-knobs-audit.md +0 -3
- package/docs/history/release-cut-checklist.md +0 -3
- package/docs/process/development-pipeline.md +0 -3
- package/docs/process/documentation-coverage.md +3 -3
- package/docs/process/documentation-guide.md +15 -22
- package/docs/process/eval-runner.md +0 -3
- package/docs/process/evals-internal.md +0 -3
- package/docs/process/evolution.md +0 -3
- package/docs/process/fleet-demo-runbook.md +0 -3
- package/docs/process/git-commit-provenance.md +0 -3
- package/docs/process/performance-methodology.md +1 -4
- package/docs/process/release-cut-checklist.md +114 -221
- package/docs/process/scientific-validation.md +1 -4
- package/library/registry.yaml +2 -2
- package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
- package/library/skills/meta/clio-coder-test/evals.md +16 -2
- package/library/skills/meta/clio-coder-test/plugin.json +1 -1
- package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
- package/library/skills/registry.yaml +2 -2
- package/library/skills/skill-marketplace.json +1 -1
- package/package.json +13 -11
- package/src/cli/docs.ts +65 -328
- package/src/cli/index.ts +3 -1
- package/src/cli/trace.ts +4 -65
- package/src/cli/uninstall.ts +26 -0
- package/src/cli/usage.ts +3 -0
- package/src/cli/web.ts +79 -0
- package/src/core/bus-events.ts +3 -4
- package/src/core/config.ts +71 -0
- package/src/core/domain-loader.ts +37 -28
- package/src/core/termination.ts +13 -9
- package/src/domains/agents/contract.ts +1 -1
- package/src/domains/agents/extension.ts +18 -10
- package/src/domains/config/extension.ts +5 -4
- package/src/domains/dispatch/extension.ts +75 -12
- package/src/domains/dispatch/index.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/state.ts +1 -2
- package/src/domains/dispatch/types.ts +2 -0
- package/src/domains/eval/metrics/tracked.ts +22 -2
- package/src/domains/extensions/operator-runtime.ts +3 -1
- package/src/domains/middleware/hooks.ts +2 -2
- package/src/domains/observability/background-memory-usage.ts +3 -0
- package/src/domains/observability/compaction-usage.ts +2 -0
- package/src/domains/observability/cost.ts +5 -0
- package/src/domains/observability/extension.ts +1 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -0
- package/src/domains/observability/trace-store.ts +65 -5
- package/src/domains/prompts/extension.ts +4 -17
- package/src/domains/providers/cache-deployment.ts +147 -0
- package/src/domains/providers/catalog.ts +12 -7
- package/src/domains/providers/extension.ts +27 -5
- package/src/domains/providers/index.ts +1 -0
- package/src/domains/providers/plugins.ts +3 -13
- package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
- package/src/domains/providers/types/target-descriptor.ts +17 -0
- package/src/domains/session/compaction/compact.ts +4 -1
- package/src/domains/session/entries.ts +1 -0
- package/src/domains/session/usage.ts +6 -7
- package/src/engine/acp/server.ts +11 -0
- package/src/engine/ai.ts +2 -0
- package/src/engine/apis/openai-completions.ts +9 -4
- package/src/engine/prewarm.ts +232 -0
- package/src/engine/provider-diagnostics.ts +6 -1
- package/src/entry/orchestrator.ts +20 -16
- package/src/interactive/chat-loop-messages.ts +3 -0
- package/src/interactive/chat-loop.ts +2 -8
- package/src/interactive/prewarm.ts +11 -197
- package/src/interactive/session-usage-reseed.ts +2 -0
- package/src/interactive/side-question.ts +2 -0
- package/src/interactive/turn-context.ts +1 -0
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-prewarm.ts +126 -19
- package/src/interactive/turn-runtime.ts +14 -0
- package/src/tools/builtin-tool-catalog.ts +8 -4
- package/src/tools/registry.ts +12 -2
- package/src/worker/spec-contract.ts +27 -0
- package/dist/docs-BL7ROUFN.js +0 -292
|
@@ -10,10 +10,16 @@
|
|
|
10
10
|
* nobody watching.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
13
14
|
import { BusChannels } from "../core/bus-events.js";
|
|
14
15
|
import type { ClioSettings } from "../core/config.js";
|
|
15
16
|
import type { SafeEventBus } from "../core/event-bus.js";
|
|
16
|
-
import
|
|
17
|
+
import { endpointCapacityUsage } from "../domains/dispatch/index.js";
|
|
18
|
+
import {
|
|
19
|
+
type CacheDeploymentObservation,
|
|
20
|
+
observeCacheDeployment,
|
|
21
|
+
type ProvidersContract,
|
|
22
|
+
} from "../domains/providers/index.js";
|
|
17
23
|
import type { SessionContract } from "../domains/session/contract.js";
|
|
18
24
|
import type { Usage } from "../engine/types.js";
|
|
19
25
|
import { type PrewarmTrigger, prewarmPromptTokens, runPrewarmRound } from "./prewarm.js";
|
|
@@ -28,9 +34,14 @@ export type PrewarmSkipReason =
|
|
|
28
34
|
| "dispatch-active"
|
|
29
35
|
| "tier"
|
|
30
36
|
| "unresolved"
|
|
37
|
+
| "deployment"
|
|
38
|
+
| "cooldown"
|
|
39
|
+
| "expired"
|
|
31
40
|
| "superseded";
|
|
32
41
|
|
|
33
|
-
export type PrewarmOutcome =
|
|
42
|
+
export type PrewarmOutcome =
|
|
43
|
+
| { ran: true; trigger: PrewarmTrigger }
|
|
44
|
+
| { ran: false; reason: PrewarmSkipReason; detail?: string };
|
|
34
45
|
|
|
35
46
|
export interface TurnPrewarmDeps {
|
|
36
47
|
state: ChatTurnState;
|
|
@@ -78,6 +89,7 @@ export interface TurnPrewarmDeps {
|
|
|
78
89
|
registerEndpointSlot?: (runtime: AgentRuntime) => (() => void) | null;
|
|
79
90
|
/** Test seam. Production uses the real provider round. */
|
|
80
91
|
runPrewarm?: typeof runPrewarmRound;
|
|
92
|
+
observeDeployment?: typeof observeCacheDeployment;
|
|
81
93
|
/**
|
|
82
94
|
* Whether a submit aborts the round's request. Defaults to the measured
|
|
83
95
|
* backend behavior; see {@link ABORT_ROUND_ON_SUBMIT}.
|
|
@@ -127,6 +139,13 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
127
139
|
let pendingTrigger: PrewarmTrigger | null = null;
|
|
128
140
|
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
129
141
|
let active: AbortController | null = null;
|
|
142
|
+
// Ownership outlives detachment: one request and at most one newer trigger.
|
|
143
|
+
let running: AbortController | null = null;
|
|
144
|
+
let disposed = false;
|
|
145
|
+
let pendingSince = 0;
|
|
146
|
+
let lastFinished = 0;
|
|
147
|
+
let lastPrefix: string | null = null;
|
|
148
|
+
let lastSkip: string | null = null;
|
|
130
149
|
// Rounds a submit or a session switch let go of. Their result is still
|
|
131
150
|
// recorded, but it no longer describes the prefix the next turn will send, so
|
|
132
151
|
// it never reaches the `/context` line.
|
|
@@ -167,13 +186,33 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
167
186
|
// notice from either.
|
|
168
187
|
const targetId = deps.getSettings().chat?.target?.trim();
|
|
169
188
|
const runtimeId = targetId ? deps.providers.getTarget(targetId)?.runtime : undefined;
|
|
170
|
-
if (
|
|
189
|
+
if (
|
|
190
|
+
runtimeId === undefined ||
|
|
191
|
+
(deps.providers.getRuntime(runtimeId)?.tier !== "local-native" &&
|
|
192
|
+
!(runtimeId === "litellm" && targetId && deps.providers.getTarget(targetId)?.cache?.deployment))
|
|
193
|
+
)
|
|
194
|
+
return "tier";
|
|
171
195
|
return null;
|
|
172
196
|
};
|
|
173
197
|
|
|
174
198
|
const runOnce = async (trigger: PrewarmTrigger, controller: AbortController): Promise<PrewarmOutcome> => {
|
|
175
199
|
const refusal = admissionRefusal();
|
|
176
200
|
if (refusal) return { ran: false, reason: refusal };
|
|
201
|
+
const targetId = deps.getSettings().chat.target;
|
|
202
|
+
const target = targetId ? deps.providers.getTarget(targetId) : null;
|
|
203
|
+
if (!target) return { ran: false, reason: "unresolved" };
|
|
204
|
+
const targetSettings = JSON.stringify(target);
|
|
205
|
+
const started = Date.now();
|
|
206
|
+
if (target.cache?.retention === "none") return { ran: false, reason: "disabled" };
|
|
207
|
+
if (target.pricing && Object.values(target.pricing).some((rate) => rate > 0))
|
|
208
|
+
return { ran: false, reason: "deployment", detail: "paid-warming-disabled" };
|
|
209
|
+
const cooldown = Math.max(1000, target.cache?.warm?.cooldownMs ?? 60000);
|
|
210
|
+
if (Date.now() - lastFinished < cooldown) return { ran: false, reason: "cooldown" };
|
|
211
|
+
const observe = deps.observeDeployment ?? observeCacheDeployment;
|
|
212
|
+
let deployment: CacheDeploymentObservation = await observe(target, deps.getSettings().chat.model ?? "", {
|
|
213
|
+
signal: controller.signal,
|
|
214
|
+
});
|
|
215
|
+
if (deployment.warm !== "bounded") return { ran: false, reason: "deployment", detail: deployment.reason };
|
|
177
216
|
|
|
178
217
|
const prepared = await deps.prepareRuntime(controller.signal);
|
|
179
218
|
if (!prepared.ok) return { ran: false, reason: "unresolved" };
|
|
@@ -194,15 +233,48 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
194
233
|
const lateRefusal = admissionRefusal();
|
|
195
234
|
if (lateRefusal) return { ran: false, reason: lateRefusal };
|
|
196
235
|
if (detached.has(controller) || controller.signal.aborted) return { ran: false, reason: "superseded" };
|
|
236
|
+
// Binding/residency can change during preparation. Discovery itself never
|
|
237
|
+
// loads models and missing evidence leaves ordinary inference untouched.
|
|
238
|
+
deployment = await observe(target, runtime.wireModelId, { signal: controller.signal });
|
|
239
|
+
if (deployment.warm !== "bounded") return { ran: false, reason: "deployment", detail: deployment.reason };
|
|
240
|
+
const finalRefusal = admissionRefusal();
|
|
241
|
+
if (finalRefusal) return { ran: false, reason: finalRefusal };
|
|
242
|
+
if (
|
|
243
|
+
detached.has(controller) ||
|
|
244
|
+
controller.signal.aborted ||
|
|
245
|
+
JSON.stringify(deps.providers.getTarget(target.id)) !== targetSettings
|
|
246
|
+
)
|
|
247
|
+
return { ran: false, reason: "superseded" };
|
|
248
|
+
if (Date.now() - started > 30000) return { ran: false, reason: "expired" };
|
|
249
|
+
// This includes shared dispatch leases/reservations and this process's
|
|
250
|
+
// foreground streams. It is a fresh check, not an atomic global warm lease;
|
|
251
|
+
// server slot observations above also include unrelated active traffic.
|
|
252
|
+
if (deployment.endpoint && (endpointCapacityUsage()[deployment.endpoint] ?? 0) > 0)
|
|
253
|
+
return { ran: false, reason: "dispatch-active" };
|
|
254
|
+
const prefix = createHash("sha256")
|
|
255
|
+
.update(
|
|
256
|
+
JSON.stringify({
|
|
257
|
+
model: runtime.agent.state.model,
|
|
258
|
+
system: runtime.agent.state.systemPrompt,
|
|
259
|
+
messages: runtime.agent.state.messages,
|
|
260
|
+
tools: runtime.agent.state.tools,
|
|
261
|
+
thinking: runtime.agent.state.thinkingLevel,
|
|
262
|
+
}),
|
|
263
|
+
)
|
|
264
|
+
.digest("hex");
|
|
265
|
+
if (prefix === lastPrefix && Date.now() - lastFinished < Math.max(cooldown, 60000))
|
|
266
|
+
return { ran: false, reason: "cooldown" };
|
|
197
267
|
|
|
198
268
|
// The claim is taken before the request goes out and released in the
|
|
199
269
|
// finally, including on the detach path, because the request the server is
|
|
200
270
|
// still finishing is the one occupying the slot.
|
|
201
271
|
const releaseEndpointSlot = deps.registerEndpointSlot?.(runtime) ?? null;
|
|
202
272
|
let result: Awaited<ReturnType<typeof round>>;
|
|
273
|
+
const deadline = setTimeout(() => controller.abort(), Math.min(target.cache?.warm?.maxDurationMs ?? 30000, 120000));
|
|
203
274
|
try {
|
|
204
275
|
result = await round({
|
|
205
276
|
model: runtime.agent.state.model,
|
|
277
|
+
agent: runtime.agent,
|
|
206
278
|
state: {
|
|
207
279
|
systemPrompt: runtime.agent.state.systemPrompt,
|
|
208
280
|
messages: runtime.agent.state.messages,
|
|
@@ -211,10 +283,14 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
211
283
|
},
|
|
212
284
|
...(prepared.apiKey !== undefined ? { apiKey: prepared.apiKey } : {}),
|
|
213
285
|
signal: controller.signal,
|
|
286
|
+
maxInputTokens: target.cache?.warm?.maxInputTokens ?? 8192,
|
|
214
287
|
});
|
|
215
288
|
} finally {
|
|
289
|
+
clearTimeout(deadline);
|
|
290
|
+
lastFinished = Date.now();
|
|
216
291
|
releaseEndpointSlot?.();
|
|
217
292
|
}
|
|
293
|
+
lastPrefix = result.aborted || result.errorMessage ? null : prefix;
|
|
218
294
|
|
|
219
295
|
// The prefill the server did is spend whatever the operator did next, so a
|
|
220
296
|
// let-go round is recorded exactly like a completed one. Only the
|
|
@@ -223,7 +299,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
223
299
|
// prefix.
|
|
224
300
|
const wasDetached = detached.has(controller) || controller.signal.aborted;
|
|
225
301
|
const promptTokens = prewarmPromptTokens(result);
|
|
226
|
-
if (!wasDetached) {
|
|
302
|
+
if (!wasDetached && !result.errorMessage) {
|
|
227
303
|
deps.context.notePrewarm({
|
|
228
304
|
tokens: promptTokens,
|
|
229
305
|
ms: result.timing.apiMs,
|
|
@@ -242,6 +318,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
242
318
|
parentTurnId: deps.state.lastTurnId,
|
|
243
319
|
data: {
|
|
244
320
|
trigger,
|
|
321
|
+
deployment,
|
|
245
322
|
target: runtime.targetId,
|
|
246
323
|
model: runtime.wireModelId,
|
|
247
324
|
promptTokens,
|
|
@@ -249,9 +326,10 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
249
326
|
detached: wasDetached,
|
|
250
327
|
timing: result.timing,
|
|
251
328
|
promptCache: {
|
|
252
|
-
input: result.usage?.input ??
|
|
253
|
-
cacheRead: result.usage?.cacheRead ??
|
|
254
|
-
cacheWrite: result.usage?.cacheWrite ??
|
|
329
|
+
input: result.usage?.input ?? null,
|
|
330
|
+
cacheRead: result.usage?.cacheRead ?? null,
|
|
331
|
+
cacheWrite: result.usage?.cacheWrite ?? null,
|
|
332
|
+
...(result.usage?.cacheWrite1h === undefined ? {} : { cacheWrite1h: result.usage.cacheWrite1h }),
|
|
255
333
|
...(result.backend ? { backend: { ...result.backend } } : {}),
|
|
256
334
|
},
|
|
257
335
|
...(result.errorMessage ? { error: result.errorMessage } : {}),
|
|
@@ -279,28 +357,55 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
279
357
|
|
|
280
358
|
const fire = (): void => {
|
|
281
359
|
timer = null;
|
|
360
|
+
if (disposed || running !== null) return;
|
|
282
361
|
const trigger = pendingTrigger;
|
|
283
362
|
pendingTrigger = null;
|
|
284
363
|
if (trigger === null) return;
|
|
285
364
|
const controller = new AbortController();
|
|
286
365
|
active = controller;
|
|
287
|
-
|
|
288
|
-
inFlight =
|
|
289
|
-
.
|
|
290
|
-
|
|
366
|
+
running = controller;
|
|
367
|
+
inFlight = (
|
|
368
|
+
Date.now() - pendingSince > 30000
|
|
369
|
+
? Promise.resolve<PrewarmOutcome>({ ran: false, reason: "expired" })
|
|
370
|
+
: runOnce(trigger, controller)
|
|
371
|
+
)
|
|
372
|
+
.then((outcome) => {
|
|
373
|
+
if (!outcome.ran && deps.getSettings().chat.prewarm && outcome.reason !== "surface") {
|
|
374
|
+
const key = `${outcome.reason}:${outcome.detail ?? ""}`;
|
|
375
|
+
if (lastSkip !== key) {
|
|
376
|
+
lastSkip = key;
|
|
377
|
+
try {
|
|
378
|
+
deps.session?.appendEntry({
|
|
379
|
+
kind: "custom",
|
|
380
|
+
customType: "prewarmSkipped",
|
|
381
|
+
display: false,
|
|
382
|
+
parentTurnId: deps.state.lastTurnId,
|
|
383
|
+
data: { trigger, ...outcome },
|
|
384
|
+
});
|
|
385
|
+
} catch {
|
|
386
|
+
/* Optional diagnostics. */
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
} else if (outcome.ran) lastSkip = null;
|
|
390
|
+
return outcome;
|
|
391
|
+
})
|
|
291
392
|
.catch(() => null)
|
|
292
393
|
.finally(() => {
|
|
293
394
|
if (active === controller) active = null;
|
|
395
|
+
running = null;
|
|
396
|
+
if (!disposed && pendingTrigger !== null && timer === null) timer = setTimeout(fire, 0);
|
|
294
397
|
});
|
|
295
398
|
};
|
|
296
399
|
|
|
297
400
|
return {
|
|
298
401
|
schedule(trigger: PrewarmTrigger): void {
|
|
402
|
+
if (disposed) return;
|
|
299
403
|
// A newer trigger describes a newer prefix; the older round is no longer
|
|
300
404
|
// warming history this session has.
|
|
301
405
|
releaseActiveRound();
|
|
302
406
|
pendingTrigger = trigger;
|
|
303
|
-
|
|
407
|
+
pendingSince = Date.now();
|
|
408
|
+
if (timer !== null || running !== null) return;
|
|
304
409
|
// Ref'd on purpose, same reasoning as `settled()` below: the timer is due
|
|
305
410
|
// in 0 ms, so it holds the event loop for one tick at most, and a Node 22
|
|
306
411
|
// loop that drains past a due unref'd timer would otherwise never start
|
|
@@ -317,7 +422,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
317
422
|
releaseActiveRound();
|
|
318
423
|
},
|
|
319
424
|
|
|
320
|
-
settled(): Promise<PrewarmOutcome | null> {
|
|
425
|
+
async settled(): Promise<PrewarmOutcome | null> {
|
|
321
426
|
// One hop past the scheduling tick so a caller that just scheduled a
|
|
322
427
|
// round waits for that round rather than for the previous one. The timer
|
|
323
428
|
// is deliberately ref'd, unlike the scheduling timer above: the caller is
|
|
@@ -327,14 +432,16 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
327
432
|
// pending forever and cancelled every later test in the lane; Node 24
|
|
328
433
|
// happens to fire the due timer first, which is why the hang never
|
|
329
434
|
// reproduced on a 24.x development machine.
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
});
|
|
435
|
+
let outcome: PrewarmOutcome | null;
|
|
436
|
+
do {
|
|
437
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 0));
|
|
438
|
+
outcome = await inFlight;
|
|
439
|
+
} while (timer !== null || running !== null || pendingTrigger !== null);
|
|
440
|
+
return outcome;
|
|
335
441
|
},
|
|
336
442
|
|
|
337
443
|
dispose(): void {
|
|
444
|
+
disposed = true;
|
|
338
445
|
for (const unsubscribe of unsubscribeDispatch) unsubscribe?.();
|
|
339
446
|
pendingTrigger = null;
|
|
340
447
|
if (timer !== null) {
|
|
@@ -343,7 +450,7 @@ export function createTurnPrewarm(deps: TurnPrewarmDeps): TurnPrewarm {
|
|
|
343
450
|
}
|
|
344
451
|
// Shutdown always aborts: the process is going away, and a socket held
|
|
345
452
|
// open for a round nobody will read is not a latency question.
|
|
346
|
-
|
|
453
|
+
running?.abort();
|
|
347
454
|
active = null;
|
|
348
455
|
},
|
|
349
456
|
};
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
import type { RetrySettings } from "../domains/session/retry.js";
|
|
26
26
|
import type { createEngineAgent } from "../engine/agent.js";
|
|
27
27
|
import { cleanupEngineSessionResources } from "../engine/ai.js";
|
|
28
|
+
import { setGlobalDefaultMaxOutputTokens } from "../engine/apis/index.js";
|
|
28
29
|
import { sanitizeLockedSynthesisMessage } from "../engine/loop-guard.js";
|
|
29
30
|
import {
|
|
30
31
|
patchProviderThinkingPayload,
|
|
@@ -380,9 +381,17 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
380
381
|
);
|
|
381
382
|
};
|
|
382
383
|
|
|
384
|
+
// A target id/model names the selection, not its current URL, auth, pricing
|
|
385
|
+
// or cache policy. Keep the constructed descriptor identity across calls.
|
|
386
|
+
let runtimeTargetSettings: string | null = null;
|
|
383
387
|
const ensureRuntime = (): AgentRuntime | null => {
|
|
384
388
|
const target = readTarget();
|
|
385
389
|
if (!target) return null;
|
|
390
|
+
const targetSettings = JSON.stringify(target.target);
|
|
391
|
+
const sameTargetSettings = runtimeTargetSettings === targetSettings;
|
|
392
|
+
// Preflight and the wire budget share the session's effective settings,
|
|
393
|
+
// including overrides that never reach the saved providers snapshot.
|
|
394
|
+
setGlobalDefaultMaxOutputTokens(deps.getSettings().chat.maxOutputTokens);
|
|
386
395
|
context.emitContextWindowWarningTransition(target.runtimeResolution?.contextWindowDetails?.warning ?? null);
|
|
387
396
|
if (!deps.knownTargets().has(target.target.id)) {
|
|
388
397
|
throw new TurnAdmissionError(
|
|
@@ -394,6 +403,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
394
403
|
state.runtime &&
|
|
395
404
|
state.runtime.targetId === target.target.id &&
|
|
396
405
|
state.runtime.runtimeId === target.runtime.id &&
|
|
406
|
+
sameTargetSettings &&
|
|
397
407
|
state.runtime.wireModelId === target.wireModelId
|
|
398
408
|
) {
|
|
399
409
|
// Same target+runtime+model. Settings may still have moved
|
|
@@ -427,6 +437,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
427
437
|
state.runtime &&
|
|
428
438
|
state.runtime.targetId === target.target.id &&
|
|
429
439
|
state.runtime.runtimeId === target.runtime.id &&
|
|
440
|
+
sameTargetSettings &&
|
|
430
441
|
state.runtime.wireModelId !== target.wireModelId
|
|
431
442
|
) {
|
|
432
443
|
const nextModel = synthesizeModel(target);
|
|
@@ -472,6 +483,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
472
483
|
maxRetryDelayMs: deps.retrySettings().maxDelayMs,
|
|
473
484
|
...(gatewaySessionId ? { sessionId: gatewaySessionId } : {}),
|
|
474
485
|
onStreamInvocation: () => {
|
|
486
|
+
setGlobalDefaultMaxOutputTokens(deps.getSettings().chat.maxOutputTokens);
|
|
475
487
|
apiCallStartedAt = performance.now();
|
|
476
488
|
apiCallFirstDeltaAt = null;
|
|
477
489
|
},
|
|
@@ -777,6 +789,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
777
789
|
output: summary.output,
|
|
778
790
|
cacheRead: summary.cacheRead,
|
|
779
791
|
cacheWrite: summary.cacheWrite,
|
|
792
|
+
...(summary.cacheWrite1h === undefined ? {} : { cacheWrite1h: summary.cacheWrite1h }),
|
|
780
793
|
reasoningTokens: summary.reasoning,
|
|
781
794
|
totalTokens: summary.tokens,
|
|
782
795
|
apiCalls: summary.apiCalls,
|
|
@@ -911,6 +924,7 @@ export function createTurnRuntime(deps: TurnRuntimeDeps): TurnRuntime {
|
|
|
911
924
|
});
|
|
912
925
|
|
|
913
926
|
state.runtime = localRuntime;
|
|
927
|
+
runtimeTargetSettings = targetSettings;
|
|
914
928
|
// Append a modelChange marker only when this rebuild replaces a prior
|
|
915
929
|
// runtime, which is the cross-target swap case (mid-session change of
|
|
916
930
|
// target or runtime id). On the initial build, the session header's
|
|
@@ -346,12 +346,16 @@ function withBuiltinMetadata<T extends ToolSpec>(spec: T): T {
|
|
|
346
346
|
if (!metadata) return spec;
|
|
347
347
|
// The read cap is a guardrail (`safety.limits.readBytesPerCall`) installed
|
|
348
348
|
// from settings after this module loads, so the table's import-time value
|
|
349
|
-
// is the default, not the operator's.
|
|
350
|
-
//
|
|
351
|
-
// and a settings file raising the read cap used to fail boot.
|
|
349
|
+
// is the default, not the operator's. Resolve the policy cap when consumed
|
|
350
|
+
// so registration checks and result shaping follow later settings changes.
|
|
352
351
|
const resultSizePolicy =
|
|
353
352
|
spec.name === ToolNames.Read
|
|
354
|
-
?
|
|
353
|
+
? {
|
|
354
|
+
...metadata.resultSizePolicy,
|
|
355
|
+
get maxBytes() {
|
|
356
|
+
return policyCap(readMaxBytes());
|
|
357
|
+
},
|
|
358
|
+
}
|
|
355
359
|
: metadata.resultSizePolicy;
|
|
356
360
|
return withMetadata(spec, {
|
|
357
361
|
...metadata,
|
package/src/tools/registry.ts
CHANGED
|
@@ -486,7 +486,12 @@ export function createRegistry(deps: RegistryDeps): ToolRegistry {
|
|
|
486
486
|
});
|
|
487
487
|
const digest = toolResultDigestFor(spec, result, resultDisposition, options);
|
|
488
488
|
const afterEffects = runToolHook("after_tool", spec, call, decision, options, result, digest);
|
|
489
|
-
const finalResult = shapeToolResult(
|
|
489
|
+
const finalResult = shapeToolResult(
|
|
490
|
+
spec,
|
|
491
|
+
applyToolResultEffects(result, [...beforeEffects, ...afterEffects]),
|
|
492
|
+
options,
|
|
493
|
+
resultDisposition,
|
|
494
|
+
);
|
|
490
495
|
return { kind: "ok", result: finalResult, decision };
|
|
491
496
|
} catch (err) {
|
|
492
497
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -495,7 +500,12 @@ export function createRegistry(deps: RegistryDeps): ToolRegistry {
|
|
|
495
500
|
const afterEffects = runToolHook("after_tool", spec, call, decision, options, result, digest);
|
|
496
501
|
return {
|
|
497
502
|
kind: "ok",
|
|
498
|
-
result: shapeToolResult(
|
|
503
|
+
result: shapeToolResult(
|
|
504
|
+
spec,
|
|
505
|
+
applyToolResultEffects(result, [...beforeEffects, ...afterEffects]),
|
|
506
|
+
options,
|
|
507
|
+
resultDisposition,
|
|
508
|
+
),
|
|
499
509
|
decision,
|
|
500
510
|
};
|
|
501
511
|
}
|
|
@@ -381,6 +381,33 @@ function validateTarget(value: unknown, runtimeId: string, runtimeAliases: Reado
|
|
|
381
381
|
readOptionalEnum(target, "lifecycle", "WorkerSpec.target", TARGET_LIFECYCLES);
|
|
382
382
|
if (target.auth !== undefined) validateTargetAuth(target.auth);
|
|
383
383
|
if (target.pricing !== undefined) validateTargetPricing(target.pricing);
|
|
384
|
+
if (target.cache !== undefined) {
|
|
385
|
+
const cache = readRecord(target.cache, "WorkerSpec.target.cache");
|
|
386
|
+
readOptionalEnum(cache, "retention", "WorkerSpec.target.cache", ["none", "short", "long"] as const);
|
|
387
|
+
if (cache.deployment !== undefined) {
|
|
388
|
+
const binding = readRecord(cache.deployment, "WorkerSpec.target.cache.deployment");
|
|
389
|
+
readString(binding.backend, "WorkerSpec.target.cache.deployment.backend");
|
|
390
|
+
readOptionalEnum(binding, "backend", "WorkerSpec.target.cache.deployment", ["llamacpp", "vllm"] as const);
|
|
391
|
+
for (const key of ["controlUrl", "model", "build"])
|
|
392
|
+
readString(binding[key], `WorkerSpec.target.cache.deployment.${key}`);
|
|
393
|
+
readOptionalString(binding, "gatewayDeploymentId", "WorkerSpec.target.cache.deployment");
|
|
394
|
+
const url = new URL(readString(binding.controlUrl, "WorkerSpec.target.cache.deployment.controlUrl"));
|
|
395
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
396
|
+
throw new Error(
|
|
397
|
+
"WorkerSpec.target.cache.deployment.controlUrl must be HTTP(S) without credentials, query, or fragment",
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
if (cache.warm !== undefined) {
|
|
401
|
+
const warm = readRecord(cache.warm, "WorkerSpec.target.cache.warm");
|
|
402
|
+
for (const key of ["maxInputTokens", "maxDurationMs", "cooldownMs"]) {
|
|
403
|
+
if (
|
|
404
|
+
warm[key] !== undefined &&
|
|
405
|
+
(typeof warm[key] !== "number" || !Number.isSafeInteger(warm[key]) || (warm[key] as number) < 1)
|
|
406
|
+
)
|
|
407
|
+
throw new Error(`WorkerSpec.target.cache.warm.${key} must be a positive safe integer`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
384
411
|
if (target.capabilities !== undefined) validateCapabilityPatch(target.capabilities, "WorkerSpec.target.capabilities");
|
|
385
412
|
}
|
|
386
413
|
|