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,10 +1,30 @@
1
- import { EngineApiClient } from "../lib/api-client.js";
2
- import type { EngineSelection } from "../lib/engine.js";
3
- import { getCachedBootDriftNotice as getCachedNotice } from "../lib/mcp-boot-notice.js";
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { EngineApiClient } from "../core/api-client.js";
3
+ import type { EngineSelection } from "../core/engine.js";
4
+ import { getCachedBootDriftNotice as getCachedNotice } from "./boot-notice.js";
4
5
  export declare const getCachedBootDriftNotice: typeof getCachedNotice;
6
+ /**
7
+ * Server `instructions` in the MCP initialize response (SDK ServerOptions,
8
+ * @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
9
+ * session, before any tool call — the place for the five habits the E2E run
10
+ * (docs/design/archive/E2E-2026-09-03.md, F-17) showed an agent needs on the first
11
+ * turn and would otherwise learn the hard way. Kept under 600 characters so
12
+ * it costs a few hundred tokens once; the full operating guide stays in the
13
+ * summer_agent_playbook prompt / summer_get_agent_playbook tool.
14
+ */
15
+ export declare const SUMMER_MCP_INSTRUCTIONS: string;
5
16
  export declare function configureMcpEngineSelection(selection?: EngineSelection): void;
6
17
  export declare function getClient(): Promise<EngineApiClient>;
7
18
  export declare function resetClient(): void;
