summer-engine 2.8.2 → 3.1.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 (790) 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 +149 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +161 -393
  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/cli/commands/setup.js +158 -0
  49. package/dist/{commands → cli/commands}/skills.js +121 -251
  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 +55 -0
  167. package/dist/core/skills-registry.js +106 -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/installer/agent-config.d.ts +63 -0
  188. package/dist/installer/agent-config.js +540 -0
  189. package/dist/installer/agent-table.d.ts +103 -0
  190. package/dist/installer/agent-table.js +584 -0
  191. package/dist/installer/legacy-skills.d.ts +26 -0
  192. package/dist/installer/legacy-skills.js +53 -0
  193. package/dist/installer/setup.d.ts +76 -0
  194. package/dist/installer/setup.js +148 -0
  195. package/dist/installer/skill-locations.d.ts +36 -0
  196. package/dist/installer/skill-locations.js +91 -0
  197. package/dist/installer/version-check.d.ts +178 -0
  198. package/dist/installer/version-check.js +479 -0
  199. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  200. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  201. package/dist/mcp/server.d.ts +23 -3
  202. package/dist/mcp/server.js +122 -28
  203. package/dist/mcp/tools/asset-tools.js +62 -142
  204. package/dist/mcp/tools/creator-tools.js +5 -23
  205. package/dist/mcp/tools/debug-tools.js +61 -18
  206. package/dist/mcp/tools/event-tools.d.ts +14 -0
  207. package/dist/mcp/tools/event-tools.js +41 -0
  208. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  209. package/dist/mcp/tools/fabricate-tools.js +28 -0
  210. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  211. package/dist/mcp/tools/feedback-tools.js +88 -0
  212. package/dist/mcp/tools/file-tools.js +6 -53
  213. package/dist/mcp/tools/generate-tools.js +37 -63
  214. package/dist/mcp/tools/library-tools.d.ts +11 -0
  215. package/dist/mcp/tools/library-tools.js +42 -0
  216. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  217. package/dist/mcp/tools/navigation-tools.js +37 -0
  218. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  219. package/dist/mcp/tools/perception-tools.js +146 -0
  220. package/dist/mcp/tools/project-tools.d.ts +14 -0
  221. package/dist/mcp/tools/project-tools.js +72 -281
  222. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  223. package/dist/mcp/tools/runtime-tools.js +92 -0
  224. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  225. package/dist/mcp/tools/scene-tools.js +68 -119
  226. package/dist/mcp/tools/script-tools.d.ts +3 -0
  227. package/dist/mcp/tools/script-tools.js +118 -0
  228. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  229. package/dist/mcp/tools/spatial-tools.js +485 -0
  230. package/dist/mcp/tools/text-json.d.ts +8 -0
  231. package/dist/mcp/tools/text-json.js +12 -0
  232. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  233. package/dist/mcp/tools/ui-tools.js +82 -0
  234. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  235. package/dist/mcp/tools/visual-tools.js +383 -101
  236. package/dist/mcp/tools/with-engine.d.ts +9 -15
  237. package/dist/mcp/tools/with-engine.js +60 -96
  238. package/dist/project-memory/project-manifest.d.ts +36 -0
  239. package/dist/project-memory/project-manifest.js +50 -0
  240. package/dist/project-memory/project-memory.d.ts +57 -0
  241. package/dist/{lib → project-memory}/project-memory.js +46 -0
  242. package/gemini-extension.json +103 -2
  243. package/hooks/hooks-cursor.json +2 -2
  244. package/hooks/hooks.json +2 -1
  245. package/hooks/pre-commit-doctor.sh +45 -39
  246. package/hooks/run-hook.cmd +30 -23
  247. package/hooks/run-hook.sh +20 -0
  248. package/hooks/session-start.sh +18 -7
  249. package/integrations/README.md +99 -0
  250. package/integrations/amp/README.md +12 -0
  251. package/integrations/amp/manifest-target.json +3 -0
  252. package/integrations/antigravity/README.md +12 -0
  253. package/integrations/antigravity/manifest-target.json +3 -0
  254. package/integrations/claude/README.md +19 -0
  255. package/integrations/claude/manifest-target.json +16 -0
  256. package/integrations/claude-desktop/README.md +12 -0
  257. package/integrations/claude-desktop/manifest-target.json +3 -0
  258. package/integrations/cline/README.md +12 -0
  259. package/integrations/cline/manifest-target.json +3 -0
  260. package/integrations/cline-cli/README.md +12 -0
  261. package/integrations/cline-cli/manifest-target.json +3 -0
  262. package/integrations/codex/README.md +15 -0
  263. package/integrations/codex/manifest-target.json +5 -0
  264. package/integrations/copilot-jetbrains/README.md +12 -0
  265. package/integrations/copilot-jetbrains/manifest-target.json +3 -0
  266. package/integrations/crush/README.md +12 -0
  267. package/integrations/crush/manifest-target.json +3 -0
  268. package/integrations/cursor/README.md +16 -0
  269. package/integrations/cursor/manifest-target.json +5 -0
  270. package/integrations/factory/README.md +26 -0
  271. package/integrations/factory/manifest-target.json +5 -0
  272. package/integrations/gemini/README.md +26 -0
  273. package/integrations/gemini/manifest-target.json +5 -0
  274. package/integrations/github-copilot/README.md +12 -0
  275. package/integrations/github-copilot/manifest-target.json +3 -0
  276. package/integrations/goose/README.md +12 -0
  277. package/integrations/goose/manifest-target.json +3 -0
  278. package/integrations/grok-build/README.md +12 -0
  279. package/integrations/grok-build/manifest-target.json +3 -0
  280. package/integrations/hermes/README.md +12 -0
  281. package/integrations/hermes/manifest-target.json +3 -0
  282. package/integrations/junie/README.md +12 -0
  283. package/integrations/junie/manifest-target.json +3 -0
  284. package/integrations/kilo-code/README.md +12 -0
  285. package/integrations/kilo-code/manifest-target.json +3 -0
  286. package/integrations/kimi-code/README.md +12 -0
  287. package/integrations/kimi-code/manifest-target.json +3 -0
  288. package/integrations/kiro/README.md +12 -0
  289. package/integrations/kiro/manifest-target.json +3 -0
  290. package/integrations/lm-studio/README.md +12 -0
  291. package/integrations/lm-studio/manifest-target.json +3 -0
  292. package/integrations/mistral-vibe/README.md +12 -0
  293. package/integrations/mistral-vibe/manifest-target.json +3 -0
  294. package/integrations/opencode/README.md +12 -0
  295. package/integrations/opencode/manifest-target.json +3 -0
  296. package/integrations/qoder/README.md +12 -0
  297. package/integrations/qoder/manifest-target.json +3 -0
  298. package/integrations/qwen-code/README.md +12 -0
  299. package/integrations/qwen-code/manifest-target.json +3 -0
  300. package/integrations/roo-code/README.md +14 -0
  301. package/integrations/roo-code/manifest-target.json +3 -0
  302. package/integrations/rovo-dev/README.md +12 -0
  303. package/integrations/rovo-dev/manifest-target.json +3 -0
  304. package/integrations/trae/README.md +12 -0
  305. package/integrations/trae/manifest-target.json +3 -0
  306. package/integrations/visual-studio/README.md +12 -0
  307. package/integrations/visual-studio/manifest-target.json +3 -0
  308. package/integrations/vscode-copilot/README.md +12 -0
  309. package/integrations/vscode-copilot/manifest-target.json +3 -0
  310. package/integrations/warp/README.md +12 -0
  311. package/integrations/warp/manifest-target.json +3 -0
  312. package/integrations/windsurf/README.md +12 -0
  313. package/integrations/windsurf/manifest-target.json +3 -0
  314. package/integrations/zed/README.md +12 -0
  315. package/integrations/zed/manifest-target.json +3 -0
  316. package/library/references/collaborative-protocol/resource.yaml +24 -0
  317. package/library/references/gd-style/resource.yaml +24 -0
  318. package/{references → library/references/godot-version}/godot-version.md +6 -6
  319. package/library/references/godot-version/resource.yaml +22 -0
  320. package/library/references/headless-routing/headless-routing.md +46 -0
  321. package/library/references/headless-routing/resource.yaml +24 -0
  322. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  323. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  324. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  325. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  326. package/library/references/product-map/product-map.md +103 -0
  327. package/library/references/product-map/resource.yaml +33 -0
  328. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  329. package/library/references/public-surface-language/resource.yaml +17 -0
  330. package/library/references/summer-folder/resource.yaml +20 -0
  331. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  332. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  333. package/library/skills/3d-lighting/resource.yaml +27 -0
  334. package/library/skills/README.md +242 -0
  335. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  336. package/library/skills/adaptive-music/resource.yaml +28 -0
  337. package/library/skills/agent-playtesting/SKILL.md +148 -0
  338. package/library/skills/agent-playtesting/resource.yaml +52 -0
  339. package/library/skills/ambient-bed/resource.yaml +24 -0
  340. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  341. package/library/skills/animated-loop/resource.yaml +27 -0
  342. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  343. package/library/skills/animation-tree/resource.yaml +33 -0
  344. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  345. package/library/skills/art-direction/resource.yaml +29 -0
  346. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  347. package/library/skills/asset-strategy/resource.yaml +63 -0
  348. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  349. package/library/skills/audio-direction/resource.yaml +32 -0
  350. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  351. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  352. package/library/skills/brainstorm-game/resource.yaml +30 -0
  353. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  354. package/library/skills/brainstorming/resource.yaml +23 -0
  355. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  356. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  357. package/library/skills/browse-templates/resource.yaml +23 -0
  358. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  359. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  360. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  361. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  362. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  363. package/library/skills/character-model/resource.yaml +36 -0
  364. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  365. package/library/skills/character-portrait/resource.yaml +30 -0
  366. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  367. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  368. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  369. package/library/skills/concept-art/resource.yaml +34 -0
  370. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  371. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  372. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  373. package/library/skills/debug/resource.yaml +31 -0
  374. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  375. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  376. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  377. package/library/skills/design-level/resource.yaml +31 -0
  378. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  379. package/library/skills/design-mechanic/resource.yaml +31 -0
  380. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  381. package/library/skills/design-npc/resource.yaml +29 -0
  382. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  383. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  384. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  385. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  386. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  387. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  388. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  389. package/library/skills/environment-kit/resource.yaml +29 -0
  390. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  391. package/library/skills/export-and-ship/resource.yaml +32 -0
  392. package/library/skills/fabricating-assets/SKILL.md +195 -0
  393. package/library/skills/fabricating-assets/resource.yaml +52 -0
  394. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  395. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  396. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  397. package/library/skills/fps-controller/resource.yaml +29 -0
  398. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  399. package/library/skills/game-feel/resource.yaml +27 -0
  400. package/library/skills/gameskill/SKILL.md +64 -0
  401. package/library/skills/gameskill/resource.yaml +22 -0
  402. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  403. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  404. package/library/skills/generate-motion/resource.yaml +34 -0
  405. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  406. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  407. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  408. package/library/skills/headless-scripting/resource.yaml +26 -0
  409. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  410. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  411. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  412. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  413. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  414. package/library/skills/investigating-bugs/resource.yaml +24 -0
  415. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  416. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  417. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  418. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  419. package/library/skills/make-game/resource.yaml +35 -0
  420. package/library/skills/music-track/resource.yaml +28 -0
  421. package/library/skills/navigate-summer/SKILL.md +61 -0
  422. package/library/skills/navigate-summer/resource.yaml +35 -0
  423. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  424. package/library/skills/new-project/resource.yaml +28 -0
  425. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  426. package/library/skills/organic-model/resource.yaml +32 -0
  427. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  428. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  429. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  430. package/library/skills/pixel-art/resource.yaml +31 -0
  431. package/library/skills/play/resource.yaml +26 -0
  432. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  433. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  434. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  435. package/library/skills/procedural-animation/resource.yaml +33 -0
  436. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  437. package/library/skills/prop-model/resource.yaml +33 -0
  438. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  439. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  440. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  441. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  442. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  443. package/library/skills/remote-deploy/resource.yaml +23 -0
  444. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  445. package/library/skills/retarget/resource.yaml +33 -0
  446. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  447. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  448. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  449. package/library/skills/scene-composition/resource.yaml +27 -0
  450. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  451. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  452. package/library/skills/scene-scripting/SKILL.md +764 -0
  453. package/library/skills/scene-scripting/resource.yaml +58 -0
  454. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  455. package/library/skills/scene-to-level/resource.yaml +33 -0
  456. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  457. package/library/skills/skill-create/SKILL.md +138 -0
  458. package/library/skills/skill-create/resource.yaml +25 -0
  459. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  460. package/library/skills/skill-improve/resource.yaml +25 -0
  461. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  462. package/library/skills/skill-test/resource.yaml +26 -0
  463. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  464. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  465. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  466. package/library/skills/skybox-panorama/resource.yaml +28 -0
  467. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  468. package/library/skills/sound-effect/resource.yaml +27 -0
  469. package/library/skills/spatial-placement/SKILL.md +74 -0
  470. package/library/skills/spatial-placement/resource.yaml +42 -0
  471. package/library/skills/spatial-placement/tests/spec.md +65 -0
  472. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  473. package/library/skills/sprite-sheet/resource.yaml +32 -0
  474. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  475. package/library/skills/tileable-texture/resource.yaml +31 -0
  476. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  477. package/library/skills/trailer-shot/resource.yaml +27 -0
  478. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  479. package/library/skills/tune-performance/resource.yaml +31 -0
  480. package/library/skills/ui-basics/resource.yaml +25 -0
  481. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  482. package/library/skills/ui-graphics/resource.yaml +29 -0
  483. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  484. package/library/skills/use-widget-asset/resource.yaml +29 -0
  485. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  486. package/library/skills/using-summer/resource.yaml +41 -0
  487. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  488. package/library/skills/vehicle-model/resource.yaml +34 -0
  489. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  490. package/library/skills/verification-before-completion/resource.yaml +23 -0
  491. package/library/skills/verifying-scenes/SKILL.md +98 -0
  492. package/library/skills/verifying-scenes/resource.yaml +42 -0
  493. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  494. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  495. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  496. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  497. package/library/skills/vfx-fire/resource.yaml +35 -0
  498. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  499. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  500. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  501. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  502. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  503. package/library/skills/vfx-lightning/resource.yaml +33 -0
  504. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  505. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  506. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  507. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  508. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  509. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  510. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  511. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  512. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  513. package/library/skills/vfx-smoke/resource.yaml +32 -0
  514. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  515. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  516. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  517. package/library/skills/voice-line/resource.yaml +27 -0
  518. package/library/skills/world-building-3d/SKILL.md +105 -0
  519. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  520. package/library/skills/world-building-3d/resource.yaml +44 -0
  521. package/library/skills/world-building-3d/tests/spec.md +48 -0
  522. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  523. package/library/skills/writing-plans/resource.yaml +23 -0
  524. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  525. package/library/skills/writing-skills/resource.yaml +29 -0
  526. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  527. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  528. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  529. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  530. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  531. package/library/templates/2d-platformer/resource.yaml +24 -0
  532. package/library/templates/2d-rpg/resource.yaml +21 -0
  533. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  534. package/library/templates/3d-basic/resource.yaml +16 -0
  535. package/library/templates/3d-city-kit/resource.yaml +24 -0
  536. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  537. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  538. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  539. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  540. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  541. package/library/templates/3d-racing-game/resource.yaml +21 -0
  542. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  543. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  544. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  545. package/library/templates/README.md +94 -0
  546. package/library/templates/empty/resource.yaml +16 -0
  547. package/library/tools/add-node/resource.yaml +60 -0
  548. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  549. package/library/tools/api-docs/resource.yaml +57 -0
  550. package/library/tools/batch/resource.yaml +52 -0
  551. package/library/tools/camera-bookmark/resource.yaml +73 -0
  552. package/library/tools/check-job/resource.yaml +45 -0
  553. package/library/tools/clear-console/resource.yaml +40 -0
  554. package/library/tools/connect-signal/resource.yaml +63 -0
  555. package/library/tools/create-debug-report/resource.yaml +67 -0
  556. package/library/tools/create-scene/resource.yaml +59 -0
  557. package/library/tools/creator-config/resource.yaml +63 -0
  558. package/library/tools/creator-publish/resource.yaml +73 -0
  559. package/library/tools/creator-releases/resource.yaml +53 -0
  560. package/library/tools/fabricate-3d/resource.yaml +108 -0
  561. package/library/tools/game-control/resource.yaml +84 -0
  562. package/library/tools/game-input/resource.yaml +159 -0
  563. package/library/tools/game-probe/resource.yaml +90 -0
  564. package/library/tools/generate-3d/resource.yaml +112 -0
  565. package/library/tools/generate-audio/resource.yaml +80 -0
  566. package/library/tools/generate-image/resource.yaml +62 -0
  567. package/library/tools/generate-motion/resource.yaml +66 -0
  568. package/library/tools/generate-video/resource.yaml +66 -0
  569. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  570. package/library/tools/get-asset/resource.yaml +42 -0
  571. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  572. package/library/tools/get-console/resource.yaml +69 -0
  573. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  574. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  575. package/library/tools/get-diagnostics/resource.yaml +42 -0
  576. package/library/tools/get-project-context/resource.yaml +45 -0
  577. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  578. package/library/tools/get-scene-tree/resource.yaml +52 -0
  579. package/library/tools/get-script-errors/resource.yaml +45 -0
  580. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  581. package/library/tools/import-asset/resource.yaml +73 -0
  582. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  583. package/library/tools/import-from-url/resource.yaml +51 -0
  584. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  585. package/library/tools/import-hdri/resource.yaml +69 -0
  586. package/library/tools/input-map-bind/resource.yaml +52 -0
  587. package/library/tools/inspect-node/resource.yaml +46 -0
  588. package/library/tools/inspect-resource/resource.yaml +45 -0
  589. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  590. package/library/tools/instantiate-scene/resource.yaml +62 -0
  591. package/library/tools/is-running/resource.yaml +40 -0
  592. package/library/tools/library-feedback/resource.yaml +89 -0
  593. package/library/tools/list-my-assets/resource.yaml +56 -0
  594. package/library/tools/navigation-probe/resource.yaml +85 -0
  595. package/library/tools/open/resource.yaml +80 -0
  596. package/library/tools/open-main-scene/resource.yaml +40 -0
  597. package/library/tools/open-scene/resource.yaml +46 -0
  598. package/library/tools/play/resource.yaml +91 -0
  599. package/library/tools/project-setting/resource.yaml +53 -0
  600. package/library/tools/read-file/resource.yaml +47 -0
  601. package/library/tools/read-library/resource.yaml +67 -0
  602. package/library/tools/recent-events/resource.yaml +71 -0
  603. package/library/tools/remove-node/resource.yaml +51 -0
  604. package/library/tools/replace-node/resource.yaml +57 -0
  605. package/library/tools/replace-text/resource.yaml +61 -0
  606. package/library/tools/run-editor-script/resource.yaml +61 -0
  607. package/library/tools/run-script/resource.yaml +73 -0
  608. package/library/tools/runtime-animate/resource.yaml +140 -0
  609. package/library/tools/runtime-call/resource.yaml +74 -0
  610. package/library/tools/runtime-set/resource.yaml +80 -0
  611. package/library/tools/runtime-spawn/resource.yaml +95 -0
  612. package/library/tools/save-scene/resource.yaml +50 -0
  613. package/library/tools/screenshot/resource.yaml +112 -0
  614. package/library/tools/search-assets/resource.yaml +67 -0
  615. package/library/tools/search-library/resource.yaml +81 -0
  616. package/library/tools/select-node/resource.yaml +48 -0
  617. package/library/tools/set-prop/resource.yaml +64 -0
  618. package/library/tools/set-resource-property/resource.yaml +66 -0
  619. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  620. package/library/tools/snap-to-surface/resource.yaml +90 -0
  621. package/library/tools/snapshot-diff/resource.yaml +58 -0
  622. package/library/tools/starcast/resource.yaml +120 -0
  623. package/library/tools/start-game-task/resource.yaml +91 -0
  624. package/library/tools/stop/resource.yaml +51 -0
  625. package/library/tools/test-placement/resource.yaml +109 -0
  626. package/library/tools/ui-actions/resource.yaml +77 -0
  627. package/library/tools/ui-activate/resource.yaml +88 -0
  628. package/library/tools/ui-screenshot/resource.yaml +63 -0
  629. package/library/tools/ui-tree/resource.yaml +69 -0
  630. package/library/tools/wait-for-event/resource.yaml +84 -0
  631. package/library/tools/world-snapshot/resource.yaml +60 -0
  632. package/library/tools/write-file/resource.yaml +54 -0
  633. package/package.json +21 -15
  634. package/registry/generated/aliases.json +207 -0
  635. package/registry/generated/counts.json +12 -0
  636. package/registry/generated/gemini-extension.json +122 -0
  637. package/registry/generated/index.json +7709 -0
  638. package/registry/generated/marketplace.claude.json +44 -0
  639. package/registry/generated/mcp.json +13 -0
  640. package/registry/generated/plugin.claude.json +135 -0
  641. package/registry/generated/plugin.codex.json +144 -0
  642. package/registry/generated/plugin.cursor.json +134 -0
  643. package/registry/generated/plugin.factory.json +117 -0
  644. package/registry/generated/skills-index.md +242 -0
  645. package/registry/generated/skills-registry.json +1249 -0
  646. package/registry/generated/templates-registry.json +455 -0
  647. package/registry/schemas/allowed-hosts.json +19 -0
  648. package/registry/schemas/collection.schema.json +68 -0
  649. package/registry/schemas/domains.json +96 -0
  650. package/registry/schemas/example.schema.json +11 -0
  651. package/registry/schemas/reference.schema.json +10 -0
  652. package/registry/schemas/resource.schema.json +154 -0
  653. package/registry/schemas/skill.schema.json +14 -0
  654. package/registry/schemas/template.schema.json +46 -0
  655. package/registry/schemas/tool.schema.json +61 -0
  656. package/_persona/summer/SKILL.md +0 -113
  657. package/dist/bin/postinstall.d.ts +0 -2
  658. package/dist/bin/postinstall.js +0 -3
  659. package/dist/commands/cloud.d.ts +0 -2
  660. package/dist/commands/cloud.js +0 -80
  661. package/dist/commands/create.d.ts +0 -3
  662. package/dist/commands/create.js +0 -171
  663. package/dist/commands/install.d.ts +0 -19
  664. package/dist/commands/install.js +0 -194
  665. package/dist/commands/list.js +0 -67
  666. package/dist/commands/logout.js +0 -13
  667. package/dist/commands/logs.d.ts +0 -2
  668. package/dist/commands/logs.js +0 -19
  669. package/dist/commands/open.d.ts +0 -2
  670. package/dist/commands/open.js +0 -32
  671. package/dist/commands/orchestrator.d.ts +0 -8
  672. package/dist/commands/orchestrator.js +0 -143
  673. package/dist/commands/run.d.ts +0 -2
  674. package/dist/commands/run.js +0 -167
  675. package/dist/commands/setup.js +0 -217
  676. package/dist/commands/status.js +0 -46
  677. package/dist/lib/agent-config.d.ts +0 -39
  678. package/dist/lib/agent-config.js +0 -626
  679. package/dist/lib/banner.d.ts +0 -4
  680. package/dist/lib/banner.js +0 -122
  681. package/dist/lib/cloud/api.d.ts +0 -79
  682. package/dist/lib/cloud/api.js +0 -107
  683. package/dist/lib/cloud/apply.d.ts +0 -32
  684. package/dist/lib/cloud/apply.js +0 -294
  685. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  686. package/dist/lib/cloud/checkpoint.js +0 -142
  687. package/dist/lib/cloud/conflicts.d.ts +0 -55
  688. package/dist/lib/cloud/conflicts.js +0 -131
  689. package/dist/lib/cloud/containment.d.ts +0 -8
  690. package/dist/lib/cloud/containment.js +0 -52
  691. package/dist/lib/cloud/diff.d.ts +0 -39
  692. package/dist/lib/cloud/diff.js +0 -138
  693. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  694. package/dist/lib/cloud/engine-bridge.js +0 -139
  695. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  696. package/dist/lib/cloud/hash-cache.js +0 -44
  697. package/dist/lib/cloud/hash.d.ts +0 -10
  698. package/dist/lib/cloud/hash.js +0 -111
  699. package/dist/lib/cloud/http.d.ts +0 -17
  700. package/dist/lib/cloud/http.js +0 -47
  701. package/dist/lib/cloud/lock-path.d.ts +0 -1
  702. package/dist/lib/cloud/lock-path.js +0 -5
  703. package/dist/lib/cloud/lock.d.ts +0 -14
  704. package/dist/lib/cloud/lock.js +0 -143
  705. package/dist/lib/cloud/manifest.d.ts +0 -6
  706. package/dist/lib/cloud/manifest.js +0 -41
  707. package/dist/lib/cloud/paths.d.ts +0 -20
  708. package/dist/lib/cloud/paths.js +0 -90
  709. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  710. package/dist/lib/cloud/project-godot-merge.js +0 -185
  711. package/dist/lib/cloud/rules.d.ts +0 -39
  712. package/dist/lib/cloud/rules.js +0 -159
  713. package/dist/lib/cloud/sync.d.ts +0 -21
  714. package/dist/lib/cloud/sync.js +0 -518
  715. package/dist/lib/cloud/transfer.d.ts +0 -23
  716. package/dist/lib/cloud/transfer.js +0 -184
  717. package/dist/lib/cloud/types.d.ts +0 -62
  718. package/dist/lib/cloud/types.js +0 -1
  719. package/dist/lib/cloud/validate-path.d.ts +0 -23
  720. package/dist/lib/cloud/validate-path.js +0 -103
  721. package/dist/lib/engine.d.ts +0 -51
  722. package/dist/lib/game-task-plan.d.ts +0 -42
  723. package/dist/lib/project-memory.d.ts +0 -33
  724. package/dist/lib/public-surface-paths.d.ts +0 -13
  725. package/dist/lib/public-surface-paths.js +0 -42
  726. package/dist/lib/remote-templates.d.ts +0 -25
  727. package/dist/lib/remote-templates.js +0 -86
  728. package/dist/lib/skills-registry.d.ts +0 -572
  729. package/dist/lib/skills-registry.js +0 -1061
  730. package/dist/lib/version-check.d.ts +0 -106
  731. package/dist/lib/version-check.js +0 -338
  732. package/dist/mcp/tools/cloud-tools.js +0 -42
  733. package/references/mcp-tools-reference.md +0 -199
  734. package/references/template-registry.md +0 -73
  735. package/skills/README.md +0 -103
  736. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  737. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  738. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  739. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  740. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  741. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  742. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  743. package/skills/workflow/gameskill/SKILL.md +0 -120
  744. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  745. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  746. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  747. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  748. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  749. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  750. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  751. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  752. package/skills/workflow/skill-create/SKILL.md +0 -153
  753. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  754. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  755. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  756. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  757. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  758. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  759. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  760. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  761. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  762. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  763. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  764. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  765. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  766. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  767. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  768. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  769. /package/dist/{lib → core}/store.d.ts +0 -0
  770. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  771. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  772. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  773. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  774. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  775. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  776. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  777. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  778. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  779. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  780. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  781. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  782. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  783. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  784. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  785. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  786. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  787. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  788. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  789. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  790. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,134 @@
