@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
|
@@ -5,26 +5,26 @@ function getPeersPath() {
|
|
|
5
5
|
return join(getLatticeHome(), "peers.json");
|
|
6
6
|
}
|
|
7
7
|
export function loadPeers() {
|
|
8
|
-
|
|
8
|
+
const path = getPeersPath();
|
|
9
9
|
if (!existsSync(path)) {
|
|
10
10
|
return [];
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
const raw = readFileSync(path, "utf-8");
|
|
13
13
|
return JSON.parse(raw);
|
|
14
14
|
}
|
|
15
15
|
export function savePeers(peers) {
|
|
16
|
-
|
|
16
|
+
const path = getPeersPath();
|
|
17
17
|
writeFileSync(path, JSON.stringify(peers, null, 2), "utf-8");
|
|
18
18
|
}
|
|
19
19
|
export function addPeer(peer) {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const peers = loadPeers();
|
|
21
|
+
const idx = peers.findIndex(function (p) { return p.id === peer.id; });
|
|
22
22
|
if (idx >= 0) {
|
|
23
23
|
peers[idx] = peer;
|
|
24
24
|
}
|
|
25
25
|
else {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
const addrSet = new Set(peer.addresses);
|
|
27
|
+
const dupeIdx = peers.findIndex(function (p) {
|
|
28
28
|
return p.addresses.some(function (a) { return addrSet.has(a); });
|
|
29
29
|
});
|
|
30
30
|
if (dupeIdx >= 0) {
|
|
@@ -37,8 +37,8 @@ export function addPeer(peer) {
|
|
|
37
37
|
savePeers(peers);
|
|
38
38
|
}
|
|
39
39
|
export function removePeer(nodeId) {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
const peers = loadPeers();
|
|
41
|
+
const next = peers.filter(function (p) { return p.id !== nodeId; });
|
|
42
42
|
if (next.length === peers.length) {
|
|
43
43
|
return false;
|
|
44
44
|
}
|
|
@@ -46,7 +46,7 @@ export function removePeer(nodeId) {
|
|
|
46
46
|
return true;
|
|
47
47
|
}
|
|
48
48
|
export function getPeer(nodeId) {
|
|
49
|
-
|
|
49
|
+
const peers = loadPeers();
|
|
50
50
|
return peers.find(function (p) { return p.id === nodeId; });
|
|
51
51
|
}
|
|
52
52
|
export function isPaired(nodeId) {
|
|
@@ -3,19 +3,19 @@ import { getPeerConnection } from "./connector.js";
|
|
|
3
3
|
import { sendTo, registerVirtualClient, removeVirtualClient } from "../ws/broadcast.js";
|
|
4
4
|
import { routeMessage } from "../ws/router.js";
|
|
5
5
|
import { log } from "../logger.js";
|
|
6
|
-
|
|
6
|
+
const pendingRequests = new Map();
|
|
7
7
|
export function proxyToRemoteNode(nodeId, projectSlug, clientId, message) {
|
|
8
8
|
log.meshProxy("→ proxy %s to node %s for project %s", message.type, nodeId.slice(0, 8), projectSlug);
|
|
9
|
-
|
|
9
|
+
const ws = getPeerConnection(nodeId);
|
|
10
10
|
if (!ws) {
|
|
11
11
|
log.meshProxy(" ✗ no connection to node %s", nodeId.slice(0, 8));
|
|
12
12
|
sendTo(clientId, { type: "chat:error", message: "Remote node is not connected" });
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
|
|
15
|
+
const requestId = randomUUID();
|
|
16
16
|
pendingRequests.set(requestId, clientId);
|
|
17
17
|
log.meshProxy(" envelope requestId=%s", requestId.slice(0, 8));
|
|
18
|
-
|
|
18
|
+
const envelope = {
|
|
19
19
|
type: "mesh:proxy_request",
|
|
20
20
|
projectSlug: projectSlug,
|
|
21
21
|
requestId: requestId,
|
|
@@ -24,17 +24,17 @@ export function proxyToRemoteNode(nodeId, projectSlug, clientId, message) {
|
|
|
24
24
|
ws.send(JSON.stringify(envelope));
|
|
25
25
|
}
|
|
26
26
|
export function handleProxyRequest(sourceNodeId, msg) {
|
|
27
|
-
|
|
27
|
+
const proxyClientId = "mesh-proxy:" + sourceNodeId + ":" + msg.requestId;
|
|
28
28
|
log.meshProxy("← proxy_request from %s: %s for %s (reqId=%s)", sourceNodeId.slice(0, 8), msg.payload.type, msg.projectSlug, msg.requestId.slice(0, 8));
|
|
29
29
|
registerVirtualClient(proxyClientId, function (response) {
|
|
30
30
|
log.meshProxy(" → proxy_response %s back to %s", response.type, sourceNodeId.slice(0, 8));
|
|
31
|
-
|
|
31
|
+
const ws = getPeerConnection(sourceNodeId);
|
|
32
32
|
if (!ws) {
|
|
33
33
|
console.warn("[mesh/proxy] Cannot send response, no connection to: " + sourceNodeId);
|
|
34
34
|
removeVirtualClient(proxyClientId);
|
|
35
35
|
return;
|
|
36
36
|
}
|
|
37
|
-
|
|
37
|
+
const envelope = {
|
|
38
38
|
type: "mesh:proxy_response",
|
|
39
39
|
projectSlug: msg.projectSlug,
|
|
40
40
|
requestId: msg.requestId,
|
|
@@ -47,7 +47,7 @@ export function handleProxyRequest(sourceNodeId, msg) {
|
|
|
47
47
|
}
|
|
48
48
|
export function handleProxyResponse(msg) {
|
|
49
49
|
log.meshProxy("← proxy_response %s (reqId=%s)", msg.payload.type, msg.requestId.slice(0, 8));
|
|
50
|
-
|
|
50
|
+
const clientId = pendingRequests.get(msg.requestId);
|
|
51
51
|
if (!clientId) {
|
|
52
52
|
log.meshProxy(" ✗ no pending request for %s", msg.requestId.slice(0, 8));
|
|
53
53
|
return;
|
|
@@ -55,13 +55,13 @@ export function handleProxyResponse(msg) {
|
|
|
55
55
|
pendingRequests.delete(msg.requestId);
|
|
56
56
|
sendTo(clientId, msg.payload);
|
|
57
57
|
}
|
|
58
|
-
|
|
58
|
+
const proxyHandlers = new Map();
|
|
59
59
|
export function registerProxyAwareHandler(prefix, handler) {
|
|
60
60
|
proxyHandlers.set(prefix, handler);
|
|
61
61
|
}
|
|
62
62
|
function proxyRouteMessage(clientId, message, sendToFn) {
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
const prefix = message.type.split(":")[0];
|
|
64
|
+
const proxyHandler = proxyHandlers.get(prefix);
|
|
65
65
|
if (proxyHandler) {
|
|
66
66
|
proxyHandler(clientId, message, sendToFn);
|
|
67
67
|
return;
|
|
@@ -69,15 +69,15 @@ function proxyRouteMessage(clientId, message, sendToFn) {
|
|
|
69
69
|
routeMessage(clientId, message);
|
|
70
70
|
}
|
|
71
71
|
export function getProxySendTo(requestId, sourceNodeId) {
|
|
72
|
-
|
|
72
|
+
const clientId = pendingRequests.get(requestId);
|
|
73
73
|
if (clientId !== undefined) {
|
|
74
|
-
|
|
74
|
+
const resolvedClientId = clientId;
|
|
75
75
|
return function (msg) {
|
|
76
76
|
sendTo(resolvedClientId, msg);
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
return function (msg) {
|
|
80
|
-
|
|
80
|
+
const ws = getPeerConnection(sourceNodeId);
|
|
81
81
|
if (!ws) {
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
@@ -3,45 +3,45 @@ import { join } from "node:path";
|
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { getConnectedPeerIds, getPeerConnection } from "./connector.js";
|
|
5
5
|
import { getLatticeHome } from "../config.js";
|
|
6
|
-
|
|
6
|
+
const syncOffsets = new Map();
|
|
7
7
|
function getSyncKey(nodeId, sessionId) {
|
|
8
8
|
return nodeId + ":" + sessionId;
|
|
9
9
|
}
|
|
10
10
|
function getRemoteSessionsDir(nodeId, projectSlug) {
|
|
11
|
-
|
|
11
|
+
const dir = join(getLatticeHome(), "remote-sessions", nodeId, projectSlug);
|
|
12
12
|
if (!existsSync(dir)) {
|
|
13
13
|
mkdirSync(dir, { recursive: true });
|
|
14
14
|
}
|
|
15
15
|
return dir;
|
|
16
16
|
}
|
|
17
17
|
function getSessionFilePath(projectPath, sessionId) {
|
|
18
|
-
|
|
18
|
+
const hash = projectPath.replace(/\//g, "-");
|
|
19
19
|
return join(homedir(), ".claude", "projects", hash, sessionId + ".jsonl");
|
|
20
20
|
}
|
|
21
21
|
export function syncSessionToPeers(projectPath, projectSlug, sessionId) {
|
|
22
|
-
|
|
22
|
+
const filePath = getSessionFilePath(projectPath, sessionId);
|
|
23
23
|
if (!existsSync(filePath)) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
for (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
const content = readFileSync(filePath, "utf-8");
|
|
27
|
+
const peerIds = getConnectedPeerIds();
|
|
28
|
+
for (let i = 0; i < peerIds.length; i++) {
|
|
29
|
+
const nodeId = peerIds[i];
|
|
30
|
+
const key = getSyncKey(nodeId, sessionId);
|
|
31
|
+
const lastOffset = syncOffsets.get(key) || 0;
|
|
32
32
|
if (content.length <= lastOffset) {
|
|
33
33
|
continue;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
const newContent = content.slice(lastOffset);
|
|
36
|
+
const newLines = newContent.split("\n").filter(function (l) { return l.trim().length > 0; });
|
|
37
37
|
if (newLines.length === 0) {
|
|
38
38
|
continue;
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
const ws = getPeerConnection(nodeId);
|
|
41
41
|
if (!ws) {
|
|
42
42
|
continue;
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
const msg = {
|
|
45
45
|
type: "mesh:session_sync",
|
|
46
46
|
projectSlug,
|
|
47
47
|
sessionId,
|
|
@@ -53,28 +53,28 @@ export function syncSessionToPeers(projectPath, projectSlug, sessionId) {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
export function handleSessionSync(nodeId, msg) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
for (
|
|
56
|
+
const dir = getRemoteSessionsDir(nodeId, msg.projectSlug);
|
|
57
|
+
const filePath = join(dir, msg.sessionId + ".jsonl");
|
|
58
|
+
for (let i = 0; i < msg.lines.length; i++) {
|
|
59
59
|
appendFileSync(filePath, msg.lines[i] + "\n", "utf-8");
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
export function handleSessionRequest(nodeId, msg, projectPath) {
|
|
63
|
-
|
|
63
|
+
const filePath = getSessionFilePath(projectPath, msg.sessionId);
|
|
64
64
|
if (!existsSync(filePath)) {
|
|
65
65
|
return;
|
|
66
66
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
const content = readFileSync(filePath, "utf-8");
|
|
68
|
+
const newContent = content.slice(msg.fromOffset);
|
|
69
|
+
const lines = newContent.split("\n").filter(function (l) { return l.trim().length > 0; });
|
|
70
70
|
if (lines.length === 0) {
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
const ws = getPeerConnection(nodeId);
|
|
74
74
|
if (!ws) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
const syncMsg = {
|
|
78
78
|
type: "mesh:session_sync",
|
|
79
79
|
projectSlug: msg.projectSlug,
|
|
80
80
|
sessionId: msg.sessionId,
|
|
@@ -2,8 +2,8 @@ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { randomBytes } from "node:crypto";
|
|
4
4
|
import { getLatticeHome } from "../config.js";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
let bookmarksFile = "";
|
|
6
|
+
let bookmarks = [];
|
|
7
7
|
function getBookmarksPath() {
|
|
8
8
|
if (!bookmarksFile) {
|
|
9
9
|
bookmarksFile = join(getLatticeHome(), "bookmarks.json");
|
|
@@ -11,13 +11,13 @@ function getBookmarksPath() {
|
|
|
11
11
|
return bookmarksFile;
|
|
12
12
|
}
|
|
13
13
|
export function loadBookmarks() {
|
|
14
|
-
|
|
14
|
+
const path = getBookmarksPath();
|
|
15
15
|
if (!existsSync(path)) {
|
|
16
16
|
bookmarks = [];
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
try {
|
|
20
|
-
|
|
20
|
+
const raw = readFileSync(path, "utf-8");
|
|
21
21
|
bookmarks = JSON.parse(raw);
|
|
22
22
|
}
|
|
23
23
|
catch (err) {
|
|
@@ -26,12 +26,12 @@ export function loadBookmarks() {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
function saveBookmarks() {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const path = getBookmarksPath();
|
|
30
|
+
const dir = join(path, "..");
|
|
31
31
|
if (!existsSync(dir)) {
|
|
32
32
|
mkdirSync(dir, { recursive: true });
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
const tmp = path + ".tmp";
|
|
35
35
|
try {
|
|
36
36
|
writeFileSync(tmp, JSON.stringify(bookmarks, null, 2));
|
|
37
37
|
renameSync(tmp, path);
|
|
@@ -41,7 +41,7 @@ function saveBookmarks() {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
export function listBookmarks(projectSlug, sessionId) {
|
|
44
|
-
|
|
44
|
+
let result = bookmarks;
|
|
45
45
|
if (projectSlug) {
|
|
46
46
|
result = result.filter(function (b) { return b.projectSlug === projectSlug; });
|
|
47
47
|
}
|
|
@@ -51,8 +51,8 @@ export function listBookmarks(projectSlug, sessionId) {
|
|
|
51
51
|
return result.slice();
|
|
52
52
|
}
|
|
53
53
|
export function addBookmark(bookmark) {
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
const entry = {
|
|
56
56
|
id: "bm_" + now + "_" + randomBytes(3).toString("hex"),
|
|
57
57
|
sessionId: bookmark.sessionId,
|
|
58
58
|
projectSlug: bookmark.projectSlug,
|
|
@@ -66,7 +66,7 @@ export function addBookmark(bookmark) {
|
|
|
66
66
|
return entry;
|
|
67
67
|
}
|
|
68
68
|
export function removeBookmark(id) {
|
|
69
|
-
for (
|
|
69
|
+
for (let i = 0; i < bookmarks.length; i++) {
|
|
70
70
|
if (bookmarks[i].id === id) {
|
|
71
71
|
bookmarks.splice(i, 1);
|
|
72
72
|
saveBookmarks();
|
|
@@ -5,7 +5,7 @@ import { homedir } from "node:os";
|
|
|
5
5
|
import { guessContextWindow } from "./session.js";
|
|
6
6
|
import { loadConfig } from "../config.js";
|
|
7
7
|
import { getInstalledPluginCount, getPluginSkillRuleTokenEstimate } from "../handlers/plugins.js";
|
|
8
|
-
|
|
8
|
+
const encoder = encodingForModel("gpt-4o");
|
|
9
9
|
function countTokens(text) {
|
|
10
10
|
if (!text)
|
|
11
11
|
return 0;
|
|
@@ -23,9 +23,9 @@ function readDirFiles(dirPath) {
|
|
|
23
23
|
try {
|
|
24
24
|
if (!existsSync(dirPath))
|
|
25
25
|
return "";
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
for (
|
|
26
|
+
const files = readdirSync(dirPath, { withFileTypes: true });
|
|
27
|
+
let content = "";
|
|
28
|
+
for (let i = 0; i < files.length; i++) {
|
|
29
29
|
if (files[i].isFile()) {
|
|
30
30
|
content += readFileSafe(join(dirPath, files[i].name)) + "\n";
|
|
31
31
|
}
|
|
@@ -39,13 +39,13 @@ function projectPathToHash(projectPath) {
|
|
|
39
39
|
return projectPath.replace(/\//g, "-");
|
|
40
40
|
}
|
|
41
41
|
function getProjectPath(projectSlug) {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
const config = loadConfig();
|
|
43
|
+
const project = config.projects.find(function (p) { return p.slug === projectSlug; });
|
|
44
44
|
return project ? project.path : null;
|
|
45
45
|
}
|
|
46
46
|
// Known built-in Claude Code tools with approximate per-tool token counts
|
|
47
47
|
// These are the tool definitions sent in every API request
|
|
48
|
-
|
|
48
|
+
const BUILTIN_TOOLS = {
|
|
49
49
|
"Read": 350,
|
|
50
50
|
"Write": 300,
|
|
51
51
|
"Edit": 400,
|
|
@@ -71,20 +71,20 @@ var BUILTIN_TOOLS = {
|
|
|
71
71
|
"ToolSearch": 250,
|
|
72
72
|
};
|
|
73
73
|
// Average tokens per MCP tool definition (name + description + JSON schema)
|
|
74
|
-
|
|
74
|
+
const MCP_TOOL_AVG_TOKENS = 250;
|
|
75
75
|
function extractToolsFromSession(lines) {
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
const builtinSet = new Set();
|
|
77
|
+
const mcpMap = new Map();
|
|
78
78
|
// First: check compact boundary metadata for preCompactDiscoveredTools
|
|
79
|
-
for (
|
|
80
|
-
|
|
79
|
+
for (let i = 0; i < lines.length; i++) {
|
|
80
|
+
const line = lines[i].trim();
|
|
81
81
|
if (!line || !line.includes("compactMetadata"))
|
|
82
82
|
continue;
|
|
83
83
|
try {
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
const parsed = JSON.parse(line);
|
|
85
|
+
const tools = parsed.compactMetadata?.preCompactDiscoveredTools;
|
|
86
86
|
if (Array.isArray(tools)) {
|
|
87
|
-
for (
|
|
87
|
+
for (let t = 0; t < tools.length; t++) {
|
|
88
88
|
categorizeToolName(tools[t], builtinSet, mcpMap);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -92,15 +92,15 @@ function extractToolsFromSession(lines) {
|
|
|
92
92
|
catch { }
|
|
93
93
|
}
|
|
94
94
|
// Second: scan tool_use blocks from assistant messages for any we missed
|
|
95
|
-
for (
|
|
96
|
-
|
|
95
|
+
for (let j = 0; j < lines.length; j++) {
|
|
96
|
+
const aLine = lines[j].trim();
|
|
97
97
|
if (!aLine || !aLine.includes("tool_use"))
|
|
98
98
|
continue;
|
|
99
99
|
try {
|
|
100
|
-
|
|
100
|
+
const aParsed = JSON.parse(aLine);
|
|
101
101
|
if (aParsed.type === "assistant" && aParsed.message && Array.isArray(aParsed.message.content)) {
|
|
102
|
-
for (
|
|
103
|
-
|
|
102
|
+
for (let k = 0; k < aParsed.message.content.length; k++) {
|
|
103
|
+
const block = aParsed.message.content[k];
|
|
104
104
|
if (block.type === "tool_use" && block.name) {
|
|
105
105
|
categorizeToolName(block.name, builtinSet, mcpMap);
|
|
106
106
|
}
|
|
@@ -125,8 +125,8 @@ function extractToolsFromSession(lines) {
|
|
|
125
125
|
}
|
|
126
126
|
function categorizeToolName(name, builtinSet, mcpMap) {
|
|
127
127
|
if (name.startsWith("mcp__")) {
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
const parts = name.split("__");
|
|
129
|
+
const serverName = parts[1] || "unknown";
|
|
130
130
|
if (!mcpMap.has(serverName)) {
|
|
131
131
|
mcpMap.set(serverName, new Set());
|
|
132
132
|
}
|
|
@@ -137,13 +137,13 @@ function categorizeToolName(name, builtinSet, mcpMap) {
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
function estimateBuiltinToolTokens(toolNames) {
|
|
140
|
-
|
|
141
|
-
for (
|
|
140
|
+
let total = 0;
|
|
141
|
+
for (let i = 0; i < toolNames.length; i++) {
|
|
142
142
|
total += BUILTIN_TOOLS[toolNames[i]] || 300;
|
|
143
143
|
}
|
|
144
144
|
// Also include tools that are always sent but might not appear in usage
|
|
145
|
-
|
|
146
|
-
for (
|
|
145
|
+
const knownKeys = Object.keys(BUILTIN_TOOLS);
|
|
146
|
+
for (let j = 0; j < knownKeys.length; j++) {
|
|
147
147
|
if (toolNames.indexOf(knownKeys[j]) === -1) {
|
|
148
148
|
total += BUILTIN_TOOLS[knownKeys[j]];
|
|
149
149
|
}
|
|
@@ -151,55 +151,55 @@ function estimateBuiltinToolTokens(toolNames) {
|
|
|
151
151
|
return total;
|
|
152
152
|
}
|
|
153
153
|
export async function getContextBreakdown(projectSlug, sessionId) {
|
|
154
|
-
|
|
154
|
+
const projectPath = getProjectPath(projectSlug);
|
|
155
155
|
if (!projectPath)
|
|
156
156
|
return null;
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
157
|
+
const home = homedir();
|
|
158
|
+
const hash = projectPathToHash(projectPath);
|
|
159
|
+
const sessionFile = join(home, ".claude", "projects", hash, sessionId + ".jsonl");
|
|
160
160
|
if (!existsSync(sessionFile))
|
|
161
161
|
return null;
|
|
162
162
|
// Read instruction files
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
163
|
+
const globalClaudeMd = readFileSafe(join(home, ".claude", "CLAUDE.md"));
|
|
164
|
+
const globalRulesContent = readDirFiles(join(home, ".claude", "rules"));
|
|
165
|
+
const projectClaudeMd = readFileSafe(join(projectPath, "CLAUDE.md"));
|
|
166
|
+
const projectLocalClaudeMd = readFileSafe(join(home, ".claude", "projects", hash, "CLAUDE.md"));
|
|
167
|
+
const memoryContent = readDirFiles(join(home, ".claude", "projects", hash, "memory"));
|
|
168
|
+
const memoryIndex = readFileSafe(join(home, ".claude", "projects", hash, "MEMORY.md"));
|
|
169
|
+
const instructionsTokens = countTokens(globalClaudeMd + globalRulesContent + projectClaudeMd + projectLocalClaudeMd);
|
|
170
|
+
const memoryTokens = countTokens(memoryContent + memoryIndex);
|
|
171
171
|
// Parse session — read last 2MB for recent context (avoids reading 35MB+ files)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
const fd = openSync(sessionFile, "r");
|
|
173
|
+
const fileStat = fstatSync(fd);
|
|
174
|
+
const readSize = Math.min(fileStat.size, 2 * 1024 * 1024);
|
|
175
|
+
const readBuf = Buffer.alloc(readSize);
|
|
176
176
|
readSync(fd, readBuf, 0, readSize, fileStat.size - readSize);
|
|
177
177
|
closeSync(fd);
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
const content = readBuf.toString("utf-8");
|
|
179
|
+
const lines = content.split("\n").filter(function (l) { return l.length > 0; });
|
|
180
180
|
// Extract tool info
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
const toolCounts = extractToolsFromSession(lines);
|
|
182
|
+
const builtinToolTokens = estimateBuiltinToolTokens(toolCounts.builtinTools);
|
|
183
183
|
// Parse conversation messages
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
for (
|
|
190
|
-
|
|
184
|
+
let userText = "";
|
|
185
|
+
let assistantText = "";
|
|
186
|
+
let toolResultText = "";
|
|
187
|
+
let contextWindow = 0;
|
|
188
|
+
let lastModel = "";
|
|
189
|
+
for (let i = 0; i < lines.length; i++) {
|
|
190
|
+
const line = lines[i].trim();
|
|
191
191
|
if (!line)
|
|
192
192
|
continue;
|
|
193
193
|
try {
|
|
194
|
-
|
|
194
|
+
const parsed = JSON.parse(line);
|
|
195
195
|
if (parsed.type === "user" && parsed.message) {
|
|
196
|
-
|
|
196
|
+
const userContent = parsed.message.content;
|
|
197
197
|
if (typeof userContent === "string") {
|
|
198
198
|
userText += userContent + "\n";
|
|
199
199
|
}
|
|
200
200
|
else if (Array.isArray(userContent)) {
|
|
201
|
-
for (
|
|
202
|
-
|
|
201
|
+
for (let j = 0; j < userContent.length; j++) {
|
|
202
|
+
const block = userContent[j];
|
|
203
203
|
if (block.type === "text" && block.text) {
|
|
204
204
|
userText += block.text + "\n";
|
|
205
205
|
}
|
|
@@ -208,7 +208,7 @@ export async function getContextBreakdown(projectSlug, sessionId) {
|
|
|
208
208
|
toolResultText += block.content + "\n";
|
|
209
209
|
}
|
|
210
210
|
else if (Array.isArray(block.content)) {
|
|
211
|
-
for (
|
|
211
|
+
for (let ri = 0; ri < block.content.length; ri++) {
|
|
212
212
|
if (block.content[ri].type === "text" && block.content[ri].text) {
|
|
213
213
|
toolResultText += block.content[ri].text + "\n";
|
|
214
214
|
}
|
|
@@ -219,13 +219,13 @@ export async function getContextBreakdown(projectSlug, sessionId) {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
else if (parsed.type === "assistant" && parsed.message) {
|
|
222
|
-
|
|
222
|
+
const aContent = parsed.message.content;
|
|
223
223
|
if (typeof aContent === "string") {
|
|
224
224
|
assistantText += aContent + "\n";
|
|
225
225
|
}
|
|
226
226
|
else if (Array.isArray(aContent)) {
|
|
227
|
-
for (
|
|
228
|
-
|
|
227
|
+
for (let k = 0; k < aContent.length; k++) {
|
|
228
|
+
const ab = aContent[k];
|
|
229
229
|
if (ab.type === "text" && ab.text) {
|
|
230
230
|
assistantText += ab.text + "\n";
|
|
231
231
|
}
|
|
@@ -244,19 +244,19 @@ export async function getContextBreakdown(projectSlug, sessionId) {
|
|
|
244
244
|
}
|
|
245
245
|
catch { }
|
|
246
246
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
const userTokens = countTokens(userText);
|
|
248
|
+
const assistantTokens = countTokens(assistantText);
|
|
249
|
+
const toolResultTokens = countTokens(toolResultText);
|
|
250
250
|
contextWindow = guessContextWindow(lastModel);
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
const autocompactAt = Math.round(contextWindow * 0.9);
|
|
252
|
+
const systemPromptEstimate = 4500;
|
|
253
|
+
const segments = [
|
|
254
254
|
{ label: "System prompt", tokens: systemPromptEstimate, id: "system", estimated: true },
|
|
255
255
|
{ label: "Built-in tools (" + Object.keys(BUILTIN_TOOLS).length + ")", tokens: builtinToolTokens, id: "builtin_tools", estimated: true },
|
|
256
256
|
];
|
|
257
257
|
// Add per-MCP-server segments
|
|
258
258
|
toolCounts.mcpTools.forEach(function (tools, serverName) {
|
|
259
|
-
|
|
259
|
+
const mcpTokens = tools.length * MCP_TOOL_AVG_TOKENS;
|
|
260
260
|
segments.push({
|
|
261
261
|
label: serverName + " (" + tools.length + " tools)",
|
|
262
262
|
tokens: mcpTokens,
|
|
@@ -264,9 +264,9 @@ export async function getContextBreakdown(projectSlug, sessionId) {
|
|
|
264
264
|
estimated: true,
|
|
265
265
|
});
|
|
266
266
|
});
|
|
267
|
-
|
|
267
|
+
const pluginCount = getInstalledPluginCount();
|
|
268
268
|
if (pluginCount > 0) {
|
|
269
|
-
|
|
269
|
+
const pluginTokens = getPluginSkillRuleTokenEstimate();
|
|
270
270
|
segments.push({
|
|
271
271
|
label: "Plugins (" + pluginCount + ")",
|
|
272
272
|
tokens: pluginTokens,
|