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
@@ -1,23 +1,11 @@
1
- import { mkdir, writeFile } from "fs/promises";
1
+ import { mkdir, readdir, rm, stat, writeFile } from "fs/promises";
2
2
  import { tmpdir } from "os";
3
3
  import { join } from "path";
4
4
  import { randomUUID } from "node:crypto";
5
- import { getApiToken, getApiPort, checkEngineHealth, resolveEngineConnection, } from "./engine.js";
5
+ import { checkEngineHealth, discoverRegistryConnection, engineNotRunningError, engineSelectionFromEnv, getApiPort, getApiToken, resolveEngineConnection, } from "./engine.js";
6
+ import { asRecord, boolFrom, numberFrom, stringFrom } from "./util/json.js";
6
7
  import { classifyOpsResponse, pollOpToTerminal, } from "./async-op-lifecycle.js";
7
- function asRecord(value) {
8
- return value && typeof value === "object" && !Array.isArray(value)
9
- ? value
10
- : null;
11
- }
12
- function stringFrom(value) {
13
- return typeof value === "string" && value.length > 0 ? value : undefined;
14
- }
15
- function numberFrom(value) {
16
- return typeof value === "number" ? value : undefined;
17
- }
18
- function boolFrom(value) {
19
- return typeof value === "boolean" ? value : undefined;
20
- }
8
+ import { pickPlayDeterminism } from "./capabilities/play-determinism.js";
21
9
  function findSnapshotPayload(value) {
22
10
  const record = asRecord(value);
23
11
  if (!record)
@@ -65,6 +53,38 @@ function withoutImageData(payload) {
65
53
  }
66
54
  return metadata;
67
55
  }
