auvrynt 1.0.2 → 1.0.5

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.
Files changed (550) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +366 -233
  3. package/addons/auvrynt_bridge/auvrynt_bridge.gd +500 -0
  4. package/addons/auvrynt_bridge/plugin.cfg +7 -0
  5. package/bin/auvrynt-launcher.cjs +77 -0
  6. package/dist/artifact-registry.js +1 -0
  7. package/dist/aseprite-tools.js +1 -0
  8. package/dist/auth/connection-registry.js +145 -0
  9. package/dist/auth/connection-status.js +176 -0
  10. package/dist/auth/oauth-provider.js +617 -0
  11. package/dist/auth/room-registry.js +131 -0
  12. package/dist/auth/session-registry.js +531 -0
  13. package/dist/background-lifecycle.js +1 -0
  14. package/dist/blender-client.js +1 -109
  15. package/dist/blender-tools.js +1 -930
  16. package/dist/browser-stability.js +1 -0
  17. package/dist/cli/commands/help-command.js +10 -0
  18. package/dist/cli/commands/init-command.js +190 -0
  19. package/dist/cli/commands/integration-commands.js +88 -0
  20. package/dist/cli/commands/serve-command.js +83 -0
  21. package/dist/cli/commands/setup-command.js +81 -0
  22. package/dist/cli/commands/status-commands.js +166 -0
  23. package/dist/cli/commands/tunnel-command.js +127 -0
  24. package/dist/cli/commands/user-config-commands.js +105 -0
  25. package/dist/cli/dashboard-actions.js +516 -0
  26. package/dist/cli/dashboard-native-actions.js +282 -0
  27. package/dist/cli/foreground-server.js +270 -0
  28. package/dist/cli/instance-control.js +21 -0
  29. package/dist/cli/instance-lock.js +123 -0
  30. package/dist/cli/integration-bootstrap.js +206 -0
  31. package/dist/cli/lifecycle-manager.js +493 -0
  32. package/dist/cli/runtime-support.js +74 -0
  33. package/dist/cli/serena-detected-default.js +27 -0
  34. package/dist/cli/tunnel-health-monitor.js +182 -0
  35. package/dist/cli.js +82 -739
  36. package/dist/config.js +1 -243
  37. package/dist/connection-registry.js +1 -73
  38. package/dist/connection-status.js +1 -139
  39. package/dist/control-retry.js +1 -0
  40. package/dist/crash-recovery.js +1 -0
  41. package/dist/db/client.js +16 -3
  42. package/dist/db/schema.js +30 -0
  43. package/dist/dotnet-tools.js +1 -223
  44. package/dist/git-worktrees.js +1 -134
  45. package/dist/git.js +1 -41
  46. package/dist/godot-animation-tilemap.js +1 -82
  47. package/dist/godot-csharp-build.js +1 -93
  48. package/dist/godot-csharp-project.js +1 -157
  49. package/dist/godot-csharp-runner.js +1 -146
  50. package/dist/godot-csharp-semantic.js +1 -161
  51. package/dist/godot-csharp-validate.js +1 -71
  52. package/dist/godot-dotnet-env.js +1 -169
  53. package/dist/godot-editor-bridge.js +1 -140
  54. package/dist/godot-gdscript.js +1 -824
  55. package/dist/godot-project-settings.js +1 -223
  56. package/dist/godot-runtime-testing.js +1 -249
  57. package/dist/godot-tools.js +1 -183
  58. package/dist/http-rate-limit.js +1 -0
  59. package/dist/http-server-hardening.js +1 -0
  60. package/dist/image-tools.js +1 -157
  61. package/dist/infrastructure/command-reference.js +32 -0
  62. package/dist/infrastructure/config.js +424 -0
  63. package/dist/infrastructure/context7-auth.js +55 -0
  64. package/dist/infrastructure/http-rate-limit.js +42 -0
  65. package/dist/infrastructure/http-server-hardening.js +23 -0
  66. package/dist/infrastructure/integration-queue.js +46 -0
  67. package/dist/infrastructure/logger.js +129 -0
  68. package/dist/infrastructure/mcp-event-store.js +103 -0
  69. package/dist/infrastructure/ngrok-auth-pool.js +208 -0
  70. package/dist/infrastructure/request-context.js +14 -0
  71. package/dist/infrastructure/shutdown.js +37 -0
  72. package/dist/infrastructure/sse-heartbeat.js +47 -0
  73. package/dist/infrastructure/tool-capabilities.js +67 -0
  74. package/dist/infrastructure/tool-result-budget.js +175 -0
  75. package/dist/infrastructure/user-config.js +167 -0
  76. package/dist/integration-discovery.js +1 -98
  77. package/dist/integration-queue.js +1 -0
  78. package/dist/integrations/agent-reach/agent-reach-tools.js +196 -0
  79. package/dist/integrations/agent-reach/native-channels.js +468 -0
  80. package/dist/integrations/aseprite/aseprite-analysis-tools.js +368 -0
  81. package/dist/integrations/aseprite/aseprite-editing-tools.js +647 -0
  82. package/dist/integrations/aseprite/aseprite-live-tools.js +297 -0
  83. package/dist/integrations/aseprite/aseprite-safety-tools.js +594 -0
  84. package/dist/integrations/aseprite/aseprite-specialized-tools.js +289 -0
  85. package/dist/integrations/aseprite/aseprite-tools.js +837 -0
  86. package/dist/integrations/blender/blender-catalog-mesh.js +593 -0
  87. package/dist/integrations/blender/blender-catalog-object.js +906 -0
  88. package/dist/integrations/blender/blender-catalog-scene.js +266 -0
  89. package/dist/integrations/blender/blender-catalog-select.js +581 -0
  90. package/dist/integrations/blender/blender-catalog-stubs.js +7512 -0
  91. package/dist/integrations/blender/blender-catalog.js +165 -0
  92. package/dist/integrations/blender/blender-client.js +105 -0
  93. package/dist/integrations/blender/blender-tools.js +2243 -0
  94. package/dist/integrations/context7/context7-tools.js +106 -0
  95. package/dist/integrations/dotnet/dotnet-tools.js +195 -0
  96. package/dist/integrations/godot/godot-animation-tilemap.js +74 -0
  97. package/dist/integrations/godot/godot-csharp-build.js +91 -0
  98. package/dist/integrations/godot/godot-csharp-project.js +155 -0
  99. package/dist/integrations/godot/godot-csharp-runner.js +118 -0
  100. package/dist/integrations/godot/godot-csharp-semantic.js +146 -0
  101. package/dist/integrations/godot/godot-csharp-validate.js +71 -0
  102. package/dist/integrations/godot/godot-dotnet-env.js +134 -0
  103. package/dist/integrations/godot/godot-editor-bridge.js +328 -0
  104. package/dist/integrations/godot/godot-gdscript.js +536 -0
  105. package/dist/integrations/godot/godot-project-settings.js +178 -0
  106. package/dist/integrations/godot/godot-runtime-testing.js +263 -0
  107. package/dist/integrations/godot/godot-tools.js +193 -0
  108. package/dist/integrations/images/image-tools.js +414 -0
  109. package/dist/integrations/images/png-codec.js +251 -0
  110. package/dist/integrations/images/view-image.js +99 -0
  111. package/dist/integrations/images/window-capture.js +148 -0
  112. package/dist/integrations/integration-discovery.js +185 -0
  113. package/dist/integrations/obsidian/obsidian-tools.js +205 -0
  114. package/dist/integrations/playwright/browser-session.js +516 -0
  115. package/dist/integrations/playwright/browser-stability.js +36 -0
  116. package/dist/integrations/playwright/playwright-runtime.js +105 -0
  117. package/dist/integrations/playwright/web-tools.js +504 -0
  118. package/dist/integrations/roblox/roblox-helpers.js +381 -0
  119. package/dist/integrations/roblox/roblox-studio-client.js +112 -0
  120. package/dist/integrations/roblox/roblox-tools.js +106 -0
  121. package/dist/integrations/serena/serena-manager.js +464 -0
  122. package/dist/integrations/serena/serena-tools.js +411 -0
  123. package/dist/logger.js +1 -76
  124. package/dist/mcp-event-store.js +1 -0
  125. package/dist/oauth-provider.js +1 -377
  126. package/dist/pi-tools.js +1 -81
  127. package/dist/playwright-runtime.js +1 -0
  128. package/dist/process/background-lifecycle.js +189 -0
  129. package/dist/process/control-retry.js +42 -0
  130. package/dist/process/crash-recovery.js +23 -0
  131. package/dist/process/processes.js +456 -0
  132. package/dist/processes.js +1 -218
  133. package/dist/request-context.js +1 -0
  134. package/dist/review-checkpoints.js +1 -142
  135. package/dist/room-registry.js +1 -0
  136. package/dist/roots.js +1 -53
  137. package/dist/search-discovery.js +1 -271
  138. package/dist/serena-manager.js +1 -443
  139. package/dist/serena-tools.js +1 -411
  140. package/dist/server/dashboard-page-styles.js +331 -0
  141. package/dist/server/dashboard-page.js +1509 -0
  142. package/dist/server/dashboard-routes.js +46 -0
  143. package/dist/server/dashboard.js +240 -0
  144. package/dist/server/http-helpers.js +30 -0
  145. package/dist/server/integration-profile-update.js +37 -0
  146. package/dist/server/mcp-policy.js +169 -0
  147. package/dist/server/mcp-server-factory.js +127 -0
  148. package/dist/server/mcp-tool-registrar.js +182 -0
  149. package/dist/server/openai-session-hint.js +14 -0
  150. package/dist/server/tool-groups.js +29 -0
  151. package/dist/server/tool-logging.js +33 -0
  152. package/dist/server/tool-registration-shared.js +59 -0
  153. package/dist/server/tools/aseprite-advanced-tools-registration.js +547 -0
  154. package/dist/server/tools/aseprite-tools-registration.js +213 -0
  155. package/dist/server/tools/blender-tools-registration.js +690 -0
  156. package/dist/server/tools/core-file-tools-registration.js +459 -0
  157. package/dist/server/tools/dotnet-godot-window-tools-registration.js +120 -0
  158. package/dist/server/tools/godot-csharp-tools-registration.js +252 -0
  159. package/dist/server/tools/godot-gdscript-tools-registration.js +189 -0
  160. package/dist/server/tools/process-project-tools-registration.js +155 -0
  161. package/dist/server/tools/roblox-tools-registration.js +514 -0
  162. package/dist/server/tools/web-image-tools-registration.js +326 -0
  163. package/dist/server/tools/workspace-lifecycle-tools-registration.js +130 -0
  164. package/dist/server/ui-assets.js +97 -0
  165. package/dist/server/workspace-analytics.js +92 -0
  166. package/dist/server.js +453 -2713
  167. package/dist/session-registry.js +1 -0
  168. package/dist/shutdown.js +1 -0
  169. package/dist/skills.js +1 -45
  170. package/dist/sse-heartbeat.js +1 -0
  171. package/dist/tool-capabilities.js +1 -0
  172. package/dist/tool-result-budget.js +1 -0
  173. package/dist/tools/pi-tools.js +81 -0
  174. package/dist/tunnels/cloudflare-tunnel.js +217 -0
  175. package/dist/tunnels/cloudflared-service.js +174 -0
  176. package/dist/tunnels/ngrok-tunnel.js +220 -0
  177. package/dist/tunnels/tunnel-manager.js +186 -0
  178. package/dist/tunnels/tunnel-types.js +1 -0
  179. package/dist/tunnels/tunnel-utils.js +62 -0
  180. package/dist/ui/.vite/manifest.json +9 -2487
  181. package/dist/ui/assets/heavy-payload-D42A9ceL.js +1 -0
  182. package/dist/ui/assets/lightweight-diff-Cv4g9Hdr.js +13 -0
  183. package/dist/ui/assets/review-payload-DKIg1cKF.js +1 -0
  184. package/dist/ui/assets/workspace-app-CeK3NhmB.css +1 -0
  185. package/dist/ui/assets/{workspace-app-C5QsE314.js → workspace-app-CkUXnpl4.js} +6 -6
  186. package/dist/ui/brand-theme.js +23 -0
  187. package/dist/ui/workspace-app.html +15 -15
  188. package/dist/user-config.js +1 -57
  189. package/dist/view-image.js +1 -104
  190. package/dist/web-tools.js +1 -200
  191. package/dist/window-capture.js +1 -74
  192. package/dist/workspace/artifact-registry.js +69 -0
  193. package/dist/workspace/git-worktrees.js +141 -0
  194. package/dist/workspace/git.js +42 -0
  195. package/dist/workspace/review-checkpoints.js +142 -0
  196. package/dist/workspace/roots.js +56 -0
  197. package/dist/workspace/search-discovery.js +264 -0
  198. package/dist/workspace/skills.js +45 -0
  199. package/dist/workspace/workspace-store.js +219 -0
  200. package/dist/workspace/workspaces.js +314 -0
  201. package/dist/workspace-store.js +1 -125
  202. package/dist/workspaces.js +1 -226
  203. package/docs/CREATOR_STORE_FREE_ASSETS.md +162 -0
  204. package/docs/DEVELOPMENT_TOOLS.md +136 -93
  205. package/docs/assets/auvrynt-icon.png +0 -0
  206. package/docs/assets/auvrynt-icon.svg +20 -0
  207. package/docs/chatgpt-coding-workflow.md +143 -143
  208. package/docs/configuration.md +156 -124
  209. package/docs/diagnostics.md +79 -0
  210. package/docs/gotchas.md +244 -202
  211. package/docs/multi-agent-and-long-projects.md +91 -0
  212. package/docs/security.md +138 -100
  213. package/docs/setup.md +171 -131
  214. package/docs/source-layout.md +60 -0
  215. package/extensions/auvrynt_bridge/auvrynt_bridge.lua +594 -0
  216. package/extensions/auvrynt_bridge/live_analysis.lua +181 -0
  217. package/extensions/auvrynt_bridge/live_animation.lua +134 -0
  218. package/extensions/auvrynt_bridge/live_commands.lua +24 -0
  219. package/extensions/auvrynt_bridge/live_common.lua +130 -0
  220. package/extensions/auvrynt_bridge/live_document.lua +78 -0
  221. package/extensions/auvrynt_bridge/live_drawing.lua +125 -0
  222. package/extensions/auvrynt_bridge/live_effects.lua +91 -0
  223. package/extensions/auvrynt_bridge/live_palette_template.lua +167 -0
  224. package/extensions/auvrynt_bridge/live_selection.lua +110 -0
  225. package/extensions/auvrynt_bridge/live_structure.lua +129 -0
  226. package/extensions/auvrynt_bridge/package.json +17 -0
  227. package/guides/ASEPRITE_AGENT_GUIDE.md +133 -0
  228. package/guides/BLENDER_AGENT_GUIDE.md +472 -0
  229. package/guides/GODOT_AGENT_GUIDE.md +298 -0
  230. package/guides/PROJECT_ROUTER.md +165 -0
  231. package/guides/ROBLOX_AGENT_GUIDE.md +75 -0
  232. package/guides/SOFTWARE_AGENT_GUIDE.md +104 -0
  233. package/guides/WEB_AGENT_GUIDE.md +287 -0
  234. package/package.json +78 -70
  235. package/scripts/dev-server.mjs +121 -120
  236. package/scripts/live-tunnel-smoke.mjs +538 -0
  237. package/scripts/repo-hygiene.mjs +74 -0
  238. package/scripts/restart-after-crash.mjs +49 -0
  239. package/scripts/run-tests.mjs +166 -0
  240. package/dist/ui/assets/abap-CLvhMVsD.js +0 -1
  241. package/dist/ui/assets/actionscript-3--17pq3dv.js +0 -1
  242. package/dist/ui/assets/ada-C5qYipkI.js +0 -1
  243. package/dist/ui/assets/andromeeda-vGVdxbeo.js +0 -1
  244. package/dist/ui/assets/angular-html-BJqQFYI6.js +0 -1
  245. package/dist/ui/assets/angular-ts-CMJECO0Y.js +0 -1
  246. package/dist/ui/assets/apache-U0d_L8uA.js +0 -1
  247. package/dist/ui/assets/apex-CGTLDQj6.js +0 -1
  248. package/dist/ui/assets/apl-DWeXpBBr.js +0 -1
  249. package/dist/ui/assets/applescript-CCn79oCD.js +0 -1
  250. package/dist/ui/assets/ara-4CJ0cIlV.js +0 -1
  251. package/dist/ui/assets/asciidoc-DE70LPWp.js +0 -1
  252. package/dist/ui/assets/asm-Cmm7eHzH.js +0 -1
  253. package/dist/ui/assets/astro-CLbttLOq.js +0 -1
  254. package/dist/ui/assets/aurora-x-CDeNXAV0.js +0 -1
  255. package/dist/ui/assets/awk-BWXHIvNe.js +0 -1
  256. package/dist/ui/assets/ayu-dark-DluEY0Gj.js +0 -1
  257. package/dist/ui/assets/ayu-light-C3h-C4tm.js +0 -1
  258. package/dist/ui/assets/ayu-mirage-Bqwy1Gya.js +0 -1
  259. package/dist/ui/assets/ballerina-B7ZEbQpA.js +0 -1
  260. package/dist/ui/assets/bat-Bo4NYOV-.js +0 -1
  261. package/dist/ui/assets/beancount-D-usSTwE.js +0 -1
  262. package/dist/ui/assets/berry-DKpUyyne.js +0 -1
  263. package/dist/ui/assets/bibtex-Ci_nEsc7.js +0 -1
  264. package/dist/ui/assets/bicep-CUHmPFLl.js +0 -1
  265. package/dist/ui/assets/bird2-C2hNVINV.js +0 -1
  266. package/dist/ui/assets/blade-BOzY0P2V.js +0 -1
  267. package/dist/ui/assets/bsl-BkkzgIyY.js +0 -1
  268. package/dist/ui/assets/c-BG-8uJvh.js +0 -1
  269. package/dist/ui/assets/c3-CnJL0r0V.js +0 -1
  270. package/dist/ui/assets/cadence-CQ2zXKGN.js +0 -1
  271. package/dist/ui/assets/cairo-DLTphjLi.js +0 -1
  272. package/dist/ui/assets/catppuccin-frappe-3VR1Za6u.js +0 -1
  273. package/dist/ui/assets/catppuccin-latte-DwIHMF0Q.js +0 -1
  274. package/dist/ui/assets/catppuccin-macchiato-DYnBP6_5.js +0 -1
  275. package/dist/ui/assets/catppuccin-mocha-DYhrFGRu.js +0 -1
  276. package/dist/ui/assets/clarity-SemFz856.js +0 -1
  277. package/dist/ui/assets/clojure-DqKBuwfJ.js +0 -1
  278. package/dist/ui/assets/cmake-Bj61d0ZC.js +0 -1
  279. package/dist/ui/assets/cobol-I_17IuGe.js +0 -1
  280. package/dist/ui/assets/codeowners-C8r90Shi.js +0 -1
  281. package/dist/ui/assets/codeql-oeQT6MSM.js +0 -1
  282. package/dist/ui/assets/coffee-C0B8hmok.js +0 -1
  283. package/dist/ui/assets/common-lisp-Cv5bFMCO.js +0 -1
  284. package/dist/ui/assets/coq-BrsZFFmf.js +0 -1
  285. package/dist/ui/assets/cpp-DDJXt6Vs.js +0 -1
  286. package/dist/ui/assets/crystal-Bexqace6.js +0 -1
  287. package/dist/ui/assets/csharp-Ct8U2NOr.js +0 -1
  288. package/dist/ui/assets/css-DSQhw_9R.js +0 -1
  289. package/dist/ui/assets/csv-Dx-8-gkx.js +0 -1
  290. package/dist/ui/assets/cue-CE9AQfxI.js +0 -1
  291. package/dist/ui/assets/cypher-ClKdZ_lG.js +0 -1
  292. package/dist/ui/assets/d-qD-0Kul2.js +0 -1
  293. package/dist/ui/assets/dark-plus-Cs2F2srj.js +0 -1
  294. package/dist/ui/assets/dart-DkHntEIa.js +0 -1
  295. package/dist/ui/assets/dax-BkyTk9wS.js +0 -1
  296. package/dist/ui/assets/desktop-Dlh5hvp9.js +0 -1
  297. package/dist/ui/assets/diff-woXpYk--.js +0 -1
  298. package/dist/ui/assets/docker-IyjqRm3v.js +0 -1
  299. package/dist/ui/assets/dotenv-_5a1GRtc.js +0 -1
  300. package/dist/ui/assets/dracula-BHWKrbxM.js +0 -1
  301. package/dist/ui/assets/dracula-soft-5eyTD99u.js +0 -1
  302. package/dist/ui/assets/dream-maker-DW3nJb8Q.js +0 -1
  303. package/dist/ui/assets/edge-Z8YYkHOr.js +0 -1
  304. package/dist/ui/assets/elixir-CG9uKtAF.js +0 -1
  305. package/dist/ui/assets/elm-GfWG2IfT.js +0 -1
  306. package/dist/ui/assets/emacs-lisp-C9PiwqqW.js +0 -1
  307. package/dist/ui/assets/erb-xe89e73J.js +0 -1
  308. package/dist/ui/assets/erlang-Cphh6RMH.js +0 -1
  309. package/dist/ui/assets/everforest-dark-sB-x3p7T.js +0 -1
  310. package/dist/ui/assets/everforest-light-Df2xbC6M.js +0 -1
  311. package/dist/ui/assets/fennel-DQxkIbk2.js +0 -1
  312. package/dist/ui/assets/fish-BJitypiv.js +0 -1
  313. package/dist/ui/assets/fluent-C03EYrpw.js +0 -1
  314. package/dist/ui/assets/fortran-fixed-form-DEKoE2YW.js +0 -1
  315. package/dist/ui/assets/fortran-free-form-CYNrtFtB.js +0 -1
  316. package/dist/ui/assets/fsharp-D13ZGOAj.js +0 -1
  317. package/dist/ui/assets/gdresource-C0sCabJj.js +0 -1
  318. package/dist/ui/assets/gdscript-Cp2uCuqX.js +0 -1
  319. package/dist/ui/assets/gdshader-CBce3t8t.js +0 -1
  320. package/dist/ui/assets/genie-CV2tkWYe.js +0 -1
  321. package/dist/ui/assets/gherkin-DExj1W_8.js +0 -1
  322. package/dist/ui/assets/git-commit-BSykSTBG.js +0 -1
  323. package/dist/ui/assets/git-rebase-CoTL_uSE.js +0 -1
  324. package/dist/ui/assets/github-dark-C-LZuMrd.js +0 -1
  325. package/dist/ui/assets/github-dark-default-DXG-b-1a.js +0 -1
  326. package/dist/ui/assets/github-dark-dimmed-Bx1FflLF.js +0 -1
  327. package/dist/ui/assets/github-dark-high-contrast-B_tTalzw.js +0 -1
  328. package/dist/ui/assets/github-light-EUqPIrTm.js +0 -1
  329. package/dist/ui/assets/github-light-default-BXViO-2h.js +0 -1
  330. package/dist/ui/assets/github-light-high-contrast-B68TUdTA.js +0 -1
  331. package/dist/ui/assets/gleam-CSRkHgEL.js +0 -1
  332. package/dist/ui/assets/glimmer-js-DAn4UCSu.js +0 -1
  333. package/dist/ui/assets/glimmer-ts-Tjyi6Gh5.js +0 -1
  334. package/dist/ui/assets/glsl-CtTDZoqR.js +0 -1
  335. package/dist/ui/assets/gn-ilITqXS6.js +0 -1
  336. package/dist/ui/assets/gnuplot-7GGW24-e.js +0 -1
  337. package/dist/ui/assets/go-BJwz_mda.js +0 -1
  338. package/dist/ui/assets/graphql-D5gcC_Jk.js +0 -1
  339. package/dist/ui/assets/groovy-CacY0gHj.js +0 -1
  340. package/dist/ui/assets/gruvbox-dark-hard-C820rvS2.js +0 -1
  341. package/dist/ui/assets/gruvbox-dark-medium-BPjhmG05.js +0 -1
  342. package/dist/ui/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -1
  343. package/dist/ui/assets/gruvbox-light-hard-BC_s9l72.js +0 -1
  344. package/dist/ui/assets/gruvbox-light-medium-BAWPOn9u.js +0 -1
  345. package/dist/ui/assets/gruvbox-light-soft-BSMLrYjP.js +0 -1
  346. package/dist/ui/assets/hack-BJXY27dt.js +0 -1
  347. package/dist/ui/assets/haml-BLfFoZf7.js +0 -1
  348. package/dist/ui/assets/handlebars-Dw6CWkvN.js +0 -1
  349. package/dist/ui/assets/haskell-D8IpX4py.js +0 -1
  350. package/dist/ui/assets/haxe-OTjmBuCE.js +0 -1
  351. package/dist/ui/assets/hcl-Dh228itO.js +0 -1
  352. package/dist/ui/assets/heavy-payload-Dcg0-F-S.js +0 -4
  353. package/dist/ui/assets/hjson-CxZEssPk.js +0 -1
  354. package/dist/ui/assets/hlsl-Cvrh5tZx.js +0 -1
  355. package/dist/ui/assets/horizon-CE9ld1lL.js +0 -1
  356. package/dist/ui/assets/horizon-bright-Br1oVSNq.js +0 -1
  357. package/dist/ui/assets/houston-CsvMBhTu.js +0 -1
  358. package/dist/ui/assets/html-CAcAWvoN.js +0 -1
  359. package/dist/ui/assets/html-derivative-8aSW2E_7.js +0 -1
  360. package/dist/ui/assets/http-B2YR_3V1.js +0 -1
  361. package/dist/ui/assets/hurl-BnDJ9Zhf.js +0 -1
  362. package/dist/ui/assets/hxml-B0Qn7Nwc.js +0 -1
  363. package/dist/ui/assets/hy-CZbG8q4J.js +0 -1
  364. package/dist/ui/assets/imba-DsUTQ-LC.js +0 -1
  365. package/dist/ui/assets/ini-B5eOa1yu.js +0 -1
  366. package/dist/ui/assets/java-Doxi4W8u.js +0 -1
  367. package/dist/ui/assets/javascript-BbRdEqti.js +0 -1
  368. package/dist/ui/assets/jinja-CS3Tpv_Q.js +0 -1
  369. package/dist/ui/assets/jison-BkPGYVHR.js +0 -1
  370. package/dist/ui/assets/json-BMt1m3m8.js +0 -1
  371. package/dist/ui/assets/json5-BR5RXkoi.js +0 -1
  372. package/dist/ui/assets/jsonc-CYpm1nAK.js +0 -1
  373. package/dist/ui/assets/jsonl-CmCQp5Yx.js +0 -1
  374. package/dist/ui/assets/jsonnet-CJTPZ8u_.js +0 -1
  375. package/dist/ui/assets/jssm-DXw9l8Rf.js +0 -1
  376. package/dist/ui/assets/jsx-CQKrJXXY.js +0 -1
  377. package/dist/ui/assets/julia-BuN7i2du.js +0 -1
  378. package/dist/ui/assets/just-BswEPFPu.js +0 -1
  379. package/dist/ui/assets/kanagawa-dragon-CXtmUGW6.js +0 -1
  380. package/dist/ui/assets/kanagawa-lotus-BN08jTvb.js +0 -1
  381. package/dist/ui/assets/kanagawa-wave-CTweb8Dz.js +0 -1
  382. package/dist/ui/assets/kdl-CsD5j6eV.js +0 -1
  383. package/dist/ui/assets/kotlin-DhhofPvG.js +0 -1
  384. package/dist/ui/assets/kusto-BUv0MjJC.js +0 -1
  385. package/dist/ui/assets/laserwave-C_8bwKvT.js +0 -1
  386. package/dist/ui/assets/latex-DU2VyFfA.js +0 -1
  387. package/dist/ui/assets/lean-CewbzKMR.js +0 -1
  388. package/dist/ui/assets/less-DVTAwKKz.js +0 -1
  389. package/dist/ui/assets/light-plus-DVQuIRkW.js +0 -1
  390. package/dist/ui/assets/liquid-Cmz1L3dq.js +0 -1
  391. package/dist/ui/assets/llvm-Cm23YOpf.js +0 -1
  392. package/dist/ui/assets/log-BNLmms1o.js +0 -1
  393. package/dist/ui/assets/logo-Cluzi2Zq.js +0 -1
  394. package/dist/ui/assets/lua-CfVXhkaJ.js +0 -1
  395. package/dist/ui/assets/luau-CNKltnaQ.js +0 -1
  396. package/dist/ui/assets/make-Dixweg8N.js +0 -1
  397. package/dist/ui/assets/markdown-BYOwaDjH.js +0 -1
  398. package/dist/ui/assets/marko-C5bfqGiA.js +0 -1
  399. package/dist/ui/assets/material-theme-Bm3Qr25_.js +0 -1
  400. package/dist/ui/assets/material-theme-darker-2IIEA8gg.js +0 -1
  401. package/dist/ui/assets/material-theme-lighter-uhdI0v04.js +0 -1
  402. package/dist/ui/assets/material-theme-ocean-CHQ94UKr.js +0 -1
  403. package/dist/ui/assets/material-theme-palenight-B5W6OYN7.js +0 -1
  404. package/dist/ui/assets/matlab-D7qyCx1q.js +0 -1
  405. package/dist/ui/assets/mdc-CVBXYfyq.js +0 -1
  406. package/dist/ui/assets/mdx-DQZ5AkYe.js +0 -1
  407. package/dist/ui/assets/mermaid-Bk4SNUv9.js +0 -1
  408. package/dist/ui/assets/min-dark-BSWPekZh.js +0 -1
  409. package/dist/ui/assets/min-light-DDpmG2fV.js +0 -1
  410. package/dist/ui/assets/mipsasm-BMqwQI7S.js +0 -1
  411. package/dist/ui/assets/mojo-BgCJLMeH.js +0 -1
  412. package/dist/ui/assets/monokai-CdkpiU2Y.js +0 -1
  413. package/dist/ui/assets/moonbit-CaWjb8XO.js +0 -1
  414. package/dist/ui/assets/move-B1IS1UjX.js +0 -1
  415. package/dist/ui/assets/narrat-_X_XdTYD.js +0 -1
  416. package/dist/ui/assets/nextflow-Bbiyy34d.js +0 -1
  417. package/dist/ui/assets/nextflow-groovy-Dc_ddanL.js +0 -1
  418. package/dist/ui/assets/nginx-CzJafxLa.js +0 -1
  419. package/dist/ui/assets/night-owl-DhmEMT88.js +0 -1
  420. package/dist/ui/assets/night-owl-light-eJ-hLW7d.js +0 -1
  421. package/dist/ui/assets/nim-DABKtHtM.js +0 -1
  422. package/dist/ui/assets/nix-IvuFDN5E.js +0 -1
  423. package/dist/ui/assets/nord-Cb4Vim4T.js +0 -1
  424. package/dist/ui/assets/nushell-DcLAeLz5.js +0 -1
  425. package/dist/ui/assets/objective-c-D1A_Heim.js +0 -1
  426. package/dist/ui/assets/objective-cpp-BsSzOQcm.js +0 -1
  427. package/dist/ui/assets/ocaml-O90oeIOV.js +0 -1
  428. package/dist/ui/assets/odin-B1RWQWA5.js +0 -1
  429. package/dist/ui/assets/one-dark-pro-CLwyXe_n.js +0 -1
  430. package/dist/ui/assets/one-light-D7Lr4KcI.js +0 -1
  431. package/dist/ui/assets/openscad-BUDT5pXO.js +0 -1
  432. package/dist/ui/assets/pascal-4ZHwLPI5.js +0 -1
  433. package/dist/ui/assets/perl-CBh7L3lZ.js +0 -1
  434. package/dist/ui/assets/php-DFbI9q5p.js +0 -1
  435. package/dist/ui/assets/pierre-dark-sU4Zdns8.js +0 -1
  436. package/dist/ui/assets/pierre-dark-soft-HXgun5vs.js +0 -1
  437. package/dist/ui/assets/pierre-light-DWBk51d8.js +0 -1
  438. package/dist/ui/assets/pierre-light-soft-CodEzPxf.js +0 -1
  439. package/dist/ui/assets/pkl-ot-7Btpt.js +0 -1
  440. package/dist/ui/assets/plastic-DQwYfKfQ.js +0 -1
  441. package/dist/ui/assets/plsql-DGHpHOYJ.js +0 -1
  442. package/dist/ui/assets/po-BiJDBrnU.js +0 -1
  443. package/dist/ui/assets/poimandres-DRFjx7u4.js +0 -1
  444. package/dist/ui/assets/polar-C7UOKdEL.js +0 -1
  445. package/dist/ui/assets/postcss-BXeXVLqQ.js +0 -1
  446. package/dist/ui/assets/powerquery-DNMTfnFr.js +0 -1
  447. package/dist/ui/assets/powershell-DshXNtvi.js +0 -1
  448. package/dist/ui/assets/prisma-BsRQq5mF.js +0 -1
  449. package/dist/ui/assets/prolog-iXnhIJG7.js +0 -1
  450. package/dist/ui/assets/proto-DB4EqR-F.js +0 -1
  451. package/dist/ui/assets/pug-C_PxC7gO.js +0 -1
  452. package/dist/ui/assets/puppet-CDv2pdJW.js +0 -1
  453. package/dist/ui/assets/purescript-9MfHhQsQ.js +0 -1
  454. package/dist/ui/assets/python-gzcpVVnB.js +0 -1
  455. package/dist/ui/assets/qml-DtngoFFK.js +0 -1
  456. package/dist/ui/assets/qmldir-DCQb3MpD.js +0 -1
  457. package/dist/ui/assets/qss-Fe1Jh2GI.js +0 -1
  458. package/dist/ui/assets/r-DohkcevW.js +0 -1
  459. package/dist/ui/assets/racket-DcIDlBhZ.js +0 -1
  460. package/dist/ui/assets/raku-B3gFvitq.js +0 -1
  461. package/dist/ui/assets/razor-C4t8J0_E.js +0 -1
  462. package/dist/ui/assets/red-CJ3rzSJv.js +0 -1
  463. package/dist/ui/assets/reg-CRGYupPL.js +0 -1
  464. package/dist/ui/assets/regexp-OGbTbjgY.js +0 -1
  465. package/dist/ui/assets/rel-BtDbiS_P.js +0 -1
  466. package/dist/ui/assets/review-payload-C5Qz60Kq.js +0 -1
  467. package/dist/ui/assets/riscv-Ckw8ddFX.js +0 -1
  468. package/dist/ui/assets/ron-VUp2lXgN.js +0 -1
  469. package/dist/ui/assets/rose-pine-BthvhNj6.js +0 -1
  470. package/dist/ui/assets/rose-pine-dawn-Dg85fqjY.js +0 -1
  471. package/dist/ui/assets/rose-pine-moon-hon4tzzS.js +0 -1
  472. package/dist/ui/assets/rosmsg-CAekHB0j.js +0 -1
  473. package/dist/ui/assets/rst-CfBbbcvC.js +0 -1
  474. package/dist/ui/assets/ruby-Bw0mpxHY.js +0 -1
  475. package/dist/ui/assets/rust-Cfkwpbl8.js +0 -1
  476. package/dist/ui/assets/sas-Cs3s9JOf.js +0 -1
  477. package/dist/ui/assets/sass-DXrisJhu.js +0 -1
  478. package/dist/ui/assets/scala-DKOlJaKm.js +0 -1
  479. package/dist/ui/assets/scheme-DQCgrYNe.js +0 -1
  480. package/dist/ui/assets/scss-sRxNJS54.js +0 -1
  481. package/dist/ui/assets/sdbl-bTVj8UrX.js +0 -1
  482. package/dist/ui/assets/shaderlab-TOUzSsQk.js +0 -1
  483. package/dist/ui/assets/shellscript-B0X6wh0R.js +0 -1
  484. package/dist/ui/assets/shellsession-D2FdOioR.js +0 -1
  485. package/dist/ui/assets/slack-dark-DnToyrRv.js +0 -1
  486. package/dist/ui/assets/slack-ochin-B2OO5cIa.js +0 -1
  487. package/dist/ui/assets/smalltalk-B16xEiuN.js +0 -1
  488. package/dist/ui/assets/snazzy-light-4G7pJPwS.js +0 -1
  489. package/dist/ui/assets/solarized-dark-DV17i1UV.js +0 -1
  490. package/dist/ui/assets/solarized-light-DSh2HLQt.js +0 -1
  491. package/dist/ui/assets/solidity-CKzVLygQ.js +0 -1
  492. package/dist/ui/assets/soy-s6g9OjJ1.js +0 -1
  493. package/dist/ui/assets/sparql-D_iOobhT.js +0 -1
  494. package/dist/ui/assets/splunk-BC2Px7Mm.js +0 -1
  495. package/dist/ui/assets/sql-DVTnh5V-.js +0 -1
  496. package/dist/ui/assets/ssh-config-BgfXC-Er.js +0 -1
  497. package/dist/ui/assets/stata-DFIDiXF9.js +0 -1
  498. package/dist/ui/assets/stylus-B6D30XZt.js +0 -1
  499. package/dist/ui/assets/surrealql-DVfrsLyg.js +0 -1
  500. package/dist/ui/assets/svelte-D5GsxESq.js +0 -1
  501. package/dist/ui/assets/swift-DonLKvLd.js +0 -1
  502. package/dist/ui/assets/synthwave-84-nFMaYfgc.js +0 -1
  503. package/dist/ui/assets/system-verilog-DJ5XKQeo.js +0 -1
  504. package/dist/ui/assets/systemd-BxMlprV5.js +0 -1
  505. package/dist/ui/assets/talonscript-CohzipZa.js +0 -1
  506. package/dist/ui/assets/tasl-DMoTqEGO.js +0 -1
  507. package/dist/ui/assets/tcl-CZd0xW_V.js +0 -1
  508. package/dist/ui/assets/templ-DI-Zyqzd.js +0 -1
  509. package/dist/ui/assets/terraform-DswuEJGm.js +0 -1
  510. package/dist/ui/assets/tex-WHHmlbJI.js +0 -1
  511. package/dist/ui/assets/tokyo-night-oM2G3aXe.js +0 -1
  512. package/dist/ui/assets/toml-CcmNWLt0.js +0 -1
  513. package/dist/ui/assets/ts-tags-Dwpo2RFJ.js +0 -1
  514. package/dist/ui/assets/tsv-sltzmVWM.js +0 -1
  515. package/dist/ui/assets/tsx-ph_idaAW.js +0 -1
  516. package/dist/ui/assets/turtle-ByJddavk.js +0 -1
  517. package/dist/ui/assets/twig-YO17jFjR.js +0 -1
  518. package/dist/ui/assets/typescript-CbAxjhkl.js +0 -1
  519. package/dist/ui/assets/typespec-B88KGewJ.js +0 -1
  520. package/dist/ui/assets/typst-DI99ib-x.js +0 -1
  521. package/dist/ui/assets/useFileDiffInstance-B2DLX3Vg.js +0 -244
  522. package/dist/ui/assets/v-DETTlOr0.js +0 -1
  523. package/dist/ui/assets/vala-zf12oZj6.js +0 -1
  524. package/dist/ui/assets/vb-Djn5o6TS.js +0 -1
  525. package/dist/ui/assets/verilog-CiiDBU1e.js +0 -1
  526. package/dist/ui/assets/vesper-D5bVUKB1.js +0 -1
  527. package/dist/ui/assets/vhdl-BroJfC0k.js +0 -1
  528. package/dist/ui/assets/viml-DvXPmvsu.js +0 -1
  529. package/dist/ui/assets/vitesse-black-fwtXNY1n.js +0 -1
  530. package/dist/ui/assets/vitesse-dark-BZCL-v6S.js +0 -1
  531. package/dist/ui/assets/vitesse-light-VbXTXTou.js +0 -1
  532. package/dist/ui/assets/vue-CraHL-Ps.js +0 -1
  533. package/dist/ui/assets/vue-html-e9tyZNtS.js +0 -1
  534. package/dist/ui/assets/vue-vine-CofmxaUb.js +0 -1
  535. package/dist/ui/assets/vyper-CgoNMtux.js +0 -1
  536. package/dist/ui/assets/wasm-BnjxR4X6.js +0 -1
  537. package/dist/ui/assets/wasm-ByWQv1Qj.js +0 -1
  538. package/dist/ui/assets/wenyan-C8pVoKbM.js +0 -1
  539. package/dist/ui/assets/wgsl-BsKzXJz4.js +0 -1
  540. package/dist/ui/assets/wikitext-ClFFjSW2.js +0 -1
  541. package/dist/ui/assets/wit-DdvCle-K.js +0 -1
  542. package/dist/ui/assets/wolfram-DLL8P-h_.js +0 -1
  543. package/dist/ui/assets/workspace-app-8--oTbCd.css +0 -1
  544. package/dist/ui/assets/xml-BWSdPZHm.js +0 -1
  545. package/dist/ui/assets/xsl-BtCt7Hx8.js +0 -1
  546. package/dist/ui/assets/yaml-BZiTw7cQ.js +0 -1
  547. package/dist/ui/assets/zenscript-BnlCZFoB.js +0 -1
  548. package/dist/ui/assets/zig-CMLA9XwU.js +0 -1
  549. package/docs/assets/auvrynt-logo-light.png +0 -0
  550. package/docs/assets/auvrynt-screenshot.png +0 -0
