@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
|
@@ -15,13 +15,13 @@ import { execSync } from "node:child_process";
|
|
|
15
15
|
import { sendPush } from "../push.js";
|
|
16
16
|
import { parseSpecPopulate, parsePlanContent, parseSpecActivity, populateSpec, updateSpec as updateSpecData, addActivity } from "../features/specs.js";
|
|
17
17
|
import { ContextAnalyzer } from "../features/context-analyzer.js";
|
|
18
|
-
|
|
18
|
+
const HIDDEN_TOOLS = new Set([
|
|
19
19
|
"TaskUpdate", "TaskCreate", "TaskGet", "TaskList", "TaskOutput", "TaskStop",
|
|
20
20
|
"TodoWrite", "TodoRead",
|
|
21
21
|
"EnterPlanMode", "ExitPlanMode",
|
|
22
22
|
"ToolSearch",
|
|
23
23
|
]);
|
|
24
|
-
|
|
24
|
+
let claudeExePath = null;
|
|
25
25
|
function getClaudeExecutablePath() {
|
|
26
26
|
if (claudeExePath)
|
|
27
27
|
return claudeExePath;
|
|
@@ -34,21 +34,21 @@ function getClaudeExecutablePath() {
|
|
|
34
34
|
}
|
|
35
35
|
return claudeExePath;
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
const pendingPermissions = new Map();
|
|
38
|
+
const pendingElicitations = new Map();
|
|
39
|
+
const autoApprovedTools = new Map();
|
|
40
|
+
const sessionPermissionOverrides = new Map();
|
|
41
41
|
export function getAvailableModels() {
|
|
42
42
|
return getWarmupModels();
|
|
43
43
|
}
|
|
44
44
|
function createMessageQueue() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const queue = [];
|
|
46
|
+
let waiting = null;
|
|
47
|
+
let ended = false;
|
|
48
48
|
return {
|
|
49
49
|
push: function (msg) {
|
|
50
50
|
if (waiting) {
|
|
51
|
-
|
|
51
|
+
const resolve = waiting;
|
|
52
52
|
waiting = null;
|
|
53
53
|
resolve({ value: msg, done: false });
|
|
54
54
|
}
|
|
@@ -59,7 +59,7 @@ function createMessageQueue() {
|
|
|
59
59
|
end: function () {
|
|
60
60
|
ended = true;
|
|
61
61
|
if (waiting) {
|
|
62
|
-
|
|
62
|
+
const resolve = waiting;
|
|
63
63
|
waiting = null;
|
|
64
64
|
resolve({ value: undefined, done: true });
|
|
65
65
|
}
|
|
@@ -81,32 +81,32 @@ function createMessageQueue() {
|
|
|
81
81
|
},
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
const sessionStreams = new Map();
|
|
85
|
+
const pendingStreams = new Set();
|
|
86
|
+
const interruptedSessions = new Set();
|
|
87
87
|
function getStreamStatePath() {
|
|
88
88
|
return join(getLatticeHome(), "active-streams.json");
|
|
89
89
|
}
|
|
90
90
|
function persistStreamState() {
|
|
91
|
-
|
|
91
|
+
const entries = {};
|
|
92
92
|
sessionStreams.forEach(function (session, sessionId) {
|
|
93
93
|
if (!session.ended) {
|
|
94
94
|
entries[sessionId] = { projectSlug: session.projectSlug, clientId: session.clientId, startedAt: session.turnStartTime };
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
|
-
|
|
97
|
+
const dir = getLatticeHome();
|
|
98
98
|
if (!existsSync(dir)) {
|
|
99
99
|
mkdirSync(dir, { recursive: true });
|
|
100
100
|
}
|
|
101
101
|
writeFileSync(getStreamStatePath(), JSON.stringify(entries), "utf-8");
|
|
102
102
|
}
|
|
103
103
|
export function loadInterruptedSessions() {
|
|
104
|
-
|
|
104
|
+
const path = getStreamStatePath();
|
|
105
105
|
if (!existsSync(path))
|
|
106
106
|
return;
|
|
107
107
|
try {
|
|
108
|
-
|
|
109
|
-
for (
|
|
108
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
109
|
+
for (const sessionId of Object.keys(data)) {
|
|
110
110
|
interruptedSessions.add(sessionId);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
@@ -126,14 +126,14 @@ export function deletePendingPermission(requestId) {
|
|
|
126
126
|
pendingPermissions.delete(requestId);
|
|
127
127
|
}
|
|
128
128
|
export function cleanupClientPermissions(clientId) {
|
|
129
|
-
|
|
129
|
+
const toRemove = [];
|
|
130
130
|
pendingPermissions.forEach(function (entry, requestId) {
|
|
131
131
|
if (entry.clientId === clientId) {
|
|
132
132
|
toRemove.push(requestId);
|
|
133
133
|
entry.resolve({ behavior: "deny", message: "Client disconnected.", toolUseID: entry.toolUseID });
|
|
134
134
|
}
|
|
135
135
|
});
|
|
136
|
-
for (
|
|
136
|
+
for (let i = 0; i < toRemove.length; i++) {
|
|
137
137
|
pendingPermissions.delete(toRemove[i]);
|
|
138
138
|
}
|
|
139
139
|
if (toRemove.length > 0) {
|
|
@@ -144,26 +144,26 @@ export function getPendingElicitation(requestId) {
|
|
|
144
144
|
return pendingElicitations.get(requestId);
|
|
145
145
|
}
|
|
146
146
|
export function resolveElicitation(requestId, result) {
|
|
147
|
-
|
|
147
|
+
const pending = pendingElicitations.get(requestId);
|
|
148
148
|
if (!pending)
|
|
149
149
|
return;
|
|
150
150
|
pendingElicitations.delete(requestId);
|
|
151
151
|
pending.resolve(result);
|
|
152
152
|
}
|
|
153
153
|
export function cleanupClientElicitations(clientId) {
|
|
154
|
-
|
|
154
|
+
const toRemove = [];
|
|
155
155
|
pendingElicitations.forEach(function (entry, requestId) {
|
|
156
156
|
if (entry.clientId === clientId) {
|
|
157
157
|
toRemove.push(requestId);
|
|
158
158
|
entry.resolve({ action: "decline" });
|
|
159
159
|
}
|
|
160
160
|
});
|
|
161
|
-
for (
|
|
161
|
+
for (let i = 0; i < toRemove.length; i++) {
|
|
162
162
|
pendingElicitations.delete(toRemove[i]);
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
export function addAutoApprovedTool(sessionId, toolName) {
|
|
166
|
-
|
|
166
|
+
let tools = autoApprovedTools.get(sessionId);
|
|
167
167
|
if (!tools) {
|
|
168
168
|
tools = new Set();
|
|
169
169
|
autoApprovedTools.set(sessionId, tools);
|
|
@@ -174,15 +174,15 @@ export function setSessionPermissionOverride(sessionId, mode) {
|
|
|
174
174
|
sessionPermissionOverrides.set(sessionId, mode);
|
|
175
175
|
}
|
|
176
176
|
export function getActiveStream(sessionId) {
|
|
177
|
-
|
|
177
|
+
const session = sessionStreams.get(sessionId);
|
|
178
178
|
return session && !session.ended ? session.queryInstance : undefined;
|
|
179
179
|
}
|
|
180
180
|
export function getSessionStream(sessionId) {
|
|
181
|
-
|
|
181
|
+
const session = sessionStreams.get(sessionId);
|
|
182
182
|
return session && !session.ended ? session : undefined;
|
|
183
183
|
}
|
|
184
184
|
export function getActiveStreamCount() {
|
|
185
|
-
|
|
185
|
+
let count = 0;
|
|
186
186
|
sessionStreams.forEach(function (session) {
|
|
187
187
|
if (!session.ended)
|
|
188
188
|
count++;
|
|
@@ -190,7 +190,7 @@ export function getActiveStreamCount() {
|
|
|
190
190
|
return count;
|
|
191
191
|
}
|
|
192
192
|
export function getActiveStreamCountForProject(projectSlug) {
|
|
193
|
-
|
|
193
|
+
let count = 0;
|
|
194
194
|
sessionStreams.forEach(function (session) {
|
|
195
195
|
if (!session.ended && session.projectSlug === projectSlug)
|
|
196
196
|
count++;
|
|
@@ -198,11 +198,11 @@ export function getActiveStreamCountForProject(projectSlug) {
|
|
|
198
198
|
return count;
|
|
199
199
|
}
|
|
200
200
|
export function getSessionStreamClientId(sessionId) {
|
|
201
|
-
|
|
201
|
+
const session = sessionStreams.get(sessionId);
|
|
202
202
|
return session && !session.ended ? session.clientId : undefined;
|
|
203
203
|
}
|
|
204
204
|
export function endSessionStream(sessionId) {
|
|
205
|
-
|
|
205
|
+
const session = sessionStreams.get(sessionId);
|
|
206
206
|
if (session && !session.ended) {
|
|
207
207
|
session.ended = true;
|
|
208
208
|
session.messageQueue.end();
|
|
@@ -210,30 +210,30 @@ export function endSessionStream(sessionId) {
|
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
212
|
export function matchesAllowRules(rules, toolName, currentRule) {
|
|
213
|
-
for (
|
|
214
|
-
|
|
213
|
+
for (let i = 0; i < rules.length; i++) {
|
|
214
|
+
const rule = rules[i];
|
|
215
215
|
if (rule === toolName || rule === currentRule)
|
|
216
216
|
return true;
|
|
217
|
-
|
|
217
|
+
const ruleMatch = rule.match(/^(\w+)\((.+)\)$/);
|
|
218
218
|
if (!ruleMatch)
|
|
219
219
|
continue;
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
const ruleToolName = ruleMatch[1];
|
|
221
|
+
const rulePattern = ruleMatch[2];
|
|
222
222
|
if (ruleToolName !== toolName)
|
|
223
223
|
continue;
|
|
224
|
-
|
|
224
|
+
const currentMatch = currentRule.match(/^\w+\((.+)\)$/);
|
|
225
225
|
if (!currentMatch)
|
|
226
226
|
continue;
|
|
227
|
-
|
|
227
|
+
const currentContent = currentMatch[1];
|
|
228
228
|
if (rulePattern === "*")
|
|
229
229
|
return true;
|
|
230
230
|
if (rulePattern.endsWith(":*")) {
|
|
231
|
-
|
|
231
|
+
const rulePrefix = rulePattern.slice(0, -1);
|
|
232
232
|
if (currentContent.startsWith(rulePrefix) || currentContent === rulePattern.slice(0, -2))
|
|
233
233
|
return true;
|
|
234
234
|
}
|
|
235
235
|
if (rulePattern.endsWith("**")) {
|
|
236
|
-
|
|
236
|
+
const dirPrefix = rulePattern.slice(0, -2);
|
|
237
237
|
if (currentContent.startsWith(dirPrefix))
|
|
238
238
|
return true;
|
|
239
239
|
}
|
|
@@ -242,14 +242,14 @@ export function matchesAllowRules(rules, toolName, currentRule) {
|
|
|
242
242
|
}
|
|
243
243
|
export function buildPermissionRule(toolName, input) {
|
|
244
244
|
if (toolName === "Bash") {
|
|
245
|
-
|
|
245
|
+
const command = input.command || input.cmd || "";
|
|
246
246
|
if (typeof command === "string" && command) {
|
|
247
|
-
|
|
247
|
+
const firstWord = command.split(/\s+/)[0];
|
|
248
248
|
if (firstWord === "curl" || firstWord === "wget") {
|
|
249
|
-
|
|
249
|
+
const urlMatch = command.match(/https?:\/\/[^\s"']+/);
|
|
250
250
|
if (urlMatch) {
|
|
251
251
|
try {
|
|
252
|
-
|
|
252
|
+
const parsed = new URL(urlMatch[0]);
|
|
253
253
|
return toolName + "(" + firstWord + ":" + parsed.hostname + ")";
|
|
254
254
|
}
|
|
255
255
|
catch { }
|
|
@@ -259,22 +259,22 @@ export function buildPermissionRule(toolName, input) {
|
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
261
|
if (toolName === "Read" || toolName === "Edit" || toolName === "Write") {
|
|
262
|
-
|
|
262
|
+
const filePath = input.file_path || input.path || "";
|
|
263
263
|
if (typeof filePath === "string" && filePath) {
|
|
264
|
-
|
|
264
|
+
const dirParts = filePath.split("/");
|
|
265
265
|
dirParts.pop();
|
|
266
|
-
|
|
266
|
+
const dir = dirParts.join("/");
|
|
267
267
|
if (dir) {
|
|
268
|
-
|
|
268
|
+
const prefix = dir.startsWith("/") ? "" : "/";
|
|
269
269
|
return toolName + "(" + prefix + dir + "/**)";
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
if (toolName === "WebFetch") {
|
|
274
|
-
|
|
274
|
+
const url = input.url || "";
|
|
275
275
|
if (typeof url === "string" && url) {
|
|
276
276
|
try {
|
|
277
|
-
|
|
277
|
+
const parsed = new URL(url);
|
|
278
278
|
return toolName + "(domain:" + parsed.hostname + ")";
|
|
279
279
|
}
|
|
280
280
|
catch { }
|
|
@@ -282,7 +282,7 @@ export function buildPermissionRule(toolName, input) {
|
|
|
282
282
|
}
|
|
283
283
|
return toolName;
|
|
284
284
|
}
|
|
285
|
-
|
|
285
|
+
const STRIP_PREFIXES = [
|
|
286
286
|
/^please\s+/i,
|
|
287
287
|
/^can\s+you\s+/i,
|
|
288
288
|
/^could\s+you\s+/i,
|
|
@@ -292,17 +292,17 @@ var STRIP_PREFIXES = [
|
|
|
292
292
|
/^i'd\s+like\s+you\s+to\s+/i,
|
|
293
293
|
];
|
|
294
294
|
function generateSessionTitle(userMessage) {
|
|
295
|
-
|
|
295
|
+
let title = userMessage
|
|
296
296
|
.replace(/[#*_`~>\[\]()!]/g, "")
|
|
297
297
|
.replace(/\n+/g, " ")
|
|
298
298
|
.trim();
|
|
299
|
-
for (
|
|
299
|
+
for (let i = 0; i < STRIP_PREFIXES.length; i++) {
|
|
300
300
|
title = title.replace(STRIP_PREFIXES[i], "");
|
|
301
301
|
}
|
|
302
302
|
title = title.trim();
|
|
303
303
|
if (title.length > 50) {
|
|
304
304
|
title = title.slice(0, 50);
|
|
305
|
-
|
|
305
|
+
const lastSpace = title.lastIndexOf(" ");
|
|
306
306
|
if (lastSpace > 30) {
|
|
307
307
|
title = title.slice(0, lastSpace);
|
|
308
308
|
}
|
|
@@ -321,10 +321,10 @@ function isDefaultTitle(title) {
|
|
|
321
321
|
}
|
|
322
322
|
function resolvePromptText(text) {
|
|
323
323
|
if (text.startsWith("/")) {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
324
|
+
const parts = text.split(/\s+/);
|
|
325
|
+
const skillName = parts[0].slice(1);
|
|
326
|
+
const skillArgs = parts.slice(1).join(" ");
|
|
327
|
+
const skillContent = resolveSkillContent(skillName);
|
|
328
328
|
if (skillContent) {
|
|
329
329
|
return "<skill-name>" + skillName + "</skill-name>\n" +
|
|
330
330
|
"<skill-content>\n" + skillContent + "\n</skill-content>\n" +
|
|
@@ -336,10 +336,10 @@ function resolvePromptText(text) {
|
|
|
336
336
|
}
|
|
337
337
|
function buildSDKUserMessage(prompt, attachments, sessionId) {
|
|
338
338
|
if (attachments && attachments.length > 0) {
|
|
339
|
-
|
|
339
|
+
const contentBlocks = [];
|
|
340
340
|
contentBlocks.push({ type: "text", text: prompt });
|
|
341
|
-
for (
|
|
342
|
-
|
|
341
|
+
for (let ai = 0; ai < attachments.length; ai++) {
|
|
342
|
+
const att = attachments[ai];
|
|
343
343
|
if (att.type === "image" && att.mimeType && !att.mimeType.includes("svg")) {
|
|
344
344
|
contentBlocks.push({
|
|
345
345
|
type: "image",
|
|
@@ -351,7 +351,7 @@ function buildSDKUserMessage(prompt, attachments, sessionId) {
|
|
|
351
351
|
});
|
|
352
352
|
}
|
|
353
353
|
else {
|
|
354
|
-
|
|
354
|
+
const prefix = att.name ? "[Attached: " + att.name + "]\n" : "";
|
|
355
355
|
contentBlocks.push({
|
|
356
356
|
type: "text",
|
|
357
357
|
text: prefix + att.content,
|
|
@@ -373,13 +373,13 @@ function buildSDKUserMessage(prompt, attachments, sessionId) {
|
|
|
373
373
|
};
|
|
374
374
|
}
|
|
375
375
|
function pushToExistingStream(session, options) {
|
|
376
|
-
|
|
376
|
+
const { text, attachments, clientId, sessionId, model } = options;
|
|
377
377
|
session.clientId = clientId;
|
|
378
378
|
session.turnStartTime = Date.now();
|
|
379
379
|
session.turnDoneSent = false;
|
|
380
380
|
session.activeToolBlocks = {};
|
|
381
|
-
|
|
382
|
-
|
|
381
|
+
const prompt = resolvePromptText(text);
|
|
382
|
+
const userMsg = buildSDKUserMessage(prompt, attachments, sessionId);
|
|
383
383
|
sendTo(clientId, {
|
|
384
384
|
type: "chat:user_message",
|
|
385
385
|
text,
|
|
@@ -395,25 +395,25 @@ function pushToExistingStream(session, options) {
|
|
|
395
395
|
session.messageQueue.push(userMsg);
|
|
396
396
|
}
|
|
397
397
|
export function startChatStream(options) {
|
|
398
|
-
|
|
399
|
-
|
|
398
|
+
const { projectSlug, sessionId, text, attachments, clientId, cwd, env, model, effort, isNewSession } = options;
|
|
399
|
+
const existing = sessionStreams.get(sessionId);
|
|
400
400
|
if (existing && !existing.ended) {
|
|
401
401
|
pushToExistingStream(existing, options);
|
|
402
402
|
return;
|
|
403
403
|
}
|
|
404
|
-
|
|
405
|
-
|
|
404
|
+
const startTime = Date.now();
|
|
405
|
+
const firstUserMessage = text;
|
|
406
406
|
if (pendingStreams.has(sessionId)) {
|
|
407
407
|
sendTo(clientId, { type: "chat:error", message: "Session already has an active stream." });
|
|
408
408
|
return;
|
|
409
409
|
}
|
|
410
410
|
pendingStreams.add(sessionId);
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
411
|
+
const projectSettingsPath = join(cwd, ".claude", "settings.json");
|
|
412
|
+
let savedAdditionalDirs = [];
|
|
413
|
+
let latticeDefaults = {};
|
|
414
414
|
if (existsSync(projectSettingsPath)) {
|
|
415
415
|
try {
|
|
416
|
-
|
|
416
|
+
const projSettings = JSON.parse(readFileSync(projectSettingsPath, "utf-8"));
|
|
417
417
|
if (projSettings.permissions && Array.isArray(projSettings.permissions.additionalDirectories)) {
|
|
418
418
|
savedAdditionalDirs = projSettings.permissions.additionalDirectories;
|
|
419
419
|
}
|
|
@@ -423,38 +423,38 @@ export function startChatStream(options) {
|
|
|
423
423
|
}
|
|
424
424
|
catch { }
|
|
425
425
|
}
|
|
426
|
-
|
|
426
|
+
const effectiveMode = sessionPermissionOverrides.get(sessionId)
|
|
427
427
|
|| latticeDefaults.defaultPermissionMode
|
|
428
428
|
|| "acceptEdits";
|
|
429
429
|
sessionPermissionOverrides.delete(sessionId);
|
|
430
|
-
|
|
431
|
-
|
|
430
|
+
let mcpServers = {};
|
|
431
|
+
const claudeJsonPath = join(homedir(), ".claude.json");
|
|
432
432
|
if (existsSync(claudeJsonPath)) {
|
|
433
433
|
try {
|
|
434
|
-
|
|
434
|
+
const claudeJson = JSON.parse(readFileSync(claudeJsonPath, "utf-8"));
|
|
435
435
|
if (claudeJson.mcpServers && typeof claudeJson.mcpServers === "object") {
|
|
436
436
|
mcpServers = claudeJson.mcpServers;
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
439
|
catch { }
|
|
440
440
|
}
|
|
441
|
-
|
|
441
|
+
const pluginMcpServers = getPluginMcpServers();
|
|
442
442
|
if (Object.keys(pluginMcpServers).length > 0) {
|
|
443
443
|
mcpServers = { ...mcpServers, ...pluginMcpServers };
|
|
444
444
|
}
|
|
445
|
-
|
|
445
|
+
const projectMcpPath = join(cwd, ".mcp.json");
|
|
446
446
|
if (existsSync(projectMcpPath)) {
|
|
447
447
|
try {
|
|
448
|
-
|
|
448
|
+
const projectMcpJson = JSON.parse(readFileSync(projectMcpPath, "utf-8"));
|
|
449
449
|
if (projectMcpJson.mcpServers && typeof projectMcpJson.mcpServers === "object") {
|
|
450
450
|
mcpServers = { ...mcpServers, ...projectMcpJson.mcpServers };
|
|
451
451
|
}
|
|
452
452
|
}
|
|
453
453
|
catch { }
|
|
454
454
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
455
|
+
const abortController = new AbortController();
|
|
456
|
+
const currentClientId = clientId;
|
|
457
|
+
const queryOptions = {
|
|
458
458
|
cwd,
|
|
459
459
|
permissionMode: effectiveMode,
|
|
460
460
|
promptSuggestions: true,
|
|
@@ -478,8 +478,8 @@ export function startChatStream(options) {
|
|
|
478
478
|
};
|
|
479
479
|
queryOptions.onElicitation = function (request, opts) {
|
|
480
480
|
return new Promise(function (resolve) {
|
|
481
|
-
|
|
482
|
-
|
|
481
|
+
const requestId = crypto.randomUUID();
|
|
482
|
+
const activeClientId = (sessionStreams.get(sessionId) || { clientId: currentClientId }).clientId;
|
|
483
483
|
pendingElicitations.set(requestId, { resolve, clientId: activeClientId, sessionId });
|
|
484
484
|
sendTo(activeClientId, {
|
|
485
485
|
type: "chat:elicitation_request",
|
|
@@ -502,15 +502,15 @@ export function startChatStream(options) {
|
|
|
502
502
|
});
|
|
503
503
|
};
|
|
504
504
|
queryOptions.canUseTool = function (toolName, input, options) {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
505
|
+
const ss = sessionStreams.get(sessionId);
|
|
506
|
+
const activeClientId = ss ? ss.clientId : currentClientId;
|
|
507
|
+
const approved = autoApprovedTools.get(sessionId);
|
|
508
508
|
if (approved && approved.has(toolName)) {
|
|
509
509
|
return Promise.resolve({ behavior: "allow", updatedInput: input, toolUseID: options.toolUseID });
|
|
510
510
|
}
|
|
511
511
|
if (toolName === "AskUserQuestion") {
|
|
512
|
-
|
|
513
|
-
|
|
512
|
+
const promptRequestId = options.toolUseID;
|
|
513
|
+
const questions = input.questions;
|
|
514
514
|
sendTo(activeClientId, {
|
|
515
515
|
type: "chat:prompt_request",
|
|
516
516
|
requestId: promptRequestId,
|
|
@@ -536,29 +536,29 @@ export function startChatStream(options) {
|
|
|
536
536
|
});
|
|
537
537
|
}
|
|
538
538
|
if (toolName === "Read") {
|
|
539
|
-
|
|
539
|
+
const readPath = (input.file_path || input.path || "");
|
|
540
540
|
if (readPath.startsWith("/tmp/") || readPath === "/tmp") {
|
|
541
541
|
return Promise.resolve({ behavior: "allow", updatedInput: input, toolUseID: options.toolUseID });
|
|
542
542
|
}
|
|
543
543
|
}
|
|
544
544
|
if (toolName === "Bash") {
|
|
545
|
-
|
|
545
|
+
const cmd = (input.command || "").trim();
|
|
546
546
|
if (cmd.startsWith("cd ")) {
|
|
547
|
-
|
|
547
|
+
let cdTarget = cmd.slice(3).trim().replace(/^["']|["']$/g, "");
|
|
548
548
|
if (cdTarget.startsWith("~")) {
|
|
549
549
|
cdTarget = join(homedir(), cdTarget.slice(1));
|
|
550
550
|
}
|
|
551
|
-
|
|
552
|
-
|
|
551
|
+
const cdResolved = resolve(cwd, cdTarget);
|
|
552
|
+
const home = homedir();
|
|
553
553
|
if (cdResolved.startsWith(cwd) || cdResolved === cwd || cdResolved.startsWith(home) || cdResolved === home) {
|
|
554
554
|
return Promise.resolve({ behavior: "allow", updatedInput: input, toolUseID: options.toolUseID });
|
|
555
555
|
}
|
|
556
556
|
}
|
|
557
557
|
}
|
|
558
|
-
|
|
558
|
+
let allowRules = [];
|
|
559
559
|
if (existsSync(projectSettingsPath)) {
|
|
560
560
|
try {
|
|
561
|
-
|
|
561
|
+
const projSettingsForRules = JSON.parse(readFileSync(projectSettingsPath, "utf-8"));
|
|
562
562
|
if (projSettingsForRules.permissions && Array.isArray(projSettingsForRules.permissions.allow)) {
|
|
563
563
|
allowRules = projSettingsForRules.permissions.allow;
|
|
564
564
|
}
|
|
@@ -566,14 +566,14 @@ export function startChatStream(options) {
|
|
|
566
566
|
catch { }
|
|
567
567
|
}
|
|
568
568
|
if (allowRules.length > 0) {
|
|
569
|
-
|
|
569
|
+
const currentRule = buildPermissionRule(toolName, input);
|
|
570
570
|
if (matchesAllowRules(allowRules, toolName, currentRule)) {
|
|
571
571
|
return Promise.resolve({ behavior: "allow", updatedInput: input, toolUseID: options.toolUseID });
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
574
|
+
const requestId = options.toolUseID;
|
|
575
|
+
const rule = buildPermissionRule(toolName, input);
|
|
576
|
+
const title = options.title || rule;
|
|
577
577
|
sendTo(activeClientId, {
|
|
578
578
|
type: "chat:permission_request",
|
|
579
579
|
requestId: requestId,
|
|
@@ -605,13 +605,13 @@ export function startChatStream(options) {
|
|
|
605
605
|
}
|
|
606
606
|
});
|
|
607
607
|
};
|
|
608
|
-
|
|
608
|
+
let shouldResume = false;
|
|
609
609
|
if (isNewSession) {
|
|
610
610
|
shouldResume = false;
|
|
611
611
|
}
|
|
612
612
|
else {
|
|
613
|
-
|
|
614
|
-
|
|
613
|
+
const hash = cwd.replace(/\//g, "-");
|
|
614
|
+
const sessionFile = join(homedir(), ".claude", "projects", hash, sessionId + ".jsonl");
|
|
615
615
|
shouldResume = existsSync(sessionFile);
|
|
616
616
|
}
|
|
617
617
|
if (shouldResume) {
|
|
@@ -645,17 +645,17 @@ export function startChatStream(options) {
|
|
|
645
645
|
if (options.systemPrompt) {
|
|
646
646
|
queryOptions.systemPrompt = options.systemPrompt;
|
|
647
647
|
}
|
|
648
|
-
|
|
648
|
+
const prompt = resolvePromptText(text);
|
|
649
649
|
sendTo(clientId, {
|
|
650
650
|
type: "chat:user_message",
|
|
651
651
|
text,
|
|
652
652
|
uuid: crypto.randomUUID(),
|
|
653
653
|
});
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
654
|
+
const mq = createMessageQueue();
|
|
655
|
+
const firstMsg = buildSDKUserMessage(prompt, attachments, sessionId);
|
|
656
|
+
const stream = query({ prompt: mq, options: queryOptions });
|
|
657
657
|
pendingStreams.delete(sessionId);
|
|
658
|
-
|
|
658
|
+
const sessionStream = {
|
|
659
659
|
sessionId,
|
|
660
660
|
messageQueue: mq,
|
|
661
661
|
queryInstance: stream,
|
|
@@ -674,7 +674,7 @@ export function startChatStream(options) {
|
|
|
674
674
|
accumulatedText: "",
|
|
675
675
|
specId: options.specId,
|
|
676
676
|
analyzer: new ContextAnalyzer(function (msg) {
|
|
677
|
-
|
|
677
|
+
const ss = sessionStreams.get(sessionId);
|
|
678
678
|
if (ss)
|
|
679
679
|
sendTo(ss.clientId, msg);
|
|
680
680
|
}),
|
|
@@ -691,12 +691,12 @@ export function startChatStream(options) {
|
|
|
691
691
|
}
|
|
692
692
|
mq.push(firstMsg);
|
|
693
693
|
try {
|
|
694
|
-
for await (
|
|
694
|
+
for await (const msg of stream) {
|
|
695
695
|
processMessage(sessionStream, msg);
|
|
696
696
|
}
|
|
697
697
|
}
|
|
698
698
|
catch (err) {
|
|
699
|
-
|
|
699
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
700
700
|
if (errMsg.includes("aborted") || errMsg.includes("AbortError")) {
|
|
701
701
|
log.chat("Session %s stream aborted", sessionId);
|
|
702
702
|
}
|
|
@@ -714,7 +714,7 @@ export function startChatStream(options) {
|
|
|
714
714
|
sessionStreams.delete(sessionId);
|
|
715
715
|
persistStreamState();
|
|
716
716
|
broadcast({ type: "session:busy", sessionId, busy: false }, sessionStream.clientId);
|
|
717
|
-
|
|
717
|
+
const toCleanup = [];
|
|
718
718
|
pendingPermissions.forEach(function (entry, reqId) {
|
|
719
719
|
if (entry.sessionId === sessionId) {
|
|
720
720
|
toCleanup.push(reqId);
|
|
@@ -723,7 +723,7 @@ export function startChatStream(options) {
|
|
|
723
723
|
}
|
|
724
724
|
});
|
|
725
725
|
toCleanup.forEach(function (reqId) { pendingPermissions.delete(reqId); });
|
|
726
|
-
|
|
726
|
+
const elicitToCleanup = [];
|
|
727
727
|
pendingElicitations.forEach(function (entry, reqId) {
|
|
728
728
|
if (entry.sessionId === sessionId) {
|
|
729
729
|
elicitToCleanup.push(reqId);
|
|
@@ -741,53 +741,53 @@ export function startChatStream(options) {
|
|
|
741
741
|
})();
|
|
742
742
|
}
|
|
743
743
|
function processStructuredOutput(ss) {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
744
|
+
const text = ss.accumulatedText;
|
|
745
|
+
const specId = ss.specId;
|
|
746
|
+
const specFields = parseSpecPopulate(text);
|
|
747
747
|
if (specFields) {
|
|
748
|
-
|
|
748
|
+
const updated = populateSpec(specId, specFields, ss.sessionId);
|
|
749
749
|
if (updated) {
|
|
750
750
|
broadcastToProject(ss.projectSlug, { type: "specs:updated", spec: updated });
|
|
751
751
|
}
|
|
752
752
|
}
|
|
753
|
-
|
|
753
|
+
const planContent = parsePlanContent(text);
|
|
754
754
|
if (planContent) {
|
|
755
|
-
|
|
755
|
+
const updatedPlan = updateSpecData(specId, {
|
|
756
756
|
sections: { implementationPlan: planContent },
|
|
757
757
|
});
|
|
758
758
|
if (updatedPlan) {
|
|
759
759
|
broadcastToProject(ss.projectSlug, { type: "specs:updated", spec: updatedPlan });
|
|
760
760
|
}
|
|
761
761
|
}
|
|
762
|
-
|
|
763
|
-
|
|
762
|
+
let searchText = text;
|
|
763
|
+
let activityData = parseSpecActivity(searchText);
|
|
764
764
|
while (activityData) {
|
|
765
|
-
|
|
765
|
+
const updatedActivity = addActivity(specId, activityData.type, activityData.detail, ss.sessionId);
|
|
766
766
|
if (updatedActivity) {
|
|
767
767
|
broadcastToProject(ss.projectSlug, { type: "specs:activity_added", spec: updatedActivity });
|
|
768
768
|
}
|
|
769
|
-
|
|
769
|
+
const endIdx = searchText.indexOf("</spec-activity>");
|
|
770
770
|
searchText = searchText.slice(endIdx + "</spec-activity>".length);
|
|
771
771
|
activityData = parseSpecActivity(searchText);
|
|
772
772
|
}
|
|
773
773
|
ss.accumulatedText = "";
|
|
774
774
|
}
|
|
775
775
|
function processMessage(ss, msg) {
|
|
776
|
-
|
|
776
|
+
const sessionId = ss.sessionId;
|
|
777
777
|
if (msg.type === "system") {
|
|
778
|
-
|
|
778
|
+
const sysMsg = msg;
|
|
779
779
|
if (sysMsg.subtype === "init") {
|
|
780
|
-
|
|
781
|
-
|
|
780
|
+
const toolCount = (sysMsg.tools || []).length;
|
|
781
|
+
const mcpCount = (sysMsg.mcp_servers || []).filter(function (s) { return s.status === "connected"; }).length;
|
|
782
782
|
log.chat("Session ready: %d tools, %d MCP servers connected", toolCount, mcpCount);
|
|
783
783
|
}
|
|
784
784
|
return;
|
|
785
785
|
}
|
|
786
786
|
if (msg.type === "assistant") {
|
|
787
|
-
|
|
788
|
-
|
|
787
|
+
const assistantMsg = msg;
|
|
788
|
+
const msgUsage = assistantMsg.message.usage;
|
|
789
789
|
if (msgUsage && msgUsage.input_tokens != null) {
|
|
790
|
-
|
|
790
|
+
const ctxWindow = guessContextWindow(assistantMsg.message.model || "");
|
|
791
791
|
sendTo(ss.clientId, {
|
|
792
792
|
type: "chat:context_usage",
|
|
793
793
|
inputTokens: msgUsage.input_tokens || 0,
|
|
@@ -806,11 +806,11 @@ function processMessage(ss, msg) {
|
|
|
806
806
|
return;
|
|
807
807
|
}
|
|
808
808
|
if (msg.type === "stream_event") {
|
|
809
|
-
|
|
810
|
-
|
|
809
|
+
const partial = msg;
|
|
810
|
+
const evt = partial.event;
|
|
811
811
|
if (evt.type === "content_block_start") {
|
|
812
|
-
|
|
813
|
-
|
|
812
|
+
const block = evt.content_block;
|
|
813
|
+
const idx = evt.index;
|
|
814
814
|
if (block.type === "tool_use" && block.id && block.name) {
|
|
815
815
|
ss.activeToolBlocks[idx] = { id: block.id, name: block.name, inputJson: "" };
|
|
816
816
|
ss.analyzer.onToolStart(block.id, block.name);
|
|
@@ -829,8 +829,8 @@ function processMessage(ss, msg) {
|
|
|
829
829
|
return;
|
|
830
830
|
}
|
|
831
831
|
if (evt.type === "content_block_delta") {
|
|
832
|
-
|
|
833
|
-
|
|
832
|
+
const deltaEvt = evt;
|
|
833
|
+
const blockIdx = deltaEvt.index;
|
|
834
834
|
if (deltaEvt.delta.type === "text_delta" && typeof deltaEvt.delta.text === "string") {
|
|
835
835
|
sendTo(ss.clientId, { type: "chat:delta", text: deltaEvt.delta.text });
|
|
836
836
|
if (ss.specId) {
|
|
@@ -843,8 +843,8 @@ function processMessage(ss, msg) {
|
|
|
843
843
|
return;
|
|
844
844
|
}
|
|
845
845
|
if (evt.type === "content_block_stop") {
|
|
846
|
-
|
|
847
|
-
|
|
846
|
+
const stopIdx = evt.index;
|
|
847
|
+
const stoppedBlock = ss.activeToolBlocks[stopIdx];
|
|
848
848
|
if (stoppedBlock) {
|
|
849
849
|
if (!HIDDEN_TOOLS.has(stoppedBlock.name)) {
|
|
850
850
|
sendTo(ss.clientId, {
|
|
@@ -856,7 +856,7 @@ function processMessage(ss, msg) {
|
|
|
856
856
|
}
|
|
857
857
|
if (stoppedBlock.name === "TodoWrite" && stoppedBlock.inputJson) {
|
|
858
858
|
try {
|
|
859
|
-
|
|
859
|
+
const todoInput = JSON.parse(stoppedBlock.inputJson);
|
|
860
860
|
if (todoInput.todos) {
|
|
861
861
|
sendTo(ss.clientId, {
|
|
862
862
|
type: "chat:todo_update",
|
|
@@ -881,20 +881,20 @@ function processMessage(ss, msg) {
|
|
|
881
881
|
return;
|
|
882
882
|
}
|
|
883
883
|
if (msg.type === "user") {
|
|
884
|
-
|
|
884
|
+
const userMsg = msg;
|
|
885
885
|
if (userMsg.uuid) {
|
|
886
886
|
ss.messageUUIDs.push({ uuid: userMsg.uuid, type: "user" });
|
|
887
887
|
sendTo(ss.clientId, { type: "chat:message_uuid", uuid: userMsg.uuid, messageType: "user" });
|
|
888
888
|
}
|
|
889
|
-
|
|
889
|
+
const content = userMsg.message.content;
|
|
890
890
|
if (Array.isArray(content)) {
|
|
891
|
-
for (
|
|
892
|
-
|
|
891
|
+
for (let i = 0; i < content.length; i++) {
|
|
892
|
+
const item = content[i];
|
|
893
893
|
if (item.type === "tool_result" && item.tool_use_id) {
|
|
894
894
|
ss.analyzer.onToolResult(item.tool_use_id);
|
|
895
895
|
if (ss.hiddenToolIds.has(item.tool_use_id))
|
|
896
896
|
continue;
|
|
897
|
-
|
|
897
|
+
const resultContent = typeof item.content === "string"
|
|
898
898
|
? item.content
|
|
899
899
|
: JSON.stringify(item.content ?? "");
|
|
900
900
|
sendTo(ss.clientId, {
|
|
@@ -908,8 +908,8 @@ function processMessage(ss, msg) {
|
|
|
908
908
|
return;
|
|
909
909
|
}
|
|
910
910
|
if (msg.type === "rate_limit_event") {
|
|
911
|
-
|
|
912
|
-
|
|
911
|
+
const rlMsg = msg;
|
|
912
|
+
const rli = rlMsg.rate_limit_info;
|
|
913
913
|
cacheRateLimitEntry({
|
|
914
914
|
status: rli.status,
|
|
915
915
|
utilization: rli.utilization,
|
|
@@ -932,22 +932,22 @@ function processMessage(ss, msg) {
|
|
|
932
932
|
return;
|
|
933
933
|
}
|
|
934
934
|
if (msg.type === "prompt_suggestion") {
|
|
935
|
-
|
|
935
|
+
const suggestion = msg.suggestion;
|
|
936
936
|
if (suggestion) {
|
|
937
937
|
sendTo(ss.clientId, { type: "chat:prompt_suggestion", suggestion: suggestion });
|
|
938
938
|
}
|
|
939
939
|
return;
|
|
940
940
|
}
|
|
941
941
|
if (msg.type === "result") {
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
942
|
+
const resultMsg = msg;
|
|
943
|
+
const dur = Date.now() - ss.turnStartTime;
|
|
944
|
+
const cost = resultMsg.total_cost_usd || 0;
|
|
945
945
|
if (resultMsg.usage) {
|
|
946
|
-
|
|
946
|
+
let contextWindow = 0;
|
|
947
947
|
if (resultMsg.modelUsage) {
|
|
948
|
-
|
|
949
|
-
for (
|
|
950
|
-
|
|
948
|
+
const modelKeys = Object.keys(resultMsg.modelUsage);
|
|
949
|
+
for (let mk = 0; mk < modelKeys.length; mk++) {
|
|
950
|
+
const mu = resultMsg.modelUsage[modelKeys[mk]];
|
|
951
951
|
if (mu.contextWindow > contextWindow) {
|
|
952
952
|
contextWindow = mu.contextWindow;
|
|
953
953
|
}
|
|
@@ -978,7 +978,7 @@ function processMessage(ss, msg) {
|
|
|
978
978
|
sendTo(ss.clientId, { type: "chat:done", cost: cost, duration: dur });
|
|
979
979
|
sendPush({ type: "done", title: "Task Complete", body: "Claude finished responding", sessionId, projectSlug: ss.projectSlug });
|
|
980
980
|
invalidateDailySpendCache();
|
|
981
|
-
|
|
981
|
+
const budgetConfig = loadConfig().costBudget;
|
|
982
982
|
if (budgetConfig) {
|
|
983
983
|
sendTo(ss.clientId, {
|
|
984
984
|
type: "budget:status",
|
|
@@ -992,7 +992,7 @@ function processMessage(ss, msg) {
|
|
|
992
992
|
void getSessionTitle(ss.projectSlug, sessionId).then(function (currentTitle) {
|
|
993
993
|
if (!isDefaultTitle(currentTitle))
|
|
994
994
|
return;
|
|
995
|
-
|
|
995
|
+
const newTitle = generateSessionTitle(ss.firstUserMessage);
|
|
996
996
|
if (!newTitle)
|
|
997
997
|
return;
|
|
998
998
|
void renameSession(ss.projectSlug, sessionId, newTitle).then(function (ok) {
|