@cryptiklemur/lattice 5.10.1-beta.1 → 5.12.0
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/dist/client/assets/{angular-html-D6m09EG8.js → angular-html-u7-FkTHq.js} +1 -1
- package/dist/client/assets/{angular-ts-BBq8Hbdf.js → angular-ts-BE8DugAt.js} +1 -1
- package/dist/client/assets/apl-CtfeVeo7.js +1 -0
- package/dist/client/assets/{apl-xC8C0X93.js → apl-vwkcGC98.js} +1 -1
- package/dist/client/assets/asciiarmor-D9t2jc8I.js +1 -0
- package/dist/client/assets/asn1-G8L642Gf.js +1 -0
- package/dist/client/assets/asterisk-DE-h77IU.js +1 -0
- package/dist/client/assets/{astro-vbKausOH.js → astro-D_KXdsxq.js} +1 -1
- package/dist/client/assets/{blade-DioaAET-.js → blade-CLWQA5YQ.js} +1 -1
- package/dist/client/assets/brainfuck-xriqAMlA.js +1 -0
- package/dist/client/assets/{bsl-BRmzGEWg.js → bsl-DI2KOR3D.js} +1 -1
- package/dist/client/assets/{c-B91mlIdk.js → c-CMDgDy3h.js} +1 -1
- package/dist/client/assets/{cairo-CaIu88t6.js → cairo-BLW1-yrm.js} +1 -1
- package/dist/client/assets/clike-DKxy6znE.js +1 -0
- package/dist/client/assets/clojure-BEypuZGB.js +1 -0
- package/dist/client/assets/cmake-CPOSjK1n.js +1 -0
- package/dist/client/assets/{cobol-DjlVBbCJ.js → cobol-9glAj1XI.js} +1 -1
- package/dist/client/assets/cobol-DeFy0o5A.js +1 -0
- package/dist/client/assets/{coffee-CPkMIjww.js → coffee-CB7sM38M.js} +1 -1
- package/dist/client/assets/coffeescript-DfLAkA9d.js +1 -0
- package/dist/client/assets/commonlisp-m15goeW5.js +1 -0
- package/dist/client/assets/{cpp-8m5goXOK.js → cpp-DvFsqT7C.js} +1 -1
- package/dist/client/assets/{crystal-CXphABcj.js → crystal-BSwdQRsq.js} +1 -1
- package/dist/client/assets/crystal-DkLvnJPs.js +1 -0
- package/dist/client/assets/css-D0210L0p.js +1 -0
- package/dist/client/assets/{css-CUkHaN8R.js → css-DtdGTk5D.js} +1 -1
- package/dist/client/assets/cypher-CasfIY7y.js +1 -0
- package/dist/client/assets/d-Cdn2AFnp.js +1 -0
- package/dist/client/assets/diff-CsQu64MQ.js +1 -0
- package/dist/client/assets/dist-7cPY2VfM.js +1 -0
- package/dist/client/assets/dist-B2Kmv4VP.js +12 -0
- package/dist/client/assets/dist-BDUIUwuP.js +1 -0
- package/dist/client/assets/dist-BGrEnzSd.js +2 -0
- package/dist/client/assets/dist-BOM8UXzu.js +9 -0
- package/dist/client/assets/dist-BqnKw1mg.js +1 -0
- package/dist/client/assets/dist-CH4ux_NV.js +1 -0
- package/dist/client/assets/dist-CVd9myNS.js +11 -0
- package/dist/client/assets/dist-Cbmj28I_.js +1 -0
- package/dist/client/assets/{dist-BssewFKQ.js → dist-DRbDL5Bd.js} +5 -5
- package/dist/client/assets/dist-DTdiyFXe.js +1 -0
- package/dist/client/assets/dist-DacYekBQ.js +1 -0
- package/dist/client/assets/dist-DpyvKyx4.js +1 -0
- package/dist/client/assets/dist-DrVgLaKG.js +1 -0
- package/dist/client/assets/dist-JAKtFuZo.js +1 -0
- package/dist/client/assets/dist-QgglNoJS.js +1 -0
- package/dist/client/assets/dist-VHLsuz98.js +1 -0
- package/dist/client/assets/dist-hfHNZoxo.js +1 -0
- package/dist/client/assets/dist-ntpDmu68.js +1 -0
- package/dist/client/assets/dist-ugNuVsVT.js +1 -0
- package/dist/client/assets/dockerfile-D4EJKg6d.js +1 -0
- package/dist/client/assets/dtd-Bm30AEAE.js +1 -0
- package/dist/client/assets/dylan-CXISgR5e.js +1 -0
- package/dist/client/assets/ebnf-B7L3kbeB.js +1 -0
- package/dist/client/assets/ecl-Bllw0JDE.js +1 -0
- package/dist/client/assets/{edge-DuRyfHAG.js → edge-ImH0CVa4.js} +1 -1
- package/dist/client/assets/eiffel-pn5EnCbJ.js +1 -0
- package/dist/client/assets/{elixir-Kh4tHsPU.js → elixir-BTA0pgnK.js} +1 -1
- package/dist/client/assets/elm-BW9HFysA.js +1 -0
- package/dist/client/assets/{elm-DP5BBq5g.js → elm-D8iE_p48.js} +1 -1
- package/dist/client/assets/{erb-CPwtAg8p.js → erb-DdN-YVLk.js} +1 -1
- package/dist/client/assets/{erlang-LvhGhZI3.js → erlang-CmwBywR-.js} +1 -1
- package/dist/client/assets/erlang-Ctl5tqvi.js +1 -0
- package/dist/client/assets/factor-B2iqLyvO.js +1 -0
- package/dist/client/assets/fcl-CHzzWDH7.js +1 -0
- package/dist/client/assets/forth-jxkuuQBT.js +1 -0
- package/dist/client/assets/fortran-T8ZhhRUi.js +1 -0
- package/dist/client/assets/{fortran-fixed-form-BXvkHMbK.js → fortran-fixed-form-TvXpM4F9.js} +1 -1
- package/dist/client/assets/{fsharp-uxIU8dwY.js → fsharp-CS-Pkz57.js} +1 -1
- package/dist/client/assets/gas-C6kAdB_8.js +1 -0
- package/dist/client/assets/{gdresource-DkI-mZL2.js → gdresource-CxeZzfg7.js} +1 -1
- package/dist/client/assets/gherkin-DKN-CEiy.js +1 -0
- package/dist/client/assets/{git-commit-a3TktZ3A.js → git-commit-Da7bdZ3Y.js} +1 -1
- package/dist/client/assets/{git-rebase-D7Y7VykT.js → git-rebase-D3qSdkTJ.js} +1 -1
- package/dist/client/assets/{glimmer-js-BUvQ43T_.js → glimmer-js-7YCCLNwO.js} +1 -1
- package/dist/client/assets/{glimmer-ts-DJuVunYJ.js → glimmer-ts-CDdu8Qd8.js} +1 -1
- package/dist/client/assets/{glsl-BiMffKEF.js → glsl-_nrZTA3g.js} +1 -1
- package/dist/client/assets/{graphql-DVujBgqT.js → graphql-7veyvoHL.js} +1 -1
- package/dist/client/assets/groovy-DUIj4WPu.js +1 -0
- package/dist/client/assets/{hack-3q6XAaux.js → hack-AP9w659y.js} +1 -1
- package/dist/client/assets/{haml-2tZ0yjTq.js → haml-CxFgqevH.js} +1 -1
- package/dist/client/assets/{handlebars-BXM_86F7.js → handlebars-C0QMthrf.js} +1 -1
- package/dist/client/assets/haskell-X-rGCpr_.js +1 -0
- package/dist/client/assets/haxe-C90FcyDF.js +1 -0
- package/dist/client/assets/{html-DD3u231D.js → html-BffHwMvJ.js} +1 -1
- package/dist/client/assets/{html-derivative-CsugPCRn.js → html-derivative-CYRBBGvG.js} +1 -1
- package/dist/client/assets/http-BKtm9NwN.js +1 -0
- package/dist/client/assets/{http-YDBoN0g2.js → http-Bde-CNYF.js} +1 -1
- package/dist/client/assets/{hurl-BK0VLIzz.js → hurl-CTqau0Ep.js} +1 -1
- package/dist/client/assets/{hxml-Bdi_kWeE.js → hxml-CGjKtqGT.js} +1 -1
- package/dist/client/assets/idl-SlIGMRhH.js +1 -0
- package/dist/client/assets/index-BBNq6BrR.js +581 -0
- package/dist/client/assets/index-BqaEsnA3.css +2 -0
- package/dist/client/assets/{java-DaXWRTJ3.js → java-Dj9ZhWOm.js} +1 -1
- package/dist/client/assets/javascript-C1CwuCil.js +1 -0
- package/dist/client/assets/{javascript-D8MAdpSq.js → javascript-CbKvVdrj.js} +1 -1
- package/dist/client/assets/{jinja-C4W9K1GV.js → jinja-uJK6XW_T.js} +1 -1
- package/dist/client/assets/{jison-DVxjxSXc.js → jison-CFAwedSj.js} +1 -1
- package/dist/client/assets/{json-yxP5bfsL.js → json-BqLSloeE.js} +1 -1
- package/dist/client/assets/{jsx-CVmtEgAW.js → jsx-D22SZoUE.js} +1 -1
- package/dist/client/assets/{julia-DYV2y1VD.js → julia-C0qhkiSe.js} +1 -1
- package/dist/client/assets/julia-DFoqV-f-.js +1 -0
- package/dist/client/assets/{just-DUWBFXa_.js → just-D2QihHiD.js} +1 -1
- package/dist/client/assets/{latex-D6BHuAKY.js → latex-B1ty0Fuq.js} +1 -1
- package/dist/client/assets/{liquid-pX028QHo.js → liquid-B7O5OkOo.js} +1 -1
- package/dist/client/assets/livescript-fL-Gs_1D.js +1 -0
- package/dist/client/assets/lua-DPWP-WrC.js +1 -0
- package/dist/client/assets/{lua-CrZQfADi.js → lua-DulTdQqC.js} +1 -1
- package/dist/client/assets/{marko-DPT7DbA-.js → marko-BtuEmp3R.js} +1 -1
- package/dist/client/assets/mathematica-uOx2kz-B.js +1 -0
- package/dist/client/assets/mbox-D92CR1CJ.js +1 -0
- package/dist/client/assets/{mdc-B440WyEa.js → mdc-C37zTB-h.js} +1 -1
- package/dist/client/assets/mirc-Ied37SW6.js +1 -0
- package/dist/client/assets/mllike-BTv2yt7Y.js +1 -0
- package/dist/client/assets/modelica-C4fphIHQ.js +1 -0
- package/dist/client/assets/mscgen-DW04m5e1.js +1 -0
- package/dist/client/assets/mumps-DTK8qu7D.js +1 -0
- package/dist/client/assets/{nextflow-DXxhyYjQ.js → nextflow-Cvs2ct76.js} +1 -1
- package/dist/client/assets/{nginx-Dk_bQ4Yj.js → nginx-stXqTRKc.js} +1 -1
- package/dist/client/assets/nginx-wuRafYuI.js +1 -0
- package/dist/client/assets/{nim-cPgQ4L-0.js → nim-CsJb3G7e.js} +1 -1
- package/dist/client/assets/nsis-BNo9jlCs.js +1 -0
- package/dist/client/assets/ntriples-CBC5Dh0s.js +1 -0
- package/dist/client/assets/octave-RJ0OJdYv.js +1 -0
- package/dist/client/assets/oz-C9wGyect.js +1 -0
- package/dist/client/assets/pascal-Ca57mNkb.js +1 -0
- package/dist/client/assets/{perl-CWFn5ond.js → perl-BWxc1iun.js} +1 -1
- package/dist/client/assets/perl-XipeIRz5.js +1 -0
- package/dist/client/assets/{php-CvNBGtIg.js → php-BdbNi3xs.js} +1 -1
- package/dist/client/assets/pig-57iTwSTb.js +1 -0
- package/dist/client/assets/powershell-Cl6BbjWW.js +1 -0
- package/dist/client/assets/properties-CUpF3p4b.js +1 -0
- package/dist/client/assets/protobuf-CSLtyyfN.js +1 -0
- package/dist/client/assets/{pug-F6vKbSyn.js → pug-8_aAnw9p.js} +1 -1
- package/dist/client/assets/pug-tUC5j5Z0.js +1 -0
- package/dist/client/assets/puppet-DSnog0v-.js +1 -0
- package/dist/client/assets/python-D0Kjo4_X.js +1 -0
- package/dist/client/assets/q-BzbOiVmg.js +1 -0
- package/dist/client/assets/{qml-DyOHEVPF.js → qml-B3ULUO-7.js} +1 -1
- package/dist/client/assets/{r-BZFfAnXR.js → r-CSrYo7D3.js} +1 -1
- package/dist/client/assets/r-dtKbSlFc.js +1 -0
- package/dist/client/assets/{razor-Cm_pxXFv.js → razor-C-E8kaVh.js} +1 -1
- package/dist/client/assets/{regexp-BRKWuKox.js → regexp-wINyl5st.js} +1 -1
- package/dist/client/assets/rpm-CyMjyX0l.js +1 -0
- package/dist/client/assets/{rst-BWcH6sbJ.js → rst-Dti6b94r.js} +1 -1
- package/dist/client/assets/{ruby-z5snpDGg.js → ruby-Bvljl0-N.js} +1 -1
- package/dist/client/assets/ruby-UpDQg5ds.js +1 -0
- package/dist/client/assets/sas-CaP3Rr5W.js +1 -0
- package/dist/client/assets/{sas-4jFEUh-p.js → sas-N3Cp8Utt.js} +1 -1
- package/dist/client/assets/scheme-CvqPEyph.js +1 -0
- package/dist/client/assets/{scss-BcID7jTl.js → scss-C7I5A9ky.js} +1 -1
- package/dist/client/assets/{shaderlab-C5utLNvK.js → shaderlab-Don9AZBL.js} +1 -1
- package/dist/client/assets/shell-BoHxI50V.js +1 -0
- package/dist/client/assets/{shellscript-Bg8L6Od0.js → shellscript-BMf0mGDu.js} +1 -1
- package/dist/client/assets/{shellsession-CmQ9QPst.js → shellsession-DyP83RaE.js} +1 -1
- package/dist/client/assets/sieve-BgCheMmy.js +1 -0
- package/dist/client/assets/simple-mode-DfidwQJh.js +1 -0
- package/dist/client/assets/smalltalk-t7otg6ln.js +1 -0
- package/dist/client/assets/solr-BX0e8Kv9.js +1 -0
- package/dist/client/assets/{soy-BpFIyqxX.js → soy-7Mh3vuoD.js} +1 -1
- package/dist/client/assets/sparql-82OTHp9C.js +1 -0
- package/dist/client/assets/{sparql-nVt1Q8sD.js → sparql-BL6CgR-R.js} +1 -1
- package/dist/client/assets/spreadsheet-Cax4jzUy.js +1 -0
- package/dist/client/assets/sql-B-GCIxdb.js +1 -0
- package/dist/client/assets/{sql-0exFQL7-.js → sql-CBNknhge.js} +1 -1
- package/dist/client/assets/{stata-DvY92nam.js → stata-gSfr4MpA.js} +1 -1
- package/dist/client/assets/stex-4iL5nWyp.js +1 -0
- package/dist/client/assets/stylus-DTeSICO9.js +1 -0
- package/dist/client/assets/{surrealql-Cw-Jgrl5.js → surrealql-BLaWeDsw.js} +1 -1
- package/dist/client/assets/{svelte-BneErU22.js → svelte-DbdbTnjR.js} +1 -1
- package/dist/client/assets/swift-BG4IS1ba.js +1 -0
- package/dist/client/assets/tcl-Dv8h2fZf.js +1 -0
- package/dist/client/assets/{templ-Dnkqy_8n.js → templ-B3Gv7rrn.js} +1 -1
- package/dist/client/assets/{tex-BxdAJFqf.js → tex-Cr9iATVB.js} +1 -1
- package/dist/client/assets/textile-CivEdSk-.js +1 -0
- package/dist/client/assets/tiddlywiki-q6qX3kCQ.js +1 -0
- package/dist/client/assets/tiki-C5MPAC7Z.js +1 -0
- package/dist/client/assets/toml-4Y1WOP_Q.js +1 -0
- package/dist/client/assets/troff-cGxjhI7S.js +1 -0
- package/dist/client/assets/{ts-tags-oAz_19BM.js → ts-tags-BXP2IdpZ.js} +1 -1
- package/dist/client/assets/{tsx-BeHgXqoc.js → tsx-CjSRRT1y.js} +1 -1
- package/dist/client/assets/ttcn-cfg-1D-6UX0A.js +1 -0
- package/dist/client/assets/ttcn-p6dROhnp.js +1 -0
- package/dist/client/assets/turtle-CTAvtFCG.js +1 -0
- package/dist/client/assets/{twig-BcjKasxp.js → twig-BOSfeIcS.js} +1 -1
- package/dist/client/assets/{typescript-CCiyYFTo.js → typescript-B0IbyyXR.js} +1 -1
- package/dist/client/assets/vb-ClSsLMsa.js +1 -0
- package/dist/client/assets/vbscript-ekGC3C_A.js +1 -0
- package/dist/client/assets/velocity-n3KN2p0e.js +1 -0
- package/dist/client/assets/verilog-CK7xX9OB.js +1 -0
- package/dist/client/assets/vhdl-D-avMEiw.js +1 -0
- package/dist/client/assets/{vue-DVWxXyVo.js → vue-I0cA8DRe.js} +1 -1
- package/dist/client/assets/{vue-html-DbSydaRs.js → vue-html-CQZ8e6ga.js} +1 -1
- package/dist/client/assets/{vue-vine-CZjkcCsd.js → vue-vine-SbGWY_cx.js} +1 -1
- package/dist/client/assets/webidl-CvRo18Et.js +1 -0
- package/dist/client/assets/{xml-CFx3Qtzw.js → xml-YOHFVmNI.js} +1 -1
- package/dist/client/assets/xquery-DZdYf9U3.js +1 -0
- package/dist/client/assets/{xsl-D0kNsWrm.js → xsl-CUy0cPIN.js} +1 -1
- package/dist/client/assets/yacas-CzRJxclb.js +1 -0
- package/dist/client/assets/{yaml-afCjX0q1.js → yaml-lJdieEA8.js} +1 -1
- package/dist/client/assets/z80-CbgddEXB.js +1 -0
- package/dist/client/index.html +4 -2
- package/dist/client/sw.js +1 -1
- package/dist/server/analytics/engine.js +241 -241
- package/dist/server/assets.js +4 -4
- package/dist/server/auth/passphrase.js +13 -13
- package/dist/server/config.js +7 -7
- package/dist/server/daemon.js +93 -93
- package/dist/server/features/brainstorm.js +42 -42
- package/dist/server/features/ralph-loop.js +33 -33
- package/dist/server/features/scheduler.js +53 -53
- package/dist/server/features/specs.js +54 -54
- package/dist/server/features/sticky-notes.js +17 -17
- package/dist/server/features/superpowers.js +24 -24
- package/dist/server/handlers/analytics.js +1 -1
- package/dist/server/handlers/attachment.js +32 -32
- package/dist/server/handlers/bookmarks.js +4 -4
- package/dist/server/handlers/brainstorm.js +4 -4
- package/dist/server/handlers/chat.js +54 -54
- package/dist/server/handlers/editor.js +13 -13
- package/dist/server/handlers/fs.js +51 -51
- package/dist/server/handlers/hooks.js +20 -20
- package/dist/server/handlers/loop.js +6 -6
- package/dist/server/handlers/memory.js +44 -44
- package/dist/server/handlers/mesh.js +60 -60
- package/dist/server/handlers/notes.js +7 -7
- package/dist/server/handlers/plugins.js +174 -174
- package/dist/server/handlers/project-settings.js +26 -26
- package/dist/server/handlers/scheduler.js +6 -6
- package/dist/server/handlers/session.js +24 -24
- package/dist/server/handlers/settings.js +21 -21
- package/dist/server/handlers/skills.js +91 -91
- package/dist/server/handlers/specs.js +51 -28
- package/dist/server/handlers/terminal.js +13 -13
- package/dist/server/handlers/themes.js +21 -21
- package/dist/server/handlers/update.js +17 -17
- package/dist/server/identity.js +6 -6
- package/dist/server/index.js +111 -111
- package/dist/server/logger.js +1 -1
- package/dist/server/mesh/connector.js +78 -78
- package/dist/server/mesh/crypto.js +20 -20
- package/dist/server/mesh/discovery.js +14 -14
- package/dist/server/mesh/pairing.js +30 -30
- package/dist/server/mesh/peers.js +10 -10
- package/dist/server/mesh/proxy.js +14 -14
- package/dist/server/mesh/session-sync.js +23 -23
- package/dist/server/project/bookmarks.js +11 -11
- package/dist/server/project/context-breakdown.js +70 -70
- package/dist/server/project/file-browser.js +17 -17
- package/dist/server/project/project-files.js +68 -68
- package/dist/server/project/registry.js +10 -10
- package/dist/server/project/sdk-bridge.js +157 -157
- package/dist/server/project/session.js +201 -199
- package/dist/server/project/terminal.js +15 -15
- package/dist/server/project/warmup.js +38 -37
- package/dist/server/push.js +11 -11
- package/dist/server/runtime.js +1 -1
- package/dist/server/tls.js +15 -15
- package/dist/server/tui.js +15 -15
- package/dist/server/update-checker.js +21 -21
- package/dist/server/ws/broadcast.js +18 -18
- package/dist/server/ws/router.js +17 -17
- package/dist/shared/constants.js +8 -8
- package/package.json +7 -7
- package/dist/client/assets/index-Be0f1i2O.js +0 -659
- package/dist/client/assets/index-DlfI20Gn.css +0 -2
- /package/dist/client/assets/{abap-DOv5zRgd.js → abap-Cmj0Nk-Z.js} +0 -0
- /package/dist/client/assets/{actionscript-3-D_b0n2Ff.js → actionscript-3-BmgSZ1d1.js} +0 -0
- /package/dist/client/assets/{ada-C6m8O36S.js → ada-Ckd7rwvB.js} +0 -0
- /package/dist/client/assets/{andromeeda-LdzAHaKR.js → andromeeda-B6e4eNz0.js} +0 -0
- /package/dist/client/assets/{apache-CE7PmWoU.js → apache-Bvd3DK8C.js} +0 -0
- /package/dist/client/assets/{apex-DOfNfL0V.js → apex-BXVnN85f.js} +0 -0
- /package/dist/client/assets/{applescript-D4zGaScB.js → applescript-D5_ugV3G.js} +0 -0
- /package/dist/client/assets/{ara-DMoCP0pJ.js → ara-DAwwS7gl.js} +0 -0
- /package/dist/client/assets/{asciidoc-BkmPq932.js → asciidoc-CVdUBRc9.js} +0 -0
- /package/dist/client/assets/{asm-ClIKbvsu.js → asm-BqH8pPU3.js} +0 -0
- /package/dist/client/assets/{aurora-x-DTcNXZIS.js → aurora-x-pFdyTYcw.js} +0 -0
- /package/dist/client/assets/{awk-D1ZOsISX.js → awk-CEJ-HMbA.js} +0 -0
- /package/dist/client/assets/{ayu-dark-DpNcORnA.js → ayu-dark-DLXpThOR.js} +0 -0
- /package/dist/client/assets/{ayu-light-lHqf0ddo.js → ayu-light-B6l2JP-2.js} +0 -0
- /package/dist/client/assets/{ayu-mirage-Dji5RWiH.js → ayu-mirage-vFtAVFo8.js} +0 -0
- /package/dist/client/assets/{ballerina-H14_EqPr.js → ballerina-DEnG7B70.js} +0 -0
- /package/dist/client/assets/{bat-cyb3gF8B.js → bat-6aBJEOBU.js} +0 -0
- /package/dist/client/assets/{beancount-D84pBacF.js → beancount-Cr6BBraX.js} +0 -0
- /package/dist/client/assets/{berry-B29XeKK4.js → berry-C3dEYuh4.js} +0 -0
- /package/dist/client/assets/{bibtex-Hs7VvQaV.js → bibtex-C3fW7OVS.js} +0 -0
- /package/dist/client/assets/{bicep-CugTE5CQ.js → bicep-CXdZJn7c.js} +0 -0
- /package/dist/client/assets/{bird2-mieRHotO.js → bird2-DlY4aIej.js} +0 -0
- /package/dist/client/assets/{c3-Dx2gByXW.js → c3-DmNghKyz.js} +0 -0
- /package/dist/client/assets/{cadence-CCTSwj3w.js → cadence-CaHDavSY.js} +0 -0
- /package/dist/client/assets/{catppuccin-frappe-DQrU04q0.js → catppuccin-frappe-BCo5msEa.js} +0 -0
- /package/dist/client/assets/{catppuccin-latte-B_oiWZka.js → catppuccin-latte-CY8pJj9v.js} +0 -0
- /package/dist/client/assets/{catppuccin-macchiato-D8VB2qi4.js → catppuccin-macchiato-DWctQKOC.js} +0 -0
- /package/dist/client/assets/{catppuccin-mocha-5vkMJ1Mb.js → catppuccin-mocha-DpMRQFx4.js} +0 -0
- /package/dist/client/assets/{clarity-BbUNTPrg.js → clarity-cevzIuVI.js} +0 -0
- /package/dist/client/assets/{clojure-Bcw7lCta.js → clojure-G-6D-9ty.js} +0 -0
- /package/dist/client/assets/{cmake-DM0FE-T9.js → cmake-PULhkjs2.js} +0 -0
- /package/dist/client/assets/{codeowners-CBvEPOlS.js → codeowners-DzyHyLov.js} +0 -0
- /package/dist/client/assets/{codeql-CjS8Tp16.js → codeql-Cr3zMCSL.js} +0 -0
- /package/dist/client/assets/{common-lisp-BCx4dVK8.js → common-lisp-CTGb9Qda.js} +0 -0
- /package/dist/client/assets/{coq-Ddo7YIsR.js → coq-PtKNcji9.js} +0 -0
- /package/dist/client/assets/{csharp-Kzd7Ey2d.js → csharp-BzDNV1H8.js} +0 -0
- /package/dist/client/assets/{csv-DGwgERVJ.js → csv-sU8ECZ_Q.js} +0 -0
- /package/dist/client/assets/{cue-CMabdDG0.js → cue-BH1Sd4Rr.js} +0 -0
- /package/dist/client/assets/{cypher-CJUzJAhQ.js → cypher-B_iIZEtn.js} +0 -0
- /package/dist/client/assets/{d-BvLF4qGs.js → d-DZTmqtV9.js} +0 -0
- /package/dist/client/assets/{dark-plus-BMwvn5lx.js → dark-plus-Bo9qvWQL.js} +0 -0
- /package/dist/client/assets/{dart-DxXbDeKR.js → dart-CEnxLQnE.js} +0 -0
- /package/dist/client/assets/{dax-BvrCypuS.js → dax-CY3Yz5Am.js} +0 -0
- /package/dist/client/assets/{desktop-BEul_kAS.js → desktop-DEBmLZ-w.js} +0 -0
- /package/dist/client/assets/{diff-B7rhrwA5.js → diff-D4QDVkWF.js} +0 -0
- /package/dist/client/assets/{docker-9Zbx0dQX.js → docker-FkS9pOoC.js} +0 -0
- /package/dist/client/assets/{dotenv-C0epktMv.js → dotenv-DZoFwkHG.js} +0 -0
- /package/dist/client/assets/{dracula-CBD4ckb0.js → dracula-BO1nFC1t.js} +0 -0
- /package/dist/client/assets/{dracula-soft-CuGBZj_h.js → dracula-soft-BXEd2c9N.js} +0 -0
- /package/dist/client/assets/{dream-maker-D6UB367x.js → dream-maker-CYwhkcWt.js} +0 -0
- /package/dist/client/assets/{emacs-lisp-DFyMFAZA.js → emacs-lisp-C5on1_C4.js} +0 -0
- /package/dist/client/assets/{everforest-dark-BhFNrp2k.js → everforest-dark-cYrV3iFr.js} +0 -0
- /package/dist/client/assets/{everforest-light-CpIbZ9aT.js → everforest-light-BFYmMmB0.js} +0 -0
- /package/dist/client/assets/{fennel-CH1ohGYX.js → fennel-DOUQ-PJT.js} +0 -0
- /package/dist/client/assets/{fish-D2X4h_sR.js → fish-tU0XEiDI.js} +0 -0
- /package/dist/client/assets/{fluent-B_In4uB6.js → fluent-CLjEAUYv.js} +0 -0
- /package/dist/client/assets/{fortran-free-form-Bw_JZ1tj.js → fortran-free-form-i1oSxlBi.js} +0 -0
- /package/dist/client/assets/{gdscript-DDro0rs8.js → gdscript-DoKmcfqT.js} +0 -0
- /package/dist/client/assets/{gdshader-DkUeC1ld.js → gdshader-DkxS1q2w.js} +0 -0
- /package/dist/client/assets/{genie-khT2hrp-.js → genie-CzjuaGtt.js} +0 -0
- /package/dist/client/assets/{gherkin-CPELKal0.js → gherkin-fpI0deuw.js} +0 -0
- /package/dist/client/assets/{github-dark-DQp1Qkx5.js → github-dark-BLAZcc9K.js} +0 -0
- /package/dist/client/assets/{github-dark-default-BroO-mT3.js → github-dark-default-BKx-M5rS.js} +0 -0
- /package/dist/client/assets/{github-dark-dimmed-D8UZ8uTL.js → github-dark-dimmed-CpLgrGYo.js} +0 -0
- /package/dist/client/assets/{github-dark-high-contrast-CM0RRMCj.js → github-dark-high-contrast-VOQjCWmV.js} +0 -0
- /package/dist/client/assets/{github-light-BRTmX4Ht.js → github-light-BvHvw558.js} +0 -0
- /package/dist/client/assets/{github-light-default-dl7biQ4g.js → github-light-default-Br2CRkp2.js} +0 -0
- /package/dist/client/assets/{github-light-high-contrast-Cvzq8ZXJ.js → github-light-high-contrast-BFsOyo_C.js} +0 -0
- /package/dist/client/assets/{gleam-7UVjplRF.js → gleam-D6yLlB_s.js} +0 -0
- /package/dist/client/assets/{gn-EcrZPIZo.js → gn-CIEAcT5u.js} +0 -0
- /package/dist/client/assets/{gnuplot-CcsFlqcz.js → gnuplot-D3apx92u.js} +0 -0
- /package/dist/client/assets/{go-TqNfhUhh.js → go-CVvducQG.js} +0 -0
- /package/dist/client/assets/{groovy-bfrzFpSZ.js → groovy-0BMfeOwI.js} +0 -0
- /package/dist/client/assets/{gruvbox-dark-hard-CBFL_VqK.js → gruvbox-dark-hard-CYlE_Ioi.js} +0 -0
- /package/dist/client/assets/{gruvbox-dark-medium-Dn18r-Yz.js → gruvbox-dark-medium-CPnNv_qA.js} +0 -0
- /package/dist/client/assets/{gruvbox-dark-soft-DUyKWd02.js → gruvbox-dark-soft-D9ImK6Ww.js} +0 -0
- /package/dist/client/assets/{gruvbox-light-hard-DV9RwKs4.js → gruvbox-light-hard-CNKFbaWf.js} +0 -0
- /package/dist/client/assets/{gruvbox-light-medium-Ba-VIg48.js → gruvbox-light-medium-B6aRnAAu.js} +0 -0
- /package/dist/client/assets/{gruvbox-light-soft-CVIZMKFx.js → gruvbox-light-soft-CY5W_9bh.js} +0 -0
- /package/dist/client/assets/{haskell-DzEtL6Zk.js → haskell-CIXAQuBT.js} +0 -0
- /package/dist/client/assets/{haxe-wLDEcRoz.js → haxe-BbPW0PV8.js} +0 -0
- /package/dist/client/assets/{hcl-C1fs3gTM.js → hcl-BAhXnxEb.js} +0 -0
- /package/dist/client/assets/{hjson-B4b85MZo.js → hjson-w0zQjT1b.js} +0 -0
- /package/dist/client/assets/{hlsl-JhqkHhML.js → hlsl-BZIeCd1U.js} +0 -0
- /package/dist/client/assets/{horizon-bright-CPVackS9.js → horizon-bright-CoLIUhK-.js} +0 -0
- /package/dist/client/assets/{horizon-DMOEeSnA.js → horizon-u0mrDa4H.js} +0 -0
- /package/dist/client/assets/{houston-DSlR9wH9.js → houston-Dg_Sw3IO.js} +0 -0
- /package/dist/client/assets/{hy-uAHU8420.js → hy-yfQTgdnC.js} +0 -0
- /package/dist/client/assets/{imba-CPCwfD-G.js → imba-CH3r71m8.js} +0 -0
- /package/dist/client/assets/{ini-2Ew1Qzj6.js → ini-CFGjiumx.js} +0 -0
- /package/dist/client/assets/{json5-Dl8gAgq4.js → json5-Bl9TLCA_.js} +0 -0
- /package/dist/client/assets/{jsonc-C9b23pMf.js → jsonc-C5MYZbZA.js} +0 -0
- /package/dist/client/assets/{jsonl-DkF3QjsY.js → jsonl-BUZGz6Nz.js} +0 -0
- /package/dist/client/assets/{jsonnet-DH4UkOBo.js → jsonnet-BR0nqn6X.js} +0 -0
- /package/dist/client/assets/{jssm-CBV9_O8o.js → jssm-CBTdduNQ.js} +0 -0
- /package/dist/client/assets/{kanagawa-dragon-DLDXA4f2.js → kanagawa-dragon-D37ccMj8.js} +0 -0
- /package/dist/client/assets/{kanagawa-lotus-qAvw6eOU.js → kanagawa-lotus-CQwQI5XJ.js} +0 -0
- /package/dist/client/assets/{kanagawa-wave-DFO_g5Mb.js → kanagawa-wave-CoEPa5VN.js} +0 -0
- /package/dist/client/assets/{kdl-BQl-X5Uf.js → kdl-Zssqs7XG.js} +0 -0
- /package/dist/client/assets/{kotlin-d6oenWPH.js → kotlin-Dq2AM2zV.js} +0 -0
- /package/dist/client/assets/{kusto-Cpu9Tdho.js → kusto-Bf6C0JAP.js} +0 -0
- /package/dist/client/assets/{laserwave-Bbquw0Nf.js → laserwave-Dungh0s5.js} +0 -0
- /package/dist/client/assets/{lean-CvyEisyW.js → lean-ClY6v3AE.js} +0 -0
- /package/dist/client/assets/{less-B9RQiV1N.js → less-CvM4wSPb.js} +0 -0
- /package/dist/client/assets/{light-plus-Ch1Usv7R.js → light-plus-BR_n1CxC.js} +0 -0
- /package/dist/client/assets/{llvm-DtrwjsAs.js → llvm-DzxLhkKH.js} +0 -0
- /package/dist/client/assets/{log-JKbKuM4J.js → log-BDAJFf74.js} +0 -0
- /package/dist/client/assets/{logo-BsxZM_eb.js → logo-BlUmufty.js} +0 -0
- /package/dist/client/assets/{luau-D9oeBRnv.js → luau-DZ2-jnXM.js} +0 -0
- /package/dist/client/assets/{make-DLuqI3Sa.js → make-Dfox3qgR.js} +0 -0
- /package/dist/client/assets/{markdown-hfQzyr6v.js → markdown-DQTxlAgS.js} +0 -0
- /package/dist/client/assets/{material-theme-kX26WiJU.js → material-theme-Ca-eMEoE.js} +0 -0
- /package/dist/client/assets/{material-theme-darker-yvetTWEr.js → material-theme-darker-tDRSeAjj.js} +0 -0
- /package/dist/client/assets/{material-theme-lighter-L4j3qddN.js → material-theme-lighter-C0MRc9II.js} +0 -0
- /package/dist/client/assets/{material-theme-ocean-BnNk1wNQ.js → material-theme-ocean-CPMt5a9Z.js} +0 -0
- /package/dist/client/assets/{material-theme-palenight-W0qbGyud.js → material-theme-palenight-BopXlqoA.js} +0 -0
- /package/dist/client/assets/{matlab-Cz4xBfaA.js → matlab-B0EYivAm.js} +0 -0
- /package/dist/client/assets/{mdx-Crds6sJw.js → mdx-zyuvufgY.js} +0 -0
- /package/dist/client/assets/{mermaid-Bk1sayFm.js → mermaid-CXPg53i3.js} +0 -0
- /package/dist/client/assets/{min-dark-DK6uq44k.js → min-dark-Dc7JF_0M.js} +0 -0
- /package/dist/client/assets/{min-light-lr1QiEOE.js → min-light-DK0JIAk_.js} +0 -0
- /package/dist/client/assets/{mipsasm-D3Vr1VJI.js → mipsasm-BKic4Q6r.js} +0 -0
- /package/dist/client/assets/{mojo-D3ai4ATt.js → mojo-D2QSC8Up.js} +0 -0
- /package/dist/client/assets/{monokai-DZSWSdmN.js → monokai-DAduqgyw.js} +0 -0
- /package/dist/client/assets/{moonbit-c7XV1V8w.js → moonbit-Bg8t2qV7.js} +0 -0
- /package/dist/client/assets/{move--lg8RSZu.js → move-D2XYF2cL.js} +0 -0
- /package/dist/client/assets/{narrat-Bn_PlXDl.js → narrat-Dc-7zgpc.js} +0 -0
- /package/dist/client/assets/{nextflow-groovy-CUrXbMOF.js → nextflow-groovy-DM-q1yDV.js} +0 -0
- /package/dist/client/assets/{night-owl-DnKT96OJ.js → night-owl-DLGGnVs3.js} +0 -0
- /package/dist/client/assets/{night-owl-light-gVSh6ltn.js → night-owl-light-RFt0bXLV.js} +0 -0
- /package/dist/client/assets/{nix-DE1Q2B1F.js → nix-Y_mzbhtn.js} +0 -0
- /package/dist/client/assets/{nord-CbYaE7ZY.js → nord-C3wm8E4I.js} +0 -0
- /package/dist/client/assets/{nushell-BBFYNdNE.js → nushell-DybY7eY7.js} +0 -0
- /package/dist/client/assets/{objective-c-mc6rHp-y.js → objective-c-Xv41DRqF.js} +0 -0
- /package/dist/client/assets/{objective-cpp-D96wcRis.js → objective-cpp-CpCjh4iG.js} +0 -0
- /package/dist/client/assets/{ocaml-Ddt3E4VO.js → ocaml-BkH0TtHI.js} +0 -0
- /package/dist/client/assets/{odin-BUZTfc03.js → odin-ByoEVs_h.js} +0 -0
- /package/dist/client/assets/{one-dark-pro-CLMO01es.js → one-dark-pro-B6FJ0zvF.js} +0 -0
- /package/dist/client/assets/{one-light-27sfjFDM.js → one-light-BGXnR4Yd.js} +0 -0
- /package/dist/client/assets/{openscad-C-XxCD_t.js → openscad-Cuk7R1cf.js} +0 -0
- /package/dist/client/assets/{pascal-BvJwb9Ca.js → pascal-ClnFuuSu.js} +0 -0
- /package/dist/client/assets/{pkl-DtSDxyR8.js → pkl-B9cmWSnc.js} +0 -0
- /package/dist/client/assets/{plastic-Dd1-4HJb.js → plastic-BRO-85T7.js} +0 -0
- /package/dist/client/assets/{plsql-CgEVu7mV.js → plsql-Cq55IOpg.js} +0 -0
- /package/dist/client/assets/{po-BNFx8QMG.js → po-5X8BthBl.js} +0 -0
- /package/dist/client/assets/{poimandres-DdZFFINT.js → poimandres-DCo9RR46.js} +0 -0
- /package/dist/client/assets/{polar-DcGwqI2v.js → polar-CWZaZyg5.js} +0 -0
- /package/dist/client/assets/{postcss-BgFCg0uM.js → postcss-Bef1Uhrq.js} +0 -0
- /package/dist/client/assets/{powerquery-BNMZnWRc.js → powerquery-D9pPkT1t.js} +0 -0
- /package/dist/client/assets/{powershell-CeNh_gMu.js → powershell-B3XNafuX.js} +0 -0
- /package/dist/client/assets/{prisma-C4wKi9Xs.js → prisma-5gZW7ocs.js} +0 -0
- /package/dist/client/assets/{prolog-DcNkIfZZ.js → prolog-D7gIbUtl.js} +0 -0
- /package/dist/client/assets/{proto-BqsNb_Ru.js → proto-DVj7EW9q.js} +0 -0
- /package/dist/client/assets/{puppet-BLvi8DVC.js → puppet-BQIch9Wt.js} +0 -0
- /package/dist/client/assets/{purescript-B_tjgp5s.js → purescript-Chi-qOnj.js} +0 -0
- /package/dist/client/assets/{python-xLLWlBd0.js → python-5JpI6kgG.js} +0 -0
- /package/dist/client/assets/{qmldir-CDe6ORFD.js → qmldir-DV5mjtmi.js} +0 -0
- /package/dist/client/assets/{qss-CvW7b9vz.js → qss-B1TrC4-y.js} +0 -0
- /package/dist/client/assets/{racket-CA2oKVL1.js → racket-j2Qs80i3.js} +0 -0
- /package/dist/client/assets/{raku-D9dEetfn.js → raku-DThySOcs.js} +0 -0
- /package/dist/client/assets/{red-Cj1vpJ_n.js → red-Ih7tMgXP.js} +0 -0
- /package/dist/client/assets/{reg-CHsE82Pk.js → reg-CeWg2nAt.js} +0 -0
- /package/dist/client/assets/{rel-SUS6CYTF.js → rel-0yDiB4cH.js} +0 -0
- /package/dist/client/assets/{riscv-xyAKa3qa.js → riscv-DGASrDZv.js} +0 -0
- /package/dist/client/assets/{ron-D5BrJbC5.js → ron-PTfTVUsf.js} +0 -0
- /package/dist/client/assets/{rose-pine-Dd0RAvir.js → rose-pine-CBcSv8_z.js} +0 -0
- /package/dist/client/assets/{rose-pine-dawn-CeS_2jlO.js → rose-pine-dawn-DsFTrjAP.js} +0 -0
- /package/dist/client/assets/{rose-pine-moon-CQrvtQEF.js → rose-pine-moon-DSRrHXqB.js} +0 -0
- /package/dist/client/assets/{rosmsg-Bie95NPX.js → rosmsg-BZRVDGoy.js} +0 -0
- /package/dist/client/assets/{rust-CAON_J-7.js → rust-IilUxR0Y.js} +0 -0
- /package/dist/client/assets/{sass-CKkv3rB4.js → sass-BWTyD0km.js} +0 -0
- /package/dist/client/assets/{scala-BADlfUbE.js → scala-DBszRdoo.js} +0 -0
- /package/dist/client/assets/{scheme-Bv8vdcS_.js → scheme-CtV0KGCW.js} +0 -0
- /package/dist/client/assets/{sdbl-TUdAkzzL.js → sdbl-NrV9zyWH.js} +0 -0
- /package/dist/client/assets/{slack-dark-BeQrlvP4.js → slack-dark-DJYHgMC5.js} +0 -0
- /package/dist/client/assets/{slack-ochin-DaA1aBiy.js → slack-ochin-DMZh8xHM.js} +0 -0
- /package/dist/client/assets/{smalltalk-C1k1DVft.js → smalltalk-BF00pyFX.js} +0 -0
- /package/dist/client/assets/{snazzy-light-C9Bzvwcg.js → snazzy-light-CWz9pGNQ.js} +0 -0
- /package/dist/client/assets/{solarized-dark--ZJpQY8O.js → solarized-dark-D9XpTy8q.js} +0 -0
- /package/dist/client/assets/{solarized-light-wzNWfjF2.js → solarized-light-CbOIwuI-.js} +0 -0
- /package/dist/client/assets/{solidity-CaEDdWYR.js → solidity-CbwhXqqI.js} +0 -0
- /package/dist/client/assets/{splunk-mpBjmHRA.js → splunk-BifnD-Y9.js} +0 -0
- /package/dist/client/assets/{ssh-config-DqmSAS3N.js → ssh-config-CALIsjYt.js} +0 -0
- /package/dist/client/assets/{stylus-mNYBrtqL.js → stylus-CW9hRw3O.js} +0 -0
- /package/dist/client/assets/{swift-BXoR6L-y.js → swift-XnvjWWWQ.js} +0 -0
- /package/dist/client/assets/{synthwave-84-ybvkLGau.js → synthwave-84-BnPKtV8a.js} +0 -0
- /package/dist/client/assets/{system-verilog-BnyrpGlO.js → system-verilog-sXcvSAdV.js} +0 -0
- /package/dist/client/assets/{systemd-BBVr_qxh.js → systemd-gIHkqv2y.js} +0 -0
- /package/dist/client/assets/{talonscript-l0qUQn2r.js → talonscript-u0b1kqtW.js} +0 -0
- /package/dist/client/assets/{tasl-BzcMwPTS.js → tasl-4NbQVfsv.js} +0 -0
- /package/dist/client/assets/{tcl-CQgtyMkG.js → tcl-CohiqM0A.js} +0 -0
- /package/dist/client/assets/{terraform-BgPqtSWN.js → terraform-C2SCpFsh.js} +0 -0
- /package/dist/client/assets/{tokyo-night-BZt2NwCl.js → tokyo-night-ByryBNMy.js} +0 -0
- /package/dist/client/assets/{toml-CpHBCfVl.js → toml-DIwLv6ba.js} +0 -0
- /package/dist/client/assets/{tsv-DYxH1-vL.js → tsv-Wq0jy8zc.js} +0 -0
- /package/dist/client/assets/{turtle-DdFFvP5J.js → turtle-DtUXQD5N.js} +0 -0
- /package/dist/client/assets/{typespec-CHOxKRtr.js → typespec-CMzaYGNR.js} +0 -0
- /package/dist/client/assets/{typst-C0VS9TQm.js → typst-BXss02ax.js} +0 -0
- /package/dist/client/assets/{v-CfOPGXPl.js → v-Dlx5aRMh.js} +0 -0
- /package/dist/client/assets/{vala-DYqHmNOK.js → vala-BPY-dxs1.js} +0 -0
- /package/dist/client/assets/{vb-DUBgqZ02.js → vb-fEZJaj_I.js} +0 -0
- /package/dist/client/assets/{verilog-BxybH_AY.js → verilog-Ch3h9a5t.js} +0 -0
- /package/dist/client/assets/{vesper-BDlBlJR-.js → vesper-RapGiuFK.js} +0 -0
- /package/dist/client/assets/{vhdl-DBoxxi7I.js → vhdl-k9JLsLxQ.js} +0 -0
- /package/dist/client/assets/{viml-C8vROCgw.js → viml-AETnYpBH.js} +0 -0
- /package/dist/client/assets/{vitesse-black-CUBzmgJa.js → vitesse-black-CK3sbzcK.js} +0 -0
- /package/dist/client/assets/{vitesse-dark-COrLBgkv.js → vitesse-dark-D1-w1Fr7.js} +0 -0
- /package/dist/client/assets/{vitesse-light-ThZGgLQK.js → vitesse-light-D7Ky4DHb.js} +0 -0
- /package/dist/client/assets/{vyper-D08CaD4o.js → vyper-BOB1dBvz.js} +0 -0
- /package/dist/client/assets/{wasm-DiIFv9DE.js → wasm-BQxIq9Eb.js} +0 -0
- /package/dist/client/assets/{wasm-CoVafRYN.js → wasm-CkSOvETR.js} +0 -0
- /package/dist/client/assets/{wenyan-GlRgAbTB.js → wenyan-klF87KTD.js} +0 -0
- /package/dist/client/assets/{wgsl-BmWpQFqb.js → wgsl-Critfvz0.js} +0 -0
- /package/dist/client/assets/{wikitext-Axug2vPC.js → wikitext-o9T06DMF.js} +0 -0
- /package/dist/client/assets/{wit-Dk1fPIaK.js → wit-13nwpGLw.js} +0 -0
- /package/dist/client/assets/{wolfram-DMhXlmnL.js → wolfram-DrTARb9i.js} +0 -0
- /package/dist/client/assets/{zenscript-x7PXwj2_.js → zenscript-npva8tX5.js} +0 -0
- /package/dist/client/assets/{zig-BlD2NI35.js → zig-shXrLLVU.js} +0 -0
|
@@ -4,10 +4,10 @@ import { homedir } from "node:os";
|
|
|
4
4
|
import { execSync, spawn } from "node:child_process";
|
|
5
5
|
import { registerHandler } from "../ws/router.js";
|
|
6
6
|
import { sendTo } from "../ws/broadcast.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const PLUGINS_DIR = join(homedir(), ".claude", "plugins");
|
|
8
|
+
const INSTALLED_FILE = join(PLUGINS_DIR, "installed_plugins.json");
|
|
9
|
+
const MARKETPLACES_FILE = join(PLUGINS_DIR, "known_marketplaces.json");
|
|
10
|
+
const INSTALL_COUNTS_FILE = join(PLUGINS_DIR, "install-counts-cache.json");
|
|
11
11
|
function readJsonFile(path) {
|
|
12
12
|
try {
|
|
13
13
|
if (!existsSync(path))
|
|
@@ -19,27 +19,27 @@ function readJsonFile(path) {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
function getInstallCounts() {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
const data = readJsonFile(INSTALL_COUNTS_FILE);
|
|
23
|
+
const map = new Map();
|
|
24
24
|
if (!data || !data.counts)
|
|
25
25
|
return map;
|
|
26
|
-
for (
|
|
26
|
+
for (let i = 0; i < data.counts.length; i++) {
|
|
27
27
|
map.set(data.counts[i].plugin, data.counts[i].unique_installs);
|
|
28
28
|
}
|
|
29
29
|
return map;
|
|
30
30
|
}
|
|
31
31
|
function readPluginJson(installPath) {
|
|
32
|
-
|
|
32
|
+
const pluginJsonPath = join(installPath, ".claude-plugin", "plugin.json");
|
|
33
33
|
return readJsonFile(pluginJsonPath);
|
|
34
34
|
}
|
|
35
35
|
function countSkills(installPath) {
|
|
36
|
-
|
|
36
|
+
const skillsDir = join(installPath, "skills");
|
|
37
37
|
if (!existsSync(skillsDir))
|
|
38
38
|
return 0;
|
|
39
39
|
try {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
for (
|
|
40
|
+
const entries = readdirSync(skillsDir, { withFileTypes: true });
|
|
41
|
+
let count = 0;
|
|
42
|
+
for (let i = 0; i < entries.length; i++) {
|
|
43
43
|
if (entries[i].isDirectory())
|
|
44
44
|
count++;
|
|
45
45
|
}
|
|
@@ -50,20 +50,20 @@ function countSkills(installPath) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
function countHooks(installPath) {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const hooksPath = join(installPath, "hooks", "hooks.json");
|
|
54
|
+
const data = readJsonFile(hooksPath);
|
|
55
55
|
if (!data || !data.hooks)
|
|
56
56
|
return 0;
|
|
57
57
|
return Object.keys(data.hooks).length;
|
|
58
58
|
}
|
|
59
59
|
function countRules(installPath) {
|
|
60
|
-
|
|
60
|
+
const rulesDir = join(installPath, "rules");
|
|
61
61
|
if (!existsSync(rulesDir))
|
|
62
62
|
return 0;
|
|
63
63
|
try {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
for (
|
|
64
|
+
const entries = readdirSync(rulesDir);
|
|
65
|
+
let count = 0;
|
|
66
|
+
for (let i = 0; i < entries.length; i++) {
|
|
67
67
|
if (entries[i].endsWith(".md"))
|
|
68
68
|
count++;
|
|
69
69
|
}
|
|
@@ -74,21 +74,21 @@ function countRules(installPath) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
function getInstalledPlugins() {
|
|
77
|
-
|
|
77
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
78
78
|
if (!data || !data.plugins)
|
|
79
79
|
return [];
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
for (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
for (
|
|
90
|
-
|
|
91
|
-
|
|
80
|
+
const installCounts = getInstallCounts();
|
|
81
|
+
const plugins = [];
|
|
82
|
+
const keys = Object.keys(data.plugins);
|
|
83
|
+
for (let k = 0; k < keys.length; k++) {
|
|
84
|
+
const key = keys[k];
|
|
85
|
+
const entries = data.plugins[key];
|
|
86
|
+
const atIdx = key.lastIndexOf("@");
|
|
87
|
+
const pluginName = atIdx > 0 ? key.slice(0, atIdx) : key;
|
|
88
|
+
const marketplace = atIdx > 0 ? key.slice(atIdx + 1) : "";
|
|
89
|
+
for (let e = 0; e < entries.length; e++) {
|
|
90
|
+
const entry = entries[e];
|
|
91
|
+
const meta = readPluginJson(entry.installPath);
|
|
92
92
|
plugins.push({
|
|
93
93
|
name: pluginName,
|
|
94
94
|
marketplace: marketplace,
|
|
@@ -111,13 +111,13 @@ function getInstalledPlugins() {
|
|
|
111
111
|
return plugins;
|
|
112
112
|
}
|
|
113
113
|
function getMarketplaces() {
|
|
114
|
-
|
|
114
|
+
const data = readJsonFile(MARKETPLACES_FILE);
|
|
115
115
|
if (!data)
|
|
116
116
|
return [];
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
for (
|
|
120
|
-
|
|
117
|
+
const result = [];
|
|
118
|
+
const keys = Object.keys(data);
|
|
119
|
+
for (let i = 0; i < keys.length; i++) {
|
|
120
|
+
const entry = data[keys[i]];
|
|
121
121
|
result.push({
|
|
122
122
|
name: keys[i],
|
|
123
123
|
source: entry.source,
|
|
@@ -128,48 +128,48 @@ function getMarketplaces() {
|
|
|
128
128
|
return result;
|
|
129
129
|
}
|
|
130
130
|
function searchMarketplacePlugins(query, marketplaceFilter) {
|
|
131
|
-
|
|
131
|
+
const marketplaces = readJsonFile(MARKETPLACES_FILE);
|
|
132
132
|
if (!marketplaces)
|
|
133
133
|
return [];
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
const installCounts = getInstallCounts();
|
|
135
|
+
const installedData = readJsonFile(INSTALLED_FILE);
|
|
136
|
+
const installedKeys = new Set();
|
|
137
|
+
const installedVersions = new Map();
|
|
138
138
|
if (installedData && installedData.plugins) {
|
|
139
|
-
|
|
140
|
-
for (
|
|
139
|
+
const iKeys = Object.keys(installedData.plugins);
|
|
140
|
+
for (let ik = 0; ik < iKeys.length; ik++) {
|
|
141
141
|
installedKeys.add(iKeys[ik]);
|
|
142
|
-
|
|
142
|
+
const versions = installedData.plugins[iKeys[ik]];
|
|
143
143
|
if (versions.length > 0) {
|
|
144
144
|
installedVersions.set(iKeys[ik], versions[0].version);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
for (
|
|
152
|
-
|
|
148
|
+
const results = [];
|
|
149
|
+
const lowerQuery = query.toLowerCase();
|
|
150
|
+
const mKeys = Object.keys(marketplaces);
|
|
151
|
+
for (let m = 0; m < mKeys.length; m++) {
|
|
152
|
+
const mName = mKeys[m];
|
|
153
153
|
if (marketplaceFilter && mName !== marketplaceFilter)
|
|
154
154
|
continue;
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
const mkt = marketplaces[mName];
|
|
156
|
+
const pluginsDir = join(mkt.installLocation, "plugins");
|
|
157
157
|
if (!existsSync(pluginsDir))
|
|
158
158
|
continue;
|
|
159
159
|
try {
|
|
160
|
-
|
|
161
|
-
for (
|
|
160
|
+
const pluginDirs = readdirSync(pluginsDir, { withFileTypes: true });
|
|
161
|
+
for (let p = 0; p < pluginDirs.length; p++) {
|
|
162
162
|
if (!pluginDirs[p].isDirectory())
|
|
163
163
|
continue;
|
|
164
|
-
|
|
164
|
+
const dirName = pluginDirs[p].name;
|
|
165
165
|
if (dirName.toLowerCase().indexOf(lowerQuery) === -1) {
|
|
166
|
-
|
|
166
|
+
const meta = readPluginJson(join(pluginsDir, dirName));
|
|
167
167
|
if (!meta || meta.description.toLowerCase().indexOf(lowerQuery) === -1) {
|
|
168
168
|
continue;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
const pluginMeta = readPluginJson(join(pluginsDir, dirName));
|
|
172
|
+
const key = dirName + "@" + mName;
|
|
173
173
|
results.push({
|
|
174
174
|
name: dirName,
|
|
175
175
|
marketplace: mName,
|
|
@@ -184,71 +184,71 @@ function searchMarketplacePlugins(query, marketplaceFilter) {
|
|
|
184
184
|
catch { }
|
|
185
185
|
}
|
|
186
186
|
results.sort(function (a, b) {
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
const ai = a.installs ?? 0;
|
|
188
|
+
const bi = b.installs ?? 0;
|
|
189
189
|
return bi - ai;
|
|
190
190
|
});
|
|
191
191
|
return results;
|
|
192
192
|
}
|
|
193
193
|
function parseFrontmatter(content) {
|
|
194
|
-
|
|
194
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
195
195
|
if (!match)
|
|
196
196
|
return { name: "", description: "" };
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
for (
|
|
202
|
-
|
|
203
|
-
|
|
197
|
+
const yaml = match[1];
|
|
198
|
+
let name = "";
|
|
199
|
+
let desc = "";
|
|
200
|
+
const lines = yaml.split(/\r?\n/);
|
|
201
|
+
for (let i = 0; i < lines.length; i++) {
|
|
202
|
+
const line = lines[i];
|
|
203
|
+
const nameMatch = line.match(/^name:\s*(.+)/);
|
|
204
204
|
if (nameMatch)
|
|
205
205
|
name = nameMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
206
|
-
|
|
206
|
+
const descMatch = line.match(/^description:\s*(.+)/);
|
|
207
207
|
if (descMatch)
|
|
208
208
|
desc = descMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
209
209
|
}
|
|
210
210
|
return { name, description: desc };
|
|
211
211
|
}
|
|
212
212
|
function getPluginDetails(pluginName, marketplace) {
|
|
213
|
-
|
|
213
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
214
214
|
if (!data || !data.plugins)
|
|
215
215
|
return null;
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
const key = pluginName + "@" + marketplace;
|
|
217
|
+
const entries = data.plugins[key];
|
|
218
218
|
if (!entries || entries.length === 0)
|
|
219
219
|
return null;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
220
|
+
const entry = entries[0];
|
|
221
|
+
const meta = readPluginJson(entry.installPath);
|
|
222
|
+
const skills = [];
|
|
223
|
+
const skillsDir = join(entry.installPath, "skills");
|
|
224
224
|
if (existsSync(skillsDir)) {
|
|
225
225
|
try {
|
|
226
|
-
|
|
227
|
-
for (
|
|
226
|
+
const skillDirs = readdirSync(skillsDir, { withFileTypes: true });
|
|
227
|
+
for (let s = 0; s < skillDirs.length; s++) {
|
|
228
228
|
if (!skillDirs[s].isDirectory())
|
|
229
229
|
continue;
|
|
230
|
-
|
|
230
|
+
const skillFile = join(skillsDir, skillDirs[s].name, "SKILL.md");
|
|
231
231
|
if (existsSync(skillFile)) {
|
|
232
|
-
|
|
233
|
-
|
|
232
|
+
const content = readFileSync(skillFile, "utf-8");
|
|
233
|
+
const fm = parseFrontmatter(content);
|
|
234
234
|
skills.push({ name: fm.name || skillDirs[s].name, description: fm.description });
|
|
235
235
|
}
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
catch { }
|
|
239
239
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
let hooks = {};
|
|
241
|
+
const hooksPath = join(entry.installPath, "hooks", "hooks.json");
|
|
242
|
+
const hooksData = readJsonFile(hooksPath);
|
|
243
243
|
if (hooksData && hooksData.hooks) {
|
|
244
244
|
hooks = hooksData.hooks;
|
|
245
245
|
}
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
const rules = [];
|
|
247
|
+
const rulesDir = join(entry.installPath, "rules");
|
|
248
248
|
if (existsSync(rulesDir)) {
|
|
249
249
|
try {
|
|
250
|
-
|
|
251
|
-
for (
|
|
250
|
+
const ruleFiles = readdirSync(rulesDir);
|
|
251
|
+
for (let r = 0; r < ruleFiles.length; r++) {
|
|
252
252
|
if (ruleFiles[r].endsWith(".md")) {
|
|
253
253
|
rules.push(ruleFiles[r]);
|
|
254
254
|
}
|
|
@@ -275,19 +275,19 @@ function getPluginDetails(pluginName, marketplace) {
|
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
277
|
export function getPluginMcpServers() {
|
|
278
|
-
|
|
278
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
279
279
|
if (!data || !data.plugins)
|
|
280
280
|
return {};
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
for (
|
|
284
|
-
|
|
285
|
-
for (
|
|
286
|
-
|
|
287
|
-
|
|
281
|
+
const servers = {};
|
|
282
|
+
const keys = Object.keys(data.plugins);
|
|
283
|
+
for (let k = 0; k < keys.length; k++) {
|
|
284
|
+
const entries = data.plugins[keys[k]];
|
|
285
|
+
for (let e = 0; e < entries.length; e++) {
|
|
286
|
+
const mcpPath = join(entries[e].installPath, ".mcp.json");
|
|
287
|
+
const mcpData = readJsonFile(mcpPath);
|
|
288
288
|
if (mcpData && mcpData.mcpServers) {
|
|
289
|
-
|
|
290
|
-
for (
|
|
289
|
+
const sKeys = Object.keys(mcpData.mcpServers);
|
|
290
|
+
for (let s = 0; s < sKeys.length; s++) {
|
|
291
291
|
servers[sKeys[s]] = mcpData.mcpServers[sKeys[s]];
|
|
292
292
|
}
|
|
293
293
|
}
|
|
@@ -296,28 +296,28 @@ export function getPluginMcpServers() {
|
|
|
296
296
|
return servers;
|
|
297
297
|
}
|
|
298
298
|
export function getInstalledPluginCount() {
|
|
299
|
-
|
|
299
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
300
300
|
if (!data || !data.plugins)
|
|
301
301
|
return 0;
|
|
302
302
|
return Object.keys(data.plugins).length;
|
|
303
303
|
}
|
|
304
304
|
export function getPluginSkillRuleTokenEstimate() {
|
|
305
|
-
|
|
305
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
306
306
|
if (!data || !data.plugins)
|
|
307
307
|
return 0;
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
for (
|
|
311
|
-
|
|
312
|
-
for (
|
|
313
|
-
|
|
308
|
+
let totalChars = 0;
|
|
309
|
+
const keys = Object.keys(data.plugins);
|
|
310
|
+
for (let k = 0; k < keys.length; k++) {
|
|
311
|
+
const entries = data.plugins[keys[k]];
|
|
312
|
+
for (let e = 0; e < entries.length; e++) {
|
|
313
|
+
const skillsDir = join(entries[e].installPath, "skills");
|
|
314
314
|
if (existsSync(skillsDir)) {
|
|
315
315
|
try {
|
|
316
|
-
|
|
317
|
-
for (
|
|
316
|
+
const dirs = readdirSync(skillsDir, { withFileTypes: true });
|
|
317
|
+
for (let d = 0; d < dirs.length; d++) {
|
|
318
318
|
if (!dirs[d].isDirectory())
|
|
319
319
|
continue;
|
|
320
|
-
|
|
320
|
+
const skillFile = join(skillsDir, dirs[d].name, "SKILL.md");
|
|
321
321
|
if (existsSync(skillFile)) {
|
|
322
322
|
totalChars += readFileSync(skillFile, "utf-8").length;
|
|
323
323
|
}
|
|
@@ -325,11 +325,11 @@ export function getPluginSkillRuleTokenEstimate() {
|
|
|
325
325
|
}
|
|
326
326
|
catch { }
|
|
327
327
|
}
|
|
328
|
-
|
|
328
|
+
const rulesDir = join(entries[e].installPath, "rules");
|
|
329
329
|
if (existsSync(rulesDir)) {
|
|
330
330
|
try {
|
|
331
|
-
|
|
332
|
-
for (
|
|
331
|
+
const ruleFiles = readdirSync(rulesDir);
|
|
332
|
+
for (let r = 0; r < ruleFiles.length; r++) {
|
|
333
333
|
if (ruleFiles[r].endsWith(".md")) {
|
|
334
334
|
totalChars += readFileSync(join(rulesDir, ruleFiles[r]), "utf-8").length;
|
|
335
335
|
}
|
|
@@ -350,7 +350,7 @@ function whichBinary(name) {
|
|
|
350
350
|
return false;
|
|
351
351
|
}
|
|
352
352
|
}
|
|
353
|
-
|
|
353
|
+
const LSP_BINARY_MAP = {
|
|
354
354
|
"typescript-lsp": "typescript-language-server",
|
|
355
355
|
"pyright-lsp": "pyright-langserver",
|
|
356
356
|
"gopls-lsp": "gopls",
|
|
@@ -365,42 +365,42 @@ var LSP_BINARY_MAP = {
|
|
|
365
365
|
"jdtls-lsp": "jdtls",
|
|
366
366
|
};
|
|
367
367
|
function getPluginErrors() {
|
|
368
|
-
|
|
368
|
+
const data = readJsonFile(INSTALLED_FILE);
|
|
369
369
|
if (!data || !data.plugins)
|
|
370
370
|
return [];
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
for (
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
for (
|
|
380
|
-
|
|
381
|
-
|
|
371
|
+
const errors = [];
|
|
372
|
+
const keys = Object.keys(data.plugins);
|
|
373
|
+
for (let k = 0; k < keys.length; k++) {
|
|
374
|
+
const key = keys[k];
|
|
375
|
+
const entries = data.plugins[key];
|
|
376
|
+
const atIdx = key.lastIndexOf("@");
|
|
377
|
+
const pluginName = atIdx > 0 ? key.slice(0, atIdx) : key;
|
|
378
|
+
const marketplace = atIdx > 0 ? key.slice(atIdx + 1) : "";
|
|
379
|
+
for (let e = 0; e < entries.length; e++) {
|
|
380
|
+
const entry = entries[e];
|
|
381
|
+
const errs = [];
|
|
382
382
|
if (!existsSync(entry.installPath)) {
|
|
383
383
|
errs.push("Install path does not exist: " + entry.installPath);
|
|
384
384
|
}
|
|
385
385
|
else {
|
|
386
386
|
try {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
for (
|
|
390
|
-
|
|
387
|
+
const output = execSync("claude plugin validate " + JSON.stringify(entry.installPath) + " 2>&1", { encoding: "utf-8", timeout: 10000 });
|
|
388
|
+
const errorLines = output.split("\n").filter(function (l) { return l.trim().startsWith("❯") || l.trim().startsWith("✘"); });
|
|
389
|
+
for (let el = 0; el < errorLines.length; el++) {
|
|
390
|
+
const line = errorLines[el].trim();
|
|
391
391
|
if (line.startsWith("❯")) {
|
|
392
392
|
errs.push(line.slice(1).trim());
|
|
393
393
|
}
|
|
394
394
|
}
|
|
395
395
|
}
|
|
396
396
|
catch (validateErr) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
for (
|
|
397
|
+
const stderr = String(validateErr);
|
|
398
|
+
const stderrLines = stderr.split("\n").filter(function (l) { return l.trim().startsWith("❯"); });
|
|
399
|
+
for (let sl = 0; sl < stderrLines.length; sl++) {
|
|
400
400
|
errs.push(stderrLines[sl].trim().slice(1).trim());
|
|
401
401
|
}
|
|
402
402
|
}
|
|
403
|
-
|
|
403
|
+
const lspBinary = LSP_BINARY_MAP[pluginName];
|
|
404
404
|
if (lspBinary && !whichBinary(lspBinary)) {
|
|
405
405
|
errs.push("Executable not found in $PATH: \"" + lspBinary + "\"");
|
|
406
406
|
}
|
|
@@ -413,39 +413,39 @@ function getPluginErrors() {
|
|
|
413
413
|
return errors;
|
|
414
414
|
}
|
|
415
415
|
function discoverPlugins() {
|
|
416
|
-
|
|
416
|
+
const marketplaces = readJsonFile(MARKETPLACES_FILE);
|
|
417
417
|
if (!marketplaces)
|
|
418
418
|
return [];
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
419
|
+
const installCounts = getInstallCounts();
|
|
420
|
+
const installedData = readJsonFile(INSTALLED_FILE);
|
|
421
|
+
const installedKeys = new Set();
|
|
422
|
+
const installedVersions = new Map();
|
|
423
423
|
if (installedData && installedData.plugins) {
|
|
424
|
-
|
|
425
|
-
for (
|
|
424
|
+
const iKeys = Object.keys(installedData.plugins);
|
|
425
|
+
for (let ik = 0; ik < iKeys.length; ik++) {
|
|
426
426
|
installedKeys.add(iKeys[ik]);
|
|
427
|
-
|
|
427
|
+
const versions = installedData.plugins[iKeys[ik]];
|
|
428
428
|
if (versions.length > 0) {
|
|
429
429
|
installedVersions.set(iKeys[ik], versions[0].version);
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
432
|
}
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
for (
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
433
|
+
const results = [];
|
|
434
|
+
const mKeys = Object.keys(marketplaces);
|
|
435
|
+
for (let m = 0; m < mKeys.length; m++) {
|
|
436
|
+
const mName = mKeys[m];
|
|
437
|
+
const mkt = marketplaces[mName];
|
|
438
|
+
const pluginsDir = join(mkt.installLocation, "plugins");
|
|
439
439
|
if (!existsSync(pluginsDir))
|
|
440
440
|
continue;
|
|
441
441
|
try {
|
|
442
|
-
|
|
443
|
-
for (
|
|
442
|
+
const pluginDirs = readdirSync(pluginsDir, { withFileTypes: true });
|
|
443
|
+
for (let p = 0; p < pluginDirs.length; p++) {
|
|
444
444
|
if (!pluginDirs[p].isDirectory())
|
|
445
445
|
continue;
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
446
|
+
const dirName = pluginDirs[p].name;
|
|
447
|
+
const meta = readPluginJson(join(pluginsDir, dirName));
|
|
448
|
+
const key = dirName + "@" + mName;
|
|
449
449
|
results.push({
|
|
450
450
|
name: dirName,
|
|
451
451
|
marketplace: mName,
|
|
@@ -460,43 +460,43 @@ function discoverPlugins() {
|
|
|
460
460
|
catch { }
|
|
461
461
|
}
|
|
462
462
|
results.sort(function (a, b) {
|
|
463
|
-
|
|
464
|
-
|
|
463
|
+
const ai = a.installs ?? 0;
|
|
464
|
+
const bi = b.installs ?? 0;
|
|
465
465
|
return bi - ai;
|
|
466
466
|
});
|
|
467
467
|
return results;
|
|
468
468
|
}
|
|
469
469
|
registerHandler("plugin", function (clientId, message) {
|
|
470
470
|
if (message.type === "plugin:list") {
|
|
471
|
-
|
|
471
|
+
const plugins = getInstalledPlugins();
|
|
472
472
|
sendTo(clientId, { type: "plugin:list_result", plugins: plugins });
|
|
473
473
|
return;
|
|
474
474
|
}
|
|
475
475
|
if (message.type === "plugin:marketplaces") {
|
|
476
|
-
|
|
476
|
+
const marketplaces = getMarketplaces();
|
|
477
477
|
sendTo(clientId, { type: "plugin:marketplaces_result", marketplaces: marketplaces });
|
|
478
478
|
return;
|
|
479
479
|
}
|
|
480
480
|
if (message.type === "plugin:search") {
|
|
481
|
-
|
|
482
|
-
|
|
481
|
+
const searchMsg = message;
|
|
482
|
+
const query = searchMsg.query.trim();
|
|
483
483
|
if (!query) {
|
|
484
484
|
sendTo(clientId, { type: "plugin:search_result", query: query, plugins: [], count: 0 });
|
|
485
485
|
return;
|
|
486
486
|
}
|
|
487
|
-
|
|
487
|
+
const found = searchMarketplacePlugins(query, searchMsg.marketplace);
|
|
488
488
|
sendTo(clientId, { type: "plugin:search_result", query: query, plugins: found, count: found.length });
|
|
489
489
|
return;
|
|
490
490
|
}
|
|
491
491
|
if (message.type === "plugin:install") {
|
|
492
|
-
|
|
493
|
-
|
|
492
|
+
const installMsg = message;
|
|
493
|
+
const installArg = installMsg.name + "@" + installMsg.marketplace;
|
|
494
494
|
try {
|
|
495
|
-
|
|
495
|
+
const proc = spawn("claude", ["plugin", "install", installArg], {
|
|
496
496
|
cwd: homedir(),
|
|
497
497
|
stdio: ["ignore", "pipe", "pipe"],
|
|
498
498
|
});
|
|
499
|
-
|
|
499
|
+
const timeout = setTimeout(function () {
|
|
500
500
|
proc.kill();
|
|
501
501
|
}, 120000);
|
|
502
502
|
proc.on("close", function (code) {
|
|
@@ -516,14 +516,14 @@ registerHandler("plugin", function (clientId, message) {
|
|
|
516
516
|
return;
|
|
517
517
|
}
|
|
518
518
|
if (message.type === "plugin:uninstall") {
|
|
519
|
-
|
|
520
|
-
|
|
519
|
+
const uninstallMsg = message;
|
|
520
|
+
const uninstallArg = uninstallMsg.name + "@" + uninstallMsg.marketplace;
|
|
521
521
|
try {
|
|
522
|
-
|
|
522
|
+
const uninstallProc = spawn("claude", ["plugin", "uninstall", uninstallArg], {
|
|
523
523
|
cwd: homedir(),
|
|
524
524
|
stdio: ["ignore", "pipe", "pipe"],
|
|
525
525
|
});
|
|
526
|
-
|
|
526
|
+
const uninstallTimeout = setTimeout(function () {
|
|
527
527
|
uninstallProc.kill();
|
|
528
528
|
}, 60000);
|
|
529
529
|
uninstallProc.on("close", function (code) {
|
|
@@ -543,14 +543,14 @@ registerHandler("plugin", function (clientId, message) {
|
|
|
543
543
|
return;
|
|
544
544
|
}
|
|
545
545
|
if (message.type === "plugin:update") {
|
|
546
|
-
|
|
547
|
-
|
|
546
|
+
const updateMsg = message;
|
|
547
|
+
const updateArg = updateMsg.name + "@" + updateMsg.marketplace;
|
|
548
548
|
try {
|
|
549
|
-
|
|
549
|
+
const updateProc = spawn("claude", ["plugin", "update", updateArg], {
|
|
550
550
|
cwd: homedir(),
|
|
551
551
|
stdio: ["ignore", "pipe", "pipe"],
|
|
552
552
|
});
|
|
553
|
-
|
|
553
|
+
const updateTimeout = setTimeout(function () {
|
|
554
554
|
updateProc.kill();
|
|
555
555
|
}, 120000);
|
|
556
556
|
updateProc.on("close", function (code) {
|
|
@@ -570,8 +570,8 @@ registerHandler("plugin", function (clientId, message) {
|
|
|
570
570
|
return;
|
|
571
571
|
}
|
|
572
572
|
if (message.type === "plugin:details") {
|
|
573
|
-
|
|
574
|
-
|
|
573
|
+
const detailsMsg = message;
|
|
574
|
+
const details = getPluginDetails(detailsMsg.name, detailsMsg.marketplace);
|
|
575
575
|
if (details) {
|
|
576
576
|
sendTo(clientId, { type: "plugin:details_result", plugin: details });
|
|
577
577
|
}
|
|
@@ -581,12 +581,12 @@ registerHandler("plugin", function (clientId, message) {
|
|
|
581
581
|
return;
|
|
582
582
|
}
|
|
583
583
|
if (message.type === "plugin:discover") {
|
|
584
|
-
|
|
584
|
+
const allPlugins = discoverPlugins();
|
|
585
585
|
sendTo(clientId, { type: "plugin:discover_result", plugins: allPlugins });
|
|
586
586
|
return;
|
|
587
587
|
}
|
|
588
588
|
if (message.type === "plugin:errors") {
|
|
589
|
-
|
|
589
|
+
const pluginErrors = getPluginErrors();
|
|
590
590
|
sendTo(clientId, { type: "plugin:errors_result", errors: pluginErrors });
|
|
591
591
|
return;
|
|
592
592
|
}
|