1
+ import { ToolInputError } from "../tool-errors.js";
2
+ /** Kenney Cloudinary URL pattern: .../summer_art/kenney/3d/{pack-slug}/{filename}.glb */
3
+ const KENNEY_URL_PATTERN = /\/kenney\/3d\/([^/]+)\//;
4
+ function getPackSlugFromUrl(fileUrl) {
5
+ return fileUrl.match(KENNEY_URL_PATTERN)?.[1] ?? null;
6
+ }
7
+ export function buildKenneyTextureUrl(fileUrl) {
8
+ const lastSlash = fileUrl.lastIndexOf("/");
9
+ const base = lastSlash >= 0 ? fileUrl.slice(0, lastSlash) : fileUrl;
10
+ return `${base}/Textures/colormap.png`;
11
+ }
12
+ export async function textureExists(url) {
13
+ try {
14
+ const res = await fetch(url, { method: "HEAD", signal: AbortSignal.timeout(5000) });
15
+ return res.ok;
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ /**
22
+ * Build import entries for Kenney 3D assets: texture first, then GLB.
23
+ * Pack-scoped paths prevent texture collision (each pack has its own Textures/colormap.png).
24
+ */
25
+ async function buildKenneyImportEntries(fileUrl, packSlug, fileName) {
26
+ const textureUrl = buildKenneyTextureUrl(fileUrl);
27
+ const hasTexture = await textureExists(textureUrl);
28
+ if (!hasTexture) {
29
+ return [{ url: fileUrl, path: `res://assets/models/kenney/${packSlug}/${fileName}` }];
30
+ }
31
+ const glbPath = `res://assets/models/kenney/${packSlug}/${fileName}`;
32
+ const glbDir = glbPath.replace(/\/[^/]+$/, "");
33
+ const texturePath = `${glbDir}/Textures/colormap.png`;
34
+ return [
35
+ { url: textureUrl, path: texturePath },
36
+ { url: fileUrl, path: glbPath },
37
+ ];
38
+ }
39
+ function fileNameFromUrl(fileUrl) {
40
+ return fileUrl.split("/").pop()?.split("?")[0] || "asset";
41
+ }
42
+ /** Godot node names reject . : @ / " %; keep letters, digits and underscores. */
43
+ export function sanitizeNodeName(name) {
44
+ return ((name || "Asset")
45
+ .replace(/[^\p{L}\p{N}_]+/gu, "_")
46
+ .replace(/^_+|_+$/g, "") || "Asset");
47
+ }
48
+ async function buildImportEntriesForAsset(asset, targetPath) {
49
+ const fileUrl = asset.importUrl || asset.fileUrl;
50
+ if (!fileUrl)
51
+ throw new Error("Asset has no import URL.");
52
+ const fileName = targetPath?.split("/").pop() || asset.fileName || fileNameFromUrl(fileUrl);
53
+ const packSlug = asset.packSlug ?? getPackSlugFromUrl(fileUrl) ?? "misc";
54
+ if (targetPath) {
55
+ if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
56
+ const textureUrl = buildKenneyTextureUrl(fileUrl);
57
+ const hasTexture = await textureExists(textureUrl);
58
+ if (hasTexture) {
59
+ const glbDir = targetPath.replace(/\/[^/]+$/, "");
60
+ return {
61
+ importPath: targetPath,
62
+ imports: [
63
+ { url: textureUrl, path: `${glbDir}/Textures/colormap.png` },
64
+ { url: fileUrl, path: targetPath },
65
+ ],
66
+ };
67
+ }
68
+ }
69
+ return {
70
+ importPath: targetPath,
71
+ imports: [{ url: fileUrl, path: targetPath }],
72
+ };
73
+ }
74
+ if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
75
+ const imports = await buildKenneyImportEntries(fileUrl, packSlug, fileName);
76
+ return { imports, importPath: imports[imports.length - 1].path };
77
+ }
78
+ const path = asset.type === "3d_model"
79
+ ? `res://assets/models/${fileName}`
80
+ : `res://assets/${fileName}`;
81
+ return { imports: [{ url: fileUrl, path }], importPath: path };
82
+ }
83
+ /** Import a resolved gateway asset into the project (texture + GLB for Kenney
84
+ * packs) and, for 3D models with a `parent`, instantiate it into `scenePath`
85
+ * and save. Throws with a user-facing message on any engine refusal. */
86
+ export async function importResolvedAsset(client, args) {
87
+ const { asset, parent, scenePath, path, name } = args;
88
+ if (parent && !scenePath) {
89
+ throw new ToolInputError("scenePath is required when importing an asset into a scene");
90
+ }
91
+ const { imports, importPath } = await buildImportEntriesForAsset(asset, path);
92
+ const importResult = imports.length === 1
93
+ ? await client.executeOps([
94
+ { op: "ImportFromUrl", url: imports[0].url, path: imports[0].path },
95
+ ])
96
+ : await client.executeOps([{ op: "ImportFromUrlBatch", imports }]);
97
+ const importReceipts = importResult?.results ?? [];
98
+ const importFailure = importReceipts.find((receipt) => receipt?.ok === false);
99
+ if (importResult?.status === "error" || importFailure) {
100
+ throw new Error(importFailure?.error || "Could not import asset. Check engine logs.");
101
+ }
102
+ let addedToScene = false;
103
+ let sceneReceipt = null;
104
+ if (parent && asset.type === "3d_model") {
105
+ sceneReceipt = await client.executeIdentityBoundOps([
106
+ {
107
+ op: "InstantiateScene",
108
+ parent,
109
+ scene: importPath,
110
+ name: sanitizeNodeName(name || asset.title),
111
+ },
112
+ { op: "SaveScene" },
113
+ ], { scenePath });
114
+ const placementReceipts = sceneReceipt?.results ?? [];
115
+ const placementFailure = placementReceipts.find((receipt) => receipt?.ok !== true);
116
+ if (sceneReceipt?.status === "error" ||
117
+ placementReceipts.length !== 2 ||
118
+ placementFailure) {
119
+ throw new Error(placementFailure?.error || `Could not add asset to ${scenePath}`);
120
+ }
121
+ addedToScene = true;
122
+ }
123
+ return {
124
+ success: true,
125
+ assetId: asset.id,
126
+ asset: asset.title,
127
+ type: asset.type,
128
+ importedTo: importPath,
129
+ addedToScene,
130
+ parent: parent || null,
131
+ scenePath: scenePath || null,
132
+ sceneReceipt,
133
+ };
134
+ }
@@ -0,0 +1,98 @@
1
+ export declare const CAMERA_BOOKMARK_ACTIONS: readonly ["save", "list", "delete"];
2
+ export type CameraBookmarkAction = (typeof CAMERA_BOOKMARK_ACTIONS)[number];
3
+ /** Engine op kind per action — the pre-flight checks THIS kind, not all three. */
4
+ export declare const CAMERA_BOOKMARK_OPS: Record<CameraBookmarkAction, string>;
5
+ /** What the engine_lacks_op result tells the model to do instead. */
6
+ export declare const CAMERA_BOOKMARK_FALLBACK = "pass the pose explicitly on every capture with summer_screenshot framing:\"free\" (camera_position + camera_look_at), or render through a Camera3D placed in the scene with framing:\"camera\"";
7
+ /** Bookmark name grammar (preview_ops.cpp): 1-64 of [A-Za-z0-9_-]. */
8
+ export declare const BOOKMARK_NAME_PATTERN: RegExp;
9
+ export interface CameraBookmarkArgs {
10
+ action: CameraBookmarkAction;
11
+ name?: string;
12
+ /** Godot literal, e.g. "Vector3(0, 5, 10)". Goes together with look_at. */
13
+ position?: string;
14
+ look_at?: string;
15
+ fov?: number;
16
+ }
17
+ /** Build the engine op for one bookmark action. Throws ToolInputError (nothing
18
+ * sent) for a missing/invalid name or a half-given pose. */
19
+ export declare function buildCameraBookmarkOp(args: CameraBookmarkArgs): Record<string, unknown>;
20
+ export declare const PRESET_FRAMINGS: readonly ["auto", "iso", "top", "front", "back", "left", "right", "camera"];
21
+ export declare const FIXED_POSE_FRAMINGS: readonly ["free", "bookmark"];
22
+ /** The framing enum both faces expose. "bookmark" pairs with `bookmark_name`
23
+ * (the wire form is "bookmark:<name>"; the enum stays closed so the
24
+ * descriptor/zod parity holds and agents see a finite list). */
25
+ export declare const SCREENSHOT_FRAMINGS: readonly ["auto", "iso", "top", "front", "back", "left", "right", "camera", "free", "bookmark"];
26
+ export type ScreenshotFraming = (typeof SCREENSHOT_FRAMINGS)[number];
27
+ export interface ScenePreviewArgs {
28
+ scenePath?: string;
29
+ framing?: ScreenshotFraming;
30
+ bookmark_name?: string;
31
+ size?: [number, number];
32
+ nodePath?: string;
33
+ camera_path?: string;
34
+ camera_position?: string;
35
+ camera_look_at?: string;
36
+ fov?: number;
37
+ marks?: boolean;
38
+ max_marks?: number;
39
+ }
40
+ /** The api-client scenePreview input, with the framing resolved to its wire
41
+ * form ("bookmark" + bookmark_name -> "bookmark:<name>"). */
42
+ export interface ScenePreviewInput {
43
+ scenePath?: string;
44
+ /** Wire framing: a preset, "free", or "bookmark:<name>". */
45
+ framing?: string;
46
+ size?: [number, number];
47
+ nodePath?: string;
48
+ cameraPath?: string;
49
+ cameraPosition?: string;
50
+ cameraLookAt?: string;
51
+ fov?: number;
52
+ marks?: boolean;
53
+ maxMarks?: number;
54
+ }
55
+ export declare const MAX_MARKS_CAP = 128;
56
+ /**
57
+ * Resolve screenshot args into the ScenePreview input. Infers framing "free"
58
+ * from a camera pose and "bookmark" from a bookmark_name when `framing` is
59
+ * omitted; refuses (ToolInputError, nothing sent) when they contradict a
60
+ * preset, when "free" lacks half its pose, or when "bookmark" has no name.
61
+ */
62
+ export declare function buildScenePreviewInput(args: ScenePreviewArgs): ScenePreviewInput;
63
+ /** True for the wave-I fixed-pose framings ("free", "bookmark:<name>"). */
64
+ export declare function isFixedPoseFraming(wireFraming: string | undefined): boolean;
65
+ export interface SceneMark {
66
+ id: number;
67
+ path: string;
68
+ class: string;
69
+ screen_rect?: {
70
+ x: number;
71
+ y: number;
72
+ w: number;
73
+ h: number;
74
+ };
75
+ }
76
+ export interface SceneMarksSummary {
77
+ marks: SceneMark[];
78
+ skipped?: number;
79
+ candidates?: number;
80
+ truncated?: boolean;
81
+ maxMarks?: number;
82
+ /** "2d_scene" when the engine could not mark this scene. */
83
+ unsupported?: string;
84
+ }
85
+ /** Read the Set-of-Mark fields off a ScenePreview payload (`metadata` of the
86
+ * EngineSnapshot). Returns null when the payload carries no marks key at all —
87
+ * i.e. the engine ignored `marks:true` (an older build). */
88
+ export declare function readSceneMarks(payload: Record<string, unknown> | undefined): SceneMarksSummary | null;
89
+ export interface CameraPose {
90
+ position?: string;
91
+ look_at?: string;
92
+ fov?: number;
93
+ }
94
+ /** camera_pose {position, look_at, fov} as the engine echoes it (3dp literals). */
95
+ export declare function readCameraPose(payload: Record<string, unknown> | undefined): CameraPose | null;
96
+ /** One compact line per mark so the model can map a numbered label in the
97
+ * image to a node path: `1 -> Props/Crate_02 (MeshInstance3D) @ 120,80 200x140`. */
98
+ export declare function formatSceneMarks(summary: SceneMarksSummary): string[];
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Camera viewpoints (perception): camera bookmarks and the fixed-pose
3
+ * ScenePreview framings. Shared by the MCP tools (src/mcp/tools/visual-tools.ts)
4
+ * and the CLI dispatcher so both faces validate the same way and send the same
5
+ * op.
6
+ *
7
+ * Engine contract (doc/SUMMER/SCENE_SCRIPTING_CONTRACTS.md, "Wave I"):
8
+ * SaveCameraBookmark { name, position?, look_at?, fov? } -> pose_source
9
+ * ListCameraBookmarks {} -> names, bookmarks
10
+ * DeleteCameraBookmark { name } -> remaining
11
+ * and ScenePreview framings "free" (camera_position, camera_look_at, fov) and
12
+ * "bookmark:<name>" plus the Set-of-Mark overlay (marks, max_marks).
13
+ *
14
+ * Bookmarks live in the PROJECT (res://.summer/camera_bookmarks.json), so a
15
+ * viewpoint saved once is the same viewpoint next session and on another
16
+ * machine — the point is before/after screenshots that actually line up.
17
+ */
18
+ import { ToolInputError } from "../tool-errors.js";
19
+ export const CAMERA_BOOKMARK_ACTIONS = ["save", "list", "delete"];
20
+ /** Engine op kind per action — the pre-flight checks THIS kind, not all three. */
21
+ export const CAMERA_BOOKMARK_OPS = {
22
+ save: "SaveCameraBookmark",
23
+ list: "ListCameraBookmarks",
24
+ delete: "DeleteCameraBookmark",
25
+ };
26
+ /** What the engine_lacks_op result tells the model to do instead. */
27
+ export const CAMERA_BOOKMARK_FALLBACK = "pass the pose explicitly on every capture with summer_screenshot framing:\"free\" (camera_position + camera_look_at), or render through a Camera3D placed in the scene with framing:\"camera\"";
28
+ /** Bookmark name grammar (preview_ops.cpp): 1-64 of [A-Za-z0-9_-]. */
29
+ export const BOOKMARK_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
30
+ function requireBookmarkName(name, action) {
31
+ const trimmed = name?.trim() ?? "";
32
+ if (!trimmed) {
33
+ throw new ToolInputError(`action "${action}" needs a bookmark name (1-64 of A-Z a-z 0-9 _ -). Nothing was sent.`);
34
+ }
35
+ if (!BOOKMARK_NAME_PATTERN.test(trimmed)) {
36
+ throw new ToolInputError(`Bookmark name "${trimmed}" is invalid — use 1-64 characters from A-Z a-z 0-9 _ - (no spaces or slashes). Nothing was sent.`);
37
+ }
38
+ return trimmed;
39
+ }
40
+ /** Build the engine op for one bookmark action. Throws ToolInputError (nothing
41
+ * sent) for a missing/invalid name or a half-given pose. */
42
+ export function buildCameraBookmarkOp(args) {
43
+ const kind = CAMERA_BOOKMARK_OPS[args.action];
44
+ if (!kind) {
45
+ throw new ToolInputError(`Unknown action "${String(args.action)}". Use save, list, or delete.`);
46
+ }
47
+ if (args.action === "list")
48
+ return { op: kind };
49
+ const name = requireBookmarkName(args.name, args.action);
50
+ if (args.action === "delete")
51
+ return { op: kind, name };
52
+ const op = { op: kind, name };
53
+ const position = args.position?.trim();
54
+ const lookAt = args.look_at?.trim();
55
+ if ((position && !lookAt) || (!position && lookAt)) {
56
+ throw new ToolInputError("position and look_at go together: pass both as Godot literals (\"Vector3(x, y, z)\") for an explicit pose, or omit both to capture the CURRENT editor 3D viewport camera. Nothing was sent.");
57
+ }
58
+ if (position && lookAt) {
59
+ op.position = position;
60
+ op.look_at = lookAt;
61
+ }
62
+ if (args.fov !== undefined)
63
+ op.fov = args.fov;
64
+ return op;
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // ScenePreview framing (summer_screenshot target:"scene")
68
+ // ---------------------------------------------------------------------------
69
+ export const PRESET_FRAMINGS = ["auto", "iso", "top", "front", "back", "left", "right", "camera"];
70
+ export const FIXED_POSE_FRAMINGS = ["free", "bookmark"];
71
+ /** The framing enum both faces expose. "bookmark" pairs with `bookmark_name`
72
+ * (the wire form is "bookmark:<name>"; the enum stays closed so the
73
+ * descriptor/zod parity holds and agents see a finite list). */
74
+ export const SCREENSHOT_FRAMINGS = [...PRESET_FRAMINGS, ...FIXED_POSE_FRAMINGS];
75
+ export const MAX_MARKS_CAP = 128;
76
+ /**
77
+ * Resolve screenshot args into the ScenePreview input. Infers framing "free"
78
+ * from a camera pose and "bookmark" from a bookmark_name when `framing` is
79
+ * omitted; refuses (ToolInputError, nothing sent) when they contradict a
80
+ * preset, when "free" lacks half its pose, or when "bookmark" has no name.
81
+ */
82
+ export function buildScenePreviewInput(args) {
83
+ const position = args.camera_position?.trim();
84
+ const lookAt = args.camera_look_at?.trim();
85
+ const bookmark = args.bookmark_name?.trim();
86
+ let framing = args.framing;
87
+ if (!framing) {
88
+ if (bookmark)
89
+ framing = "bookmark";
90
+ else if (position || lookAt)
91
+ framing = "free";
92
+ }
93
+ if (framing === "bookmark") {
94
+ if (!bookmark) {
95
+ throw new ToolInputError('framing:"bookmark" needs bookmark_name — the name you saved with summer_camera_bookmark (list them with action:"list"). Nothing was sent.');
96
+ }
97
+ if (!BOOKMARK_NAME_PATTERN.test(bookmark)) {
98
+ throw new ToolInputError(`bookmark_name "${bookmark}" is invalid — bookmark names are 1-64 characters from A-Z a-z 0-9 _ -. Nothing was sent.`);
99
+ }
100
+ if (position || lookAt) {
101
+ throw new ToolInputError('framing:"bookmark" takes its pose from the bookmark; drop camera_position/camera_look_at, or use framing:"free" with both. Nothing was sent.');
102
+ }
103
+ }
104
+ else if (framing === "free") {
105
+ if (!position || !lookAt) {
106
+ throw new ToolInputError('framing:"free" needs BOTH camera_position and camera_look_at as Godot literals ("Vector3(x, y, z)"). Nothing was sent.');
107
+ }
108
+ if (bookmark) {
109
+ throw new ToolInputError('framing:"free" and bookmark_name contradict each other — use framing:"bookmark" with bookmark_name, or framing:"free" with a pose. Nothing was sent.');
110
+ }
111
+ }
112
+ else if (framing && (position || lookAt || bookmark)) {
113
+ throw new ToolInputError(`framing:"${framing}" is a fixed preset; camera_position/camera_look_at need framing:"free" and bookmark_name needs framing:"bookmark". Nothing was sent.`);
114
+ }
115
+ if (args.max_marks !== undefined && (!Number.isInteger(args.max_marks) || args.max_marks < 1 || args.max_marks > MAX_MARKS_CAP)) {
116
+ throw new ToolInputError(`max_marks must be an integer from 1 through ${MAX_MARKS_CAP}. Nothing was sent.`);
117
+ }
118
+ const input = {};
119
+ if (args.scenePath)
120
+ input.scenePath = args.scenePath;
121
+ if (framing)
122
+ input.framing = framing === "bookmark" ? `bookmark:${bookmark}` : framing;
123
+ if (args.size)
124
+ input.size = args.size;
125
+ if (args.nodePath)
126
+ input.nodePath = args.nodePath;
127
+ if (args.camera_path)
128
+ input.cameraPath = args.camera_path;
129
+ if (framing === "free") {
130
+ input.cameraPosition = position;
131
+ input.cameraLookAt = lookAt;
132
+ }
133
+ if (args.fov !== undefined && (framing === "free" || framing === "bookmark"))
134
+ input.fov = args.fov;
135
+ if (args.marks !== undefined)
136
+ input.marks = args.marks;
137
+ if (args.max_marks !== undefined)
138
+ input.maxMarks = args.max_marks;
139
+ return input;
140
+ }
141
+ /** True for the wave-I fixed-pose framings ("free", "bookmark:<name>"). */
142
+ export function isFixedPoseFraming(wireFraming) {
143
+ return wireFraming === "free" || (wireFraming?.startsWith("bookmark:") ?? false);
144
+ }
145
+ function num(value) {
146
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
147
+ }
148
+ /** Read the Set-of-Mark fields off a ScenePreview payload (`metadata` of the
149
+ * EngineSnapshot). Returns null when the payload carries no marks key at all —
150
+ * i.e. the engine ignored `marks:true` (an older build). */
151
+ export function readSceneMarks(payload) {
152
+ if (!payload || !("marks" in payload))
153
+ return null;
154
+ const raw = Array.isArray(payload.marks) ? payload.marks : [];
155
+ const marks = [];
156
+ for (const entry of raw) {
157
+ if (!entry || typeof entry !== "object")
158
+ continue;
159
+ const mark = entry;
160
+ const id = num(mark.id);
161
+ if (id === undefined)
162
+ continue;
163
+ const rect = mark.screen_rect;
164
+ const x = num(rect?.x);
165
+ const y = num(rect?.y);
166
+ const w = num(rect?.w);
167
+ const h = num(rect?.h);
168
+ marks.push({
169
+ id,
170
+ path: typeof mark.path === "string" ? mark.path : "?",
171
+ class: typeof mark.class === "string" ? mark.class : "?",
172
+ ...(x !== undefined && y !== undefined && w !== undefined && h !== undefined
173
+ ? { screen_rect: { x, y, w, h } }
174
+ : {}),
175
+ });
176
+ }
177
+ return {
178
+ marks,
179
+ skipped: num(payload.marks_skipped),
180
+ candidates: num(payload.marks_candidates),
181
+ truncated: payload.marks_truncated === true ? true : undefined,
182
+ maxMarks: num(payload.max_marks),
183
+ unsupported: typeof payload.marks_unsupported === "string" ? payload.marks_unsupported : undefined,
184
+ };
185
+ }
186
+ /** camera_pose {position, look_at, fov} as the engine echoes it (3dp literals). */
187
+ export function readCameraPose(payload) {
188
+ const raw = payload?.camera_pose;
189
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
190
+ return null;
191
+ const pose = raw;
192
+ return {
193
+ position: typeof pose.position === "string" ? pose.position : undefined,
194
+ look_at: typeof pose.look_at === "string" ? pose.look_at : undefined,
195
+ fov: num(pose.fov),
196
+ };
197
+ }
198
+ /** One compact line per mark so the model can map a numbered label in the
199
+ * image to a node path: `1 -> Props/Crate_02 (MeshInstance3D) @ 120,80 200x140`. */
200
+ export function formatSceneMarks(summary) {
201
+ const lines = [];
202
+ if (summary.unsupported) {
203
+ lines.push(`marks: unsupported for this scene (${summary.unsupported}) — no overlay was drawn; the image carries no numbered labels.`);
204
+ return lines;
205
+ }
206
+ const counts = [];
207
+ if (summary.candidates !== undefined)
208
+ counts.push(`${summary.candidates} candidate(s)`);
209
+ if (summary.skipped)
210
+ counts.push(`${summary.skipped} skipped off-screen/extent-less`);
211
+ if (summary.truncated)
212
+ counts.push(`truncated at max_marks ${summary.maxMarks ?? "?"}`);
213
+ lines.push(`marks: ${summary.marks.length} numbered label(s) drawn${counts.length ? ` (${counts.join(", ")})` : ""}` +
214
+ (summary.marks.length ? " — label -> node path:" : "."));
215
+ for (const mark of summary.marks) {
216
+ const rect = mark.screen_rect
217
+ ? ` @ ${Math.round(mark.screen_rect.x)},${Math.round(mark.screen_rect.y)} ${Math.round(mark.screen_rect.w)}x${Math.round(mark.screen_rect.h)}`
218
+ : "";
219
+ lines.push(` ${mark.id} -> ${mark.path} (${mark.class})${rect}`);
220
+ }
221
+ return lines;
222
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * capture — frame capture with the toolkit-side honesty checks, ONE copy for
3
+ * both faces (src/mcp/tools/visual-tools.ts renders the MCP caption from it;
4
+ * src/core/capabilities/tool-dispatch.ts returns the receipt as JSON).
5
+ *
6
+ * Frame honesty (E2E 2026-09-03, F-01 / F-05):
7
+ * - Every frame goes through a zero-dependency content check
8
+ * (./frame-quality.ts). A "viewport" frame that comes back flat (uniformly
9
+ * black/grey) is recaptured ONCE after a settle delay; the result says which
10
+ * frame it is and what the first one looked like, so no face can present a
11
+ * blank frame as evidence about the scene. Root-cause status is written in
12
+ * frame-quality.ts: the engine reads the editor SubViewport texture as-is
13
+ * (no forced draw, no blank retry), consistent with — but not proven to be —
14
+ * a not-yet-redrawn 2D subviewport right after the editor switched tabs.
15
+ * - The "scene" target's no-camera confession is phrased for the scene's
16
+ * kind: a 3D scene without a Camera3D plays grey/black; a 2D scene without
17
+ * a Camera2D simply plays from the origin and is NOT an error. The engine
18
+ * receipt reports scene_has_camera for both kinds without saying which, so
19
+ * the kind comes from a scene-tree read (./scene-kind.ts).
20
+ */
21
+ import type { EngineSnapshot } from "../api-client.js";
22
+ import { type FrameQuality } from "./frame-quality.js";
23
+ import { type SceneKindResult } from "./scene-kind.js";
24
+ import type { ScenePreviewInput } from "./camera-view.js";
25
+ /** Settle delay before the single automatic viewport recapture. */
26
+ export declare const VIEWPORT_RECAPTURE_DELAY_MS = 700;
27
+ export interface RecaptureInfo {
28
+ delayMs: number;
29
+ /** Analysis of the flat frame that triggered the recapture. */
30
+ firstFrame: FrameQuality;
31
+ /** Set when the second capture itself failed — the FIRST frame is returned. */
32
+ error?: string;
33
+ }
34
+ /** EngineSnapshot plus the toolkit-side honesty fields both faces read. */
35
+ export type CaptureResult = EngineSnapshot & {
36
+ frameQuality?: FrameQuality;
37
+ recapture?: RecaptureInfo;
38
+ sceneKind?: SceneKindResult;
39
+ };
40
+ /** The ScenePreview input in its wire form (framing resolved to a preset,
41
+ * "free", or "bookmark:<name>"; camera pose / marks fields) is owned by
42
+ * ./camera-view.ts, where both faces build it from their arguments. */
43
+ export type { ScenePreviewInput } from "./camera-view.js";
44
+ /** The engine reads capture needs — a structural subset of EngineApiClient. */
45
+ export interface CaptureClient {
46
+ viewportSnapshot(): Promise<EngineSnapshot>;
47
+ scenePreview(input?: ScenePreviewInput): Promise<EngineSnapshot>;
48
+ gameSnapshot(): Promise<EngineSnapshot>;
49
+ getSceneState(scenePath?: string, options?: {
50
+ depth?: number;
51
+ limit?: number;
52
+ }): Promise<unknown>;
53
+ }
54
+ /** Stamp the content check onto a successful frame. */
55
+ export declare function analyzedSnapshot(snap: EngineSnapshot): CaptureResult;
56
+ /** Viewport capture with ONE automatic recapture when the first frame is flat. */
57
+ export declare function captureViewport(client: CaptureClient): Promise<CaptureResult>;
58
+ /** Offscreen scene render; when the engine confesses the scene has no camera
59
+ * of its own, read the tree to learn whether that is a 3D or a 2D scene. */
60
+ export declare function captureScene(client: CaptureClient, input: ScenePreviewInput): Promise<CaptureResult>;
61
+ /** Running-game frame with the content check (no recapture: a booting or
62
+ * fading game legitimately shows a flat frame). */
63
+ export declare function captureGame(client: CaptureClient): Promise<CaptureResult>;
@@ -0,0 +1,67 @@
1
+ import { analyzeFrameBase64 } from "./frame-quality.js";
2
+ import { classifySceneKindFromTree } from "./scene-kind.js";
3
+ import { sleep } from "../util/sleep.js";
4
+ /** Settle delay before the single automatic viewport recapture. */
5
+ export const VIEWPORT_RECAPTURE_DELAY_MS = 700;
6
+ /** Bounds for the scene-kind tree read (the engine honours depth/limit only on
7
+ * scene-targeted reads; an untargeted read is the depth-2 snapshot). */
8
+ const SCENE_KIND_TREE_DEPTH = 8;
9
+ const SCENE_KIND_TREE_LIMIT = 600;
10
+ /** Stamp the content check onto a successful frame. */
11
+ export function analyzedSnapshot(snap) {
12
+ if (!snap.ok || !snap.base64)
13
+ return snap;
14
+ return { ...snap, frameQuality: analyzeFrameBase64(snap.base64, snap.mime) };
15
+ }
16
+ function errorMessage(err) {
17
+ return err instanceof Error ? err.message : String(err);
18
+ }
19
+ /** Viewport capture with ONE automatic recapture when the first frame is flat. */
20
+ export async function captureViewport(client) {
21
+ const first = analyzedSnapshot(await client.viewportSnapshot());
22
+ const quality = first.frameQuality;
23
+ if (!quality?.analyzable || !quality.flat)
24
+ return first;
25
+ await sleep(VIEWPORT_RECAPTURE_DELAY_MS);
26
+ const recapture = { delayMs: VIEWPORT_RECAPTURE_DELAY_MS, firstFrame: quality };
27
+ let second;
28
+ try {
29
+ second = await client.viewportSnapshot();
30
+ }
31
+ catch (err) {
32
+ return { ...first, recapture: { ...recapture, error: errorMessage(err) } };
33
+ }
34
+ if (!second.ok || !second.base64) {
35
+ return {
36
+ ...first,
37
+ recapture: { ...recapture, error: second.error ?? "recapture returned no image data" },
38
+ };
39
+ }
40
+ return { ...analyzedSnapshot(second), recapture };
41
+ }
42
+ /** Offscreen scene render; when the engine confesses the scene has no camera
43
+ * of its own, read the tree to learn whether that is a 3D or a 2D scene. */
44
+ export async function captureScene(client, input) {
45
+ const snap = analyzedSnapshot(await client.scenePreview(input));
46
+ if (!snap.ok || !snap.base64 || snap.sceneHasCamera !== false)
47
+ return snap;
48
+ return { ...snap, sceneKind: await readSceneKind(client, input.scenePath) };
49
+ }
50
+ /** Running-game frame with the content check (no recapture: a booting or
51
+ * fading game legitimately shows a flat frame). */
52
+ export async function captureGame(client) {
53
+ return analyzedSnapshot(await client.gameSnapshot());
54
+ }
55
+ async function readSceneKind(client, scenePath) {
56
+ try {
57
+ const trimmed = scenePath?.trim();
58
+ const targeted = trimmed && trimmed !== "." && trimmed !== "./" ? trimmed : undefined;
59
+ const state = targeted
60
+ ? await client.getSceneState(targeted, { depth: SCENE_KIND_TREE_DEPTH, limit: SCENE_KIND_TREE_LIMIT })
61
+ : await client.getSceneState();
62
+ return classifySceneKindFromTree(state);
63
+ }
64
+ catch (err) {
65
+ return { kind: "unknown", reason: errorMessage(err) };
66
+ }
67
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Scope note stamped on every shaped summer_get_console result.
3
+ *
4
+ * E2E 2026-09-03 F-07: right after a play session that produced four runtime
5
+ * errors, `summer_get_console` reported `errors 0` — correctly. The editor
6
+ * Output panel (EditorLog) never received them: a running game's errors are
7
+ * collected by the debugger (summer_get_debugger_errors / the `debugger`
8
+ * section of summer_get_diagnostics). The engine types console lines straight
9
+ * from EditorLog::MSG_TYPE (error / warning / std / editor — debug_ops.cpp
10
+ * GetConsoleOutput), so dropping `std` lines by default hides nothing that
11
+ * was an error; the trap is treating this tool's count as the post-play
12
+ * verdict at all. The note travels with the result because tool descriptions
13
+ * are read once and results are read every time.
14
+ */
15
+ export declare const CONSOLE_SCOPE_NOTE = "Editor Output panel only. Runtime errors from a played game are collected by the debugger, not here \u2014 this count is NOT the post-play verdict. Read summer_get_diagnostics (console + debugger + script errors together) or summer_get_debugger_errors for that.";
16
+ /** Attach `_scope` to a shaped console result. Non-object results pass through. */
17
+ export declare function withConsoleScope<T>(result: T): T;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Scope note stamped on every shaped summer_get_console result.
3
+ *
4
+ * E2E 2026-09-03 F-07: right after a play session that produced four runtime
5
+ * errors, `summer_get_console` reported `errors 0` — correctly. The editor
6
+ * Output panel (EditorLog) never received them: a running game's errors are
7
+ * collected by the debugger (summer_get_debugger_errors / the `debugger`
8
+ * section of summer_get_diagnostics). The engine types console lines straight
9
+ * from EditorLog::MSG_TYPE (error / warning / std / editor — debug_ops.cpp
10
+ * GetConsoleOutput), so dropping `std` lines by default hides nothing that
11
+ * was an error; the trap is treating this tool's count as the post-play
12
+ * verdict at all. The note travels with the result because tool descriptions
13
+ * are read once and results are read every time.
14
+ */
15
+ export const CONSOLE_SCOPE_NOTE = "Editor Output panel only. Runtime errors from a played game are collected by the debugger, not here — this count is NOT the post-play verdict. Read summer_get_diagnostics (console + debugger + script errors together) or summer_get_debugger_errors for that.";
16
+ /** Attach `_scope` to a shaped console result. Non-object results pass through. */
17
+ export function withConsoleScope(result) {
18
+ if (!result || typeof result !== "object" || Array.isArray(result))
19
+ return result;
20
+ return { ...result, _scope: CONSOLE_SCOPE_NOTE };
21
+ }
@@ -1,27 +1,6 @@
1
- export type CreatorOperation = "publish" | "releases" | "logs";
1
+ export type CreatorOperation = "publish" | "releases";
2
2
  export type CreatorFace = "cli" | "mcp";
3
3
  export declare const CREATOR_API_CONTRACT: "summer.creator.v1";
4
- export declare const CREATOR_API_AUDIT: {
5
- readonly auditedAt: "2026-07-30";
6
- readonly repository: "SummerEngine/summercraft";
7
- readonly contract: "summer.creator.v1";
8
- readonly credentialAudience: "summercraft-creator";
9
- readonly requiredServerScope: "publish";
10
- readonly operations: {
11
- readonly publish: {
12
- readonly supported: true;
13
- readonly route: "/api/creator/v1/publish";
14
- };
15
- readonly releases: {
16
- readonly supported: true;
17
- readonly route: "/api/creator/v1/releases";
18
- };
19
- readonly logs: {
20
- readonly supported: false;
21
- readonly route: null;
22
- };
23
- };
24
- };
25
4
  export declare class CreatorOperationError extends Error {
26
5
  readonly code: string;
27
6
  readonly operation: CreatorOperation;
@@ -84,10 +63,3 @@ export interface CreatorReleasesResult {
84
63
  nextCursor: string | null;
85
64
  }
86
65
  export declare function listCreatorReleases(input: ListCreatorReleasesInput, overrides?: Partial<CreatorClientDependencies>): Promise<CreatorReleasesResult>;
87
- export interface ReadCreatorLogsInput {
88
- projectId?: string;
89
- releaseId?: string;
90
- limit?: number;
91
- face: CreatorFace;
92
- }
93
- export declare function readCreatorLogs(input: ReadCreatorLogsInput): Promise<never>;