56
+ /** rebind() could not re-read engine health; the session identity is unchanged. */
57
+ export class EngineRebindError extends Error {
58
+ constructor(message) {
59
+ super(message);
60
+ this.name = "EngineRebindError";
61
+ }
62
+ }
63
+ const SNAPSHOT_TTL_MS = 24 * 60 * 60 * 1000;
64
+ /**
65
+ * Snapshot files otherwise accumulate in tmpdir for the life of the machine.
66
+ * Remove those older than 24h on each write. Best-effort by contract: a
67
+ * failed reap must never fail (or slow down) the capture that triggered it.
68
+ */
69
+ async function reapStaleSnapshots(dir) {
70
+ try {
71
+ const cutoff = Date.now() - SNAPSHOT_TTL_MS;
72
+ for (const name of await readdir(dir)) {
73
+ const full = join(dir, name);
74
+ try {
75
+ const info = await stat(full);
76
+ if (info.isFile() && info.mtimeMs < cutoff)
77
+ await rm(full, { force: true });
78
+ }
79
+ catch {
80
+ // per-file failure (raced by another process, permissions): skip it
81
+ }
82
+ }
83
+ }
84
+ catch {
85
+ // unreadable directory: nothing to reap
86
+ }
87
+ }
68
88
  export class EngineApiClient {
69
89
  port;
70
90
  token;
@@ -75,6 +95,14 @@ export class EngineApiClient {
75
95
  // supplied a projectIdHash.
76
96
  targetIdentity;
77
97
  selection;
98
+ // Set only when the no-selection connect found its editor through the
99
+ // instance registry (no live pointer): credentialsChanged then re-runs the
100
+ // registry lookup with the same options instead of reading the pointer.
101
+ registryDiscovery = null;
102
+ // The most recent /api/health seen at connect/rebind. Carries the engine's
103
+ // capability advert (opKinds, singleOnlyOps) so tools can fail closed on a
104
+ // provably missing op without a second health round trip per call.
105
+ lastHealth = null;
78
106
  constructor(port, token, targetIdentity = {}, selection = null) {
79
107
  this.port = port;
80
108
  this.token = token;
@@ -84,34 +112,73 @@ export class EngineApiClient {
84
112
  : { ...targetIdentity };
85
113
  this.selection = selection ? { ...selection } : null;
86
114
  }
87
- static async connect(selection) {
88
- if (selection) {
89
- const connection = await resolveEngineConnection(selection);
90
- return new EngineApiClient(connection.port, connection.token, {
115
+ /**
116
+ * With a selection (the MCP server: --project / --instance / its cwd) the
117
+ * registry decides — resolveEngineConnection. Without one (the CLI face):
118
+ * SUMMER_ENGINE_PROJECT / SUMMER_ENGINE_INSTANCE_ID when set (same names the
119
+ * MCP server reads), else the global pointer (~/.summer/api-token + api-port)
120
+ * when it names an engine that answers /api/health — today's behaviour,
121
+ * unchanged — else the instance registry (discoverRegistryConnection), so an
122
+ * editor launched `--summer-no-publish` or a second editor is still found.
123
+ * The pointer is read through getApiPort/getApiToken/checkEngineHealth so
124
+ * tests that stub those readers never touch the real ~/.summer. `discovery`
125
+ * is a test seam (fake ~/.summer, cwd, env).
126
+ */
127
+ static async connect(selection, discovery = {}) {
128
+ const envSelection = selection ? null : engineSelectionFromEnv(discovery.env);
129
+ const effective = selection ?? envSelection;
130
+ if (effective) {
131
+ const connection = await resolveEngineConnection(effective, {
132
+ summerDir: discovery.summerDir,
133
+ nowMs: discovery.nowMs,
134
+ });
135
+ const client = new EngineApiClient(connection.port, connection.token, {
91
136
  instanceId: connection.health.instanceId,
92
137
  projectId: connection.health.projectId,
93
138
  projectIdHash: connection.health.projectIdHash,
94
- }, { ...selection });
95
- }
96
- const port = await getApiPort();
97
- const token = await getApiToken();
98
- if (!token) {
99
- throw new Error("Summer Engine is not running (no api-token found). Open Summer Engine first.");
100
- }
101
- const health = await checkEngineHealth(port);
102
- if (!health) {
103
- throw new Error(`Summer Engine is not responding on port ${port}. Make sure it's open.`);
139
+ }, { ...effective });
140
+ client.lastHealth = connection.health;
141
+ return client;
104
142
  }
105
143
  // Bind to whatever project is open right now. On a genuine engine restart the
106
144
  // token rotates and getClient() rebuilds this client, so a restart naturally
107
145
  // rebinds to the current project. An in-place project switch keeps the same
108
146
  // token, so the cached client retains its original binding and the engine
109
147
  // rejects mismatched mutations until the agent explicitly rebinds.
110
- return new EngineApiClient(port, token, {
111
- instanceId: health.instanceId,
112
- projectId: health.projectId,
113
- projectIdHash: health.projectIdHash,
148
+ const port = await getApiPort(discovery.summerDir);
149
+ const token = await getApiToken(discovery.summerDir);
150
+ if (token) {
151
+ const health = await checkEngineHealth(port);
152
+ if (health) {
153
+ const client = new EngineApiClient(port, token, {
154
+ instanceId: health.instanceId,
155
+ projectId: health.projectId,
156
+ projectIdHash: health.projectIdHash,
157
+ });
158
+ client.lastHealth = health;
159
+ return client;
160
+ }
161
+ }
162
+ const connection = await discoverRegistryConnection(discovery);
163
+ if (!connection)
164
+ throw engineNotRunningError({ port, token }, discovery.summerDir);
165
+ const client = new EngineApiClient(connection.port, connection.token, {
166
+ instanceId: connection.health.instanceId,
167
+ projectId: connection.health.projectId,
168
+ projectIdHash: connection.health.projectIdHash,
114
169
  });
170
+ client.lastHealth = connection.health;
171
+ client.registryDiscovery = { ...discovery };
172
+ return client;
173
+ }
174
+ /** The engine's capability advert from the last health read (connect or
175
+ * rebind), or undefined when the engine predates the advert. */
176
+ getEngineCapabilities() {
177
+ return this.lastHealth?.capabilities;
178
+ }
179
+ /** Engine version string from the last health read, for skew messages. */
180
+ getEngineVersion() {
181
+ return this.lastHealth?.version;
115
182
  }
116
183
  /** The projectIdHash this session is bound to (undefined if none was reported
117
184
  * at connect — e.g. no project open yet). */
@@ -124,16 +191,22 @@ export class EngineApiClient {
124
191
  * switch (the deliberate escape hatch after an identity_mismatch). Returns the
125
192
  * new bound hash. The direct health probe is intentionally unscoped, so it can
126
193
  * reach the current engine even when bound requests would be rejected.
194
+ *
195
+ * Throws EngineRebindError when the health probe fails: the previous identity
196
+ * is kept, and reporting it as "the rebound hash" would tell the agent a
197
+ * switch it never followed had succeeded.
127
198
  */
128
199
  async rebind() {
129
200
  const health = await checkEngineHealth(this.port);
130
- if (health) {
131
- this.targetIdentity = {
132
- instanceId: health.instanceId,
133
- projectId: health.projectId,
134
- projectIdHash: health.projectIdHash,
135
- };
201
+ if (!health) {
202
+ throw new EngineRebindError(`Summer Engine did not answer the health probe on port ${this.port}; this session is still bound to ${this.targetIdentity.projectIdHash ?? "no project"}. Recovery: confirm the engine is running with the project open, then call summer_get_project_context again.`);
136
203
  }
204
+ this.lastHealth = health;
205
+ this.targetIdentity = {
206
+ instanceId: health.instanceId,
207
+ projectId: health.projectId,
208
+ projectIdHash: health.projectIdHash,
209
+ };
137
210
  return this.targetIdentity.projectIdHash;
138
211
  }
139
212
  /** Identity to attach to a MUTATING command's options so the engine can reject
@@ -179,7 +252,14 @@ export class EngineApiClient {
179
252
  const text = await res.text().catch(() => "");
180
253
  throw new Error(`Engine API error ${res.status}: ${text.slice(0, 200)}`);
181
254
  }
182
- return res.json();
255
+ try {
256
+ return await res.json();
257
+ }
258
+ catch {
259
+ // A bare SyntaxError names nothing; say which request answered with a
260
+ // non-JSON body (a proxy page, an HTML error, a half-written stream).
261
+ throw new Error(`Engine API returned a non-JSON response for ${method} ${path} (HTTP ${res.status}).`);
262
+ }
183
263
  }
184
264
  /** Raw fetch with auth + timeout — returns the Response so callers can inspect
185
265
  * the status (202 queued vs 200 legacy). */
@@ -240,6 +320,16 @@ export class EngineApiClient {
240
320
  const detail = error instanceof Error ? error.message : String(error);
241
321
  throw new Error(`Summer Engine did not acknowledge request ${clientRequestId}; dispatch state is unknown. Do not retry blindly. ${detail}`);
242
322
  }
323
+ return this._resolveQueuedResponse(res, clientRequestId, timeoutMs);
324
+ }
325
+ /**
326
+ * The post-submission half of _requestQueued: classify an already-fetched
327
+ * response (200 legacy / 202 queued / 429 backpressure) and, for 202, poll
328
+ * the accepted requestId to its terminal receipt. Split out so a caller that
329
+ * has to inspect the raw status first (gameSnapshot's 409 bridge check) can
330
+ * feed its ONE response in here instead of issuing a second request.
331
+ */
332
+ async _resolveQueuedResponse(res, clientRequestId, timeoutMs) {
243
333
  // 202 (queued) + 429 (backpressure, errorClass in body) are handled below;
244
334
  // any other non-2xx is a real transport error.
245
335
  if (!res.ok && res.status !== 202 && res.status !== 429) {
@@ -304,24 +394,83 @@ export class EngineApiClient {
304
394
  async health() {
305
395
  return this.request("GET", "/api/health");
306
396
  }
307
- async executeOps(ops, options) {
397
+ /**
398
+ * One long-poll of GET /api/events/poll (the engine's events channel). The
399
+ * engine answers on the first event matching `kinds` with seq > `since`, or
400
+ * after `wait` ms with `timed_out:true`; a 2xx is the poll envelope
401
+ * {ok, events:[{seq, kind, ts, data}], next_seq, last_seq, since, truncated,
402
+ * timed_out}. Identity-gated like every other route: the bound project rides
403
+ * in the query, so a wrong project answers 409 identity_mismatch.
404
+ *
405
+ * The three answers this route documents — 404 (no channel on this build),
406
+ * 409 (identity mismatch), 503 (bus not started) — come back as a STRUCTURED
407
+ * failure {ok:false, http_status, ...body} so both faces classify them (a
408
+ * terminalState keeps its standard message and rebind hint; the events
409
+ * capability rewrites a 404 into engine_lacks_events). Anything else throws
410
+ * like every other request, so a stale-token 401/403 still triggers
411
+ * withEngine's reconnect-and-retry.
412
+ */
413
+ async pollEvents(params = {}, timeoutMs) {
414
+ const query = new URLSearchParams();
415
+ if (params.since !== undefined)
416
+ query.set("since", String(params.since));
417
+ if (params.kinds && params.kinds.length > 0)
418
+ query.set("kinds", params.kinds.join(","));
419
+ if (params.wait !== undefined)
420
+ query.set("wait", String(params.wait));
421
+ if (params.limit !== undefined)
422
+ query.set("limit", String(params.limit));
423
+ // URLSearchParams.size is undefined on Node < 18.16; stringify instead.
424
+ const suffix = query.toString();
425
+ const path = `/api/events/poll${suffix ? `?${suffix}` : ""}`;
426
+ // The engine holds the request up to `wait` ms; give the socket headroom.
427
+ const wait = params.wait ?? 25_000;
428
+ const res = await this._fetchRaw("GET", path, undefined, timeoutMs ?? wait + 5_000);
429
+ if (res.ok) {
430
+ try {
431
+ return await res.json();
432
+ }
433
+ catch {
434
+ throw new Error(`Engine API returned a non-JSON response for GET /api/events/poll (HTTP ${res.status}).`);
435
+ }
436
+ }
437
+ const text = await res.text().catch(() => "");
438
+ if (res.status === 404 || res.status === 409 || res.status === 503) {
439
+ let body = {};
440
+ try {
441
+ body = asRecord(JSON.parse(text)) ?? {};
442
+ }
443
+ catch {
444
+ // non-JSON body (an HTML 404 page): keep the raw text below
445
+ }
446
+ const failure = { ok: false, ...body, http_status: res.status };
447
+ if (typeof failure.error !== "string" && typeof failure.terminalState !== "string") {
448
+ failure.error = `Engine API error ${res.status}: ${text.slice(0, 200)}`;
449
+ }
450
+ return failure;
451
+ }
452
+ throw new Error(`Engine API error ${res.status}: ${text.slice(0, 200)}`);
453
+ }
454
+ async executeOps(ops, options, timeoutMs = 120_000) {
308
455
  // Ops may include long-running work (ImportFromUrlBatch, GitCommit); the
309
- // engine keeps it "running" and we poll. 120s budget. Resolves legacy-200 or
310
- // async-202 (Block E).
456
+ // engine keeps it "running" and we poll. 120s budget by default; ops that
457
+ // declare a longer server-side max_seconds (RunEditorScript) pass a larger
458
+ // timeoutMs so the client never gives up before the engine can finish.
459
+ // Resolves legacy-200 or async-202 (Block E).
311
460
  // Attach the bound project identity so the engine rejects a write aimed at a
312
461
  // different project (identity_mismatch, atomic — before any op applies).
313
462
  const merged = { ...(options ?? {}), ...this.identityOptions() };
314
463
  const body = Object.keys(merged).length ? { ops, options: merged } : { ops };
315
- return this._requestQueued("POST", "/api/ops", body, 120_000);
464
+ return this._requestQueued("POST", "/api/ops", body, timeoutMs);
316
465
  }
317
466
  /**
318
467
  * Mutation path for MCP file tools. Unlike legacy executeOps callers, this
319
468
  * fails closed when health did not provide a complete target identity. The
320
469
  * bound hash is stamped last so a caller cannot override it in options.
321
470
  */
322
- async executeIdentityBoundOps(ops, options) {
471
+ async executeIdentityBoundOps(ops, options, timeoutMs) {
323
472
  const identity = this.requireBoundIdentity();
324
- return this.executeOps(ops, { ...(options ?? {}), ...identity });
473
+ return this.executeOps(ops, { ...(options ?? {}), ...identity }, timeoutMs);
325
474
  }
326
475
  async readProjectFile(path, maxBytes = 200_000) {
327
476
  const query = new URLSearchParams({
@@ -370,8 +519,18 @@ export class EngineApiClient {
370
519
  async getScriptErrors(path) {
371
520
  return this.request("GET", `/api/state/script-errors?path=${encodeURIComponent(path)}`);
372
521
  }
373
- async play(scene) {
522
+ async play(scene, determinism) {
374
523
  // Cold-load on large projects can take 25-40s. 60s budget.
524
+ const pins = pickPlayDeterminism(determinism);
525
+ if (pins) {
526
+ // Determinism params (seed / fixed_fps / time_scale) — the /api/play rung
527
+ // copies ONLY `scene` from options into the PlayGame op
528
+ // (local_api_server.cpp play branch), so a pinned launch travels as an
529
+ // explicit PlayGame op through /api/ops. executeOps stamps the bound
530
+ // identity like every other op. An engine that predates the params
531
+ // ignores the extra keys and answers the v1 result (no `determinism`).
532
+ return this.executeOps([{ op: "PlayGame", ...(scene ? { scene } : {}), ...pins }], undefined, 60_000);
533
+ }
375
534
  // The engine reads play params from body.options (tool_net_thread.cpp:503),
376
535
  // and the play handler reads options["scene"] — a top-level { scene } is
377
536
  // dropped, so the scene MUST be nested inside options. The bound identity
@@ -402,6 +561,7 @@ export class EngineApiClient {
402
561
  async writeSnapshotFile(kind, buffer, ext) {
403
562
  const dir = join(tmpdir(), "summer-engine", "snapshots");
404
563
  await mkdir(dir, { recursive: true });
564
+ await reapStaleSnapshots(dir);
405
565
  const filename = `${kind}-${Date.now()}-${Math.random()
406
566
  .toString(36)
407
567
  .slice(2, 8)}.${ext}`;
@@ -419,16 +579,17 @@ export class EngineApiClient {
419
579
  // reason (`failure_reason:"unsupported_transport"`, `bridge_required:true`,
420
580
  // tool_net_thread.cpp:495-503). Detect that specific shape and return it
421
581
  // verbatim so the tool can give an honest message — do NOT hardcode "game
422
- // always fails": once the engine answers 200/202 (P4.4), the normal path
423
- // below just works.
424
- if (kind === "game") {
425
- const bridge = await this._detectBridgeRequired(`/api/snapshot/${kind}`);
426
- if (bridge)
427
- return bridge;
428
- }
582
+ // always fails": once the engine answers 200/202 (P4.4), the same response
583
+ // flows into the normal queued path. ONE request either way: a probe that
584
+ // discarded a 200 (or orphaned an accepted 202 requestId) and then asked
585
+ // again would capture the game twice.
429
586
  let response;
430
587
  try {
431
- response = await this._requestQueued("GET", `/api/snapshot/${kind}`, undefined, 60_000);
588
+ const res = await this._fetchRaw("GET", `/api/snapshot/${kind}`, undefined, 60_000);
589
+ if (kind === "game" && res.status === 409) {
590
+ return this._bridgeRequiredFromResponse(res);
591
+ }
592
+ response = await this._resolveQueuedResponse(res, undefined, 60_000);
432
593
  }
433
594
  catch (err) {
434
595
  return { ok: false, error: err instanceof Error ? err.message : String(err) };
@@ -502,24 +663,12 @@ export class EngineApiClient {
502
663
  };
503
664
  }
504
665
  /**
505
- * Probe /api/snapshot/game for the structural 409 `bridge_required` shape
506
- * (tool_net_thread.cpp:495-503). Returns a structured failure only when the
507
- * engine actually answers 409 with `bridge_required` / `unsupported_transport`;
508
- * ANY other status (200/202/other) returns null so the caller proceeds to the
509
- * normal queued path — so the moment the engine starts answering over HTTP
510
- * (P4.4), game capture just works with no code change here.
666
+ * Turn a 409 from /api/snapshot/game into a structured failure. The engine's
667
+ * structural refusal carries `bridge_required` / `unsupported_transport`
668
+ * (tool_net_thread.cpp:495-503); a 409 without that shape is surfaced as a
669
+ * plain error rather than silently claiming "bridge required".
511
670
  */
512
- async _detectBridgeRequired(path) {
513
- let res;
514
- try {
515
- res = await this._fetchRaw("GET", path, undefined, 15_000);
516
- }
517
- catch {
518
- // Transport error — let the normal path surface it uniformly.
519
- return null;
520
- }
521
- if (res.status !== 409)
522
- return null;
671
+ async _bridgeRequiredFromResponse(res) {
523
672
  const body = (await res.json().catch(() => ({})));
524
673
  const reason = stringFrom(body.failure_reason);
525
674
  const bridge = body.bridge_required === true;
@@ -552,9 +701,24 @@ export class EngineApiClient {
552
701
  * name `node_path`); an unresolvable node fails with failure_reason
553
702
  * "node_not_found". framing "auto" is an alias of "iso"; the engine also
554
703
  * accepts "top"/"front"/"back"/"left"/"right" and echoes the resolved framing.
555
- * The result carries image_base64 + mime (+ width/height) plus the P4.3
556
- * confession fields (scene_has_camera / scene_had_light /
704
+ * framing "camera" renders through the scene's current/first Camera3D — or
705
+ * the Camera3D named by `cameraPath` — with the scene's REAL WorldEnvironment
706
+ * instead of the flat preview substitute; the engine echoes the resolved
707
+ * framing, so an older build that ignores the value is detectable by the
708
+ * caller. The result carries image_base64 + mime (+ width/height) plus the
709
+ * P4.3 confession fields (scene_has_camera / scene_had_light /
557
710
  * used_synthetic_camera) and framing / framed_node / render_retries.
711
+ *
712
+ * Perception additions (engine scene-scripting contracts): framing "free" takes
713
+ * `cameraPosition` / `cameraLookAt` (Godot "Vector3(x, y, z)" literals) and
714
+ * `fov`; framing "bookmark:<name>" resolves the pose from the project's
715
+ * camera bookmarks (fov overrides the bookmark's). `marks` draws the
716
+ * Set-of-Mark overlay (numbered tags + boxes over the largest visible
717
+ * VisualInstance3D nodes), capped by `maxMarks`. The result adds
718
+ * framing_source / camera_pose / bookmark and marks / marks_skipped /
719
+ * marks_candidates / marks_truncated / max_marks (all kept in `metadata`).
720
+ * Older engines resolve the new framings to a preset and echo THAT — the
721
+ * caller compares the echo against what it asked for.
558
722
  */
559
723
  async scenePreview(input) {
560
724
  const opInput = { op: "ScenePreview" };
@@ -567,6 +731,18 @@ export class EngineApiClient {
567
731
  opInput.size = input.size;
568
732
  if (input?.nodePath)
569
733
  opInput.node = input.nodePath;
734
+ if (input?.cameraPath)
735
+ opInput.camera_path = input.cameraPath;
736
+ if (input?.cameraPosition)
737
+ opInput.camera_position = input.cameraPosition;
738
+ if (input?.cameraLookAt)
739
+ opInput.camera_look_at = input.cameraLookAt;
740
+ if (input?.fov !== undefined)
741
+ opInput.fov = input.fov;
742
+ if (input?.marks !== undefined)
743
+ opInput.marks = input.marks;
744
+ if (input?.maxMarks !== undefined)
745
+ opInput.max_marks = input.maxMarks;
570
746
  let response;
571
747
  try {
572
748
  // executeOps stamps the bound identity so a drifted project is rejected
@@ -609,6 +785,22 @@ export class EngineApiClient {
609
785
  return true;
610
786
  }
611
787
  }
788
+ if (this.registryDiscovery) {
789
+ // Found through the registry (no pointer): ask the registry again. An
790
+ // editor that vanished or became ambiguous is real drift, like the
791
+ // selected-editor case above.
792
+ try {
793
+ const connection = await discoverRegistryConnection(this.registryDiscovery);
794
+ if (!connection)
795
+ return true;
796
+ return (connection.port !== this.port ||
797
+ connection.token !== this.token ||
798
+ connection.health.instanceId !== this.targetIdentity.instanceId);
799
+ }
800
+ catch {
801
+ return true;
802
+ }
803
+ }
612
804
  try {
613
805
  const [port, token] = await Promise.all([getApiPort(), getApiToken()]);
614
806
  if (!token)
@@ -1,9 +1,8 @@
1
1
  /**
2
- * 0.5.34 Block E — async tool-lifecycle consumer for the CLI/MCP.
2
+ * Async tool-lifecycle consumer for the CLI/MCP.
3
3
  *
4
- * Ported from the web orchestrator (publicsummerengine
5
- * src/lib/bridge/async-op-lifecycle.ts) so the CLI speaks the SAME contract as
6
- * the engine's responsive tool server (Block E):
4
+ * Speaks the engine tool server's async op contract (the same one the Summer
5
+ * web app uses), so both clients read engine responses identically:
7
6
  * - NEW path: `202 {requestId, status:"queued"}` -> long-poll
8
7
  * GET /api/ops/result?requestId=&wait=ms until terminal (done|failed|canceled).
9
8
  * - LEGACY path (dormant/older engine): a synchronous `200` with the full apply
@@ -1,9 +1,8 @@
1
1
  /**
2
- * 0.5.34 Block E — async tool-lifecycle consumer for the CLI/MCP.
2
+ * Async tool-lifecycle consumer for the CLI/MCP.
3
3
  *
4
- * Ported from the web orchestrator (publicsummerengine
5
- * src/lib/bridge/async-op-lifecycle.ts) so the CLI speaks the SAME contract as
6
- * the engine's responsive tool server (Block E):
4
+ * Speaks the engine tool server's async op contract (the same one the Summer
5
+ * web app uses), so both clients read engine responses identically:
7
6
  * - NEW path: `202 {requestId, status:"queued"}` -> long-poll
8
7
  * GET /api/ops/result?requestId=&wait=ms until terminal (done|failed|canceled).
9
8
  * - LEGACY path (dormant/older engine): a synchronous `200` with the full apply
@@ -14,20 +14,29 @@ export interface CredentialMetadata {
14
14
  interface CredentialMetadataDocument {
15
15
  schemaVersion: 1;
16
16
  auth?: CredentialMetadata;
17
- cloud?: CredentialMetadata;
18
17
  creator?: CredentialMetadata;
19
18
  }
20
19
  export interface LoginSession {
21
20
  token: string;
22
- cloudToken?: string | null;
23
21
  user?: SummerUserInfo;
24
22
  scopes?: string[];
25
- cloudScopes?: string[];
26
23
  }
24
+ /**
25
+ * Gateway credential. SUMMER_TOKEN wins over ~/.summer/auth-token so a
26
+ * headless/cloud agent can authenticate gateway features (asset search,
27
+ * generation, releases) without a browser login. The env override never
28
+ * touches the store: `summer login` still writes the file, and the desktop
29
+ * engine keeps reading it. Local engine ops need neither — they authenticate
30
+ * with the engine-minted ~/.summer/api-token (see core/engine.ts).
31
+ */
27
32
  export declare function getAuthToken(): Promise<string | null>;
33
+ /**
34
+ * True when SUMMER_TOKEN (env) is the credential in effect. `summer logout`
35
+ * only clears the store, so status/logout must say the env token still
36
+ * applies rather than reporting the stored identity as the active one.
37
+ */
38
+ export declare function hasEnvAuthToken(): boolean;
28
39
  export declare function saveAuthToken(token: string, scopes?: string[]): Promise<void>;
29
- export declare function getCloudToken(): Promise<string | null>;
30
- export declare function saveCloudToken(token: string, scopes?: string[]): Promise<void>;
31
40
  /**
32
41
  * Summercraft creator tokens are a separate credential audience from the
33
42
  * core-compatible Summer CLI JWT. Never store an sc_ token in auth-token:
@@ -40,4 +49,3 @@ export declare function saveUserInfo(info: SummerUserInfo): Promise<void>;
40
49
  export declare function saveLoginSession(session: LoginSession): Promise<void>;
41
50
  export declare function getCredentialMetadata(): Promise<CredentialMetadataDocument>;
42
51
  export declare function clearAuthCredentials(): Promise<number>;
43
- export declare function assertCredentialScopes(metadata: CredentialMetadata | undefined, requiredScopes: string[]): void;