auvrynt 1.0.1
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/LICENSE +21 -0
- package/README.md +239 -0
- package/dist/blender-client.js +109 -0
- package/dist/blender-tools.js +930 -0
- package/dist/cli.js +370 -0
- package/dist/config.js +211 -0
- package/dist/connection-status.js +91 -0
- package/dist/db/client.js +22 -0
- package/dist/db/schema.js +29 -0
- package/dist/dotnet-tools.js +223 -0
- package/dist/git-worktrees.js +134 -0
- package/dist/git.js +41 -0
- package/dist/godot-animation-tilemap.js +82 -0
- package/dist/godot-csharp-build.js +93 -0
- package/dist/godot-csharp-project.js +157 -0
- package/dist/godot-csharp-runner.js +146 -0
- package/dist/godot-csharp-semantic.js +161 -0
- package/dist/godot-csharp-validate.js +71 -0
- package/dist/godot-dotnet-env.js +169 -0
- package/dist/godot-editor-bridge.js +140 -0
- package/dist/godot-gdscript.js +824 -0
- package/dist/godot-project-settings.js +223 -0
- package/dist/godot-runtime-testing.js +249 -0
- package/dist/godot-tools.js +183 -0
- package/dist/image-tools.js +157 -0
- package/dist/logger.js +76 -0
- package/dist/oauth-provider.js +266 -0
- package/dist/pi-tools.js +81 -0
- package/dist/processes.js +218 -0
- package/dist/review-checkpoints.js +142 -0
- package/dist/roots.js +53 -0
- package/dist/search-discovery.js +271 -0
- package/dist/serena-manager.js +443 -0
- package/dist/serena-tools.js +411 -0
- package/dist/server.js +2835 -0
- package/dist/skills.js +45 -0
- package/dist/ui/.vite/manifest.json +2520 -0
- package/dist/ui/assets/abap-CLvhMVsD.js +1 -0
- package/dist/ui/assets/actionscript-3--17pq3dv.js +1 -0
- package/dist/ui/assets/ada-C5qYipkI.js +1 -0
- package/dist/ui/assets/andromeeda-vGVdxbeo.js +1 -0
- package/dist/ui/assets/angular-html-BJqQFYI6.js +1 -0
- package/dist/ui/assets/angular-ts-CMJECO0Y.js +1 -0
- package/dist/ui/assets/apache-U0d_L8uA.js +1 -0
- package/dist/ui/assets/apex-CGTLDQj6.js +1 -0
- package/dist/ui/assets/apl-DWeXpBBr.js +1 -0
- package/dist/ui/assets/applescript-CCn79oCD.js +1 -0
- package/dist/ui/assets/ara-4CJ0cIlV.js +1 -0
- package/dist/ui/assets/asciidoc-DE70LPWp.js +1 -0
- package/dist/ui/assets/asm-Cmm7eHzH.js +1 -0
- package/dist/ui/assets/astro-CLbttLOq.js +1 -0
- package/dist/ui/assets/aurora-x-CDeNXAV0.js +1 -0
- package/dist/ui/assets/awk-BWXHIvNe.js +1 -0
- package/dist/ui/assets/ayu-dark-DluEY0Gj.js +1 -0
- package/dist/ui/assets/ayu-light-C3h-C4tm.js +1 -0
- package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +1 -0
- package/dist/ui/assets/ballerina-B7ZEbQpA.js +1 -0
- package/dist/ui/assets/bat-Bo4NYOV-.js +1 -0
- package/dist/ui/assets/beancount-D-usSTwE.js +1 -0
- package/dist/ui/assets/berry-DKpUyyne.js +1 -0
- package/dist/ui/assets/bibtex-Ci_nEsc7.js +1 -0
- package/dist/ui/assets/bicep-CUHmPFLl.js +1 -0
- package/dist/ui/assets/bird2-C2hNVINV.js +1 -0
- package/dist/ui/assets/blade-BOzY0P2V.js +1 -0
- package/dist/ui/assets/bsl-BkkzgIyY.js +1 -0
- package/dist/ui/assets/c-BG-8uJvh.js +1 -0
- package/dist/ui/assets/c3-CnJL0r0V.js +1 -0
- package/dist/ui/assets/cadence-CQ2zXKGN.js +1 -0
- package/dist/ui/assets/cairo-DLTphjLi.js +1 -0
- package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +1 -0
- package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +1 -0
- package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +1 -0
- package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +1 -0
- package/dist/ui/assets/clarity-SemFz856.js +1 -0
- package/dist/ui/assets/clojure-DqKBuwfJ.js +1 -0
- package/dist/ui/assets/cmake-Bj61d0ZC.js +1 -0
- package/dist/ui/assets/cobol-I_17IuGe.js +1 -0
- package/dist/ui/assets/codeowners-C8r90Shi.js +1 -0
- package/dist/ui/assets/codeql-oeQT6MSM.js +1 -0
- package/dist/ui/assets/coffee-C0B8hmok.js +1 -0
- package/dist/ui/assets/common-lisp-Cv5bFMCO.js +1 -0
- package/dist/ui/assets/coq-BrsZFFmf.js +1 -0
- package/dist/ui/assets/cpp-DDJXt6Vs.js +1 -0
- package/dist/ui/assets/crystal-Bexqace6.js +1 -0
- package/dist/ui/assets/csharp-Ct8U2NOr.js +1 -0
- package/dist/ui/assets/css-DSQhw_9R.js +1 -0
- package/dist/ui/assets/csv-Dx-8-gkx.js +1 -0
- package/dist/ui/assets/cue-CE9AQfxI.js +1 -0
- package/dist/ui/assets/cypher-ClKdZ_lG.js +1 -0
- package/dist/ui/assets/d-qD-0Kul2.js +1 -0
- package/dist/ui/assets/dark-plus-Cs2F2srj.js +1 -0
- package/dist/ui/assets/dart-DkHntEIa.js +1 -0
- package/dist/ui/assets/dax-BkyTk9wS.js +1 -0
- package/dist/ui/assets/desktop-Dlh5hvp9.js +1 -0
- package/dist/ui/assets/diff-woXpYk--.js +1 -0
- package/dist/ui/assets/docker-IyjqRm3v.js +1 -0
- package/dist/ui/assets/dotenv-_5a1GRtc.js +1 -0
- package/dist/ui/assets/dracula-BHWKrbxM.js +1 -0
- package/dist/ui/assets/dracula-soft-5eyTD99u.js +1 -0
- package/dist/ui/assets/dream-maker-DW3nJb8Q.js +1 -0
- package/dist/ui/assets/edge-Z8YYkHOr.js +1 -0
- package/dist/ui/assets/elixir-CG9uKtAF.js +1 -0
- package/dist/ui/assets/elm-GfWG2IfT.js +1 -0
- package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +1 -0
- package/dist/ui/assets/erb-xe89e73J.js +1 -0
- package/dist/ui/assets/erlang-Cphh6RMH.js +1 -0
- package/dist/ui/assets/everforest-dark-sB-x3p7T.js +1 -0
- package/dist/ui/assets/everforest-light-Df2xbC6M.js +1 -0
- package/dist/ui/assets/fennel-DQxkIbk2.js +1 -0
- package/dist/ui/assets/fish-BJitypiv.js +1 -0
- package/dist/ui/assets/fluent-C03EYrpw.js +1 -0
- package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +1 -0
- package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +1 -0
- package/dist/ui/assets/fsharp-D13ZGOAj.js +1 -0
- package/dist/ui/assets/gdresource-C0sCabJj.js +1 -0
- package/dist/ui/assets/gdscript-Cp2uCuqX.js +1 -0
- package/dist/ui/assets/gdshader-CBce3t8t.js +1 -0
- package/dist/ui/assets/genie-CV2tkWYe.js +1 -0
- package/dist/ui/assets/gherkin-DExj1W_8.js +1 -0
- package/dist/ui/assets/git-commit-BSykSTBG.js +1 -0
- package/dist/ui/assets/git-rebase-CoTL_uSE.js +1 -0
- package/dist/ui/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/ui/assets/github-dark-default-DXG-b-1a.js +1 -0
- package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
- package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
- package/dist/ui/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/ui/assets/github-light-default-BXViO-2h.js +1 -0
- package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +1 -0
- package/dist/ui/assets/gleam-CSRkHgEL.js +1 -0
- package/dist/ui/assets/glimmer-js-DAn4UCSu.js +1 -0
- package/dist/ui/assets/glimmer-ts-Tjyi6Gh5.js +1 -0
- package/dist/ui/assets/glsl-CtTDZoqR.js +1 -0
- package/dist/ui/assets/gn-ilITqXS6.js +1 -0
- package/dist/ui/assets/gnuplot-7GGW24-e.js +1 -0
- package/dist/ui/assets/go-BJwz_mda.js +1 -0
- package/dist/ui/assets/graphql-D5gcC_Jk.js +1 -0
- package/dist/ui/assets/groovy-CacY0gHj.js +1 -0
- package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
- package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
- package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
- package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
- package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
- package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
- package/dist/ui/assets/hack-BJXY27dt.js +1 -0
- package/dist/ui/assets/haml-BLfFoZf7.js +1 -0
- package/dist/ui/assets/handlebars-Dw6CWkvN.js +1 -0
- package/dist/ui/assets/haskell-D8IpX4py.js +1 -0
- package/dist/ui/assets/haxe-OTjmBuCE.js +1 -0
- package/dist/ui/assets/hcl-Dh228itO.js +1 -0
- package/dist/ui/assets/heavy-payload-Dcg0-F-S.js +4 -0
- package/dist/ui/assets/hjson-CxZEssPk.js +1 -0
- package/dist/ui/assets/hlsl-Cvrh5tZx.js +1 -0
- package/dist/ui/assets/horizon-CE9ld1lL.js +1 -0
- package/dist/ui/assets/horizon-bright-Br1oVSNq.js +1 -0
- package/dist/ui/assets/houston-CsvMBhTu.js +1 -0
- package/dist/ui/assets/html-CAcAWvoN.js +1 -0
- package/dist/ui/assets/html-derivative-8aSW2E_7.js +1 -0
- package/dist/ui/assets/http-B2YR_3V1.js +1 -0
- package/dist/ui/assets/hurl-BnDJ9Zhf.js +1 -0
- package/dist/ui/assets/hxml-B0Qn7Nwc.js +1 -0
- package/dist/ui/assets/hy-CZbG8q4J.js +1 -0
- package/dist/ui/assets/imba-DsUTQ-LC.js +1 -0
- package/dist/ui/assets/ini-B5eOa1yu.js +1 -0
- package/dist/ui/assets/java-Doxi4W8u.js +1 -0
- package/dist/ui/assets/javascript-BbRdEqti.js +1 -0
- package/dist/ui/assets/jinja-CS3Tpv_Q.js +1 -0
- package/dist/ui/assets/jison-BkPGYVHR.js +1 -0
- package/dist/ui/assets/json-BMt1m3m8.js +1 -0
- package/dist/ui/assets/json5-BR5RXkoi.js +1 -0
- package/dist/ui/assets/jsonc-CYpm1nAK.js +1 -0
- package/dist/ui/assets/jsonl-CmCQp5Yx.js +1 -0
- package/dist/ui/assets/jsonnet-CJTPZ8u_.js +1 -0
- package/dist/ui/assets/jssm-DXw9l8Rf.js +1 -0
- package/dist/ui/assets/jsx-CQKrJXXY.js +1 -0
- package/dist/ui/assets/julia-BuN7i2du.js +1 -0
- package/dist/ui/assets/just-BswEPFPu.js +1 -0
- package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +1 -0
- package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +1 -0
- package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +1 -0
- package/dist/ui/assets/kdl-CsD5j6eV.js +1 -0
- package/dist/ui/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/ui/assets/kusto-BUv0MjJC.js +1 -0
- package/dist/ui/assets/laserwave-C_8bwKvT.js +1 -0
- package/dist/ui/assets/latex-DU2VyFfA.js +1 -0
- package/dist/ui/assets/lean-CewbzKMR.js +1 -0
- package/dist/ui/assets/less-DVTAwKKz.js +1 -0
- package/dist/ui/assets/light-plus-DVQuIRkW.js +1 -0
- package/dist/ui/assets/liquid-Cmz1L3dq.js +1 -0
- package/dist/ui/assets/llvm-Cm23YOpf.js +1 -0
- package/dist/ui/assets/log-BNLmms1o.js +1 -0
- package/dist/ui/assets/logo-Cluzi2Zq.js +1 -0
- package/dist/ui/assets/lua-CfVXhkaJ.js +1 -0
- package/dist/ui/assets/luau-CNKltnaQ.js +1 -0
- package/dist/ui/assets/make-Dixweg8N.js +1 -0
- package/dist/ui/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/ui/assets/marko-C5bfqGiA.js +1 -0
- package/dist/ui/assets/material-theme-Bm3Qr25_.js +1 -0
- package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +1 -0
- package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +1 -0
- package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +1 -0
- package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +1 -0
- package/dist/ui/assets/matlab-D7qyCx1q.js +1 -0
- package/dist/ui/assets/mdc-CVBXYfyq.js +1 -0
- package/dist/ui/assets/mdx-DQZ5AkYe.js +1 -0
- package/dist/ui/assets/mermaid-Bk4SNUv9.js +1 -0
- package/dist/ui/assets/min-dark-BSWPekZh.js +1 -0
- package/dist/ui/assets/min-light-DDpmG2fV.js +1 -0
- package/dist/ui/assets/mipsasm-BMqwQI7S.js +1 -0
- package/dist/ui/assets/mojo-BgCJLMeH.js +1 -0
- package/dist/ui/assets/monokai-CdkpiU2Y.js +1 -0
- package/dist/ui/assets/moonbit-CaWjb8XO.js +1 -0
- package/dist/ui/assets/move-B1IS1UjX.js +1 -0
- package/dist/ui/assets/narrat-_X_XdTYD.js +1 -0
- package/dist/ui/assets/nextflow-Bbiyy34d.js +1 -0
- package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +1 -0
- package/dist/ui/assets/nginx-CzJafxLa.js +1 -0
- package/dist/ui/assets/night-owl-DhmEMT88.js +1 -0
- package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +1 -0
- package/dist/ui/assets/nim-DABKtHtM.js +1 -0
- package/dist/ui/assets/nix-IvuFDN5E.js +1 -0
- package/dist/ui/assets/nord-Cb4Vim4T.js +1 -0
- package/dist/ui/assets/nushell-DcLAeLz5.js +1 -0
- package/dist/ui/assets/objective-c-D1A_Heim.js +1 -0
- package/dist/ui/assets/objective-cpp-BsSzOQcm.js +1 -0
- package/dist/ui/assets/ocaml-O90oeIOV.js +1 -0
- package/dist/ui/assets/odin-B1RWQWA5.js +1 -0
- package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +1 -0
- package/dist/ui/assets/one-light-D7Lr4KcI.js +1 -0
- package/dist/ui/assets/openscad-BUDT5pXO.js +1 -0
- package/dist/ui/assets/pascal-4ZHwLPI5.js +1 -0
- package/dist/ui/assets/perl-CBh7L3lZ.js +1 -0
- package/dist/ui/assets/php-DFbI9q5p.js +1 -0
- package/dist/ui/assets/pierre-dark-sU4Zdns8.js +1 -0
- package/dist/ui/assets/pierre-dark-soft-HXgun5vs.js +1 -0
- package/dist/ui/assets/pierre-light-DWBk51d8.js +1 -0
- package/dist/ui/assets/pierre-light-soft-CodEzPxf.js +1 -0
- package/dist/ui/assets/pkl-ot-7Btpt.js +1 -0
- package/dist/ui/assets/plastic-DQwYfKfQ.js +1 -0
- package/dist/ui/assets/plsql-DGHpHOYJ.js +1 -0
- package/dist/ui/assets/po-BiJDBrnU.js +1 -0
- package/dist/ui/assets/poimandres-DRFjx7u4.js +1 -0
- package/dist/ui/assets/polar-C7UOKdEL.js +1 -0
- package/dist/ui/assets/postcss-BXeXVLqQ.js +1 -0
- package/dist/ui/assets/powerquery-DNMTfnFr.js +1 -0
- package/dist/ui/assets/powershell-DshXNtvi.js +1 -0
- package/dist/ui/assets/prisma-BsRQq5mF.js +1 -0
- package/dist/ui/assets/prolog-iXnhIJG7.js +1 -0
- package/dist/ui/assets/proto-DB4EqR-F.js +1 -0
- package/dist/ui/assets/pug-C_PxC7gO.js +1 -0
- package/dist/ui/assets/puppet-CDv2pdJW.js +1 -0
- package/dist/ui/assets/purescript-9MfHhQsQ.js +1 -0
- package/dist/ui/assets/python-gzcpVVnB.js +1 -0
- package/dist/ui/assets/qml-DtngoFFK.js +1 -0
- package/dist/ui/assets/qmldir-DCQb3MpD.js +1 -0
- package/dist/ui/assets/qss-Fe1Jh2GI.js +1 -0
- package/dist/ui/assets/r-DohkcevW.js +1 -0
- package/dist/ui/assets/racket-DcIDlBhZ.js +1 -0
- package/dist/ui/assets/raku-B3gFvitq.js +1 -0
- package/dist/ui/assets/razor-C4t8J0_E.js +1 -0
- package/dist/ui/assets/red-CJ3rzSJv.js +1 -0
- package/dist/ui/assets/reg-CRGYupPL.js +1 -0
- package/dist/ui/assets/regexp-OGbTbjgY.js +1 -0
- package/dist/ui/assets/rel-BtDbiS_P.js +1 -0
- package/dist/ui/assets/review-payload-C5Qz60Kq.js +1 -0
- package/dist/ui/assets/riscv-Ckw8ddFX.js +1 -0
- package/dist/ui/assets/ron-VUp2lXgN.js +1 -0
- package/dist/ui/assets/rose-pine-BthvhNj6.js +1 -0
- package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +1 -0
- package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +1 -0
- package/dist/ui/assets/rosmsg-CAekHB0j.js +1 -0
- package/dist/ui/assets/rst-CfBbbcvC.js +1 -0
- package/dist/ui/assets/ruby-Bw0mpxHY.js +1 -0
- package/dist/ui/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/ui/assets/sas-Cs3s9JOf.js +1 -0
- package/dist/ui/assets/sass-DXrisJhu.js +1 -0
- package/dist/ui/assets/scala-DKOlJaKm.js +1 -0
- package/dist/ui/assets/scheme-DQCgrYNe.js +1 -0
- package/dist/ui/assets/scss-sRxNJS54.js +1 -0
- package/dist/ui/assets/sdbl-bTVj8UrX.js +1 -0
- package/dist/ui/assets/shaderlab-TOUzSsQk.js +1 -0
- package/dist/ui/assets/shellscript-B0X6wh0R.js +1 -0
- package/dist/ui/assets/shellsession-D2FdOioR.js +1 -0
- package/dist/ui/assets/slack-dark-DnToyrRv.js +1 -0
- package/dist/ui/assets/slack-ochin-B2OO5cIa.js +1 -0
- package/dist/ui/assets/smalltalk-B16xEiuN.js +1 -0
- package/dist/ui/assets/snazzy-light-4G7pJPwS.js +1 -0
- package/dist/ui/assets/solarized-dark-DV17i1UV.js +1 -0
- package/dist/ui/assets/solarized-light-DSh2HLQt.js +1 -0
- package/dist/ui/assets/solidity-CKzVLygQ.js +1 -0
- package/dist/ui/assets/soy-s6g9OjJ1.js +1 -0
- package/dist/ui/assets/sparql-D_iOobhT.js +1 -0
- package/dist/ui/assets/splunk-BC2Px7Mm.js +1 -0
- package/dist/ui/assets/sql-DVTnh5V-.js +1 -0
- package/dist/ui/assets/ssh-config-BgfXC-Er.js +1 -0
- package/dist/ui/assets/stata-DFIDiXF9.js +1 -0
- package/dist/ui/assets/stylus-B6D30XZt.js +1 -0
- package/dist/ui/assets/surrealql-DVfrsLyg.js +1 -0
- package/dist/ui/assets/svelte-D5GsxESq.js +1 -0
- package/dist/ui/assets/swift-DonLKvLd.js +1 -0
- package/dist/ui/assets/synthwave-84-nFMaYfgc.js +1 -0
- package/dist/ui/assets/system-verilog-DJ5XKQeo.js +1 -0
- package/dist/ui/assets/systemd-BxMlprV5.js +1 -0
- package/dist/ui/assets/talonscript-CohzipZa.js +1 -0
- package/dist/ui/assets/tasl-DMoTqEGO.js +1 -0
- package/dist/ui/assets/tcl-CZd0xW_V.js +1 -0
- package/dist/ui/assets/templ-DI-Zyqzd.js +1 -0
- package/dist/ui/assets/terraform-DswuEJGm.js +1 -0
- package/dist/ui/assets/tex-WHHmlbJI.js +1 -0
- package/dist/ui/assets/tokyo-night-oM2G3aXe.js +1 -0
- package/dist/ui/assets/toml-CcmNWLt0.js +1 -0
- package/dist/ui/assets/ts-tags-Dwpo2RFJ.js +1 -0
- package/dist/ui/assets/tsv-sltzmVWM.js +1 -0
- package/dist/ui/assets/tsx-ph_idaAW.js +1 -0
- package/dist/ui/assets/turtle-ByJddavk.js +1 -0
- package/dist/ui/assets/twig-YO17jFjR.js +1 -0
- package/dist/ui/assets/typescript-CbAxjhkl.js +1 -0
- package/dist/ui/assets/typespec-B88KGewJ.js +1 -0
- package/dist/ui/assets/typst-DI99ib-x.js +1 -0
- package/dist/ui/assets/useFileDiffInstance-B2DLX3Vg.js +244 -0
- package/dist/ui/assets/v-DETTlOr0.js +1 -0
- package/dist/ui/assets/vala-zf12oZj6.js +1 -0
- package/dist/ui/assets/vb-Djn5o6TS.js +1 -0
- package/dist/ui/assets/verilog-CiiDBU1e.js +1 -0
- package/dist/ui/assets/vesper-D5bVUKB1.js +1 -0
- package/dist/ui/assets/vhdl-BroJfC0k.js +1 -0
- package/dist/ui/assets/viml-DvXPmvsu.js +1 -0
- package/dist/ui/assets/vitesse-black-fwtXNY1n.js +1 -0
- package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +1 -0
- package/dist/ui/assets/vitesse-light-VbXTXTou.js +1 -0
- package/dist/ui/assets/vue-CraHL-Ps.js +1 -0
- package/dist/ui/assets/vue-html-e9tyZNtS.js +1 -0
- package/dist/ui/assets/vue-vine-CofmxaUb.js +1 -0
- package/dist/ui/assets/vyper-CgoNMtux.js +1 -0
- package/dist/ui/assets/wasm-BnjxR4X6.js +1 -0
- package/dist/ui/assets/wasm-ByWQv1Qj.js +1 -0
- package/dist/ui/assets/wenyan-C8pVoKbM.js +1 -0
- package/dist/ui/assets/wgsl-BsKzXJz4.js +1 -0
- package/dist/ui/assets/wikitext-ClFFjSW2.js +1 -0
- package/dist/ui/assets/wit-DdvCle-K.js +1 -0
- package/dist/ui/assets/wolfram-DLL8P-h_.js +1 -0
- package/dist/ui/assets/workspace-app-8--oTbCd.css +1 -0
- package/dist/ui/assets/workspace-app-C5QsE314.js +118 -0
- package/dist/ui/assets/xml-BWSdPZHm.js +1 -0
- package/dist/ui/assets/xsl-BtCt7Hx8.js +1 -0
- package/dist/ui/assets/yaml-BZiTw7cQ.js +1 -0
- package/dist/ui/assets/zenscript-BnlCZFoB.js +1 -0
- package/dist/ui/assets/zig-CMLA9XwU.js +1 -0
- package/dist/ui/workspace-app.html +15 -0
- package/dist/user-config.js +57 -0
- package/dist/view-image.js +104 -0
- package/dist/web-tools.js +200 -0
- package/dist/window-capture.js +74 -0
- package/dist/workspace-store.js +125 -0
- package/dist/workspaces.js +226 -0
- package/docs/DEVELOPMENT_TOOLS.md +95 -0
- package/docs/assets/auvrynt-logo-light.png +0 -0
- package/docs/assets/auvrynt-screenshot.png +0 -0
- package/docs/chatgpt-coding-workflow.md +143 -0
- package/docs/configuration.md +132 -0
- package/docs/gotchas.md +215 -0
- package/docs/security.md +100 -0
- package/docs/setup.md +132 -0
- package/package.json +70 -0
- package/scripts/dev-server.mjs +120 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { registerAppTool } from "@modelcontextprotocol/ext-apps/server";
|
|
3
|
+
import { logEvent } from "./logger.js";
|
|
4
|
+
const READ_ONLY_ANNOTATIONS = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false };
|
|
5
|
+
const MUTATING_ANNOTATIONS = { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false };
|
|
6
|
+
function textBlock(text) {
|
|
7
|
+
return { type: "text", text };
|
|
8
|
+
}
|
|
9
|
+
function toolMeta() {
|
|
10
|
+
return { _meta: {} };
|
|
11
|
+
}
|
|
12
|
+
function registerSerenaHealthTools(server, config, serenaManager, workspaces) {
|
|
13
|
+
registerAppTool(server, "serena_environment", {
|
|
14
|
+
title: "Serena environment",
|
|
15
|
+
description: "Detect and report the local Serena installation status, version, backend, and any issues. Does not start a session.",
|
|
16
|
+
inputSchema: {},
|
|
17
|
+
...toolMeta(),
|
|
18
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
19
|
+
}, async () => {
|
|
20
|
+
try {
|
|
21
|
+
const env = await serenaManager.getEnvironment();
|
|
22
|
+
return { content: [textBlock(JSON.stringify(env, null, 2))] };
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
26
|
+
return { content: [textBlock(`serena_environment failed: ${msg}`)], isError: true };
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
registerAppTool(server, "serena_start_session", {
|
|
30
|
+
title: "Start Serena session",
|
|
31
|
+
description: "Start a Serena MCP session for the active workspace. Enables serena_ tools for semantic code analysis. Requires an active workspace. Starts Serena as a child process with stdio transport.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
34
|
+
projectRelativePath: z.string().optional().describe("Optional project subdirectory relative to workspace root."),
|
|
35
|
+
},
|
|
36
|
+
...toolMeta(),
|
|
37
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
38
|
+
}, async ({ workspaceId, projectRelativePath }) => {
|
|
39
|
+
try {
|
|
40
|
+
const workspace = workspaces.getWorkspace(workspaceId);
|
|
41
|
+
const session = await serenaManager.startSession(workspaceId, workspace.root, projectRelativePath);
|
|
42
|
+
return {
|
|
43
|
+
content: [textBlock(JSON.stringify({
|
|
44
|
+
sessionId: session.sessionId,
|
|
45
|
+
workspaceId: session.workspaceId,
|
|
46
|
+
projectRoot: session.projectRoot,
|
|
47
|
+
status: session.status,
|
|
48
|
+
toolCount: session.exposedTools.length,
|
|
49
|
+
tools: session.exposedTools,
|
|
50
|
+
}, null, 2))],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
55
|
+
return { content: [textBlock(`serena_start_session failed: ${msg}`)], isError: true };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
registerAppTool(server, "serena_session_status", {
|
|
59
|
+
title: "Serena session status",
|
|
60
|
+
description: "Check the status of the current Serena session for a workspace. Returns session info or indicates no active session.",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
63
|
+
},
|
|
64
|
+
...toolMeta(),
|
|
65
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
66
|
+
}, async ({ workspaceId }) => {
|
|
67
|
+
try {
|
|
68
|
+
const session = serenaManager.getSessionByWorkspace(workspaceId);
|
|
69
|
+
if (!session) {
|
|
70
|
+
return { content: [textBlock(JSON.stringify({ active: false, message: "No active Serena session for this workspace." }, null, 2))] };
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
content: [textBlock(JSON.stringify({
|
|
74
|
+
active: true,
|
|
75
|
+
sessionId: session.sessionId,
|
|
76
|
+
projectRoot: session.projectRoot,
|
|
77
|
+
status: session.status,
|
|
78
|
+
toolCount: session.exposedTools.length,
|
|
79
|
+
tools: session.exposedTools,
|
|
80
|
+
activatedProject: session.activatedProject,
|
|
81
|
+
uptimeMs: Date.now() - session.createdAt,
|
|
82
|
+
}, null, 2))],
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
87
|
+
return { content: [textBlock(`serena_session_status failed: ${msg}`)], isError: true };
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
registerAppTool(server, "serena_stop_session", {
|
|
91
|
+
title: "Stop Serena session",
|
|
92
|
+
description: "Stop the active Serena session for a workspace. Cleans up the child process and releases resources.",
|
|
93
|
+
inputSchema: {
|
|
94
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
95
|
+
},
|
|
96
|
+
...toolMeta(),
|
|
97
|
+
annotations: MUTATING_ANNOTATIONS,
|
|
98
|
+
}, async ({ workspaceId }) => {
|
|
99
|
+
try {
|
|
100
|
+
await serenaManager.stopWorkspaceSessions(workspaceId);
|
|
101
|
+
return { content: [textBlock(JSON.stringify({ stopped: true, workspaceId }))] };
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
105
|
+
return { content: [textBlock(`serena_stop_session failed: ${msg}`)], isError: true };
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
registerAppTool(server, "serena_restart_session", {
|
|
109
|
+
title: "Restart Serena session",
|
|
110
|
+
description: "Restart the Serena session for a workspace. Stops any existing session and starts a new one.",
|
|
111
|
+
inputSchema: {
|
|
112
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
113
|
+
projectRelativePath: z.string().optional().describe("Optional project subdirectory relative to workspace root."),
|
|
114
|
+
},
|
|
115
|
+
...toolMeta(),
|
|
116
|
+
annotations: MUTATING_ANNOTATIONS,
|
|
117
|
+
}, async ({ workspaceId, projectRelativePath }) => {
|
|
118
|
+
try {
|
|
119
|
+
await serenaManager.stopWorkspaceSessions(workspaceId);
|
|
120
|
+
const workspace = workspaces.getWorkspace(workspaceId);
|
|
121
|
+
const session = await serenaManager.startSession(workspaceId, workspace.root, projectRelativePath);
|
|
122
|
+
return {
|
|
123
|
+
content: [textBlock(JSON.stringify({
|
|
124
|
+
sessionId: session.sessionId,
|
|
125
|
+
status: session.status,
|
|
126
|
+
toolCount: session.exposedTools.length,
|
|
127
|
+
}, null, 2))],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
132
|
+
return { content: [textBlock(`serena_restart_session failed: ${msg}`)], isError: true };
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
registerAppTool(server, "serena_list_sessions", {
|
|
136
|
+
title: "List Serena sessions",
|
|
137
|
+
description: "List all active Serena sessions across all workspaces.",
|
|
138
|
+
inputSchema: {},
|
|
139
|
+
...toolMeta(),
|
|
140
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
141
|
+
}, async () => {
|
|
142
|
+
try {
|
|
143
|
+
const sessions = serenaManager.getSessionInfo();
|
|
144
|
+
return { content: [textBlock(JSON.stringify({ count: sessions.length, sessions }, null, 2))] };
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
148
|
+
return { content: [textBlock(`serena_list_sessions failed: ${msg}`)], isError: true };
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
registerAppTool(server, "serena_health_check", {
|
|
152
|
+
title: "Serena health check",
|
|
153
|
+
description: "Ping the Serena child process and verify the session is healthy, initialized, and has an active project.",
|
|
154
|
+
inputSchema: {
|
|
155
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
156
|
+
},
|
|
157
|
+
...toolMeta(),
|
|
158
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
159
|
+
}, async ({ workspaceId }) => {
|
|
160
|
+
try {
|
|
161
|
+
const health = await serenaManager.healthCheck(workspaceId);
|
|
162
|
+
return { content: [textBlock(JSON.stringify(health, null, 2))] };
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
166
|
+
return { content: [textBlock(`serena_health_check failed: ${msg}`)], isError: true };
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
function registerSerenaSemanticTools(server, config, serenaManager, workspaces) {
|
|
171
|
+
const semanticReadTools = [
|
|
172
|
+
{
|
|
173
|
+
name: "serena_find_symbol",
|
|
174
|
+
serenaName: "find_symbol",
|
|
175
|
+
description: "Find a symbol by name across the active project. Returns file location, kind, and context. Requires an active Serena session.",
|
|
176
|
+
inputSchema: {
|
|
177
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
178
|
+
query: z.string().describe("Symbol name to search for (class, function, variable, etc.)."),
|
|
179
|
+
maxResults: z.number().int().optional().describe("Maximum results (default 20, max 100)."),
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: "serena_find_referencing_symbols",
|
|
184
|
+
serenaName: "find_referencing_symbols",
|
|
185
|
+
description: "Find all references to a symbol across the project. Requires an active Serena session.",
|
|
186
|
+
inputSchema: {
|
|
187
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
188
|
+
query: z.string().describe("Symbol name to find references for."),
|
|
189
|
+
maxResults: z.number().int().optional().describe("Maximum results (default 50, max 200)."),
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
name: "serena_get_symbols_overview",
|
|
194
|
+
serenaName: "get_symbols_overview",
|
|
195
|
+
description: "Get an overview of all top-level symbols in a file. Returns classes, functions, variables with locations. Requires an active Serena session.",
|
|
196
|
+
inputSchema: {
|
|
197
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
198
|
+
filePath: z.string().describe("Workspace-relative path to the file."),
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: "serena_search_for_pattern",
|
|
203
|
+
serenaName: "search_for_pattern",
|
|
204
|
+
description: "Search the project for a regex pattern. Uses Serena's language-aware search. Requires an active Serena session.",
|
|
205
|
+
inputSchema: {
|
|
206
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
207
|
+
pattern: z.string().describe("Regex or text pattern to search for."),
|
|
208
|
+
filePattern: z.string().optional().describe("Optional file extension filter (e.g. '*.ts')."),
|
|
209
|
+
maxResults: z.number().int().optional().describe("Maximum results (default 50, max 500)."),
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
name: "serena_find_implementations",
|
|
214
|
+
serenaName: "find_implementations",
|
|
215
|
+
description: "Find all implementations of an interface, abstract class, or method. Requires an active Serena session.",
|
|
216
|
+
inputSchema: {
|
|
217
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
218
|
+
query: z.string().describe("Symbol name to find implementations for."),
|
|
219
|
+
maxResults: z.number().int().optional().describe("Maximum results (default 20, max 100)."),
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: "serena_find_declaration",
|
|
224
|
+
serenaName: "find_declaration",
|
|
225
|
+
description: "Find the declaration location of a symbol. Requires an active Serena session.",
|
|
226
|
+
inputSchema: {
|
|
227
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
228
|
+
query: z.string().describe("Symbol name to find the declaration for."),
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: "serena_get_diagnostics_for_file",
|
|
233
|
+
serenaName: "get_diagnostics_for_file",
|
|
234
|
+
description: "Get language server diagnostics for a specific file (errors, warnings, hints). Requires an active Serena session.",
|
|
235
|
+
inputSchema: {
|
|
236
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
237
|
+
filePath: z.string().describe("Workspace-relative path to the file."),
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
name: "serena_get_diagnostics_for_symbol",
|
|
242
|
+
serenaName: "get_diagnostics_for_symbol",
|
|
243
|
+
description: "Get diagnostics for a specific symbol. Requires an active Serena session.",
|
|
244
|
+
inputSchema: {
|
|
245
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
246
|
+
query: z.string().describe("Symbol name to get diagnostics for."),
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: "serena_serena_info",
|
|
251
|
+
serenaName: "serena_info",
|
|
252
|
+
description: "Get Serena server version, capabilities, and configuration info. Requires an active Serena session.",
|
|
253
|
+
inputSchema: {
|
|
254
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: "serena_read_memory",
|
|
259
|
+
serenaName: "read_memory",
|
|
260
|
+
description: "Read a Serena memory entry by name. Requires an active Serena session.",
|
|
261
|
+
inputSchema: {
|
|
262
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
263
|
+
name: z.string().describe("Memory name to read."),
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: "serena_list_memories",
|
|
268
|
+
serenaName: "list_memories",
|
|
269
|
+
description: "List all Serena memory entries. Requires an active Serena session.",
|
|
270
|
+
inputSchema: {
|
|
271
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: "serena_onboarding",
|
|
276
|
+
serenaName: "onboarding",
|
|
277
|
+
description: "Get Serena's onboarding status and project setup guidance. Requires an active Serena session.",
|
|
278
|
+
inputSchema: {
|
|
279
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
];
|
|
283
|
+
const mutationTools = [
|
|
284
|
+
{
|
|
285
|
+
name: "serena_replace_symbol_body",
|
|
286
|
+
serenaName: "replace_symbol_body",
|
|
287
|
+
description: "Replace the body of a named symbol (function, class, method) while preserving its signature. Requires an active Serena session.",
|
|
288
|
+
inputSchema: {
|
|
289
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
290
|
+
symbol: z.string().describe("Name of the symbol to replace."),
|
|
291
|
+
newBody: z.string().describe("New body content for the symbol."),
|
|
292
|
+
filePath: z.string().optional().describe("Workspace-relative file path (disambiguates symbols with same name)."),
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
name: "serena_insert_before_symbol",
|
|
297
|
+
serenaName: "insert_before_symbol",
|
|
298
|
+
description: "Insert code before a named symbol's definition. Requires an active Serena session.",
|
|
299
|
+
inputSchema: {
|
|
300
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
301
|
+
symbol: z.string().describe("Symbol name to insert before."),
|
|
302
|
+
content: z.string().describe("Code content to insert."),
|
|
303
|
+
filePath: z.string().optional().describe("Workspace-relative file path."),
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: "serena_insert_after_symbol",
|
|
308
|
+
serenaName: "insert_after_symbol",
|
|
309
|
+
description: "Insert code after a named symbol's definition. Requires an active Serena session.",
|
|
310
|
+
inputSchema: {
|
|
311
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
312
|
+
symbol: z.string().describe("Symbol name to insert after."),
|
|
313
|
+
content: z.string().describe("Code content to insert."),
|
|
314
|
+
filePath: z.string().optional().describe("Workspace-relative file path."),
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
name: "serena_rename_symbol",
|
|
319
|
+
serenaName: "rename_symbol",
|
|
320
|
+
description: "Rename a symbol across the entire project. Updates all references. Requires an active Serena session.",
|
|
321
|
+
inputSchema: {
|
|
322
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
323
|
+
symbol: z.string().describe("Current symbol name."),
|
|
324
|
+
newName: z.string().describe("New symbol name."),
|
|
325
|
+
filePath: z.string().optional().describe("Workspace-relative file path to disambiguate."),
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: "serena_safe_delete_symbol",
|
|
330
|
+
serenaName: "safe_delete_symbol",
|
|
331
|
+
description: "Delete a symbol with safety checks. Only deletes if it has no external references. Requires an active Serena session.",
|
|
332
|
+
inputSchema: {
|
|
333
|
+
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
334
|
+
symbol: z.string().describe("Symbol name to delete."),
|
|
335
|
+
filePath: z.string().optional().describe("Workspace-relative file path to disambiguate."),
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
];
|
|
339
|
+
for (const toolDef of semanticReadTools) {
|
|
340
|
+
registerAppTool(server, toolDef.name, {
|
|
341
|
+
title: toolDef.name,
|
|
342
|
+
description: toolDef.description,
|
|
343
|
+
inputSchema: toolDef.inputSchema,
|
|
344
|
+
...toolMeta(),
|
|
345
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
346
|
+
}, async (input) => {
|
|
347
|
+
const { workspaceId, ...rest } = input;
|
|
348
|
+
const startedAt = performance.now();
|
|
349
|
+
try {
|
|
350
|
+
const workspace = workspaces.getWorkspace(workspaceId);
|
|
351
|
+
const result = await serenaManager.callTool(workspaceId, toolDef.serenaName, rest, workspace.root);
|
|
352
|
+
logEvent(config.logging, "info", "tool_call", {
|
|
353
|
+
tool: toolDef.name,
|
|
354
|
+
workspaceId,
|
|
355
|
+
success: true,
|
|
356
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
357
|
+
});
|
|
358
|
+
return { content: [textBlock(JSON.stringify(result, null, 2))] };
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
362
|
+
logEvent(config.logging, "warn", "tool_call", {
|
|
363
|
+
tool: toolDef.name,
|
|
364
|
+
workspaceId,
|
|
365
|
+
success: false,
|
|
366
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
367
|
+
error: msg,
|
|
368
|
+
});
|
|
369
|
+
return { content: [textBlock(`${toolDef.name} failed: ${msg}`)], isError: true };
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
for (const toolDef of mutationTools) {
|
|
374
|
+
registerAppTool(server, toolDef.name, {
|
|
375
|
+
title: toolDef.name,
|
|
376
|
+
description: toolDef.description,
|
|
377
|
+
inputSchema: toolDef.inputSchema,
|
|
378
|
+
...toolMeta(),
|
|
379
|
+
annotations: MUTATING_ANNOTATIONS,
|
|
380
|
+
}, async (input) => {
|
|
381
|
+
const { workspaceId, ...rest } = input;
|
|
382
|
+
const startedAt = performance.now();
|
|
383
|
+
try {
|
|
384
|
+
const workspace = workspaces.getWorkspace(workspaceId);
|
|
385
|
+
const result = await serenaManager.callTool(workspaceId, toolDef.serenaName, rest, workspace.root);
|
|
386
|
+
logEvent(config.logging, "info", "tool_call", {
|
|
387
|
+
tool: toolDef.name,
|
|
388
|
+
workspaceId,
|
|
389
|
+
success: true,
|
|
390
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
391
|
+
});
|
|
392
|
+
return { content: [textBlock(JSON.stringify(result, null, 2))] };
|
|
393
|
+
}
|
|
394
|
+
catch (err) {
|
|
395
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
396
|
+
logEvent(config.logging, "warn", "tool_call", {
|
|
397
|
+
tool: toolDef.name,
|
|
398
|
+
workspaceId,
|
|
399
|
+
success: false,
|
|
400
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
401
|
+
error: msg,
|
|
402
|
+
});
|
|
403
|
+
return { content: [textBlock(`${toolDef.name} failed: ${msg}`)], isError: true };
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
export function registerSerenaTools(server, config, serenaManager, workspaces) {
|
|
409
|
+
registerSerenaHealthTools(server, config, serenaManager, workspaces);
|
|
410
|
+
registerSerenaSemanticTools(server, config, serenaManager, workspaces);
|
|
411
|
+
}
|