summer-engine 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.claude-plugin/marketplace.json +27 -7
  2. package/.claude-plugin/plugin.json +99 -83
  3. package/.codex-plugin/plugin.json +112 -82
  4. package/.cursor-plugin/plugin.json +119 -83
  5. package/.factory-plugin/plugin.json +100 -3
  6. package/.mcp.json +6 -1
  7. package/.opencode/INSTALL.md +7 -4
  8. package/.opencode/plugins/summer.js +31 -18
  9. package/AGENTS.md +107 -34
  10. package/CHANGELOG.md +131 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +159 -391
  15. package/assets/api-docs.json.gz +0 -0
  16. package/assets/autopilot/README.md +20 -6
  17. package/assets/autopilot/autopilot.gd +80 -26
  18. package/assets/autopilot/run.sh +132 -7
  19. package/assets/navigation/web-routes.json +719 -0
  20. package/commands/gameskill.md +10 -108
  21. package/commands/summer.md +72 -4
  22. package/dist/bin/summer.js +6 -87
  23. package/dist/cli/banner.d.ts +1 -0
  24. package/dist/cli/banner.js +33 -0
  25. package/dist/{commands → cli/commands}/config.js +1 -1
  26. package/dist/cli/commands/create.d.ts +30 -0
  27. package/dist/cli/commands/create.js +212 -0
  28. package/dist/{commands → cli/commands}/debug.js +2 -2
  29. package/dist/cli/commands/doctor.d.ts +2 -0
  30. package/dist/cli/commands/doctor.js +18 -0
  31. package/dist/cli/commands/events.d.ts +57 -0
  32. package/dist/cli/commands/events.js +158 -0
  33. package/dist/cli/commands/install.d.ts +50 -0
  34. package/dist/cli/commands/install.js +447 -0
  35. package/dist/cli/commands/list.js +72 -0
  36. package/dist/{commands → cli/commands}/login.js +33 -17
  37. package/dist/{commands → cli/commands}/logout.d.ts +1 -0
  38. package/dist/cli/commands/logout.js +19 -0
  39. package/dist/{commands → cli/commands}/memory.d.ts +1 -8
  40. package/dist/{commands → cli/commands}/memory.js +20 -11
  41. package/dist/cli/commands/open.d.ts +45 -0
  42. package/dist/cli/commands/open.js +216 -0
  43. package/dist/{commands → cli/commands}/plan.js +2 -2
  44. package/dist/{commands → cli/commands}/publish.js +1 -1
  45. package/dist/{commands → cli/commands}/releases.js +1 -1
  46. package/dist/cli/commands/run.d.ts +19 -0
  47. package/dist/cli/commands/run.js +255 -0
  48. package/dist/{commands → cli/commands}/setup.js +43 -89
  49. package/dist/{commands → cli/commands}/skills.js +85 -222
  50. package/dist/{commands → cli/commands}/status.d.ts +1 -0
  51. package/dist/cli/commands/status.js +62 -0
  52. package/dist/cli/commands/tool.d.ts +11 -0
  53. package/dist/cli/commands/tool.js +121 -0
  54. package/dist/cli/index.d.ts +6 -0
  55. package/dist/cli/index.js +89 -0
  56. package/dist/cli/root-action.d.ts +7 -0
  57. package/dist/cli/root-action.js +15 -0
  58. package/dist/{lib → core}/api-client.d.ts +106 -15
  59. package/dist/{lib → core}/api-client.js +267 -75
  60. package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
  61. package/dist/{lib → core}/async-op-lifecycle.js +3 -4
  62. package/dist/{lib → core}/auth.d.ts +14 -6
  63. package/dist/{lib → core}/auth.js +56 -40
  64. package/dist/core/capabilities/agent-playbook.d.ts +20 -0
  65. package/dist/core/capabilities/agent-playbook.js +218 -0
  66. package/dist/core/capabilities/api-docs.d.ts +36 -0
  67. package/dist/core/capabilities/api-docs.js +118 -0
  68. package/dist/core/capabilities/asset-import.d.ts +49 -0
  69. package/dist/core/capabilities/asset-import.js +134 -0
  70. package/dist/core/capabilities/camera-view.d.ts +98 -0
  71. package/dist/core/capabilities/camera-view.js +222 -0
  72. package/dist/core/capabilities/capture.d.ts +63 -0
  73. package/dist/core/capabilities/capture.js +67 -0
  74. package/dist/core/capabilities/console-read.d.ts +17 -0
  75. package/dist/core/capabilities/console-read.js +21 -0
  76. package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
  77. package/dist/{lib → core/capabilities}/creator.js +14 -33
  78. package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
  79. package/dist/{lib → core/capabilities}/debug-report.js +12 -31
  80. package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
  81. package/dist/{commands → core/capabilities}/doctor.js +47 -73
  82. package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
  83. package/dist/core/capabilities/engine-fallbacks.js +36 -0
  84. package/dist/core/capabilities/engine-ops.d.ts +33 -0
  85. package/dist/core/capabilities/engine-ops.js +145 -0
  86. package/dist/core/capabilities/engine-receipt.d.ts +53 -0
  87. package/dist/core/capabilities/engine-receipt.js +134 -0
  88. package/dist/core/capabilities/events.d.ts +200 -0
  89. package/dist/core/capabilities/events.js +383 -0
  90. package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
  91. package/dist/core/capabilities/fabricate-mesh.js +165 -0
  92. package/dist/core/capabilities/frame-quality.d.ts +71 -0
  93. package/dist/core/capabilities/frame-quality.js +449 -0
  94. package/dist/core/capabilities/game-task-plan.d.ts +66 -0
  95. package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
  96. package/dist/core/capabilities/hdri-import.d.ts +90 -0
  97. package/dist/core/capabilities/hdri-import.js +250 -0
  98. package/dist/core/capabilities/image-generation.d.ts +24 -0
  99. package/dist/core/capabilities/image-generation.js +22 -0
  100. package/dist/core/capabilities/navigation/open.d.ts +156 -0
  101. package/dist/core/capabilities/navigation/open.js +567 -0
  102. package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
  103. package/dist/core/capabilities/navigation/render-product-map.js +84 -0
  104. package/dist/core/capabilities/navigation/targets.d.ts +87 -0
  105. package/dist/core/capabilities/navigation/targets.js +250 -0
  106. package/dist/core/capabilities/play-determinism.d.ts +35 -0
  107. package/dist/core/capabilities/play-determinism.js +86 -0
  108. package/dist/core/capabilities/project-context.d.ts +114 -0
  109. package/dist/core/capabilities/project-context.js +249 -0
  110. package/dist/core/capabilities/runtime-control.d.ts +540 -0
  111. package/dist/core/capabilities/runtime-control.js +1011 -0
  112. package/dist/core/capabilities/scene-kind.d.ts +19 -0
  113. package/dist/core/capabilities/scene-kind.js +137 -0
  114. package/dist/core/capabilities/scene-script.d.ts +38 -0
  115. package/dist/core/capabilities/scene-script.js +45 -0
  116. package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
  117. package/dist/core/capabilities/tool-dispatch.js +1490 -0
  118. package/dist/core/capabilities/ui-control.d.ts +179 -0
  119. package/dist/core/capabilities/ui-control.js +423 -0
  120. package/dist/core/capabilities/variant-types.d.ts +22 -0
  121. package/dist/core/capabilities/variant-types.js +101 -0
  122. package/dist/core/capability-skew.d.ts +205 -0
  123. package/dist/core/capability-skew.js +386 -0
  124. package/dist/{lib → core}/config.d.ts +11 -1
  125. package/dist/{lib → core}/config.js +13 -2
  126. package/dist/core/embeddings.d.ts +78 -0
  127. package/dist/core/embeddings.js +166 -0
  128. package/dist/core/engine-install.d.ts +105 -0
  129. package/dist/core/engine-install.js +190 -0
  130. package/dist/core/engine.d.ts +94 -0
  131. package/dist/{lib → core}/engine.js +74 -28
  132. package/dist/core/feedback/client.d.ts +88 -0
  133. package/dist/core/feedback/client.js +182 -0
  134. package/dist/{lib → core}/format.d.ts +0 -1
  135. package/dist/{lib → core}/format.js +1 -1
  136. package/dist/core/headless/connection.d.ts +86 -0
  137. package/dist/core/headless/connection.js +97 -0
  138. package/dist/core/headless/editor-connection.d.ts +26 -0
  139. package/dist/core/headless/editor-connection.js +81 -0
  140. package/dist/core/headless/mcp-routing.d.ts +38 -0
  141. package/dist/core/headless/mcp-routing.js +83 -0
  142. package/dist/core/headless/registry.d.ts +91 -0
  143. package/dist/core/headless/registry.js +226 -0
  144. package/dist/core/headless/resolve.d.ts +46 -0
  145. package/dist/core/headless/resolve.js +75 -0
  146. package/dist/core/headless/spawn.d.ts +46 -0
  147. package/dist/core/headless/spawn.js +205 -0
  148. package/dist/core/headless/worker-connection.d.ts +96 -0
  149. package/dist/core/headless/worker-connection.js +353 -0
  150. package/dist/core/headless/worker-engine-client.d.ts +58 -0
  151. package/dist/core/headless/worker-engine-client.js +246 -0
  152. package/dist/core/launch-posture.d.ts +170 -0
  153. package/dist/core/launch-posture.js +317 -0
  154. package/dist/core/library-read.d.ts +73 -0
  155. package/dist/core/library-read.js +279 -0
  156. package/dist/core/library-search.d.ts +143 -0
  157. package/dist/core/library-search.js +301 -0
  158. package/dist/{lib → core}/log-filters.js +4 -2
  159. package/dist/{lib → core}/mcp-log.js +2 -17
  160. package/dist/core/package-root.d.ts +9 -0
  161. package/dist/core/package-root.js +11 -0
  162. package/dist/core/redact.d.ts +20 -0
  163. package/dist/core/redact.js +64 -0
  164. package/dist/core/registry-search.d.ts +167 -0
  165. package/dist/core/registry-search.js +358 -0
  166. package/dist/core/skills-registry.d.ts +47 -0
  167. package/dist/core/skills-registry.js +83 -0
  168. package/dist/{lib → core}/store.js +11 -7
  169. package/dist/{lib → core}/summer-compatibility.js +3 -3
  170. package/dist/{lib → core}/telemetry.js +5 -2
  171. package/dist/core/templates.d.ts +98 -0
  172. package/dist/core/templates.js +241 -0
  173. package/dist/core/tool-errors.d.ts +30 -0
  174. package/dist/core/tool-errors.js +40 -0
  175. package/dist/core/trajectory.d.ts +80 -0
  176. package/dist/core/trajectory.js +307 -0
  177. package/dist/core/util/http.d.ts +13 -0
  178. package/dist/core/util/http.js +28 -0
  179. package/dist/core/util/json.d.ts +12 -0
  180. package/dist/core/util/json.js +21 -0
  181. package/dist/core/util/process.d.ts +3 -0
  182. package/dist/core/util/process.js +13 -0
  183. package/dist/core/util/sleep.d.ts +1 -0
  184. package/dist/core/util/sleep.js +3 -0
  185. package/dist/core/version.d.ts +3 -0
  186. package/dist/core/version.js +5 -0
  187. package/dist/{lib → installer}/agent-config.d.ts +20 -1
  188. package/dist/{lib → installer}/agent-config.js +138 -24
  189. package/dist/installer/legacy-skills.d.ts +26 -0
  190. package/dist/installer/legacy-skills.js +53 -0
  191. package/dist/installer/setup.d.ts +76 -0
  192. package/dist/installer/setup.js +146 -0
  193. package/dist/installer/skill-locations.d.ts +45 -0
  194. package/dist/installer/skill-locations.js +170 -0
  195. package/dist/installer/version-check.d.ts +174 -0
  196. package/dist/{lib → installer}/version-check.js +173 -42
  197. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  198. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  199. package/dist/mcp/server.d.ts +23 -3
  200. package/dist/mcp/server.js +122 -28
  201. package/dist/mcp/tools/asset-tools.js +62 -142
  202. package/dist/mcp/tools/creator-tools.js +5 -23
  203. package/dist/mcp/tools/debug-tools.js +61 -18
  204. package/dist/mcp/tools/event-tools.d.ts +14 -0
  205. package/dist/mcp/tools/event-tools.js +41 -0
  206. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  207. package/dist/mcp/tools/fabricate-tools.js +28 -0
  208. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  209. package/dist/mcp/tools/feedback-tools.js +88 -0
  210. package/dist/mcp/tools/file-tools.js +6 -53
  211. package/dist/mcp/tools/generate-tools.js +37 -63
  212. package/dist/mcp/tools/library-tools.d.ts +11 -0
  213. package/dist/mcp/tools/library-tools.js +42 -0
  214. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  215. package/dist/mcp/tools/navigation-tools.js +37 -0
  216. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  217. package/dist/mcp/tools/perception-tools.js +146 -0
  218. package/dist/mcp/tools/project-tools.d.ts +14 -0
  219. package/dist/mcp/tools/project-tools.js +72 -281
  220. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  221. package/dist/mcp/tools/runtime-tools.js +92 -0
  222. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  223. package/dist/mcp/tools/scene-tools.js +68 -119
  224. package/dist/mcp/tools/script-tools.d.ts +3 -0
  225. package/dist/mcp/tools/script-tools.js +118 -0
  226. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  227. package/dist/mcp/tools/spatial-tools.js +485 -0
  228. package/dist/mcp/tools/text-json.d.ts +8 -0
  229. package/dist/mcp/tools/text-json.js +12 -0
  230. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  231. package/dist/mcp/tools/ui-tools.js +82 -0
  232. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  233. package/dist/mcp/tools/visual-tools.js +383 -101
  234. package/dist/mcp/tools/with-engine.d.ts +9 -15
  235. package/dist/mcp/tools/with-engine.js +60 -96
  236. package/dist/project-memory/project-manifest.d.ts +36 -0
  237. package/dist/project-memory/project-manifest.js +50 -0
  238. package/dist/project-memory/project-memory.d.ts +57 -0
  239. package/dist/{lib → project-memory}/project-memory.js +46 -0
  240. package/gemini-extension.json +103 -2
  241. package/hooks/hooks-cursor.json +2 -2
  242. package/hooks/hooks.json +2 -1
  243. package/hooks/pre-commit-doctor.sh +45 -39
  244. package/hooks/run-hook.cmd +30 -23
  245. package/hooks/run-hook.sh +20 -0
  246. package/hooks/session-start.sh +18 -7
  247. package/integrations/README.md +70 -0
  248. package/integrations/claude/README.md +19 -0
  249. package/integrations/claude/manifest-target.json +16 -0
  250. package/integrations/cline/README.md +13 -0
  251. package/integrations/cline/manifest-target.json +3 -0
  252. package/integrations/codex/README.md +15 -0
  253. package/integrations/codex/manifest-target.json +5 -0
  254. package/integrations/cursor/README.md +16 -0
  255. package/integrations/cursor/manifest-target.json +5 -0
  256. package/integrations/factory/README.md +26 -0
  257. package/integrations/factory/manifest-target.json +5 -0
  258. package/integrations/gemini/README.md +26 -0
  259. package/integrations/gemini/manifest-target.json +5 -0
  260. package/integrations/github-copilot/README.md +12 -0
  261. package/integrations/github-copilot/manifest-target.json +3 -0
  262. package/integrations/kilo-code/README.md +16 -0
  263. package/integrations/kilo-code/manifest-target.json +3 -0
  264. package/integrations/lm-studio/README.md +12 -0
  265. package/integrations/lm-studio/manifest-target.json +3 -0
  266. package/integrations/opencode/README.md +15 -0
  267. package/integrations/opencode/manifest-target.json +3 -0
  268. package/integrations/roo-code/README.md +13 -0
  269. package/integrations/roo-code/manifest-target.json +3 -0
  270. package/integrations/vscode-copilot/README.md +12 -0
  271. package/integrations/vscode-copilot/manifest-target.json +3 -0
  272. package/integrations/windsurf/README.md +13 -0
  273. package/integrations/windsurf/manifest-target.json +3 -0
  274. package/library/references/collaborative-protocol/resource.yaml +24 -0
  275. package/library/references/gd-style/resource.yaml +24 -0
  276. package/{references → library/references/godot-version}/godot-version.md +6 -6
  277. package/library/references/godot-version/resource.yaml +22 -0
  278. package/library/references/headless-routing/headless-routing.md +46 -0
  279. package/library/references/headless-routing/resource.yaml +24 -0
  280. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  281. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  282. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  283. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  284. package/library/references/product-map/product-map.md +103 -0
  285. package/library/references/product-map/resource.yaml +33 -0
  286. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  287. package/library/references/public-surface-language/resource.yaml +17 -0
  288. package/library/references/summer-folder/resource.yaml +20 -0
  289. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  290. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  291. package/library/skills/3d-lighting/resource.yaml +27 -0
  292. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  293. package/library/skills/adaptive-music/resource.yaml +28 -0
  294. package/library/skills/agent-playtesting/SKILL.md +148 -0
  295. package/library/skills/agent-playtesting/resource.yaml +52 -0
  296. package/library/skills/ambient-bed/resource.yaml +24 -0
  297. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  298. package/library/skills/animated-loop/resource.yaml +27 -0
  299. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  300. package/library/skills/animation-tree/resource.yaml +33 -0
  301. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  302. package/library/skills/art-direction/resource.yaml +29 -0
  303. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  304. package/library/skills/asset-strategy/resource.yaml +63 -0
  305. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  306. package/library/skills/audio-direction/resource.yaml +32 -0
  307. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  308. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  309. package/library/skills/brainstorm-game/resource.yaml +30 -0
  310. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  311. package/library/skills/brainstorming/resource.yaml +23 -0
  312. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  313. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  314. package/library/skills/browse-templates/resource.yaml +23 -0
  315. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  316. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  317. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  318. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  319. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  320. package/library/skills/character-model/resource.yaml +36 -0
  321. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  322. package/library/skills/character-portrait/resource.yaml +30 -0
  323. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  324. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  325. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  326. package/library/skills/concept-art/resource.yaml +34 -0
  327. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  328. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  329. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  330. package/library/skills/debug/resource.yaml +31 -0
  331. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  332. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  333. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  334. package/library/skills/design-level/resource.yaml +31 -0
  335. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  336. package/library/skills/design-mechanic/resource.yaml +31 -0
  337. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  338. package/library/skills/design-npc/resource.yaml +29 -0
  339. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  340. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  341. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  342. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  343. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  344. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  345. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  346. package/library/skills/environment-kit/resource.yaml +29 -0
  347. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  348. package/library/skills/export-and-ship/resource.yaml +32 -0
  349. package/library/skills/fabricating-assets/SKILL.md +195 -0
  350. package/library/skills/fabricating-assets/resource.yaml +52 -0
  351. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  352. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  353. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  354. package/library/skills/fps-controller/resource.yaml +29 -0
  355. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  356. package/library/skills/game-feel/resource.yaml +27 -0
  357. package/library/skills/gameskill/SKILL.md +64 -0
  358. package/library/skills/gameskill/resource.yaml +22 -0
  359. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  360. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  361. package/library/skills/generate-motion/resource.yaml +34 -0
  362. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  363. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  364. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  365. package/library/skills/headless-scripting/resource.yaml +26 -0
  366. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  367. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  368. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  369. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  370. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  371. package/library/skills/investigating-bugs/resource.yaml +24 -0
  372. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  373. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  374. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  375. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  376. package/library/skills/make-game/resource.yaml +35 -0
  377. package/library/skills/music-track/resource.yaml +28 -0
  378. package/library/skills/navigate-summer/SKILL.md +61 -0
  379. package/library/skills/navigate-summer/resource.yaml +35 -0
  380. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  381. package/library/skills/new-project/resource.yaml +28 -0
  382. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  383. package/library/skills/organic-model/resource.yaml +32 -0
  384. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  385. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  386. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  387. package/library/skills/pixel-art/resource.yaml +31 -0
  388. package/library/skills/play/resource.yaml +26 -0
  389. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  390. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  391. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  392. package/library/skills/procedural-animation/resource.yaml +33 -0
  393. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  394. package/library/skills/prop-model/resource.yaml +33 -0
  395. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  396. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  397. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  398. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  399. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  400. package/library/skills/remote-deploy/resource.yaml +23 -0
  401. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  402. package/library/skills/retarget/resource.yaml +33 -0
  403. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  404. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  405. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  406. package/library/skills/scene-composition/resource.yaml +27 -0
  407. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  408. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  409. package/library/skills/scene-scripting/SKILL.md +764 -0
  410. package/library/skills/scene-scripting/resource.yaml +58 -0
  411. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  412. package/library/skills/scene-to-level/resource.yaml +33 -0
  413. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  414. package/library/skills/skill-create/SKILL.md +138 -0
  415. package/library/skills/skill-create/resource.yaml +25 -0
  416. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  417. package/library/skills/skill-improve/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  419. package/library/skills/skill-test/resource.yaml +26 -0
  420. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  421. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  422. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  423. package/library/skills/skybox-panorama/resource.yaml +28 -0
  424. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  425. package/library/skills/sound-effect/resource.yaml +27 -0
  426. package/library/skills/spatial-placement/SKILL.md +74 -0
  427. package/library/skills/spatial-placement/resource.yaml +42 -0
  428. package/library/skills/spatial-placement/tests/spec.md +65 -0
  429. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  430. package/library/skills/sprite-sheet/resource.yaml +32 -0
  431. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  432. package/library/skills/tileable-texture/resource.yaml +31 -0
  433. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  434. package/library/skills/trailer-shot/resource.yaml +27 -0
  435. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  436. package/library/skills/tune-performance/resource.yaml +31 -0
  437. package/library/skills/ui-basics/resource.yaml +25 -0
  438. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  439. package/library/skills/ui-graphics/resource.yaml +29 -0
  440. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  441. package/library/skills/use-widget-asset/resource.yaml +29 -0
  442. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  443. package/library/skills/using-summer/resource.yaml +41 -0
  444. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  445. package/library/skills/vehicle-model/resource.yaml +34 -0
  446. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  447. package/library/skills/verification-before-completion/resource.yaml +23 -0
  448. package/library/skills/verifying-scenes/SKILL.md +98 -0
  449. package/library/skills/verifying-scenes/resource.yaml +42 -0
  450. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  451. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  452. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  453. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  454. package/library/skills/vfx-fire/resource.yaml +35 -0
  455. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  456. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  457. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  458. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  459. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-lightning/resource.yaml +33 -0
  461. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  462. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  464. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  465. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  467. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  468. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  469. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  470. package/library/skills/vfx-smoke/resource.yaml +32 -0
  471. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  472. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  473. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  474. package/library/skills/voice-line/resource.yaml +27 -0
  475. package/library/skills/world-building-3d/SKILL.md +105 -0
  476. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  477. package/library/skills/world-building-3d/resource.yaml +44 -0
  478. package/library/skills/world-building-3d/tests/spec.md +48 -0
  479. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  480. package/library/skills/writing-plans/resource.yaml +23 -0
  481. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  482. package/library/skills/writing-skills/resource.yaml +29 -0
  483. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  484. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  485. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  486. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  487. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  488. package/library/templates/2d-platformer/resource.yaml +24 -0
  489. package/library/templates/2d-rpg/resource.yaml +21 -0
  490. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  491. package/library/templates/3d-basic/resource.yaml +16 -0
  492. package/library/templates/3d-city-kit/resource.yaml +24 -0
  493. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  494. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  495. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  496. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  497. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  498. package/library/templates/3d-racing-game/resource.yaml +21 -0
  499. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  500. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  501. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  502. package/library/templates/README.md +94 -0
  503. package/library/templates/empty/resource.yaml +16 -0
  504. package/library/tools/add-node/resource.yaml +60 -0
  505. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  506. package/library/tools/api-docs/resource.yaml +57 -0
  507. package/library/tools/batch/resource.yaml +52 -0
  508. package/library/tools/camera-bookmark/resource.yaml +73 -0
  509. package/library/tools/check-job/resource.yaml +45 -0
  510. package/library/tools/clear-console/resource.yaml +40 -0
  511. package/library/tools/connect-signal/resource.yaml +63 -0
  512. package/library/tools/create-debug-report/resource.yaml +67 -0
  513. package/library/tools/create-scene/resource.yaml +59 -0
  514. package/library/tools/creator-config/resource.yaml +63 -0
  515. package/library/tools/creator-publish/resource.yaml +73 -0
  516. package/library/tools/creator-releases/resource.yaml +53 -0
  517. package/library/tools/fabricate-3d/resource.yaml +108 -0
  518. package/library/tools/game-control/resource.yaml +84 -0
  519. package/library/tools/game-input/resource.yaml +159 -0
  520. package/library/tools/game-probe/resource.yaml +90 -0
  521. package/library/tools/generate-3d/resource.yaml +112 -0
  522. package/library/tools/generate-audio/resource.yaml +80 -0
  523. package/library/tools/generate-image/resource.yaml +62 -0
  524. package/library/tools/generate-motion/resource.yaml +66 -0
  525. package/library/tools/generate-video/resource.yaml +66 -0
  526. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  527. package/library/tools/get-asset/resource.yaml +42 -0
  528. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  529. package/library/tools/get-console/resource.yaml +69 -0
  530. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  531. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  532. package/library/tools/get-diagnostics/resource.yaml +42 -0
  533. package/library/tools/get-project-context/resource.yaml +45 -0
  534. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  535. package/library/tools/get-scene-tree/resource.yaml +52 -0
  536. package/library/tools/get-script-errors/resource.yaml +45 -0
  537. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  538. package/library/tools/import-asset/resource.yaml +73 -0
  539. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  540. package/library/tools/import-from-url/resource.yaml +51 -0
  541. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  542. package/library/tools/import-hdri/resource.yaml +69 -0
  543. package/library/tools/input-map-bind/resource.yaml +52 -0
  544. package/library/tools/inspect-node/resource.yaml +46 -0
  545. package/library/tools/inspect-resource/resource.yaml +45 -0
  546. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  547. package/library/tools/instantiate-scene/resource.yaml +62 -0
  548. package/library/tools/is-running/resource.yaml +40 -0
  549. package/library/tools/library-feedback/resource.yaml +89 -0
  550. package/library/tools/list-my-assets/resource.yaml +56 -0
  551. package/library/tools/navigation-probe/resource.yaml +85 -0
  552. package/library/tools/open/resource.yaml +80 -0
  553. package/library/tools/open-main-scene/resource.yaml +40 -0
  554. package/library/tools/open-scene/resource.yaml +46 -0
  555. package/library/tools/play/resource.yaml +91 -0
  556. package/library/tools/project-setting/resource.yaml +53 -0
  557. package/library/tools/read-file/resource.yaml +47 -0
  558. package/library/tools/read-library/resource.yaml +67 -0
  559. package/library/tools/recent-events/resource.yaml +71 -0
  560. package/library/tools/remove-node/resource.yaml +51 -0
  561. package/library/tools/replace-node/resource.yaml +57 -0
  562. package/library/tools/replace-text/resource.yaml +61 -0
  563. package/library/tools/run-editor-script/resource.yaml +61 -0
  564. package/library/tools/run-script/resource.yaml +73 -0
  565. package/library/tools/runtime-animate/resource.yaml +140 -0
  566. package/library/tools/runtime-call/resource.yaml +74 -0
  567. package/library/tools/runtime-set/resource.yaml +80 -0
  568. package/library/tools/runtime-spawn/resource.yaml +95 -0
  569. package/library/tools/save-scene/resource.yaml +50 -0
  570. package/library/tools/screenshot/resource.yaml +112 -0
  571. package/library/tools/search-assets/resource.yaml +67 -0
  572. package/library/tools/search-library/resource.yaml +81 -0
  573. package/library/tools/select-node/resource.yaml +48 -0
  574. package/library/tools/set-prop/resource.yaml +64 -0
  575. package/library/tools/set-resource-property/resource.yaml +66 -0
  576. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  577. package/library/tools/snap-to-surface/resource.yaml +90 -0
  578. package/library/tools/snapshot-diff/resource.yaml +58 -0
  579. package/library/tools/starcast/resource.yaml +120 -0
  580. package/library/tools/start-game-task/resource.yaml +91 -0
  581. package/library/tools/stop/resource.yaml +51 -0
  582. package/library/tools/test-placement/resource.yaml +109 -0
  583. package/library/tools/ui-actions/resource.yaml +77 -0
  584. package/library/tools/ui-activate/resource.yaml +88 -0
  585. package/library/tools/ui-screenshot/resource.yaml +63 -0
  586. package/library/tools/ui-tree/resource.yaml +69 -0
  587. package/library/tools/wait-for-event/resource.yaml +84 -0
  588. package/library/tools/world-snapshot/resource.yaml +60 -0
  589. package/library/tools/write-file/resource.yaml +54 -0
  590. package/package.json +22 -16
  591. package/registry/generated/aliases.json +207 -0
  592. package/registry/generated/counts.json +12 -0
  593. package/registry/generated/gemini-extension.json +122 -0
  594. package/registry/generated/index.json +7709 -0
  595. package/registry/generated/marketplace.claude.json +44 -0
  596. package/registry/generated/mcp.json +13 -0
  597. package/registry/generated/plugin.claude.json +135 -0
  598. package/registry/generated/plugin.codex.json +144 -0
  599. package/registry/generated/plugin.cursor.json +134 -0
  600. package/registry/generated/plugin.factory.json +117 -0
  601. package/registry/generated/skills-registry.json +851 -0
  602. package/registry/generated/templates-registry.json +455 -0
  603. package/registry/schemas/allowed-hosts.json +19 -0
  604. package/registry/schemas/collection.schema.json +68 -0
  605. package/registry/schemas/domains.json +96 -0
  606. package/registry/schemas/example.schema.json +11 -0
  607. package/registry/schemas/reference.schema.json +10 -0
  608. package/registry/schemas/resource.schema.json +154 -0
  609. package/registry/schemas/skill.schema.json +14 -0
  610. package/registry/schemas/template.schema.json +46 -0
  611. package/registry/schemas/tool.schema.json +61 -0
  612. package/_persona/summer/SKILL.md +0 -113
  613. package/dist/bin/postinstall.d.ts +0 -2
  614. package/dist/bin/postinstall.js +0 -3
  615. package/dist/commands/cloud.d.ts +0 -2
  616. package/dist/commands/cloud.js +0 -80
  617. package/dist/commands/create.d.ts +0 -3
  618. package/dist/commands/create.js +0 -171
  619. package/dist/commands/install.d.ts +0 -19
  620. package/dist/commands/install.js +0 -194
  621. package/dist/commands/list.js +0 -67
  622. package/dist/commands/logout.js +0 -13
  623. package/dist/commands/logs.d.ts +0 -2
  624. package/dist/commands/logs.js +0 -19
  625. package/dist/commands/open.d.ts +0 -2
  626. package/dist/commands/open.js +0 -32
  627. package/dist/commands/orchestrator.d.ts +0 -8
  628. package/dist/commands/orchestrator.js +0 -143
  629. package/dist/commands/run.d.ts +0 -2
  630. package/dist/commands/run.js +0 -167
  631. package/dist/commands/status.js +0 -46
  632. package/dist/lib/banner.d.ts +0 -4
  633. package/dist/lib/banner.js +0 -122
  634. package/dist/lib/cloud/api.d.ts +0 -79
  635. package/dist/lib/cloud/api.js +0 -107
  636. package/dist/lib/cloud/apply.d.ts +0 -32
  637. package/dist/lib/cloud/apply.js +0 -294
  638. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  639. package/dist/lib/cloud/checkpoint.js +0 -142
  640. package/dist/lib/cloud/conflicts.d.ts +0 -55
  641. package/dist/lib/cloud/conflicts.js +0 -131
  642. package/dist/lib/cloud/containment.d.ts +0 -8
  643. package/dist/lib/cloud/containment.js +0 -52
  644. package/dist/lib/cloud/diff.d.ts +0 -39
  645. package/dist/lib/cloud/diff.js +0 -138
  646. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  647. package/dist/lib/cloud/engine-bridge.js +0 -139
  648. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  649. package/dist/lib/cloud/hash-cache.js +0 -44
  650. package/dist/lib/cloud/hash.d.ts +0 -10
  651. package/dist/lib/cloud/hash.js +0 -111
  652. package/dist/lib/cloud/http.d.ts +0 -17
  653. package/dist/lib/cloud/http.js +0 -47
  654. package/dist/lib/cloud/lock-path.d.ts +0 -1
  655. package/dist/lib/cloud/lock-path.js +0 -5
  656. package/dist/lib/cloud/lock.d.ts +0 -14
  657. package/dist/lib/cloud/lock.js +0 -143
  658. package/dist/lib/cloud/manifest.d.ts +0 -6
  659. package/dist/lib/cloud/manifest.js +0 -41
  660. package/dist/lib/cloud/paths.d.ts +0 -20
  661. package/dist/lib/cloud/paths.js +0 -90
  662. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  663. package/dist/lib/cloud/project-godot-merge.js +0 -185
  664. package/dist/lib/cloud/rules.d.ts +0 -39
  665. package/dist/lib/cloud/rules.js +0 -159
  666. package/dist/lib/cloud/sync.d.ts +0 -21
  667. package/dist/lib/cloud/sync.js +0 -518
  668. package/dist/lib/cloud/transfer.d.ts +0 -23
  669. package/dist/lib/cloud/transfer.js +0 -184
  670. package/dist/lib/cloud/types.d.ts +0 -62
  671. package/dist/lib/cloud/types.js +0 -1
  672. package/dist/lib/cloud/validate-path.d.ts +0 -23
  673. package/dist/lib/cloud/validate-path.js +0 -103
  674. package/dist/lib/engine.d.ts +0 -51
  675. package/dist/lib/game-task-plan.d.ts +0 -42
  676. package/dist/lib/project-memory.d.ts +0 -33
  677. package/dist/lib/public-surface-paths.d.ts +0 -13
  678. package/dist/lib/public-surface-paths.js +0 -42
  679. package/dist/lib/remote-templates.d.ts +0 -25
  680. package/dist/lib/remote-templates.js +0 -86
  681. package/dist/lib/skills-registry.d.ts +0 -572
  682. package/dist/lib/skills-registry.js +0 -1061
  683. package/dist/lib/version-check.d.ts +0 -106
  684. package/dist/mcp/tools/cloud-tools.js +0 -42
  685. package/references/mcp-tools-reference.md +0 -199
  686. package/references/template-registry.md +0 -73
  687. package/skills/README.md +0 -103
  688. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  689. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  690. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  691. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  692. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  693. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  694. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  695. package/skills/workflow/gameskill/SKILL.md +0 -120
  696. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  697. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  698. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  699. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  700. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  701. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  702. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  703. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  704. package/skills/workflow/skill-create/SKILL.md +0 -153
  705. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  706. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  707. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  708. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  709. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  710. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  711. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  712. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  713. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  719. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  720. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  721. /package/dist/{lib → core}/store.d.ts +0 -0
  722. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  723. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  724. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  725. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  726. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  727. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  728. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  729. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  730. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  731. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  732. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  733. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  734. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  735. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  736. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  737. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  738. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  739. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  740. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  741. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  742. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,447 @@
