@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
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
LibraryResource,
|
|
20
20
|
LibraryResourceKind,
|
|
21
21
|
} from "../../domains/resources/index.js";
|
|
22
|
+
import { sanitizeCallTargetText, sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
|
|
22
23
|
import { clioTheme, GLYPH } from "../theme/index.js";
|
|
23
24
|
import type { ListOverlayItem } from "./list-overlay.js";
|
|
24
25
|
|
|
@@ -113,13 +114,19 @@ export function libraryStatusLine(
|
|
|
113
114
|
const theme = clioTheme();
|
|
114
115
|
const mode = view.mode === "browse" ? "Browse" : "Installed";
|
|
115
116
|
const scope = view.scope === "user" ? "User" : "Project";
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
const unit = view.member ? "member" : view.mode === "browse" ? "package" : "entry";
|
|
118
|
+
const plural = unit === "entry" ? "entries" : `${unit}s`;
|
|
119
|
+
const total = `${counts.rows} ${counts.rows === 1 ? unit : plural}`;
|
|
120
|
+
if (width < 34) return theme.fg("accent", `${mode}·Actions:${scope}`);
|
|
121
|
+
const parts =
|
|
122
|
+
width < 72
|
|
123
|
+
? [theme.fg("accent", width >= 48 ? `${mode} ${total}` : total), theme.fg("dim", `s:${scope}`)]
|
|
124
|
+
: [theme.fg("accent", `${mode} · Actions: ${scope}`), theme.fg("dim", total)];
|
|
125
|
+
if (counts.notices > 0)
|
|
126
|
+
parts.push(theme.fg("warning", `n:${counts.notices} ${counts.notices === 1 ? "notice" : "notices"}`));
|
|
127
|
+
else if (width < 72) parts.push(theme.fg("dim", "n notices"));
|
|
122
128
|
if (counts.truncated) parts.push(theme.fg("warning", "incomplete results"));
|
|
129
|
+
if (view.member && width >= 72) parts.push(theme.fg("dim", `members of ${sanitizeCallTargetText(view.member.ref)}`));
|
|
123
130
|
return parts.join(theme.fg("frame", " │ "));
|
|
124
131
|
}
|
|
125
132
|
|
|
@@ -178,7 +185,7 @@ export function libraryRowActions(subject: LibraryRowSubject, view: LibraryView)
|
|
|
178
185
|
enable: !!here,
|
|
179
186
|
update: !!here,
|
|
180
187
|
use: false,
|
|
181
|
-
open:
|
|
188
|
+
open: subject.record.copies.length > 0,
|
|
182
189
|
reasons,
|
|
183
190
|
};
|
|
184
191
|
}
|
|
@@ -246,7 +253,7 @@ export function libraryRowActions(subject: LibraryRowSubject, view: LibraryView)
|
|
|
246
253
|
enable: !!owner && selected,
|
|
247
254
|
update: !!owner && selected,
|
|
248
255
|
use: usable,
|
|
249
|
-
open:
|
|
256
|
+
open: false,
|
|
250
257
|
reasons,
|
|
251
258
|
};
|
|
252
259
|
}
|
|
@@ -256,7 +263,7 @@ function copyStateWord(copy: LibraryCopy): string {
|
|
|
256
263
|
if (copy.state === "loadable") return theme.fg("success", "loadable");
|
|
257
264
|
if (copy.state === "disabled") return theme.fg("warning", "disabled");
|
|
258
265
|
if (copy.state === "shadowed") return theme.fg("dim", "shadowed");
|
|
259
|
-
return theme.fg("error", copy.state);
|
|
266
|
+
return theme.fg("error", sanitizeCallTargetText(copy.state));
|
|
260
267
|
}
|
|
261
268
|
|
|
262
269
|
function availabilityWord(resource: LibraryResource): string {
|
|
@@ -264,15 +271,33 @@ function availabilityWord(resource: LibraryResource): string {
|
|
|
264
271
|
if (resource.availability === "available") return theme.fg("success", "available");
|
|
265
272
|
if (resource.availability === "untrusted") return theme.fg("warning", "untrusted");
|
|
266
273
|
if (resource.availability === "shadowed") return theme.fg("dim", "shadowed");
|
|
267
|
-
return theme.fg("error", resource.availability);
|
|
274
|
+
return theme.fg("error", sanitizeCallTargetText(resource.availability));
|
|
268
275
|
}
|
|
269
276
|
|
|
270
|
-
|
|
271
|
-
|
|
277
|
+
/** Plain fields are external text; callbacks compose only trusted semantic styling. */
|
|
278
|
+
function metaOf(parts: ReadonlyArray<string | (() => string) | undefined>): string {
|
|
279
|
+
return parts
|
|
280
|
+
.map((part) => (typeof part === "function" ? part() : part === undefined ? "" : sanitizeCallTargetText(part)))
|
|
281
|
+
.filter(Boolean)
|
|
282
|
+
.join(" · ");
|
|
272
283
|
}
|
|
273
284
|
|
|
274
285
|
function packageDetail(record: LibraryPackageRecord, view: LibraryView, actions: LibraryRowActions): string[] {
|
|
275
|
-
const
|
|
286
|
+
const provider = record.kind !== view.category;
|
|
287
|
+
const hints = (record.provides ?? []).filter((hint) => view.category === "plugin" || hint.kind === view.category);
|
|
288
|
+
const lines = [
|
|
289
|
+
`# ${record.name}`,
|
|
290
|
+
`**Kind:** ${record.kind}${provider ? ` provider package for ${view.category} recipes` : " package"}`,
|
|
291
|
+
`**Actions (${view.scope}):** ${libraryActionSummary(actions)}`,
|
|
292
|
+
"b shows loaded recipes in Installed. Tab toggles detail; PgUp/PgDn scroll.",
|
|
293
|
+
...(provider ? ["Catalog hints describe potential recipes, not loaded resources."] : []),
|
|
294
|
+
...(hints.length
|
|
295
|
+
? [
|
|
296
|
+
`**Catalog hints (${view.category === "plugin" ? "all kinds" : view.category}):** ${hints.map((hint) => `${hint.kind}:${hint.name}`).join(", ")}`,
|
|
297
|
+
]
|
|
298
|
+
: []),
|
|
299
|
+
`**Origin:** ${libraryOriginLabel(record.origin)}`,
|
|
300
|
+
];
|
|
276
301
|
const detail = libraryOriginDetail(record.origin);
|
|
277
302
|
if (detail) lines.push(`**Source:** \`${detail}\``);
|
|
278
303
|
lines.push(`**Format:** ${libraryFormatLabel(record.format)}`);
|
|
@@ -285,8 +310,8 @@ function packageDetail(record: LibraryPackageRecord, view: LibraryView, actions:
|
|
|
285
310
|
);
|
|
286
311
|
lines.push(`**Selected scope:** ${view.scope}`);
|
|
287
312
|
if (record.requires?.length) lines.push(`**Requires:** ${record.requires.join(", ")}`);
|
|
288
|
-
if (record.provides?.length)
|
|
289
|
-
lines.push(
|
|
313
|
+
if (view.category !== "plugin" && (record.provides?.length ?? 0) > hints.length)
|
|
314
|
+
lines.push("Other recipe kinds are listed in the Plugins category.");
|
|
290
315
|
if (record.provides === undefined && record.copies.length === 0)
|
|
291
316
|
lines.push("**Contents:** unknown until this package is inspected or installed.");
|
|
292
317
|
for (const reason of actions.reasons) lines.push(`**Note:** ${reason}`);
|
|
@@ -379,9 +404,51 @@ export interface LibraryRowSet {
|
|
|
379
404
|
truncated: boolean;
|
|
380
405
|
}
|
|
381
406
|
|
|
382
|
-
function
|
|
407
|
+
function libraryActionSummary(actions: LibraryRowActions): string {
|
|
408
|
+
return [
|
|
409
|
+
actions.use ? "v use" : undefined,
|
|
410
|
+
actions.open ? "Enter members" : "Enter detail",
|
|
411
|
+
actions.install ? "i review install" : undefined,
|
|
412
|
+
actions.enable ? "e review enable/disable" : undefined,
|
|
413
|
+
actions.update ? "u review update" : undefined,
|
|
414
|
+
actions.remove ? "r review remove" : undefined,
|
|
415
|
+
]
|
|
416
|
+
.filter(Boolean)
|
|
417
|
+
.join(" · ");
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function push(
|
|
421
|
+
set: LibraryRowSet,
|
|
422
|
+
view: LibraryView,
|
|
423
|
+
id: string,
|
|
424
|
+
subject: LibraryRowSubject,
|
|
425
|
+
item: Omit<ListOverlayItem, "id">,
|
|
426
|
+
): void {
|
|
383
427
|
set.subjects.set(id, subject);
|
|
384
|
-
|
|
428
|
+
const detail = item.detail;
|
|
429
|
+
set.items.push({
|
|
430
|
+
id,
|
|
431
|
+
...item,
|
|
432
|
+
label:
|
|
433
|
+
subject.kind === "notice"
|
|
434
|
+
? clioTheme().fg("warning", sanitizeCallTargetText(item.label))
|
|
435
|
+
: sanitizeCallTargetText(item.label),
|
|
436
|
+
...(detail
|
|
437
|
+
? {
|
|
438
|
+
detail: (width: number) => {
|
|
439
|
+
const lines = detail(width).map((line) => sanitizeMultilineDisplayText(line).text);
|
|
440
|
+
if (subject.kind !== "package" && subject.kind !== "notice")
|
|
441
|
+
lines.splice(
|
|
442
|
+
1,
|
|
443
|
+
0,
|
|
444
|
+
`**Actions:** ${libraryActionSummary(libraryRowActions(subject, view))}`,
|
|
445
|
+
"Tab toggles detail. PgUp/PgDn scroll.",
|
|
446
|
+
);
|
|
447
|
+
return lines;
|
|
448
|
+
},
|
|
449
|
+
}
|
|
450
|
+
: {}),
|
|
451
|
+
});
|
|
385
452
|
}
|
|
386
453
|
|
|
387
454
|
/**
|
|
@@ -472,11 +539,11 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
472
539
|
for (const member of options.inspection.resources) {
|
|
473
540
|
const subject: LibraryRowSubject = { kind: "member", owner, member };
|
|
474
541
|
const actions = libraryRowActions(subject, view);
|
|
475
|
-
push(set, `mem:${owner.ref}@${owner.scope}#${member.kind}:${member.name}`, subject, {
|
|
542
|
+
push(set, view, `mem:${owner.ref}@${owner.scope}#${member.kind}:${member.name}`, subject, {
|
|
476
543
|
label: member.name,
|
|
477
544
|
meta: metaOf([
|
|
478
545
|
member.kind,
|
|
479
|
-
member.valid ? theme.fg("success", "valid") : theme.fg("error", "invalid"),
|
|
546
|
+
() => (member.valid ? theme.fg("success", "valid") : theme.fg("error", "invalid")),
|
|
480
547
|
member.componentId ? `component ${member.componentId}` : undefined,
|
|
481
548
|
]),
|
|
482
549
|
group: LIBRARY_GROUP_MEMBERS,
|
|
@@ -488,7 +555,7 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
488
555
|
kind: "notice",
|
|
489
556
|
message: `${item.kind} ${item.id} is declared package metadata, not a recipe. It runs only on an explicit request.`,
|
|
490
557
|
};
|
|
491
|
-
push(set, `note:ancillary:${item.kind}:${item.id}`, subject, {
|
|
558
|
+
push(set, view, `note:ancillary:${item.kind}:${item.id}`, subject, {
|
|
492
559
|
label: `${item.kind}: ${item.id}`,
|
|
493
560
|
meta: theme.fg("dim", "companion file"),
|
|
494
561
|
group: LIBRARY_GROUP_NOTICES,
|
|
@@ -498,7 +565,7 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
498
565
|
}
|
|
499
566
|
for (const diagnostic of options.inspection.diagnostics) {
|
|
500
567
|
const subject: LibraryRowSubject = { kind: "notice", message: diagnostic };
|
|
501
|
-
push(set, `note:member-diag:${set.notices}`, subject, {
|
|
568
|
+
push(set, view, `note:member-diag:${set.notices}`, subject, {
|
|
502
569
|
label: `${theme.fg("warning", GLYPH.warnInline)} ${diagnostic}`,
|
|
503
570
|
meta: theme.fg("dim", "inspection"),
|
|
504
571
|
group: LIBRARY_GROUP_NOTICES,
|
|
@@ -512,15 +579,20 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
512
579
|
const actions = libraryRowActions(subject, view);
|
|
513
580
|
const here = record.copies.find((copy) => copy.scope === view.scope);
|
|
514
581
|
const hints = (record.provides ?? []).filter((hint) => view.category === "plugin" || hint.kind === view.category);
|
|
515
|
-
push(set, `pkg:${record.ref}`, subject, {
|
|
516
|
-
label: record.name,
|
|
582
|
+
push(set, view, `pkg:${record.ref}`, subject, {
|
|
583
|
+
label: record.kind !== view.category ? `${record.name} [${record.kind}]` : record.name,
|
|
517
584
|
meta: metaOf([
|
|
585
|
+
here ? `${here.scope} ${here.state}` : `not installed (${view.scope})`,
|
|
586
|
+
hints.length > 0 ? `${hints.length} ${view.category === "plugin" ? "recipe" : view.category} hints` : undefined,
|
|
518
587
|
libraryOriginLabel(record.origin),
|
|
519
588
|
record.version ? `v${record.version}` : undefined,
|
|
520
|
-
here ? theme.fg("success", `${here.scope} ${here.state}`) : theme.fg("dim", "not in this scope"),
|
|
521
|
-
hints.length > 0 ? `${hints.length} hinted` : undefined,
|
|
522
589
|
]),
|
|
523
|
-
group:
|
|
590
|
+
group:
|
|
591
|
+
record.kind !== view.category
|
|
592
|
+
? "Provider packages"
|
|
593
|
+
: record.copies.length > 0
|
|
594
|
+
? LIBRARY_GROUP_INSTALLED
|
|
595
|
+
: LIBRARY_GROUP_AVAILABLE,
|
|
524
596
|
detail: () => packageDetail(record, view, actions),
|
|
525
597
|
});
|
|
526
598
|
}
|
|
@@ -528,13 +600,13 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
528
600
|
for (const copy of inventory.copies) {
|
|
529
601
|
const subject: LibraryRowSubject = { kind: "copy", copy };
|
|
530
602
|
const actions = libraryRowActions(subject, view);
|
|
531
|
-
push(set, `copy:${copy.ref}@${copy.scope}`, subject, {
|
|
603
|
+
push(set, view, `copy:${copy.ref}@${copy.scope}`, subject, {
|
|
532
604
|
label: copy.name,
|
|
533
605
|
meta: metaOf([
|
|
534
|
-
libraryOriginLabel(copy.origin),
|
|
535
606
|
copy.scope,
|
|
536
|
-
copyStateWord(copy),
|
|
537
|
-
copy.
|
|
607
|
+
() => copyStateWord(copy),
|
|
608
|
+
libraryOriginLabel(copy.origin),
|
|
609
|
+
copy.trust === "foreign" ? () => theme.fg("warning", "foreign") : undefined,
|
|
538
610
|
]),
|
|
539
611
|
group: LIBRARY_GROUP_INSTALLED,
|
|
540
612
|
detail: () => copyDetail(copy, view, actions),
|
|
@@ -543,12 +615,12 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
543
615
|
for (const resource of inventory.resources) {
|
|
544
616
|
const subject: LibraryRowSubject = { kind: "recipe", resource };
|
|
545
617
|
const actions = libraryRowActions(subject, view);
|
|
546
|
-
push(set, `res:${resource.key}`, subject, {
|
|
618
|
+
push(set, view, `res:${resource.key}`, subject, {
|
|
547
619
|
label: resource.name,
|
|
548
620
|
meta: metaOf([
|
|
549
|
-
|
|
621
|
+
() => availabilityWord(resource),
|
|
550
622
|
resource.owner ? resource.owner.ref : resource.source.class,
|
|
551
|
-
|
|
623
|
+
libraryOriginLabel(resource.origin),
|
|
552
624
|
]),
|
|
553
625
|
group: resource.owner ? LIBRARY_GROUP_INSTALLED : LIBRARY_GROUP_UNMANAGED,
|
|
554
626
|
detail: () => resourceDetail(resource, actions),
|
|
@@ -562,11 +634,18 @@ export function buildLibraryRows(options: LibraryRowOptions): LibraryRowSet {
|
|
|
562
634
|
(entry): entry is string => entry !== undefined,
|
|
563
635
|
)) {
|
|
564
636
|
const subject: LibraryRowSubject = { kind: "notice", message };
|
|
565
|
-
push(set, `note:${set.notices}`, subject, {
|
|
637
|
+
push(set, view, `note:${set.notices}`, subject, {
|
|
566
638
|
label: `${theme.fg("warning", GLYPH.warnInline)} ${message}`,
|
|
567
639
|
meta: theme.fg("dim", "library"),
|
|
568
640
|
group: LIBRARY_GROUP_NOTICES,
|
|
569
|
-
detail: () => [
|
|
641
|
+
detail: () => [
|
|
642
|
+
"# Library notice",
|
|
643
|
+
"",
|
|
644
|
+
"Discovery notices cover all categories.",
|
|
645
|
+
"From browse focus, n returns to resources. Esc clears a filter or leaves search focus before returning to the parent browser.",
|
|
646
|
+
"",
|
|
647
|
+
message,
|
|
648
|
+
],
|
|
570
649
|
});
|
|
571
650
|
set.notices += 1;
|
|
572
651
|
}
|
|
@@ -48,10 +48,10 @@ export const LIBRARY_TITLE = "Library";
|
|
|
48
48
|
|
|
49
49
|
/** @internal exported for contract tests */
|
|
50
50
|
export const LIBRARY_EMPTY_BROWSE =
|
|
51
|
-
"No packages of this kind in the index. Register one with clio-coder library register <path>, or press o to import from another local agent.";
|
|
51
|
+
"No packages of this kind in the index. Browse counts packages, not runnable recipes. Press b for loaded recipes in Installed. Register one with clio-coder library register <path>, or press o to import from another local agent.";
|
|
52
52
|
/** @internal exported for contract tests */
|
|
53
53
|
export const LIBRARY_EMPTY_INSTALLED =
|
|
54
|
-
"
|
|
54
|
+
"No entries of this kind are listed by the Library inventory. Action scope selects a package destination, not which recipes can run. Press b for installable packages.";
|
|
55
55
|
|
|
56
56
|
export interface LibraryOverlayDeps {
|
|
57
57
|
/** The package lifecycle. Plans are reviewed before anything is written. */
|
|
@@ -204,13 +204,17 @@ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayH
|
|
|
204
204
|
...(failure ? { failure } : {}),
|
|
205
205
|
});
|
|
206
206
|
if (category === view.category) rowSet = set;
|
|
207
|
-
return set.items;
|
|
207
|
+
return set.items.filter((item) => set.subjects.get(item.id)?.kind !== "notice");
|
|
208
208
|
};
|
|
209
209
|
|
|
210
210
|
const tabs: ListOverlayTab[] = LIBRARY_TABS.map((tab) => ({
|
|
211
211
|
id: tab.id,
|
|
212
212
|
label: tab.label,
|
|
213
213
|
items: () => rowsFor(tab.id),
|
|
214
|
+
countLabel: (count) => {
|
|
215
|
+
const unit = view.member && tab.id === view.category ? "member" : view.mode === "browse" ? "package" : "entry";
|
|
216
|
+
return `${count} ${count === 1 ? unit : unit === "entry" ? "entries" : `${unit}s`}`;
|
|
217
|
+
},
|
|
214
218
|
}));
|
|
215
219
|
|
|
216
220
|
// eslint-disable-next-line prefer-const -- the action closures need the handle they are opened from.
|
|
@@ -429,8 +433,45 @@ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayH
|
|
|
429
433
|
handle.refreshTabs();
|
|
430
434
|
};
|
|
431
435
|
|
|
436
|
+
/** A child keeps the resource browser's cursor, search draft and focus intact. */
|
|
437
|
+
const openNotices = (): void => {
|
|
438
|
+
if (busy) return;
|
|
439
|
+
busy = true;
|
|
440
|
+
const items = rowSet.items.filter((item) => rowSet.subjects.get(item.id)?.kind === "notice");
|
|
441
|
+
const close = (): void => {
|
|
442
|
+
child = null;
|
|
443
|
+
busy = false;
|
|
444
|
+
notices.hide();
|
|
445
|
+
if (closed) return;
|
|
446
|
+
handle.setHidden(false);
|
|
447
|
+
handle.focus();
|
|
448
|
+
};
|
|
449
|
+
handle.setHidden(true);
|
|
450
|
+
const notices = (deps.openList ?? openListOverlay)(tui, {
|
|
451
|
+
markerId: "library",
|
|
452
|
+
title: "Library notices",
|
|
453
|
+
items,
|
|
454
|
+
filterable: true,
|
|
455
|
+
explicitSearch: true,
|
|
456
|
+
fullScreen: true,
|
|
457
|
+
layout: "split",
|
|
458
|
+
status: () => `${items.length} ${items.length === 1 ? "notice" : "notices"} · browse focus: n back`,
|
|
459
|
+
emptyMessage:
|
|
460
|
+
"No notices in this view. From browse focus, n returns to resources. Esc clears a filter or leaves search focus before returning to the parent browser.",
|
|
461
|
+
globalHints: [{ key: "n", verb: "resources", critical: true }],
|
|
462
|
+
globalActions: { n: close },
|
|
463
|
+
onClose: close,
|
|
464
|
+
});
|
|
465
|
+
child = { hide: () => notices.hide(), release: () => {} };
|
|
466
|
+
notices.toggleDetail();
|
|
467
|
+
};
|
|
468
|
+
|
|
432
469
|
const status = (width: number): string =>
|
|
433
|
-
libraryStatusLine(
|
|
470
|
+
libraryStatusLine(
|
|
471
|
+
view,
|
|
472
|
+
{ rows: rowSet.items.length - rowSet.notices, notices: rowSet.notices, truncated: rowSet.truncated },
|
|
473
|
+
width,
|
|
474
|
+
);
|
|
434
475
|
|
|
435
476
|
/**
|
|
436
477
|
* The keys the selected row actually offers.
|
|
@@ -447,7 +488,7 @@ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayH
|
|
|
447
488
|
const actions = libraryRowActions(subject, view);
|
|
448
489
|
const entries: Array<{ key: string; verb: string }> = [];
|
|
449
490
|
if (actions.use) entries.push({ key: "v", verb: "use" });
|
|
450
|
-
|
|
491
|
+
entries.push({ key: "Enter", verb: actions.open ? "members" : "detail" });
|
|
451
492
|
if (actions.install) entries.push({ key: "i", verb: "install" });
|
|
452
493
|
if (actions.enable)
|
|
453
494
|
entries.push({
|
|
@@ -497,10 +538,12 @@ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayH
|
|
|
497
538
|
globalHints: [
|
|
498
539
|
{ key: "b", verb: "browse/installed", short: "view", critical: true },
|
|
499
540
|
{ key: "s", verb: "user/project", short: "scope", critical: true },
|
|
541
|
+
{ key: "n", verb: "notices", critical: true },
|
|
500
542
|
{ key: "o", verb: "import" },
|
|
501
543
|
{ key: "R", verb: "refresh" },
|
|
502
544
|
],
|
|
503
545
|
globalActions: {
|
|
546
|
+
n: openNotices,
|
|
504
547
|
b: () => {
|
|
505
548
|
view.mode = view.mode === "browse" ? "installed" : "browse";
|
|
506
549
|
view.member = undefined;
|
|
@@ -547,6 +590,10 @@ export function openLibraryOverlay(tui: TUI, deps: LibraryOverlayDeps): OverlayH
|
|
|
547
590
|
onClose: deps.onClose,
|
|
548
591
|
});
|
|
549
592
|
|
|
593
|
+
// The narrow layout opens with the selected inspector visible. Tab retains
|
|
594
|
+
// its existing toggle; wide layouts already draw detail beside the list.
|
|
595
|
+
handle.toggleDetail();
|
|
596
|
+
|
|
550
597
|
/**
|
|
551
598
|
* What `/library <verb> <ref>` asked for, run after the caller has this
|
|
552
599
|
* handle.
|
|
@@ -45,6 +45,8 @@ export interface ListOverlayTab {
|
|
|
45
45
|
id: string;
|
|
46
46
|
label: string;
|
|
47
47
|
items: () => ReadonlyArray<ListOverlayItem>;
|
|
48
|
+
/** Optional footer count wording; defaults to the count followed by the tab label. */
|
|
49
|
+
countLabel?: (count: number) => string;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
export interface ListOverlayOptions {
|
|
@@ -381,7 +383,8 @@ export class ListOverlayView implements Component {
|
|
|
381
383
|
const tab = this.activeTab();
|
|
382
384
|
if (tab === undefined) return null;
|
|
383
385
|
const count = this.tabCounts.get(tab.id) ?? this.items.length;
|
|
384
|
-
|
|
386
|
+
const countLabel = tab.countLabel?.(count) ?? `${count} ${tab.label.toLowerCase()}`;
|
|
387
|
+
return { key: "←→", verb: `tab · ${countLabel}`, short: "tab", critical: true };
|
|
385
388
|
}
|
|
386
389
|
|
|
387
390
|
getHint(): string {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
+
import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
|
|
2
3
|
import type { SessionContract, SessionMeta } from "../../domains/session/contract.js";
|
|
3
4
|
import {
|
|
4
5
|
getKeybindings,
|
|
@@ -22,15 +23,12 @@ export const SESSION_ESCAPE_GRACE_MS = 75;
|
|
|
22
23
|
const ESC = String.fromCharCode(27);
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* (status glyph, time, count, target) as the primary column and the
|
|
28
|
-
* conversation preview as the description, so users scan the right column
|
|
29
|
-
* for the topic they remember.
|
|
26
|
+
* Identity owns the primary column. SelectList drops the secondary metadata
|
|
27
|
+
* when space is tight, so the task remains recognizable at narrow widths.
|
|
30
28
|
*/
|
|
31
29
|
const SESSION_LAYOUT: SelectListLayoutOptions = {
|
|
32
|
-
minPrimaryColumnWidth:
|
|
33
|
-
maxPrimaryColumnWidth:
|
|
30
|
+
minPrimaryColumnWidth: 32,
|
|
31
|
+
maxPrimaryColumnWidth: 52,
|
|
34
32
|
};
|
|
35
33
|
|
|
36
34
|
/**
|
|
@@ -44,20 +42,21 @@ export function formatRelativeTime(iso: string | null | undefined, now: number =
|
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
function shortTarget(meta: SessionMeta): string {
|
|
47
|
-
const target = meta.target
|
|
48
|
-
const model = meta.model
|
|
45
|
+
const target = sanitizeCallTargetText(meta.target ?? "");
|
|
46
|
+
const model = sanitizeCallTargetText(meta.model ?? "");
|
|
49
47
|
if (!target && !model) return "no target";
|
|
50
48
|
if (target && model) return `${target}/${model}`;
|
|
51
|
-
return target
|
|
49
|
+
return target || model || "no target";
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
function previewLine(meta: SessionMeta): string {
|
|
55
|
-
const explicit = meta.firstMessagePreview
|
|
53
|
+
const explicit = sanitizeCallTargetText(meta.firstMessagePreview ?? "");
|
|
56
54
|
if (explicit) return explicit;
|
|
57
|
-
const name = meta.name
|
|
55
|
+
const name = sanitizeCallTargetText(meta.name ?? "");
|
|
58
56
|
if (name) return `(${name})`;
|
|
59
|
-
const cwdLeaf = meta.cwd ? basename(meta.cwd) : "";
|
|
60
|
-
|
|
57
|
+
const cwdLeaf = sanitizeCallTargetText(meta.cwd ? basename(meta.cwd) : "");
|
|
58
|
+
const id = sanitizeCallTargetText(meta.id) || "Unnamed session";
|
|
59
|
+
return `${id} · ${cwdLeaf || "no preview"}`;
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
function metaStrip(meta: SessionMeta, now: number): string {
|
|
@@ -70,17 +69,17 @@ function metaStrip(meta: SessionMeta, now: number): string {
|
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* and the first user-message preview in the description column.
|
|
72
|
+
* The first message or fallback identity stays visible as metadata yields.
|
|
73
|
+
* Keep the canonical ID as the selection value, independent of display text.
|
|
76
74
|
*/
|
|
77
75
|
function buildSessionItems(sessions: ReadonlyArray<SessionMeta>, now: number = Date.now()): SelectItem[] {
|
|
78
76
|
return sessions.map((meta) => {
|
|
79
|
-
const labels = meta.labels
|
|
77
|
+
const labels = meta.labels?.map(sanitizeCallTargetText).filter(Boolean).join(", ");
|
|
78
|
+
const details = [metaStrip(meta, now), labels ? `labels: ${labels}` : ""].filter(Boolean);
|
|
80
79
|
return {
|
|
81
80
|
value: meta.id,
|
|
82
|
-
label:
|
|
83
|
-
description:
|
|
81
|
+
label: previewLine(meta),
|
|
82
|
+
description: details.join(" · "),
|
|
84
83
|
};
|
|
85
84
|
});
|
|
86
85
|
}
|
|
@@ -128,6 +127,7 @@ function createSessionOverlayBox(
|
|
|
128
127
|
const allSessions = [...sessions];
|
|
129
128
|
let filtered = [...sessions];
|
|
130
129
|
let lastQuery = "";
|
|
130
|
+
let selectedSessionId: string | undefined;
|
|
131
131
|
let list = buildList(filtered);
|
|
132
132
|
let pendingEscape = "";
|
|
133
133
|
let pendingEscapeTimer: ReturnType<typeof setTimeout> | null = null;
|
|
@@ -173,15 +173,20 @@ function createSessionOverlayBox(
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
function applyFilter(): void {
|
|
176
|
+
// Keep identity through reordering and an empty-result query/undo.
|
|
177
|
+
selectedSessionId = list.getSelectedItem()?.value ?? selectedSessionId;
|
|
176
178
|
filtered = filterSessions(allSessions, lastQuery);
|
|
177
179
|
list = buildList(filtered);
|
|
180
|
+
const selectedIndex = filtered.findIndex((session) => session.id === selectedSessionId);
|
|
181
|
+
if (selectedIndex >= 0) list.setSelectedIndex(selectedIndex);
|
|
182
|
+
selectedSessionId = list.getSelectedItem()?.value ?? selectedSessionId;
|
|
178
183
|
rebuildChildren();
|
|
179
184
|
}
|
|
180
185
|
|
|
181
186
|
function commitSelection(): void {
|
|
182
|
-
const
|
|
183
|
-
if (!
|
|
184
|
-
onSelect(
|
|
187
|
+
const selected = list.getSelectedItem();
|
|
188
|
+
if (!selected) return;
|
|
189
|
+
onSelect(selected.value);
|
|
185
190
|
closeOverlay();
|
|
186
191
|
}
|
|
187
192
|
|
|
@@ -230,6 +230,7 @@ export const SETTINGS_LABELS_BY_ID = {
|
|
|
230
230
|
"retry.baseDelayMs": "Base delay (ms)",
|
|
231
231
|
"retry.maxDelayMs": "Max delay (ms)",
|
|
232
232
|
"retry.streamStallMs": "Stream stall timeout (ms)",
|
|
233
|
+
"retry.firstTokenStallMs": "First token timeout (ms)",
|
|
233
234
|
"terminal.showTerminalProgress": "Terminal progress badges",
|
|
234
235
|
"terminal.outputVerbosity": "Output style",
|
|
235
236
|
"terminal.tuiMode": "TUI mode",
|
|
@@ -347,7 +348,14 @@ export const SETTINGS_SECTION_ROWS = {
|
|
|
347
348
|
"context.workingSet.protectLastTurns",
|
|
348
349
|
"context.workingSet.minEvictableTokens",
|
|
349
350
|
],
|
|
350
|
-
retry: [
|
|
351
|
+
retry: [
|
|
352
|
+
"retry.enabled",
|
|
353
|
+
"retry.maxRetries",
|
|
354
|
+
"retry.baseDelayMs",
|
|
355
|
+
"retry.maxDelayMs",
|
|
356
|
+
"retry.streamStallMs",
|
|
357
|
+
"retry.firstTokenStallMs",
|
|
358
|
+
],
|
|
351
359
|
terminal: [
|
|
352
360
|
"terminal.showTerminalProgress",
|
|
353
361
|
"terminal.outputVerbosity",
|
|
@@ -450,6 +458,7 @@ const SETTINGS_DESCRIPTIONS_BY_ID = {
|
|
|
450
458
|
"retry.baseDelayMs": "Initial retry delay in milliseconds.",
|
|
451
459
|
"retry.maxDelayMs": "Maximum retry delay in milliseconds.",
|
|
452
460
|
"retry.streamStallMs": "Silence on an in-flight stream past this long is treated as a wedged backend.",
|
|
461
|
+
"retry.firstTokenStallMs": "Silence allowed before a call's first token, for backends that load the model on demand.",
|
|
453
462
|
"terminal.showTerminalProgress": "Emit OSC 9;4 progress badges during agent turns.",
|
|
454
463
|
"terminal.outputVerbosity": "How much reasoning, tool input, and live tool output appears in the transcript.",
|
|
455
464
|
"terminal.tuiMode": "Use regular terminal scrollback or a fullscreen transcript with a sticky composer and footer.",
|
|
@@ -508,6 +517,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
|
|
|
508
517
|
"Covers the wiki documenter and the bootstrap scout. Continuous output satisfies the heartbeat watchdog and a run mid-generation spends no tool calls, so this is the only guard that ends a degenerate generator. Healthy runs finish in minutes. Whole milliseconds of at least 1 · default: 900000 (15 minutes).",
|
|
509
518
|
"retry.streamStallMs":
|
|
510
519
|
"Measured from the last token received, not from the request, so a slow-but-alive stream is never aborted. The retry then follows the same enabled/maxRetries/delay settings above. Whole milliseconds · default: 180000 (three minutes).",
|
|
520
|
+
"retry.firstTokenStallMs":
|
|
521
|
+
"Measured from the request until the first token. A local server that slept reloads the model and prefills cold first, so this window is longer than the stream stall timeout; the larger of the two applies. 0 never aborts a call that has not started streaming. Whole milliseconds · default: 600000 (ten minutes).",
|
|
511
522
|
"library.catalog":
|
|
512
523
|
"Absolute path, or blank for the catalog in your config directory. The catalog is the index `clio-coder library` reads; installed resources land in the usual skill and resource roots either way. Default: blank.",
|
|
513
524
|
"library.remote":
|
|
@@ -1925,6 +1936,9 @@ function buildSettingItems(settings: Readonly<ClioSettings>, options?: BuildSett
|
|
|
1925
1936
|
settingItem("retry.streamStallMs", String(retry.streamStallMs), {
|
|
1926
1937
|
values: ["60000", "120000", "180000", "300000", "600000"],
|
|
1927
1938
|
}),
|
|
1939
|
+
settingItem("retry.firstTokenStallMs", String(retry.firstTokenStallMs), {
|
|
1940
|
+
values: ["180000", "300000", "600000", "900000", "1800000"],
|
|
1941
|
+
}),
|
|
1928
1942
|
settingItem("terminal.showTerminalProgress", String(terminal.terminalProgress), {
|
|
1929
1943
|
values: ["false", "true"],
|
|
1930
1944
|
}),
|
|
@@ -2752,6 +2766,11 @@ function applySettingChange(settings: ClioSettings, id: string, value: string):
|
|
|
2752
2766
|
settings.chat.retry.streamStallMs = next;
|
|
2753
2767
|
});
|
|
2754
2768
|
return;
|
|
2769
|
+
case "retry.firstTokenStallMs":
|
|
2770
|
+
applyNonNegativeInteger(value, (next) => {
|
|
2771
|
+
settings.chat.retry.firstTokenStallMs = next;
|
|
2772
|
+
});
|
|
2773
|
+
return;
|
|
2755
2774
|
case "library.catalog":
|
|
2756
2775
|
case "library.remote": {
|
|
2757
2776
|
const key = id.slice("library.".length) as "catalog" | "remote";
|