@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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iowarp/clio-coder",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.9",
|
|
4
4
|
"description": "The terminal coding agent for people who maintain the code that science runs on, with user-chosen models and inspectable evidence.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -57,7 +57,6 @@
|
|
|
57
57
|
".claude-plugin/marketplace.json",
|
|
58
58
|
"evals/**",
|
|
59
59
|
"docs/**/*.md",
|
|
60
|
-
"!docs/html/**",
|
|
61
60
|
"README.md",
|
|
62
61
|
"CHANGELOG.md",
|
|
63
62
|
"CONTRIBUTING.md",
|
|
@@ -72,8 +71,8 @@
|
|
|
72
71
|
"access": "public"
|
|
73
72
|
},
|
|
74
73
|
"scripts": {
|
|
75
|
-
"build": "
|
|
76
|
-
"dev": "
|
|
74
|
+
"build": "node --import tsx scripts/build.ts && node --import tsx scripts/build-codewiki-asset.ts",
|
|
75
|
+
"dev": "node --import tsx scripts/build.ts --watch",
|
|
77
76
|
"clean": "rm -rf dist",
|
|
78
77
|
"typecheck": "tsc -p tsconfig.tests.json",
|
|
79
78
|
"format": "biome format --write .",
|
|
@@ -82,18 +81,21 @@
|
|
|
82
81
|
"pi:surface-snapshot": "node --import tsx scripts/pi-surface-diff.ts --write",
|
|
83
82
|
"test:file": "node --import tsx --import ./tests/harness/tmp-root.ts --test",
|
|
84
83
|
"pretest": "test -f dist/cli/index.js || pnpm run build",
|
|
85
|
-
"test": "node --import tsx --import ./tests/harness/tmp-root.ts --test tests/contracts/*.test.ts tests/smoke
|
|
86
|
-
"test:
|
|
87
|
-
"
|
|
88
|
-
"ci": "
|
|
89
|
-
"ci:release": "pnpm run ci && node scripts/check-release.mjs",
|
|
84
|
+
"test": "node --import tsx --import ./tests/harness/tmp-root.ts --test --test-concurrency=2 tests/contracts/*.test.ts tests/smoke/acp-boundary.test.ts tests/smoke/real-binary-boot.test.ts tests/smoke/process-lifecycle.test.ts",
|
|
85
|
+
"test:web": "pnpm --filter @iowarp/clio-coder-web test",
|
|
86
|
+
"ci": "pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run test && pnpm run test:web",
|
|
87
|
+
"ci:release": "node scripts/release-candidate.mjs qualify",
|
|
90
88
|
"install:local": "bash scripts/install-local.sh",
|
|
91
89
|
"smoke:real-home": "bash scripts/smoke-real-home.sh",
|
|
92
|
-
"prepublishOnly": "
|
|
90
|
+
"prepublishOnly": "node scripts/release-candidate.mjs preflight",
|
|
93
91
|
"skills:pin": "node --import tsx scripts/pin-skills.ts",
|
|
94
92
|
"skills:check": "node --import tsx scripts/pin-skills.ts --check",
|
|
95
93
|
"library:pin": "node --import tsx scripts/pin-library.ts",
|
|
96
|
-
"library:check": "node --import tsx scripts/pin-library.ts --check"
|
|
94
|
+
"library:check": "node --import tsx scripts/pin-library.ts --check",
|
|
95
|
+
"test:full": "node --import tsx --import ./tests/harness/tmp-root.ts --test tests/contracts/*.test.ts tests/extended/*.test.ts tests/smoke/*.test.ts tests/extended-smoke/*.test.ts",
|
|
96
|
+
"test:package": "node --import tsx --import ./tests/harness/tmp-root.ts --test --test-concurrency=2 tests/smoke/installed-package.test.ts tests/smoke/native-call-timing.test.ts",
|
|
97
|
+
"release:preflight": "node scripts/release-candidate.mjs preflight",
|
|
98
|
+
"test:web:full": "pnpm --filter @iowarp/clio-coder-web test:full"
|
|
97
99
|
},
|
|
98
100
|
"optionalDependencies": {
|
|
99
101
|
"@anthropic-ai/claude-agent-sdk": "0.3.186"
|
package/src/cli/argv.ts
CHANGED
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import chalk from "chalk";
|
|
11
|
+
import type { AutonomyLevel } from "../domains/safety/autonomy.js";
|
|
12
|
+
|
|
13
|
+
// A type-only import keeps this module out of the domain graph; `satisfies`
|
|
14
|
+
// fails the build if the levels ever drift from the safety domain's list.
|
|
15
|
+
const AUTONOMY_LEVELS = [
|
|
16
|
+
"read-only",
|
|
17
|
+
"suggest",
|
|
18
|
+
"auto-edit",
|
|
19
|
+
"full-auto",
|
|
20
|
+
] as const satisfies ReadonlyArray<AutonomyLevel>;
|
|
11
21
|
|
|
12
22
|
export function printError(message: string, detail?: string): void {
|
|
13
23
|
const head = chalk.red("error:");
|
|
@@ -75,6 +85,8 @@ export interface GlobalCliFlags {
|
|
|
75
85
|
* both beat the `panes.enabled` setting; absent means the setting decides.
|
|
76
86
|
*/
|
|
77
87
|
panes?: "with" | "without";
|
|
88
|
+
/** `--autonomy <level>` before any subcommand: one interactive session at that level. */
|
|
89
|
+
autonomy?: AutonomyLevel;
|
|
78
90
|
rest: string[];
|
|
79
91
|
error?: string;
|
|
80
92
|
}
|
|
@@ -136,6 +148,7 @@ export function extractGlobalFlags(
|
|
|
136
148
|
let noContextFiles = false;
|
|
137
149
|
let noSkills = false;
|
|
138
150
|
let panes: "with" | "without" | undefined;
|
|
151
|
+
let autonomy: AutonomyLevel | undefined;
|
|
139
152
|
const skillPaths: string[] = [];
|
|
140
153
|
for (let i = 0; i < argv.length; i++) {
|
|
141
154
|
const arg = argv[i];
|
|
@@ -174,6 +187,23 @@ export function extractGlobalFlags(
|
|
|
174
187
|
panes = arg === "--with-panes" ? "with" : "without";
|
|
175
188
|
continue;
|
|
176
189
|
}
|
|
190
|
+
if (arg === "--autonomy") {
|
|
191
|
+
const value = argv[i + 1];
|
|
192
|
+
if (value === undefined || !AUTONOMY_LEVELS.includes(value as AutonomyLevel)) {
|
|
193
|
+
return {
|
|
194
|
+
noContextFiles,
|
|
195
|
+
noSkills,
|
|
196
|
+
skillPaths,
|
|
197
|
+
rest,
|
|
198
|
+
error: `--autonomy must be one of: ${AUTONOMY_LEVELS.join("|")}`,
|
|
199
|
+
...(apiKey === undefined ? {} : { apiKey }),
|
|
200
|
+
...(panes === undefined ? {} : { panes }),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
autonomy = value as AutonomyLevel;
|
|
204
|
+
i += 1;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
177
207
|
if (arg === "--api-key" || arg === "--skill") {
|
|
178
208
|
const value = argv[i + 1];
|
|
179
209
|
if (value === undefined || value.startsWith("-") || isSubcommand(value)) {
|
|
@@ -209,5 +239,6 @@ export function extractGlobalFlags(
|
|
|
209
239
|
rest,
|
|
210
240
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
211
241
|
...(panes === undefined ? {} : { panes }),
|
|
242
|
+
...(autonomy === undefined ? {} : { autonomy }),
|
|
212
243
|
};
|
|
213
244
|
}
|
package/src/cli/clio.ts
CHANGED
|
@@ -13,7 +13,22 @@ function terminalLeaseEligible(
|
|
|
13
13
|
return !options.headless && !options.acp && env.CLIO_CODER_INTERACTIVE === "1";
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export
|
|
16
|
+
export interface ClioCommandDependencies {
|
|
17
|
+
bootOrchestrator: typeof import("../entry/orchestrator.js").bootOrchestrator;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const DEFAULT_DEPENDENCIES: ClioCommandDependencies = {
|
|
21
|
+
bootOrchestrator: async (options) => {
|
|
22
|
+
const { bootOrchestrator } = await import("../entry/orchestrator.js");
|
|
23
|
+
return bootOrchestrator(options);
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export async function runClioCommand(
|
|
28
|
+
options: BootOptions = {},
|
|
29
|
+
dependencies: Partial<ClioCommandDependencies> = {},
|
|
30
|
+
): Promise<number> {
|
|
31
|
+
const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
|
|
17
32
|
// Bare `clio` (no subcommand) boots interactive mode implicitly, but only
|
|
18
33
|
// when stdin is a real TTY. Piped or /dev/null stdin (used by verify.ts,
|
|
19
34
|
// CI runners, and non-interactive scripts) should fall through to the
|
|
@@ -69,18 +84,7 @@ export async function runClioCommand(options: BootOptions = {}): Promise<number>
|
|
|
69
84
|
}
|
|
70
85
|
}
|
|
71
86
|
}
|
|
72
|
-
|
|
73
|
-
// NODE_ENV=test and bounded even under a malformed value.
|
|
74
|
-
if (terminalLease && process.env.NODE_ENV === "test") {
|
|
75
|
-
const requestedDelay = Number.parseInt(process.env.CLIO_CODER_TEST_STAGE1_DELAY_MS ?? "0", 10);
|
|
76
|
-
const delayMs = Number.isFinite(requestedDelay) ? Math.max(0, Math.min(5_000, requestedDelay)) : 0;
|
|
77
|
-
if (delayMs > 0) await new Promise<void>((resolve) => setTimeout(resolve, delayMs));
|
|
78
|
-
if (process.env.CLIO_CODER_TEST_STAGE1_FAIL === "1") {
|
|
79
|
-
throw new Error("injected Stage 1 hydration failure");
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const { bootOrchestrator } = await import("../entry/orchestrator.js");
|
|
83
|
-
const result = await bootOrchestrator({
|
|
87
|
+
const result = await deps.bootOrchestrator({
|
|
84
88
|
...options,
|
|
85
89
|
...(startupSettings ? { startupSettings } : {}),
|
|
86
90
|
...(terminalLease ? { terminalLease } : {}),
|
package/src/cli/config.ts
CHANGED
|
@@ -24,6 +24,10 @@ function renderText(cwd: string): string {
|
|
|
24
24
|
|
|
25
25
|
out.push("Settings (only keys a layer set; everything else is built-in):");
|
|
26
26
|
if (graph.settings.length === 0) out.push(" (none; all built-in defaults)");
|
|
27
|
+
// An ignored layer explains a value better than the value does. Left to the
|
|
28
|
+
// trailing Issues block, an untrusted project file read as a setting that
|
|
29
|
+
// silently failed to apply.
|
|
30
|
+
for (const issue of graph.issues) if (issue.startsWith("settings ")) out.push(` ! ${issue}`);
|
|
27
31
|
for (const entry of graph.settings) {
|
|
28
32
|
out.push(` ${entry.key} = ${JSON.stringify(entry.value)} [${entry.source}]`);
|
|
29
33
|
}
|
package/src/cli/docs.ts
CHANGED
|
@@ -1,354 +1,91 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http";
|
|
4
|
-
import type { AddressInfo } from "node:net";
|
|
5
|
-
import { relative, resolve } from "node:path";
|
|
6
|
-
import chalk from "chalk";
|
|
1
|
+
import { readdirSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
7
3
|
import { resolvePackageRoot } from "../core/package-root.js";
|
|
8
|
-
import { printError
|
|
9
|
-
|
|
10
|
-
// Human-facing viewer over the source-checkout HTML blueprints. It binds an ephemeral
|
|
11
|
-
// static file server to 127.0.0.1 only, serves docs/html/index.html as the
|
|
12
|
-
// menu plus the blueprint pages, prints the URL, and runs until SIGINT. It
|
|
13
|
-
// uses only Node's built-in http and fs: zero new dependencies, no daemon, no
|
|
14
|
-
// persisted state, no telemetry, and no external network. The static-path
|
|
15
|
-
// resolution and the menu synthesis are pure functions so they unit-test
|
|
16
|
-
// without binding a port.
|
|
17
|
-
|
|
18
|
-
const HOST = "127.0.0.1";
|
|
4
|
+
import { printError } from "./argv.js";
|
|
5
|
+
import { runWebCommand } from "./web.js";
|
|
19
6
|
|
|
20
7
|
const HELP = `clio-coder docs [topic] [--no-open]
|
|
21
8
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
ships the categorized Markdown reference tree under docs/ and excludes HTML.
|
|
25
|
-
The server binds an ephemeral port on
|
|
26
|
-
127.0.0.1, keeps no state, runs no daemon, and reaches no external network.
|
|
27
|
-
Press Ctrl+C to stop it.
|
|
9
|
+
Open the documentation in the Clio Coder web app. Pages, navigation and outlines
|
|
10
|
+
are rendered from the same Markdown reference shipped with Clio.
|
|
28
11
|
|
|
29
12
|
Arguments:
|
|
30
|
-
[topic]
|
|
31
|
-
|
|
13
|
+
[topic] a topic such as safety, configuration, or fleet_dispatch, or a
|
|
14
|
+
document path such as architecture/safety-model.md.
|
|
15
|
+
Omit to open the documentation map.
|
|
32
16
|
|
|
33
17
|
Flags:
|
|
34
|
-
--no-open
|
|
18
|
+
--no-open print the private launch link without opening a browser.
|
|
35
19
|
--help, -h this message.
|
|
36
|
-
`;
|
|
37
|
-
|
|
38
|
-
const CONTENT_TYPES: Readonly<Record<string, string>> = {
|
|
39
|
-
".html": "text/html; charset=utf-8",
|
|
40
|
-
".htm": "text/html; charset=utf-8",
|
|
41
|
-
".css": "text/css; charset=utf-8",
|
|
42
|
-
".js": "text/javascript; charset=utf-8",
|
|
43
|
-
".mjs": "text/javascript; charset=utf-8",
|
|
44
|
-
".json": "application/json; charset=utf-8",
|
|
45
|
-
".svg": "image/svg+xml",
|
|
46
|
-
".png": "image/png",
|
|
47
|
-
".webp": "image/webp",
|
|
48
|
-
".jpg": "image/jpeg",
|
|
49
|
-
".jpeg": "image/jpeg",
|
|
50
|
-
".gif": "image/gif",
|
|
51
|
-
".ico": "image/x-icon",
|
|
52
|
-
".woff": "font/woff",
|
|
53
|
-
".woff2": "font/woff2",
|
|
54
|
-
".ttf": "font/ttf",
|
|
55
|
-
".map": "application/json; charset=utf-8",
|
|
56
|
-
".txt": "text/plain; charset=utf-8",
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export interface DocsMenuEntry {
|
|
60
|
-
/** Short deep-link key, for example `safety`. */
|
|
61
|
-
topic: string;
|
|
62
|
-
/** Real on-disk file name, for example `safety_blueprint.html`. */
|
|
63
|
-
file: string;
|
|
64
|
-
/** Human label, for example `Safety`. */
|
|
65
|
-
label: string;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Resolve the source-checkout HTML root. The npm package deliberately excludes it. */
|
|
69
|
-
function resolveDocsHtmlDir(): string {
|
|
70
|
-
return resolve(resolvePackageRoot(), "docs", "html");
|
|
71
|
-
}
|
|
72
20
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return CONTENT_TYPES[filePath.slice(dot).toLowerCase()] ?? "application/octet-stream";
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Map a request URL to a safe relative path under the html root. Pure: no disk
|
|
82
|
-
* access. Strips the query and fragment, decodes percent-escapes, defaults `/`
|
|
83
|
-
* to `index.html`, and rejects any traversal segment so a request can never
|
|
84
|
-
* escape the served directory.
|
|
85
|
-
*/
|
|
86
|
-
function resolveRequestPath(rawUrl: string): { ok: true; relative: string } | { ok: false; reason: string } {
|
|
87
|
-
const pathPart = (rawUrl.split(/[?#]/, 1)[0] ?? "").trim();
|
|
88
|
-
let decoded: string;
|
|
89
|
-
try {
|
|
90
|
-
decoded = decodeURIComponent(pathPart);
|
|
91
|
-
} catch {
|
|
92
|
-
return { ok: false, reason: "bad-request" };
|
|
93
|
-
}
|
|
94
|
-
if (decoded.includes("\0")) return { ok: false, reason: "forbidden" };
|
|
95
|
-
const segments = decoded.split(/[/\\]/).filter((segment) => segment.length > 0 && segment !== ".");
|
|
96
|
-
if (segments.length === 0) return { ok: true, relative: "index.html" };
|
|
97
|
-
for (const segment of segments) {
|
|
98
|
-
if (segment === "..") return { ok: false, reason: "forbidden" };
|
|
99
|
-
}
|
|
100
|
-
return { ok: true, relative: segments.join("/") };
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function titleize(topic: string): string {
|
|
104
|
-
return topic
|
|
105
|
-
.split(/[-_]+/)
|
|
106
|
-
.filter((word) => word.length > 0)
|
|
107
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
108
|
-
.join(" ");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Synthesize the deep-linkable topic menu from a directory listing. Pure: takes
|
|
113
|
-
* the file-name list, not the directory. `index.html` is the menu itself and is
|
|
114
|
-
* excluded; a trailing `_blueprint` is stripped from the topic key.
|
|
115
|
-
*/
|
|
116
|
-
function synthesizeMenu(fileNames: ReadonlyArray<string>): DocsMenuEntry[] {
|
|
117
|
-
const entries: DocsMenuEntry[] = [];
|
|
118
|
-
for (const name of fileNames) {
|
|
119
|
-
if (!name.toLowerCase().endsWith(".html")) continue;
|
|
120
|
-
if (name.toLowerCase() === "index.html") continue;
|
|
121
|
-
const topic = name.replace(/\.html$/i, "").replace(/_blueprint$/i, "");
|
|
122
|
-
entries.push({ topic, file: name, label: titleize(topic) });
|
|
123
|
-
}
|
|
124
|
-
entries.sort((a, b) => a.topic.localeCompare(b.topic));
|
|
125
|
-
return entries;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Resolve a user-supplied `[topic]` to a real file name. Pure. Accepts the bare
|
|
130
|
-
* topic (`safety`), the blueprint file stem (`safety_blueprint`), or a full
|
|
131
|
-
* `.html` name, case-insensitively. Returns null when nothing matches.
|
|
132
|
-
*/
|
|
133
|
-
function topicToFile(topic: string, fileNames: ReadonlyArray<string>): string | null {
|
|
134
|
-
const wanted = topic
|
|
135
|
-
.trim()
|
|
136
|
-
.toLowerCase()
|
|
137
|
-
.replace(/\.html$/i, "");
|
|
138
|
-
if (wanted.length === 0) return null;
|
|
139
|
-
for (const candidate of [`${wanted}.html`, `${wanted}_blueprint.html`]) {
|
|
140
|
-
const match = fileNames.find((name) => name.toLowerCase() === candidate);
|
|
141
|
-
if (match) return match;
|
|
142
|
-
}
|
|
143
|
-
const hit = synthesizeMenu(fileNames).find((entry) => entry.topic.toLowerCase() === wanted);
|
|
144
|
-
return hit ? hit.file : null;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function isWithin(child: string, parent: string): boolean {
|
|
148
|
-
const rel = relative(parent, child);
|
|
149
|
-
return rel === "" || (!rel.startsWith("..") && !rel.startsWith(`..${"/"}`) && !/^([A-Za-z]:)?[/\\]/.test(rel));
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
function listHtmlFiles(htmlDir: string): string[] {
|
|
153
|
-
try {
|
|
154
|
-
return readdirSync(htmlDir)
|
|
155
|
-
.filter((name) => name.toLowerCase().endsWith(".html"))
|
|
156
|
-
.sort((a, b) => a.localeCompare(b));
|
|
157
|
-
} catch {
|
|
158
|
-
return [];
|
|
159
|
-
}
|
|
160
|
-
}
|
|
21
|
+
Reuses your installed background app when available. Otherwise starts a local
|
|
22
|
+
foreground web server on 127.0.0.1; press Ctrl+C to stop it. No background service
|
|
23
|
+
is installed by this command. Your current directory does not affect the docs.
|
|
24
|
+
`;
|
|
161
25
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
res.writeHead(status, { "content-type": "text/plain; charset=utf-8" });
|
|
175
|
-
res.end(resolved.reason);
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
const requestedTarget = resolve(root, resolved.relative);
|
|
179
|
-
if (!isWithin(requestedTarget, root)) {
|
|
180
|
-
res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
|
|
181
|
-
res.end("forbidden");
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
let size: number | null = null;
|
|
185
|
-
let target: string | null = null;
|
|
186
|
-
try {
|
|
187
|
-
target = realpathSync(requestedTarget);
|
|
188
|
-
if (!isWithin(target, root)) {
|
|
189
|
-
res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
|
|
190
|
-
res.end("forbidden");
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
const stat = statSync(target);
|
|
194
|
-
if (stat.isFile()) size = stat.size;
|
|
195
|
-
} catch {
|
|
196
|
-
size = null;
|
|
197
|
-
}
|
|
198
|
-
if (size === null || target === null) {
|
|
199
|
-
res.writeHead(404, { "content-type": "text/plain; charset=utf-8" });
|
|
200
|
-
res.end("not found");
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const headers = {
|
|
204
|
-
"content-type": contentTypeFor(target),
|
|
205
|
-
"content-length": String(size),
|
|
206
|
-
"cache-control": "no-store",
|
|
207
|
-
};
|
|
208
|
-
if (req.method === "HEAD") {
|
|
209
|
-
res.writeHead(200, headers);
|
|
210
|
-
res.end();
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
res.writeHead(200, headers);
|
|
214
|
-
const stream = createReadStream(target);
|
|
215
|
-
stream.on("error", () => {
|
|
216
|
-
if (!res.writableEnded) res.end();
|
|
217
|
-
});
|
|
218
|
-
stream.pipe(res);
|
|
26
|
+
const key = (value: string) => value.toLowerCase().replace(/_/g, "-");
|
|
27
|
+
const route = (path: string) => `/docs/${path.split("/").map(encodeURIComponent).join("/")}`;
|
|
28
|
+
|
|
29
|
+
/** Resolve only catalogued destinations; ambiguous basenames require a full path. */
|
|
30
|
+
export function docsTopicRoute(topic: string | undefined, pages: readonly string[]): string | undefined {
|
|
31
|
+
if (topic === undefined) return "/docs";
|
|
32
|
+
if (!topic || /[\\\0?#]/.test(topic) || topic.startsWith("/") || topic.split("/").includes("..")) return;
|
|
33
|
+
const wanted = key(topic.replace(/^docs\//, ""));
|
|
34
|
+
const topics: Record<string, string> = {
|
|
35
|
+
safety: "architecture/safety-model.md",
|
|
36
|
+
configuration: "guide/configuration-and-targets.md",
|
|
37
|
+
trace: "architecture/trace-store.md",
|
|
219
38
|
};
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const onError = (err: Error): void => rejectListen(err);
|
|
243
|
-
server.once("error", onError);
|
|
244
|
-
server.listen(options.port ?? 0, host, () => {
|
|
245
|
-
server.removeListener("error", onError);
|
|
246
|
-
resolveListen();
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
const address = server.address() as AddressInfo;
|
|
250
|
-
const port = address.port;
|
|
251
|
-
return {
|
|
252
|
-
server,
|
|
253
|
-
port,
|
|
254
|
-
url: `http://${host}:${port}/`,
|
|
255
|
-
close: () => new Promise<void>((resolveClose) => server.close(() => resolveClose())),
|
|
39
|
+
const preferred = topics[wanted];
|
|
40
|
+
if (preferred && pages.includes(preferred)) return route(preferred);
|
|
41
|
+
const exact = pages.find((path) => key(path) === wanted || key(path.replace(/\.md$/i, "")) === wanted);
|
|
42
|
+
if (exact) return route(exact);
|
|
43
|
+
const name = wanted.replace(/\.md$/, "");
|
|
44
|
+
const exactNames = pages.filter((path) => key(basename(path).replace(/\.md$/i, "")) === name);
|
|
45
|
+
const matches = exactNames.length
|
|
46
|
+
? exactNames
|
|
47
|
+
: pages.filter((path) => key(basename(path).replace(/\.md$/i, "")).startsWith(`${name}-`));
|
|
48
|
+
const match = matches[0];
|
|
49
|
+
return matches.length === 1 && match ? route(match) : undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function catalog(root: string) {
|
|
53
|
+
const pages: string[] = [];
|
|
54
|
+
const scan = (path: string) => {
|
|
55
|
+
for (const entry of readdirSync(join(root, path), { withFileTypes: true })) {
|
|
56
|
+
const name = path ? `${path}/${entry.name}` : entry.name;
|
|
57
|
+
if (name === "html") continue;
|
|
58
|
+
if (entry.isDirectory()) scan(name);
|
|
59
|
+
else if (entry.isFile() && /\.md$/i.test(name)) pages.push(name);
|
|
60
|
+
}
|
|
256
61
|
};
|
|
62
|
+
scan("");
|
|
63
|
+
return pages;
|
|
257
64
|
}
|
|
258
65
|
|
|
259
|
-
function
|
|
260
|
-
const platform = process.platform;
|
|
261
|
-
const command = platform === "darwin" ? "open" : platform === "win32" ? "cmd" : "xdg-open";
|
|
262
|
-
const args = platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
263
|
-
try {
|
|
264
|
-
const child = spawn(command, args, { stdio: "ignore", detached: true });
|
|
265
|
-
child.on("error", () => {
|
|
266
|
-
// Best-effort: the printed URL is the fallback when no opener exists.
|
|
267
|
-
});
|
|
268
|
-
child.unref();
|
|
269
|
-
} catch {
|
|
270
|
-
// Best-effort: never fail the command because a browser could not launch.
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export function waitForShutdown(): Promise<void> {
|
|
275
|
-
return new Promise((resolveShutdown) => {
|
|
276
|
-
const onSignal = (): void => {
|
|
277
|
-
process.removeListener("SIGINT", onSignal);
|
|
278
|
-
process.removeListener("SIGTERM", onSignal);
|
|
279
|
-
resolveShutdown();
|
|
280
|
-
};
|
|
281
|
-
process.once("SIGINT", onSignal);
|
|
282
|
-
process.once("SIGTERM", onSignal);
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<number> {
|
|
66
|
+
export async function runDocsCommand(args: readonly string[] = []): Promise<number> {
|
|
287
67
|
if (args.includes("--help") || args.includes("-h")) {
|
|
288
68
|
process.stdout.write(HELP);
|
|
289
69
|
return 0;
|
|
290
70
|
}
|
|
291
|
-
|
|
292
|
-
const positionals
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
noOpen = true;
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
|
-
if (arg.startsWith("-")) {
|
|
299
|
-
printError(`unknown flag: ${arg}`);
|
|
300
|
-
process.stdout.write(HELP);
|
|
301
|
-
return 2;
|
|
302
|
-
}
|
|
303
|
-
positionals.push(arg);
|
|
304
|
-
}
|
|
305
|
-
if (positionals.length > 1) {
|
|
306
|
-
printError("docs accepts at most one [topic]");
|
|
307
|
-
process.stdout.write(HELP);
|
|
71
|
+
const positionals = args.filter((arg) => arg !== "--no-open");
|
|
72
|
+
const unknownFlag = positionals.find((arg) => arg.startsWith("-"));
|
|
73
|
+
if (unknownFlag || positionals.length > 1) {
|
|
74
|
+
printError(unknownFlag ? `unknown flag: ${unknownFlag}` : "docs accepts at most one [topic]");
|
|
308
75
|
return 2;
|
|
309
76
|
}
|
|
310
|
-
|
|
311
|
-
let htmlDir: string;
|
|
312
77
|
try {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
if (files.length === 0) {
|
|
320
|
-
printError(`no HTML docs at ${htmlDir}`);
|
|
321
|
-
process.stdout.write(
|
|
322
|
-
` the npm package ships only the categorized Markdown reference tree: ${resolve(resolvePackageRoot(), "docs")}\n` +
|
|
323
|
-
" the interactive blueprints are in a source checkout and at https://github.com/iowarp/clio-coder/tree/main/docs/html\n",
|
|
324
|
-
);
|
|
325
|
-
return 1;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
let landing = "index.html";
|
|
329
|
-
const topic = positionals[0];
|
|
330
|
-
if (topic !== undefined) {
|
|
331
|
-
const file = topicToFile(topic, files);
|
|
332
|
-
if (!file) {
|
|
333
|
-
printError(`unknown docs topic: ${topic}`);
|
|
334
|
-
const topics = synthesizeMenu(files).map((entry) => entry.topic);
|
|
335
|
-
if (topics.length > 0) process.stdout.write(` available topics: ${topics.join(", ")}\n`);
|
|
78
|
+
const pages = catalog(join(resolvePackageRoot(), "docs"));
|
|
79
|
+
const path = docsTopicRoute(positionals[0], pages);
|
|
80
|
+
if (!path) {
|
|
81
|
+
printError(
|
|
82
|
+
`Unknown or ambiguous docs topic: ${positionals[0]}. Run clio-coder docs to browse the documentation map.`,
|
|
83
|
+
);
|
|
336
84
|
return 2;
|
|
337
85
|
}
|
|
338
|
-
|
|
86
|
+
return runWebCommand(["--path", path, "--reuse-background", args.includes("--no-open") ? "--no-open" : "--open"]);
|
|
87
|
+
} catch (error) {
|
|
88
|
+
printError(error instanceof Error ? error.message : "Could not open the documentation.");
|
|
89
|
+
return 1;
|
|
339
90
|
}
|
|
340
|
-
|
|
341
|
-
const handle = await startDocsServer({ htmlDir });
|
|
342
|
-
const landingUrl = landing === "index.html" ? handle.url : `${handle.url}${landing}`;
|
|
343
|
-
printHeader("Clio docs viewer");
|
|
344
|
-
process.stdout.write(` serving HTML root ${htmlDir}\n`);
|
|
345
|
-
process.stdout.write(` open ${chalk.cyan(landingUrl)}\n`);
|
|
346
|
-
process.stdout.write(" bound to 127.0.0.1 only: no external network, no daemon, no state.\n");
|
|
347
|
-
process.stdout.write(" press Ctrl+C to stop.\n");
|
|
348
|
-
if (!noOpen) openBrowser(landingUrl);
|
|
349
|
-
|
|
350
|
-
await waitForShutdown();
|
|
351
|
-
await handle.close();
|
|
352
|
-
process.stdout.write("docs viewer stopped.\n");
|
|
353
|
-
return 0;
|
|
354
91
|
}
|
package/src/cli/doctor-panes.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { describeResolution, findPinnedTool, toolStatus } from "../domains/toolc
|
|
|
11
11
|
*
|
|
12
12
|
* Six rows, in the order an operator debugs them: what mode the pane layer
|
|
13
13
|
* resolved to, whether the socket answered, whether the server is new enough
|
|
14
|
-
* for the
|
|
14
|
+
* for the notification and pane-control methods, where the pane host binary resolves, what the
|
|
15
15
|
* boot layout composes, and whether the journal directory the viewer reads is
|
|
16
16
|
* writable.
|
|
17
17
|
*
|
package/src/cli/doctor.ts
CHANGED
|
@@ -20,6 +20,8 @@ const HELP = `clio-coder doctor [--fix] [--json]
|
|
|
20
20
|
Diagnose Clio Coder state without creating files. On a home Clio has never
|
|
21
21
|
written to, doctor says so in one row and exits 0. Use --fix to repair structure:
|
|
22
22
|
missing directories, missing template files, and credential permissions.
|
|
23
|
+
--fix also records the fleet preflight, which is what admits an SSH node to
|
|
24
|
+
dispatch for the current project root; plain doctor only reports it.
|
|
23
25
|
Settings are validated directly against the current schema.
|
|
24
26
|
Pass --json to emit a machine-readable report on stdout.
|
|
25
27
|
`;
|
|
@@ -63,7 +65,7 @@ export async function runDoctorCommand(args: ReadonlyArray<string> = []): Promis
|
|
|
63
65
|
const interopChecks = untouched ? [] : await runDoctorInteropChecks();
|
|
64
66
|
// Fleet preflight probes each configured node over SSH and persists the
|
|
65
67
|
// per-node eligibility verdicts dispatch placement enforces.
|
|
66
|
-
const fleetChecks = untouched ? [] : await runDoctorFleetChecks();
|
|
68
|
+
const fleetChecks = untouched ? [] : await runDoctorFleetChecks(process.cwd(), { fix });
|
|
67
69
|
// Resolution reads PATH and the vendor root and creates nothing, but on an
|
|
68
70
|
// untouched home there is no vendor root to look at and the answer would be
|
|
69
71
|
// "none" for every row regardless, so the sweep stays with the others.
|