1
+ import { Command } from "commander";
2
+ import { execSync } from "child_process";
3
+ import { createInterface } from "node:readline/promises";
4
+ import { createHash } from "crypto";
5
+ import { chmodSync, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync, symlinkSync, } from "fs";
6
+ import { pipeline } from "stream/promises";
7
+ import { Readable } from "stream";
8
+ import { tmpdir, platform } from "os";
9
+ import { join, resolve } from "path";
10
+ import { ENGINE_BINARY_ENV, LINUX_ENGINE_BINARY_NAME, findExtractedEngineBinary, linuxArchiveKind, linuxEngineInstallDir, pickLinuxReleaseAsset, resolveLinuxInstallSource, } from "../../core/engine-install.js";
11
+ const RELEASES_URL = "https://www.summerengine.com/api/desktop/releases";
12
+ /** Guard a download URL from the releases endpoint. A missing/empty URL (an
13
+ * outdated or misconfigured endpoint) otherwise becomes a cryptic
14
+ * fetch(undefined) failure — surface it clearly with a manual fallback. */
15
+ export function requireDownloadUrl(value, label) {
16
+ if (!value || value.trim().length === 0) {
17
+ throw new Error(`Release info is missing the ${label} download URL — the releases endpoint may be ` +
18
+ `outdated. Download manually from https://summerengine.com/download`);
19
+ }
20
+ return value;
21
+ }
22
+ /** Verify a downloaded file's sha256 against the expected hash from the releases
23
+ * endpoint. Skipped when no expected hash is published. Catches a truncated or
24
+ * corrupted download (a ~1GB install over a flaky network) before it becomes a
25
+ * confusing DMG-mount / installer failure downstream. */
26
+ export function verifyChecksum(actual, expected, label) {
27
+ if (!expected || expected.trim().length === 0)
28
+ return; // nothing published to verify against
29
+ if (actual.toLowerCase() !== expected.toLowerCase()) {
30
+ throw new Error(`${label} checksum mismatch — the download was corrupted or incomplete ` +
31
+ `(expected ${expected.slice(0, 12)}…, got ${actual.slice(0, 12)}…). Re-run \`summer install\`.`);
32
+ }
33
+ }
34
+ // The bundle-version readers live in core (src/core/launch-posture.ts) because
35
+ // `summer run` needs the installed version BEFORE the engine is up to decide
36
+ // whether it may pass --summer-background; re-exported here for install.test.ts.
37
+ import { parseMacBundleVersion, readMacBundleVersion } from "../../core/launch-posture.js";
38
+ export { parseMacBundleVersion, readMacBundleVersion };
39
+ export function isSameVersion(installed, latest) {
40
+ if (!installed)
41
+ return false;
42
+ const norm = (value) => value.trim().replace(/^v/i, "");
43
+ return norm(installed) === norm(latest);
44
+ }
45
+ /** Decide what `summer install` may do about an existing /Applications/Summer.app.
46
+ * Replacing an installed engine is destructive, so it needs --yes or a TTY
47
+ * prompt; an equal version is a no-op success. */
48
+ export function planMacInstall(input) {
49
+ if (!input.exists)
50
+ return { action: "install" };
51
+ if (isSameVersion(input.installedVersion, input.latestVersion)) {
52
+ return { action: "up-to-date", version: input.latestVersion };
53
+ }
54
+ if (input.yes)
55
+ return { action: "install" };
56
+ if (input.isTTY)
57
+ return { action: "needs-confirmation", installed: input.installedVersion };
58
+ return {
59
+ action: "refuse",
60
+ reason: `Summer Engine ${input.installedVersion ?? "(unknown version)"} is already installed; ` +
61
+ `updating to v${input.latestVersion} replaces it. Re-run with --yes to confirm.`,
62
+ };
63
+ }
64
+ /** Replace destApp with the bundle on the mounted DMG WITHOUT a window where
65
+ * no engine exists: copy to <destApp>.new first, and only after that
66
+ * succeeds remove the old bundle and rename the staged copy into place. A
67
+ * failed copy leaves the existing install untouched. */
68
+ export function replaceMacApp(mountPoint, destApp, exec) {
69
+ const staged = `${destApp}.new`;
70
+ exec(`rm -rf "${staged}"`);
71
+ try {
72
+ exec(`cp -R "${mountPoint}/Summer.app" "${staged}"`);
73
+ }
74
+ catch (err) {
75
+ try {
76
+ exec(`rm -rf "${staged}"`);
77
+ }
78
+ catch { /* best effort */ }
79
+ throw err;
80
+ }
81
+ exec(`rm -rf "${destApp}"`);
82
+ exec(`mv "${staged}" "${destApp}"`);
83
+ }
84
+ /** Remove partial downloads / staged bundles when the user interrupts. */
85
+ function cleanupOnSignal(paths) {
86
+ const handler = () => {
87
+ for (const path of paths) {
88
+ try {
89
+ rmSync(path, { recursive: true, force: true });
90
+ }
91
+ catch { /* best effort */ }
92
+ }
93
+ process.exit(130);
94
+ };
95
+ process.on("SIGINT", handler);
96
+ process.on("SIGTERM", handler);
97
+ return () => {
98
+ process.off("SIGINT", handler);
99
+ process.off("SIGTERM", handler);
100
+ };
101
+ }
102
+ async function confirm(question) {
103
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
104
+ try {
105
+ const answer = (await rl.question(`${question} [y/N] `)).trim().toLowerCase();
106
+ return answer === "y" || answer === "yes";
107
+ }
108
+ finally {
109
+ rl.close();
110
+ }
111
+ }
112
+ /** Velopack Setup.exe install args. Velopack is NOT NSIS: silent install is
113
+ * `--silent` and a custom directory is `--installto <dir>` (per Velopack's
114
+ * setup.exe CLI). The old NSIS flags (/S, /D=) are rejected by the Velopack
115
+ * installer with "unexpected argument '/S' found" — this is the wizard bug. */
116
+ export function windowsInstallerArgs(customPath) {
117
+ return customPath ? `--silent --installto "${customPath}"` : "--silent";
118
+ }
119
+ export const installCommand = new Command("install")
120
+ .description("Download and install Summer Engine")
121
+ .option("--path <dir>", "Custom install directory")
122
+ .option("--yes", "Replace an already-installed engine without prompting")
123
+ .action(async (opts) => {
124
+ const os = platform();
125
+ if (os === "linux") {
126
+ await installLinux(opts.path);
127
+ return;
128
+ }
129
+ if (os !== "darwin" && os !== "win32") {
130
+ console.error(`Unsupported platform: ${os}.\n` +
131
+ "Summer Engine installs on macOS, Windows, and Linux (x86_64).\n" +
132
+ "Download from: https://summerengine.com/download");
133
+ process.exit(1);
134
+ }
135
+ console.log("Fetching latest release info...");
136
+ let releases;
137
+ try {
138
+ const res = await fetch(RELEASES_URL, { signal: AbortSignal.timeout(10000) });
139
+ if (!res.ok)
140
+ throw new Error(`HTTP ${res.status}`);
141
+ releases = (await res.json());
142
+ }
143
+ catch (err) {
144
+ console.error("Could not fetch release info. Download manually from:\n" +
145
+ " https://summerengine.com/download");
146
+ process.exit(1);
147
+ }
148
+ if (os === "darwin") {
149
+ await installMac(releases, opts.path, Boolean(opts.yes));
150
+ }
151
+ else {
152
+ await installWindows(releases, opts.path);
153
+ }
154
+ });
155
+ async function installMac(releases, customPath, yes = false) {
156
+ const info = releases.latest.macos;
157
+ if (!info) {
158
+ console.error("No macOS release found.");
159
+ process.exit(1);
160
+ }
161
+ const dmgUrl = requireDownloadUrl(info.dmg_url, "macOS DMG");
162
+ console.log(`Latest version: ${info.version}`);
163
+ const destApp = customPath || "/Applications/Summer.app";
164
+ const exists = existsSync(destApp);
165
+ const installedVersion = exists ? readMacBundleVersion(destApp) : null;
166
+ const plan = planMacInstall({
167
+ exists,
168
+ installedVersion,
169
+ latestVersion: info.version,
170
+ yes,
171
+ isTTY: Boolean(process.stdin.isTTY),
172
+ });
173
+ if (plan.action === "up-to-date") {
174
+ console.log(`Summer Engine v${plan.version} is already installed at ${destApp} (up to date).`);
175
+ return;
176
+ }
177
+ if (plan.action === "refuse") {
178
+ console.error(plan.reason);
179
+ process.exitCode = 1;
180
+ return;
181
+ }
182
+ if (plan.action === "needs-confirmation") {
183
+ console.log(`Summer Engine ${plan.installed ?? "(unknown version)"} is installed at ${destApp}.`);
184
+ if (!(await confirm(`Replace it with v${info.version}?`))) {
185
+ console.log("Cancelled. Nothing was changed.");
186
+ return;
187
+ }
188
+ }
189
+ const dmgPath = join(tmpdir(), `Summer-v${info.version}.dmg`);
190
+ const stagedApp = `${destApp}.new`;
191
+ const releaseSignals = cleanupOnSignal([dmgPath, stagedApp]);
192
+ console.log(`Downloading Summer Engine v${info.version} (~1 GB, includes bundled Git + runtime)...`);
193
+ try {
194
+ const { sha256 } = await downloadFile(dmgUrl, dmgPath);
195
+ verifyChecksum(sha256, info.dmg_sha256, "DMG");
196
+ }
197
+ catch (err) {
198
+ releaseSignals();
199
+ try {
200
+ execSync(`rm -f "${dmgPath}"`, { stdio: "ignore" });
201
+ }
202
+ catch { /* best effort */ }
203
+ console.error(err instanceof Error ? err.message : String(err));
204
+ process.exit(1);
205
+ }
206
+ console.log("Mounting DMG...");
207
+ const mountOutput = execSync(`hdiutil attach "${dmgPath}" -nobrowse -noverify -noautoopen`, {
208
+ encoding: "utf-8",
209
+ });
210
+ const mountPoint = mountOutput
211
+ .split("\n")
212
+ .filter((line) => line.includes("/Volumes/"))
213
+ .map((line) => line.trim().split("\t").pop()?.trim())
214
+ .find(Boolean);
215
+ if (!mountPoint) {
216
+ console.error("Failed to find mount point. Install manually from the DMG.");
217
+ process.exit(1);
218
+ }
219
+ try {
220
+ console.log("Installing to " + destApp + "...");
221
+ replaceMacApp(mountPoint, destApp, (command) => execSync(command, { stdio: "ignore" }));
222
+ console.log("Done!");
223
+ }
224
+ catch (err) {
225
+ console.error(`Install failed: ${err instanceof Error ? err.message : String(err)}\n` +
226
+ (exists ? `The existing ${destApp} was left in place.` : "Nothing was installed."));
227
+ process.exitCode = 1;
228
+ return;
229
+ }
230
+ finally {
231
+ execSync(`hdiutil detach "${mountPoint}" -quiet`, { stdio: "ignore" });
232
+ try {
233
+ execSync(`rm "${dmgPath}"`, { stdio: "ignore" });
234
+ }
235
+ catch { }
236
+ releaseSignals();
237
+ }
238
+ console.log(`\nSummer Engine v${info.version} installed to ${destApp}`);
239
+ console.log("\nNext steps:");
240
+ console.log(" summer login # Sign in to your account");
241
+ console.log(" summer run # Launch the engine");
242
+ }
243
+ async function installWindows(releases, customPath) {
244
+ const info = releases.latest.windows;
245
+ if (!info) {
246
+ console.error("No Windows release found.");
247
+ process.exit(1);
248
+ }
249
+ const exeUrl = requireDownloadUrl(info.url, "Windows installer");
250
+ console.log(`Latest version: ${info.version}`);
251
+ const exePath = join(tmpdir(), `Summer-v${info.version}.exe`);
252
+ console.log(`Downloading Summer Engine v${info.version} (~1 GB, includes bundled Git + runtime)...`);
253
+ try {
254
+ const { sha256 } = await downloadFile(exeUrl, exePath);
255
+ verifyChecksum(sha256, info.sha256, "installer");
256
+ }
257
+ catch (err) {
258
+ try {
259
+ execSync(`del "${exePath}"`, { stdio: "ignore" });
260
+ }
261
+ catch { /* best effort */ }
262
+ console.error(err instanceof Error ? err.message : String(err));
263
+ process.exit(1);
264
+ }
265
+ console.log("Running installer...");
266
+ try {
267
+ execSync(`"${exePath}" ${windowsInstallerArgs(customPath)}`, {
268
+ stdio: "inherit",
269
+ });
270
+ }
271
+ catch {
272
+ console.error("Installer failed. Try running it manually:\n " + exePath);
273
+ process.exit(1);
274
+ }
275
+ try {
276
+ execSync(`del "${exePath}"`, { stdio: "ignore" });
277
+ }
278
+ catch { }
279
+ console.log(`\nSummer Engine v${info.version} installed!`);
280
+ console.log("\nNext steps:");
281
+ console.log(" summer login # Sign in to your account");
282
+ console.log(" summer run # Launch the engine");
283
+ }
284
+ // ------------------------------------------------------------------- Linux
285
+ // Source resolution, release picking, and archive detection live in
286
+ // core/engine-install.ts; this section is the process I/O around them.
287
+ function walkFiles(dir) {
288
+ const out = [];
289
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
290
+ const path = join(dir, entry.name);
291
+ if (entry.isDirectory())
292
+ out.push(...walkFiles(path));
293
+ else if (entry.isFile())
294
+ out.push(path);
295
+ }
296
+ return out;
297
+ }
298
+ /** Register an existing binary the same way a download install does: the
299
+ * canonical ~/.summer/engine/summer-linux-x86_64 path points at it, so
300
+ * `summer run`/`summer doctor` find it even when the env var is not set. */
301
+ function registerExistingLinuxBinary(sourcePath, destDir, destBinary) {
302
+ const absolute = resolve(sourcePath);
303
+ if (!existsSync(absolute)) {
304
+ console.error(`${ENGINE_BINARY_ENV} points at ${absolute}, but nothing exists there.`);
305
+ process.exit(1);
306
+ }
307
+ try {
308
+ chmodSync(absolute, 0o755);
309
+ }
310
+ catch {
311
+ // Best effort — a read-only mount still works if already executable.
312
+ }
313
+ mkdirSync(destDir, { recursive: true });
314
+ if (absolute !== destBinary) {
315
+ rmSync(destBinary, { force: true });
316
+ symlinkSync(absolute, destBinary);
317
+ }
318
+ console.log(`Registered existing engine binary: ${absolute}`);
319
+ console.log(` -> ${destBinary}`);
320
+ }
321
+ async function fetchLinuxReleaseAsset(apiUrl) {
322
+ const res = await fetch(apiUrl, {
323
+ headers: { Accept: "application/vnd.github+json" },
324
+ signal: AbortSignal.timeout(15000),
325
+ });
326
+ if (!res.ok)
327
+ throw new Error(`HTTP ${res.status}`);
328
+ return pickLinuxReleaseAsset(await res.json());
329
+ }
330
+ async function installLinux(customPath) {
331
+ if (process.arch !== "x64") {
332
+ console.error(`Linux ${process.arch} has no published Summer Engine artifact yet (x86_64 only).\n` +
333
+ `Build from source, then set ${ENGINE_BINARY_ENV} to the binary and re-run \`summer install\`.`);
334
+ process.exit(1);
335
+ }
336
+ const destDir = customPath ? resolve(customPath) : linuxEngineInstallDir();
337
+ const destBinary = join(destDir, LINUX_ENGINE_BINARY_NAME);
338
+ const source = resolveLinuxInstallSource();
339
+ if (source.kind === "binary") {
340
+ registerExistingLinuxBinary(source.path, destDir, destBinary);
341
+ printLinuxNextSteps(destBinary);
342
+ return;
343
+ }
344
+ let url = source.kind === "url" ? source.url : "";
345
+ let sha256Url;
346
+ let versionLabel = "custom";
347
+ if (source.kind === "release") {
348
+ console.log("Fetching latest Linux release info...");
349
+ try {
350
+ const asset = await fetchLinuxReleaseAsset(source.apiUrl);
351
+ url = asset.url;
352
+ sha256Url = asset.sha256Url;
353
+ versionLabel = asset.version;
354
+ }
355
+ catch (err) {
356
+ console.error(`Could not resolve a Linux release artifact: ${err instanceof Error ? err.message : String(err)}`);
357
+ process.exit(1);
358
+ }
359
+ console.log(`Latest Linux release: ${versionLabel}`);
360
+ }
361
+ const kind = linuxArchiveKind(url);
362
+ const downloadPath = join(tmpdir(), `summer-engine-${Date.now()}.${kind === "binary" ? "bin" : kind === "zip" ? "zip" : "tar.gz"}`);
363
+ console.log(`Downloading ${url} ...`);
364
+ try {
365
+ const { sha256 } = await downloadFile(url, downloadPath);
366
+ if (sha256Url) {
367
+ const shaRes = await fetch(sha256Url, { signal: AbortSignal.timeout(15000) });
368
+ if (shaRes.ok) {
369
+ const expected = (await shaRes.text()).trim().split(/\s+/, 1)[0];
370
+ verifyChecksum(sha256, expected, "Linux artifact");
371
+ }
372
+ }
373
+ mkdirSync(destDir, { recursive: true });
374
+ let extractedBinary = downloadPath;
375
+ let extractDir = null;
376
+ if (kind !== "binary") {
377
+ extractDir = join(tmpdir(), `summer-engine-extract-${Date.now()}`);
378
+ mkdirSync(extractDir, { recursive: true });
379
+ if (kind === "tar.gz") {
380
+ execSync(`tar -xzf "${downloadPath}" -C "${extractDir}"`, { stdio: "ignore" });
381
+ }
382
+ else {
383
+ execSync(`unzip -oq "${downloadPath}" -d "${extractDir}"`, { stdio: "ignore" });
384
+ }
385
+ const found = findExtractedEngineBinary(walkFiles(extractDir));
386
+ if (!found) {
387
+ throw new Error(`The downloaded archive contains no engine binary (expected ${LINUX_ENGINE_BINARY_NAME}).`);
388
+ }
389
+ extractedBinary = found;
390
+ }
391
+ // Replace, never edit in place: an engine reading its own binary mid-write
392
+ // is worse than a moment with no file. rename first (same tmpfs), copy as
393
+ // the cross-device fallback.
394
+ rmSync(destBinary, { force: true });
395
+ try {
396
+ renameSync(extractedBinary, destBinary);
397
+ }
398
+ catch {
399
+ execSync(`cp "${extractedBinary}" "${destBinary}"`, { stdio: "ignore" });
400
+ }
401
+ chmodSync(destBinary, 0o755);
402
+ if (extractDir)
403
+ rmSync(extractDir, { recursive: true, force: true });
404
+ }
405
+ catch (err) {
406
+ console.error(err instanceof Error ? err.message : String(err));
407
+ process.exit(1);
408
+ }
409
+ finally {
410
+ rmSync(downloadPath, { force: true });
411
+ }
412
+ console.log(`\nSummer Engine (${versionLabel}) installed to ${destBinary}`);
413
+ printLinuxNextSteps(destBinary);
414
+ }
415
+ function printLinuxNextSteps(binary) {
416
+ console.log("\nNext steps:");
417
+ console.log(" summer doctor # Verify the setup");
418
+ console.log(` ${binary} --headless --editor --path <project> # Headless engine`);
419
+ console.log(" summer login # Optional: only gateway features (asset search/generation) need it");
420
+ }
421
+ export async function downloadFile(url, dest) {
422
+ const res = await fetch(url);
423
+ if (!res.ok || !res.body) {
424
+ throw new Error(`Download failed: HTTP ${res.status}`);
425
+ }
426
+ const dir = join(dest, "..");
427
+ if (!existsSync(dir))
428
+ mkdirSync(dir, { recursive: true });
429
+ const fileStream = createWriteStream(dest);
430
+ const readable = Readable.fromWeb(res.body);
431
+ // Hash while streaming (the 'data' listener and the pipe both see every chunk
432
+ // in flowing mode), so we get integrity for free without a second read pass.
433
+ const hash = createHash("sha256");
434
+ let downloaded = 0;
435
+ const total = parseInt(res.headers.get("content-length") || "0", 10);
436
+ readable.on("data", (chunk) => {
437
+ hash.update(chunk);
438
+ downloaded += chunk.length;
439
+ if (total > 0) {
440
+ const pct = Math.round((downloaded / total) * 100);
441
+ process.stdout.write(`\r ${pct}% (${(downloaded / 1024 / 1024).toFixed(1)}MB)`);
442
+ }
443
+ });
444
+ await pipeline(readable, fileStream);
445
+ process.stdout.write("\n");
446
+ return { sha256: hash.digest("hex") };
447
+ }
@@ -0,0 +1,72 @@
1
+ import { Command } from "commander";
2
+ import { readdirSync, existsSync } from "fs";
3
+ import { join } from "path";
4
+ import { getTemplateRegistry } from "../../core/templates.js";
5
+ export const listCommand = new Command("list")
6
+ .description("List available templates or local projects")
7
+ .argument("<what>", "'templates' or 'projects'")
8
+ .action(async (what) => {
9
+ if (what === "templates") {
10
+ listTemplates();
11
+ }
12
+ else if (what === "projects") {
13
+ listProjects();
14
+ }
15
+ else {
16
+ console.error(`Unknown: '${what}'. Use 'templates' or 'projects'.`);
17
+ process.exit(1);
18
+ }
19
+ });
20
+ /**
21
+ * Registry-only listing (CONTRACT.md §7): every template shown here resolves
22
+ * through its library pin manifest. There is no live GitHub-org listing —
23
+ * anything not in the registry is not installable by `summer create`.
24
+ */
25
+ function listTemplates() {
26
+ const entries = getTemplateRegistry();
27
+ const builtins = entries.filter((e) => e.builtin);
28
+ const pinned = entries.filter((e) => !e.builtin);
29
+ const pad = Math.max(16, ...entries.map((e) => e.slug.length));
30
+ const line = (t) => {
31
+ const flag = t.status === "stable" ? "" : ` [${t.status}]`;
32
+ return ` ${t.slug.padEnd(pad)} ${t.summary}${flag}`;
33
+ };
34
+ console.log("Built-in templates (generated locally, no download):\n");
35
+ for (const t of builtins)
36
+ console.log(line(t));
37
+ console.log("\nPinned templates (fetched at an exact commit; tree digest verified before use):\n");
38
+ for (const t of pinned) {
39
+ console.log(line(t));
40
+ if (t.systems.length > 0)
41
+ console.log(` ${"".padEnd(pad)} systems: ${t.systems.join(", ")}`);
42
+ if (t.status !== "stable")
43
+ for (const note of t.do_not_use_when)
44
+ console.log(` ${"".padEnd(pad)} note: ${note}`);
45
+ }
46
+ console.log("\nCreate a project: summer create <template> [name]");
47
+ console.log("Example: summer create 3d-third-person-controller my-game");
48
+ console.log("Pinning rules: library/templates/README.md");
49
+ }
50
+ function listProjects() {
51
+ const cwd = process.cwd();
52
+ const entries = readdirSync(cwd, { withFileTypes: true });
53
+ const projects = [];
54
+ for (const entry of entries) {
55
+ if (entry.isDirectory()) {
56
+ const projectFile = join(cwd, entry.name, "project.godot");
57
+ if (existsSync(projectFile)) {
58
+ projects.push(entry.name);
59
+ }
60
+ }
61
+ }
62
+ if (projects.length === 0) {
63
+ console.log("No Summer Engine projects found in current directory.");
64
+ console.log("\nCreate one: summer create 3d-basic my-game");
65
+ return;
66
+ }
67
+ console.log(`Projects in ${cwd}:\n`);
68
+ for (const p of projects) {
69
+ console.log(` ${p}/`);
70
+ }
71
+ console.log(`\nOpen a project: summer run <name>`);
72
+ }
@@ -1,8 +1,8 @@
1
1
  import { Command } from "commander";