19
+ /**
20
+ * Build the MCP server with every Summer tool registered, without connecting
21
+ * a transport. startMcpServer() uses this; tests use it to count the live
22
+ * tool surface against registry/generated/counts.json.
23
+ */
24
+ export declare function createMcpServer(): {
25
+ server: McpServer;
26
+ getRegisteredToolCount: () => number;
27
+ };
8
28
  export interface StartMcpServerOptions {
9
29
  projectPath?: string;
10
30
  instanceId?: string;
@@ -1,24 +1,46 @@
1
- import { createRequire } from "node:module";
2
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { EngineApiClient } from "../lib/api-client.js";
3
+ import { EngineApiClient } from "../core/api-client.js";
5
4
  import { registerSceneTools } from "./tools/scene-tools.js";
6
5
  import { registerDebugTools } from "./tools/debug-tools.js";
7
6
  import { registerVisualTools } from "./tools/visual-tools.js";
8
7
  import { WITH_ENGINE_META } from "./tools/with-engine.js";
9
- import { registerProjectTools } from "./tools/project-tools.js";
8
+ import { registerPlaybookPrompt, registerProjectTools, } from "./tools/project-tools.js";
9
+ import { registerPerceptionTools } from "./tools/perception-tools.js";
10
+ import { registerSpatialTools } from "./tools/spatial-tools.js";
11
+ import { registerScriptTools } from "./tools/script-tools.js";
12
+ import { registerEventTools } from "./tools/event-tools.js";
13
+ import { registerFabricateTools } from "./tools/fabricate-tools.js";
14
+ import { registerUiTools } from "./tools/ui-tools.js";
15
+ import { registerRuntimeTools } from "./tools/runtime-tools.js";
16
+ import { recordToolCall, registrationHasInputSchema, trajectoryArgsFor, } from "../core/trajectory.js";
10
17
  import { registerFileTools } from "./tools/file-tools.js";
11
18
  import { registerAssetTools } from "./tools/asset-tools.js";
12
19
  import { registerGenerateTools } from "./tools/generate-tools.js";
13
- import { registerCloudTools } from "./tools/cloud-tools.js";
14
20
  import { registerCreatorTools } from "./tools/creator-tools.js";
15
- import { getCachedBootDriftNotice as getCachedNotice, setCachedBootDriftNotice, } from "../lib/mcp-boot-notice.js";
16
- import { appendMcpLogEvent } from "../lib/mcp-log.js";
17
- import { buildBootDriftNotice, fetchLatestRegistryVersion, } from "../lib/version-check.js";
18
- const require = createRequire(import.meta.url);
19
- const { version } = require("../../package.json");
21
+ import { registerFeedbackTools } from "./tools/feedback-tools.js";
22
+ import { registerNavigationTools } from "./tools/navigation-tools.js";
23
+ import { registerLibraryTools } from "./tools/library-tools.js";
24
+ import { getCachedBootDriftNotice as getCachedNotice, setCachedBootDriftNotice, } from "./boot-notice.js";
25
+ import { appendMcpLogEvent } from "../core/mcp-log.js";
26
+ import { buildBootDriftNotice, fetchLatestRegistryVersion, } from "../installer/version-check.js";
27
+ import { TOOLKIT_VERSION as version } from "../core/version.js";
20
28
  let processDiagnosticsInstalled = false;
21
29
  export const getCachedBootDriftNotice = getCachedNotice;
30
+ /**
31
+ * Server `instructions` in the MCP initialize response (SDK ServerOptions,
32
+ * @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
33
+ * session, before any tool call — the place for the five habits the E2E run
34
+ * (docs/design/archive/E2E-2026-09-03.md, F-17) showed an agent needs on the first
35
+ * turn and would otherwise learn the hard way. Kept under 600 characters so
36
+ * it costs a few hundred tokens once; the full operating guide stays in the
37
+ * summer_agent_playbook prompt / summer_get_agent_playbook tool.
38
+ */
39
+ export const SUMMER_MCP_INSTRUCTIONS = "Summer Engine MCP. Call summer_get_project_context first: it binds this session to the open project and returns mainScene, projectMemory (GameSoul, template pin) and any capabilitySkewWarning. " +
40
+ "Before building or fixing, summer_search_library then summer_read_library the hit — skills, examples and templates live there. " +
41
+ "After a playthrough read summer_get_diagnostics, not summer_get_console alone (runtime errors live in the debugger). " +
42
+ "A uniformly black screenshot means the viewport had not redrawn — recapture before concluding. " +
43
+ "Report entries you verified in-engine via summer_library_feedback.";
22
44
  /**
23
45
  * Fire-and-forget probe of the npm registry on MCP boot. Caches the result for
24
46
  * the session. We never await this in startup so a slow / offline registry
@@ -38,6 +60,18 @@ export function configureMcpEngineSelection(selection) {
38
60
  cachedClient = null;
39
61
  }
40
62
  export async function getClient() {
63
+ // Opt-in per-project routing (editor -> live worker -> spawned worker).
64
+ // OFF by default: with the flag unset this block is skipped entirely and
65
+ // src/core/headless/ is never even loaded (dynamic import). With the flag
66
+ // set, the router returns null whenever the existing path should serve the
67
+ // call (no project context, or a live editor has the project open), so
68
+ // editor behavior stays identical. See docs/HEADLESS_ROUTING.md.
69
+ if (process.env.SUMMER_HEADLESS_ROUTING === "1") {
70
+ const { getHeadlessRoutedClient } = await import("../core/headless/mcp-routing.js");
71
+ const routed = await getHeadlessRoutedClient(engineSelection);
72
+ if (routed)
73
+ return routed;
74
+ }
41
75
  if (cachedClient) {
42
76
  // The engine rotates its api-token (and can change ports) on every launch, so
43
77
  // a cached client can outlive the engine instance it was built for. If the
@@ -61,10 +95,10 @@ export async function getClient() {
61
95
  ? error.message
62
96
  : "Summer Engine is not running.";
63
97
  throw new Error(reason + "\n" +
64
- "Open the intended project in Summer Engine, or run: npx summer-engine run\n" +
98
+ "Open the intended project in Summer Engine, or run: npx -y summer-engine@latest run\n" +
65
99
  "Note: only tools that touch the local project need the engine. Cloud tools " +
66
100
  "(summer_generate_*, summer_search_assets, summer_list_my_assets, summer_get_asset, " +
67
- "summer_check_job) work right now without it — they only need 'npx summer-engine login'.");
101
+ "summer_check_job) work right now without it — they only need 'npx -y summer-engine@latest login'.");
68
102
  }
69
103
  }
70
104
  export function resetClient() {
@@ -141,11 +175,50 @@ function installResultSizeLogger(server) {
141
175
  if (typeof handler !== "function")
142
176
  return original(...args);
143
177
  registeredToolCount += 1;
178
+ // Schema-less tools receive only the SDK's `extra` — never record that as
179
+ // the tool's arguments (see registrationHasInputSchema).
180
+ const hasInputSchema = registrationHasInputSchema(args);
144
181
  const wrapped = async (...handlerArgs) => {
145
182
  const startedAt = Date.now();
146
- const result = await handler(...handlerArgs);
183
+ let result;
184
+ try {
185
+ result = await handler(...handlerArgs);
186
+ }
187
+ catch (error) {
188
+ // A handler THROW never produced a result to classify; record it as
189
+ // ok:false / exception so the stream does not silently skip failures,
190
+ // then let the SDK turn it into the protocol error it always did.
191
+ recordToolCall({
192
+ tool: name,
193
+ args: trajectoryArgsFor(hasInputSchema, handlerArgs),
194
+ exception: error instanceof Error ? error.message : String(error),
195
+ durationMs: Date.now() - startedAt,
196
+ });
197
+ throw error;
198
+ }
147
199
  const durationMs = Date.now() - startedAt;
148
200
  try {
201
+ // Opt-in local trajectory capture: one JSONL line per tool call when
202
+ // SUMMER_TRAJECTORY_DIR is set. recordToolCall never throws and is a
203
+ // no-op when the env var is unset.
204
+ {
205
+ const record = result;
206
+ const callMeta = record && typeof record === "object"
207
+ ? record[WITH_ENGINE_META]
208
+ : undefined;
209
+ recordToolCall({
210
+ tool: name,
211
+ args: trajectoryArgsFor(hasInputSchema, handlerArgs),
212
+ isError: record?.isError === true,
213
+ terminalState: callMeta?.terminalState,
214
+ errorClass: callMeta?.errorClass,
215
+ failureReason: callMeta?.failureReason,
216
+ durationMs,
217
+ // Read only under SUMMER_TRAJECTORY_EVAL=1 (bounded summary); the
218
+ // default redacted stream ignores it.
219
+ result,
220
+ });
221
+ }
149
222
  if (result &&
150
223
  typeof result === "object" &&
151
224
  "content" in result &&
@@ -213,6 +286,42 @@ function installResultSizeLogger(server) {
213
286
  };
214
287
  return () => registeredToolCount;
215
288
  }
289
+ /**
290
+ * Build the MCP server with every Summer tool registered, without connecting
291
+ * a transport. startMcpServer() uses this; tests use it to count the live
292
+ * tool surface against registry/generated/counts.json.
293
+ */
294
+ export function createMcpServer() {
295
+ const server = new McpServer({
296
+ name: "summer-engine",
297
+ version,
298
+ }, { instructions: SUMMER_MCP_INSTRUCTIONS });
299
+ // Passive observability: log result-size to stderr but do not modify
300
+ // results. See installResultSizeLogger above.
301
+ const getRegisteredToolCount = installResultSizeLogger(server);
302
+ registerSceneTools(server);
303
+ registerDebugTools(server);
304
+ registerVisualTools(server);
305
+ registerProjectTools(server);
306
+ registerFileTools(server);
307
+ registerAssetTools(server);
308
+ registerGenerateTools(server);
309
+ registerCreatorTools(server);
310
+ registerFeedbackTools(server);
311
+ registerScriptTools(server);
312
+ registerPerceptionTools(server);
313
+ registerSpatialTools(server);
314
+ registerNavigationTools(server);
315
+ registerLibraryTools(server);
316
+ registerEventTools(server);
317
+ registerFabricateTools(server);
318
+ registerUiTools(server);
319
+ registerRuntimeTools(server);
320
+ // The playbook is also an MCP prompt so prompt-surfacing hosts get it
321
+ // natively (same content as the summer_get_agent_playbook tool).
322
+ registerPlaybookPrompt(server);
323
+ return { server, getRegisteredToolCount };
324
+ }
216
325
  export async function startMcpServer(options = {}) {
217
326
  configureMcpEngineSelection({
218
327
  instanceId: options.instanceId ?? process.env.SUMMER_ENGINE_INSTANCE_ID,
@@ -231,22 +340,7 @@ export async function startMcpServer(options = {}) {
231
340
  cwd: options.cwd ?? process.cwd(),
232
341
  },
233
342
  });
234
- const server = new McpServer({
235
- name: "summer-engine",
236
- version,
237
- });
238
- // Passive observability: log result-size to stderr but do not modify
239
- // results. See installResultSizeLogger above.
240
- const getRegisteredToolCount = installResultSizeLogger(server);
241
- registerSceneTools(server);
242
- registerDebugTools(server);
243
- registerVisualTools(server);
244
- registerProjectTools(server);
245
- registerFileTools(server);
246
- registerAssetTools(server);
247
- registerGenerateTools(server);
248
- registerCloudTools(server);
249
- registerCreatorTools(server);
343
+ const { server, getRegisteredToolCount } = createMcpServer();
250
344
  // Fire-and-forget — never block tool registration on the npm registry.
251
345
  void probeBootDrift().catch((error) => {
252
346
  setCachedBootDriftNotice(null);
@@ -1,51 +1,15 @@
1
1
  import { z } from "zod";
2
- import { getAuthToken } from "../../lib/auth.js";
2
+ import { getAuthToken } from "../../core/auth.js";
3
+ import { resolveGatewayUrl } from "../../core/config.js";
3
4
  import { getClient } from "../server.js";
4
- const GATEWAY_URL = process.env.SUMMER_GATEWAY_URL || "https://www.summerengine.com";
5
- /** Kenney Cloudinary URL pattern: .../summer_art/kenney/3d/{pack-slug}/{filename}.glb */
6
- const KENNEY_URL_PATTERN = /\/kenney\/3d\/([^/]+)\//;
7
- function getPackSlugFromUrl(fileUrl) {
8
- return fileUrl.match(KENNEY_URL_PATTERN)?.[1] ?? null;
9
- }
10
- function buildKenneyTextureUrl(fileUrl) {
11
- const lastSlash = fileUrl.lastIndexOf("/");
12
- const base = lastSlash >= 0 ? fileUrl.slice(0, lastSlash) : fileUrl;
13
- return `${base}/Textures/colormap.png`;
14
- }
15
- async function textureExists(url) {
16
- try {
17
- const res = await fetch(url, { method: "HEAD", signal: AbortSignal.timeout(5000) });
18
- return res.ok;
19
- }
20
- catch {
21
- return false;
22
- }
23
- }
24
- /**
25
- * Build import entries for Kenney 3D assets: texture first, then GLB.
26
- * Pack-scoped paths prevent texture collision (each pack has its own Textures/colormap.png).
27
- * See: publicsummerengine/Docs/ASSET_IMPORT_END_TO_END.md
28
- */
29
- async function buildKenneyImportEntries(fileUrl, packSlug, fileName) {
30
- const textureUrl = buildKenneyTextureUrl(fileUrl);
31
- const hasTexture = await textureExists(textureUrl);
32
- if (!hasTexture) {
33
- return [{ url: fileUrl, path: `res://assets/models/kenney/${packSlug}/${fileName}` }];
34
- }
35
- const glbPath = `res://assets/models/kenney/${packSlug}/${fileName}`;
36
- const glbDir = glbPath.replace(/\/[^/]+$/, "");
37
- const texturePath = `${glbDir}/Textures/colormap.png`;
38
- return [
39
- { url: textureUrl, path: texturePath },
40
- { url: fileUrl, path: glbPath },
41
- ];
42
- }
5
+ import { ImportHdriError, importPolyHavenHdri, } from "../../core/capabilities/hdri-import.js";
6
+ import { importResolvedAsset } from "../../core/capabilities/asset-import.js";
43
7
  async function searchAssetsApi(params) {
44
8
  const token = await getAuthToken();
45
9
  if (!token) {
46
10
  return {
47
11
  error: "Not logged in",
48
- message: "Not signed in. The user needs to run this in their terminal:\n npx summer-engine login\nOr open: https://www.summerengine.com/login\nAsset search requires a Summer Engine account (free to create).",
12
+ message: "Not signed in. The user needs to run this in their terminal:\n npx -y summer-engine@latest login\nOr open: https://www.summerengine.com/login\nAsset search requires a Summer Engine account (free to create).",
49
13
  };
50
14
  }
51
15
  const searchParams = new URLSearchParams();
@@ -59,7 +23,8 @@ async function searchAssetsApi(params) {
59
23
  if (params.source) {
60
24
  searchParams.set("source", params.source);
61
25
  }
62
- const res = await fetch(`${GATEWAY_URL}/api/mcp/assets?${searchParams}`, {
26
+ const gatewayUrl = await resolveGatewayUrl();
27
+ const res = await fetch(`${gatewayUrl}/api/mcp/assets?${searchParams}`, {
63
28
  headers: { Authorization: `Bearer ${token}` },
64
29
  signal: AbortSignal.timeout(15000),
65
30
  });
@@ -69,7 +34,7 @@ async function searchAssetsApi(params) {
69
34
  return {
70
35
  error: "unauthorized",
71
36
  message: (data.message || "Auth token expired.") +
72
- " The user needs to re-authenticate:\n npx summer-engine login --force",
37
+ " The user needs to re-authenticate:\n npx -y summer-engine@latest login --force",
73
38
  };
74
39
  }
75
40
  if (res.status === 429) {
@@ -92,10 +57,11 @@ async function authedGetJson(endpoint, timeoutMs = 15_000) {
92
57
  return {
93
58
  status: 401,
94
59
  error: "not_logged_in",
95
- message: "Not signed in. Run in your terminal:\n npx summer-engine login",
60
+ message: "Not signed in. Run in your terminal:\n npx -y summer-engine@latest login",
96
61
  };
97
62
  }
98
- const res = await fetch(`${GATEWAY_URL}${endpoint}`, {
63
+ const gatewayUrl = await resolveGatewayUrl();
64
+ const res = await fetch(`${gatewayUrl}${endpoint}`, {
99
65
  headers: { Authorization: `Bearer ${token}` },
100
66
  signal: AbortSignal.timeout(timeoutMs),
101
67
  });
@@ -124,99 +90,6 @@ async function getAssetDownloadUrlApi(assetId, role) {
124
90
  }
125
91
  return { data: result.data };
126
92
  }
127
- function fileNameFromUrl(fileUrl) {
128
- return fileUrl.split("/").pop()?.split("?")[0] || "asset";
129
- }
130
- function sanitizeNodeName(name) {
131
- return ((name || "Asset")
132
- .replace(/[^\p{L}\p{N}_]+/gu, "_")
133
- .replace(/^_+|_+$/g, "") || "Asset");
134
- }
135
- async function buildImportEntriesForAsset(asset, targetPath) {
136
- const fileUrl = asset.importUrl || asset.fileUrl;
137
- if (!fileUrl)
138
- throw new Error("Asset has no import URL.");
139
- const fileName = targetPath?.split("/").pop() || asset.fileName || fileNameFromUrl(fileUrl);
140
- const packSlug = asset.packSlug ?? getPackSlugFromUrl(fileUrl) ?? "misc";
141
- if (targetPath) {
142
- if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
143
- const textureUrl = buildKenneyTextureUrl(fileUrl);
144
- const hasTexture = await textureExists(textureUrl);
145
- if (hasTexture) {
146
- const glbDir = targetPath.replace(/\/[^/]+$/, "");
147
- return {
148
- importPath: targetPath,
149
- imports: [
150
- { url: textureUrl, path: `${glbDir}/Textures/colormap.png` },
151
- { url: fileUrl, path: targetPath },
152
- ],
153
- };
154
- }
155
- }
156
- return {
157
- importPath: targetPath,
158
- imports: [{ url: fileUrl, path: targetPath }],
159
- };
160
- }
161
- if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
162
- const imports = await buildKenneyImportEntries(fileUrl, packSlug, fileName);
163
- return { imports, importPath: imports[imports.length - 1].path };
164
- }
165
- const path = asset.type === "3d_model"
166
- ? `res://assets/models/${fileName}`
167
- : `res://assets/${fileName}`;
168
- return { imports: [{ url: fileUrl, path }], importPath: path };
169
- }
170
- async function importResolvedAsset(args) {
171
- const { asset, parent, scenePath, path, name } = args;
172
- if (parent && !scenePath) {
173
- throw new Error("scenePath is required when importing an asset into a scene");
174
- }
175
- const { imports, importPath } = await buildImportEntriesForAsset(asset, path);
176
- const client = await getClient();
177
- const importResult = imports.length === 1
178
- ? await client.executeOps([
179
- { op: "ImportFromUrl", url: imports[0].url, path: imports[0].path },
180
- ])
181
- : await client.executeOps([{ op: "ImportFromUrlBatch", imports }]);
182
- const importReceipts = importResult?.results ?? [];
183
- const importFailure = importReceipts.find((receipt) => receipt?.ok === false);
184
- if (importResult?.status === "error" || importFailure) {
185
- throw new Error(importFailure?.error || "Could not import asset. Check engine logs.");
186
- }
187
- let addedToScene = false;
188
- let sceneReceipt = null;
189
- if (parent && asset.type === "3d_model") {
190
- sceneReceipt = await client.executeIdentityBoundOps([
191
- {
192
- op: "InstantiateScene",
193
- parent,
194
- scene: importPath,
195
- name: sanitizeNodeName(name || asset.title),
196
- },
197
- { op: "SaveScene" },
198
- ], { scenePath });
199
- const placementReceipts = sceneReceipt?.results ?? [];
200
- const placementFailure = placementReceipts.find((receipt) => receipt?.ok !== true);
201
- if (sceneReceipt?.status === "error" ||
202
- placementReceipts.length !== 2 ||
203
- placementFailure) {
204
- throw new Error(placementFailure?.error || `Could not add asset to ${scenePath}`);
205
- }
206
- addedToScene = true;
207
- }
208
- return {
209
- success: true,
210
- assetId: asset.id,
211
- asset: asset.title,
212
- type: asset.type,
213
- importedTo: importPath,
214
- addedToScene,
215
- parent: parent || null,
216
- scenePath: scenePath || null,
217
- sceneReceipt,
218
- };
219
- }
220
93
  function jsonSuccess(data) {
221
94
  return {
222
95
  content: [
@@ -250,7 +123,7 @@ Uses hybrid search: keywords + semantic similarity. Finds assets by name AND by
250
123
  Returns asset names, types, preview URLs, and import-ready file URLs.
251
124
 
252
125
  Cloud tool — works WITHOUT the Summer Engine app open.
253
- Requires authentication (so we can attribute usage and apply per-user rate limits): run 'npx summer-engine login' first.`, {
126
+ Requires authentication (so we can attribute usage and apply per-user rate limits): run 'npx -y summer-engine@latest login' first.`, {
254
127
  query: z.string().describe("Natural language search, e.g. 'low-poly tree', 'sci-fi weapon'. For my_assets, can be empty to list recent."),
255
128
  assetType: z.enum(["2d_image", "animation", "3d_model", "audio", "music", "all"]).default("all").describe("Filter by asset type"),
256
129
  limit: z.number().default(10).describe("Max results (1-20)"),
@@ -391,7 +264,7 @@ itself does not — only this import step does).`, {
391
264
  });
392
265
  }
393
266
  try {
394
- const imported = await importResolvedAsset({
267
+ const imported = await importResolvedAsset(await getClient(), {
395
268
  asset: fetched.asset,
396
269
  parent,
397
270
  scenePath,
@@ -419,7 +292,7 @@ itself does not — only this import step does).`, {
419
292
  Use when the user wants a specific type of asset added: "Add a tree to the scene", "Import a wooden barrel".
420
293
  Searches, picks the top result, downloads and imports it, then optionally adds it to the scene.
421
294
 
422
- Requires authentication. If the user gets an auth error, they need to run 'npx summer-engine login' in their terminal first. Summer Engine must be running.`, {
295
+ Requires authentication. If the user gets an auth error, they need to run 'npx -y summer-engine@latest login' in their terminal first. Summer Engine must be running.`, {
423
296
  query: z.string().describe("What to find, e.g. 'low-poly tree', 'wooden crate'"),
424
297
  parent: z.string().optional().describe("Parent node path to add the asset under, e.g. './World'. If omitted, only imports (no scene placement)"),
425
298
  scenePath: z.string().optional().describe("Required with parent. Exact res:// target scene path."),
@@ -464,7 +337,7 @@ Requires authentication. If the user gets an auth error, they need to run 'npx s
464
337
  };
465
338
  }
466
339
  try {
467
- const imported = await importResolvedAsset({ asset: best, parent, scenePath });
340
+ const imported = await importResolvedAsset(await getClient(), { asset: best, parent, scenePath });
468
341
  // 2D sprites and audio: import only; user adds to scene manually
469
342
  return {
470
343
  content: [
@@ -503,4 +376,51 @@ Requires authentication. If the user gets an auth error, they need to run 'npx s
503
376
  };
504
377
  }
505
378
  });
379
+ server.tool("summer_import_hdri", `Search Poly Haven's CC0 HDRI library and import one as environment lighting.
380
+
381
+ The single cheapest visual-quality upgrade for a 3D scene: a real HDRI sky lights
382
+ and reflects the whole world. Searches ~1,000 CC0 HDRIs on Poly Haven's public API
383
+ (no account, no key), downloads the .hdr/.exr through the engine's import pipeline
384
+ into res://sky/, and returns a ready-to-run summer_run_script snippet that wires it
385
+ into the WorldEnvironment (PanoramaSkyMaterial + sky ambient/reflections).
386
+
387
+ Pass query ("sunset beach", "night city", "studio") to search, or assetId for an
388
+ exact Poly Haven id. resolution 2k is right for most games; 4k for hero skies.
389
+ All results are CC0 — no attribution required.
390
+
391
+ Requires the Summer Engine app to be open with the project loaded (the download
392
+ runs through the engine). No Summer login needed.`, {
393
+ query: z
394
+ .string()
395
+ .optional()
396
+ .describe("What kind of sky/environment, e.g. 'sunset beach', 'overcast field', 'studio'. Omit when assetId is given."),
397
+ assetId: z
398
+ .string()
399
+ .optional()
400
+ .describe("Exact Poly Haven asset id (lowercase slug, e.g. 'kloppenheim_02'). Skips the search."),
401
+ resolution: z
402
+ .enum(["1k", "2k", "4k"])
403
+ .default("2k")
404
+ .describe("HDRI resolution. 2k (default) is right for most games; 4k for hero skies; 1k for quick blockouts."),
405
+ }, async ({ query, assetId, resolution }) => {
406
+ try {
407
+ const result = await importPolyHavenHdri({ query, assetId, resolution: resolution }, () => getClient());
408
+ return jsonSuccess(result);
409
+ }
410
+ catch (err) {
411
+ if (err instanceof ImportHdriError) {
412
+ return jsonError({
413
+ error: err.code,
414
+ message: err.message,
415
+ ...(err.hint ? { hint: err.hint } : {}),
416
+ });
417
+ }
418
+ const msg = err instanceof Error ? err.message : String(err);
419
+ return jsonError({
420
+ error: "hdri_import_failed",
421
+ message: msg,
422
+ hint: "Poly Haven may be unreachable, or Summer Engine is not running.",
423
+ });
424
+ }
425
+ });
506
426
  }
@@ -1,17 +1,7 @@
1
1
  import { z } from "zod";
2
- import { CreatorOperationError, listCreatorReleases, publishCreator, readCreatorLogs, } from "../../lib/creator.js";
3
- import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "../../lib/config.js";
4
- function textJson(value, isError = false) {
5
- return {
6
- content: [
7
- {
8
- type: "text",
9
- text: JSON.stringify(value, null, 2),
10
- },
11
- ],
12
- ...(isError ? { isError: true } : {}),
13
- };
14
- }
2
+ import { CreatorOperationError, listCreatorReleases, publishCreator, } from "../../core/capabilities/creator.js";
3
+ import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "../../core/config.js";
4
+ import { textJson } from "./text-json.js";
15
5
  async function creatorResult(operation) {
16
6
  try {
17
7
  return textJson(await operation());
@@ -34,7 +24,7 @@ async function creatorResult(operation) {
34
24
  }
35
25
  }
36
26
  export function registerCreatorTools(server) {
37
- server.tool("summer_creator_publish", "Publish an exact exported Summer .pck through the versioned Summercraft creator API. First call with confirm=false and present the returned project, version, digest, size, artifact path, channel, and notes; set confirm only after the user approves that exact target. The server independently verifies token scope, ownership, bytes, and review state.", {
27
+ server.tool("summer_creator_publish", "Publish an exact exported Summer .pck through the versioned Summer Platform creator API. First call with confirm=false and present the returned project, version, digest, size, artifact path, channel, and notes; set confirm only after the user approves that exact target. The server independently verifies token scope, ownership, bytes, and review state.", {
38
28
  project: z.string().optional().describe("Project root. Defaults to the current working directory."),
39
29
  artifact: z.string().describe("Exact path to the exported Summer .pck artifact."),
40
30
  version: z.string().describe("Immutable release version."),
@@ -47,7 +37,7 @@ export function registerCreatorTools(server) {
47
37
  ...args,
48
38
  face: "mcp",
49
39
  })));
50
- server.tool("summer_creator_releases", "List real creator-owned releases from the versioned Summercraft creator API. The server independently verifies the exact publish scope and project ownership.", {
40
+ server.tool("summer_creator_releases", "List real creator-owned releases from the versioned Summer Platform creator API. The server independently verifies the exact publish scope and project ownership.", {
51
41
  projectId: z.string().optional().describe("Creator project ID. Defaults to ~/.summer/config.json."),
52
42
  limit: z.number().int().min(1).max(100).default(20),
53
43
  cursor: z.string().optional().describe("Opaque nextCursor from the previous page."),
@@ -55,14 +45,6 @@ export function registerCreatorTools(server) {
55
45
  ...args,
56
46
  face: "mcp",
57
47
  })));
58
- server.tool("summer_creator_logs", "Read creator runtime logs for a project or release. If the required platform route or token scope is unavailable, returns the exact recovery action instead of placeholder logs.", {
59
- projectId: z.string().optional().describe("Creator project ID. Defaults to ~/.summer/config.json."),
60
- releaseId: z.string().optional().describe("Optional release ID."),
61
- limit: z.number().int().min(1).max(1000).default(100),
62
- }, async (args) => creatorResult(() => readCreatorLogs({
63
- ...args,
64
- face: "mcp",
65
- })));
66
48
  server.tool("summer_creator_config", "Read or update the shared non-secret ~/.summer configuration used by the CLI and this MCP. Mutations require confirm=true. Tokens are never returned or accepted by this tool.", {
67
49
  action: z.enum(["list", "get", "set", "unset"]),
68
50
  key: z.enum(CONFIG_KEYS).optional(),