summer-engine 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.claude-plugin/marketplace.json +27 -7
  2. package/.claude-plugin/plugin.json +99 -83
  3. package/.codex-plugin/plugin.json +112 -82
  4. package/.cursor-plugin/plugin.json +119 -83
  5. package/.factory-plugin/plugin.json +100 -3
  6. package/.mcp.json +6 -1
  7. package/.opencode/INSTALL.md +7 -4
  8. package/.opencode/plugins/summer.js +31 -18
  9. package/AGENTS.md +107 -34
  10. package/CHANGELOG.md +131 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +159 -391
  15. package/assets/api-docs.json.gz +0 -0
  16. package/assets/autopilot/README.md +20 -6
  17. package/assets/autopilot/autopilot.gd +80 -26
  18. package/assets/autopilot/run.sh +132 -7
  19. package/assets/navigation/web-routes.json +719 -0
  20. package/commands/gameskill.md +10 -108
  21. package/commands/summer.md +72 -4
  22. package/dist/bin/summer.js +6 -87
  23. package/dist/cli/banner.d.ts +1 -0
  24. package/dist/cli/banner.js +33 -0
  25. package/dist/{commands → cli/commands}/config.js +1 -1
  26. package/dist/cli/commands/create.d.ts +30 -0
  27. package/dist/cli/commands/create.js +212 -0
  28. package/dist/{commands → cli/commands}/debug.js +2 -2
  29. package/dist/cli/commands/doctor.d.ts +2 -0
  30. package/dist/cli/commands/doctor.js +18 -0
  31. package/dist/cli/commands/events.d.ts +57 -0
  32. package/dist/cli/commands/events.js +158 -0
  33. package/dist/cli/commands/install.d.ts +50 -0
  34. package/dist/cli/commands/install.js +447 -0
  35. package/dist/cli/commands/list.js +72 -0
  36. package/dist/{commands → cli/commands}/login.js +33 -17
  37. package/dist/{commands → cli/commands}/logout.d.ts +1 -0
  38. package/dist/cli/commands/logout.js +19 -0
  39. package/dist/{commands → cli/commands}/memory.d.ts +1 -8
  40. package/dist/{commands → cli/commands}/memory.js +20 -11
  41. package/dist/cli/commands/open.d.ts +45 -0
  42. package/dist/cli/commands/open.js +216 -0
  43. package/dist/{commands → cli/commands}/plan.js +2 -2
  44. package/dist/{commands → cli/commands}/publish.js +1 -1
  45. package/dist/{commands → cli/commands}/releases.js +1 -1
  46. package/dist/cli/commands/run.d.ts +19 -0
  47. package/dist/cli/commands/run.js +255 -0
  48. package/dist/{commands → cli/commands}/setup.js +43 -89
  49. package/dist/{commands → cli/commands}/skills.js +85 -222
  50. package/dist/{commands → cli/commands}/status.d.ts +1 -0
  51. package/dist/cli/commands/status.js +62 -0
  52. package/dist/cli/commands/tool.d.ts +11 -0
  53. package/dist/cli/commands/tool.js +121 -0
  54. package/dist/cli/index.d.ts +6 -0
  55. package/dist/cli/index.js +89 -0
  56. package/dist/cli/root-action.d.ts +7 -0
  57. package/dist/cli/root-action.js +15 -0
  58. package/dist/{lib → core}/api-client.d.ts +106 -15
  59. package/dist/{lib → core}/api-client.js +267 -75
  60. package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
  61. package/dist/{lib → core}/async-op-lifecycle.js +3 -4
  62. package/dist/{lib → core}/auth.d.ts +14 -6
  63. package/dist/{lib → core}/auth.js +56 -40
  64. package/dist/core/capabilities/agent-playbook.d.ts +20 -0
  65. package/dist/core/capabilities/agent-playbook.js +218 -0
  66. package/dist/core/capabilities/api-docs.d.ts +36 -0
  67. package/dist/core/capabilities/api-docs.js +118 -0
  68. package/dist/core/capabilities/asset-import.d.ts +49 -0
  69. package/dist/core/capabilities/asset-import.js +134 -0
  70. package/dist/core/capabilities/camera-view.d.ts +98 -0
  71. package/dist/core/capabilities/camera-view.js +222 -0
  72. package/dist/core/capabilities/capture.d.ts +63 -0
  73. package/dist/core/capabilities/capture.js +67 -0
  74. package/dist/core/capabilities/console-read.d.ts +17 -0
  75. package/dist/core/capabilities/console-read.js +21 -0
  76. package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
  77. package/dist/{lib → core/capabilities}/creator.js +14 -33
  78. package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
  79. package/dist/{lib → core/capabilities}/debug-report.js +12 -31
  80. package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
  81. package/dist/{commands → core/capabilities}/doctor.js +47 -73
  82. package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
  83. package/dist/core/capabilities/engine-fallbacks.js +36 -0
  84. package/dist/core/capabilities/engine-ops.d.ts +33 -0
  85. package/dist/core/capabilities/engine-ops.js +145 -0
  86. package/dist/core/capabilities/engine-receipt.d.ts +53 -0
  87. package/dist/core/capabilities/engine-receipt.js +134 -0
  88. package/dist/core/capabilities/events.d.ts +200 -0
  89. package/dist/core/capabilities/events.js +383 -0
  90. package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
  91. package/dist/core/capabilities/fabricate-mesh.js +165 -0
  92. package/dist/core/capabilities/frame-quality.d.ts +71 -0
  93. package/dist/core/capabilities/frame-quality.js +449 -0
  94. package/dist/core/capabilities/game-task-plan.d.ts +66 -0
  95. package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
  96. package/dist/core/capabilities/hdri-import.d.ts +90 -0
  97. package/dist/core/capabilities/hdri-import.js +250 -0
  98. package/dist/core/capabilities/image-generation.d.ts +24 -0
  99. package/dist/core/capabilities/image-generation.js +22 -0
  100. package/dist/core/capabilities/navigation/open.d.ts +156 -0
  101. package/dist/core/capabilities/navigation/open.js +567 -0
  102. package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
  103. package/dist/core/capabilities/navigation/render-product-map.js +84 -0
  104. package/dist/core/capabilities/navigation/targets.d.ts +87 -0
  105. package/dist/core/capabilities/navigation/targets.js +250 -0
  106. package/dist/core/capabilities/play-determinism.d.ts +35 -0
  107. package/dist/core/capabilities/play-determinism.js +86 -0
  108. package/dist/core/capabilities/project-context.d.ts +114 -0
  109. package/dist/core/capabilities/project-context.js +249 -0
  110. package/dist/core/capabilities/runtime-control.d.ts +540 -0
  111. package/dist/core/capabilities/runtime-control.js +1011 -0
  112. package/dist/core/capabilities/scene-kind.d.ts +19 -0
  113. package/dist/core/capabilities/scene-kind.js +137 -0
  114. package/dist/core/capabilities/scene-script.d.ts +38 -0
  115. package/dist/core/capabilities/scene-script.js +45 -0
  116. package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
  117. package/dist/core/capabilities/tool-dispatch.js +1490 -0
  118. package/dist/core/capabilities/ui-control.d.ts +179 -0
  119. package/dist/core/capabilities/ui-control.js +423 -0
  120. package/dist/core/capabilities/variant-types.d.ts +22 -0
  121. package/dist/core/capabilities/variant-types.js +101 -0
  122. package/dist/core/capability-skew.d.ts +205 -0
  123. package/dist/core/capability-skew.js +386 -0
  124. package/dist/{lib → core}/config.d.ts +11 -1
  125. package/dist/{lib → core}/config.js +13 -2
  126. package/dist/core/embeddings.d.ts +78 -0
  127. package/dist/core/embeddings.js +166 -0
  128. package/dist/core/engine-install.d.ts +105 -0
  129. package/dist/core/engine-install.js +190 -0
  130. package/dist/core/engine.d.ts +94 -0
  131. package/dist/{lib → core}/engine.js +74 -28
  132. package/dist/core/feedback/client.d.ts +88 -0
  133. package/dist/core/feedback/client.js +182 -0
  134. package/dist/{lib → core}/format.d.ts +0 -1
  135. package/dist/{lib → core}/format.js +1 -1
  136. package/dist/core/headless/connection.d.ts +86 -0
  137. package/dist/core/headless/connection.js +97 -0
  138. package/dist/core/headless/editor-connection.d.ts +26 -0
  139. package/dist/core/headless/editor-connection.js +81 -0
  140. package/dist/core/headless/mcp-routing.d.ts +38 -0
  141. package/dist/core/headless/mcp-routing.js +83 -0
  142. package/dist/core/headless/registry.d.ts +91 -0
  143. package/dist/core/headless/registry.js +226 -0
  144. package/dist/core/headless/resolve.d.ts +46 -0
  145. package/dist/core/headless/resolve.js +75 -0
  146. package/dist/core/headless/spawn.d.ts +46 -0
  147. package/dist/core/headless/spawn.js +205 -0
  148. package/dist/core/headless/worker-connection.d.ts +96 -0
  149. package/dist/core/headless/worker-connection.js +353 -0
  150. package/dist/core/headless/worker-engine-client.d.ts +58 -0
  151. package/dist/core/headless/worker-engine-client.js +246 -0
  152. package/dist/core/launch-posture.d.ts +170 -0
  153. package/dist/core/launch-posture.js +317 -0
  154. package/dist/core/library-read.d.ts +73 -0
  155. package/dist/core/library-read.js +279 -0
  156. package/dist/core/library-search.d.ts +143 -0
  157. package/dist/core/library-search.js +301 -0
  158. package/dist/{lib → core}/log-filters.js +4 -2
  159. package/dist/{lib → core}/mcp-log.js +2 -17
  160. package/dist/core/package-root.d.ts +9 -0
  161. package/dist/core/package-root.js +11 -0
  162. package/dist/core/redact.d.ts +20 -0
  163. package/dist/core/redact.js +64 -0
  164. package/dist/core/registry-search.d.ts +167 -0
  165. package/dist/core/registry-search.js +358 -0
  166. package/dist/core/skills-registry.d.ts +47 -0
  167. package/dist/core/skills-registry.js +83 -0
  168. package/dist/{lib → core}/store.js +11 -7
  169. package/dist/{lib → core}/summer-compatibility.js +3 -3
  170. package/dist/{lib → core}/telemetry.js +5 -2
  171. package/dist/core/templates.d.ts +98 -0
  172. package/dist/core/templates.js +241 -0
  173. package/dist/core/tool-errors.d.ts +30 -0
  174. package/dist/core/tool-errors.js +40 -0
  175. package/dist/core/trajectory.d.ts +80 -0
  176. package/dist/core/trajectory.js +307 -0
  177. package/dist/core/util/http.d.ts +13 -0
  178. package/dist/core/util/http.js +28 -0
  179. package/dist/core/util/json.d.ts +12 -0
  180. package/dist/core/util/json.js +21 -0
  181. package/dist/core/util/process.d.ts +3 -0
  182. package/dist/core/util/process.js +13 -0
  183. package/dist/core/util/sleep.d.ts +1 -0
  184. package/dist/core/util/sleep.js +3 -0
  185. package/dist/core/version.d.ts +3 -0
  186. package/dist/core/version.js +5 -0
  187. package/dist/{lib → installer}/agent-config.d.ts +20 -1
  188. package/dist/{lib → installer}/agent-config.js +138 -24
  189. package/dist/installer/legacy-skills.d.ts +26 -0
  190. package/dist/installer/legacy-skills.js +53 -0
  191. package/dist/installer/setup.d.ts +76 -0
  192. package/dist/installer/setup.js +146 -0
  193. package/dist/installer/skill-locations.d.ts +45 -0
  194. package/dist/installer/skill-locations.js +170 -0
  195. package/dist/installer/version-check.d.ts +174 -0
  196. package/dist/{lib → installer}/version-check.js +173 -42
  197. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  198. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  199. package/dist/mcp/server.d.ts +23 -3
  200. package/dist/mcp/server.js +122 -28
  201. package/dist/mcp/tools/asset-tools.js +62 -142
  202. package/dist/mcp/tools/creator-tools.js +5 -23
  203. package/dist/mcp/tools/debug-tools.js +61 -18
  204. package/dist/mcp/tools/event-tools.d.ts +14 -0
  205. package/dist/mcp/tools/event-tools.js +41 -0
  206. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  207. package/dist/mcp/tools/fabricate-tools.js +28 -0
  208. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  209. package/dist/mcp/tools/feedback-tools.js +88 -0
  210. package/dist/mcp/tools/file-tools.js +6 -53
  211. package/dist/mcp/tools/generate-tools.js +37 -63
  212. package/dist/mcp/tools/library-tools.d.ts +11 -0
  213. package/dist/mcp/tools/library-tools.js +42 -0
  214. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  215. package/dist/mcp/tools/navigation-tools.js +37 -0
  216. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  217. package/dist/mcp/tools/perception-tools.js +146 -0
  218. package/dist/mcp/tools/project-tools.d.ts +14 -0
  219. package/dist/mcp/tools/project-tools.js +72 -281
  220. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  221. package/dist/mcp/tools/runtime-tools.js +92 -0
  222. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  223. package/dist/mcp/tools/scene-tools.js +68 -119
  224. package/dist/mcp/tools/script-tools.d.ts +3 -0
  225. package/dist/mcp/tools/script-tools.js +118 -0
  226. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  227. package/dist/mcp/tools/spatial-tools.js +485 -0
  228. package/dist/mcp/tools/text-json.d.ts +8 -0
  229. package/dist/mcp/tools/text-json.js +12 -0
  230. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  231. package/dist/mcp/tools/ui-tools.js +82 -0
  232. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  233. package/dist/mcp/tools/visual-tools.js +383 -101
  234. package/dist/mcp/tools/with-engine.d.ts +9 -15
  235. package/dist/mcp/tools/with-engine.js +60 -96
  236. package/dist/project-memory/project-manifest.d.ts +36 -0
  237. package/dist/project-memory/project-manifest.js +50 -0
  238. package/dist/project-memory/project-memory.d.ts +57 -0
  239. package/dist/{lib → project-memory}/project-memory.js +46 -0
  240. package/gemini-extension.json +103 -2
  241. package/hooks/hooks-cursor.json +2 -2
  242. package/hooks/hooks.json +2 -1
  243. package/hooks/pre-commit-doctor.sh +45 -39
  244. package/hooks/run-hook.cmd +30 -23
  245. package/hooks/run-hook.sh +20 -0
  246. package/hooks/session-start.sh +18 -7
  247. package/integrations/README.md +70 -0
  248. package/integrations/claude/README.md +19 -0
  249. package/integrations/claude/manifest-target.json +16 -0
  250. package/integrations/cline/README.md +13 -0
  251. package/integrations/cline/manifest-target.json +3 -0
  252. package/integrations/codex/README.md +15 -0
  253. package/integrations/codex/manifest-target.json +5 -0
  254. package/integrations/cursor/README.md +16 -0
  255. package/integrations/cursor/manifest-target.json +5 -0
  256. package/integrations/factory/README.md +26 -0
  257. package/integrations/factory/manifest-target.json +5 -0
  258. package/integrations/gemini/README.md +26 -0
  259. package/integrations/gemini/manifest-target.json +5 -0
  260. package/integrations/github-copilot/README.md +12 -0
  261. package/integrations/github-copilot/manifest-target.json +3 -0
  262. package/integrations/kilo-code/README.md +16 -0
  263. package/integrations/kilo-code/manifest-target.json +3 -0
  264. package/integrations/lm-studio/README.md +12 -0
  265. package/integrations/lm-studio/manifest-target.json +3 -0
  266. package/integrations/opencode/README.md +15 -0
  267. package/integrations/opencode/manifest-target.json +3 -0
  268. package/integrations/roo-code/README.md +13 -0
  269. package/integrations/roo-code/manifest-target.json +3 -0
  270. package/integrations/vscode-copilot/README.md +12 -0
  271. package/integrations/vscode-copilot/manifest-target.json +3 -0
  272. package/integrations/windsurf/README.md +13 -0
  273. package/integrations/windsurf/manifest-target.json +3 -0
  274. package/library/references/collaborative-protocol/resource.yaml +24 -0
  275. package/library/references/gd-style/resource.yaml +24 -0
  276. package/{references → library/references/godot-version}/godot-version.md +6 -6
  277. package/library/references/godot-version/resource.yaml +22 -0
  278. package/library/references/headless-routing/headless-routing.md +46 -0
  279. package/library/references/headless-routing/resource.yaml +24 -0
  280. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  281. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  282. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  283. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  284. package/library/references/product-map/product-map.md +103 -0
  285. package/library/references/product-map/resource.yaml +33 -0
  286. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  287. package/library/references/public-surface-language/resource.yaml +17 -0
  288. package/library/references/summer-folder/resource.yaml +20 -0
  289. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  290. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  291. package/library/skills/3d-lighting/resource.yaml +27 -0
  292. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  293. package/library/skills/adaptive-music/resource.yaml +28 -0
  294. package/library/skills/agent-playtesting/SKILL.md +148 -0
  295. package/library/skills/agent-playtesting/resource.yaml +52 -0
  296. package/library/skills/ambient-bed/resource.yaml +24 -0
  297. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  298. package/library/skills/animated-loop/resource.yaml +27 -0
  299. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  300. package/library/skills/animation-tree/resource.yaml +33 -0
  301. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  302. package/library/skills/art-direction/resource.yaml +29 -0
  303. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  304. package/library/skills/asset-strategy/resource.yaml +63 -0
  305. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  306. package/library/skills/audio-direction/resource.yaml +32 -0
  307. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  308. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  309. package/library/skills/brainstorm-game/resource.yaml +30 -0
  310. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  311. package/library/skills/brainstorming/resource.yaml +23 -0
  312. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  313. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  314. package/library/skills/browse-templates/resource.yaml +23 -0
  315. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  316. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  317. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  318. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  319. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  320. package/library/skills/character-model/resource.yaml +36 -0
  321. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  322. package/library/skills/character-portrait/resource.yaml +30 -0
  323. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  324. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  325. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  326. package/library/skills/concept-art/resource.yaml +34 -0
  327. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  328. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  329. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  330. package/library/skills/debug/resource.yaml +31 -0
  331. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  332. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  333. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  334. package/library/skills/design-level/resource.yaml +31 -0
  335. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  336. package/library/skills/design-mechanic/resource.yaml +31 -0
  337. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  338. package/library/skills/design-npc/resource.yaml +29 -0
  339. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  340. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  341. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  342. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  343. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  344. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  345. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  346. package/library/skills/environment-kit/resource.yaml +29 -0
  347. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  348. package/library/skills/export-and-ship/resource.yaml +32 -0
  349. package/library/skills/fabricating-assets/SKILL.md +195 -0
  350. package/library/skills/fabricating-assets/resource.yaml +52 -0
  351. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  352. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  353. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  354. package/library/skills/fps-controller/resource.yaml +29 -0
  355. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  356. package/library/skills/game-feel/resource.yaml +27 -0
  357. package/library/skills/gameskill/SKILL.md +64 -0
  358. package/library/skills/gameskill/resource.yaml +22 -0
  359. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  360. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  361. package/library/skills/generate-motion/resource.yaml +34 -0
  362. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  363. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  364. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  365. package/library/skills/headless-scripting/resource.yaml +26 -0
  366. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  367. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  368. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  369. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  370. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  371. package/library/skills/investigating-bugs/resource.yaml +24 -0
  372. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  373. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  374. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  375. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  376. package/library/skills/make-game/resource.yaml +35 -0
  377. package/library/skills/music-track/resource.yaml +28 -0
  378. package/library/skills/navigate-summer/SKILL.md +61 -0
  379. package/library/skills/navigate-summer/resource.yaml +35 -0
  380. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  381. package/library/skills/new-project/resource.yaml +28 -0
  382. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  383. package/library/skills/organic-model/resource.yaml +32 -0
  384. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  385. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  386. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  387. package/library/skills/pixel-art/resource.yaml +31 -0
  388. package/library/skills/play/resource.yaml +26 -0
  389. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  390. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  391. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  392. package/library/skills/procedural-animation/resource.yaml +33 -0
  393. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  394. package/library/skills/prop-model/resource.yaml +33 -0
  395. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  396. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  397. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  398. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  399. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  400. package/library/skills/remote-deploy/resource.yaml +23 -0
  401. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  402. package/library/skills/retarget/resource.yaml +33 -0
  403. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  404. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  405. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  406. package/library/skills/scene-composition/resource.yaml +27 -0
  407. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  408. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  409. package/library/skills/scene-scripting/SKILL.md +764 -0
  410. package/library/skills/scene-scripting/resource.yaml +58 -0
  411. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  412. package/library/skills/scene-to-level/resource.yaml +33 -0
  413. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  414. package/library/skills/skill-create/SKILL.md +138 -0
  415. package/library/skills/skill-create/resource.yaml +25 -0
  416. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  417. package/library/skills/skill-improve/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  419. package/library/skills/skill-test/resource.yaml +26 -0
  420. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  421. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  422. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  423. package/library/skills/skybox-panorama/resource.yaml +28 -0
  424. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  425. package/library/skills/sound-effect/resource.yaml +27 -0
  426. package/library/skills/spatial-placement/SKILL.md +74 -0
  427. package/library/skills/spatial-placement/resource.yaml +42 -0
  428. package/library/skills/spatial-placement/tests/spec.md +65 -0
  429. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  430. package/library/skills/sprite-sheet/resource.yaml +32 -0
  431. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  432. package/library/skills/tileable-texture/resource.yaml +31 -0
  433. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  434. package/library/skills/trailer-shot/resource.yaml +27 -0
  435. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  436. package/library/skills/tune-performance/resource.yaml +31 -0
  437. package/library/skills/ui-basics/resource.yaml +25 -0
  438. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  439. package/library/skills/ui-graphics/resource.yaml +29 -0
  440. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  441. package/library/skills/use-widget-asset/resource.yaml +29 -0
  442. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  443. package/library/skills/using-summer/resource.yaml +41 -0
  444. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  445. package/library/skills/vehicle-model/resource.yaml +34 -0
  446. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  447. package/library/skills/verification-before-completion/resource.yaml +23 -0
  448. package/library/skills/verifying-scenes/SKILL.md +98 -0
  449. package/library/skills/verifying-scenes/resource.yaml +42 -0
  450. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  451. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  452. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  453. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  454. package/library/skills/vfx-fire/resource.yaml +35 -0
  455. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  456. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  457. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  458. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  459. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-lightning/resource.yaml +33 -0
  461. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  462. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  464. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  465. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  467. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  468. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  469. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  470. package/library/skills/vfx-smoke/resource.yaml +32 -0
  471. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  472. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  473. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  474. package/library/skills/voice-line/resource.yaml +27 -0
  475. package/library/skills/world-building-3d/SKILL.md +105 -0
  476. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  477. package/library/skills/world-building-3d/resource.yaml +44 -0
  478. package/library/skills/world-building-3d/tests/spec.md +48 -0
  479. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  480. package/library/skills/writing-plans/resource.yaml +23 -0
  481. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  482. package/library/skills/writing-skills/resource.yaml +29 -0
  483. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  484. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  485. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  486. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  487. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  488. package/library/templates/2d-platformer/resource.yaml +24 -0
  489. package/library/templates/2d-rpg/resource.yaml +21 -0
  490. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  491. package/library/templates/3d-basic/resource.yaml +16 -0
  492. package/library/templates/3d-city-kit/resource.yaml +24 -0
  493. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  494. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  495. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  496. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  497. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  498. package/library/templates/3d-racing-game/resource.yaml +21 -0
  499. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  500. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  501. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  502. package/library/templates/README.md +94 -0
  503. package/library/templates/empty/resource.yaml +16 -0
  504. package/library/tools/add-node/resource.yaml +60 -0
  505. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  506. package/library/tools/api-docs/resource.yaml +57 -0
  507. package/library/tools/batch/resource.yaml +52 -0
  508. package/library/tools/camera-bookmark/resource.yaml +73 -0
  509. package/library/tools/check-job/resource.yaml +45 -0
  510. package/library/tools/clear-console/resource.yaml +40 -0
  511. package/library/tools/connect-signal/resource.yaml +63 -0
  512. package/library/tools/create-debug-report/resource.yaml +67 -0
  513. package/library/tools/create-scene/resource.yaml +59 -0
  514. package/library/tools/creator-config/resource.yaml +63 -0
  515. package/library/tools/creator-publish/resource.yaml +73 -0
  516. package/library/tools/creator-releases/resource.yaml +53 -0
  517. package/library/tools/fabricate-3d/resource.yaml +108 -0
  518. package/library/tools/game-control/resource.yaml +84 -0
  519. package/library/tools/game-input/resource.yaml +159 -0
  520. package/library/tools/game-probe/resource.yaml +90 -0
  521. package/library/tools/generate-3d/resource.yaml +112 -0
  522. package/library/tools/generate-audio/resource.yaml +80 -0
  523. package/library/tools/generate-image/resource.yaml +62 -0
  524. package/library/tools/generate-motion/resource.yaml +66 -0
  525. package/library/tools/generate-video/resource.yaml +66 -0
  526. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  527. package/library/tools/get-asset/resource.yaml +42 -0
  528. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  529. package/library/tools/get-console/resource.yaml +69 -0
  530. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  531. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  532. package/library/tools/get-diagnostics/resource.yaml +42 -0
  533. package/library/tools/get-project-context/resource.yaml +45 -0
  534. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  535. package/library/tools/get-scene-tree/resource.yaml +52 -0
  536. package/library/tools/get-script-errors/resource.yaml +45 -0
  537. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  538. package/library/tools/import-asset/resource.yaml +73 -0
  539. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  540. package/library/tools/import-from-url/resource.yaml +51 -0
  541. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  542. package/library/tools/import-hdri/resource.yaml +69 -0
  543. package/library/tools/input-map-bind/resource.yaml +52 -0
  544. package/library/tools/inspect-node/resource.yaml +46 -0
  545. package/library/tools/inspect-resource/resource.yaml +45 -0
  546. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  547. package/library/tools/instantiate-scene/resource.yaml +62 -0
  548. package/library/tools/is-running/resource.yaml +40 -0
  549. package/library/tools/library-feedback/resource.yaml +89 -0
  550. package/library/tools/list-my-assets/resource.yaml +56 -0
  551. package/library/tools/navigation-probe/resource.yaml +85 -0
  552. package/library/tools/open/resource.yaml +80 -0
  553. package/library/tools/open-main-scene/resource.yaml +40 -0
  554. package/library/tools/open-scene/resource.yaml +46 -0
  555. package/library/tools/play/resource.yaml +91 -0
  556. package/library/tools/project-setting/resource.yaml +53 -0
  557. package/library/tools/read-file/resource.yaml +47 -0
  558. package/library/tools/read-library/resource.yaml +67 -0
  559. package/library/tools/recent-events/resource.yaml +71 -0
  560. package/library/tools/remove-node/resource.yaml +51 -0
  561. package/library/tools/replace-node/resource.yaml +57 -0
  562. package/library/tools/replace-text/resource.yaml +61 -0
  563. package/library/tools/run-editor-script/resource.yaml +61 -0
  564. package/library/tools/run-script/resource.yaml +73 -0
  565. package/library/tools/runtime-animate/resource.yaml +140 -0
  566. package/library/tools/runtime-call/resource.yaml +74 -0
  567. package/library/tools/runtime-set/resource.yaml +80 -0
  568. package/library/tools/runtime-spawn/resource.yaml +95 -0
  569. package/library/tools/save-scene/resource.yaml +50 -0
  570. package/library/tools/screenshot/resource.yaml +112 -0
  571. package/library/tools/search-assets/resource.yaml +67 -0
  572. package/library/tools/search-library/resource.yaml +81 -0
  573. package/library/tools/select-node/resource.yaml +48 -0
  574. package/library/tools/set-prop/resource.yaml +64 -0
  575. package/library/tools/set-resource-property/resource.yaml +66 -0
  576. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  577. package/library/tools/snap-to-surface/resource.yaml +90 -0
  578. package/library/tools/snapshot-diff/resource.yaml +58 -0
  579. package/library/tools/starcast/resource.yaml +120 -0
  580. package/library/tools/start-game-task/resource.yaml +91 -0
  581. package/library/tools/stop/resource.yaml +51 -0
  582. package/library/tools/test-placement/resource.yaml +109 -0
  583. package/library/tools/ui-actions/resource.yaml +77 -0
  584. package/library/tools/ui-activate/resource.yaml +88 -0
  585. package/library/tools/ui-screenshot/resource.yaml +63 -0
  586. package/library/tools/ui-tree/resource.yaml +69 -0
  587. package/library/tools/wait-for-event/resource.yaml +84 -0
  588. package/library/tools/world-snapshot/resource.yaml +60 -0
  589. package/library/tools/write-file/resource.yaml +54 -0
  590. package/package.json +22 -16
  591. package/registry/generated/aliases.json +207 -0
  592. package/registry/generated/counts.json +12 -0
  593. package/registry/generated/gemini-extension.json +122 -0
  594. package/registry/generated/index.json +7709 -0
  595. package/registry/generated/marketplace.claude.json +44 -0
  596. package/registry/generated/mcp.json +13 -0
  597. package/registry/generated/plugin.claude.json +135 -0
  598. package/registry/generated/plugin.codex.json +144 -0
  599. package/registry/generated/plugin.cursor.json +134 -0
  600. package/registry/generated/plugin.factory.json +117 -0
  601. package/registry/generated/skills-registry.json +851 -0
  602. package/registry/generated/templates-registry.json +455 -0
  603. package/registry/schemas/allowed-hosts.json +19 -0
  604. package/registry/schemas/collection.schema.json +68 -0
  605. package/registry/schemas/domains.json +96 -0
  606. package/registry/schemas/example.schema.json +11 -0
  607. package/registry/schemas/reference.schema.json +10 -0
  608. package/registry/schemas/resource.schema.json +154 -0
  609. package/registry/schemas/skill.schema.json +14 -0
  610. package/registry/schemas/template.schema.json +46 -0
  611. package/registry/schemas/tool.schema.json +61 -0
  612. package/_persona/summer/SKILL.md +0 -113
  613. package/dist/bin/postinstall.d.ts +0 -2
  614. package/dist/bin/postinstall.js +0 -3
  615. package/dist/commands/cloud.d.ts +0 -2
  616. package/dist/commands/cloud.js +0 -80
  617. package/dist/commands/create.d.ts +0 -3
  618. package/dist/commands/create.js +0 -171
  619. package/dist/commands/install.d.ts +0 -19
  620. package/dist/commands/install.js +0 -194
  621. package/dist/commands/list.js +0 -67
  622. package/dist/commands/logout.js +0 -13
  623. package/dist/commands/logs.d.ts +0 -2
  624. package/dist/commands/logs.js +0 -19
  625. package/dist/commands/open.d.ts +0 -2
  626. package/dist/commands/open.js +0 -32
  627. package/dist/commands/orchestrator.d.ts +0 -8
  628. package/dist/commands/orchestrator.js +0 -143
  629. package/dist/commands/run.d.ts +0 -2
  630. package/dist/commands/run.js +0 -167
  631. package/dist/commands/status.js +0 -46
  632. package/dist/lib/banner.d.ts +0 -4
  633. package/dist/lib/banner.js +0 -122
  634. package/dist/lib/cloud/api.d.ts +0 -79
  635. package/dist/lib/cloud/api.js +0 -107
  636. package/dist/lib/cloud/apply.d.ts +0 -32
  637. package/dist/lib/cloud/apply.js +0 -294
  638. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  639. package/dist/lib/cloud/checkpoint.js +0 -142
  640. package/dist/lib/cloud/conflicts.d.ts +0 -55
  641. package/dist/lib/cloud/conflicts.js +0 -131
  642. package/dist/lib/cloud/containment.d.ts +0 -8
  643. package/dist/lib/cloud/containment.js +0 -52
  644. package/dist/lib/cloud/diff.d.ts +0 -39
  645. package/dist/lib/cloud/diff.js +0 -138
  646. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  647. package/dist/lib/cloud/engine-bridge.js +0 -139
  648. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  649. package/dist/lib/cloud/hash-cache.js +0 -44
  650. package/dist/lib/cloud/hash.d.ts +0 -10
  651. package/dist/lib/cloud/hash.js +0 -111
  652. package/dist/lib/cloud/http.d.ts +0 -17
  653. package/dist/lib/cloud/http.js +0 -47
  654. package/dist/lib/cloud/lock-path.d.ts +0 -1
  655. package/dist/lib/cloud/lock-path.js +0 -5
  656. package/dist/lib/cloud/lock.d.ts +0 -14
  657. package/dist/lib/cloud/lock.js +0 -143
  658. package/dist/lib/cloud/manifest.d.ts +0 -6
  659. package/dist/lib/cloud/manifest.js +0 -41
  660. package/dist/lib/cloud/paths.d.ts +0 -20
  661. package/dist/lib/cloud/paths.js +0 -90
  662. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  663. package/dist/lib/cloud/project-godot-merge.js +0 -185
  664. package/dist/lib/cloud/rules.d.ts +0 -39
  665. package/dist/lib/cloud/rules.js +0 -159
  666. package/dist/lib/cloud/sync.d.ts +0 -21
  667. package/dist/lib/cloud/sync.js +0 -518
  668. package/dist/lib/cloud/transfer.d.ts +0 -23
  669. package/dist/lib/cloud/transfer.js +0 -184
  670. package/dist/lib/cloud/types.d.ts +0 -62
  671. package/dist/lib/cloud/types.js +0 -1
  672. package/dist/lib/cloud/validate-path.d.ts +0 -23
  673. package/dist/lib/cloud/validate-path.js +0 -103
  674. package/dist/lib/engine.d.ts +0 -51
  675. package/dist/lib/game-task-plan.d.ts +0 -42
  676. package/dist/lib/project-memory.d.ts +0 -33
  677. package/dist/lib/public-surface-paths.d.ts +0 -13
  678. package/dist/lib/public-surface-paths.js +0 -42
  679. package/dist/lib/remote-templates.d.ts +0 -25
  680. package/dist/lib/remote-templates.js +0 -86
  681. package/dist/lib/skills-registry.d.ts +0 -572
  682. package/dist/lib/skills-registry.js +0 -1061
  683. package/dist/lib/version-check.d.ts +0 -106
  684. package/dist/mcp/tools/cloud-tools.js +0 -42
  685. package/references/mcp-tools-reference.md +0 -199
  686. package/references/template-registry.md +0 -73
  687. package/skills/README.md +0 -103
  688. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  689. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  690. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  691. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  692. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  693. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  694. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  695. package/skills/workflow/gameskill/SKILL.md +0 -120
  696. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  697. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  698. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  699. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  700. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  701. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  702. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  703. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  704. package/skills/workflow/skill-create/SKILL.md +0 -153
  705. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  706. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  707. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  708. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  709. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  710. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  711. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  712. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  713. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  719. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  720. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  721. /package/dist/{lib → core}/store.d.ts +0 -0
  722. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  723. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  724. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  725. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  726. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  727. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  728. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  729. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  730. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  731. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  732. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  733. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  734. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  735. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  736. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  737. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  738. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  739. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  740. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  741. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  742. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -1,102 +1,12 @@