2
2
  import { randomUUID } from "crypto";
3
3
  import open from "open";
4
- import { getAuthToken, getCreatorToken, saveCreatorToken, saveLoginSession, } from "../lib/auth.js";
5
- import { getCreatorApiUrl, getGatewayUrl } from "../lib/config.js";
4
+ import { getAuthToken, getCreatorToken, saveCreatorToken, saveLoginSession, } from "../../core/auth.js";
5
+ import { getCreatorApiUrl, resolveGatewayUrl } from "../../core/config.js";
6
6
  const POLL_INTERVAL_MS = 2000;
7
7
  // One generous window on ONE session id. First-time users may need to create an
8
8
  // account and confirm an email before they can approve the CLI. The gateway
@@ -102,6 +102,9 @@ export async function runCreatorLogin(overrides = {}) {
102
102
  await saveCreatorToken(token);
103
103
  deps.log("Creator publishing connected. Your core Summer login token was not changed.");
104
104
  }
105
+ /** The gateway answered with a terminal 4xx — retrying the same URL cannot help. */
106
+ class LoginRejectedError extends Error {
107
+ }
105
108
  const defaultDependencies = {
106
109
  fetch,
107
110
  openUrl: open,
@@ -112,7 +115,7 @@ const defaultDependencies = {
112
115
  };
113
116
  export async function runLogin(overrides = {}) {
114
117
  const deps = { ...defaultDependencies, ...overrides };
115
- const gatewayUrl = await getGatewayUrl();
118
+ const gatewayUrl = await resolveGatewayUrl();
116
119
  const sessionId = deps.randomId();
117
120
  const loginUrl = `${gatewayUrl}/login?cli_session=${encodeURIComponent(sessionId)}`;
118
121
  deps.log("Sign in at: " + loginUrl);
@@ -134,8 +137,15 @@ export async function runLogin(overrides = {}) {
134
137
  if (deps.now() - lastHeartbeat >= HEARTBEAT_MS) {
135
138
  lastHeartbeat = deps.now();
136
139
  deps.log('Still waiting — finish signing in (or creating your account) in the browser, then click "Yes, Sign In". Same link: ' +
137
- loginUrl);
140
+ loginUrl +
141
+ (lastError ? ` (last error: ${lastError})` : ""));
138
142
  }
143
+ // Only the network round-trip is retried. A completed session is handled
144
+ // OUTSIDE this try: saveLoginSession rejecting the token (mismatched sub,
145
+ // non-CLI token type, already expired) is terminal — the gateway will
146
+ // return the same payload forever, so polling on would only bury the
147
+ // recovery message under a 15-minute timeout.
148
+ let completed = null;
139
149
  try {
140
150
  const res = await deps.fetch(pollUrl, {
141
151
  signal: AbortSignal.timeout(5000),
@@ -145,33 +155,39 @@ export async function runLogin(overrides = {}) {
145
155
  lastError =
146
156
  "The login service is unavailable (Redis/auth is not configured).";
147
157
  }
148
- else if (res.status >= 400 && res.status < 500) {
149
- lastError = `The login request was rejected (${res.status}).`;
150
- }
151
158
  else if (res.status >= 500) {
152
159
  lastError = `The login service failed (${res.status}).`;
153
160
  }
161
+ else if (res.status === 429 || res.status === 408) {
162
+ lastError = `The login service asked us to slow down (${res.status}).`;
163
+ }
164
+ else {
165
+ // 401/403/404 and the other 4xx are terminal: this URL will not
166
+ // start succeeding on its own.
167
+ throw new LoginRejectedError(`The login request was rejected (${res.status}). Recovery: check that gateway.url (${gatewayUrl}) is the Summer gateway you meant, then run "summer login" again.`);
168
+ }
154
169
  continue;
155
170
  }
156
171
  const data = (await res.json());
157
172
  if (data.status === "pending")
158
173
  continue;
159
174
  if (data.status === "complete" && data.token) {
160
- await saveLoginSession({
161
- token: data.token,
162
- cloudToken: data.cloudToken,
163
- user: data.user,
164
- scopes: data.scopes,
165
- cloudScopes: data.cloudScopes,
166
- });
167
- deps.log(`\nLogged in as ${data.user?.email || "unknown"}`);
168
- return;
175
+ completed = { token: data.token, user: data.user, scopes: data.scopes };
176
+ }
177
+ else {
178
+ lastError = "The login service returned an incomplete authentication result.";
169
179
  }
170
- lastError = "The login service returned an incomplete authentication result.";
171
180
  }
172
181
  catch (err) {
182
+ if (err instanceof LoginRejectedError)
183
+ throw err;
173
184
  lastError = err instanceof Error ? err.message : "Network error";
174
185
  }
186
+ if (completed) {
187
+ await saveLoginSession(completed);
188
+ deps.log(`\nLogged in as ${completed.user?.email || "unknown"}`);
189
+ return;
190
+ }
175
191
  }
176
192
  throw new Error(`Login timed out after ${Math.round(POLL_TIMEOUT_MS / 60000)} minutes.${lastError ? ` Last error: ${lastError}` : ""} Recovery: run "summer login" again and complete "Yes, Sign In" in the browser tab it opens.`);
177
193
  }
@@ -1,2 +1,3 @@
1
1
  import { Command } from "commander";
2
2
  export declare const logoutCommand: Command;
3
+ export declare function runLogout(log: (message: string) => void): Promise<void>;
@@ -0,0 +1,19 @@
1
+ import { Command } from "commander";
2
+ import { clearAuthCredentials, hasEnvAuthToken } from "../../core/auth.js";
3
+ export const logoutCommand = new Command("logout")
4
+ .description("Sign out and clear stored auth tokens")
5
+ .action(async () => {
6
+ await runLogout(console.log);
7
+ });
8
+ export async function runLogout(log) {
9
+ const removed = await clearAuthCredentials();
10
+ if (removed > 0) {
11
+ log("Logged out. Stored auth tokens cleared.");
12
+ }
13
+ else {
14
+ log("Already logged out (no stored tokens found).");
15
+ }
16
+ if (hasEnvAuthToken()) {
17
+ log("Note: SUMMER_TOKEN is set in this environment and still authenticates gateway calls — logout does not affect it. Unset SUMMER_TOKEN to sign out here.");
18
+ }
19
+ }
@@ -1,14 +1,7 @@
1
1
  import { Command } from "commander";
2
- import { type ProjectMemorySummary } from "../lib/project-memory.js";
3
- interface ResolvedMemoryProject {
4
- projectPath: string | null;
5
- source: "option" | "engine" | "cwd" | "none";
6
- reason?: string;
7
- }
2
+ import { type ProjectMemorySummary } from "../../project-memory/project-memory.js";
8
3
  export declare const memoryCommand: Command;
9
- export declare function resolveMemoryProject(projectOption?: string): Promise<ResolvedMemoryProject>;
10
4
  export declare function findProjectRoot(startDir: string): string | null;
11
5
  export declare function resolveMemoryFilePath(projectPath: string, requested: string): string;
12
6
  export declare function formatMemorySummary(projectPath: string, summary: ProjectMemorySummary): string;
13
7
  export declare function formatStatusMemoryLine(summary: ProjectMemorySummary): string;
14
- export {};