@iowarp/clio-coder 0.4.7 → 0.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +111 -0
- package/CONTRIBUTING.md +83 -74
- package/README.md +69 -47
- package/dist/{acp-W3Y3TRHD.js → acp-ZWZCPS2A.js} +15 -15
- package/dist/{agents-J4ICNLQ3.js → agents-LYSOWZUE.js} +61 -59
- 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-WBQGKWQ5.js} +27 -27
- package/dist/background-BUMOBAQN.js +37 -0
- package/dist/{builtins-XLXWWSRF.js → builtins-ODRJOEDI.js} +7 -7
- package/dist/{chunk-C3G5PNUO.js → chunk-2DRRZ57Q.js} +36 -27
- package/dist/chunk-2JBZYUPY.js +105 -0
- package/dist/chunk-2KUBKL63.js +336 -0
- package/dist/chunk-2VBWFXYE.js +198 -0
- package/dist/{chunk-XZ6UFQ52.js → chunk-2X2R3UTH.js} +25 -15
- package/dist/{chunk-M6Z2V6YU.js → chunk-37LW32LZ.js} +5 -5
- package/dist/{chunk-6LRLOJHQ.js → chunk-3AND2EFU.js} +11 -62
- package/dist/{chunk-FQOOGXBH.js → chunk-3RDHGNU7.js} +101 -33
- package/dist/{chunk-D2T66PDV.js → chunk-3SUDBGEI.js} +41 -208
- package/dist/{chunk-5AJPUR72.js → chunk-3TQN67I2.js} +9 -9
- package/dist/{chunk-LBFQMYS3.js → chunk-3U4BL2EV.js} +5 -3
- package/dist/{chunk-UFYNOQK4.js → chunk-3UQADNG2.js} +7 -7
- package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
- package/dist/{chunk-NO7J45X6.js → chunk-4ATBOFRP.js} +713 -218
- package/dist/{chunk-ECOMVOHP.js → chunk-4DNL43EZ.js} +3 -3
- package/dist/{chunk-WT5TRMO4.js → chunk-4HFJKRGZ.js} +255 -82
- package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
- package/dist/{chunk-WURGVOZJ.js → chunk-5RTEFNBP.js} +18 -14
- package/dist/{config-YXARKGTX.js → chunk-64XJW7NT.js} +24 -268
- package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
- package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
- package/dist/{chunk-MZNWZUJM.js → chunk-7FBCRWVT.js} +288 -288
- package/dist/{chunk-UA6W4XFJ.js → chunk-7JSOSVLP.js} +2 -2
- package/dist/chunk-7N3OLLSL.js +637 -0
- package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
- package/dist/{chunk-N37QC5FV.js → chunk-A6DULIMH.js} +21 -9
- package/dist/{fleet-decisions-S3PTZV2D.js → chunk-AB3QXXBC.js} +5 -41
- package/dist/chunk-ACCECAH4.js +49 -0
- package/dist/{chunk-CP3HIR5H.js → chunk-AM6CEP2K.js} +20 -19
- package/dist/chunk-AUHVBIDW.js +19 -0
- package/dist/{chunk-BQQ5MXUC.js → chunk-AY4XE6GN.js} +19 -13
- package/dist/{chunk-ISNCCX42.js → chunk-BBA2TAWV.js} +10 -9
- package/dist/chunk-BFPHMSK7.js +169 -0
- package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
- package/dist/{chunk-DO7M3LSX.js → chunk-BMNVVKEW.js} +40 -93
- package/dist/{chunk-VTYHHQ57.js → chunk-CTGZCEI6.js} +2 -2
- package/dist/{chunk-RTLNFZMD.js → chunk-DIAJYJYG.js} +3 -3
- package/dist/chunk-EHZRAB4U.js +63 -0
- package/dist/{chunk-KS7ETA3P.js → chunk-EM2DIQAJ.js} +3 -3
- package/dist/{chunk-MNQN3X6Y.js → chunk-ETF4ROKH.js} +5 -5
- package/dist/{chunk-WN552PKN.js → chunk-F2YM3JY4.js} +744 -1134
- package/dist/{chunk-7EEGBKV4.js → chunk-FEBQWHJT.js} +24 -19
- package/dist/{chunk-4QKAITQT.js → chunk-FPS4R2RN.js} +74 -10
- package/dist/chunk-G5R53COU.js +68 -0
- package/dist/chunk-GHXGMFQ5.js +40 -0
- package/dist/{chunk-GFQ7P2UF.js → chunk-GJDRMBDI.js} +10 -10
- package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
- package/dist/{chunk-NCCQ6DVS.js → chunk-GREYLTZ5.js} +8 -8
- package/dist/{chunk-HOX4YZ2K.js → chunk-H2WSCZZT.js} +19 -3
- package/dist/{chunk-3LXJOICS.js → chunk-H6IUCY6Q.js} +2 -2
- package/dist/{chunk-BO4XV5VX.js → chunk-H72DCH3E.js} +95 -206
- package/dist/{chunk-SEDI5K5B.js → chunk-H7TXJR23.js} +20 -20
- package/dist/chunk-HBJQQTKM.js +40 -0
- package/dist/chunk-HCVKSGNZ.js +990 -0
- package/dist/chunk-HVCAY2FH.js +67 -0
- package/dist/{chunk-34XHRVKG.js → chunk-I47EJPYL.js} +3 -3
- package/dist/{chunk-4N2RZ4TO.js → chunk-IALGWTLO.js} +3 -3
- package/dist/{chunk-IQCNVLO6.js → chunk-IALZJE37.js} +10 -7
- package/dist/{chunk-DLIYANB7.js → chunk-IC7JXLOM.js} +16 -11
- package/dist/{chunk-G4LGUTOE.js → chunk-IOSVTTCD.js} +5 -5
- package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
- package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
- package/dist/{chunk-TN5FW4XY.js → chunk-JIYWMQZ5.js} +12 -9
- package/dist/{chunk-T7QQBNLH.js → chunk-JKU34ACI.js} +10 -8
- package/dist/chunk-JOBN2YQQ.js +176 -0
- package/dist/chunk-JOL2QRLE.js +152 -0
- package/dist/{chunk-GXIWHXDB.js → chunk-JTR3VSV3.js} +3 -3
- package/dist/{chunk-T334FW2H.js → chunk-JU6MAMRJ.js} +7 -7
- package/dist/chunk-JURMQWVJ.js +15 -0
- package/dist/{chunk-CULVKYTK.js → chunk-K3XN4LZ4.js} +5 -5
- package/dist/{chunk-3T4DXWP6.js → chunk-KIVFXGBM.js} +27 -7
- package/dist/chunk-KKRXONXG.js +43 -0
- package/dist/{chunk-YPRSNUTC.js → chunk-KOAHT3N2.js} +2 -2
- package/dist/chunk-KP5BPXR3.js +73 -0
- package/dist/{chunk-UA3W4FGC.js → chunk-KRJQG47M.js} +6 -6
- package/dist/{chunk-GI5RRMAH.js → chunk-KW6OJ7IY.js} +19 -21
- package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
- package/dist/{chunk-MZHXENL7.js → chunk-L4RUTLRL.js} +8 -8
- package/dist/{chunk-P5SC4DLJ.js → chunk-LGTVWPRN.js} +2 -2
- package/dist/{chunk-65BGHOUR.js → chunk-LSQW6KZO.js} +5 -5
- package/dist/{chunk-TZHN5ITX.js → chunk-LWJYOHT3.js} +8 -8
- package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
- package/dist/chunk-MJ4QEJVT.js +185 -0
- package/dist/{chunk-T4TY5GG3.js → chunk-MO65K5CH.js} +5 -5
- package/dist/{chunk-TZ6UVP2H.js → chunk-MTOZEQHL.js} +8 -8
- package/dist/chunk-MZDPF35R.js +45 -0
- package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
- package/dist/{chunk-KAFMW7WM.js → chunk-NBPA5QM6.js} +2 -2
- package/dist/{chunk-EUEXGXXR.js → chunk-NMBEW4PP.js} +5 -5
- package/dist/{chunk-SELG4SUR.js → chunk-NPLLK3HO.js} +72 -89
- package/dist/{chunk-VCRVEDUC.js → chunk-NSYGPIVW.js} +5 -5
- package/dist/{context-7HJEWTTP.js → chunk-NXTV5OI5.js} +36 -90
- package/dist/{chunk-IMOD2YPV.js → chunk-NYDG4QP4.js} +9 -19
- package/dist/{chunk-6CA2BHOR.js → chunk-OA2GDACN.js} +5 -5
- package/dist/{chunk-A67NR5AT.js → chunk-PJI57EC6.js} +14 -11
- package/dist/{chunk-IJMW64DX.js → chunk-PJJBUGMR.js} +50 -50
- package/dist/{chunk-CPXGJI2A.js → chunk-PNJE7JPS.js} +20 -5
- package/dist/chunk-PP23PZEV.js +1347 -0
- package/dist/chunk-PPIFDSBK.js +409 -0
- package/dist/{chunk-T52TPHYC.js → chunk-PTFISXQO.js} +8 -7
- package/dist/{chunk-C6GEXX4L.js → chunk-QB33Z5S7.js} +5 -5
- package/dist/{chunk-VMATUZB6.js → chunk-QGNII5VC.js} +10 -10
- package/dist/{chunk-TLTGZTXI.js → chunk-QI72X67S.js} +104 -27
- package/dist/chunk-QKHZZFKH.js +98 -0
- package/dist/{chunk-PFLOULP3.js → chunk-RDKX2PME.js} +4 -4
- package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
- package/dist/chunk-RPMNIFRY.js +65 -0
- package/dist/{chunk-L3Z5ANCV.js → chunk-RQROVOV3.js} +13 -11
- package/dist/{chunk-6YHPAAZR.js → chunk-S34A7BSP.js} +3 -3
- package/dist/{chunk-5ZSZEYJK.js → chunk-SJETVJHX.js} +2 -2
- package/dist/{chunk-77CZRFTE.js → chunk-SJMNU4ZS.js} +2 -2
- package/dist/chunk-SLLG2G44.js +85 -0
- package/dist/{chunk-GVZFCJHE.js → chunk-SQAZN2V3.js} +48 -22
- package/dist/{chunk-2O2LVQQK.js → chunk-SQBT46OF.js} +2 -2
- package/dist/{chunk-ZGIGW4ZG.js → chunk-TCUOGIL2.js} +5 -5
- package/dist/{chunk-DACXIVVF.js → chunk-TIWPKCVO.js} +5 -5
- package/dist/{chunk-5CMARGPF.js → chunk-UIU7MGZ3.js} +11 -2
- package/dist/chunk-USBBEKHW.js +177 -0
- package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
- package/dist/{chunk-MBJO5VNZ.js → chunk-VPWGADBG.js} +33 -33
- package/dist/{chunk-UUQ5G6EZ.js → chunk-VWFCAK34.js} +6 -6
- package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
- package/dist/{chunk-4MFBBY2Z.js → chunk-W72LLZAV.js} +3 -3
- package/dist/{chunk-4UHVS5T7.js → chunk-WGRDABW7.js} +8 -8
- package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
- package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
- package/dist/{chunk-6YA46L5A.js → chunk-XFLSL7BT.js} +2 -2
- package/dist/{chunk-QKWL7SYE.js → chunk-XJZEDCNT.js} +50 -39
- package/dist/{chunk-UWD3JD5X.js → chunk-XLLEL3K7.js} +10 -10
- package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
- package/dist/chunk-XNZWWDC3.js +686 -0
- package/dist/{chunk-WBVKKTUT.js → chunk-XRECG65F.js} +2 -2
- package/dist/chunk-XTQ7MEJG.js +457 -0
- package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
- package/dist/{chunk-WB7POC6M.js → chunk-Y3M2T5RO.js} +6 -6
- package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
- package/dist/{chunk-EUZRMP4Y.js → chunk-YPQOPFP7.js} +20 -20
- package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
- package/dist/{chunk-BAU36233.js → chunk-YQYINEJI.js} +9 -9
- package/dist/{chunk-CE64C5K5.js → chunk-ZF6CV4WZ.js} +1356 -235
- package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
- package/dist/{chunk-IZYTT3CD.js → chunk-ZKQ63XZ5.js} +16 -39
- package/dist/{chunk-6TAATXXH.js → chunk-ZKVMDNAN.js} +7 -7
- package/dist/chunk-ZST3FRCV.js +132 -0
- package/dist/cli/index.js +50 -38
- package/dist/{clio-L2P7S2R2.js → clio-JUDCLNHC.js} +11 -11
- package/dist/clio-context-tools-FT672MNZ.js +136 -0
- package/dist/{code-nav-B5LNX4KU.js → code-nav-7OVCTP2Z.js} +39 -37
- package/dist/{components-63MMQKUT.js → components-OZXZMDWU.js} +11 -11
- package/dist/config-P3ZQVF63.js +275 -0
- package/dist/config-graph-GKAOBAS5.js +160 -0
- package/dist/{configure-LMVQJ46J.js → configure-25LRYZJG.js} +56 -55
- package/dist/context-72VQV7JX.js +73 -0
- package/dist/{context-YG2LZDYZ.js → context-COWRWXP3.js} +89 -83
- package/dist/{context-XSZKKFBW.js → context-WB3D474G.js} +16 -16
- package/dist/{context-clear-AC5NXHM2.js → context-clear-Y4LYMWC6.js} +88 -82
- 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-TMZYVC7A.js} +27 -25
- package/dist/data-tool-KMBWKKWR.js +2987 -0
- package/dist/{detail-H73BEF2N.js → detail-4GLROGY5.js} +89 -83
- package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-TR3LBP5P.js} +113 -107
- package/dist/docs-ZK777W2G.js +101 -0
- package/dist/{doctor-EQYJOGUG.js → doctor-WC4OV2OB.js} +76 -73
- package/dist/{eval-4P7O6CCE.js → eval-FUNWJNUJ.js} +88 -73
- package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
- package/dist/evals-L73EBHSU.js +104 -0
- package/dist/{evidence-O76QF7TZ.js → evidence-AVJ2RTHX.js} +99 -93
- package/dist/{evidence-D6GUSYJW.js → evidence-P4NZOAK7.js} +88 -82
- package/dist/evidence-Y55WKYHH.js +246 -0
- package/dist/{evolve-H47BCETS.js → evolve-MAWKRYWF.js} +93 -87
- package/dist/{extensions-NNL3ZOCU.js → extensions-PYQH3H47.js} +14 -13
- package/dist/fleet-M4H2QBWT.js +268 -0
- package/dist/{fleet-KMNS6NOM.js → fleet-ULBXXRDR.js} +146 -138
- package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-7NNC4JZU.js} +18 -17
- package/dist/fleet-decisions-EHEY7KPU.js +52 -0
- package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-LQ2AHZT3.js} +24 -24
- package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-5IGBIIYZ.js} +98 -258
- package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-UTTNOKMG.js} +9 -4
- package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-YGILJKA6.js} +29 -29
- package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-AUWTCDKR.js} +88 -82
- package/dist/{fleet-view-BHJFW26B.js → fleet-view-TGUFCY5A.js} +90 -84
- package/dist/{init-XAT5N5YM.js → init-GFN2Z7NF.js} +111 -104
- package/dist/install-6PIF6F6W.js +19 -0
- package/dist/{interop-FVECHFKG.js → interop-EF5JUWWK.js} +29 -29
- package/dist/{inventory-7KFQGLCV.js → inventory-I6VJDDYF.js} +90 -84
- package/dist/library-3J5IO2OJ.js +75 -0
- package/dist/{library-QAPAO23R.js → library-IJTOFTDS.js} +20 -19
- package/dist/{library-NY2XOT75.js → library-Z3KZSHPE.js} +35 -35
- package/dist/{library-import-5Y6MAS3R.js → library-import-IMKFLDHX.js} +29 -29
- package/dist/{library-inventory-JT6HWITQ.js → library-inventory-CQP5D6GU.js} +21 -21
- package/dist/{library-validation-EQUH25DC.js → library-validation-33UTX7AI.js} +19 -19
- package/dist/mcp-5FWZKUS6.js +26 -0
- package/dist/{memory-DYVTTCP6.js → memory-36CWN67Y.js} +93 -87
- package/dist/{models-MASFJ6Y2.js → models-KQ6PQJJQ.js} +57 -56
- package/dist/{monitor-YMP4NXJJ.js → monitor-XX6ZD6KC.js} +98 -91
- package/dist/{orchestrator-AFQRRTEI.js → orchestrator-SK6HDAOP.js} +1537 -832
- package/dist/{panes-NICTHQCV.js → panes-L27QRXUH.js} +14 -14
- package/dist/{panes-D3Y2KFG5.js → panes-LXZIWNOZ.js} +4 -4
- package/dist/{paths-PSFAUIGO.js → paths-7DJDU4P4.js} +6 -6
- package/dist/{preload-5Q7VXRFJ.js → preload-K2TDYI4Y.js} +88 -82
- package/dist/{reset-7NKZK7JN.js → reset-73VU3XNT.js} +13 -13
- package/dist/{resources-NILSIZAT.js → resources-3BYJYVYL.js} +24 -24
- package/dist/{run-BPZGEBZV.js → run-AR7PY6GW.js} +144 -136
- package/dist/run-script-H2KUDIII.js +41 -0
- package/dist/settings-3VMBMWID.js +72 -0
- package/dist/{share-EZ6ERBMH.js → share-HVWH4FPF.js} +30 -30
- package/dist/{skills-BTVVNYVM.js → skills-5TYEY75Q.js} +30 -30
- package/dist/{skills-eval-UY34MNK7.js → skills-eval-CK3MD63Z.js} +114 -103
- package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-KSFYG3I6.js} +24 -24
- package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-DMVHML7P.js} +60 -57
- package/dist/{steer-2B3EQGFH.js → steer-XCD6V3EW.js} +4 -4
- package/dist/{support-L2SOL3IE.js → support-JAZL6VBR.js} +7 -7
- package/dist/system-3TDQRMZZ.js +116 -0
- package/dist/{targets-44VKGFLN.js → targets-EZKHAYRN.js} +74 -72
- package/dist/{tasks-3KODKFU7.js → tasks-SNEFHWYW.js} +18 -18
- package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-BNLFA4OF.js} +8 -7
- package/dist/{tools-3UB7TEVR.js → tools-7IM6BDCE.js} +12 -12
- package/dist/{trace-TAMIU4OJ.js → trace-C3MBGD4S.js} +16 -65
- package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
- package/dist/{uninstall-QYVRPEM4.js → uninstall-WWLOSZ42.js} +35 -10
- package/dist/{upgrade-7PMKM2JH.js → upgrade-ETK2JNSJ.js} +42 -51
- package/dist/{usage-6EQV7EQK.js → usage-S2HOB7BZ.js} +112 -102
- package/dist/{verifiers-JLITWSHU.js → verifiers-QDTEVH7R.js} +26 -24
- package/dist/{verify-T7NAEVIG.js → verify-SUKUK6XM.js} +16 -15
- package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +1 -0
- package/dist/web/client/assets/arc-Pry-7G1_.js +1 -0
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
- package/dist/web/client/assets/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-prINbpbM.js +129 -0
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +38 -0
- package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
- package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +62 -0
- package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +2 -0
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
- package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +1 -0
- package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
- package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +72 -0
- package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +1 -0
- package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +231 -0
- package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +1 -0
- package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +10 -0
- package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +1 -0
- package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +1 -0
- package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +1 -0
- package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +168 -0
- package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +88 -0
- package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +206 -0
- package/dist/web/client/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
- package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/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-CVh1icwb.js +1 -0
- package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +1 -0
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.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-CAWJmRMG.js +4 -0
- package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +30 -0
- package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +41 -0
- package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +3 -0
- package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +24 -0
- package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +24 -0
- package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +1 -0
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +99 -0
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
- package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
- package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +1 -0
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +106 -0
- package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
- package/dist/web/client/assets/index-Dsi52apB.css +1 -0
- package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +1 -0
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +2 -0
- package/dist/web/client/assets/init-C-OQMol4.js +1 -0
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +70 -0
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +139 -0
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +89 -0
- package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
- package/dist/web/client/assets/line-BIDAcEtX.js +1 -0
- package/dist/web/client/assets/linear-SzVmGSw4.js +1 -0
- package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +7 -0
- package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +44 -0
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.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-DRO66c9Q.js +1 -0
- package/dist/web/client/assets/path-fybaL0A-.js +1 -0
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +1 -0
- package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +1 -0
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.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-BtsZdCS6.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-DuMPwwV2.js +7 -0
- package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +1 -0
- package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +1 -0
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +1 -0
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +84 -0
- package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +40 -0
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +162 -0
- package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
- package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +1 -0
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
- package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +1 -0
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
- package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +120 -0
- package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +1 -0
- package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +1 -0
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +34 -0
- package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +1 -0
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +78 -0
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.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 +6 -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-EMGUGGEI.js +13 -0
- package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-6BRRVQON.js} +22 -5
- package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-XHSJTDOP.js} +120 -113
- package/dist/{with-panes-CHFC7HGI.js → with-panes-Z6BTEHMZ.js} +12 -12
- package/dist/worker/entry.js +113 -99
- package/docs/README.md +28 -27
- 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 +12 -4
- 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 +1 -3
- 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 +37 -30
- package/docs/architecture/provider-adapter-cookbook.md +1 -4
- package/docs/architecture/safety-model.md +19 -9
- package/docs/architecture/session-lifecycle.md +10 -7
- package/docs/architecture/time-conventions.md +0 -3
- package/docs/architecture/trace-store.md +28 -20
- package/docs/architecture/tui-design.md +38 -18
- 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 +41 -25
- package/docs/guide/configuration-and-targets.md +204 -9
- package/docs/guide/configuration-reference.md +125 -17
- package/docs/guide/environment-variables.md +2 -8
- 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 +3 -5
- package/docs/guide/glossary.md +1 -4
- package/docs/guide/harness-extensions.md +0 -2
- package/docs/guide/installation-and-lifecycle.md +3 -6
- 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 +1 -3
- package/docs/guide/skills-marketplace.md +0 -2
- package/docs/guide/tool-usage.md +166 -67
- package/docs/guide/troubleshooting.md +1 -4
- 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 +16 -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 +6 -9
- 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 +23 -6
- package/docs/process/tool-audit-v0.4.9.md +357 -0
- 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/argv.ts +31 -0
- package/src/cli/clio.ts +17 -13
- package/src/cli/config.ts +4 -0
- package/src/cli/docs.ts +65 -328
- package/src/cli/doctor-panes.ts +1 -1
- package/src/cli/doctor.ts +3 -1
- package/src/cli/index.ts +17 -2
- package/src/cli/mcp.ts +106 -0
- package/src/cli/skills-eval.ts +8 -2
- package/src/cli/trace.ts +4 -65
- package/src/cli/uninstall.ts +26 -0
- package/src/cli/upgrade.ts +34 -38
- package/src/cli/usage.ts +3 -0
- package/src/cli/verifiers.ts +1 -1
- package/src/cli/web.ts +79 -0
- package/src/core/bash-exec.ts +27 -4
- package/src/core/bus-events.ts +3 -4
- package/src/core/config.ts +73 -1
- package/src/core/defaults.ts +10 -1
- package/src/core/domain-loader.ts +37 -28
- package/src/core/event-bus.ts +1 -1
- package/src/core/run-records.ts +438 -0
- package/src/core/safe-exec.ts +506 -56
- package/src/core/skill-activation.ts +5 -3
- package/src/core/termination.ts +16 -12
- package/src/core/tool-names.ts +33 -12
- 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/context/clio-md.ts +1 -1
- package/src/domains/context/worker/pressure.ts +6 -2
- package/src/domains/context/working-set/path-index.ts +7 -2
- package/src/domains/dispatch/code-step.ts +7 -2
- package/src/domains/dispatch/contract.ts +7 -0
- package/src/domains/dispatch/execution-role.ts +3 -3
- package/src/domains/dispatch/execution-scheduler.ts +204 -79
- package/src/domains/dispatch/extension.ts +206 -26
- package/src/domains/dispatch/fleet-preflight.ts +18 -3
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/gate-decisions.ts +3 -3
- package/src/domains/dispatch/heartbeat.ts +1 -1
- package/src/domains/dispatch/host-verification.ts +16 -14
- package/src/domains/dispatch/index.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-findings.ts +3 -4
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/reservation-store.ts +7 -9
- package/src/domains/dispatch/route-facts.ts +1 -1
- package/src/domains/dispatch/state.ts +4 -5
- package/src/domains/dispatch/types.ts +3 -1
- package/src/domains/eval/metrics/tracked.ts +22 -2
- package/src/domains/evidence/build.ts +35 -7
- package/src/domains/extensions/operator-runtime.ts +3 -1
- package/src/domains/gateway/mcp/client.ts +923 -0
- package/src/domains/gateway/mcp/config.ts +456 -0
- package/src/domains/gateway/mcp/index.ts +88 -0
- package/src/domains/gateway/mcp/protocol.ts +273 -0
- package/src/domains/gateway/mcp/trust.ts +263 -0
- package/src/domains/lifecycle/doctor.ts +17 -3
- package/src/domains/middleware/hooks.ts +2 -2
- package/src/domains/mux/contract.ts +5 -9
- package/src/domains/mux/detect.ts +1 -1
- package/src/domains/mux/extension.ts +1 -1
- package/src/domains/mux/protocol.ts +5 -7
- package/src/domains/mux/socket-client.ts +3 -3
- package/src/domains/observability/accountability.ts +2 -2
- package/src/domains/observability/background-memory-usage.ts +3 -0
- package/src/domains/observability/compaction-usage.ts +2 -0
- package/src/domains/observability/contract.ts +7 -3
- package/src/domains/observability/cost.ts +5 -0
- package/src/domains/observability/evidence-index.ts +2 -2
- package/src/domains/observability/extension.ts +1 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -0
- package/src/domains/observability/projection.ts +10 -0
- package/src/domains/observability/trace-store.ts +65 -5
- package/src/domains/prompts/compiler.ts +41 -23
- package/src/domains/prompts/extension.ts +4 -17
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
- package/src/domains/prompts/fragments/operating/skills.md +12 -10
- package/src/domains/providers/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 +6 -1
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
- package/src/domains/providers/plugins.ts +3 -13
- package/src/domains/providers/probe/http.ts +44 -59
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
- package/src/domains/providers/types/target-descriptor.ts +17 -0
- package/src/domains/safety/action-classifier.ts +17 -1
- package/src/domains/safety/call-target.ts +14 -0
- package/src/domains/safety/contract.ts +1 -1
- package/src/domains/safety/finish-contract.ts +9 -3
- package/src/domains/safety/loop-detector.ts +1 -1
- package/src/domains/safety/policy-engine.ts +7 -0
- package/src/domains/safety/protected-artifacts.ts +3 -4
- package/src/domains/safety/rejection-feedback.ts +1 -1
- package/src/domains/safety/scope.ts +2 -3
- package/src/domains/safety/validation-contract.ts +3 -2
- package/src/domains/scheduling/budget.ts +5 -3
- package/src/domains/scheduling/contract.ts +2 -1
- package/src/domains/scheduling/extension.ts +3 -3
- package/src/domains/session/compaction/branch-summary.ts +1 -1
- package/src/domains/session/compaction/compact.ts +29 -3
- package/src/domains/session/compaction/cut-point.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +5 -10
- package/src/domains/session/contract.ts +1 -1
- package/src/domains/session/cwd-fallback.ts +2 -2
- package/src/domains/session/entries.ts +1 -0
- package/src/domains/session/handoff.ts +5 -1
- package/src/domains/session/history.ts +6 -0
- package/src/domains/session/manager.ts +14 -7
- package/src/domains/session/retry.ts +2 -1
- package/src/domains/session/session-artifacts.ts +12 -7
- package/src/domains/session/task-board.ts +2 -3
- package/src/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 +17 -4
- package/src/engine/loop-guard.ts +7 -0
- package/src/engine/prewarm.ts +232 -0
- package/src/engine/provider-diagnostics.ts +6 -1
- package/src/engine/provider-error-body.ts +65 -0
- package/src/engine/session.ts +118 -29
- package/src/engine/worker-runtime.ts +3 -0
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +38 -18
- package/src/interactive/chat-loop-messages.ts +3 -0
- package/src/interactive/chat-loop-policy.ts +1 -0
- package/src/interactive/chat-loop.ts +10 -12
- package/src/interactive/chat-panel.ts +23 -9
- package/src/interactive/chat-renderer.ts +33 -11
- package/src/interactive/clio-editor.ts +13 -5
- package/src/interactive/dispatch-board.ts +70 -30
- package/src/interactive/editor-submit.ts +30 -25
- package/src/interactive/footer/widgets.ts +12 -9
- package/src/interactive/interactive-presentation.ts +2 -3
- package/src/interactive/mux-bridge.ts +3 -7
- package/src/interactive/overlay-general-openers.ts +14 -7
- package/src/interactive/overlays/cwd-fallback.ts +1 -1
- package/src/interactive/overlays/library-model.ts +114 -35
- package/src/interactive/overlays/library.ts +52 -5
- package/src/interactive/overlays/list-overlay.ts +4 -1
- package/src/interactive/overlays/session-selector.ts +28 -23
- package/src/interactive/overlays/settings.ts +20 -1
- package/src/interactive/overlays/tree-selector.ts +47 -10
- package/src/interactive/panes-runtime.ts +1 -1
- package/src/interactive/prewarm.ts +11 -197
- package/src/interactive/renderers/compaction-summary.ts +1 -1
- package/src/interactive/renderers/provider-error.ts +118 -0
- package/src/interactive/renderers/retry-status.ts +59 -23
- package/src/interactive/renderers/tool-execution.ts +67 -7
- package/src/interactive/renderers/worker-answer.ts +198 -0
- package/src/interactive/renderers/worker-entry.ts +57 -163
- package/src/interactive/session-usage-reseed.ts +2 -0
- package/src/interactive/side-question.ts +2 -0
- package/src/interactive/slash-commands.ts +26 -1
- package/src/interactive/slash-spec.ts +2 -2
- package/src/interactive/theme/labels.ts +66 -30
- package/src/interactive/turn-context.ts +1 -0
- package/src/interactive/turn-persistence.ts +9 -1
- package/src/interactive/turn-prewarm.ts +126 -19
- package/src/interactive/turn-recovery.ts +2 -1
- package/src/interactive/turn-runtime.ts +36 -5
- package/src/interactive/view/artifacts.ts +3 -2
- package/src/interactive/view/view-overlay.ts +96 -20
- package/src/tools/agent-tools.ts +21 -7
- package/src/tools/artifact.ts +16 -8
- package/src/tools/bash.ts +90 -11
- package/src/tools/bootstrap.ts +42 -4
- package/src/tools/builtin-tool-catalog.ts +80 -11
- package/src/tools/context/index.ts +27 -31
- package/src/tools/context/library.ts +3 -1
- package/src/tools/context/surface.ts +12 -26
- package/src/tools/core-bootstrap.ts +72 -1
- package/src/tools/data/csv.ts +1189 -0
- package/src/tools/data/index.ts +308 -0
- package/src/tools/data/json.ts +1799 -0
- package/src/tools/data/jsonl.ts +561 -0
- package/src/tools/data/shared.ts +452 -0
- package/src/tools/edit-diff.ts +0 -7
- package/src/tools/edit.ts +115 -18
- package/src/tools/file-mutation-queue.ts +114 -4
- package/src/tools/find.ts +108 -29
- package/src/tools/gateway/caps.ts +11 -0
- package/src/tools/gateway/clio-context-surface.ts +41 -0
- package/src/tools/gateway/clio-context-tools.ts +77 -0
- package/src/tools/gateway/data-surface.ts +138 -0
- package/src/tools/gateway/data-tool.ts +201 -0
- package/src/tools/gateway/index.ts +342 -0
- package/src/tools/gateway/mcp-capabilities.ts +469 -0
- package/src/tools/grep.ts +88 -33
- package/src/tools/harness-extensions.ts +3 -0
- package/src/tools/ignore-policy.ts +7 -5
- package/src/tools/ls.ts +111 -20
- package/src/tools/policy.ts +35 -13
- package/src/tools/presentation.ts +6 -0
- package/src/tools/read.ts +634 -156
- package/src/tools/registry.ts +106 -8
- package/src/tools/run-script.ts +997 -0
- package/src/tools/spawn-hygiene.ts +157 -5
- package/src/tools/surface.ts +163 -0
- package/src/tools/verify/authoring.ts +8 -3
- package/src/tools/verify/catalog.ts +14 -1
- package/src/tools/verify/numeric.ts +367 -59
- package/src/tools/verify/perf.ts +171 -9
- package/src/tools/verify/scripts.ts +178 -26
- package/src/tools/web-fetch-surface.ts +22 -0
- package/src/tools/web-fetch.ts +26 -1
- package/src/tools/write.ts +45 -19
- package/src/worker/spec-contract.ts +27 -0
- package/dist/chunk-B6UM3OZC.js +0 -15
- package/dist/chunk-GJ24ODAX.js +0 -196
- package/dist/chunk-HRAKUPIH.js +0 -57
- package/dist/docs-BL7ROUFN.js +0 -292
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { canonicalEndpointUrl } from "../../core/endpoint-key.js";
|
|
2
|
+
import type { TargetDescriptor } from "./types/target-descriptor.js";
|
|
3
|
+
|
|
4
|
+
/** Fresh observations, not a persisted cache handle or permission to administer a server. */
|
|
5
|
+
export interface CacheDeploymentObservation {
|
|
6
|
+
observedAt: number;
|
|
7
|
+
backend: "llamacpp" | "vllm" | "unknown";
|
|
8
|
+
model: string;
|
|
9
|
+
build: string | null;
|
|
10
|
+
/** Absent server epoch stays unknown; Clio never invents one from a build number. */
|
|
11
|
+
epoch: string | null;
|
|
12
|
+
endpoint: string | null;
|
|
13
|
+
requestControls: ReadonlyArray<"cache_prompt">;
|
|
14
|
+
warm: "bounded" | "unsupported";
|
|
15
|
+
administration: "unsupported";
|
|
16
|
+
reason: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function record(value: unknown): Record<string, unknown> {
|
|
20
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? (value as Record<string, unknown>) : {};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Read-only admission evidence. Every invocation probes again, so an old route,
|
|
25
|
+
* build, resident state or process epoch is never reused to authorize a warm.
|
|
26
|
+
* Control-plane credentials are deliberately independent: this initial reader
|
|
27
|
+
* sends none. An authenticated/unknown control plane remains passive.
|
|
28
|
+
*/
|
|
29
|
+
export async function observeCacheDeployment(
|
|
30
|
+
target: TargetDescriptor,
|
|
31
|
+
wireModelId: string,
|
|
32
|
+
options: { signal?: AbortSignal; gatewayApiKey?: string; fetchImpl?: typeof fetch } = {},
|
|
33
|
+
): Promise<CacheDeploymentObservation> {
|
|
34
|
+
const binding = target.cache?.deployment;
|
|
35
|
+
const observation: CacheDeploymentObservation = {
|
|
36
|
+
observedAt: Date.now(),
|
|
37
|
+
backend: binding?.backend ?? "unknown",
|
|
38
|
+
model: binding?.model ?? wireModelId,
|
|
39
|
+
build: null,
|
|
40
|
+
epoch: null,
|
|
41
|
+
endpoint: null,
|
|
42
|
+
requestControls: [],
|
|
43
|
+
warm: "unsupported",
|
|
44
|
+
administration: "unsupported",
|
|
45
|
+
reason: "deployment-unbound",
|
|
46
|
+
};
|
|
47
|
+
if (!binding) return observation;
|
|
48
|
+
try {
|
|
49
|
+
const control = new URL(binding.controlUrl);
|
|
50
|
+
if (
|
|
51
|
+
!["http:", "https:"].includes(control.protocol) ||
|
|
52
|
+
control.username ||
|
|
53
|
+
control.password ||
|
|
54
|
+
control.search ||
|
|
55
|
+
control.hash
|
|
56
|
+
) {
|
|
57
|
+
return { ...observation, reason: "deployment-invalid" };
|
|
58
|
+
}
|
|
59
|
+
const root = control.href.replace(/\/$/, "").replace(/\/v1$/, "");
|
|
60
|
+
observation.endpoint = canonicalEndpointUrl(root);
|
|
61
|
+
const signal = AbortSignal.any([AbortSignal.timeout(2000), ...(options.signal ? [options.signal] : [])]);
|
|
62
|
+
const get = async (url: string, headers?: Record<string, string>) => {
|
|
63
|
+
const response = await (options.fetchImpl ?? fetch)(url, {
|
|
64
|
+
method: "GET",
|
|
65
|
+
signal,
|
|
66
|
+
redirect: "error",
|
|
67
|
+
credentials: "omit",
|
|
68
|
+
...(headers ? { headers } : {}),
|
|
69
|
+
});
|
|
70
|
+
if (!response.ok) throw new Error("discovery unavailable");
|
|
71
|
+
return (await response.json()) as unknown;
|
|
72
|
+
};
|
|
73
|
+
const gateway = target.runtime === "litellm";
|
|
74
|
+
if (gateway) {
|
|
75
|
+
if (!binding.gatewayDeploymentId || !target.url) return { ...observation, reason: "gateway-unbound" };
|
|
76
|
+
const gatewayRoot = target.url.replace(/\/$/, "").replace(/\/v1$/, "");
|
|
77
|
+
const info = record(
|
|
78
|
+
await get(`${gatewayRoot}/v1/model/info`, {
|
|
79
|
+
...target.auth?.headers,
|
|
80
|
+
...(options.gatewayApiKey ? { authorization: `Bearer ${options.gatewayApiKey}` } : {}),
|
|
81
|
+
}),
|
|
82
|
+
);
|
|
83
|
+
const rows = Array.isArray(info.data) ? info.data.map(record).filter((row) => row.model_name === wireModelId) : [];
|
|
84
|
+
// Multiple replicas/fallback routes do not establish a single physical
|
|
85
|
+
// cache. A deployment response header arrives too late for admission.
|
|
86
|
+
const row = rows.length === 1 ? rows[0] : undefined;
|
|
87
|
+
const params = record(row?.litellm_params);
|
|
88
|
+
const modelInfo = record(row?.model_info);
|
|
89
|
+
if (
|
|
90
|
+
!row ||
|
|
91
|
+
modelInfo.id !== binding.gatewayDeploymentId ||
|
|
92
|
+
(params.model !== binding.model && params.model !== `openai/${binding.model}`) ||
|
|
93
|
+
canonicalEndpointUrl(typeof params.api_base === "string" ? params.api_base : undefined) !== observation.endpoint
|
|
94
|
+
) {
|
|
95
|
+
return { ...observation, reason: "gateway-route-mismatch" };
|
|
96
|
+
}
|
|
97
|
+
} else if (
|
|
98
|
+
target.runtime !== binding.backend ||
|
|
99
|
+
wireModelId !== binding.model ||
|
|
100
|
+
canonicalEndpointUrl(target.url) !== observation.endpoint
|
|
101
|
+
) {
|
|
102
|
+
return { ...observation, reason: "deployment-mismatch" };
|
|
103
|
+
}
|
|
104
|
+
if (binding.backend === "vllm") {
|
|
105
|
+
const version = record(await get(`${root}/version`));
|
|
106
|
+
observation.build = typeof version.version === "string" ? version.version : null;
|
|
107
|
+
// APC and queue/memory metrics vary by deployment. A version and an
|
|
108
|
+
// OpenAI schema alone establish neither APC nor safe speculative load.
|
|
109
|
+
return {
|
|
110
|
+
...observation,
|
|
111
|
+
reason: observation.build === binding.build ? "vllm-scheduler-unverified" : "deployment-build-mismatch",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
let props = record(await get(`${root}/props`));
|
|
115
|
+
const router = props.role === "router";
|
|
116
|
+
if (router) {
|
|
117
|
+
const models = record(await get(`${root}/models`));
|
|
118
|
+
const selected = Array.isArray(models.data)
|
|
119
|
+
? models.data.map(record).find((row) => row.id === binding.model)
|
|
120
|
+
: undefined;
|
|
121
|
+
if (record(selected?.status).value !== "loaded") return { ...observation, reason: "model-not-loaded" };
|
|
122
|
+
// Never wake sleeping models or load an absent worker during discovery.
|
|
123
|
+
props = record(await get(`${root}/props?model=${encodeURIComponent(binding.model)}&autoload=false`));
|
|
124
|
+
}
|
|
125
|
+
observation.build = typeof props.build_info === "string" ? props.build_info : null;
|
|
126
|
+
if (observation.build !== binding.build) return { ...observation, reason: "deployment-build-mismatch" };
|
|
127
|
+
if (!observation.build.endsWith("-c841aee"))
|
|
128
|
+
return { ...observation, reason: "deployment-cache-protocol-unverified" };
|
|
129
|
+
if (props.is_sleeping !== false) return { ...observation, reason: "model-not-loaded" };
|
|
130
|
+
if (typeof props.model_alias === "string" && props.model_alias !== binding.model)
|
|
131
|
+
return { ...observation, reason: "deployment-model-mismatch" };
|
|
132
|
+
if (!router) {
|
|
133
|
+
const models = record(await get(`${root}/v1/models`));
|
|
134
|
+
if (!Array.isArray(models.data) || models.data.length !== 1 || record(models.data[0]).id !== binding.model)
|
|
135
|
+
return { ...observation, reason: "deployment-model-mismatch" };
|
|
136
|
+
}
|
|
137
|
+
if (typeof props.start_time === "string") observation.epoch = props.start_time;
|
|
138
|
+
const slots = await get(`${root}/slots?model=${encodeURIComponent(binding.model)}&autoload=false`);
|
|
139
|
+
if (!Array.isArray(slots) || slots.length === 0 || slots.some((slot) => record(slot).is_processing !== false)) {
|
|
140
|
+
return { ...observation, reason: "endpoint-busy-or-unknown" };
|
|
141
|
+
}
|
|
142
|
+
if (gateway) return { ...observation, reason: "gateway-cache-transport-unverified" };
|
|
143
|
+
return { ...observation, requestControls: ["cache_prompt"], warm: "bounded", reason: "loaded-idle-deployment" };
|
|
144
|
+
} catch {
|
|
145
|
+
return { ...observation, reason: options.signal?.aborted ? "superseded" : "deployment-unavailable" };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -148,7 +148,7 @@ export function synthesizeCatalogBackedModel(input: CatalogBackedSynthesisInput)
|
|
|
148
148
|
}
|
|
149
149
|
const pricing = input.target.pricing;
|
|
150
150
|
const targetHeaders = input.target.auth?.headers;
|
|
151
|
-
const model: Model<Api> = {
|
|
151
|
+
const model: Model<Api> & { clioCoder?: { cache: NonNullable<TargetDescriptor["cache"]> } } = {
|
|
152
152
|
...catalogFields,
|
|
153
153
|
id: input.wireModelId,
|
|
154
154
|
name: `${input.wireModelId} (${input.target.id})`,
|
|
@@ -160,14 +160,19 @@ export function synthesizeCatalogBackedModel(input: CatalogBackedSynthesisInput)
|
|
|
160
160
|
input.defaultBaseUrl,
|
|
161
161
|
reasoning: caps.reasoning,
|
|
162
162
|
input: caps.vision ? (builtin?.input.includes("image") ? builtin.input : ["text", "image"]) : ["text"],
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
163
|
+
// Catalog tiers belong to the catalog rates. An explicit target price
|
|
164
|
+
// replaces that schedule, using the same defaults as resolveEffectivePricing.
|
|
165
|
+
cost: pricing
|
|
166
|
+
? {
|
|
167
|
+
input: pricing.input,
|
|
168
|
+
output: pricing.output,
|
|
169
|
+
cacheRead: pricing.cacheRead ?? 0,
|
|
170
|
+
cacheWrite: pricing.cacheWrite ?? 0,
|
|
171
|
+
}
|
|
172
|
+
: structuredClone(builtin?.cost ?? { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }),
|
|
169
173
|
contextWindow: caps.contextWindow,
|
|
170
174
|
maxTokens: caps.maxTokens,
|
|
175
|
+
...(input.target.cache === undefined ? {} : { clioCoder: { cache: structuredClone(input.target.cache) } }),
|
|
171
176
|
};
|
|
172
177
|
const headers = { ...(input.defaultHeaders ?? {}), ...(builtin?.headers ?? {}), ...(targetHeaders ?? {}) };
|
|
173
178
|
if (Object.keys(headers).length > 0) {
|
|
@@ -257,6 +257,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
257
257
|
const statuses = new Map<string, TargetStatus>();
|
|
258
258
|
const reasoningCache = new Map<string, boolean>();
|
|
259
259
|
const unsubscribeConfigListeners: Array<() => void> = [];
|
|
260
|
+
let stopped = false;
|
|
260
261
|
|
|
261
262
|
function reasoningCacheKey(targetId: string, modelId: string): string {
|
|
262
263
|
return `${targetId}:${modelId}`;
|
|
@@ -268,6 +269,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
268
269
|
return readSettings();
|
|
269
270
|
}
|
|
270
271
|
|
|
272
|
+
function currentProbeTarget(probed: TargetDescriptor): TargetDescriptor | undefined {
|
|
273
|
+
if (stopped) return undefined;
|
|
274
|
+
return readConfig().targets.find((target) => sameProbeIdentity(probed, target));
|
|
275
|
+
}
|
|
276
|
+
|
|
271
277
|
async function buildProbeContextForTarget(
|
|
272
278
|
target: TargetDescriptor,
|
|
273
279
|
desc: RuntimeDescriptor,
|
|
@@ -323,6 +329,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
323
329
|
probe: ProbeResult | null,
|
|
324
330
|
previous?: TargetStatus,
|
|
325
331
|
): TargetStatus {
|
|
332
|
+
if (previous && !sameProbeIdentity(previous.target, target)) previous = undefined;
|
|
326
333
|
if (!desc) {
|
|
327
334
|
const out: TargetStatus = {
|
|
328
335
|
target,
|
|
@@ -385,8 +392,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
385
392
|
target: TargetDescriptor,
|
|
386
393
|
live: boolean,
|
|
387
394
|
options?: { reasoning?: boolean; signal?: AbortSignal },
|
|
388
|
-
): Promise<TargetStatus> {
|
|
395
|
+
): Promise<TargetStatus | null> {
|
|
389
396
|
options?.signal?.throwIfAborted();
|
|
397
|
+
if (stopped) return null;
|
|
398
|
+
// A probe owns the descriptor it started with across asynchronous I/O.
|
|
399
|
+
target = structuredClone(target);
|
|
390
400
|
const previous = statuses.get(target.id);
|
|
391
401
|
const desc = registry.get(target.runtime);
|
|
392
402
|
if (!desc) {
|
|
@@ -402,6 +412,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
402
412
|
}
|
|
403
413
|
const probeCtx = await buildProbeContextForTarget(target, desc, options?.signal);
|
|
404
414
|
options?.signal?.throwIfAborted();
|
|
415
|
+
if (!currentProbeTarget(target)) return null;
|
|
405
416
|
let probeResult: ProbeResult;
|
|
406
417
|
try {
|
|
407
418
|
probeResult = await desc.probe(target, probeCtx);
|
|
@@ -409,6 +420,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
409
420
|
probeResult = { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
410
421
|
}
|
|
411
422
|
options?.signal?.throwIfAborted();
|
|
423
|
+
if (!currentProbeTarget(target)) return null;
|
|
412
424
|
if (probeResult.ok && typeof desc.probeModels === "function" && !probeResult.models) {
|
|
413
425
|
try {
|
|
414
426
|
const ids = await desc.probeModels(target, probeCtx);
|
|
@@ -418,6 +430,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
418
430
|
}
|
|
419
431
|
}
|
|
420
432
|
options?.signal?.throwIfAborted();
|
|
433
|
+
if (!currentProbeTarget(target)) return null;
|
|
421
434
|
if (probeResult.ok && options?.reasoning !== false && typeof desc.probeReasoning === "function") {
|
|
422
435
|
const settings = readConfig();
|
|
423
436
|
const orchestratorTarget = settings.chat.target === target.id ? settings.chat.model : null;
|
|
@@ -426,6 +439,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
426
439
|
try {
|
|
427
440
|
const result = await desc.probeReasoning(target, candidateModelId, probeCtx);
|
|
428
441
|
options?.signal?.throwIfAborted();
|
|
442
|
+
if (!currentProbeTarget(target)) return null;
|
|
429
443
|
reasoningCache.set(reasoningCacheKey(target.id, candidateModelId), result.reasoning);
|
|
430
444
|
const capabilityModelId = probeResult.capabilityModelId ?? null;
|
|
431
445
|
if (capabilityModelId === null || capabilityModelId === candidateModelId) {
|
|
@@ -447,9 +461,11 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
447
461
|
}
|
|
448
462
|
}
|
|
449
463
|
}
|
|
450
|
-
//
|
|
464
|
+
// Cancellation, target edits/removal, and shutdown revoke publication.
|
|
451
465
|
options?.signal?.throwIfAborted();
|
|
452
|
-
const
|
|
466
|
+
const current = currentProbeTarget(target);
|
|
467
|
+
if (!current) return null;
|
|
468
|
+
const status = buildStatus(current, desc, probeResult, previous);
|
|
453
469
|
statuses.set(target.id, status);
|
|
454
470
|
if (probeResult.ok && probeResult.models !== undefined) {
|
|
455
471
|
recordTargetModelSnapshot(
|
|
@@ -467,14 +483,18 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
467
483
|
}
|
|
468
484
|
|
|
469
485
|
async function probeReasoningForModelInternal(targetId: string, modelId: string): Promise<boolean | null> {
|
|
486
|
+
if (stopped) return null;
|
|
470
487
|
const settings = readConfig();
|
|
471
|
-
const
|
|
472
|
-
if (!
|
|
488
|
+
const configuredTarget = settings.targets.find((ep) => ep.id === targetId);
|
|
489
|
+
if (!configuredTarget) return null;
|
|
490
|
+
const target = structuredClone(configuredTarget);
|
|
473
491
|
const desc = registry.get(target.runtime);
|
|
474
492
|
if (!desc || typeof desc.probeReasoning !== "function") return null;
|
|
475
493
|
const probeCtx = await buildProbeContextForTarget(target, desc);
|
|
494
|
+
if (!currentProbeTarget(target)) return null;
|
|
476
495
|
try {
|
|
477
496
|
const result = await desc.probeReasoning(target, modelId, probeCtx);
|
|
497
|
+
if (!currentProbeTarget(target)) return null;
|
|
478
498
|
reasoningCache.set(reasoningCacheKey(targetId, modelId), result.reasoning);
|
|
479
499
|
return result.reasoning;
|
|
480
500
|
} catch {
|
|
@@ -508,6 +528,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
508
528
|
|
|
509
529
|
const extension: DomainExtension = {
|
|
510
530
|
async start() {
|
|
531
|
+
stopped = false;
|
|
511
532
|
ensurePiAiRegistered();
|
|
512
533
|
registerClioApiProviders();
|
|
513
534
|
registerClioOAuthProviders();
|
|
@@ -528,6 +549,7 @@ export function createProvidersBundle(context: DomainContext): DomainBundle<Prov
|
|
|
528
549
|
}
|
|
529
550
|
},
|
|
530
551
|
async stop() {
|
|
552
|
+
stopped = true;
|
|
531
553
|
for (const unsubscribe of unsubscribeConfigListeners.splice(0)) unsubscribe();
|
|
532
554
|
},
|
|
533
555
|
};
|
|
@@ -24,6 +24,7 @@ export {
|
|
|
24
24
|
resolveRuntimeAuthTarget,
|
|
25
25
|
targetRequiresAuth,
|
|
26
26
|
} from "./auth/index.js";
|
|
27
|
+
export { type CacheDeploymentObservation, observeCacheDeployment } from "./cache-deployment.js";
|
|
27
28
|
export { AGENT_ROLE_TOOLS_REQUIRED_REASON, mergeCapabilities, supportsAgentRoleTools } from "./capabilities.js";
|
|
28
29
|
export type { ProvidersContract, TargetHealth, TargetStatus } from "./contract.js";
|
|
29
30
|
export { isDispatchEligibleRuntime, isOrchestratorEligibleRuntime, isTargetEligibleRuntime } from "./eligibility.js";
|
|
@@ -54,7 +55,11 @@ export {
|
|
|
54
55
|
} from "./endpoint-slots-store.js";
|
|
55
56
|
export { ProvidersManifest } from "./manifest.js";
|
|
56
57
|
export type { ModelCapabilityPatchTarget } from "./model-capabilities.js";
|
|
57
|
-
export {
|
|
58
|
+
export {
|
|
59
|
+
applyModelCapabilityPatch,
|
|
60
|
+
probeCapabilitiesForModel,
|
|
61
|
+
resolveModelCapabilities,
|
|
62
|
+
} from "./model-capabilities.js";
|
|
58
63
|
export {
|
|
59
64
|
canonicalizeWireModelId,
|
|
60
65
|
contextSlotsForModel,
|
|
@@ -636,6 +636,37 @@
|
|
|
636
636
|
turns when the workflow is iterative; the budget caps runaway chains.
|
|
637
637
|
serving: "Official Qwen card recommends max output 32768 tokens for standard queries (81920 only for math/code competitions). Coding sampler is the precise variant; preserve thinking blocks across turns for iterative workflows."
|
|
638
638
|
|
|
639
|
+
- family: qwopus3.8-27b-dense
|
|
640
|
+
matchPatterns:
|
|
641
|
+
- mini/qwopus3.8-27b-dense
|
|
642
|
+
capabilities:
|
|
643
|
+
reasoning: true
|
|
644
|
+
quirks:
|
|
645
|
+
measuredUnder:
|
|
646
|
+
runtime: "LiteLLM route mini/qwopus3.8-27b-dense-q6; model_info.runtime llama.cpp"
|
|
647
|
+
date: "2026-09-16"
|
|
648
|
+
source: "Operator report and current-source request to blade-gateway, reproduced during v0.4.9 closeout"
|
|
649
|
+
note: |
|
|
650
|
+
The exact route rejected an omitted effort with Jinja's diagnostic
|
|
651
|
+
Unexpected reasoning effort high. Supported types are xhigh
|
|
652
|
+
(default), medium, and low. Clio's captured request carried only
|
|
653
|
+
enable_thinking true. The upstream behavior is consistent with an
|
|
654
|
+
incompatible deployment default; its precise cause was not inspected.
|
|
655
|
+
These effort levels come from that server diagnostic, not from
|
|
656
|
+
Qwen or Qwopus name similarity. Other capabilities remain supplied
|
|
657
|
+
by the route probe; no sampler, hardware, or context size is inherited.
|
|
658
|
+
thinking:
|
|
659
|
+
mechanism: effort-levels
|
|
660
|
+
effortByLevel:
|
|
661
|
+
low: low
|
|
662
|
+
medium: medium
|
|
663
|
+
xhigh: xhigh
|
|
664
|
+
guidance: |
|
|
665
|
+
The measured mini/qwopus3.8-27b-dense-q6 route accepts low, medium,
|
|
666
|
+
and xhigh, and rejects high. Clio maps high and max to xhigh and
|
|
667
|
+
explicitly forwards that supported effort through LiteLLM. Omitting
|
|
668
|
+
active effort can expose an incompatible deployment default.
|
|
669
|
+
|
|
639
670
|
- family: qwen3.8-27b
|
|
640
671
|
matchPatterns:
|
|
641
672
|
- qwen3.8-27b
|
|
@@ -829,23 +860,23 @@
|
|
|
829
860
|
leakageNote: |
|
|
830
861
|
LM Studio's gemma4 chat template emits chain-of-thought as plain text
|
|
831
862
|
bracketed by literal '<|channel>thought\n' and '<channel|>' markers
|
|
832
|
-
rather than structured reasoning fragments.
|
|
833
|
-
|
|
834
|
-
|
|
863
|
+
rather than structured reasoning fragments. Clio splits those regions into
|
|
864
|
+
thinking content on the OpenAI-compatible stream, including LM Studio,
|
|
865
|
+
and removes the channel markers from the visible answer.
|
|
835
866
|
gpuTiers:
|
|
836
867
|
"48gb": "Fits at f16 KV when parallel=1 and ctx=122880; drop to q8_0 KV at parallel=4."
|
|
837
868
|
"80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
|
|
838
869
|
runtimePreference:
|
|
839
870
|
lmstudio: "Pin parallel=1 in the LM Studio per-model preset to give a single agent the full 122880 context."
|
|
840
|
-
openaiCompat: "LM Studio chat uses this surface;
|
|
871
|
+
openaiCompat: "LM Studio chat uses this surface; Clio separates inline thought regions and removes their channel markers."
|
|
841
872
|
thinking:
|
|
842
873
|
mechanism: on-off
|
|
843
874
|
guidance: |
|
|
844
875
|
Gemma 4 chat template exposes thinking only as on or off; intermediate
|
|
845
876
|
levels coerce to on. NVFP4 quantization can corrupt JSON tool-call
|
|
846
877
|
output under aggressive sampling, so the instruct profile pins
|
|
847
|
-
temperature at 0.7. LM Studio's
|
|
848
|
-
|
|
878
|
+
temperature at 0.7. Clio classifies inline channel markers on LM Studio's
|
|
879
|
+
OpenAI-compatible stream when the server leaves them in content.
|
|
849
880
|
serving: "LilaRest publishes no per-model sampler; values inherit the gemma family default per the official Google Gemma 4 31B card. KV cache budget at f16, ctx=122880 is roughly 57 GB on top of ~21 GB of NVFP4 weights."
|
|
850
881
|
|
|
851
882
|
# The qat/UD-Q4_K_XL/MTP build is the long-context llama.cpp gemma profile and is a
|
|
@@ -928,7 +959,7 @@
|
|
|
928
959
|
"32gb": "32 GB Vulkan llama.cpp profile with UD-Q4_K_XL weights, ctx=262144, q8 KV, flash attention, parallel=1, F16 gemma4v mmproj (vision), and MTP draft (spec-type draft-mtp, n_max 4) both active."
|
|
929
960
|
runtimePreference:
|
|
930
961
|
llamaCpp: "OpenAI-compatible chat completions with --jinja and --reasoning off. Recommended local profile serves at ctx=262144, q8 KV, flash attention, parallel=1, batch=1024, ubatch=256, with F16 mmproj vision and draft-mtp speculative decoding; sampler temperature 0.8, top_p 0.95, top_k 64, repeat_penalty 1.05."
|
|
931
|
-
openaiCompat: "Fallback when a gateway fronts the same llama.cpp chat-completions surface;
|
|
962
|
+
openaiCompat: "Fallback when a gateway fronts the same llama.cpp chat-completions surface; Clio separates inline thought regions with the shared channel-marker filter."
|
|
932
963
|
llamaCpp:
|
|
933
964
|
ctxSize: 262144
|
|
934
965
|
cacheTypeK: q8_0
|
|
@@ -1008,15 +1039,16 @@
|
|
|
1008
1039
|
"48gb": "Fits at f16 KV with parallel=1; q8_0 KV recommended at parallel=4."
|
|
1009
1040
|
"80gb": "Comfortable at f16 KV with parallel=1 and ctx=122880."
|
|
1010
1041
|
runtimePreference:
|
|
1011
|
-
lmstudio: "LM Studio
|
|
1042
|
+
lmstudio: "LM Studio may stream inline channel markers; Clio separates the thought region and removes the markers from the answer."
|
|
1012
1043
|
openaiCompat: "Fallback; reasoning_content is absent from the openai-compat reasoning probe for this family."
|
|
1013
1044
|
thinking:
|
|
1014
1045
|
mechanism: always-on
|
|
1015
1046
|
guidance: |
|
|
1016
1047
|
Distilled traces emit unconditionally. The thinking level setting is
|
|
1017
1048
|
ignored at the API surface; chain-of-thought arrives whether or not
|
|
1018
|
-
Clio asks for it.
|
|
1019
|
-
OpenAI-compatible LM Studio path
|
|
1049
|
+
Clio asks for it. The shared channel-marker filter splits inline thought
|
|
1050
|
+
regions into thinking content on the OpenAI-compatible LM Studio path
|
|
1051
|
+
and removes the markers from the visible answer.
|
|
1020
1052
|
serving: "Distilled from Claude 4.6 Opus reasoning traces onto Google Gemma 4 31B; sampler matches the gemopus card values."
|
|
1021
1053
|
|
|
1022
1054
|
- family: qwopus3.6-27b-v1-preview
|
|
@@ -14,29 +14,19 @@
|
|
|
14
14
|
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
|
|
17
|
+
import type { ClioSettings } from "../../core/config.js";
|
|
17
18
|
import { clioConfigDir } from "../../core/xdg.js";
|
|
18
19
|
import { activateExternalPluginApiBridge } from "../../engine/api-registry.js";
|
|
19
20
|
import type { RuntimeRegistry } from "./registry.js";
|
|
20
21
|
|
|
21
|
-
interface PluginSettings {
|
|
22
|
-
runtimePlugins?: unknown;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function extractPluginPackages(settings: unknown): string[] {
|
|
26
|
-
if (!settings || typeof settings !== "object") return [];
|
|
27
|
-
const raw = (settings as PluginSettings).runtimePlugins;
|
|
28
|
-
if (!Array.isArray(raw)) return [];
|
|
29
|
-
return raw.filter((entry): entry is string => typeof entry === "string" && entry.length > 0);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
22
|
export async function loadPluginRuntimes(
|
|
33
23
|
registry: RuntimeRegistry,
|
|
34
|
-
settings?:
|
|
24
|
+
settings?: Pick<ClioSettings, "integrations">,
|
|
35
25
|
): Promise<ReadonlyArray<string>> {
|
|
36
26
|
const loaded: string[] = [];
|
|
37
27
|
|
|
38
28
|
const pluginDir = join(clioConfigDir(), "runtimes");
|
|
39
|
-
const packages =
|
|
29
|
+
const packages = settings?.integrations.runtimePlugins ?? [];
|
|
40
30
|
try {
|
|
41
31
|
const ids = await registry.loadFromDir(pluginDir, activateExternalPluginApiBridge);
|
|
42
32
|
loaded.push(...ids);
|
|
@@ -13,84 +13,69 @@ export interface HttpProbeOptions {
|
|
|
13
13
|
|
|
14
14
|
export type JsonProbeOptions = HttpProbeOptions;
|
|
15
15
|
|
|
16
|
-
export interface
|
|
17
|
-
|
|
16
|
+
export interface HttpProbeResult extends ProbeResult {
|
|
17
|
+
/** Status of a completed HTTP response; absent when body/transport work fails. */
|
|
18
|
+
status?: number;
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
if (response === null) return { ok: false, error: error ?? "unknown transport error", latencyMs };
|
|
23
|
-
const method = opts.method ?? "GET";
|
|
24
|
-
if (response.ok) return { ok: true, latencyMs };
|
|
25
|
-
// Some servers reject HEAD with 405 even though the endpoint is reachable.
|
|
26
|
-
if (method === "HEAD" && response.status === 405) return { ok: true, latencyMs };
|
|
27
|
-
return {
|
|
28
|
-
ok: false,
|
|
29
|
-
latencyMs,
|
|
30
|
-
error: `HTTP ${response.status}: ${response.statusText}`,
|
|
31
|
-
};
|
|
21
|
+
export interface JsonProbeResult<T = unknown> extends HttpProbeResult {
|
|
22
|
+
data?: T;
|
|
32
23
|
}
|
|
33
24
|
|
|
34
|
-
export async function
|
|
35
|
-
|
|
36
|
-
if (response === null) return { ok: false, error: error ?? "unknown transport error", latencyMs };
|
|
37
|
-
const method = opts.method ?? "GET";
|
|
38
|
-
if (!response.ok && !(method === "HEAD" && response.status === 405)) {
|
|
39
|
-
return {
|
|
40
|
-
ok: false,
|
|
41
|
-
latencyMs,
|
|
42
|
-
error: `HTTP ${response.status}: ${response.statusText}`,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
let data: T;
|
|
46
|
-
try {
|
|
47
|
-
data = (await response.json()) as T;
|
|
48
|
-
} catch (err) {
|
|
49
|
-
return { ok: false, latencyMs, error: `JSON parse: ${describeError(err)}` };
|
|
50
|
-
}
|
|
51
|
-
return { ok: true, latencyMs, data };
|
|
25
|
+
export async function probeHttp(opts: HttpProbeOptions): Promise<HttpProbeResult> {
|
|
26
|
+
return runProbe(opts, false);
|
|
52
27
|
}
|
|
53
28
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
latencyMs: number;
|
|
57
|
-
error?: string;
|
|
29
|
+
export async function probeJson<T = unknown>(opts: JsonProbeOptions): Promise<JsonProbeResult<T>> {
|
|
30
|
+
return runProbe<T>(opts, true);
|
|
58
31
|
}
|
|
59
32
|
|
|
60
|
-
|
|
33
|
+
/** Own the request until its body has been consumed or cancelled. */
|
|
34
|
+
async function runProbe<T>(opts: HttpProbeOptions, readJson: boolean): Promise<JsonProbeResult<T>> {
|
|
61
35
|
const controller = new AbortController();
|
|
62
|
-
let
|
|
63
|
-
const
|
|
64
|
-
|
|
36
|
+
let abortError: string | undefined;
|
|
37
|
+
const abort = (error: string): void => {
|
|
38
|
+
if (controller.signal.aborted) return;
|
|
39
|
+
abortError = error;
|
|
65
40
|
controller.abort();
|
|
66
|
-
}, opts.timeoutMs);
|
|
67
|
-
const onExternalAbort = () => controller.abort();
|
|
68
|
-
if (opts.signal) {
|
|
69
|
-
if (opts.signal.aborted) controller.abort();
|
|
70
|
-
else opts.signal.addEventListener("abort", onExternalAbort, { once: true });
|
|
71
|
-
}
|
|
72
|
-
const init: RequestInit = {
|
|
73
|
-
method: opts.method ?? "GET",
|
|
74
|
-
signal: controller.signal,
|
|
75
41
|
};
|
|
42
|
+
const timer = setTimeout(() => abort(`timeout after ${opts.timeoutMs}ms`), opts.timeoutMs);
|
|
43
|
+
const onExternalAbort = () => abort("aborted by caller");
|
|
44
|
+
if (opts.signal?.aborted) onExternalAbort();
|
|
45
|
+
else opts.signal?.addEventListener("abort", onExternalAbort, { once: true });
|
|
46
|
+
const method = opts.method ?? "GET";
|
|
47
|
+
const init: RequestInit = { method, signal: controller.signal };
|
|
76
48
|
if (opts.headers) init.headers = opts.headers;
|
|
77
49
|
if (opts.body !== undefined) init.body = opts.body;
|
|
78
50
|
const started = performance.now();
|
|
51
|
+
let latencyMs: number | undefined;
|
|
52
|
+
let parsingJson = false;
|
|
79
53
|
try {
|
|
80
54
|
const response = await fetch(opts.url, init);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
55
|
+
// Preserve the existing network latency measurement at response headers.
|
|
56
|
+
latencyMs = Math.round(performance.now() - started);
|
|
57
|
+
// HEAD 405 demonstrates reachability, but does not supply JSON data.
|
|
58
|
+
const ok = response.ok || (method === "HEAD" && response.status === 405);
|
|
59
|
+
if (!ok || !readJson) {
|
|
60
|
+
await response.body?.cancel();
|
|
61
|
+
controller.signal.throwIfAborted();
|
|
62
|
+
return ok
|
|
63
|
+
? { ok: true, latencyMs, status: response.status }
|
|
64
|
+
: { ok: false, latencyMs, status: response.status, error: `HTTP ${response.status}: ${response.statusText}` };
|
|
86
65
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return {
|
|
66
|
+
parsingJson = true;
|
|
67
|
+
const data = (await response.json()) as T;
|
|
68
|
+
controller.signal.throwIfAborted();
|
|
69
|
+
return { ok: true, latencyMs, status: response.status, data };
|
|
70
|
+
} catch (err) {
|
|
71
|
+
return {
|
|
72
|
+
ok: false,
|
|
73
|
+
latencyMs: latencyMs ?? Math.round(performance.now() - started),
|
|
74
|
+
error: abortError ?? `${parsingJson ? "JSON parse: " : ""}${describeError(err)}`,
|
|
75
|
+
};
|
|
91
76
|
} finally {
|
|
92
77
|
clearTimeout(timer);
|
|
93
|
-
|
|
78
|
+
opts.signal?.removeEventListener("abort", onExternalAbort);
|
|
94
79
|
}
|
|
95
80
|
}
|
|
96
81
|
|
|
@@ -95,6 +95,8 @@ export async function probeOpenAICompatReasoning(opts: ProbeReasoningOptions): P
|
|
|
95
95
|
});
|
|
96
96
|
const latencyMs = Math.round(performance.now() - started);
|
|
97
97
|
if (!response.ok) {
|
|
98
|
+
await response.body?.cancel();
|
|
99
|
+
controller.signal.throwIfAborted();
|
|
98
100
|
return { reasoning: false, latencyMs, error: `HTTP ${response.status}: ${response.statusText}` };
|
|
99
101
|
}
|
|
100
102
|
const data = (await response.json()) as ChatCompletionResponse;
|
|
@@ -25,6 +25,7 @@ export interface ClioLocalModelMetadata {
|
|
|
25
25
|
chatTemplateKwargsUnsupported?: boolean;
|
|
26
26
|
lmstudio?: TargetDescriptor["lmstudio"];
|
|
27
27
|
litellm?: TargetDescriptor["litellm"];
|
|
28
|
+
cache?: TargetDescriptor["cache"];
|
|
28
29
|
};
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -65,6 +66,8 @@ function localOpenAICompat(caps: CapabilityFlags, runtimeId: string): OpenAIComp
|
|
|
65
66
|
maxTokensField: "max_tokens",
|
|
66
67
|
supportsThinkingTokenBudget: runtimeId === "vllm",
|
|
67
68
|
supportsStrictMode: false,
|
|
69
|
+
// Native and generic gateway schemas do not establish hosted 24h retention.
|
|
70
|
+
supportsLongCacheRetention: false,
|
|
68
71
|
};
|
|
69
72
|
const thinkingFormat = openAIThinkingFormat(caps);
|
|
70
73
|
if (thinkingFormat) (compat as unknown as { thinkingFormat?: string }).thinkingFormat = thinkingFormat;
|
|
@@ -111,6 +114,7 @@ export function synthLocalModel(input: LocalSynthesisInput): Model<Api> {
|
|
|
111
114
|
...(quirks ? { quirks } : {}),
|
|
112
115
|
...(target.lmstudio ? { lmstudio: target.lmstudio } : {}),
|
|
113
116
|
...(target.litellm ? { litellm: target.litellm } : {}),
|
|
117
|
+
...(target.cache ? { cache: structuredClone(target.cache) } : {}),
|
|
114
118
|
},
|
|
115
119
|
};
|
|
116
120
|
if (headers) model.headers = headers;
|