@@ -0,0 +1,252 @@
1
+ import * as z from "zod/v4";
2
+ import { registerAppTool } from "../mcp-tool-registrar.js";
3
+ import { MUTATING_ANNOTATIONS, PROCESS_ANNOTATIONS, READ_ONLY_ANNOTATIONS, WORKSPACE_ID_SCHEMA, toolWidgetDescriptorMeta, } from "../tool-registration-shared.js";
4
+ import { inspectGodotDotnetEnvironment } from "../../godot-dotnet-env.js";
5
+ import { inspectGodotDotnetProject, godotBuildSolutions, godotDotnetRestore } from "../../godot-csharp-project.js";
6
+ import { godotDotnetBuild, godotDotnetClean } from "../../godot-csharp-build.js";
7
+ import { godotRunProject, godotRunScene, getGodotRuntimeLogs } from "../../godot-csharp-runner.js";
8
+ import { godotValidateProject, godotImportAssets } from "../../godot-csharp-validate.js";
9
+ import { godotEditorConnect, godotEditorStatus, godotEditorDisconnect, getBridgeClient } from "../../godot-editor-bridge.js";
10
+ import { findCsharpClasses, getCsharpDiagnostics, getExportedProperties, generateCsharpScript } from "../../godot-csharp-semantic.js";
11
+ import { getProjectSettings, getInputMap, getAutoloads, applyPixelArtImportPreset, generateVscodeConfig, listExportPresets, } from "../../godot-project-settings.js";
12
+ import { getRemoteSceneTree, getRuntimeProperty, getPerformanceMonitors, parseCsharpExceptions, pressAction as godotPressAction, releaseAction as godotReleaseAction, mouseClick as godotMouseClick, assertNodeExists as godotAssertNodeExists, assertProperty as godotAssertProperty, runTestSequence as godotRunTestSequence, exportGodotProject, } from "../../godot-runtime-testing.js";
13
+ function toolResult(action) {
14
+ return Promise.resolve()
15
+ .then(action)
16
+ .then((result) => ({ content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }))
17
+ .catch((error) => ({
18
+ content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
19
+ isError: true,
20
+ }));
21
+ }
22
+ export function registerGodotCsharpTools(server, config, workspaces, processManager) {
23
+ registerAppTool(server, "godot_dotnet_environment", {
24
+ title: "Godot .NET environment",
25
+ description: "Detect and validate the Godot .NET editor, .NET SDK, architecture, and project target frameworks. Run this before the first C# build.",
26
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string().optional() },
27
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
28
+ }, ({ workspaceId, projectPath }) => toolResult(() => inspectGodotDotnetEnvironment(workspaces, { workspaceId, projectPath })));
29
+ registerAppTool(server, "inspect_godot_dotnet_project", {
30
+ title: "Inspect Godot .NET project",
31
+ description: "Inspect a Godot 4 C# project: project.godot, .csproj, .sln, target frameworks, Godot.NET.Sdk, autoloads, input actions, C# scripts, and whether solution regeneration is needed.",
32
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string().optional() },
33
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
34
+ }, ({ workspaceId, projectPath }) => toolResult(() => inspectGodotDotnetProject(workspaces, { workspaceId, projectPath })));
35
+ registerAppTool(server, "godot_build_solutions", {
36
+ title: "Godot build solutions",
37
+ description: "Run Godot --build-solutions to generate or regenerate the .sln and .csproj for a C# project. Run after adding C# files.",
38
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
39
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
40
+ }, ({ workspaceId, projectPath }) => toolResult(() => godotBuildSolutions(workspaces, { workspaceId, projectPath })));
41
+ registerAppTool(server, "godot_dotnet_restore", {
42
+ title: "dotnet restore (Godot)",
43
+ description: "Restore NuGet packages for a Godot C# project. Credentials and secrets are redacted.",
44
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), lockedMode: z.boolean().optional() },
45
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
46
+ }, ({ workspaceId, projectPath, lockedMode }) => toolResult(() => godotDotnetRestore(workspaces, { workspaceId, projectPath, lockedMode })));
47
+ registerAppTool(server, "godot_dotnet_build", {
48
+ title: "dotnet build (Godot)",
49
+ description: "Build a Godot C# project. Returns structured C# compiler errors, MSBuild errors, and Godot source-generator issues.",
50
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), configuration: z.enum(["Debug", "Release"]).optional(), noRestore: z.boolean().optional() },
51
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
52
+ }, ({ workspaceId, projectPath, configuration, noRestore }) => toolResult(() => godotDotnetBuild(workspaces, { workspaceId, projectPath, configuration, noRestore })));
53
+ registerAppTool(server, "godot_dotnet_clean", {
54
+ title: "dotnet clean (Godot)",
55
+ description: "Remove Godot C# build outputs (bin/ and obj/). Mutating.",
56
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), configuration: z.enum(["Debug", "Release"]).optional() },
57
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: MUTATING_ANNOTATIONS,
58
+ }, ({ workspaceId, projectPath, configuration }) => toolResult(() => godotDotnetClean(workspaces, { workspaceId, projectPath, configuration })));
59
+ registerAppTool(server, "godot_run_project", {
60
+ title: "Run Godot project",
61
+ description: "Run a Godot C# project as a persistent process. Returns a processId. Use godot_get_runtime_logs to inspect output.",
62
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), debug: z.boolean().optional(), windowed: z.boolean().optional(), resolution: z.object({ width: z.number().int(), height: z.number().int() }).optional(), additionalGodotArguments: z.array(z.string()).optional(), userArguments: z.array(z.string()).optional() },
63
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
64
+ }, ({ workspaceId, projectPath, debug, windowed, resolution, additionalGodotArguments, userArguments }) => toolResult(() => godotRunProject(workspaces, processManager, { workspaceId, projectPath, debug, windowed, resolution, additionalGodotArguments, userArguments })));
65
+ registerAppTool(server, "godot_run_scene", {
66
+ title: "Run Godot scene",
67
+ description: "Run a single .tscn scene in a Godot C# project as a persistent process.",
68
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), scenePath: z.string(), debug: z.boolean().optional() },
69
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
70
+ }, ({ workspaceId, projectPath, scenePath, debug }) => toolResult(() => godotRunScene(workspaces, processManager, { workspaceId, projectPath, scenePath, debug })));
71
+ registerAppTool(server, "godot_stop", {
72
+ title: "Stop Godot process",
73
+ description: "Gracefully stop a Godot process tracked by Auvrynt for this workspace.",
74
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, processId: z.string() },
75
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
76
+ }, ({ workspaceId, processId }) => toolResult(() => processManager.stopProcess({ workspaceId, processId })));
77
+ registerAppTool(server, "godot_get_runtime_logs", {
78
+ title: "Get Godot runtime logs",
79
+ description: "Get structured and categorized runtime logs from a running Godot C# process. Groups C# exceptions, stack traces, Godot errors, and GD.Print output.",
80
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, processId: z.string(), severity: z.array(z.enum(["error", "warning", "info", "print"])).optional(), lines: z.number().int().optional() },
81
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: READ_ONLY_ANNOTATIONS,
82
+ }, ({ workspaceId, processId, severity, lines }) => toolResult(() => getGodotRuntimeLogs(processManager, { workspaceId, processId, severity, lines })));
83
+ registerAppTool(server, "godot_validate_project", {
84
+ title: "Validate Godot project",
85
+ description: "Headless Godot project validation: optionally build C#, detect import errors, missing resources, invalid scripts, and plugin failures.",
86
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), buildCsharpFirst: z.boolean().optional() },
87
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
88
+ }, ({ workspaceId, projectPath, buildCsharpFirst }) => toolResult(() => godotValidateProject(workspaces, { workspaceId, projectPath, buildCsharpFirst })));
89
+ registerAppTool(server, "godot_import_assets", {
90
+ title: "Godot import assets",
91
+ description: "Run Godot in headless editor mode to import pending assets.",
92
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
93
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
94
+ }, ({ workspaceId, projectPath }) => toolResult(() => godotImportAssets(workspaces, { workspaceId, projectPath })));
95
+ registerAppTool(server, "godot_editor_connect", {
96
+ title: "Connect Godot editor bridge",
97
+ description: "Connect Auvrynt to the Godot editor bridge plugin. Enables live scene-tree inspection, property editing, node mutation, and UndoRedo.",
98
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), host: z.string().optional(), port: z.number().int().optional(), token: z.string().optional() },
99
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
100
+ }, ({ workspaceId, projectPath, host, port, token }) => toolResult(() => godotEditorConnect(workspaces, { workspaceId, projectPath, host, port, token })));
101
+ registerAppTool(server, "godot_editor_status", {
102
+ title: "Godot editor bridge status",
103
+ description: "Return current Godot editor bridge connection status.",
104
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
105
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
106
+ }, ({ workspaceId }) => toolResult(() => godotEditorStatus({ workspaceId })));
107
+ registerAppTool(server, "godot_editor_disconnect", {
108
+ title: "Disconnect Godot editor bridge",
109
+ description: "Disconnect Auvrynt from the Godot editor bridge. Does not close the editor.",
110
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
111
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
112
+ }, ({ workspaceId }) => toolResult(() => godotEditorDisconnect({ workspaceId })));
113
+ registerAppTool(server, "godot_get_scene_tree", {
114
+ title: "Get Godot scene tree",
115
+ description: "Get the edited or remote runtime scene tree via the Godot editor bridge.",
116
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, mode: z.enum(["edited", "remote"]).optional(), maxDepth: z.number().int().optional() },
117
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
118
+ }, ({ workspaceId, mode, maxDepth }) => toolResult(async () => {
119
+ const client = getBridgeClient(workspaceId);
120
+ return mode === "remote"
121
+ ? getRemoteSceneTree({ workspaceId, maxDepth }, client)
122
+ : client.sendRequest("scene.get_tree", { maxDepth });
123
+ }));
124
+ registerAppTool(server, "godot_get_runtime_property", {
125
+ title: "Get runtime node property",
126
+ description: "Read a live runtime property from a node in the running Godot game via the editor bridge.",
127
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, nodePath: z.string(), property: z.string() },
128
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
129
+ }, ({ workspaceId, nodePath, property }) => toolResult(() => getRuntimeProperty({ workspaceId, nodePath, property }, getBridgeClient(workspaceId))));
130
+ registerAppTool(server, "godot_get_performance_monitors", {
131
+ title: "Godot performance monitors",
132
+ description: "Get FPS, physics time, memory, node count, draw calls, and orphan node count from the running game via the editor bridge.",
133
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
134
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
135
+ }, ({ workspaceId }) => toolResult(() => getPerformanceMonitors({ workspaceId }, getBridgeClient(workspaceId))));
136
+ registerAppTool(server, "godot_find_csharp_class", {
137
+ title: "Find C# class",
138
+ description: "Locate a C# class in the workspace. Returns file path, base class, partial status, namespace, [Export] properties, [Signal] delegates, and lifecycle overrides.",
139
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, className: z.string() },
140
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
141
+ }, ({ workspaceId, className }) => toolResult(() => findCsharpClasses(workspaces, { workspaceId, className })));
142
+ registerAppTool(server, "godot_get_exported_properties", {
143
+ title: "Get exported C# properties",
144
+ description: "List all [Export] properties on a C# script file.",
145
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
146
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
147
+ }, ({ workspaceId, scriptPath }) => toolResult(() => getExportedProperties(workspaces, { workspaceId, scriptPath })));
148
+ registerAppTool(server, "godot_get_csharp_diagnostics", {
149
+ title: "Get C# diagnostics",
150
+ description: "Scan C# scripts for known anti-patterns and style issues within the workspace.",
151
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
152
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
153
+ }, ({ workspaceId, projectPath }) => toolResult(() => getCsharpDiagnostics(workspaces, { workspaceId, projectPath })));
154
+ registerAppTool(server, "godot_get_project_settings", {
155
+ title: "Get project settings",
156
+ description: "Read all settings from project.godot.",
157
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
158
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
159
+ }, ({ workspaceId, projectPath }) => toolResult(() => getProjectSettings(workspaces, { workspaceId, projectPath })));
160
+ registerAppTool(server, "godot_get_input_map", {
161
+ title: "Get input map",
162
+ description: "Return all input actions from the project.godot input map.",
163
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
164
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
165
+ }, ({ workspaceId, projectPath }) => toolResult(() => getInputMap(workspaces, { workspaceId, projectPath })));
166
+ registerAppTool(server, "godot_get_autoloads", {
167
+ title: "Get autoloads",
168
+ description: "Return all autoloads from project.godot.",
169
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
170
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
171
+ }, ({ workspaceId, projectPath }) => toolResult(() => getAutoloads(workspaces, { workspaceId, projectPath })));
172
+ registerAppTool(server, "godot_apply_pixel_art_import_preset", {
173
+ title: "Apply pixel art import preset",
174
+ description: "Apply nearest-neighbour / lossless import settings to specified texture paths. Does not affect unspecified textures.",
175
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, paths: z.array(z.string()) },
176
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
177
+ }, ({ workspaceId, paths }) => toolResult(() => applyPixelArtImportPreset(workspaces, { workspaceId, paths })));
178
+ registerAppTool(server, "godot_generate_vscode_config", {
179
+ title: "Generate VS Code config",
180
+ description: "Generate or update .vscode/tasks.json and .vscode/launch.json for Godot C# development. Preserves existing entries.",
181
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), godotExecutable: z.string().optional() },
182
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
183
+ }, ({ workspaceId, projectPath, godotExecutable }) => toolResult(() => generateVscodeConfig(workspaces, { workspaceId, projectPath, godotExecutable })));
184
+ registerAppTool(server, "godot_list_export_presets", {
185
+ title: "List export presets",
186
+ description: "List Godot export presets from export_presets.cfg. Never returns secret credentials.",
187
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
188
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
189
+ }, ({ workspaceId, projectPath }) => toolResult(() => listExportPresets(workspaces, { workspaceId, projectPath })));
190
+ registerAppTool(server, "godot_export_project", {
191
+ title: "Export Godot project",
192
+ description: "Export a Godot project using a named preset. Output must be inside the workspace. Credentials are never exposed.",
193
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), preset: z.string(), outputPath: z.string(), mode: z.enum(["debug", "release"]).optional() },
194
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
195
+ }, ({ workspaceId, projectPath, preset, outputPath, mode }) => toolResult(() => exportGodotProject(workspaces, { workspaceId, projectPath, preset, outputPath, mode })));
196
+ registerAppTool(server, "godot_assert_node_exists", {
197
+ title: "Assert node exists",
198
+ description: "Assert that a node exists in the remote runtime scene tree via the editor bridge.",
199
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, nodePath: z.string() },
200
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
201
+ }, ({ workspaceId, nodePath }) => toolResult(() => godotAssertNodeExists({ workspaceId, nodePath }, getBridgeClient(workspaceId))));
202
+ registerAppTool(server, "godot_assert_property", {
203
+ title: "Assert runtime property",
204
+ description: "Assert a runtime node property satisfies a comparison (eq/neq/gt/lt/approx/contains/exists).",
205
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, nodePath: z.string(), property: z.string(), comparison: z.enum(["eq", "neq", "gt", "lt", "approx", "contains", "exists", "changed"]), expected: z.unknown() },
206
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
207
+ }, ({ workspaceId, nodePath, property, comparison, expected }) => toolResult(() => godotAssertProperty({ workspaceId, nodePath, property, comparison, expected }, getBridgeClient(workspaceId))));
208
+ registerAppTool(server, "godot_run_test_sequence", {
209
+ title: "Run Godot test sequence",
210
+ description: "Execute a bounded sequence of gameplay steps (press_action, wait, screenshot, assert_property, assert_node_exists, assert_no_errors). Max 50 steps, 30s total.",
211
+ inputSchema: {
212
+ workspaceId: WORKSPACE_ID_SCHEMA,
213
+ processId: z.string(),
214
+ steps: z.array(z.object({
215
+ type: z.string(), action: z.string().optional(), durationMs: z.number().optional(),
216
+ outputPath: z.string().optional(), nodePath: z.string().optional(), property: z.string().optional(),
217
+ comparison: z.string().optional(), expected: z.unknown().optional(),
218
+ })),
219
+ },
220
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
221
+ }, ({ workspaceId, processId, steps }) => toolResult(() => godotRunTestSequence(workspaces, processManager, { workspaceId, processId, steps: steps }, getBridgeClient(workspaceId))));
222
+ registerAppTool(server, "godot_press_action", {
223
+ title: "Press Godot input action",
224
+ description: "Inject a Godot input action press via the runtime bridge. Only targets Auvrynt-tracked game processes.",
225
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, processId: z.string(), action: z.string(), durationMs: z.number().optional() },
226
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
227
+ }, ({ workspaceId, processId, action, durationMs }) => toolResult(() => godotPressAction({ workspaceId, processId, action, durationMs }, getBridgeClient(workspaceId))));
228
+ registerAppTool(server, "godot_release_action", {
229
+ title: "Release Godot input action",
230
+ description: "Inject a Godot input action release via the runtime bridge. Only targets Auvrynt-tracked game processes.",
231
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, processId: z.string(), action: z.string() },
232
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
233
+ }, ({ workspaceId, processId, action }) => toolResult(() => godotReleaseAction({ workspaceId, processId, action }, getBridgeClient(workspaceId))));
234
+ registerAppTool(server, "godot_mouse_click", {
235
+ title: "Simulate Godot mouse click",
236
+ description: "Inject a mouse click event at viewport coordinates via the runtime bridge. Only targets Auvrynt-tracked game processes.",
237
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, processId: z.string(), x: z.number(), y: z.number(), button: z.number().optional() },
238
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
239
+ }, ({ workspaceId, processId, x, y, button }) => toolResult(() => godotMouseClick({ workspaceId, processId, x, y, button }, getBridgeClient(workspaceId))));
240
+ registerAppTool(server, "godot_parse_csharp_exceptions", {
241
+ title: "Parse C# exceptions from runtime logs",
242
+ description: "Parse Godot runtime log lines and extract structured C# exception data including stack frames, inner exceptions, and repeat counts.",
243
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, logLines: z.array(z.string()) },
244
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
245
+ }, ({ logLines }) => toolResult(() => parseCsharpExceptions(logLines)));
246
+ registerAppTool(server, "godot_generate_csharp_script", {
247
+ title: "Generate C# script template",
248
+ description: "Generate a Godot C# script boilerplate for a given class name, base type, and optional namespace.",
249
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, className: z.string(), baseType: z.string().optional(), namespace: z.string().optional() },
250
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
251
+ }, ({ className, baseType, namespace }) => toolResult(() => generateCsharpScript({ className, baseType, namespace })));
252
+ }
@@ -0,0 +1,189 @@
1
+ import * as z from "zod/v4";
2
+ import { registerAppTool } from "../mcp-tool-registrar.js";
3
+ import { MUTATING_ANNOTATIONS, PROCESS_ANNOTATIONS, READ_ONLY_ANNOTATIONS, WORKSPACE_ID_SCHEMA, toolWidgetDescriptorMeta, } from "../tool-registration-shared.js";
4
+ import { inspectGodotGdscriptEnvironment, getGdscriptDiagnostics, inspectGdscript, createGdscript, attachGdscript, detachGdscript, createGdscriptSignal, createGdscriptSignalHandler, getGlobalClasses, addClassName, removeClassName, addGdscriptAutoload, getAutoloadUsage, inspectToolScript, createEditorPlugin, getGdscriptDependencies, findCyclicScriptDependencies, getGdscriptNodeReferences, getGdscriptLifecycleMethods, inspectGdscriptAwaitUsage, analyzeGdscriptTyping, formatGdscript, detectGdscriptTests, runGdscriptTests, reloadGdscript, setBreakpoint as gdscriptSetBreakpoint, removeBreakpoint as gdscriptRemoveBreakpoint, lspFindSymbol as gdscriptLspFindSymbol, lspGetDefinition as gdscriptLspGetDefinition, } from "../../godot-gdscript.js";
5
+ function toolResult(action) {
6
+ return Promise.resolve()
7
+ .then(action)
8
+ .then((result) => ({ content: [{ type: "text", text: JSON.stringify(result, null, 2) }] }))
9
+ .catch((error) => ({
10
+ content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
11
+ isError: true,
12
+ }));
13
+ }
14
+ export function registerGodotGdscriptTools(server, config, workspaces) {
15
+ registerAppTool(server, "godot_gdscript_environment", {
16
+ title: "Godot GDScript environment",
17
+ description: "Inspect the GDScript project configuration, Godot executable, and project warnings.",
18
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string().optional() },
19
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
20
+ }, ({ workspaceId, projectPath }) => toolResult(() => inspectGodotGdscriptEnvironment(workspaces, { workspaceId, projectPath })));
21
+ registerAppTool(server, "godot_get_gdscript_diagnostics", {
22
+ title: "Get GDScript diagnostics",
23
+ description: "Return static-analysis and parser diagnostics for GDScript files.",
24
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), scriptPath: z.string().optional(), includeWarnings: z.boolean().optional() },
25
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
26
+ }, ({ workspaceId, projectPath, scriptPath, includeWarnings }) => toolResult(() => getGdscriptDiagnostics(workspaces, { workspaceId, projectPath, scriptPath, includeWarnings })));
27
+ registerAppTool(server, "godot_inspect_gdscript", {
28
+ title: "Inspect GDScript source",
29
+ description: "Inspect class name, base extends, exported properties, methods, signals, node paths, and preloads.",
30
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
31
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
32
+ }, ({ workspaceId, scriptPath }) => toolResult(() => inspectGdscript(workspaces, { workspaceId, scriptPath })));
33
+ registerAppTool(server, "godot_create_gdscript", {
34
+ title: "Create GDScript",
35
+ description: "Create a new GDScript file using empty, node, resource, or plugin templates.",
36
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, outputPath: z.string(), baseType: z.string(), className: z.string().optional(), toolScript: z.boolean().optional(), template: z.enum(["empty", "node", "resource", "editor_plugin"]).optional() },
37
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
38
+ }, ({ workspaceId, outputPath, baseType, className, toolScript, template }) => toolResult(() => createGdscript(workspaces, { workspaceId, outputPath, baseType, className, toolScript, template })));
39
+ registerAppTool(server, "godot_attach_gdscript", {
40
+ title: "Attach GDScript to node",
41
+ description: "Attach a GDScript script path to a node in the edited scene tree.",
42
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, nodePath: z.string(), scriptPath: z.string() },
43
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
44
+ }, ({ workspaceId, nodePath, scriptPath }) => toolResult(() => attachGdscript(workspaces, { workspaceId, nodePath, scriptPath })));
45
+ registerAppTool(server, "godot_detach_gdscript", {
46
+ title: "Detach GDScript from node",
47
+ description: "Detach script from a node in the edited scene tree.",
48
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, nodePath: z.string() },
49
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
50
+ }, ({ workspaceId, nodePath }) => toolResult(() => detachGdscript(workspaces, { workspaceId, nodePath })));
51
+ registerAppTool(server, "godot_create_gdscript_signal", {
52
+ title: "Create GDScript signal",
53
+ description: "Declare a new signal in a GDScript file.",
54
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), signalName: z.string(), parameters: z.array(z.object({ name: z.string(), type: z.string().optional() })).optional() },
55
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
56
+ }, ({ workspaceId, scriptPath, signalName, parameters }) => toolResult(() => createGdscriptSignal(workspaces, { workspaceId, scriptPath, signalName, parameters })));
57
+ registerAppTool(server, "godot_create_gdscript_signal_handler", {
58
+ title: "Create signal handler stub",
59
+ description: "Create a callback method stub for handling connected signals.",
60
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), methodName: z.string(), parameters: z.array(z.object({ name: z.string(), type: z.string().optional() })).optional() },
61
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
62
+ }, ({ workspaceId, scriptPath, methodName, parameters }) => toolResult(() => createGdscriptSignalHandler(workspaces, { workspaceId, scriptPath, methodName, parameters })));
63
+ registerAppTool(server, "godot_get_global_classes", {
64
+ title: "Get global classes",
65
+ description: "List all global script classes defined with class_name.",
66
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
67
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
68
+ }, ({ workspaceId }) => toolResult(() => getGlobalClasses(workspaces, { workspaceId })));
69
+ registerAppTool(server, "godot_add_class_name", {
70
+ title: "Add class_name to script",
71
+ description: "Declare a new global class_name at the top of a GDScript.",
72
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), className: z.string() },
73
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
74
+ }, ({ workspaceId, scriptPath, className }) => toolResult(() => addClassName(workspaces, { workspaceId, scriptPath, className })));
75
+ registerAppTool(server, "godot_remove_class_name", {
76
+ title: "Remove class_name from script",
77
+ description: "Remove the global class_name declaration from a GDScript.",
78
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
79
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
80
+ }, ({ workspaceId, scriptPath }) => toolResult(() => removeClassName(workspaces, { workspaceId, scriptPath })));
81
+ registerAppTool(server, "godot_add_gdscript_autoload", {
82
+ title: "Add GDScript autoload singleton",
83
+ description: "Register a script as a global autoload singleton in project.godot.",
84
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), singletonName: z.string() },
85
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
86
+ }, ({ workspaceId, scriptPath, singletonName }) => toolResult(() => addGdscriptAutoload(workspaces, { workspaceId, scriptPath, singletonName })));
87
+ registerAppTool(server, "godot_get_autoload_usage", {
88
+ title: "Find autoload references",
89
+ description: "Search for script/code occurrences referencing an autoload singleton name.",
90
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, singletonName: z.string() },
91
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
92
+ }, ({ workspaceId, singletonName }) => toolResult(() => getAutoloadUsage(workspaces, { workspaceId, singletonName })));
93
+ registerAppTool(server, "godot_inspect_tool_script", {
94
+ title: "Inspect @tool script",
95
+ description: "Check if a script is annotated with @tool and list editor methods.",
96
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
97
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
98
+ }, ({ workspaceId, scriptPath }) => toolResult(() => inspectToolScript(workspaces, { workspaceId, scriptPath })));
99
+ registerAppTool(server, "godot_create_editor_plugin", {
100
+ title: "Create editor plugin",
101
+ description: "Scaffold a new editor plugin addon folder with cfg and gd scripts.",
102
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, pluginName: z.string(), description: z.string().optional(), author: z.string().optional(), version: z.string().optional() },
103
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
104
+ }, ({ workspaceId, pluginName, description, author, version }) => toolResult(() => createEditorPlugin(workspaces, { workspaceId, pluginName, description, author, version })));
105
+ registerAppTool(server, "godot_get_gdscript_dependencies", {
106
+ title: "Get GDScript load dependencies",
107
+ description: "List preload/load file dependencies from a script.",
108
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
109
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
110
+ }, ({ workspaceId, scriptPath }) => toolResult(() => getGdscriptDependencies(workspaces, { workspaceId, scriptPath })));
111
+ registerAppTool(server, "godot_find_cyclic_script_dependencies", {
112
+ title: "Find cyclic preload dependencies",
113
+ description: "List cyclic script preload dependencies that might crash the editor or build.",
114
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
115
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
116
+ }, ({ workspaceId }) => toolResult(() => findCyclicScriptDependencies(workspaces, { workspaceId })));
117
+ registerAppTool(server, "godot_get_gdscript_node_references", {
118
+ title: "Get script node path references",
119
+ description: "Scan code for $Node path strings and unique names references.",
120
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
121
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
122
+ }, ({ workspaceId, scriptPath }) => toolResult(() => getGdscriptNodeReferences(workspaces, { workspaceId, scriptPath })));
123
+ registerAppTool(server, "godot_get_gdscript_lifecycle_methods", {
124
+ title: "Get lifecycle methods",
125
+ description: "List lifecycle function overrides (_ready, _process) with helper alerts.",
126
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
127
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
128
+ }, ({ workspaceId, scriptPath }) => toolResult(() => getGdscriptLifecycleMethods(workspaces, { workspaceId, scriptPath })));
129
+ registerAppTool(server, "godot_inspect_gdscript_await_usage", {
130
+ title: "Inspect await statements",
131
+ description: "Scan code for awaits and list timer/callable safety checks.",
132
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
133
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
134
+ }, ({ workspaceId, scriptPath }) => toolResult(() => inspectGdscriptAwaitUsage(workspaces, { workspaceId, scriptPath })));
135
+ registerAppTool(server, "godot_analyze_gdscript_typing", {
136
+ title: "Analyze typing coverage",
137
+ description: "Compute return, variable, and parameter explicit typing coverage percentages.",
138
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string() },
139
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
140
+ }, ({ workspaceId, scriptPath }) => toolResult(() => analyzeGdscriptTyping(workspaces, { workspaceId, scriptPath })));
141
+ registerAppTool(server, "godot_format_gdscript", {
142
+ title: "Format GDScript",
143
+ description: "Run formatting layout fixes using gdformat. Use verifyOnly=true for pass/fail audits.",
144
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string().optional(), verifyOnly: z.boolean().optional() },
145
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
146
+ }, ({ workspaceId, scriptPath, verifyOnly }) => toolResult(() => formatGdscript(workspaces, { workspaceId, scriptPath, verifyOnly })));
147
+ registerAppTool(server, "godot_detect_gdscript_tests", {
148
+ title: "Detect test configuration",
149
+ description: "Inspect folder structure for GUT (Godot Unit Test) framework and script files.",
150
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string() },
151
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
152
+ }, ({ workspaceId, projectPath }) => toolResult(() => detectGdscriptTests(workspaces, { workspaceId, projectPath })));
153
+ registerAppTool(server, "godot_run_gdscript_tests", {
154
+ title: "Run GDScript tests",
155
+ description: "Run unit/integration tests and return passing, failing, and skipped logs.",
156
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, projectPath: z.string(), testPath: z.string().optional(), filter: z.string().optional() },
157
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
158
+ }, ({ workspaceId, projectPath, testPath, filter }) => toolResult(() => runGdscriptTests(workspaces, { workspaceId, projectPath, testPath, filter })));
159
+ registerAppTool(server, "godot_reload_gdscript", {
160
+ title: "Reload scripts in editor",
161
+ description: "Trigger live reload of updated GDScript files inside the active editor bridge.",
162
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string().optional() },
163
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
164
+ }, ({ workspaceId, scriptPath }) => toolResult(() => reloadGdscript(workspaces, { workspaceId, scriptPath })));
165
+ registerAppTool(server, "godot_gdscript_set_breakpoint", {
166
+ title: "Set breakpoint",
167
+ description: "Declare a breakpoint at a script path line.",
168
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), line: z.number() },
169
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
170
+ }, ({ workspaceId, scriptPath, line }) => toolResult(() => gdscriptSetBreakpoint(workspaces, { workspaceId, scriptPath, line })));
171
+ registerAppTool(server, "godot_gdscript_remove_breakpoint", {
172
+ title: "Remove breakpoint",
173
+ description: "Clear a breakpoint from a script line.",
174
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), line: z.number() },
175
+ ...toolWidgetDescriptorMeta(config, "write"), annotations: MUTATING_ANNOTATIONS,
176
+ }, ({ workspaceId, scriptPath, line }) => toolResult(() => gdscriptRemoveBreakpoint(workspaces, { workspaceId, scriptPath, line })));
177
+ registerAppTool(server, "godot_gdscript_lsp_find_symbol", {
178
+ title: "LSP find GDScript symbol",
179
+ description: "Find a symbol definition across all GDScript files via the Godot editor LSP bridge.",
180
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, symbol: z.string() },
181
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
182
+ }, ({ workspaceId, symbol }) => toolResult(() => gdscriptLspFindSymbol(workspaces, { workspaceId, symbol })));
183
+ registerAppTool(server, "godot_gdscript_lsp_get_definition", {
184
+ title: "LSP get GDScript definition",
185
+ description: "Get the definition location of a symbol at a specific line/character in a GDScript file via the Godot editor LSP bridge.",
186
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, scriptPath: z.string(), line: z.number(), character: z.number() },
187
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
188
+ }, ({ workspaceId, scriptPath, line, character }) => toolResult(() => gdscriptLspGetDefinition(workspaces, { workspaceId, scriptPath, line, character })));
189
+ }
@@ -0,0 +1,155 @@
1
+ import * as z from "zod/v4";
2
+ import { getConnectionStatus } from "../../connection-status.js";
3
+ import { globFiles, inspectProject, searchText } from "../../search-discovery.js";
4
+ import { getRequestContext } from "../../request-context.js";
5
+ import { registerAppTool } from "../mcp-tool-registrar.js";
6
+ import { PROCESS_ANNOTATIONS, READ_ONLY_ANNOTATIONS, WORKSPACE_ID_SCHEMA, toolWidgetDescriptorMeta, } from "../tool-registration-shared.js";
7
+ function errorResult(prefix, error) {
8
+ const message = error instanceof Error ? error.message : String(error);
9
+ return { content: [{ type: "text", text: `${prefix}: ${message}` }], isError: true };
10
+ }
11
+ export function registerProcessProjectTools(server, config, workspaces, processManager, logToolCall) {
12
+ registerAppTool(server, "get_connection_status", {
13
+ title: "Connection status",
14
+ description: "Automatically check which local integrations are connected for this workspace: MCP, Blender, Godot, browser support, Chrome MCP availability, and tracked processes.",
15
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
16
+ ...toolWidgetDescriptorMeta(config, "read"), annotations: READ_ONLY_ANNOTATIONS,
17
+ }, async ({ workspaceId }, extra) => {
18
+ try {
19
+ const result = await getConnectionStatus(workspaces, processManager, config, extra.authInfo?.scopes ?? [], workspaceId);
20
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
21
+ }
22
+ catch (error) {
23
+ return errorResult("get_connection_status failed", error);
24
+ }
25
+ });
26
+ registerAppTool(server, "start_process", {
27
+ title: "Start process",
28
+ description: "Start a persistent background process (server, app, game) inside an open workspace. Returns a processId. Use get_process_logs to tail output. Do not use run_shell for long-running processes.",
29
+ inputSchema: {
30
+ workspaceId: WORKSPACE_ID_SCHEMA,
31
+ command: z.string().describe("Shell command to run."),
32
+ workingDirectory: z.string().optional().describe("Working directory relative to workspace root."),
33
+ environment: z.record(z.string(), z.string()).optional().describe("Additional environment variables (secrets will be redacted in responses)."),
34
+ },
35
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
36
+ }, async ({ workspaceId, command, workingDirectory, environment }) => {
37
+ const startedAt = performance.now();
38
+ const ctx = getRequestContext();
39
+ try {
40
+ const result = processManager.startProcess({ workspaceId, ownerClientId: ctx?.ownerClientId, command, workingDirectory, environment });
41
+ logToolCall(config, { tool: "start_process", workspaceId, command, success: true, durationMs: Math.round(performance.now() - startedAt) });
42
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ logToolCall(config, { tool: "start_process", workspaceId, command, success: false, durationMs: Math.round(performance.now() - startedAt), error: message });
47
+ return errorResult("start_process failed", error);
48
+ }
49
+ });
50
+ registerAppTool(server, "get_process_logs", {
51
+ title: "Get process logs",
52
+ description: "Retrieve recent stdout/stderr from a running or exited process started by start_process.",
53
+ inputSchema: {
54
+ workspaceId: WORKSPACE_ID_SCHEMA,
55
+ processId: z.string().describe("Process ID returned by start_process."),
56
+ lines: z.number().int().optional().describe("Number of recent lines to return (default 100, max 500)."),
57
+ stream: z.enum(["stdout", "stderr", "both"]).optional().describe("Which stream to return."),
58
+ },
59
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: READ_ONLY_ANNOTATIONS,
60
+ }, async ({ workspaceId, processId, lines, stream }) => {
61
+ try {
62
+ const result = processManager.getProcessLogs({ workspaceId, processId, lines, stream, ownerClientId: getRequestContext()?.ownerClientId });
63
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
64
+ }
65
+ catch (error) {
66
+ return errorResult("get_process_logs failed", error);
67
+ }
68
+ });
69
+ registerAppTool(server, "list_processes", {
70
+ title: "List processes",
71
+ description: "List all tracked processes for the current workspace.",
72
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA },
73
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: READ_ONLY_ANNOTATIONS,
74
+ }, async ({ workspaceId }) => {
75
+ try {
76
+ const result = processManager.listProcesses({ workspaceId, ownerClientId: getRequestContext()?.ownerClientId });
77
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
78
+ }
79
+ catch (error) {
80
+ return errorResult("list_processes failed", error);
81
+ }
82
+ });
83
+ registerAppTool(server, "stop_process", {
84
+ title: "Stop process",
85
+ description: "Stop a tracked process gracefully. Set force=true to kill the process tree immediately.",
86
+ inputSchema: {
87
+ workspaceId: WORKSPACE_ID_SCHEMA,
88
+ processId: z.string().describe("Process ID returned by start_process."),
89
+ force: z.boolean().optional().describe("If true, forcibly kill the process tree."),
90
+ },
91
+ ...toolWidgetDescriptorMeta(config, "shell"), annotations: PROCESS_ANNOTATIONS,
92
+ }, async ({ workspaceId, processId, force }) => {
93
+ try {
94
+ const result = await processManager.stopProcess({ workspaceId, processId, force, ownerClientId: getRequestContext()?.ownerClientId });
95
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
96
+ }
97
+ catch (error) {
98
+ return errorResult("stop_process failed", error);
99
+ }
100
+ });
101
+ registerAppTool(server, "glob_files", {
102
+ title: "Glob files",
103
+ description: "Find files by glob pattern within the workspace. Respects common ignore directories. Returns workspace-relative paths.",
104
+ inputSchema: {
105
+ workspaceId: WORKSPACE_ID_SCHEMA,
106
+ pattern: z.string().describe("Glob pattern such as *.ts or src/**/*.json."),
107
+ basePath: z.string().optional().describe("Base directory relative to workspace root to search in."),
108
+ maxResults: z.number().int().optional().describe("Maximum results (default 100, max 1000)."),
109
+ },
110
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
111
+ }, async ({ workspaceId, pattern, basePath, maxResults }) => {
112
+ try {
113
+ const result = await globFiles(workspaces, { workspaceId, pattern, basePath, maxResults });
114
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
115
+ }
116
+ catch (error) {
117
+ return errorResult("glob_files failed", error);
118
+ }
119
+ });
120
+ registerAppTool(server, "search_text", {
121
+ title: "Search text",
122
+ description: "Search for text across workspace files. Returns file path, line, column, match snippet, and context lines.",
123
+ inputSchema: {
124
+ workspaceId: WORKSPACE_ID_SCHEMA,
125
+ query: z.string().describe("Text or pattern to search for."),
126
+ paths: z.array(z.string()).optional().describe("Limit search to these workspace-relative paths."),
127
+ filePattern: z.string().optional().describe("Filter by file extension pattern, e.g. *.ts."),
128
+ caseSensitive: z.boolean().optional().describe("Default false."),
129
+ maxResults: z.number().int().optional().describe("Max matches (default 50, max 500)."),
130
+ },
131
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
132
+ }, async ({ workspaceId, query, paths, filePattern, caseSensitive, maxResults }) => {
133
+ try {
134
+ const result = await searchText(workspaces, { workspaceId, query, paths, filePattern, caseSensitive, maxResults });
135
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
136
+ }
137
+ catch (error) {
138
+ return errorResult("search_text failed", error);
139
+ }
140
+ });
141
+ registerAppTool(server, "inspect_project", {
142
+ title: "Inspect project",
143
+ description: "Detect project type, package managers, frameworks, and recommended build/run/test commands. Supports Node.js, TypeScript, .NET, Godot, Python, and Git.",
144
+ inputSchema: { workspaceId: WORKSPACE_ID_SCHEMA, path: z.string().optional().describe("Subdirectory to inspect, relative to workspace root.") },
145
+ ...toolWidgetDescriptorMeta(config, "search"), annotations: READ_ONLY_ANNOTATIONS,
146
+ }, async ({ workspaceId, path }) => {
147
+ try {
148
+ const result = await inspectProject(workspaces, { workspaceId, path });
149
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
150
+ }
151
+ catch (error) {
152
+ return errorResult("inspect_project failed", error);
153
+ }
154
+ });
155
+ }