1
1
  import { z } from "zod";
2
- import { withEngine, extractOpError } from "./with-engine.js";
3
- // Engine ops that MUST be dispatched as their own single-op request. Mirrors
4
- // _summer_requires_single_async_dispatch (local_api_server.cpp, engine 0.5.60+):
5
- // the engine rejects any multi-op batch containing one of these WHOLESALE —
6
- // nothing in the batch executes, and the batch fails with per-op
7
- // failure_reason "unsupported_transport"/"skipped". Git ops are covered by the
8
- // prefix check below.
9
- const SINGLE_ONLY_OPS = new Set([
10
- "SaveScene", "InstantiateScene", "ReplaceNode",
11
- "SimulateInput", "ViewportSnapshot", "GameSnapshot",
12
- "RunCommand", "RunVerification", "RunEditorScript",
13
- "ImportFromUrl", "ImportFromUrlBatch", "ExtractZipFromUrl",
14
- ]);
15
- function isSingleOnlyOp(kind) {
16
- return SINGLE_ONLY_OPS.has(kind) || kind.startsWith("Git");
17
- }
18
- function sceneMutationOps(ops) {
19
- const saveIndexes = ops
20
- .map((op, index) => op.op === "SaveScene" ? index : -1)
21
- .filter((index) => index >= 0);
22
- if (saveIndexes.length > 1) {
23
- throw new Error("A scene mutation batch may contain only one SaveScene");
24
- }
25
- if (saveIndexes.length === 1) {
26
- if (saveIndexes[0] !== ops.length - 1) {
27
- throw new Error("SaveScene must be the final operation in a scene mutation batch");
28
- }
29
- return ops;
30
- }
31
- return [...ops, { op: "SaveScene" }];
32
- }
33
- /** Split an op list into sequential engine requests: consecutive batchable ops
34
- * stay grouped, each single-only op becomes its own request. Order preserved. */
35
- function chunkOpsForDispatch(ops) {
36
- const chunks = [];
37
- let current = [];
38
- for (const op of ops) {
39
- if (isSingleOnlyOp(String(op.op ?? ""))) {
40
- if (current.length > 0) {
41
- chunks.push(current);
42
- current = [];
43
- }
44
- chunks.push([op]);
45
- }
46
- else {
47
- current.push(op);
48
- }
49
- }
50
- if (current.length > 0)
51
- chunks.push(current);
52
- return chunks;
53
- }
54
- /** Execute an op list as sequential engine requests honoring the single-op
55
- * dispatch contract. Receipts from every request are preserved and merged, so
56
- * an op that applied followed by one that failed is reported honestly instead
57
- * of masked. */
58
- async function executeOpsChunked(send, ops) {
59
- const chunks = chunkOpsForDispatch(ops);
60
- if (chunks.length === 1)
61
- return send(chunks[0]);
62
- const receipts = [];
63
- const combinedResults = [];
64
- for (let i = 0; i < chunks.length; i++) {
65
- const receipt = await send(chunks[i]);
66
- receipts.push(receipt);
67
- const envelope = (receipt ?? {});
68
- if (Array.isArray(envelope.results)) {
69
- combinedResults.push(...envelope.results);
70
- }
71
- if (extractOpError(receipt)) {
72
- const failedKind = String(chunks[i][0]?.op ?? "batch");
73
- const appliedOps = chunks.slice(0, i).flat().map((op) => String(op.op ?? ""));
74
- const notSent = chunks.slice(i + 1).flat().map((op) => String(op.op ?? ""));
75
- const baseError = (typeof envelope.error === "string" && envelope.error) || `Engine request failed (${failedKind}).`;
76
- const honestError = appliedOps.length > 0
77
- ? `${baseError} NOTE: ${appliedOps.length} earlier op(s) already applied (${appliedOps.join(", ")})` +
78
- (failedKind === "SaveScene"
79
- ? " — the scene is modified in the editor but NOT saved to disk. Fix the problem, then call summer_save_scene."
80
- : ".") +
81
- (notSent.length > 0 ? ` Not sent: ${notSent.join(", ")}.` : "")
82
- : baseError;
83
- return {
84
- ...envelope,
85
- error: honestError,
86
- results: combinedResults,
87
- receipts,
88
- };
89
- }
90
- }
91
- const last = (receipts[receipts.length - 1] ?? {});
92
- return { ...last, results: combinedResults, requests: chunks.length, receipts };
93
- }
94
- /** Scene mutation entry point: appends the transaction-boundary SaveScene, then
95
- * dispatches with the single-op contract (mutations batch together, SaveScene
96
- * and other single-only ops travel alone). */
97
- function executeSceneMutation(client, scenePath, ops, options) {
98
- return executeOpsChunked((chunk) => client.executeIdentityBoundOps(chunk, { ...(options ?? {}), scenePath }), sceneMutationOps(ops));
99
- }
2
+ import { withEngine, ToolInputError } from "./with-engine.js";
3
+ import { executeOpsChunked, executeSceneMutation } from "../../core/capabilities/engine-ops.js";
4
+ import { annotateVariantTypes } from "../../core/capabilities/variant-types.js";
5
+ import { FALLBACK_SINGLE_ONLY_OPS, resolveSingleOnlyOps, } from "../../core/capability-skew.js";
6
+ // Re-exported for tests and for callers that reason about dispatch classes.
7
+ // executeSceneMutation is the ONE copy in core/capabilities/engine-ops.ts,
8
+ // re-exported here for the spatial tools (snap / align).
9
+ export { FALLBACK_SINGLE_ONLY_OPS, resolveSingleOnlyOps, executeSceneMutation };
100
10
  function requireSuccessfulOps(result, context) {
101
11
  const receipt = (result ?? {});
102
12
  const results = Array.isArray(receipt.results)
@@ -144,16 +54,16 @@ Recommended workflow:
144
54
  }, async ({ path, rootName, rootType }) => withEngine(async (client) => {
145
55
  const safePath = path.trim().replace(/\\/g, "/");
146
56
  if (!safePath.startsWith("res://") || safePath.includes("..")) {
147
- throw new Error("Scene path must be a traversal-free res:// project path.");
57
+ throw new ToolInputError("Scene path must be a traversal-free res:// project path.");
148
58
  }
149
59
  if (!safePath.endsWith(".tscn")) {
150
- throw new Error("New scenes must use the text format: the path must end in .tscn.");
60
+ throw new ToolInputError("New scenes must use the text format: the path must end in .tscn.");
151
61
  }
152
62
  if (!VALID_ROOT_NAME.test(rootName)) {
153
- throw new Error(`Invalid rootName "${rootName}": use letters, digits, underscores, hyphens, or spaces, starting with a letter or underscore.`);
63
+ throw new ToolInputError(`Invalid rootName "${rootName}": use letters, digits, underscores, hyphens, or spaces, starting with a letter or underscore.`);
154
64
  }
155
65
  if (!VALID_ROOT_TYPE.test(rootType)) {
156
- throw new Error(`Invalid rootType "${rootType}": must be a plain class name like 'Node3D', 'Node2D', or 'Control'.`);
66
+ throw new ToolInputError(`Invalid rootType "${rootType}": must be a plain class name like 'Node3D', 'Node2D', or 'Control'.`);
157
67
  }
158
68
  // Same engine-routed guarded write path summer_write_file uses:
159
69
  // identity-bound, and mustNotExist makes the engine refuse (create-only)
@@ -282,16 +192,40 @@ Do not guess paths. Prefer:
282
192
  - Add a .glb/.gltf 3D model into the scene
283
193
  - Compose scenes from smaller scenes (e.g., add a "Player" scene into a "Level" scene)
284
194
 
285
- The scene must already exist in the project. Use summer_import_from_url first if importing from external sources.`, {
195
+ The scene must already exist in the project. Use summer_import_from_url first if importing from external sources.
196
+
197
+ PASS target_size FOR IMPORTED MODELS. Downloaded/generated .glb assets arrive at arbitrary scale (a "chair" can be 40 units tall). target_size uniformly scales the instanced subtree so its largest world-AABB dimension equals that many units — commit to real-world size: chair 1.0, door 2.0, car 4.5, person 1.7, tree 6-10. The result then reports dimensions + scale_applied; verify placement afterwards (summer_world_snapshot AABBs, summer_screenshot). Older engine builds ignore target_size — when the result lacks scale_applied, this tool appends a note and you must scale the node yourself (summer_set_prop scale) and re-check.`, {
286
198
  scenePath: z.string().describe("Target scene to receive the instance, e.g. 'res://main.tscn'"),
287
199
  parent: z.string().describe("Parent node path, e.g. './World'"),
288
200
  scene: z.string().describe("Scene/model path, e.g. 'res://player.tscn' or 'res://models/tree.glb'"),
289
201
  name: z.string().optional().describe("Override the instance name"),
290
- }, async ({ scenePath, parent, scene, name }) => withEngine(async (client) => {
202
+ target_size: z
203
+ .number()
204
+ .positive()
205
+ .optional()
206
+ .describe("Normalize the instance's physical size: uniformly scale it so its largest world-AABB dimension equals this many units (chair 1.0, car 4.5, person 1.7). Strongly recommended for imported .glb/.gltf models."),
207
+ }, async ({ scenePath, parent, scene, name, target_size }) => withEngine(async (client) => {
291
208
  const op = { op: "InstantiateScene", parent, scene };
292
209
  if (name)
293
210
  op.name = name;
294
- return executeSceneMutation(client, scenePath, [op]);
211
+ if (target_size !== undefined)
212
+ op.target_size = target_size;
213
+ const result = await executeSceneMutation(client, scenePath, [op]);
214
+ // An older engine applies the op but silently drops target_size — its
215
+ // receipt then lacks scale_applied. Confess that instead of letting a
216
+ // 40-unit "chair" pass as normalized.
217
+ if (target_size !== undefined && result && typeof result === "object") {
218
+ const envelope = result;
219
+ const instanced = envelope.results?.find((entry) => entry.op === "InstantiateScene" && entry.ok === true);
220
+ if (instanced && !("scale_applied" in instanced)) {
221
+ return {
222
+ ...envelope,
223
+ target_size_note: `This Summer Engine build IGNORED target_size (no scale_applied in the receipt) — the instance is at the asset's raw scale, NOT normalized to ${target_size}. ` +
224
+ "Scale it yourself (summer_set_prop scale, or ctx code in summer_run_script), verify with summer_world_snapshot/summer_screenshot, or update Summer Engine.",
225
+ };
226
+ }
227
+ }
228
+ return result;
295
229
  }));
296
230
  server.tool("summer_connect_signal", `Connect a signal between two nodes. Signals are Godot's event system — they notify when something happens.
297
231
 
@@ -335,19 +269,23 @@ The receiver node must have a script with the specified method.`, {
335
269
  }));
336
270
  server.tool("summer_inspect_node", `Get all editable properties of a node with their current values, types, and resource info.
337
271
 
338
- Call this before modifying a node to understand its current state. Returns every property the Godot inspector would show.
272
+ Call this before modifying a node to understand its current state. Returns every property the Godot inspector would show. Each prop carries the engine's raw Variant.Type integer as "type" plus its name as "type_name" (e.g. type 5 = TYPE_VECTOR2, 20 = TYPE_COLOR, 24 = TYPE_OBJECT); resource-valued props also carry resource_type / resource_path.
273
+
274
+ Reads the currently OPEN scene — "path" is relative to its root (there is no scenePath argument; open the scene first if needed).
339
275
 
340
276
  Example: inspect a light to see its energy, color, shadow settings before changing them.`, {
341
277
  path: z.string().describe("Node path from scene tree, e.g. 'Player', 'World/Enemies/Boss', 'DirectionalLight3D'"),
342
- }, async ({ path }) => withEngine(async (client) => client.inspectNode(path)));
278
+ }, async ({ path }) =>
279
+ // E2E 2026-09-03 F-14: the engine returns Variant.Type as a bare int.
280
+ withEngine(async (client) => annotateVariantTypes(await client.inspectNode(path))));
343
281
  server.tool("summer_inspect_resource", `Get all properties of a resource (material, mesh, shape, environment, etc).
344
282
 
345
283
  Use when you need the sub-properties of a resource attached to a node. For example, summer_inspect_node tells you a MeshInstance3D has a "StandardMaterial3D" material — this tool tells you that material's albedo_color, metallic, roughness, etc.`, {
346
284
  path: z.string().describe("Resource path, e.g. 'res://materials/ground.tres' or 'res://models/player.glb'"),
347
285
  }, async ({ path }) => withEngine(async (client) => client.inspectResource(path)));
