@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
package/src/cli/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ process.env.AI_AGENT = AI_AGENT_NAME;
|
|
|
20
20
|
// its own chunk.
|
|
21
21
|
import { traceBoot } from "../core/boot-trace.js";
|
|
22
22
|
import { incompleteInstallationAdvice } from "../core/incomplete-installation.js";
|
|
23
|
+
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
23
24
|
import { extractGlobalFlags, parseFlags, printError } from "./argv.js";
|
|
24
25
|
|
|
25
26
|
const HELP = `Clio Coder command line
|
|
@@ -29,6 +30,7 @@ science. CLIO stands for Context Layer for Input/Output, named for the Greek mus
|
|
|
29
30
|
|
|
30
31
|
Usage:
|
|
31
32
|
clio-coder start interactive repository chat
|
|
33
|
+
clio-coder web [--open] start the browser application
|
|
32
34
|
clio-coder acp serve Clio as an ACP v1 agent over stdio
|
|
33
35
|
clio-coder --acp alias for clio-coder acp
|
|
34
36
|
clio-coder run [flags] <task> run one headless main-agent turn
|
|
@@ -37,6 +39,7 @@ Usage:
|
|
|
37
39
|
clio-coder --no-context-files, -nc skip CLIO-CODER.md project-context injection
|
|
38
40
|
clio-coder --with-panes activate the panes extension (terminal panes for workers and tools)
|
|
39
41
|
clio-coder --no-panes keep panes off even when settings turn them on
|
|
42
|
+
clio-coder --autonomy <level> start this interactive session at read-only|suggest|auto-edit|full-auto
|
|
40
43
|
clio-coder configure interactive first-run/configuration wizard
|
|
41
44
|
clio-coder targets list configured targets, health, auth, and capabilities
|
|
42
45
|
clio-coder targets add add a target interactively or via flags
|
|
@@ -70,12 +73,13 @@ Usage:
|
|
|
70
73
|
clio-coder trace query or view the durable dispatch trace mirror
|
|
71
74
|
clio-coder extensions install, list, enable, disable, or remove extension packages
|
|
72
75
|
clio-coder library register, install, update, import, inspect, and manage packages of every kind
|
|
76
|
+
clio-coder mcp list|trust|untrust list MCP servers and manage trust for project-declared servers
|
|
73
77
|
clio-coder tasks list, add, hand, finish, or drop project operator tasks
|
|
74
78
|
clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
|
|
75
79
|
clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
|
|
76
80
|
clio-coder interop inspect --json detected external coding agents and how far each one is wired
|
|
77
81
|
clio-coder panes install|theme install the pane multiplexer (alias for 'tools install herdr'), or print Clio's theme as a herdr block
|
|
78
|
-
clio-coder docs [topic]
|
|
82
|
+
clio-coder docs [topic] open documentation in the web app (--no-open to print the launch link)
|
|
79
83
|
clio-coder dev <command> harness instruments; run 'clio-coder dev' for the list
|
|
80
84
|
clio-coder --help, -h this message
|
|
81
85
|
clio-coder --help --all this message plus every command under 'clio-coder dev'
|
|
@@ -121,6 +125,7 @@ interface CliBootOptions {
|
|
|
121
125
|
noSkills?: boolean;
|
|
122
126
|
skillPaths?: string[];
|
|
123
127
|
panes?: "with" | "without";
|
|
128
|
+
autonomy?: AutonomyLevel;
|
|
124
129
|
}
|
|
125
130
|
|
|
126
131
|
type CommandHandler = (subArgs: string[], bootOptions: CliBootOptions) => Promise<number>;
|
|
@@ -153,6 +158,7 @@ async function main(argv: string[]): Promise<number> {
|
|
|
153
158
|
noSkills,
|
|
154
159
|
skillPaths,
|
|
155
160
|
panes,
|
|
161
|
+
autonomy,
|
|
156
162
|
rest,
|
|
157
163
|
error: globalFlagError,
|
|
158
164
|
} = extractGlobalFlags(argv, isCommandToken);
|
|
@@ -181,10 +187,17 @@ async function main(argv: string[]): Promise<number> {
|
|
|
181
187
|
...(skillPaths.length > 0 ? { skillPaths } : {}),
|
|
182
188
|
...(panes === undefined ? {} : { panes }),
|
|
183
189
|
};
|
|
190
|
+
if (autonomy !== undefined && subcommand) {
|
|
191
|
+
// Silently dropping a safety level would be worse than refusing it.
|
|
192
|
+
printError(
|
|
193
|
+
`--autonomy before a subcommand applies to the interactive session only. For a headless turn use: clio-coder run --autonomy ${autonomy} "<task>"`,
|
|
194
|
+
);
|
|
195
|
+
return 2;
|
|
196
|
+
}
|
|
184
197
|
if (!subcommand) {
|
|
185
198
|
await enableBootCompileCache();
|
|
186
199
|
const { runClioCommand } = await import("./clio.js");
|
|
187
|
-
return runClioCommand(bootOptions);
|
|
200
|
+
return runClioCommand({ ...bootOptions, ...(autonomy === undefined ? {} : { autonomy }) });
|
|
188
201
|
}
|
|
189
202
|
|
|
190
203
|
return dispatch(subcommand, subArgs, bootOptions);
|
|
@@ -259,7 +272,9 @@ const COMMAND_HANDLERS = new Map<string, CommandHandler>([
|
|
|
259
272
|
["fleet", async (subArgs) => (await import("./fleet.js")).runFleetCommand(subArgs)],
|
|
260
273
|
["library", async (subArgs) => (await import("./library.js")).runLibraryCommand(subArgs)],
|
|
261
274
|
["tasks", async (subArgs) => (await import("./tasks.js")).runTasksCommand(subArgs)],
|
|
275
|
+
["mcp", async (subArgs) => (await import("./mcp.js")).runMcpCommand(subArgs)],
|
|
262
276
|
["verifiers", async (subArgs) => (await import("./verifiers.js")).runVerifiersCommand(subArgs)],
|
|
277
|
+
["web", async (subArgs) => (await import("./web.js")).runWebCommand(subArgs)],
|
|
263
278
|
["docs", async (subArgs) => (await import("./docs.js")).runDocsCommand(subArgs)],
|
|
264
279
|
["share", async (subArgs) => (await import("./share.js")).runShareCommand(subArgs)],
|
|
265
280
|
["export", async (subArgs) => (await import("./share.js")).runExportCommand(subArgs)],
|
package/src/cli/mcp.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MCP_TRUST_ACTION_CLASSES,
|
|
3
|
+
type McpTrustActionClass,
|
|
4
|
+
type McpTrustOptions,
|
|
5
|
+
resolveMcpServers,
|
|
6
|
+
trustMcpServer,
|
|
7
|
+
untrustMcpServer,
|
|
8
|
+
} from "../domains/gateway/mcp/index.js";
|
|
9
|
+
import { printError } from "./shared.js";
|
|
10
|
+
|
|
11
|
+
const HELP = `clio-coder mcp <command>
|
|
12
|
+
|
|
13
|
+
Commands:
|
|
14
|
+
clio-coder mcp list [--json]
|
|
15
|
+
clio-coder mcp trust <id> [--action-class <class>] [--json]
|
|
16
|
+
clio-coder mcp untrust <id> [--json]
|
|
17
|
+
|
|
18
|
+
Action classes: ${MCP_TRUST_ACTION_CLASSES.join(", ")}
|
|
19
|
+
|
|
20
|
+
JSON responses (--json):
|
|
21
|
+
list: {servers: [...], diagnostics: [...], trustDiagnostics: [...]}
|
|
22
|
+
Each server includes its declaration and trust {status, actionClass, reason?}.
|
|
23
|
+
trust: {ok: true, record: {projectRoot, id, digest, actionClass, trustedAt}}
|
|
24
|
+
untrust: {ok: true, removed: boolean}
|
|
25
|
+
errors: {ok: false, message: string}
|
|
26
|
+
Exit codes: 0 success; 1 operational failure; 2 invalid usage.
|
|
27
|
+
List retains its response shape on failure and exits 1 when config or trust
|
|
28
|
+
diagnostics are present. Mutation errors return the error shape with a
|
|
29
|
+
one-line reason. --help prints this text even when --json is supplied.
|
|
30
|
+
`;
|
|
31
|
+
|
|
32
|
+
export interface McpCommandOutput {
|
|
33
|
+
code: number;
|
|
34
|
+
text: string;
|
|
35
|
+
data: unknown;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Shared operator outcomes for the CLI and slash command. */
|
|
39
|
+
export function mcpCommandOutput(
|
|
40
|
+
argv: ReadonlyArray<string>,
|
|
41
|
+
options: McpTrustOptions = { cwd: process.cwd() },
|
|
42
|
+
): McpCommandOutput {
|
|
43
|
+
const fail = (code: number, message: string): McpCommandOutput => {
|
|
44
|
+
const text = message.replace(/[\r\n]+/gu, " ");
|
|
45
|
+
return { code, text, data: { ok: false, message: text } };
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
const [command, id, ...rest] = argv;
|
|
49
|
+
if (command === "list" && id === undefined) {
|
|
50
|
+
const result = resolveMcpServers(options);
|
|
51
|
+
const lines = result.servers.map(
|
|
52
|
+
(server) =>
|
|
53
|
+
`${server.id} scope=${server.scope} command=${JSON.stringify([server.command, ...server.args])} cwd=${JSON.stringify(server.cwd)} trust=${server.trust.status}${"reason" in server.trust ? ` (${server.trust.reason})` : ""} actionClass=${server.trust.actionClass}`,
|
|
54
|
+
);
|
|
55
|
+
lines.push(...result.diagnostics.map((entry) => `${entry.path}: ${entry.message}`), ...result.trustDiagnostics);
|
|
56
|
+
return {
|
|
57
|
+
code: result.diagnostics.length || result.trustDiagnostics.length ? 1 : 0,
|
|
58
|
+
text: lines.join("\n") || "mcp: none",
|
|
59
|
+
data: result,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if ((command !== "trust" && command !== "untrust") || !id)
|
|
63
|
+
return fail(2, "usage: clio-coder mcp list | trust <id> [--action-class <class>] | untrust <id>");
|
|
64
|
+
let actionClass: McpTrustActionClass | undefined;
|
|
65
|
+
if (rest.length) {
|
|
66
|
+
if (
|
|
67
|
+
command !== "trust" ||
|
|
68
|
+
rest.length !== 2 ||
|
|
69
|
+
rest[0] !== "--action-class" ||
|
|
70
|
+
!MCP_TRUST_ACTION_CLASSES.includes(rest[1] as McpTrustActionClass)
|
|
71
|
+
)
|
|
72
|
+
return fail(2, `--action-class must be one of ${MCP_TRUST_ACTION_CLASSES.join(", ")} and applies only to trust`);
|
|
73
|
+
actionClass = rest[1] as McpTrustActionClass;
|
|
74
|
+
}
|
|
75
|
+
if (command === "trust") {
|
|
76
|
+
const result = trustMcpServer({ ...options, id, ...(actionClass ? { actionClass } : {}) });
|
|
77
|
+
return result.ok
|
|
78
|
+
? { code: 0, text: `mcp: trusted ${id} ${JSON.stringify(result.record)}`, data: result }
|
|
79
|
+
: fail(1, result.message);
|
|
80
|
+
}
|
|
81
|
+
const resolved = resolveMcpServers(options);
|
|
82
|
+
const server = resolved.servers.find((entry) => entry.id === id);
|
|
83
|
+
if (!server) return fail(1, `no declared MCP server with id '${id}'`);
|
|
84
|
+
if (server.scope === "user")
|
|
85
|
+
return fail(1, `server '${id}' is a user-scope declaration; it is trusted by authorship`);
|
|
86
|
+
const result = untrustMcpServer({ ...options, id });
|
|
87
|
+
return result.ok
|
|
88
|
+
? { code: 0, text: `mcp: untrusted ${id} (record ${result.removed ? "removed" : "already absent"})`, data: result }
|
|
89
|
+
: fail(1, result.message);
|
|
90
|
+
} catch (error) {
|
|
91
|
+
return fail(1, error instanceof Error ? error.message : String(error));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export function runMcpCommand(argv: ReadonlyArray<string>): number {
|
|
96
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
97
|
+
process.stdout.write(HELP);
|
|
98
|
+
return 0;
|
|
99
|
+
}
|
|
100
|
+
const json = argv.includes("--json");
|
|
101
|
+
const result = mcpCommandOutput(argv.filter((arg) => arg !== "--json"));
|
|
102
|
+
if (json) process.stdout.write(`${JSON.stringify(result.data, null, 2)}\n`);
|
|
103
|
+
else if (result.code && argv[0] !== "list") printError(result.text);
|
|
104
|
+
else process.stdout.write(`${result.text}\n`);
|
|
105
|
+
return result.code;
|
|
106
|
+
}
|
package/src/cli/skills-eval.ts
CHANGED
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
type SkillEvalScenario,
|
|
27
27
|
} from "../domains/resources/index.js";
|
|
28
28
|
import { NO_NETWORK_TOOLS_ENV } from "../tools/network-policy.js";
|
|
29
|
+
import { effectiveToolCall } from "../tools/surface.js";
|
|
29
30
|
import { formatColumns, printError } from "./shared.js";
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -845,9 +846,14 @@ function parseRunStdout(stdout: string): { sessionId: string | null; transcript:
|
|
|
845
846
|
continue;
|
|
846
847
|
}
|
|
847
848
|
if (event.type === "tool_execution_start") {
|
|
848
|
-
const
|
|
849
|
-
const
|
|
849
|
+
const recordedTool = readString(event.toolName) ?? readString(event.tool) ?? "tool";
|
|
850
|
+
const recordedArgs = event.args ?? event.arguments ?? event.input;
|
|
850
851
|
const callId = readString(event.toolCallId);
|
|
852
|
+
// A gateway call is judged as the capability it reached: an artifact
|
|
853
|
+
// written through the gateway is still the terminal answer.
|
|
854
|
+
const effective = effectiveToolCall(recordedTool, recordedArgs);
|
|
855
|
+
const tool = effective.toolName;
|
|
856
|
+
const args = effective.viaGateway ? effective.args : recordedArgs;
|
|
851
857
|
if (callId !== null && loadsSkillBody(tool, args)) skillBodyCallIds.add(callId);
|
|
852
858
|
lines.push(`TOOL ${tool} args=${preview(args)}`);
|
|
853
859
|
// Terminating tools end the turn with no assistant text; their content
|
package/src/cli/trace.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
|
-
import { access } from "node:fs/promises";
|
|
3
2
|
import { resolve } from "node:path";
|
|
4
|
-
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
3
|
import { clioStatePath } from "../core/xdg.js";
|
|
6
4
|
import type { CodeStepRecord } from "../domains/dispatch/code-step.js";
|
|
7
5
|
import { codeStepDir, readCodeStepRecords } from "../domains/dispatch/code-step-store.js";
|
|
@@ -29,10 +27,8 @@ const HELP = `Usage:
|
|
|
29
27
|
clio-coder trace code-steps <rootId> [--json] deterministic code steps of one fleet root
|
|
30
28
|
clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
|
|
31
29
|
clio-coder trace sql <SELECT query> [--db PATH]
|
|
32
|
-
clio-coder trace ui [--db PATH] [--port N] source checkout only
|
|
33
30
|
|
|
34
|
-
The
|
|
35
|
-
Clio the subcommands above are the way in. They read the same database, except
|
|
31
|
+
The subcommands above read the same database, except
|
|
36
32
|
code-steps, which reads the per-root record files under the state directory's
|
|
37
33
|
code-steps/ tree (a code step is a subprocess, not a model run, so it never
|
|
38
34
|
enters the SQLite mirror).
|
|
@@ -51,7 +47,6 @@ interface ParsedTraceArgs {
|
|
|
51
47
|
dbExplicit: boolean;
|
|
52
48
|
follow: boolean;
|
|
53
49
|
limit: number;
|
|
54
|
-
port: number;
|
|
55
50
|
json: boolean;
|
|
56
51
|
maxAgeDays: number | undefined;
|
|
57
52
|
maxBytes: number | undefined;
|
|
@@ -63,7 +58,6 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
63
58
|
let dbExplicit = false;
|
|
64
59
|
let follow = false;
|
|
65
60
|
let limit = DEFAULT_TRACE_LIMIT;
|
|
66
|
-
let port = 0;
|
|
67
61
|
let json = false;
|
|
68
62
|
let maxAgeDays: number | undefined;
|
|
69
63
|
let maxBytes: number | undefined;
|
|
@@ -71,13 +65,7 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
71
65
|
const arg = args[index];
|
|
72
66
|
if (arg === "--follow") follow = true;
|
|
73
67
|
else if (arg === "--json") json = true;
|
|
74
|
-
else if (
|
|
75
|
-
arg === "--db" ||
|
|
76
|
-
arg === "--limit" ||
|
|
77
|
-
arg === "--port" ||
|
|
78
|
-
arg === "--max-age-days" ||
|
|
79
|
-
arg === "--max-bytes"
|
|
80
|
-
) {
|
|
68
|
+
else if (arg === "--db" || arg === "--limit" || arg === "--max-age-days" || arg === "--max-bytes") {
|
|
81
69
|
const value = args[index + 1];
|
|
82
70
|
if (value === undefined) throw new Error(`${arg} requires a value`);
|
|
83
71
|
index += 1;
|
|
@@ -85,25 +73,23 @@ function parseTraceArgs(args: string[]): ParsedTraceArgs {
|
|
|
85
73
|
db = resolve(value);
|
|
86
74
|
dbExplicit = true;
|
|
87
75
|
} else if (arg === "--limit") limit = parseInteger(value, "--limit", 1, 500);
|
|
88
|
-
else if (arg === "--port") port = parseInteger(value, "--port", 0, 65_535);
|
|
89
76
|
else if (arg === "--max-age-days") maxAgeDays = parseInteger(value, arg, 1, 36_500);
|
|
90
77
|
else maxBytes = parseInteger(value, arg, 1024 * 1024, Number.MAX_SAFE_INTEGER);
|
|
91
78
|
} else if (arg?.startsWith("--db=")) {
|
|
92
79
|
db = resolve(arg.slice(5));
|
|
93
80
|
dbExplicit = true;
|
|
94
81
|
} else if (arg?.startsWith("--limit=")) limit = parseInteger(arg.slice(8), "--limit", 1, 500);
|
|
95
|
-
else if (arg?.startsWith("--port=")) port = parseInteger(arg.slice(7), "--port", 0, 65_535);
|
|
96
82
|
else if (arg?.startsWith("--max-age-days=")) maxAgeDays = parseInteger(arg.slice(15), "--max-age-days", 1, 36_500);
|
|
97
83
|
else if (arg?.startsWith("--max-bytes="))
|
|
98
84
|
maxBytes = parseInteger(arg.slice(12), "--max-bytes", 1024 * 1024, Number.MAX_SAFE_INTEGER);
|
|
99
85
|
else if (arg?.startsWith("-")) throw new Error(`unknown trace flag: ${arg}`);
|
|
100
86
|
else if (arg !== undefined) positional.push(arg);
|
|
101
87
|
}
|
|
102
|
-
return { positional, db, dbExplicit, follow, limit,
|
|
88
|
+
return { positional, db, dbExplicit, follow, limit, json, maxAgeDays, maxBytes };
|
|
103
89
|
}
|
|
104
90
|
|
|
105
91
|
/** Every subcommand `trace` answers to. Anything else is a usage error. */
|
|
106
|
-
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql"
|
|
92
|
+
const TRACE_COMMANDS = new Set(["runs", "inspect", "phases", "tail", "procs", "code-steps", "prune", "sql"]);
|
|
107
93
|
|
|
108
94
|
/** The subcommands whose first positional is a run id. */
|
|
109
95
|
const TRACE_COMMANDS_NEEDING_RUN_ID = new Set(["phases", "tail", "procs"]);
|
|
@@ -169,8 +155,6 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
169
155
|
}
|
|
170
156
|
}
|
|
171
157
|
|
|
172
|
-
if (command === "ui") return runTraceUi(parsed.db, parsed.port);
|
|
173
|
-
|
|
174
158
|
// Code-step records live in flat per-root JSON files beside the ledger, not
|
|
175
159
|
// in the SQLite mirror, so this answers before the database is consulted and
|
|
176
160
|
// ignores --db. An absent root directory is the empty state: the root either
|
|
@@ -187,7 +171,6 @@ export async function runTraceCommand(args: string[]): Promise<number> {
|
|
|
187
171
|
!parsed.dbExplicit &&
|
|
188
172
|
!parsed.follow &&
|
|
189
173
|
parsed.limit === DEFAULT_TRACE_LIMIT &&
|
|
190
|
-
parsed.port === 0 &&
|
|
191
174
|
parsed.maxAgeDays === undefined &&
|
|
192
175
|
parsed.maxBytes === undefined,
|
|
193
176
|
);
|
|
@@ -379,50 +362,6 @@ function printProcesses(rows: TraceProcessRow[]): void {
|
|
|
379
362
|
}
|
|
380
363
|
}
|
|
381
364
|
|
|
382
|
-
async function runTraceUi(db: string, port: number): Promise<number> {
|
|
383
|
-
const candidates = [
|
|
384
|
-
fileURLToPath(new URL("../apps/trace-viewer/server.mjs", import.meta.url)),
|
|
385
|
-
fileURLToPath(new URL("../../apps/trace-viewer/server.mjs", import.meta.url)),
|
|
386
|
-
];
|
|
387
|
-
const entry = await firstExisting(candidates);
|
|
388
|
-
if (entry === null) {
|
|
389
|
-
process.stderr.write(
|
|
390
|
-
"trace viewer is available only from a source checkout; apps/trace-viewer/server.mjs was not found\n" +
|
|
391
|
-
" the npm package does not carry the viewer, so an installed clio cannot start it\n" +
|
|
392
|
-
` the same run is readable here: clio-coder trace runs --db ${db}\n` +
|
|
393
|
-
" from a checkout of the repository: npm run trace:ui\n",
|
|
394
|
-
);
|
|
395
|
-
return 1;
|
|
396
|
-
}
|
|
397
|
-
const module = (await import(pathToFileURL(entry).href)) as {
|
|
398
|
-
startTraceViewer(options: { db: string; port: number }): Promise<{ url: string; close(): Promise<void> }>;
|
|
399
|
-
};
|
|
400
|
-
const server = await module.startTraceViewer({ db, port });
|
|
401
|
-
process.stdout.write(`Trace viewer: ${server.url}\n`);
|
|
402
|
-
await new Promise<void>((resolveStop) => {
|
|
403
|
-
const stop = (): void => {
|
|
404
|
-
process.off("SIGINT", stop);
|
|
405
|
-
process.off("SIGTERM", stop);
|
|
406
|
-
void server.close().finally(resolveStop);
|
|
407
|
-
};
|
|
408
|
-
process.on("SIGINT", stop);
|
|
409
|
-
process.on("SIGTERM", stop);
|
|
410
|
-
});
|
|
411
|
-
return 0;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
async function firstExisting(paths: string[]): Promise<string | null> {
|
|
415
|
-
for (const path of paths) {
|
|
416
|
-
try {
|
|
417
|
-
await access(path);
|
|
418
|
-
return path;
|
|
419
|
-
} catch {
|
|
420
|
-
// Try the next source-checkout location.
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return null;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
365
|
function parseInteger(value: string, flag: string, min: number, max: number): number {
|
|
427
366
|
const parsed = Number(value);
|
|
428
367
|
if (!Number.isInteger(parsed) || parsed < min || parsed > max)
|
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/upgrade.ts
CHANGED
|
@@ -86,24 +86,10 @@ function parseUpgradeArgs(argv: ReadonlyArray<string>): UpgradeOptions {
|
|
|
86
86
|
* the installed version is the newest one.
|
|
87
87
|
*/
|
|
88
88
|
type RegistryLookup =
|
|
89
|
-
| { asked: false; reason: "source checkout" | "
|
|
89
|
+
| { asked: false; reason: "source checkout" | "post-install checks" }
|
|
90
90
|
| { asked: true; version: string | null };
|
|
91
91
|
|
|
92
|
-
function
|
|
93
|
-
if (process.env.NODE_ENV !== "test") return undefined;
|
|
94
|
-
return process.env[name];
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
async function lookUpAvailableVersion(
|
|
98
|
-
channel: Channel,
|
|
99
|
-
method: "source" | "npm",
|
|
100
|
-
noNetwork: boolean,
|
|
101
|
-
): Promise<RegistryLookup> {
|
|
102
|
-
const seam = testSeam("CLIO_CODER_TEST_UPGRADE_AVAILABLE");
|
|
103
|
-
// `unreachable` stands in for a registry that answered nothing, which is the
|
|
104
|
-
// only way to reach that branch without a network in the test.
|
|
105
|
-
if (seam) return { asked: true, version: seam === "unreachable" ? null : seam };
|
|
106
|
-
if (noNetwork) return { asked: false, reason: "network checks are disabled" };
|
|
92
|
+
async function lookUpAvailableVersion(channel: Channel, method: "source" | "npm"): Promise<RegistryLookup> {
|
|
107
93
|
if (method === "source") return { asked: false, reason: "source checkout" };
|
|
108
94
|
try {
|
|
109
95
|
const res = await fetch(`https://registry.npmjs.org/@iowarp/clio-coder/${channel}`, {
|
|
@@ -149,16 +135,10 @@ async function runChild(command: string, args: ReadonlyArray<string>, label: str
|
|
|
149
135
|
}
|
|
150
136
|
|
|
151
137
|
async function runNpmInstall(channel: Channel): Promise<void> {
|
|
152
|
-
if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "npm") {
|
|
153
|
-
throw new Error("npm ERR! 404 Not Found (mock failure)");
|
|
154
|
-
}
|
|
155
138
|
await runChild("npm", ["install", "-g", `@iowarp/clio-coder@${channel}`], "npm install");
|
|
156
139
|
}
|
|
157
140
|
|
|
158
141
|
async function runDoctorFixAfterInstall(): Promise<void> {
|
|
159
|
-
if (testSeam("CLIO_CODER_TEST_UPGRADE_FAIL") === "doctor") {
|
|
160
|
-
throw new Error("mock doctor fix failure");
|
|
161
|
-
}
|
|
162
142
|
await runChild("clio-coder", ["doctor", "--fix"], "clio-coder doctor --fix");
|
|
163
143
|
}
|
|
164
144
|
|
|
@@ -168,7 +148,29 @@ async function runPostInstallUpgrade(opts: UpgradeOptions): Promise<void> {
|
|
|
168
148
|
await runChild("clio-coder", args, "clio-coder upgrade --post-install");
|
|
169
149
|
}
|
|
170
150
|
|
|
171
|
-
export
|
|
151
|
+
export interface UpgradeDependencies {
|
|
152
|
+
detectInstallMethod: typeof detectInstallMethod;
|
|
153
|
+
lookUpAvailableVersion: typeof lookUpAvailableVersion;
|
|
154
|
+
runNpmInstall: typeof runNpmInstall;
|
|
155
|
+
runDoctorFixAfterInstall: typeof runDoctorFixAfterInstall;
|
|
156
|
+
runPostInstallUpgrade: typeof runPostInstallUpgrade;
|
|
157
|
+
runPending: typeof runPending;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const DEFAULT_DEPENDENCIES: UpgradeDependencies = {
|
|
161
|
+
detectInstallMethod,
|
|
162
|
+
lookUpAvailableVersion,
|
|
163
|
+
runNpmInstall,
|
|
164
|
+
runDoctorFixAfterInstall,
|
|
165
|
+
runPostInstallUpgrade,
|
|
166
|
+
runPending,
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export async function runUpgradeCommand(
|
|
170
|
+
argv: ReadonlyArray<string>,
|
|
171
|
+
dependencies: Partial<UpgradeDependencies> = {},
|
|
172
|
+
): Promise<number> {
|
|
173
|
+
const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
|
|
172
174
|
let opts: UpgradeOptions;
|
|
173
175
|
try {
|
|
174
176
|
opts = parseUpgradeArgs(argv);
|
|
@@ -186,14 +188,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
186
188
|
|
|
187
189
|
const before = getVersionInfo().clio;
|
|
188
190
|
const stateDir = resolveClioDirs().state;
|
|
189
|
-
const method = detectInstallMethod();
|
|
191
|
+
const method = deps.detectInstallMethod();
|
|
190
192
|
const methodLabel = method === "source" ? "source checkout" : opts.postInstall ? "package install" : "npm global";
|
|
191
193
|
presenter.setMethod(methodLabel);
|
|
192
194
|
|
|
193
|
-
const noNetwork = Boolean(testSeam("CLIO_CODER_TEST_UPGRADE_NO_NETWORK"));
|
|
194
195
|
const lookup: RegistryLookup = opts.postInstall
|
|
195
196
|
? { asked: false, reason: "post-install checks" }
|
|
196
|
-
: await lookUpAvailableVersion(opts.channel, method
|
|
197
|
+
: await deps.lookUpAvailableVersion(opts.channel, method);
|
|
197
198
|
const availableVersion = lookup.asked ? lookup.version : null;
|
|
198
199
|
|
|
199
200
|
presenter.step(`Installation method: ${methodLabel}`);
|
|
@@ -223,8 +224,8 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
223
224
|
// "Already current" is a claim about a version that was compared. A lookup
|
|
224
225
|
// that was made and came back empty has compared nothing, so it does not get
|
|
225
226
|
// to make it: the run falls through and attempts the install, which is what
|
|
226
|
-
// the operator asked for. A lookup that was never owed
|
|
227
|
-
//
|
|
227
|
+
// the operator asked for. A lookup that was never owed for a checkout or
|
|
228
|
+
// post-install checks leaves the recorded state version to decide.
|
|
228
229
|
const versionIsCurrent =
|
|
229
230
|
(lookup.asked ? lookup.version === before : true) && (recorded === null || recorded === before);
|
|
230
231
|
const hasPendingMigrations = pendingMigrationIds.length > 0;
|
|
@@ -260,11 +261,9 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
260
261
|
presenter.note("Running post-install checks with the active clio-coder binary.");
|
|
261
262
|
} else if (method === "source") {
|
|
262
263
|
presenter.note("Source checkout: no npm install to run.");
|
|
263
|
-
} else if (noNetwork) {
|
|
264
|
-
presenter.note("CLIO_CODER_TEST_UPGRADE_NO_NETWORK is set; skipping npm install.");
|
|
265
264
|
} else {
|
|
266
265
|
try {
|
|
267
|
-
await runNpmInstall(opts.channel);
|
|
266
|
+
await deps.runNpmInstall(opts.channel);
|
|
268
267
|
presenter.completedStep(`Installed @iowarp/clio-coder@${opts.channel}`);
|
|
269
268
|
} catch (err) {
|
|
270
269
|
presenter.fail("npm install failed", err instanceof Error ? err.message : String(err));
|
|
@@ -276,7 +275,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
276
275
|
return 1;
|
|
277
276
|
}
|
|
278
277
|
try {
|
|
279
|
-
await runPostInstallUpgrade(opts);
|
|
278
|
+
await deps.runPostInstallUpgrade(opts);
|
|
280
279
|
presenter.done("Done");
|
|
281
280
|
return 0;
|
|
282
281
|
} catch (err) {
|
|
@@ -293,10 +292,7 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
293
292
|
} else {
|
|
294
293
|
let result: Awaited<ReturnType<typeof runPending>>;
|
|
295
294
|
try {
|
|
296
|
-
|
|
297
|
-
throw new Error("mock migration failure in 2026-09-01-settings-v2");
|
|
298
|
-
}
|
|
299
|
-
result = await runPending(stateDir);
|
|
295
|
+
result = await deps.runPending(stateDir);
|
|
300
296
|
} catch (err) {
|
|
301
297
|
presenter.fail("migration failed", err instanceof Error ? err.message : String(err));
|
|
302
298
|
presenter.commandAdvice(
|
|
@@ -312,13 +308,13 @@ export async function runUpgradeCommand(argv: ReadonlyArray<string>): Promise<nu
|
|
|
312
308
|
else for (const id of applied) presenter.completedStep(`Applied migration ${id}`);
|
|
313
309
|
}
|
|
314
310
|
|
|
315
|
-
if (method === "source"
|
|
311
|
+
if (method === "source") {
|
|
316
312
|
const refresh = describeRefresh();
|
|
317
313
|
initializeClioHome();
|
|
318
314
|
presenter.completedStep(`Refreshed ${refresh}`);
|
|
319
315
|
} else {
|
|
320
316
|
try {
|
|
321
|
-
await runDoctorFixAfterInstall();
|
|
317
|
+
await deps.runDoctorFixAfterInstall();
|
|
322
318
|
presenter.completedStep("Checked the install with clio-coder doctor --fix");
|
|
323
319
|
} catch (err) {
|
|
324
320
|
presenter.fail("doctor fix failed", err instanceof Error ? err.message : String(err));
|
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/verifiers.ts
CHANGED
|
@@ -38,7 +38,7 @@ Fields:
|
|
|
38
38
|
--tags <a,b> comma-separated catalog tags
|
|
39
39
|
--kind <kind> command (default), numeric-compare, or perf-budget
|
|
40
40
|
--reference <path> numeric-compare: repository-relative reference JSON of string -> number | number[]
|
|
41
|
-
--tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"
|
|
41
|
+
--tolerance <json> numeric-compare: {"relative"?,"absolute"?,"ulp"?,"combine"?:all|any,"nonFinite"?:fail|match}, at least one numeric bound;
|
|
42
42
|
perf-budget with --baseline: {"relative"} headroom over the baseline
|
|
43
43
|
--budget-ms <number> perf-budget: wall-time bound in milliseconds
|
|
44
44
|
--budget-relative <r> perf-budget with --budget-ms: fractional headroom over the bound
|