@iowarp/clio-coder 0.4.7 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +29 -0
- package/CONTRIBUTING.md +83 -74
- package/README.md +66 -45
- package/dist/{acp-W3Y3TRHD.js → acp-JWPQZM2D.js} +14 -14
- package/dist/{agents-J4ICNLQ3.js → agents-4GCDIRVX.js} +55 -54
- package/dist/assets/codewiki.json +1 -1
- package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
- package/dist/assets/web-notices/hono-LICENSE +21 -0
- package/dist/{auth-X2UJUMOC.js → auth-SYAKTDQE.js} +22 -22
- package/dist/background-OW67WMYR.js +37 -0
- package/dist/{builtins-XLXWWSRF.js → builtins-TKS63VNV.js} +4 -4
- package/dist/chunk-2JSCCEKO.js +85 -0
- package/dist/{chunk-QKWL7SYE.js → chunk-2SXGG2IV.js} +49 -38
- package/dist/{chunk-MZHXENL7.js → chunk-2U2U5POA.js} +5 -5
- package/dist/{chunk-NCCQ6DVS.js → chunk-2ZWLMA3T.js} +6 -6
- package/dist/{chunk-FQOOGXBH.js → chunk-36XSBPXL.js} +7 -7
- package/dist/{chunk-5AJPUR72.js → chunk-3IQOZRQ6.js} +7 -7
- package/dist/{chunk-4MFBBY2Z.js → chunk-44U2OUSM.js} +3 -3
- package/dist/{chunk-5ZSZEYJK.js → chunk-4P6M2TTE.js} +2 -2
- package/dist/{chunk-IZYTT3CD.js → chunk-526ABLHD.js} +6 -6
- package/dist/{chunk-BO4XV5VX.js → chunk-5C2OQHLR.js} +4 -4
- package/dist/chunk-5D2FNBMG.js +185 -0
- package/dist/{chunk-M6Z2V6YU.js → chunk-5HULHKT2.js} +5 -5
- package/dist/{chunk-PFLOULP3.js → chunk-5UG6EZI3.js} +4 -4
- package/dist/{chunk-WN552PKN.js → chunk-5W4FRA5Q.js} +280 -900
- package/dist/{chunk-KAFMW7WM.js → chunk-6R5MBXBJ.js} +1 -1
- package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
- package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
- package/dist/{chunk-GXIWHXDB.js → chunk-6X7VOCDY.js} +3 -3
- package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
- package/dist/{chunk-34XHRVKG.js → chunk-ARRUMZ7X.js} +2 -2
- package/dist/{chunk-3T4DXWP6.js → chunk-ATB3Q7YO.js} +1 -6
- package/dist/chunk-AUHVBIDW.js +19 -0
- package/dist/{chunk-L3Z5ANCV.js → chunk-BE4I3UJ2.js} +7 -7
- package/dist/chunk-BFPHMSK7.js +169 -0
- package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
- package/dist/{chunk-D2T66PDV.js → chunk-BIY22UUK.js} +35 -203
- package/dist/{chunk-VMATUZB6.js → chunk-D55WO5J7.js} +11 -11
- package/dist/{chunk-2O2LVQQK.js → chunk-E2NSPYLC.js} +4 -4
- package/dist/{chunk-IJMW64DX.js → chunk-EFXMQYI6.js} +32 -32
- package/dist/{chunk-GVZFCJHE.js → chunk-EPYATQMG.js} +18 -18
- package/dist/{chunk-MZNWZUJM.js → chunk-EXKUF426.js} +11 -11
- package/dist/{chunk-IMOD2YPV.js → chunk-F7Y6QTPL.js} +9 -19
- package/dist/{chunk-IQCNVLO6.js → chunk-FB3KTE2J.js} +10 -7
- package/dist/{chunk-3LXJOICS.js → chunk-FNVPQQYT.js} +2 -2
- package/dist/{chunk-UUQ5G6EZ.js → chunk-GEYX2NZ5.js} +2 -2
- package/dist/{chunk-CP3HIR5H.js → chunk-GJBJHJNY.js} +19 -18
- package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
- package/dist/{chunk-WT5TRMO4.js → chunk-GVU4CXPJ.js} +179 -65
- package/dist/{chunk-TZ6UVP2H.js → chunk-H5DPSUBB.js} +8 -8
- package/dist/{chunk-EUEXGXXR.js → chunk-H77XBUBM.js} +5 -5
- package/dist/{config-YXARKGTX.js → chunk-HMGAKB7E.js} +15 -259
- package/dist/{chunk-EUZRMP4Y.js → chunk-HP7KJ5O2.js} +19 -19
- package/dist/chunk-HVCAY2FH.js +67 -0
- package/dist/{chunk-CPXGJI2A.js → chunk-ICYIUNO4.js} +4 -4
- package/dist/{chunk-GI5RRMAH.js → chunk-IILXVWJY.js} +7 -7
- package/dist/{chunk-MNQN3X6Y.js → chunk-JCVIL6TY.js} +5 -5
- package/dist/chunk-JIMWEYWO.js +63 -0
- package/dist/{chunk-C3G5PNUO.js → chunk-JLBVCROW.js} +25 -25
- package/dist/chunk-JOBN2YQQ.js +176 -0
- package/dist/chunk-JOL2QRLE.js +152 -0
- package/dist/{chunk-N37QC5FV.js → chunk-JRA6OBHY.js} +5 -5
- package/dist/{chunk-C6GEXX4L.js → chunk-JV25I7ID.js} +7 -7
- package/dist/{chunk-SEDI5K5B.js → chunk-JYKUMHCQ.js} +16 -16
- package/dist/{chunk-UA6W4XFJ.js → chunk-K3W6BF5C.js} +2 -2
- package/dist/chunk-K45LHSCI.js +194 -0
- package/dist/{chunk-UA3W4FGC.js → chunk-K53E2PTW.js} +5 -5
- package/dist/{chunk-VCRVEDUC.js → chunk-K5UJD6MM.js} +5 -5
- package/dist/{chunk-65BGHOUR.js → chunk-KGP3UQGJ.js} +5 -5
- package/dist/chunk-KKRXONXG.js +43 -0
- package/dist/{chunk-LBFQMYS3.js → chunk-KWJXCL2X.js} +5 -3
- package/dist/{chunk-RTLNFZMD.js → chunk-L75H5B3B.js} +3 -3
- package/dist/{chunk-G4LGUTOE.js → chunk-LLCGGVSW.js} +6 -6
- package/dist/{chunk-HRAKUPIH.js → chunk-LZCCBLRC.js} +5 -5
- package/dist/{chunk-WURGVOZJ.js → chunk-LZDLYSUN.js} +18 -14
- package/dist/{chunk-ISNCCX42.js → chunk-MATCRH3M.js} +7 -6
- package/dist/{chunk-BAU36233.js → chunk-MEHBW2SP.js} +7 -7
- package/dist/{chunk-BQQ5MXUC.js → chunk-MUXNDNMZ.js} +3 -3
- package/dist/{chunk-NO7J45X6.js → chunk-MWMW53WW.js} +90 -51
- package/dist/chunk-MZDPF35R.js +45 -0
- package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
- package/dist/{chunk-T334FW2H.js → chunk-O2QJDRWP.js} +5 -5
- package/dist/{chunk-T7QQBNLH.js → chunk-O3HSB2YL.js} +9 -7
- package/dist/{chunk-WB7POC6M.js → chunk-OEMFEL26.js} +6 -6
- package/dist/{chunk-77CZRFTE.js → chunk-OPC4DQD6.js} +2 -2
- package/dist/{chunk-4UHVS5T7.js → chunk-ORRNGQDV.js} +8 -8
- package/dist/{chunk-TZHN5ITX.js → chunk-P4JS3MH5.js} +5 -5
- package/dist/{chunk-WBVKKTUT.js → chunk-P7GTE4FX.js} +2 -2
- package/dist/{chunk-6TAATXXH.js → chunk-PAQVETLA.js} +6 -6
- package/dist/{chunk-6CA2BHOR.js → chunk-PFZJMXIY.js} +4 -4
- package/dist/{chunk-4QKAITQT.js → chunk-PGEFOTJB.js} +70 -7
- package/dist/{chunk-MBJO5VNZ.js → chunk-PJ5H5B7A.js} +25 -25
- package/dist/{chunk-DO7M3LSX.js → chunk-PMUUAABD.js} +43 -96
- package/dist/{chunk-A67NR5AT.js → chunk-Q32C6AWI.js} +11 -8
- package/dist/{chunk-ECOMVOHP.js → chunk-QGIC5SX5.js} +2 -2
- package/dist/{chunk-5CMARGPF.js → chunk-QLAGXTTV.js} +7 -2
- package/dist/{chunk-GFQ7P2UF.js → chunk-QLKCCC2J.js} +9 -9
- package/dist/{chunk-SELG4SUR.js → chunk-QWUSS2QP.js} +7 -4
- package/dist/{chunk-P5SC4DLJ.js → chunk-QYSAZMSH.js} +2 -2
- package/dist/{fleet-decisions-S3PTZV2D.js → chunk-R5NRX5N4.js} +5 -41
- package/dist/{chunk-DLIYANB7.js → chunk-RAUOKUZV.js} +11 -11
- package/dist/{chunk-UFYNOQK4.js → chunk-RBES4TCZ.js} +7 -7
- package/dist/{chunk-T52TPHYC.js → chunk-RFULVPBX.js} +4 -4
- package/dist/{chunk-TLTGZTXI.js → chunk-RKFNU5UA.js} +3 -3
- package/dist/{chunk-T4TY5GG3.js → chunk-RM3XJX7P.js} +3 -3
- package/dist/{chunk-6YA46L5A.js → chunk-RNLAPBJL.js} +2 -2
- package/dist/chunk-RPMNIFRY.js +65 -0
- package/dist/{chunk-DACXIVVF.js → chunk-RRZFRIJP.js} +5 -5
- package/dist/{chunk-CE64C5K5.js → chunk-RXI7K4J5.js} +61 -61
- package/dist/{chunk-CULVKYTK.js → chunk-STC6CWUZ.js} +5 -5
- package/dist/{chunk-6YHPAAZR.js → chunk-TEHVMHOK.js} +3 -3
- package/dist/{chunk-VTYHHQ57.js → chunk-TOPICHGR.js} +2 -2
- package/dist/{chunk-UWD3JD5X.js → chunk-UB33F3YW.js} +10 -10
- package/dist/{chunk-TN5FW4XY.js → chunk-UDAK6GR2.js} +12 -9
- package/dist/chunk-USBBEKHW.js +177 -0
- package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
- package/dist/{chunk-6LRLOJHQ.js → chunk-W7KNI3F5.js} +11 -62
- package/dist/chunk-WFTSK7N3.js +637 -0
- package/dist/{chunk-YPRSNUTC.js → chunk-WJWNZXRM.js} +2 -2
- package/dist/chunk-WS4FOGLY.js +686 -0
- package/dist/{chunk-ZGIGW4ZG.js → chunk-WTZVSMQZ.js} +5 -5
- package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
- package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
- package/dist/chunk-XC5POIL4.js +68 -0
- package/dist/{chunk-XZ6UFQ52.js → chunk-XTLJDC2X.js} +22 -17
- package/dist/{chunk-7EEGBKV4.js → chunk-YGIV24MF.js} +8 -8
- package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
- package/dist/{chunk-4N2RZ4TO.js → chunk-YKIIWURD.js} +3 -3
- package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
- package/dist/{chunk-KS7ETA3P.js → chunk-YXANQGCX.js} +6 -6
- package/dist/{chunk-HOX4YZ2K.js → chunk-YXFKLMX2.js} +5 -5
- package/dist/chunk-ZST3FRCV.js +132 -0
- package/dist/cli/index.js +39 -37
- package/dist/{clio-L2P7S2R2.js → clio-BPBAPZGA.js} +9 -9
- package/dist/{code-nav-B5LNX4KU.js → code-nav-KBQ3RIFK.js} +33 -33
- package/dist/{components-63MMQKUT.js → components-6DKAXWFN.js} +10 -10
- package/dist/config-FWL5JK2H.js +270 -0
- package/dist/config-graph-ACDB26L2.js +156 -0
- package/dist/{configure-LMVQJ46J.js → configure-ZIZ4YV62.js} +48 -48
- package/dist/{context-7HJEWTTP.js → context-EZZPT2ZV.js} +49 -49
- package/dist/{context-YG2LZDYZ.js → context-VIL5MFRH.js} +86 -84
- package/dist/{context-XSZKKFBW.js → context-Z3GOBHDK.js} +16 -16
- package/dist/{context-clear-AC5NXHM2.js → context-clear-ZPB3L7MN.js} +72 -70
- package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
- package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
- package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-2GLBVF7L.js} +23 -22
- package/dist/{detail-H73BEF2N.js → detail-VSBWYSGZ.js} +73 -71
- package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-EEEHGKX4.js} +78 -76
- package/dist/docs-VMMWFVHL.js +101 -0
- package/dist/{doctor-EQYJOGUG.js → doctor-V5L4IQGP.js} +63 -62
- package/dist/{eval-4P7O6CCE.js → eval-VJYJ2BV3.js} +80 -65
- package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
- package/dist/evals-J2H5V6DD.js +104 -0
- package/dist/{evidence-D6GUSYJW.js → evidence-POWAEBEW.js} +72 -70
- package/dist/evidence-XCCCLS36.js +242 -0
- package/dist/{evidence-O76QF7TZ.js → evidence-Y35YSXH6.js} +80 -78
- package/dist/{evolve-H47BCETS.js → evolve-GPG72VB6.js} +74 -72
- package/dist/{extensions-NNL3ZOCU.js → extensions-YIZ7W3DA.js} +12 -11
- package/dist/fleet-2MDCQ2VK.js +264 -0
- package/dist/{fleet-KMNS6NOM.js → fleet-W2AF3TOJ.js} +127 -123
- package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-WS56G26H.js} +11 -11
- package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
- package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-ELTBXBAV.js} +22 -22
- package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-45IK73L4.js} +84 -248
- package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-T5NCZKHE.js} +4 -4
- package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-VG4JBLA4.js} +26 -26
- package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-VTSABAYO.js} +72 -70
- package/dist/{fleet-view-BHJFW26B.js → fleet-view-XC7WMKSS.js} +75 -73
- package/dist/{init-XAT5N5YM.js → init-VTJNNTIP.js} +95 -92
- package/dist/install-6PIF6F6W.js +19 -0
- package/dist/{interop-FVECHFKG.js → interop-IU6BNA7C.js} +25 -25
- package/dist/{inventory-7KFQGLCV.js → inventory-QPQUTUUZ.js} +75 -73
- package/dist/{library-NY2XOT75.js → library-HUTAS57T.js} +33 -33
- package/dist/{library-QAPAO23R.js → library-LF7DLU6S.js} +13 -13
- package/dist/library-Q3NWL5CM.js +75 -0
- package/dist/{library-import-5Y6MAS3R.js → library-import-PPW4YUC5.js} +25 -25
- package/dist/{library-inventory-JT6HWITQ.js → library-inventory-DIRVFRZU.js} +19 -19
- package/dist/{library-validation-EQUH25DC.js → library-validation-XHUZ3INE.js} +17 -17
- package/dist/{memory-DYVTTCP6.js → memory-Z2LSKNV6.js} +74 -72
- package/dist/{models-MASFJ6Y2.js → models-3FTREYPY.js} +53 -52
- package/dist/{monitor-YMP4NXJJ.js → monitor-HF2MQRB3.js} +83 -80
- package/dist/{orchestrator-AFQRRTEI.js → orchestrator-UYPA6W4S.js} +498 -358
- package/dist/{panes-NICTHQCV.js → panes-736XB73K.js} +14 -14
- package/dist/{panes-D3Y2KFG5.js → panes-C4P3PIWT.js} +4 -4
- package/dist/{paths-PSFAUIGO.js → paths-JQ4QYIYB.js} +6 -6
- package/dist/{preload-5Q7VXRFJ.js → preload-XSLRYH3Y.js} +72 -70
- package/dist/{reset-7NKZK7JN.js → reset-V7QSPZYE.js} +9 -9
- package/dist/{resources-NILSIZAT.js → resources-OJGDFHYT.js} +22 -22
- package/dist/{run-BPZGEBZV.js → run-T354SMDW.js} +129 -125
- package/dist/settings-MWZXO6RV.js +72 -0
- package/dist/{share-EZ6ERBMH.js → share-Y5ZKJPND.js} +26 -26
- package/dist/{skills-BTVVNYVM.js → skills-4GLZC4LN.js} +28 -28
- package/dist/{skills-eval-UY34MNK7.js → skills-eval-L5T7GODM.js} +87 -85
- package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-LASKXEZI.js} +22 -22
- package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-OIMRU36D.js} +49 -49
- package/dist/{steer-2B3EQGFH.js → steer-KMAM2Y2C.js} +4 -4
- package/dist/{support-L2SOL3IE.js → support-AWC3XKPX.js} +8 -8
- package/dist/system-CD75NYBU.js +116 -0
- package/dist/{targets-44VKGFLN.js → targets-VSZX2J2S.js} +66 -65
- package/dist/{tasks-3KODKFU7.js → tasks-AN567LYH.js} +14 -14
- package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-6KTWNHVY.js} +3 -3
- package/dist/{tools-3UB7TEVR.js → tools-AGRK3V5J.js} +13 -13
- package/dist/{trace-TAMIU4OJ.js → trace-P4MQZD33.js} +18 -67
- package/dist/{uninstall-QYVRPEM4.js → uninstall-BRUTEPIC.js} +37 -12
- package/dist/{upgrade-7PMKM2JH.js → upgrade-SBCGHQGJ.js} +22 -21
- package/dist/{usage-6EQV7EQK.js → usage-BIDVTO6V.js} +93 -87
- package/dist/{verifiers-JLITWSHU.js → verifiers-LTGCAMXS.js} +12 -12
- package/dist/{verify-T7NAEVIG.js → verify-OZU4LLNP.js} +9 -9
- package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
- package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +36 -0
- package/dist/web/client/assets/array-BifhSqXX.js +1 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
- package/dist/web/client/assets/blockDiagram-I7D4REHJ-wi0_CYHL.js +129 -0
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
- package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
- package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
- package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
- package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
- package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
- package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
- package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
- package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
- package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
- package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
- package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
- package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
- package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
- package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
- package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
- package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
- package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
- package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +1 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +1 -0
- package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.js +62 -0
- package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
- package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
- package/dist/web/client/assets/dagre-GXQ25YYZ-C9mZmAPe.js +4 -0
- package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
- package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
- package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
- package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
- package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
- package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
- package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
- package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web/client/assets/index-Dsi52apB.css +1 -0
- package/dist/web/client/assets/index-FSIC94pi.js +83 -0
- package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
- package/dist/web/client/assets/init-C-OQMol4.js +1 -0
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
- package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
- package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
- package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
- package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
- package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.js +96 -0
- package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/web/client/assets/packet-AYTQ26CC-OqVl_07o.js +1 -0
- package/dist/web/client/assets/path-fybaL0A-.js +1 -0
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
- package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.js +39 -0
- package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
- package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
- package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
- package/dist/web/client/assets/prism-core-BngLtbUd.js +1 -0
- package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
- package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
- package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
- package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
- package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
- package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
- package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
- package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
- package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
- package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
- package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
- package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
- package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
- package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
- package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
- package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
- package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
- package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
- package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
- package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
- package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
- package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
- package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
- package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
- package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
- package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
- package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-Bjs4yjgs.js +7 -0
- package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
- package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
- package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
- package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/web/client/assets/src-yeptRXpt.js +1 -0
- package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
- package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
- package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
- package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
- package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
- package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.js +7 -0
- package/dist/web/client/clio-coder-logo.webp +0 -0
- package/dist/web/client/icon-192.png +0 -0
- package/dist/web/client/icon-512.png +0 -0
- package/dist/web/client/index.html +4 -0
- package/dist/web/client/manifest.webmanifest +15 -0
- package/dist/web/client/offline.css +55 -0
- package/dist/web/client/offline.html +5 -0
- package/dist/web/client/offline.js +27 -0
- package/dist/web/client/sw.js +34 -0
- package/dist/web/ops-worker.js +37 -0
- package/dist/web/reads-worker.js +1726 -0
- package/dist/web/server.js +8499 -0
- package/dist/web-EU6ATJWA.js +13 -0
- package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-U22Q7HV4.js} +3 -3
- package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-LZRLFG6I.js} +98 -95
- package/dist/{with-panes-CHFC7HGI.js → with-panes-X5CZOGML.js} +9 -9
- package/dist/worker/entry.js +68 -68
- package/docs/README.md +27 -26
- package/docs/architecture/acp.md +5 -9
- package/docs/architecture/alcf-provider.md +0 -3
- package/docs/architecture/architecture.md +0 -3
- package/docs/architecture/artifact-placement.md +0 -3
- package/docs/architecture/artifact-versions.md +0 -3
- package/docs/architecture/capacity-and-scheduling.md +0 -3
- package/docs/architecture/context-engine.md +0 -3
- package/docs/architecture/context-working-set.md +0 -3
- package/docs/architecture/dispatch-architecture-rationale.md +0 -3
- package/docs/architecture/dispatch-typed-intent.md +0 -3
- package/docs/architecture/evidence-and-memory.md +0 -3
- package/docs/architecture/library.md +0 -2
- package/docs/architecture/middleware-and-components.md +0 -3
- package/docs/architecture/model-catalog.md +1 -4
- package/docs/architecture/observability.md +0 -3
- package/docs/architecture/pi-boundary.md +6 -9
- package/docs/architecture/prompt-envelope-and-tools.md +1 -4
- package/docs/architecture/provider-adapter-cookbook.md +1 -4
- package/docs/architecture/safety-model.md +0 -3
- package/docs/architecture/session-lifecycle.md +0 -3
- package/docs/architecture/time-conventions.md +0 -3
- package/docs/architecture/trace-store.md +28 -20
- package/docs/architecture/tui-design.md +1 -4
- package/docs/architecture/worker-context.md +1 -3
- package/docs/architecture/worker-dispatch-mechanics.md +1 -4
- package/docs/guide/authoring-plugins.md +1 -3
- package/docs/guide/built-in-agents.md +0 -3
- package/docs/guide/commands-and-modes.md +2 -6
- package/docs/guide/configuration-and-targets.md +197 -4
- package/docs/guide/configuration-reference.md +9 -4
- package/docs/guide/environment-variables.md +0 -3
- package/docs/guide/exit-codes-and-output.md +0 -3
- package/docs/guide/extensions-and-sharing.md +0 -3
- package/docs/guide/fleet-dispatch.md +0 -3
- package/docs/guide/glossary.md +0 -3
- package/docs/guide/harness-extensions.md +0 -2
- package/docs/guide/installation-and-lifecycle.md +1 -4
- package/docs/guide/interop.md +0 -2
- package/docs/guide/panes-and-files.md +0 -3
- package/docs/guide/plugins.md +0 -3
- package/docs/guide/proactive-memory.md +0 -3
- package/docs/guide/resource-library.md +0 -2
- package/docs/guide/skills-marketplace.md +0 -2
- package/docs/guide/tool-usage.md +0 -3
- package/docs/guide/troubleshooting.md +0 -3
- package/docs/history/config-knobs-audit.md +0 -3
- package/docs/history/release-cut-checklist.md +0 -3
- package/docs/process/development-pipeline.md +0 -3
- package/docs/process/documentation-coverage.md +3 -3
- package/docs/process/documentation-guide.md +15 -22
- package/docs/process/eval-runner.md +0 -3
- package/docs/process/evals-internal.md +0 -3
- package/docs/process/evolution.md +0 -3
- package/docs/process/fleet-demo-runbook.md +0 -3
- package/docs/process/git-commit-provenance.md +0 -3
- package/docs/process/performance-methodology.md +1 -4
- package/docs/process/release-cut-checklist.md +114 -221
- package/docs/process/scientific-validation.md +1 -4
- package/library/registry.yaml +2 -2
- package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
- package/library/skills/meta/clio-coder-test/evals.md +16 -2
- package/library/skills/meta/clio-coder-test/plugin.json +1 -1
- package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
- package/library/skills/registry.yaml +2 -2
- package/library/skills/skill-marketplace.json +1 -1
- package/package.json +13 -11
- package/src/cli/docs.ts +65 -328
- package/src/cli/index.ts +3 -1
- package/src/cli/trace.ts +4 -65
- package/src/cli/uninstall.ts +26 -0
- package/src/cli/usage.ts +3 -0
- package/src/cli/web.ts +79 -0
- package/src/core/bus-events.ts +3 -4
- package/src/core/config.ts +71 -0
- package/src/core/domain-loader.ts +37 -28
- package/src/core/termination.ts +13 -9
- package/src/domains/agents/contract.ts +1 -1
- package/src/domains/agents/extension.ts +18 -10
- package/src/domains/config/extension.ts +5 -4
- package/src/domains/dispatch/extension.ts +75 -12
- package/src/domains/dispatch/index.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/state.ts +1 -2
- package/src/domains/dispatch/types.ts +2 -0
- package/src/domains/eval/metrics/tracked.ts +22 -2
- package/src/domains/extensions/operator-runtime.ts +3 -1
- package/src/domains/middleware/hooks.ts +2 -2
- package/src/domains/observability/background-memory-usage.ts +3 -0
- package/src/domains/observability/compaction-usage.ts +2 -0
- package/src/domains/observability/cost.ts +5 -0
- package/src/domains/observability/extension.ts +1 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -0
- package/src/domains/observability/trace-store.ts +65 -5
- package/src/domains/prompts/extension.ts +4 -17
- package/src/domains/providers/cache-deployment.ts +147 -0
- package/src/domains/providers/catalog.ts +12 -7
- package/src/domains/providers/extension.ts +27 -5
- package/src/domains/providers/index.ts +1 -0
- package/src/domains/providers/plugins.ts +3 -13
- package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
- package/src/domains/providers/types/target-descriptor.ts +17 -0
- package/src/domains/session/compaction/compact.ts +4 -1
- package/src/domains/session/entries.ts +1 -0
- package/src/domains/session/usage.ts +6 -7
- package/src/engine/acp/server.ts +11 -0
- package/src/engine/ai.ts +2 -0
- package/src/engine/apis/openai-completions.ts +9 -4
- package/src/engine/prewarm.ts +232 -0
- package/src/engine/provider-diagnostics.ts +6 -1
- package/src/entry/orchestrator.ts +20 -16
- package/src/interactive/chat-loop-messages.ts +3 -0
- package/src/interactive/chat-loop.ts +2 -8
- package/src/interactive/prewarm.ts +11 -197
- package/src/interactive/session-usage-reseed.ts +2 -0
- package/src/interactive/side-question.ts +2 -0
- package/src/interactive/turn-context.ts +1 -0
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-prewarm.ts +126 -19
- package/src/interactive/turn-runtime.ts +14 -0
- package/src/tools/builtin-tool-catalog.ts +8 -4
- package/src/tools/registry.ts +12 -2
- package/src/worker/spec-contract.ts +27 -0
- package/dist/docs-BL7ROUFN.js +0 -292
|
@@ -0,0 +1,637 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
contents,
|
|
4
|
+
desktopEntry,
|
|
5
|
+
installLauncher,
|
|
6
|
+
launcherStatus,
|
|
7
|
+
uninstallLauncher
|
|
8
|
+
} from "./chunk-BFPHMSK7.js";
|
|
9
|
+
import {
|
|
10
|
+
createStdioTransport
|
|
11
|
+
} from "./chunk-WS4FOGLY.js";
|
|
12
|
+
import {
|
|
13
|
+
Id
|
|
14
|
+
} from "./chunk-KKRXONXG.js";
|
|
15
|
+
import {
|
|
16
|
+
AppProblem
|
|
17
|
+
} from "./chunk-MZDPF35R.js";
|
|
18
|
+
import {
|
|
19
|
+
value_exports
|
|
20
|
+
} from "./chunk-SER7RRAE.js";
|
|
21
|
+
import {
|
|
22
|
+
typebox_exports
|
|
23
|
+
} from "./chunk-GH5ZR6JP.js";
|
|
24
|
+
import {
|
|
25
|
+
processAlive,
|
|
26
|
+
processBirthToken
|
|
27
|
+
} from "./chunk-TK2BMCBZ.js";
|
|
28
|
+
import {
|
|
29
|
+
resolveClioDirs
|
|
30
|
+
} from "./chunk-CTTI7G3T.js";
|
|
31
|
+
import {
|
|
32
|
+
resolvePackageRoot
|
|
33
|
+
} from "./chunk-E3LEPLQ2.js";
|
|
34
|
+
import {
|
|
35
|
+
init_esm_shims
|
|
36
|
+
} from "./chunk-ECBHH7LU.js";
|
|
37
|
+
|
|
38
|
+
// apps/clio-coder-web/server/launcher/background.ts
|
|
39
|
+
init_esm_shims();
|
|
40
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
41
|
+
import { lstat, mkdir, mkdtemp, realpath as realpath3, rename, rm, rmdir, unlink, writeFile } from "node:fs/promises";
|
|
42
|
+
import { homedir } from "node:os";
|
|
43
|
+
import { dirname, isAbsolute as isAbsolute3, join as join3, resolve } from "node:path";
|
|
44
|
+
import { parseArgs } from "node:util";
|
|
45
|
+
|
|
46
|
+
// apps/clio-coder-web/server/clio/http-shims.ts
|
|
47
|
+
init_esm_shims();
|
|
48
|
+
|
|
49
|
+
// apps/clio-coder-web/server/local-server.ts
|
|
50
|
+
init_esm_shims();
|
|
51
|
+
import { request } from "node:http";
|
|
52
|
+
import { setTimeout as setTimeout2 } from "node:timers/promises";
|
|
53
|
+
async function localServerReady(port, token) {
|
|
54
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535 || !/^[\w-]{32,256}$/.test(token))
|
|
55
|
+
throw new Error("Invalid local server identity.");
|
|
56
|
+
return new Promise((resolve2) => {
|
|
57
|
+
const req = request(
|
|
58
|
+
{ hostname: "127.0.0.1", port, path: "/api/meta", headers: { Authorization: `Bearer ${token}` } },
|
|
59
|
+
(response) => {
|
|
60
|
+
let body = "";
|
|
61
|
+
response.on("data", (chunk) => {
|
|
62
|
+
body += chunk.toString("utf8");
|
|
63
|
+
if (body.length > 8192) req.destroy();
|
|
64
|
+
});
|
|
65
|
+
response.on("error", () => resolve2(false));
|
|
66
|
+
response.on("end", () => {
|
|
67
|
+
try {
|
|
68
|
+
const value = JSON.parse(body);
|
|
69
|
+
resolve2(response.statusCode === 200 && value.apiVersion === 1 && value.pwa === true);
|
|
70
|
+
} catch {
|
|
71
|
+
resolve2(false);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
req.on("error", () => resolve2(false));
|
|
77
|
+
req.setTimeout(1e3, () => {
|
|
78
|
+
req.destroy();
|
|
79
|
+
resolve2(false);
|
|
80
|
+
});
|
|
81
|
+
req.end();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async function waitForLocalServer(port, token) {
|
|
85
|
+
const deadline = performance.now() + 15e3;
|
|
86
|
+
while (performance.now() < deadline) {
|
|
87
|
+
if (await localServerReady(port, token)) return;
|
|
88
|
+
await setTimeout2(200);
|
|
89
|
+
}
|
|
90
|
+
throw new Error(
|
|
91
|
+
`Clio did not become ready on port ${port}. Check background status; another application may be using that port.`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// apps/clio-coder-web/server/process-policy.ts
|
|
96
|
+
init_esm_shims();
|
|
97
|
+
import { spawn } from "node:child_process";
|
|
98
|
+
import { constants, existsSync } from "node:fs";
|
|
99
|
+
import { access, readFile, realpath, stat } from "node:fs/promises";
|
|
100
|
+
import { delimiter, isAbsolute, join } from "node:path";
|
|
101
|
+
import { Worker } from "node:worker_threads";
|
|
102
|
+
|
|
103
|
+
// apps/clio-coder-web/server/cli-commands.ts
|
|
104
|
+
init_esm_shims();
|
|
105
|
+
var closed = { additionalProperties: false };
|
|
106
|
+
var CliCommand = typebox_exports.Union([
|
|
107
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("library.agents") }, closed),
|
|
108
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("library.verifiers") }, closed),
|
|
109
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("usage.report") }, closed),
|
|
110
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("evidence.build"), id: Id }, closed),
|
|
111
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("receipt.verify"), id: Id }, closed),
|
|
112
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("targets.list") }, closed),
|
|
113
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("targets.probe"), id: Id }, closed),
|
|
114
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("targets.use"), id: Id }, closed),
|
|
115
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("targets.remove"), id: Id }, closed),
|
|
116
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("routing.models") }, closed),
|
|
117
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("routing.profiles") }, closed),
|
|
118
|
+
typebox_exports.Object({ kind: typebox_exports.Literal("routing.bindings") }, closed)
|
|
119
|
+
]);
|
|
120
|
+
function commandPlan(input, cwd) {
|
|
121
|
+
if (!value_exports.Check(CliCommand, input))
|
|
122
|
+
throw new AppProblem("validation", "CLI command is outside the supported command table.");
|
|
123
|
+
switch (input.kind) {
|
|
124
|
+
case "library.agents":
|
|
125
|
+
return { argv: ["agents", "--json"], output: "json" };
|
|
126
|
+
case "library.verifiers":
|
|
127
|
+
return { argv: ["verifiers", "inspect", "--json"], output: "json" };
|
|
128
|
+
case "usage.report":
|
|
129
|
+
if (!cwd) throw new AppProblem("validation", "A canonical workspace is required for usage.");
|
|
130
|
+
return { argv: ["usage", "report", "--repo", cwd, "--days", "30", "--json"], output: "jsonl" };
|
|
131
|
+
case "evidence.build":
|
|
132
|
+
return { argv: ["evidence", "build", "--run", input.id], output: "exit" };
|
|
133
|
+
case "receipt.verify":
|
|
134
|
+
return { argv: ["fleet", "verify", input.id, "--json"], output: "json" };
|
|
135
|
+
case "targets.list":
|
|
136
|
+
return { argv: ["targets", "--json"], output: "json" };
|
|
137
|
+
case "targets.probe":
|
|
138
|
+
return { argv: ["targets", "--json", "--probe", "--target", input.id], output: "json" };
|
|
139
|
+
case "targets.use":
|
|
140
|
+
return { argv: ["targets", "use", input.id], output: "exit" };
|
|
141
|
+
case "targets.remove":
|
|
142
|
+
return { argv: ["targets", "remove", input.id], output: "exit" };
|
|
143
|
+
case "routing.models":
|
|
144
|
+
return { argv: ["models", "--json", "--offline"], output: "json" };
|
|
145
|
+
case "routing.profiles":
|
|
146
|
+
return { argv: ["targets", "profile", "list", "--json"], output: "json" };
|
|
147
|
+
case "routing.bindings":
|
|
148
|
+
return { argv: ["targets", "profile", "bindings", "--json"], output: "json" };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// apps/clio-coder-web/server/process-policy.ts
|
|
153
|
+
function startDomainWorker(kind, settings = {}, env = process.env, compiledDirectory) {
|
|
154
|
+
const entry = compiledDirectory ? new URL(kind === "reads" ? "reads-worker.js" : "ops-worker.js", compiledDirectory) : new URL("./worker/source-entry.mjs", import.meta.url);
|
|
155
|
+
return new Worker(entry, { workerData: { ...settings, kind }, env });
|
|
156
|
+
}
|
|
157
|
+
async function startAcpChild(cwd, env = process.env) {
|
|
158
|
+
const command = await resolveClioCommand(env);
|
|
159
|
+
return createStdioTransport(command.file, [...command.prefix, "acp", "--cwd", cwd, "--permission-timeout", "605000"], {
|
|
160
|
+
cwd,
|
|
161
|
+
env: Object.fromEntries(Object.entries(env).filter((entry) => entry[1] !== void 0))
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
async function resolveClioCommand(env = process.env) {
|
|
165
|
+
const override = env.CLIO_CODER_WEB_CLI;
|
|
166
|
+
if (override) {
|
|
167
|
+
if (!isAbsolute(override)) throw new AppProblem("validation", "CLIO_CODER_WEB_CLI must be an absolute path.");
|
|
168
|
+
const file = await realpath(override).catch(() => {
|
|
169
|
+
throw new AppProblem("unavailable", "The configured Clio CLI cannot be found.");
|
|
170
|
+
});
|
|
171
|
+
if (!(await stat(file)).isFile()) throw new AppProblem("validation", "The configured Clio CLI must be a file.");
|
|
172
|
+
return /\.[cm]?js$/.test(file) ? { file: process.execPath, prefix: [file] } : { file, prefix: [] };
|
|
173
|
+
}
|
|
174
|
+
const checkout = join(resolvePackageRoot(), "dist/cli/index.js");
|
|
175
|
+
if (existsSync(checkout)) return { file: process.execPath, prefix: [await realpath(checkout)] };
|
|
176
|
+
for (const directory of (env.PATH ?? "").split(delimiter).filter(Boolean)) {
|
|
177
|
+
const file = join(directory, process.platform === "win32" ? "clio-coder.cmd" : "clio-coder");
|
|
178
|
+
try {
|
|
179
|
+
await access(file, constants.X_OK);
|
|
180
|
+
if ((await stat(file)).isFile()) return { file: await realpath(file), prefix: [] };
|
|
181
|
+
} catch {
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
throw new AppProblem("unavailable", "Build the checkout CLI or set CLIO_CODER_WEB_CLI to its absolute path.");
|
|
185
|
+
}
|
|
186
|
+
function signalRecordedChild(pid, birthToken, signal) {
|
|
187
|
+
if (!Number.isSafeInteger(pid) || pid <= 0 || birthToken.startsWith("pid-") || processBirthToken(pid) !== birthToken || !processAlive(pid))
|
|
188
|
+
return false;
|
|
189
|
+
try {
|
|
190
|
+
process.kill(process.platform === "win32" ? pid : -pid, signal);
|
|
191
|
+
return true;
|
|
192
|
+
} catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async function childRunning(pid) {
|
|
197
|
+
if (!processAlive(pid)) return false;
|
|
198
|
+
if (process.platform !== "linux") return true;
|
|
199
|
+
try {
|
|
200
|
+
const value = await readFile(`/proc/${pid}/stat`, "utf8");
|
|
201
|
+
return !["Z", "X"].includes(value.slice(value.lastIndexOf(")") + 2).split(" ")[0] ?? "");
|
|
202
|
+
} catch {
|
|
203
|
+
return processAlive(pid);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async function runClioCommand(command, cwd, env = process.env) {
|
|
207
|
+
const plan = commandPlan(command, cwd);
|
|
208
|
+
if (!isAbsolute(cwd) || await realpath(cwd) !== cwd || !(await stat(cwd)).isDirectory())
|
|
209
|
+
throw new AppProblem("validation", "CLI workspace must be an existing canonical absolute directory.");
|
|
210
|
+
const executable = await resolveClioCommand(env);
|
|
211
|
+
const child = spawn(executable.file, [...executable.prefix, ...plan.argv], {
|
|
212
|
+
cwd,
|
|
213
|
+
env,
|
|
214
|
+
shell: false,
|
|
215
|
+
detached: process.platform !== "win32",
|
|
216
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
217
|
+
});
|
|
218
|
+
const birthToken = child.pid ? processBirthToken(child.pid) : "";
|
|
219
|
+
return { child, birthToken };
|
|
220
|
+
}
|
|
221
|
+
function stopClioCommand(child, birthToken, signal) {
|
|
222
|
+
if (!child.pid || child.exitCode !== null || child.signalCode !== null) return false;
|
|
223
|
+
if (birthToken && !birthToken.startsWith("pid-") && process.platform !== "win32")
|
|
224
|
+
return signalRecordedChild(child.pid, birthToken, signal);
|
|
225
|
+
return child.kill(signal);
|
|
226
|
+
}
|
|
227
|
+
function browserCommand(url, platform = process.platform) {
|
|
228
|
+
const parsed = new URL(url);
|
|
229
|
+
if (parsed.protocol !== "http:" || parsed.hostname !== "127.0.0.1" || !parsed.port || parsed.username || parsed.password)
|
|
230
|
+
throw new Error("The browser can only open this app's loopback HTTP URL.");
|
|
231
|
+
if (platform === "linux") return { file: "xdg-open", argv: [url] };
|
|
232
|
+
if (platform === "darwin") return { file: "open", argv: [url] };
|
|
233
|
+
throw new Error("Automatic browser opening is supported on Linux and macOS. Open the printed URL in your browser.");
|
|
234
|
+
}
|
|
235
|
+
async function openBrowser(url, env = process.env) {
|
|
236
|
+
const command = browserCommand(url);
|
|
237
|
+
const child = spawn(command.file, command.argv, { env, shell: false, stdio: "ignore" });
|
|
238
|
+
await new Promise((resolve2, reject) => {
|
|
239
|
+
const timer = setTimeout(() => {
|
|
240
|
+
child.kill("SIGKILL");
|
|
241
|
+
}, 1e4);
|
|
242
|
+
child.once("error", (error) => {
|
|
243
|
+
clearTimeout(timer);
|
|
244
|
+
reject(error);
|
|
245
|
+
});
|
|
246
|
+
child.once("close", (code) => {
|
|
247
|
+
clearTimeout(timer);
|
|
248
|
+
if (code === 0) resolve2();
|
|
249
|
+
else reject(new Error("The desktop could not open a browser. Open the printed URL manually."));
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function serviceCommand(action, unit, unitFile) {
|
|
254
|
+
if (!/^clio-coder-web-[a-f0-9]{12}\.service$/.test(unit) || !isAbsolute(unitFile) || !unitFile.endsWith(`/${unit}`))
|
|
255
|
+
throw new Error("Invalid Clio background service identity.");
|
|
256
|
+
if (action === "reload") return ["--user", "daemon-reload"];
|
|
257
|
+
if (action === "show")
|
|
258
|
+
return ["--user", "show", unit, "--property=FragmentPath,ActiveState,UnitFileState,MainPID,Result"];
|
|
259
|
+
if (action === "enable") return ["--user", "enable", "--now", "--", unitFile];
|
|
260
|
+
if (action === "disable") return ["--user", "disable", "--now", "--", unit];
|
|
261
|
+
return ["--user", action, "--", unit];
|
|
262
|
+
}
|
|
263
|
+
async function controlService(action, unit, unitFile, env = process.env) {
|
|
264
|
+
if (process.platform !== "linux")
|
|
265
|
+
throw new Error("Background setup currently requires Linux with a systemd user session.");
|
|
266
|
+
const child = spawn("systemctl", serviceCommand(action, unit, unitFile), {
|
|
267
|
+
env,
|
|
268
|
+
shell: false,
|
|
269
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
270
|
+
});
|
|
271
|
+
return new Promise((resolve2, reject) => {
|
|
272
|
+
const output = [];
|
|
273
|
+
let bytes = 0, exceeded = false;
|
|
274
|
+
const timer = setTimeout(() => {
|
|
275
|
+
exceeded = true;
|
|
276
|
+
child.kill("SIGKILL");
|
|
277
|
+
}, 2e4);
|
|
278
|
+
const collect = (chunk, stdout) => {
|
|
279
|
+
bytes += chunk.length;
|
|
280
|
+
if (bytes > 65536) {
|
|
281
|
+
exceeded = true;
|
|
282
|
+
child.kill("SIGKILL");
|
|
283
|
+
} else if (stdout) output.push(chunk);
|
|
284
|
+
};
|
|
285
|
+
child.stdout.on("data", (chunk) => collect(chunk, true));
|
|
286
|
+
child.stderr.on("data", (chunk) => collect(chunk, false));
|
|
287
|
+
child.once("error", () => {
|
|
288
|
+
clearTimeout(timer);
|
|
289
|
+
reject(new Error("systemctl is unavailable. Background setup requires a running Linux systemd user session."));
|
|
290
|
+
});
|
|
291
|
+
child.once("close", (code) => {
|
|
292
|
+
clearTimeout(timer);
|
|
293
|
+
if (code === 0 && !exceeded) resolve2(Buffer.concat(output).toString("utf8"));
|
|
294
|
+
else
|
|
295
|
+
reject(new Error(`Background service ${action} failed. Check the user service manager and journal for ${unit}.`));
|
|
296
|
+
});
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// apps/clio-coder-web/server/launcher/background-config.ts
|
|
301
|
+
init_esm_shims();
|
|
302
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
303
|
+
import { constants as constants2 } from "node:fs";
|
|
304
|
+
import { open, realpath as realpath2 } from "node:fs/promises";
|
|
305
|
+
import { isAbsolute as isAbsolute2, join as join2 } from "node:path";
|
|
306
|
+
var path = typebox_exports.String({ minLength: 1, maxLength: 4096 });
|
|
307
|
+
var BackgroundConfig = typebox_exports.Object(
|
|
308
|
+
{
|
|
309
|
+
v: typebox_exports.Literal(1),
|
|
310
|
+
port: typebox_exports.Integer({ minimum: 1, maximum: 65535 }),
|
|
311
|
+
token: typebox_exports.String({ pattern: "^[A-Za-z0-9_-]{43}$" }),
|
|
312
|
+
roots: typebox_exports.Object({ config: path, data: path, state: path, cache: path }, { additionalProperties: false }),
|
|
313
|
+
packageRoot: path,
|
|
314
|
+
path: typebox_exports.String({ maxLength: 8192 }),
|
|
315
|
+
launch: typebox_exports.Object(
|
|
316
|
+
{ node: path, loader: typebox_exports.Optional(path), entry: path, icon: typebox_exports.Optional(path) },
|
|
317
|
+
{ additionalProperties: false }
|
|
318
|
+
),
|
|
319
|
+
desktopPrefix: path
|
|
320
|
+
},
|
|
321
|
+
{ additionalProperties: false }
|
|
322
|
+
);
|
|
323
|
+
function backgroundPaths(directory) {
|
|
324
|
+
if (!isAbsolute2(directory)) throw new Error("The background directory must be absolute.");
|
|
325
|
+
const id = createHash("sha256").update(directory).digest("hex").slice(0, 12);
|
|
326
|
+
const unit = `clio-coder-web-${id}.service`;
|
|
327
|
+
return {
|
|
328
|
+
directory,
|
|
329
|
+
config: join2(directory, "server.json"),
|
|
330
|
+
unit,
|
|
331
|
+
unitFile: join2(directory, unit),
|
|
332
|
+
manifest: join2(directory, "owner.json")
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
async function readBackgroundConfig(file) {
|
|
336
|
+
const handle = await open(file, constants2.O_RDONLY | constants2.O_NOFOLLOW);
|
|
337
|
+
try {
|
|
338
|
+
const stat2 = await handle.stat();
|
|
339
|
+
if (!stat2.isFile() || stat2.nlink !== 1 || stat2.size > 16384 || (stat2.mode & 63) !== 0 || process.getuid && stat2.uid !== process.getuid())
|
|
340
|
+
throw new Error("Background credentials must be a private regular file owned by this user.");
|
|
341
|
+
const value = JSON.parse(await handle.readFile("utf8"));
|
|
342
|
+
if (!value_exports.Check(BackgroundConfig, value) || ![...Object.values(value.roots), value.packageRoot, value.desktopPrefix, ...Object.values(value.launch)].every(
|
|
343
|
+
isAbsolute2
|
|
344
|
+
))
|
|
345
|
+
throw new Error("Background configuration is invalid. No settings were applied.");
|
|
346
|
+
return value;
|
|
347
|
+
} finally {
|
|
348
|
+
await handle.close();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
async function newBackgroundConfig(port, launch, desktopPrefix, env = process.env) {
|
|
352
|
+
const config = {
|
|
353
|
+
v: 1,
|
|
354
|
+
port,
|
|
355
|
+
token: randomBytes(32).toString("base64url"),
|
|
356
|
+
roots: resolveClioDirs(),
|
|
357
|
+
packageRoot: resolvePackageRoot(),
|
|
358
|
+
path: env.PATH ?? "",
|
|
359
|
+
launch: {
|
|
360
|
+
node: await realpath2(launch.node),
|
|
361
|
+
...launch.loader ? { loader: await realpath2(launch.loader) } : {},
|
|
362
|
+
...launch.icon ? { icon: await realpath2(launch.icon) } : {},
|
|
363
|
+
entry: await realpath2(launch.entry)
|
|
364
|
+
},
|
|
365
|
+
desktopPrefix
|
|
366
|
+
};
|
|
367
|
+
if (!value_exports.Check(BackgroundConfig, config) || !isAbsolute2(desktopPrefix))
|
|
368
|
+
throw new Error("Invalid background setup options.");
|
|
369
|
+
return config;
|
|
370
|
+
}
|
|
371
|
+
function backgroundEnvironment(config) {
|
|
372
|
+
return {
|
|
373
|
+
PATH: config.path,
|
|
374
|
+
CLIO_CODER_PACKAGE_ROOT: config.packageRoot,
|
|
375
|
+
CLIO_CODER_CONFIG_DIR: config.roots.config,
|
|
376
|
+
CLIO_CODER_DATA_DIR: config.roots.data,
|
|
377
|
+
CLIO_CODER_STATE_DIR: config.roots.state,
|
|
378
|
+
CLIO_CODER_CACHE_DIR: config.roots.cache
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
function systemdArgument(value) {
|
|
382
|
+
if ([...value].some((char) => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127))
|
|
383
|
+
throw new Error("Service paths cannot contain control characters.");
|
|
384
|
+
return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/%/g, "%%").replace(/\$/g, "$$$$")}"`;
|
|
385
|
+
}
|
|
386
|
+
function backgroundUnit(config, directory) {
|
|
387
|
+
const argv = [
|
|
388
|
+
config.launch.node,
|
|
389
|
+
...config.launch.loader ? ["--import", config.launch.loader] : [],
|
|
390
|
+
config.launch.entry,
|
|
391
|
+
"--persistent",
|
|
392
|
+
backgroundPaths(directory).config
|
|
393
|
+
];
|
|
394
|
+
return [
|
|
395
|
+
"[Unit]",
|
|
396
|
+
"Description=Clio Coder web application",
|
|
397
|
+
"StartLimitIntervalSec=30",
|
|
398
|
+
"StartLimitBurst=5",
|
|
399
|
+
"",
|
|
400
|
+
"[Service]",
|
|
401
|
+
"Type=simple",
|
|
402
|
+
`ExecStart=${argv.map(systemdArgument).join(" ")}`,
|
|
403
|
+
"Restart=on-failure",
|
|
404
|
+
"RestartSec=1",
|
|
405
|
+
"KillMode=control-group",
|
|
406
|
+
"TimeoutStopSec=15",
|
|
407
|
+
"UMask=0077",
|
|
408
|
+
"",
|
|
409
|
+
"[Install]",
|
|
410
|
+
"WantedBy=default.target",
|
|
411
|
+
""
|
|
412
|
+
].join("\n");
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// apps/clio-coder-web/server/launcher/background.ts
|
|
416
|
+
var hash = (value) => createHash2("sha256").update(value).digest("hex");
|
|
417
|
+
async function owned(directory) {
|
|
418
|
+
const files = backgroundPaths(directory);
|
|
419
|
+
const manifest = await contents(files.manifest), configText = await contents(files.config), unit = await contents(files.unitFile);
|
|
420
|
+
if (manifest === null && configText === null && unit === null) return { status: "absent", files };
|
|
421
|
+
try {
|
|
422
|
+
const owner = JSON.parse(manifest ?? "null");
|
|
423
|
+
if (owner?.v !== 1 || owner?.owner !== "clio-coder-web-background" || !configText || !unit || owner.config !== hash(configText) || owner.unit !== hash(unit))
|
|
424
|
+
throw new Error("Ownership mismatch");
|
|
425
|
+
const config = await readBackgroundConfig(files.config);
|
|
426
|
+
if (unit !== backgroundUnit(config, directory)) throw new Error("Unit does not match configuration");
|
|
427
|
+
return { status: "installed", files, config };
|
|
428
|
+
} catch {
|
|
429
|
+
throw new Error(
|
|
430
|
+
"Background files are incomplete, modified or not private; ownership could not be verified. No files were changed."
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
async function serviceState(files, control) {
|
|
435
|
+
const text = await control("show", files.unit, files.unitFile);
|
|
436
|
+
const values = Object.fromEntries(
|
|
437
|
+
text.trim().split("\n").map((line) => {
|
|
438
|
+
const index = line.indexOf("=");
|
|
439
|
+
return [line.slice(0, index), line.slice(index + 1)];
|
|
440
|
+
})
|
|
441
|
+
);
|
|
442
|
+
if (values.FragmentPath && await realpath3(values.FragmentPath).catch(() => "") !== files.unitFile)
|
|
443
|
+
throw new Error("A different service uses this name; it will not be changed.");
|
|
444
|
+
return values;
|
|
445
|
+
}
|
|
446
|
+
async function desktopOwned(config, directory) {
|
|
447
|
+
const state = await launcherStatus(config.desktopPrefix);
|
|
448
|
+
if (state.status === "absent") return false;
|
|
449
|
+
if (state.status === "conflict" || await contents(state.entry) !== desktopEntry({ ...config.launch, background: directory }))
|
|
450
|
+
throw new Error(
|
|
451
|
+
"The desktop entry belongs to another launch mode or was changed; it will not be replaced or removed."
|
|
452
|
+
);
|
|
453
|
+
return true;
|
|
454
|
+
}
|
|
455
|
+
async function installBackground(directory, proposed, control = controlService, ready = waitForLocalServer) {
|
|
456
|
+
if (process.platform !== "linux")
|
|
457
|
+
throw new Error("Background setup currently requires Linux with a systemd user session.");
|
|
458
|
+
await mkdir(directory, { recursive: true, mode: 448 });
|
|
459
|
+
const info = await lstat(directory);
|
|
460
|
+
if (!info.isDirectory() || await realpath3(directory) !== directory || (info.mode & 63) !== 0 || process.getuid && info.uid !== process.getuid())
|
|
461
|
+
throw new Error("Background directory must be a private, canonical directory owned by this user.");
|
|
462
|
+
const state = await owned(directory), files = state.files;
|
|
463
|
+
await serviceState(files, control);
|
|
464
|
+
const config = state.status === "installed" ? state.config : proposed;
|
|
465
|
+
if (state.status === "installed" && (config.port !== proposed.port || config.desktopPrefix !== proposed.desktopPrefix))
|
|
466
|
+
throw new Error(
|
|
467
|
+
"Background setup already has a stable port and desktop location. Uninstall it before changing them."
|
|
468
|
+
);
|
|
469
|
+
if (state.status === "installed" && (config.packageRoot !== proposed.packageRoot || config.launch.node !== proposed.launch.node || config.launch.entry !== proposed.launch.entry || config.launch.loader !== proposed.launch.loader))
|
|
470
|
+
throw new Error(
|
|
471
|
+
"Background setup belongs to another installation. Run web background uninstall before installing this one."
|
|
472
|
+
);
|
|
473
|
+
const desktop = await launcherStatus(config.desktopPrefix);
|
|
474
|
+
if (desktop.status !== "absent") await desktopOwned(config, directory);
|
|
475
|
+
if (state.status === "absent") {
|
|
476
|
+
const configText = `${JSON.stringify(config, null, 2)}
|
|
477
|
+
`, unit = backgroundUnit(config, directory);
|
|
478
|
+
const staging = await mkdtemp(join3(dirname(directory), ".clio-coder-background-"));
|
|
479
|
+
try {
|
|
480
|
+
await writeFile(join3(staging, "server.json"), configText, { flag: "wx", mode: 384 });
|
|
481
|
+
await readBackgroundConfig(join3(staging, "server.json"));
|
|
482
|
+
await writeFile(join3(staging, files.unit), unit, { flag: "wx", mode: 384 });
|
|
483
|
+
await writeFile(
|
|
484
|
+
join3(staging, "owner.json"),
|
|
485
|
+
`${JSON.stringify({ v: 1, owner: "clio-coder-web-background", config: hash(configText), unit: hash(unit) })}
|
|
486
|
+
`,
|
|
487
|
+
{ flag: "wx", mode: 384 }
|
|
488
|
+
);
|
|
489
|
+
await rename(staging, directory);
|
|
490
|
+
} finally {
|
|
491
|
+
await rm(staging, { recursive: true, force: true });
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
await control("enable", files.unit, files.unitFile);
|
|
495
|
+
await ready(config.port, config.token);
|
|
496
|
+
await installLauncher(config.desktopPrefix, { ...config.launch, background: directory });
|
|
497
|
+
return { status: "installed", unit: files.unit, origin: `http://127.0.0.1:${config.port}`, directory };
|
|
498
|
+
}
|
|
499
|
+
async function backgroundStatus(directory, control = controlService, ready = localServerReady) {
|
|
500
|
+
const state = await owned(directory);
|
|
501
|
+
if (state.status === "absent") return { status: "absent", directory };
|
|
502
|
+
const service = await serviceState(state.files, control);
|
|
503
|
+
return {
|
|
504
|
+
status: "installed",
|
|
505
|
+
directory,
|
|
506
|
+
unit: state.files.unit,
|
|
507
|
+
port: state.config.port,
|
|
508
|
+
origin: `http://127.0.0.1:${state.config.port}`,
|
|
509
|
+
active: service.ActiveState ?? "unknown",
|
|
510
|
+
enabled: service.UnitFileState ?? "unknown",
|
|
511
|
+
pid: Number(service.MainPID) || null,
|
|
512
|
+
ready: await ready(state.config.port, state.config.token),
|
|
513
|
+
desktop: await desktopOwned(state.config, directory) ? "installed" : "absent"
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
async function startBackground(directory, control = controlService, ready = waitForLocalServer) {
|
|
517
|
+
const state = await owned(directory);
|
|
518
|
+
if (state.status !== "installed")
|
|
519
|
+
throw new Error("Background service is not installed. Run background install first.");
|
|
520
|
+
await serviceState(state.files, control);
|
|
521
|
+
await control("start", state.files.unit, state.files.unitFile);
|
|
522
|
+
await ready(state.config.port, state.config.token);
|
|
523
|
+
return `http://127.0.0.1:${state.config.port}/#token=${state.config.token}`;
|
|
524
|
+
}
|
|
525
|
+
async function tryStartBackground(directory, packageRoot, control = controlService, ready = waitForLocalServer) {
|
|
526
|
+
const state = await owned(directory);
|
|
527
|
+
if (state.status === "absent") return void 0;
|
|
528
|
+
if (await realpath3(state.config.packageRoot) !== await realpath3(packageRoot))
|
|
529
|
+
throw new Error(
|
|
530
|
+
"Background setup belongs to another installation. Use that installation or run web without --reuse-background."
|
|
531
|
+
);
|
|
532
|
+
return startBackground(directory, control, ready);
|
|
533
|
+
}
|
|
534
|
+
async function stopBackground(directory, control = controlService) {
|
|
535
|
+
const state = await owned(directory);
|
|
536
|
+
if (state.status === "absent") return;
|
|
537
|
+
await serviceState(state.files, control);
|
|
538
|
+
await control("stop", state.files.unit, state.files.unitFile);
|
|
539
|
+
}
|
|
540
|
+
async function uninstallBackground(directory, control = controlService) {
|
|
541
|
+
const state = await owned(directory);
|
|
542
|
+
if (state.status === "absent") return { status: "absent", directory };
|
|
543
|
+
await serviceState(state.files, control);
|
|
544
|
+
const desktop = await desktopOwned(state.config, directory);
|
|
545
|
+
await control("disable", state.files.unit, state.files.unitFile);
|
|
546
|
+
if (desktop) await uninstallLauncher(state.config.desktopPrefix);
|
|
547
|
+
for (const file of [state.files.manifest, state.files.unitFile, state.files.config]) await unlink(file);
|
|
548
|
+
await control("reload", state.files.unit, state.files.unitFile);
|
|
549
|
+
await rmdir(directory).catch((error) => {
|
|
550
|
+
if (error.code !== "ENOTEMPTY") throw error;
|
|
551
|
+
});
|
|
552
|
+
return { status: "absent", directory };
|
|
553
|
+
}
|
|
554
|
+
async function backgroundRemoval(directory, packageRoot, control = controlService) {
|
|
555
|
+
const state = await owned(directory);
|
|
556
|
+
if (state.status === "absent") return null;
|
|
557
|
+
if (await realpath3(state.config.packageRoot) !== await realpath3(packageRoot))
|
|
558
|
+
throw new Error("Background service belongs to another installation; uninstall stopped before removing Clio state.");
|
|
559
|
+
await serviceState(state.files, control);
|
|
560
|
+
await desktopOwned(state.config, directory);
|
|
561
|
+
return { path: directory, remove: () => uninstallBackground(directory, control) };
|
|
562
|
+
}
|
|
563
|
+
async function background(args, launch) {
|
|
564
|
+
if (process.platform !== "linux")
|
|
565
|
+
throw new Error("Background setup currently requires Linux with a systemd user session.");
|
|
566
|
+
const { values, positionals } = parseArgs({
|
|
567
|
+
args,
|
|
568
|
+
allowPositionals: true,
|
|
569
|
+
options: {
|
|
570
|
+
directory: { type: "string" },
|
|
571
|
+
prefix: { type: "string" },
|
|
572
|
+
port: { type: "string" },
|
|
573
|
+
open: { type: "boolean" }
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
const command = positionals[0];
|
|
577
|
+
if (positionals.length !== 1 || !["install", "status", "start", "open", "stop", "uninstall"].includes(command ?? ""))
|
|
578
|
+
throw new Error(
|
|
579
|
+
"Usage: background install|status|start|open|stop|uninstall [--directory <absolute private directory>] [install: --port <port> --prefix <XDG data directory> --open]"
|
|
580
|
+
);
|
|
581
|
+
if (command !== "install" && (values.prefix !== void 0 || values.port !== void 0 || values.open !== void 0))
|
|
582
|
+
throw new Error("--port, --prefix and --open apply to background install only.");
|
|
583
|
+
const directory = values.directory ?? join3(resolveClioDirs().state, "web/background");
|
|
584
|
+
if (!isAbsolute3(directory) || resolve(directory) !== directory)
|
|
585
|
+
throw new Error("--directory must be an absolute normalized path.");
|
|
586
|
+
if (command === "status") {
|
|
587
|
+
console.log(JSON.stringify(await backgroundStatus(directory), null, 2));
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
if (command === "uninstall") {
|
|
591
|
+
console.log(JSON.stringify(await uninstallBackground(directory), null, 2));
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
if (command === "stop") {
|
|
595
|
+
await stopBackground(directory);
|
|
596
|
+
console.log("Clio background service stopped. It remains enabled for the next login.");
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
if (command === "install") {
|
|
600
|
+
const port = Number(values.port ?? "4317");
|
|
601
|
+
if (!/^\d+$/.test(values.port ?? "4317") || !Number.isInteger(port) || port < 1 || port > 65535)
|
|
602
|
+
throw new Error("--port must be an integer from 1 to 65535.");
|
|
603
|
+
const prefix = values.prefix ?? (process.env.XDG_DATA_HOME && isAbsolute3(process.env.XDG_DATA_HOME) ? process.env.XDG_DATA_HOME : join3(homedir(), ".local/share"));
|
|
604
|
+
const config = await newBackgroundConfig(port, launch, prefix);
|
|
605
|
+
console.log(JSON.stringify(await installBackground(directory, config), null, 2));
|
|
606
|
+
console.log(
|
|
607
|
+
"Background sessions use Clio's saved credentials. If a target key exists only in your terminal environment, save it with clio-coder auth login <target> before starting a conversation."
|
|
608
|
+
);
|
|
609
|
+
if (!values.open) return;
|
|
610
|
+
}
|
|
611
|
+
const url = await startBackground(directory);
|
|
612
|
+
if (command === "start") console.log(`Clio background service is ready at ${new URL(url).origin}.`);
|
|
613
|
+
else await openBrowser(url);
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
export {
|
|
617
|
+
commandPlan,
|
|
618
|
+
startDomainWorker,
|
|
619
|
+
startAcpChild,
|
|
620
|
+
signalRecordedChild,
|
|
621
|
+
childRunning,
|
|
622
|
+
runClioCommand,
|
|
623
|
+
stopClioCommand,
|
|
624
|
+
openBrowser,
|
|
625
|
+
controlService,
|
|
626
|
+
readBackgroundConfig,
|
|
627
|
+
backgroundEnvironment,
|
|
628
|
+
installBackground,
|
|
629
|
+
backgroundStatus,
|
|
630
|
+
startBackground,
|
|
631
|
+
tryStartBackground,
|
|
632
|
+
stopBackground,
|
|
633
|
+
uninstallBackground,
|
|
634
|
+
backgroundRemoval,
|
|
635
|
+
background
|
|
636
|
+
};
|
|
637
|
+
//# sourceMappingURL=chunk-WFTSK7N3.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
isSessionEntry
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6R5MBXBJ.js";
|
|
5
5
|
import {
|
|
6
6
|
init_esm_shims
|
|
7
7
|
} from "./chunk-ECBHH7LU.js";
|
|
@@ -392,4 +392,4 @@ export {
|
|
|
392
392
|
foldSessionTaskHistory,
|
|
393
393
|
createTaskBoardStore
|
|
394
394
|
};
|
|
395
|
-
//# sourceMappingURL=chunk-
|
|
395
|
+
//# sourceMappingURL=chunk-WJWNZXRM.js.map
|