348
- server.tool("summer_batch", `Execute multiple operations in a single call, grouped into one undo step. Each op is forwarded to the engine VERBATIM, so this is also how you reach engine ops that have no dedicated tool.
286
+ server.tool("summer_batch", `Execute multiple operations in a single call. Each op is forwarded to the engine VERBATIM, so this is also how you reach engine ops that have no dedicated tool.
349
287
 
350
- The user can undo everything with a single Ctrl+Z. Use this when building something that involves multiple nodes and properties — e.g., creating a player character with collision, camera, and properties.
288
+ UNDO: when nothing in the list forces a split (see the single-op contract below), the whole batch is ONE undo step — the user undoes everything with a single Ctrl+Z. When single-only ops are present the list is split into sequential requests and EACH chunk is its own undo step (one Ctrl+Z per chunk; the receipt shows the chunks). Use this when building something that involves multiple nodes and properties — e.g., creating a player character with collision, camera, and properties.
351
289
 
352
290
  Each op in the array uses the same format as the individual tools:
353
291
  - {"op": "AddNode", "parent": "/", "type": "MeshInstance3D", "name": "Floor"}
@@ -363,11 +301,12 @@ Do not mix OpenScene with scene mutations in one batch. OpenScene is a UI action
363
301
  send it separately. scenePath selects every mutation target. The tool appends one
364
302
  final SaveScene when the batch mutates a scene; if supplied explicitly, SaveScene
365
303
  must appear exactly once and be the final operation. The engine requires
366
- SaveScene, InstantiateScene, ReplaceNode, SimulateInput, and the Run*/Import*
304
+ SaveScene, InstantiateScene, ReplaceNode, SimulateInput, the runtime reads
305
+ (GetRuntimeSceneTree/GetRuntimeNode), and the Run*/Import*
367
306
  ops to travel as their own request, so this tool automatically splits your op
368
307
  list into sequential requests around them — each split chunk is its own undo
369
- step, and if a later chunk fails the receipt reports exactly which earlier ops
370
- already applied.`, {
308
+ step (NOT one step for the whole batch), and if a later chunk fails the receipt
309
+ reports exactly which earlier ops already applied.`, {
371
310
  scenePath: z.string().optional().describe("Required when ops contains scene mutations; exact res:// target scene path"),
372
311
  ops: z.array(z.record(z.unknown())).describe("Array of operation objects, each with 'op' plus its parameters"),
373
312
  }, async ({ scenePath, ops }) => withEngine(async (client) => {
@@ -376,21 +315,31 @@ already applied.`, {
376
315
  return kind === "WriteFile" || kind === "ReplaceText";
377
316
  });
378
317
  if (rawFileMutation) {
379
- throw new Error(`summer_batch does not accept raw ${String(rawFileMutation.op)} operations. ` +
318
+ throw new ToolInputError(`summer_batch does not accept raw ${String(rawFileMutation.op)} operations. ` +
380
319
  "Use summer_write_file or summer_replace_text so project identity, content guards, and same-file ordering are enforced.");
381
320
  }
382
321
  const sceneMutations = new Set([
383
322
  "AddNode", "RemoveNode", "MoveNode", "ReparentNode", "ReplaceNode",
384
323
  "SetProp", "SetResourceProperty", "ConnectSignal", "DisconnectSignal",
385
- "InstantiateScene", "SaveScene", "Undo",
324
+ "InstantiateScene", "SaveScene", "SnapToSurface", "AlignDistribute3D", "Undo",
386
325
  ]);
387
- const needsScenePath = ops.some((op) => sceneMutations.has(String(op.op ?? "")));
326
+ // Read-only spatial queries target an exact scene (identity-bound) but
327
+ // never save — no SaveScene is appended for them.
328
+ const sceneQueries = new Set([
329
+ "TestPlacement3D", "NavigationProbe3D", "Starcast3D",
330
+ ]);
331
+ const containsMutation = ops.some((op) => sceneMutations.has(String(op.op ?? "")));
332
+ const needsScenePath = containsMutation ||
333
+ ops.some((op) => sceneQueries.has(String(op.op ?? "")));
388
334
  if (needsScenePath && !scenePath) {
389
- throw new Error("summer_batch requires scenePath when ops contains scene mutations");
335
+ throw new ToolInputError("summer_batch requires scenePath when ops targets a scene");
390
336
  }
391
337
  const options = { groupUndo: true, ...(scenePath ? { scenePath } : {}) };
392
- return needsScenePath
393
- ? executeSceneMutation(client, scenePath, ops, options)
394
- : executeOpsChunked((chunk) => client.executeOps(chunk, options), ops);
338
+ if (containsMutation) {
339
+ return executeSceneMutation(client, scenePath, ops, options);
340
+ }
341
+ return executeOpsChunked((chunk) => needsScenePath
342
+ ? client.executeIdentityBoundOps(chunk, options)
343
+ : client.executeOps(chunk, options), ops, resolveSingleOnlyOps(client));
395
344
  }));
396
345
  }
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export { API_DOCS_NOT_INSTALLED, isApiDocsBundleInstalled, lookupApiDocs, resetApiDocsForTests, } from "../../core/capabilities/api-docs.js";
3
+ export declare function registerScriptTools(server: McpServer): void;
@@ -0,0 +1,118 @@
1
+ import { z } from "zod";
2
+ import { withEngine, missingEngineOpResult, withOldEngineHint } from "./with-engine.js";
3
+ import { lookupApiDocs } from "../../core/capabilities/api-docs.js";
4
+ import { RUN_EDITOR_SCRIPT_FALLBACK, RUN_SCRIPT_FALLBACK, buildRunEditorScriptOp, buildRunSceneScriptOp, } from "../../core/capabilities/scene-script.js";
5
+ // Re-exported so existing tests keep importing the lookup from the tool module.
6
+ export { API_DOCS_NOT_INSTALLED, isApiDocsBundleInstalled, lookupApiDocs, resetApiDocsForTests, } from "../../core/capabilities/api-docs.js";
7
+ export function registerScriptTools(server) {
8
+ server.tool("summer_run_script", `Run a GDScript snippet INSIDE the live editor, against the currently OPEN scene. This is the scene-scripting workhorse: one script replaces long chains of add-node/set-prop calls, and it can compute (loops, randomness, math, procedural meshes) what individual CRUD ops cannot.
9
+
10
+ SCRIPT CONTRACT — write ONLY the body below; do not add extends/@tool lines (missing ones are prepended and reported in 'normalizations'):
11
+
12
+ func run(ctx):
13
+ var root = ctx.get_scene_root() # root node of the open scene
14
+ for i in range(10):
15
+ var m := MeshInstance3D.new()
16
+ m.mesh = BoxMesh.new()
17
+ m.position = Vector3(i * 2, 0, 0)
18
+ root.add_child(m)
19
+ ctx.set_owner_recursive(m) # REQUIRED or the node is NOT saved
20
+ ctx.report("count", 10) # structured value back to you
21
+
22
+ - ctx.get_scene_root() — the open scene's root node. Full editor API access.
23
+ - ctx.set_owner_recursive(node) — stamps node AND its descendants with the scene-root owner (equivalent to node.owner = root on each). Call it after add_child on every created subtree.
24
+ - ctx.report(key, value) — return structured results (comes back in 'reports').
25
+ - print(...) — captured and returned in 'output'.
26
+ - OWNERSHIP: a created node whose owner is never set silently vanishes when the scene saves — descendants too. ctx.set_owner_recursive covers both.
27
+ - Values here are real GDScript — Vector3(0,10,0), Color(1,0,0,1) — NOT the quoted variant strings used by summer_set_prop.
28
+
29
+ Newer ctx builds also carry creation helpers that set the owner FOR you and return the node — prefer them: ctx.add_node(type, name, parent, props), ctx.find(name), ctx.get_or_create(type, name, parent), ctx.instance_scene(res_path, parent, name), ctx.add_mesh(shape, name, parent, props) / ctx.add_mesh_with_collision(...), ctx.mesh_from_arrays(...), ctx.make_material(props) / ctx.apply_material(node, material), ctx.grid(count_x, count_z, spacing, maker) / ctx.scatter(area, count, maker, seed), ctx.add_light_rig(target), ctx.ensure_environment(props), ctx.add_camera(position, look_at, make_current), ctx.summary(), ctx.save_scene(path). Unknown props keys are reported in 'prop_warnings', never silently dropped. On an older engine a missing helper is a plain GDScript error — fall back to the manual form above.
30
+
31
+ WHEN TO USE: 3+ related ops, anything with computed placement (scatter, grids, rings), procedural geometry (SurfaceTool/ArrayMesh), bulk renames/retunes. For a single property tweak, summer_set_prop is cheaper. Use summer_api_docs to verify property/method names instead of guessing.
32
+
33
+ THE LOOP: summer_world_snapshot (keep snapshot_id) -> summer_run_script -> summer_snapshot_diff + summer_screenshot -> inspect -> iterate. Never claim visual success without the screenshot.
34
+
35
+ Returns {ok, ran, result, reports, output, errors, duration_ms, checkpoint} — newer engines add rolled_back (a runtime error rolled the whole undo action back; the scene is untouched) and budget_enforced (max_seconds was a HARD deadline; when the budget hits, the script errors with "Summer script budget exceeded" — split the work into smaller scripts, never resubmit the same oversized one). Read 'errors' even when ok — with undo:'none', a partially-failed script may have mutated the scene. If this engine build predates RunSceneScript, the result is a structured engine_lacks_op failure (nothing is sent): use summer_run_editor_script or update Summer Engine.`, {
36
+ source: z.string().describe("GDScript source containing `func run(ctx):`. No extends/@tool line — just the function (plus any helpers)."),
37
+ max_seconds: z
38
+ .number()
39
+ .optional()
40
+ .describe("Time budget in seconds (default 20, clamped 5-120). The script blocks the editor while it runs — keep it short."),
41
+ checkpoint: z
42
+ .boolean()
43
+ .optional()
44
+ .describe("Take a SummerGit checkpoint before running (default true). The result confesses (no_rewind_point) when no checkpoint could be taken."),
45
+ undo: z
46
+ .enum(["action", "none"])
47
+ .optional()
48
+ .describe("Transaction mode (newer engines). 'action' (engine default): the whole run is ONE named undo action, and a mid-script runtime error rolls it back before returning (result rolled_back:true) — no half-mutated scene. 'none': v1 behavior, checkpoint only. Older engines ignore this."),
49
+ }, async ({ source, max_seconds, checkpoint, undo }) => withEngine(async (client) => {
50
+ const missing = missingEngineOpResult(client, "RunSceneScript", RUN_SCRIPT_FALLBACK);
51
+ if (missing)
52
+ return missing;
53
+ const { op, timeoutMs } = buildRunSceneScriptOp({ source, max_seconds, checkpoint, undo });
54
+ const result = await client.executeIdentityBoundOps([op], undefined, timeoutMs);
55
+ return withOldEngineHint(result, "RunSceneScript", "use summer_run_editor_script instead");
56
+ }));
57
+ server.tool("summer_run_editor_script", `Run a GDScript EditorScript in a FRESH HEADLESS editor spawned against the ON-DISK project. Cold path: a whole child editor boots, runs your script once, and exits — seconds to tens of seconds depending on the project and the script (about 2 s end to end on a small template project; large projects can spend 30 s+ just booting).
58
+
59
+ USE FOR batch/project-wide jobs that should not block the live editor: re-saving many scenes, sweeping resources, mass import fixes, generating .tres assets, long bakes. It sees ONLY what is saved on disk — unsaved live edits in the open editor are INVISIBLE to it, and the live editor won't show its output until files reload. For work on the OPEN scene, use summer_run_script instead.
60
+
61
+ SCRIPT CONTRACT — write a plain EditorScript body:
62
+
63
+ func _run():
64
+ var scene = load("res://main.tscn").instantiate()
65
+ # ... work ...
66
+ print("done") # captured into output[]
67
+
68
+ You may omit the '@tool' and 'extends EditorScript' lines — the engine prepends any that are missing and reports each fix in 'normalizations' (with 'line_offset' so error line numbers map back to your source). Including 'extends EditorScript' yourself is also fine.
69
+
70
+ Returns {ok, ran, exit_code, output, errors, boot_errors, result, out_dir, checkpoint, normalizations} plus a failure_reason taxonomy on failure (script_parse_failed, timeout, spawn_failed, ...). A top-level no_rewind_point:true means no pre-run checkpoint exists — the run is NOT rewindable; tell the user before doing more destructive work. This headless child has NO renderer: screenshots/pixels are impossible here (see the headless-scripting skill).`, {
71
+ source: z.string().describe("EditorScript GDScript source with `func _run():`. '@tool' / 'extends EditorScript' are optional — missing lines are prepended and reported in normalizations."),
72
+ max_seconds: z
73
+ .number()
74
+ .optional()
75
+ .describe("Time budget in seconds for the child editor (default 120, clamped 15-600). Include boot time — large projects can take 30s+ just to start."),
76
+ checkpoint: z
77
+ .boolean()
78
+ .optional()
79
+ .describe("Take a SummerGit checkpoint before the child editor runs. The result confesses (no_rewind_point) when none could be taken."),
80
+ }, async ({ source, max_seconds, checkpoint }) => withEngine(async (client) => {
81
+ const missing = missingEngineOpResult(client, "RunEditorScript", RUN_EDITOR_SCRIPT_FALLBACK);
82
+ if (missing)
83
+ return missing;
84
+ const { op, timeoutMs } = buildRunEditorScriptOp({ source, max_seconds, checkpoint });
85
+ return client.executeIdentityBoundOps([op], undefined, timeoutMs);
86
+ }));
87
+ server.tool("summer_api_docs", `Offline engine class-reference lookup — verify a property, method, signal, or constant BEFORE writing script code, instead of guessing names. No engine connection needed.
88
+
89
+ Returns for a class: inherits, brief description, properties (name/type/default), method signatures, signals, constants. Pass 'member' to fetch one member (e.g. class_name:'BoxShape3D', member:'size' -> {name:'size', type:'Vector3', default:'Vector3(1, 1, 1)'}). Unknown names return closest-match suggestions.
90
+
91
+ Entries list only members DECLARED on that class — walk 'inherits' for inherited ones (e.g. 'position' lives on Node3D, not MeshInstance3D). Data is compiled from the engine's class reference and stamped with the engine technical base it was generated from (technical_base in every successful result) — trust it over training memory for version-sensitive APIs; descriptions are trimmed to one line. When the bundled reference is missing from this install, the result says so (api_docs_not_installed) instead of guessing.`, {
92
+ class_name: z.string().describe("Engine class name, e.g. 'BoxShape3D', 'CharacterBody3D', 'SurfaceTool'. Case-insensitive."),
93
+ member: z
94
+ .string()
95
+ .optional()
96
+ .describe("Optional property/method/signal/constant name to fetch just that member, e.g. 'size' or 'move_and_slide'."),
97
+ }, async ({ class_name, member }) => {
98
+ try {
99
+ const result = lookupApiDocs(class_name, member);
100
+ return {
101
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
102
+ ...(result.ok === false ? { isError: true } : {}),
103
+ };
104
+ }
105
+ catch (err) {
106
+ const message = err instanceof Error ? err.message : String(err);
107
+ return {
108
+ content: [
109
+ {
110
+ type: "text",
111
+ text: `Could not load the bundled api-docs asset (${message}). Reinstall/update the summer-engine package.`,
112
+ },
113
+ ],
114
+ isError: true,
115
+ };
116
+ }
117
+ });
118
+ }
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSpatialTools(server: McpServer): void;