@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
package/src/cli/uninstall.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { detectInstallMethod } from "../domains/lifecycle/install-method.js";
|
|
|
9
9
|
import { createLifecyclePresenter, type LifecycleItem, measurePath, shortenPath } from "./lifecycle-presenter.js";
|
|
10
10
|
import { type RemovalFailure, removePath, reportRemovalFailures } from "./removal.js";
|
|
11
11
|
import { printError } from "./shared.js";
|
|
12
|
+
import { prepareWebUninstall } from "./web.js";
|
|
12
13
|
|
|
13
14
|
const HELP = `clio-coder uninstall [--remove-binary] [--keep-config] [--keep-data] [--dry-run] [--force] [--json]
|
|
14
15
|
|
|
@@ -18,6 +19,8 @@ Per-project \`.clio-coder/\` directories sit outside those roots and are never
|
|
|
18
19
|
removed here. Every project Clio has run in is recorded in the session metadata,
|
|
19
20
|
so the real run and --dry-run both list them and name the command that clears one.
|
|
20
21
|
Shell startup files are reported, never edited.
|
|
22
|
+
Owned web background services are stopped and disabled before their state is
|
|
23
|
+
removed; their desktop launchers are removed using the app's ownership manifests.
|
|
21
24
|
|
|
22
25
|
Flags:
|
|
23
26
|
--keep-config preserve the configuration root (settings.yaml, credentials)
|
|
@@ -331,6 +334,18 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
|
|
|
331
334
|
const linkSize = measurePath(linkPath);
|
|
332
335
|
const launcher = classifyLauncher(linkPath);
|
|
333
336
|
const shellEdits = detectShellRcEdits();
|
|
337
|
+
let web: Awaited<ReturnType<typeof prepareWebUninstall>>;
|
|
338
|
+
try {
|
|
339
|
+
const desktopPrefix =
|
|
340
|
+
process.env.XDG_DATA_HOME && isAbsolute(process.env.XDG_DATA_HOME)
|
|
341
|
+
? process.env.XDG_DATA_HOME
|
|
342
|
+
: join(homedir(), ".local/share");
|
|
343
|
+
web = await prepareWebUninstall({ stateDir: dirs.state, desktopPrefix });
|
|
344
|
+
} catch (error) {
|
|
345
|
+
presenter.fail(error instanceof Error ? error.message : "Web installation ownership could not be checked.");
|
|
346
|
+
presenter.finish();
|
|
347
|
+
return 1;
|
|
348
|
+
}
|
|
334
349
|
|
|
335
350
|
// The state root's own children (audit, sessions) are inside the State row
|
|
336
351
|
// and go with it; listing them again as separate removals double-counted the
|
|
@@ -372,6 +387,7 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
|
|
|
372
387
|
detail: launcherItemDetail(launcher, args.removeBinary),
|
|
373
388
|
},
|
|
374
389
|
];
|
|
390
|
+
for (const item of web.items) items.push({ ...item, status: "remove", detail: "verified app ownership" });
|
|
375
391
|
|
|
376
392
|
// A login file is reported, never edited; see detectShellRcEdits.
|
|
377
393
|
for (const file of shellEdits) {
|
|
@@ -413,6 +429,16 @@ export async function runUninstallCommand(argv: ReadonlyArray<string>): Promise<
|
|
|
413
429
|
}
|
|
414
430
|
|
|
415
431
|
const failures: RemovalFailure[] = [];
|
|
432
|
+
try {
|
|
433
|
+
await web.remove();
|
|
434
|
+
for (const item of web.items) presenter.completedStep(`Removed ${item.label}`);
|
|
435
|
+
} catch (error) {
|
|
436
|
+
presenter.fail(
|
|
437
|
+
error instanceof Error ? error.message : "Could not stop the web installation; Clio state was preserved.",
|
|
438
|
+
);
|
|
439
|
+
presenter.finish();
|
|
440
|
+
return 1;
|
|
441
|
+
}
|
|
416
442
|
|
|
417
443
|
if (cacheSize.exists) {
|
|
418
444
|
const failure = removePath("cache", dirs.cache, false);
|
package/src/cli/usage.ts
CHANGED
|
@@ -85,6 +85,7 @@ interface UsageTotals {
|
|
|
85
85
|
output: number;
|
|
86
86
|
cacheRead: number;
|
|
87
87
|
cacheWrite: number;
|
|
88
|
+
cacheWrite1h?: number;
|
|
88
89
|
reasoningTokens: number;
|
|
89
90
|
totalTokens: number;
|
|
90
91
|
costUsd: number;
|
|
@@ -169,6 +170,7 @@ function outOfTurnUsageCall(row: OutOfTurnUsageRow): LedgerUsageCall {
|
|
|
169
170
|
output: row.usage.output ?? 0,
|
|
170
171
|
cacheRead: row.usage.cacheRead ?? 0,
|
|
171
172
|
cacheWrite: row.usage.cacheWrite ?? 0,
|
|
173
|
+
...(typeof row.usage.cacheWrite1h === "number" ? { cacheWrite1h: row.usage.cacheWrite1h } : {}),
|
|
172
174
|
reasoningTokens: row.usage.reasoning ?? 0,
|
|
173
175
|
totalTokens: row.usage.totalTokens ?? 0,
|
|
174
176
|
costUsd: row.usage.costUsd ?? 0,
|
|
@@ -197,6 +199,7 @@ function addUsageCall(totals: UsageTotals, call: LedgerUsageCall): void {
|
|
|
197
199
|
totals.output += call.output;
|
|
198
200
|
totals.cacheRead += call.cacheRead;
|
|
199
201
|
totals.cacheWrite += call.cacheWrite;
|
|
202
|
+
if (call.cacheWrite1h !== undefined) totals.cacheWrite1h = (totals.cacheWrite1h ?? 0) + call.cacheWrite1h;
|
|
200
203
|
totals.reasoningTokens += call.reasoningTokens;
|
|
201
204
|
totals.totalTokens += call.totalTokens;
|
|
202
205
|
totals.costUsd += call.costUsd;
|
package/src/cli/web.ts
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { lstatSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { resolvePackageRoot } from "../core/package-root.js";
|
|
5
|
+
import { printError } from "./argv.js";
|
|
6
|
+
|
|
7
|
+
const HELP = `Clio Coder web application
|
|
8
|
+
|
|
9
|
+
Usage:
|
|
10
|
+
clio-coder web [--open] [--port <0-65535>]
|
|
11
|
+
clio-coder web background install [--open] [--port <1-65535>]
|
|
12
|
+
clio-coder web background status|start|open|stop|uninstall
|
|
13
|
+
clio-coder web launcher install|status|uninstall
|
|
14
|
+
|
|
15
|
+
The foreground server prints a private launch link. --open opens your default
|
|
16
|
+
browser. Press Ctrl+C to stop. --no-open explicitly disables browser opening.
|
|
17
|
+
Optional --idle-exit <milliseconds> stops an idle foreground server.
|
|
18
|
+
Use --path </app/path> to open a particular page. --reuse-background uses this
|
|
19
|
+
installation's background app when configured, or starts a foreground server.
|
|
20
|
+
|
|
21
|
+
On Linux with a systemd user session, background install keeps the app available
|
|
22
|
+
at login. Open its launch link once, then install it from your browser. Background
|
|
23
|
+
stop stops it now; background uninstall also removes its login and desktop entries.
|
|
24
|
+
Other platforms can run the foreground web app. Your CLI, terminal interface,
|
|
25
|
+
headless runs, and web app use the same Clio runtime and configuration.
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
export async function runWebCommand(args: string[]): Promise<number> {
|
|
29
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
30
|
+
process.stdout.write(HELP);
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const root = resolvePackageRoot();
|
|
35
|
+
process.env.CLIO_CODER_PACKAGE_ROOT = root;
|
|
36
|
+
// A URL keeps this a separate entry; bundling it into the command chunk
|
|
37
|
+
// would change import.meta.url and the worker/client paths beside it.
|
|
38
|
+
const server = await import(pathToFileURL(join(root, "dist/web/server.js")).href);
|
|
39
|
+
await server.main(args);
|
|
40
|
+
return 0;
|
|
41
|
+
} catch (error) {
|
|
42
|
+
printError(error instanceof Error ? error.message : "Could not start the web application.");
|
|
43
|
+
return 1;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Separate packaged entry; inspection never starts a listener or opens a browser. */
|
|
48
|
+
export async function prepareWebUninstall(options: { stateDir: string; desktopPrefix: string }): Promise<{
|
|
49
|
+
items: Array<{ label: string; path: string }>;
|
|
50
|
+
remove(): Promise<void>;
|
|
51
|
+
}> {
|
|
52
|
+
// Most CLI-only installs have no web lifecycle files. Keep that path lazy,
|
|
53
|
+
// including checkouts whose optional web bundle has not been built yet.
|
|
54
|
+
const paths = [
|
|
55
|
+
join(options.stateDir, "web/background"),
|
|
56
|
+
join(options.desktopPrefix, "applications/io.iowarp.ClioCoder.desktop"),
|
|
57
|
+
join(options.desktopPrefix, "applications/io.iowarp.ClioCoder.desktop.owner.json"),
|
|
58
|
+
];
|
|
59
|
+
const present = paths.some((path) => {
|
|
60
|
+
try {
|
|
61
|
+
lstatSync(path);
|
|
62
|
+
return true;
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (["ENOENT", "ENOTDIR"].includes((error as NodeJS.ErrnoException).code ?? "")) return false;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
if (!present)
|
|
69
|
+
return {
|
|
70
|
+
items: [],
|
|
71
|
+
remove: async () => {
|
|
72
|
+
if ((await prepareWebUninstall(options)).items.length)
|
|
73
|
+
throw new Error("A web installation appeared during confirmation; run uninstall again.");
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
const packageRoot = resolvePackageRoot();
|
|
77
|
+
const server = await import(pathToFileURL(join(packageRoot, "dist/web/server.js")).href);
|
|
78
|
+
return server.prepareWebUninstall({ ...options, packageRoot });
|
|
79
|
+
}
|
package/src/core/bus-events.ts
CHANGED
|
@@ -630,6 +630,7 @@ export interface DispatchTerminalStats {
|
|
|
630
630
|
outputTokenCount: number;
|
|
631
631
|
cacheReadTokenCount: number;
|
|
632
632
|
cacheWriteTokenCount: number;
|
|
633
|
+
cacheWrite1hTokenCount?: number;
|
|
633
634
|
reasoningTokenCount: number;
|
|
634
635
|
staticShellHash: string | null;
|
|
635
636
|
sessionShellHash: string | null;
|
|
@@ -714,10 +715,8 @@ export interface CompactionPayload {
|
|
|
714
715
|
/**
|
|
715
716
|
* Published on {@link BusChannels.ExtensionsReloaded} by the composition
|
|
716
717
|
* root after a new extension generation and its user-hook registrations
|
|
717
|
-
* have both been committed.
|
|
718
|
-
*
|
|
719
|
-
* `changed`; an unchanged generation carries the previous digest and needs
|
|
720
|
-
* no work. Never published between the two commits.
|
|
718
|
+
* have both been committed. Never published between the two commits.
|
|
719
|
+
* Recipe and prompt consumers subscribe to PluginsReloaded instead.
|
|
721
720
|
*/
|
|
722
721
|
export interface ExtensionsReloadedPayload {
|
|
723
722
|
generation: number;
|
package/src/core/config.ts
CHANGED
|
@@ -593,6 +593,7 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
|
|
|
593
593
|
"lifecycle",
|
|
594
594
|
"gateway",
|
|
595
595
|
"pricing",
|
|
596
|
+
"cache",
|
|
596
597
|
"lmstudio",
|
|
597
598
|
"litellm",
|
|
598
599
|
"maxConcurrentRequests",
|
|
@@ -642,6 +643,76 @@ function validateTarget(issues: Issues, path: string, value: unknown): ClioSetti
|
|
|
642
643
|
const v = validatePricing(issues, `${path}.pricing`, value.pricing);
|
|
643
644
|
if (v !== undefined) target.pricing = v;
|
|
644
645
|
}
|
|
646
|
+
if ("cache" in value) {
|
|
647
|
+
if (!isPlainObject(value.cache)) issues.add(`${path}.cache`, "expected a map");
|
|
648
|
+
else {
|
|
649
|
+
issues.unknownKeys(`${path}.cache`, value.cache, ["retention", "deployment", "warm"]);
|
|
650
|
+
target.cache = {};
|
|
651
|
+
if ("retention" in value.cache) {
|
|
652
|
+
const retention = expectEnum(issues, `${path}.cache.retention`, value.cache.retention, [
|
|
653
|
+
"none",
|
|
654
|
+
"short",
|
|
655
|
+
"long",
|
|
656
|
+
] as const);
|
|
657
|
+
if (retention !== undefined) target.cache.retention = retention;
|
|
658
|
+
}
|
|
659
|
+
if ("deployment" in value.cache) {
|
|
660
|
+
const binding = value.cache.deployment;
|
|
661
|
+
const bindingPath = `${path}.cache.deployment`;
|
|
662
|
+
if (!isPlainObject(binding)) issues.add(bindingPath, "expected a map");
|
|
663
|
+
else {
|
|
664
|
+
issues.unknownKeys(bindingPath, binding, ["backend", "controlUrl", "model", "build", "gatewayDeploymentId"]);
|
|
665
|
+
const backend = expectEnum(issues, `${bindingPath}.backend`, binding.backend, ["llamacpp", "vllm"] as const);
|
|
666
|
+
for (const key of ["controlUrl", "model", "build"] as const) {
|
|
667
|
+
if (typeof binding[key] !== "string" || !binding[key].trim())
|
|
668
|
+
issues.add(`${bindingPath}.${key}`, "expected a nonempty string");
|
|
669
|
+
}
|
|
670
|
+
if (typeof binding.controlUrl === "string") {
|
|
671
|
+
try {
|
|
672
|
+
const url = new URL(binding.controlUrl);
|
|
673
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
674
|
+
throw new Error("invalid URL");
|
|
675
|
+
} catch {
|
|
676
|
+
issues.add(`${bindingPath}.controlUrl`, "expected an HTTP(S) URL without credentials, query, or fragment");
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
if (
|
|
680
|
+
binding.gatewayDeploymentId !== undefined &&
|
|
681
|
+
(typeof binding.gatewayDeploymentId !== "string" || !binding.gatewayDeploymentId.trim())
|
|
682
|
+
)
|
|
683
|
+
issues.add(`${bindingPath}.gatewayDeploymentId`, "expected a nonempty string");
|
|
684
|
+
if (
|
|
685
|
+
backend &&
|
|
686
|
+
typeof binding.controlUrl === "string" &&
|
|
687
|
+
typeof binding.model === "string" &&
|
|
688
|
+
typeof binding.build === "string"
|
|
689
|
+
) {
|
|
690
|
+
target.cache.deployment = {
|
|
691
|
+
backend,
|
|
692
|
+
controlUrl: binding.controlUrl,
|
|
693
|
+
model: binding.model,
|
|
694
|
+
build: binding.build,
|
|
695
|
+
...(typeof binding.gatewayDeploymentId === "string" ? { gatewayDeploymentId: binding.gatewayDeploymentId } : {}),
|
|
696
|
+
};
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
if ("warm" in value.cache) {
|
|
701
|
+
if (!isPlainObject(value.cache.warm)) issues.add(`${path}.cache.warm`, "expected a map");
|
|
702
|
+
else {
|
|
703
|
+
issues.unknownKeys(`${path}.cache.warm`, value.cache.warm, ["maxInputTokens", "maxDurationMs", "cooldownMs"]);
|
|
704
|
+
target.cache.warm = {};
|
|
705
|
+
for (const key of ["maxInputTokens", "maxDurationMs", "cooldownMs"] as const) {
|
|
706
|
+
const bound = value.cache.warm[key];
|
|
707
|
+
if (bound === undefined) continue;
|
|
708
|
+
if (typeof bound !== "number" || !Number.isSafeInteger(bound) || bound < 1)
|
|
709
|
+
issues.add(`${path}.cache.warm.${key}`, "expected a positive safe integer");
|
|
710
|
+
else target.cache.warm[key] = bound;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
645
716
|
if ("lmstudio" in value) {
|
|
646
717
|
const v = validateLmStudioSettings(issues, `${path}.lmstudio`, value.lmstudio);
|
|
647
718
|
if (v !== undefined) target.lmstudio = v;
|
|
@@ -78,35 +78,11 @@ export async function loadDomains(
|
|
|
78
78
|
},
|
|
79
79
|
};
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
const mod = modules.find((m) => m.manifest.name === name);
|
|
83
|
-
if (!mod) continue;
|
|
84
|
-
try {
|
|
85
|
-
const bundle = await mod.createExtension(context);
|
|
86
|
-
await bundle.extension.start();
|
|
87
|
-
extensions.set(name, bundle.extension);
|
|
88
|
-
contracts.set(name, bundle.contract);
|
|
89
|
-
loaded.push(name);
|
|
90
|
-
bus.emit(BusChannels.DomainLoaded, { name });
|
|
91
|
-
} catch (error) {
|
|
92
|
-
failed.push({ name, error });
|
|
93
|
-
bus.emit(BusChannels.DomainFailed, { name, error });
|
|
94
|
-
// The throw below aborts boot; nothing downstream gets a chance to
|
|
95
|
-
// render the failure, so the structured line must land first.
|
|
96
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
97
|
-
(options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
|
|
98
|
-
`[clio-coder:domain] load failed: ${name}: ${message}\n`,
|
|
99
|
-
);
|
|
100
|
-
throw new DomainLoadError(name, error);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const stop = async (): Promise<void> => {
|
|
81
|
+
const stopAll = async (): Promise<void> => {
|
|
105
82
|
const debug = process.env.CLIO_CODER_DEBUG_SHUTDOWN === "1";
|
|
106
83
|
const budgetMs = resolveShutdownHookBudgetMs();
|
|
107
|
-
for (const name of [...
|
|
108
|
-
|
|
109
|
-
if (!ext?.stop) continue;
|
|
84
|
+
for (const [name, ext] of [...extensions].reverse()) {
|
|
85
|
+
if (!ext.stop) continue;
|
|
110
86
|
const stopFn = ext.stop.bind(ext);
|
|
111
87
|
const t0 = debug ? process.hrtime.bigint() : 0n;
|
|
112
88
|
const completed = await runWithBudget(stopFn, budgetMs, (err) => {
|
|
@@ -124,7 +100,34 @@ export async function loadDomains(
|
|
|
124
100
|
);
|
|
125
101
|
}
|
|
126
102
|
}
|
|
103
|
+
extensions.clear();
|
|
104
|
+
contracts.clear();
|
|
127
105
|
};
|
|
106
|
+
let stopping: Promise<void> | undefined;
|
|
107
|
+
const stop = (): Promise<void> => (stopping ??= stopAll());
|
|
108
|
+
|
|
109
|
+
for (const name of order) {
|
|
110
|
+
const mod = modules.find((m) => m.manifest.name === name);
|
|
111
|
+
if (!mod) continue;
|
|
112
|
+
try {
|
|
113
|
+
const bundle = await mod.createExtension(context);
|
|
114
|
+
// A rejected start may already own listeners or other resources.
|
|
115
|
+
extensions.set(name, bundle.extension);
|
|
116
|
+
await bundle.extension.start();
|
|
117
|
+
contracts.set(name, bundle.contract);
|
|
118
|
+
loaded.push(name);
|
|
119
|
+
bus.emit(BusChannels.DomainLoaded, { name });
|
|
120
|
+
} catch (error) {
|
|
121
|
+
failed.push({ name, error });
|
|
122
|
+
bus.emit(BusChannels.DomainFailed, { name, error });
|
|
123
|
+
await stop();
|
|
124
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
125
|
+
(options.diagnostic ?? ((text: string) => process.stderr.write(text)))(
|
|
126
|
+
`[clio-coder:domain] load failed: ${name}: ${message}\n`,
|
|
127
|
+
);
|
|
128
|
+
throw new DomainLoadError(name, error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
128
131
|
|
|
129
132
|
const getContract = <T extends DomainContract = DomainContract>(name: string): T | undefined => {
|
|
130
133
|
return contracts.get(name) as T | undefined;
|
|
@@ -134,7 +137,13 @@ export async function loadDomains(
|
|
|
134
137
|
}
|
|
135
138
|
|
|
136
139
|
function topoSort(modules: ReadonlyArray<DomainModule>): string[] {
|
|
137
|
-
const names = new Set(
|
|
140
|
+
const names = new Set<string>();
|
|
141
|
+
for (const { manifest } of modules) {
|
|
142
|
+
if (names.has(manifest.name)) {
|
|
143
|
+
throw new DomainLoadError("topo", new Error(`Duplicate domain: ${manifest.name}`));
|
|
144
|
+
}
|
|
145
|
+
names.add(manifest.name);
|
|
146
|
+
}
|
|
138
147
|
const unresolved: string[] = [];
|
|
139
148
|
for (const m of modules) {
|
|
140
149
|
for (const dep of m.manifest.dependsOn) {
|
package/src/core/termination.ts
CHANGED
|
@@ -29,6 +29,16 @@ interface RegisteredHook {
|
|
|
29
29
|
timeoutMs?: number;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
function registeredHook(hook: Hook, options?: { timeoutMs: number }): RegisteredHook {
|
|
33
|
+
if (
|
|
34
|
+
options &&
|
|
35
|
+
(!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0 || options.timeoutMs > 2 ** 31 - 1)
|
|
36
|
+
) {
|
|
37
|
+
throw new RangeError("shutdown hook timeout must be a positive 32-bit timer delay");
|
|
38
|
+
}
|
|
39
|
+
return { run: hook, ...options };
|
|
40
|
+
}
|
|
41
|
+
|
|
32
42
|
/** Wall-clock budget per hook and per domain.stop() call. */
|
|
33
43
|
export const DEFAULT_SHUTDOWN_HOOK_MS = 500;
|
|
34
44
|
|
|
@@ -141,19 +151,13 @@ class TerminationCoordinator {
|
|
|
141
151
|
}
|
|
142
152
|
|
|
143
153
|
onDrain(hook: Hook, options?: { timeoutMs: number }): void {
|
|
144
|
-
|
|
145
|
-
options &&
|
|
146
|
-
(!Number.isSafeInteger(options.timeoutMs) || options.timeoutMs <= 0 || options.timeoutMs > 2 ** 31 - 1)
|
|
147
|
-
) {
|
|
148
|
-
throw new RangeError("shutdown hook timeout must be a positive 32-bit timer delay");
|
|
149
|
-
}
|
|
150
|
-
this.drainHooks.push({ run: hook, ...options });
|
|
154
|
+
this.drainHooks.push(registeredHook(hook, options));
|
|
151
155
|
}
|
|
152
156
|
onTerminate(hook: Hook): void {
|
|
153
157
|
this.terminateHooks.push({ run: hook });
|
|
154
158
|
}
|
|
155
|
-
onPersist(hook: Hook): void {
|
|
156
|
-
this.persistHooks.push(
|
|
159
|
+
onPersist(hook: Hook, options?: { timeoutMs: number }): void {
|
|
160
|
+
this.persistHooks.push(registeredHook(hook, options));
|
|
157
161
|
}
|
|
158
162
|
|
|
159
163
|
async shutdown(code = 0): Promise<void> {
|
|
@@ -3,7 +3,7 @@ import type { AgentRecipeDiagnostic } from "./registry.js";
|
|
|
3
3
|
import type { AgentSpec } from "./spec.js";
|
|
4
4
|
|
|
5
5
|
export interface AgentsContract {
|
|
6
|
-
/** Monotonic catalog revision; changes after
|
|
6
|
+
/** Monotonic catalog revision; changes after discovery or external-agent settings updates. */
|
|
7
7
|
revision(): number;
|
|
8
8
|
/** Raw recipes as loaded from Markdown files. */
|
|
9
9
|
list(): ReadonlyArray<AgentRecipe>;
|
|
@@ -29,10 +29,22 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
|
|
|
29
29
|
rediscoveryPending = false;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
let
|
|
32
|
+
let unsubscribePluginsReload: (() => void) | null = null;
|
|
33
|
+
let unsubscribeConfigChange: (() => void) | null = null;
|
|
33
34
|
const extension: DomainExtension = {
|
|
34
35
|
async start() {
|
|
35
36
|
discover();
|
|
37
|
+
unsubscribeConfigChange =
|
|
38
|
+
_context.getContract<ConfigContract>("config")?.onChange("nextTurn", ({ diff }) => {
|
|
39
|
+
if (
|
|
40
|
+
diff.nextTurn.some(
|
|
41
|
+
(path) =>
|
|
42
|
+
path === "integrations.externalAgents.entries" || path.startsWith("integrations.externalAgents.entries."),
|
|
43
|
+
)
|
|
44
|
+
) {
|
|
45
|
+
revision += 1;
|
|
46
|
+
}
|
|
47
|
+
}) ?? null;
|
|
36
48
|
// Recipes are cached at start; plugin agent roots come from the
|
|
37
49
|
// committed plugin generation, so a changed generation rediscovers.
|
|
38
50
|
const onResourceReload = (payload: unknown) => {
|
|
@@ -69,17 +81,13 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
|
|
|
69
81
|
);
|
|
70
82
|
}
|
|
71
83
|
};
|
|
72
|
-
|
|
73
|
-
_context.bus.on(BusChannels.ExtensionsReloaded, onResourceReload),
|
|
74
|
-
_context.bus.on(BusChannels.PluginsReloaded, onResourceReload),
|
|
75
|
-
];
|
|
76
|
-
unsubscribeExtensionsReload = () => {
|
|
77
|
-
for (const stop of unsubscribe) stop();
|
|
78
|
-
};
|
|
84
|
+
unsubscribePluginsReload = _context.bus.on(BusChannels.PluginsReloaded, onResourceReload);
|
|
79
85
|
},
|
|
80
86
|
async stop() {
|
|
81
|
-
|
|
82
|
-
|
|
87
|
+
unsubscribePluginsReload?.();
|
|
88
|
+
unsubscribePluginsReload = null;
|
|
89
|
+
unsubscribeConfigChange?.();
|
|
90
|
+
unsubscribeConfigChange = null;
|
|
83
91
|
},
|
|
84
92
|
};
|
|
85
93
|
|
|
@@ -116,13 +116,14 @@ export function createConfigBundle(
|
|
|
116
116
|
update(mutate) {
|
|
117
117
|
if (!snapshot) throw new Error("config domain not started");
|
|
118
118
|
const previous = snapshot;
|
|
119
|
-
const candidate = structuredClone(previous);
|
|
120
|
-
mutate(candidate);
|
|
121
|
-
assertAgentNamespace(candidate);
|
|
122
119
|
// Apply the effective-view delta to the user document under one lock,
|
|
123
120
|
// then validate it with the project layers before writing. In particular,
|
|
124
121
|
// a route may name a target supplied only by this workspace.
|
|
125
|
-
const normalized = updateLayeredSettings(process.cwd(),
|
|
122
|
+
const normalized = updateLayeredSettings(process.cwd(), (candidate) => {
|
|
123
|
+
const next = mutate(candidate) ?? candidate;
|
|
124
|
+
assertAgentNamespace(next);
|
|
125
|
+
return next;
|
|
126
|
+
});
|
|
126
127
|
snapshot = normalized;
|
|
127
128
|
setGitCommitAttributionEnabled(normalized.integrations.git.commitAttribution);
|
|
128
129
|
const diff = diffSettings(previous, normalized);
|