summer-engine 2.8.1 → 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 +134 -41
  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 +148 -23
  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/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
  367. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  368. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  369. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  370. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  371. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  372. package/library/skills/investigating-bugs/resource.yaml +24 -0
  373. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  374. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  375. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  376. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +23 -23
  377. package/library/skills/make-game/resource.yaml +35 -0
  378. package/library/skills/music-track/resource.yaml +28 -0
  379. package/library/skills/navigate-summer/SKILL.md +61 -0
  380. package/library/skills/navigate-summer/resource.yaml +35 -0
  381. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  382. package/library/skills/new-project/resource.yaml +28 -0
  383. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  384. package/library/skills/organic-model/resource.yaml +32 -0
  385. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  386. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  387. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  388. package/library/skills/pixel-art/resource.yaml +31 -0
  389. package/library/skills/play/resource.yaml +26 -0
  390. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  391. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  392. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  393. package/library/skills/procedural-animation/resource.yaml +33 -0
  394. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  395. package/library/skills/prop-model/resource.yaml +33 -0
  396. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  397. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  398. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  399. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  400. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  401. package/library/skills/remote-deploy/resource.yaml +23 -0
  402. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  403. package/library/skills/retarget/resource.yaml +33 -0
  404. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  405. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  406. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +9 -1
  407. package/library/skills/scene-composition/resource.yaml +27 -0
  408. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  409. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  410. package/library/skills/scene-scripting/SKILL.md +764 -0
  411. package/library/skills/scene-scripting/resource.yaml +58 -0
  412. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  413. package/library/skills/scene-to-level/resource.yaml +33 -0
  414. package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
  415. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  416. package/library/skills/skill-create/SKILL.md +138 -0
  417. package/library/skills/skill-create/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  419. package/library/skills/skill-improve/resource.yaml +25 -0
  420. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  421. package/library/skills/skill-test/resource.yaml +26 -0
  422. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  423. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  424. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  425. package/library/skills/skybox-panorama/resource.yaml +28 -0
  426. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  427. package/library/skills/sound-effect/resource.yaml +27 -0
  428. package/library/skills/spatial-placement/SKILL.md +74 -0
  429. package/library/skills/spatial-placement/resource.yaml +42 -0
  430. package/library/skills/spatial-placement/tests/spec.md +65 -0
  431. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  432. package/library/skills/sprite-sheet/resource.yaml +32 -0
  433. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  434. package/library/skills/tileable-texture/resource.yaml +31 -0
  435. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  436. package/library/skills/trailer-shot/resource.yaml +27 -0
  437. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  438. package/library/skills/tune-performance/resource.yaml +31 -0
  439. package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
  440. package/library/skills/ui-basics/resource.yaml +25 -0
  441. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  442. package/library/skills/ui-graphics/resource.yaml +29 -0
  443. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  444. package/library/skills/use-widget-asset/resource.yaml +29 -0
  445. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  446. package/library/skills/using-summer/resource.yaml +41 -0
  447. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  448. package/library/skills/vehicle-model/resource.yaml +34 -0
  449. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  450. package/library/skills/verification-before-completion/resource.yaml +23 -0
  451. package/library/skills/verifying-scenes/SKILL.md +98 -0
  452. package/library/skills/verifying-scenes/resource.yaml +42 -0
  453. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  454. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  455. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  456. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  457. package/library/skills/vfx-fire/resource.yaml +35 -0
  458. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  459. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  461. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  462. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-lightning/resource.yaml +33 -0
  464. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  465. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  467. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  468. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  469. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  470. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  471. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  472. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  473. package/library/skills/vfx-smoke/resource.yaml +32 -0
  474. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  475. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  476. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  477. package/library/skills/voice-line/resource.yaml +27 -0
  478. package/library/skills/world-building-3d/SKILL.md +105 -0
  479. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  480. package/library/skills/world-building-3d/resource.yaml +44 -0
  481. package/library/skills/world-building-3d/tests/spec.md +48 -0
  482. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  483. package/library/skills/writing-plans/resource.yaml +23 -0
  484. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  485. package/library/skills/writing-skills/resource.yaml +29 -0
  486. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  487. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  488. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  489. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  490. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  491. package/library/templates/2d-platformer/resource.yaml +24 -0
  492. package/library/templates/2d-rpg/resource.yaml +21 -0
  493. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  494. package/library/templates/3d-basic/resource.yaml +16 -0
  495. package/library/templates/3d-city-kit/resource.yaml +24 -0
  496. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  497. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  498. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  499. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  500. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  501. package/library/templates/3d-racing-game/resource.yaml +21 -0
  502. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  503. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  504. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  505. package/library/templates/README.md +94 -0
  506. package/library/templates/empty/resource.yaml +16 -0
  507. package/library/tools/add-node/resource.yaml +60 -0
  508. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  509. package/library/tools/api-docs/resource.yaml +57 -0
  510. package/library/tools/batch/resource.yaml +52 -0
  511. package/library/tools/camera-bookmark/resource.yaml +73 -0
  512. package/library/tools/check-job/resource.yaml +45 -0
  513. package/library/tools/clear-console/resource.yaml +40 -0
  514. package/library/tools/connect-signal/resource.yaml +63 -0
  515. package/library/tools/create-debug-report/resource.yaml +67 -0
  516. package/library/tools/create-scene/resource.yaml +59 -0
  517. package/library/tools/creator-config/resource.yaml +63 -0
  518. package/library/tools/creator-publish/resource.yaml +73 -0
  519. package/library/tools/creator-releases/resource.yaml +53 -0
  520. package/library/tools/fabricate-3d/resource.yaml +108 -0
  521. package/library/tools/game-control/resource.yaml +84 -0
  522. package/library/tools/game-input/resource.yaml +159 -0
  523. package/library/tools/game-probe/resource.yaml +90 -0
  524. package/library/tools/generate-3d/resource.yaml +112 -0
  525. package/library/tools/generate-audio/resource.yaml +80 -0
  526. package/library/tools/generate-image/resource.yaml +62 -0
  527. package/library/tools/generate-motion/resource.yaml +66 -0
  528. package/library/tools/generate-video/resource.yaml +66 -0
  529. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  530. package/library/tools/get-asset/resource.yaml +42 -0
  531. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  532. package/library/tools/get-console/resource.yaml +69 -0
  533. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  534. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  535. package/library/tools/get-diagnostics/resource.yaml +42 -0
  536. package/library/tools/get-project-context/resource.yaml +45 -0
  537. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  538. package/library/tools/get-scene-tree/resource.yaml +52 -0
  539. package/library/tools/get-script-errors/resource.yaml +45 -0
  540. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  541. package/library/tools/import-asset/resource.yaml +73 -0
  542. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  543. package/library/tools/import-from-url/resource.yaml +51 -0
  544. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  545. package/library/tools/import-hdri/resource.yaml +69 -0
  546. package/library/tools/input-map-bind/resource.yaml +52 -0
  547. package/library/tools/inspect-node/resource.yaml +46 -0
  548. package/library/tools/inspect-resource/resource.yaml +45 -0
  549. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  550. package/library/tools/instantiate-scene/resource.yaml +62 -0
  551. package/library/tools/is-running/resource.yaml +40 -0
  552. package/library/tools/library-feedback/resource.yaml +89 -0
  553. package/library/tools/list-my-assets/resource.yaml +56 -0
  554. package/library/tools/navigation-probe/resource.yaml +85 -0
  555. package/library/tools/open/resource.yaml +80 -0
  556. package/library/tools/open-main-scene/resource.yaml +40 -0
  557. package/library/tools/open-scene/resource.yaml +46 -0
  558. package/library/tools/play/resource.yaml +91 -0
  559. package/library/tools/project-setting/resource.yaml +53 -0
  560. package/library/tools/read-file/resource.yaml +47 -0
  561. package/library/tools/read-library/resource.yaml +67 -0
  562. package/library/tools/recent-events/resource.yaml +71 -0
  563. package/library/tools/remove-node/resource.yaml +51 -0
  564. package/library/tools/replace-node/resource.yaml +57 -0
  565. package/library/tools/replace-text/resource.yaml +61 -0
  566. package/library/tools/run-editor-script/resource.yaml +61 -0
  567. package/library/tools/run-script/resource.yaml +73 -0
  568. package/library/tools/runtime-animate/resource.yaml +140 -0
  569. package/library/tools/runtime-call/resource.yaml +74 -0
  570. package/library/tools/runtime-set/resource.yaml +80 -0
  571. package/library/tools/runtime-spawn/resource.yaml +95 -0
  572. package/library/tools/save-scene/resource.yaml +50 -0
  573. package/library/tools/screenshot/resource.yaml +112 -0
  574. package/library/tools/search-assets/resource.yaml +67 -0
  575. package/library/tools/search-library/resource.yaml +81 -0
  576. package/library/tools/select-node/resource.yaml +48 -0
  577. package/library/tools/set-prop/resource.yaml +64 -0
  578. package/library/tools/set-resource-property/resource.yaml +66 -0
  579. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  580. package/library/tools/snap-to-surface/resource.yaml +90 -0
  581. package/library/tools/snapshot-diff/resource.yaml +58 -0
  582. package/library/tools/starcast/resource.yaml +120 -0
  583. package/library/tools/start-game-task/resource.yaml +91 -0
  584. package/library/tools/stop/resource.yaml +51 -0
  585. package/library/tools/test-placement/resource.yaml +109 -0
  586. package/library/tools/ui-actions/resource.yaml +77 -0
  587. package/library/tools/ui-activate/resource.yaml +88 -0
  588. package/library/tools/ui-screenshot/resource.yaml +63 -0
  589. package/library/tools/ui-tree/resource.yaml +69 -0
  590. package/library/tools/wait-for-event/resource.yaml +84 -0
  591. package/library/tools/world-snapshot/resource.yaml +60 -0
  592. package/library/tools/write-file/resource.yaml +54 -0
  593. package/package.json +22 -16
  594. package/registry/generated/aliases.json +207 -0
  595. package/registry/generated/counts.json +12 -0
  596. package/registry/generated/gemini-extension.json +122 -0
  597. package/registry/generated/index.json +7709 -0
  598. package/registry/generated/marketplace.claude.json +44 -0
  599. package/registry/generated/mcp.json +13 -0
  600. package/registry/generated/plugin.claude.json +135 -0
  601. package/registry/generated/plugin.codex.json +144 -0
  602. package/registry/generated/plugin.cursor.json +134 -0
  603. package/registry/generated/plugin.factory.json +117 -0
  604. package/registry/generated/skills-registry.json +851 -0
  605. package/registry/generated/templates-registry.json +455 -0
  606. package/registry/schemas/allowed-hosts.json +19 -0
  607. package/registry/schemas/collection.schema.json +68 -0
  608. package/registry/schemas/domains.json +96 -0
  609. package/registry/schemas/example.schema.json +11 -0
  610. package/registry/schemas/reference.schema.json +10 -0
  611. package/registry/schemas/resource.schema.json +154 -0
  612. package/registry/schemas/skill.schema.json +14 -0
  613. package/registry/schemas/template.schema.json +46 -0
  614. package/registry/schemas/tool.schema.json +61 -0
  615. package/_persona/summer/SKILL.md +0 -113
  616. package/dist/bin/postinstall.d.ts +0 -2
  617. package/dist/bin/postinstall.js +0 -3
  618. package/dist/commands/cloud.d.ts +0 -2
  619. package/dist/commands/cloud.js +0 -80
  620. package/dist/commands/create.d.ts +0 -3
  621. package/dist/commands/create.js +0 -171
  622. package/dist/commands/install.d.ts +0 -19
  623. package/dist/commands/install.js +0 -194
  624. package/dist/commands/list.js +0 -67
  625. package/dist/commands/logout.js +0 -13
  626. package/dist/commands/logs.d.ts +0 -2
  627. package/dist/commands/logs.js +0 -19
  628. package/dist/commands/open.d.ts +0 -2
  629. package/dist/commands/open.js +0 -32
  630. package/dist/commands/orchestrator.d.ts +0 -8
  631. package/dist/commands/orchestrator.js +0 -143
  632. package/dist/commands/run.d.ts +0 -2
  633. package/dist/commands/run.js +0 -167
  634. package/dist/commands/status.js +0 -46
  635. package/dist/lib/banner.d.ts +0 -4
  636. package/dist/lib/banner.js +0 -122
  637. package/dist/lib/cloud/api.d.ts +0 -79
  638. package/dist/lib/cloud/api.js +0 -107
  639. package/dist/lib/cloud/apply.d.ts +0 -32
  640. package/dist/lib/cloud/apply.js +0 -294
  641. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  642. package/dist/lib/cloud/checkpoint.js +0 -142
  643. package/dist/lib/cloud/conflicts.d.ts +0 -55
  644. package/dist/lib/cloud/conflicts.js +0 -131
  645. package/dist/lib/cloud/containment.d.ts +0 -8
  646. package/dist/lib/cloud/containment.js +0 -52
  647. package/dist/lib/cloud/diff.d.ts +0 -39
  648. package/dist/lib/cloud/diff.js +0 -138
  649. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  650. package/dist/lib/cloud/engine-bridge.js +0 -139
  651. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  652. package/dist/lib/cloud/hash-cache.js +0 -44
  653. package/dist/lib/cloud/hash.d.ts +0 -10
  654. package/dist/lib/cloud/hash.js +0 -111
  655. package/dist/lib/cloud/http.d.ts +0 -17
  656. package/dist/lib/cloud/http.js +0 -47
  657. package/dist/lib/cloud/lock-path.d.ts +0 -1
  658. package/dist/lib/cloud/lock-path.js +0 -5
  659. package/dist/lib/cloud/lock.d.ts +0 -14
  660. package/dist/lib/cloud/lock.js +0 -143
  661. package/dist/lib/cloud/manifest.d.ts +0 -6
  662. package/dist/lib/cloud/manifest.js +0 -41
  663. package/dist/lib/cloud/paths.d.ts +0 -20
  664. package/dist/lib/cloud/paths.js +0 -90
  665. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  666. package/dist/lib/cloud/project-godot-merge.js +0 -185
  667. package/dist/lib/cloud/rules.d.ts +0 -39
  668. package/dist/lib/cloud/rules.js +0 -159
  669. package/dist/lib/cloud/sync.d.ts +0 -21
  670. package/dist/lib/cloud/sync.js +0 -518
  671. package/dist/lib/cloud/transfer.d.ts +0 -23
  672. package/dist/lib/cloud/transfer.js +0 -184
  673. package/dist/lib/cloud/types.d.ts +0 -62
  674. package/dist/lib/cloud/types.js +0 -1
  675. package/dist/lib/cloud/validate-path.d.ts +0 -23
  676. package/dist/lib/cloud/validate-path.js +0 -103
  677. package/dist/lib/engine.d.ts +0 -51
  678. package/dist/lib/game-task-plan.d.ts +0 -42
  679. package/dist/lib/project-memory.d.ts +0 -33
  680. package/dist/lib/public-surface-paths.d.ts +0 -13
  681. package/dist/lib/public-surface-paths.js +0 -42
  682. package/dist/lib/remote-templates.d.ts +0 -25
  683. package/dist/lib/remote-templates.js +0 -86
  684. package/dist/lib/skills-registry.d.ts +0 -572
  685. package/dist/lib/skills-registry.js +0 -1061
  686. package/dist/lib/version-check.d.ts +0 -106
  687. package/dist/mcp/tools/cloud-tools.js +0 -42
  688. package/references/mcp-tools-reference.md +0 -199
  689. package/references/template-registry.md +0 -73
  690. package/skills/README.md +0 -103
  691. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  692. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  693. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  694. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  695. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  696. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  697. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  698. package/skills/workflow/gameskill/SKILL.md +0 -120
  699. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  700. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  701. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  702. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  703. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  704. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  705. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  706. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  707. package/skills/workflow/skill-create/SKILL.md +0 -153
  708. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  709. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  710. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  711. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  712. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  713. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  719. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  720. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  721. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  722. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  723. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  724. /package/dist/{lib → core}/store.d.ts +0 -0
  725. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  726. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  727. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  728. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  729. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  730. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  731. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  732. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  733. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  734. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  735. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  736. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  737. /package/{skills/scene-and-project → library/skills}/play/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,71 @@
1
+ /**
2
+ * Frame-quality probe for engine screenshots (tool/screenshot).
3
+ *
4
+ * WHY THIS EXISTS. In the 2026-09-03 end-to-end run (docs/design/archive/E2E-2026-09-03.md,
5
+ * F-01) `summer_screenshot target:"viewport"` returned an entirely black
6
+ * 1072x1280 JPEG (src/core/capabilities/__fixtures__/frames/01-mcp-viewport-black.jpg)
7
+ * with a caption
8
+ * telling the agent to describe what it saw. It was the first viewport capture
9
+ * after scene mutations had flipped the editor from the 3D to the 2D tab; the
10
+ * same call 67 s later returned real content. Engine side, the ViewportSnapshot
11
+ * op (summerengine modules/1summer_engine/editor/ops/debug_ops.cpp) reads the
12
+ * editor SubViewport's texture with get_texture()->get_image() AS-IS — no forced
13
+ * RenderingServer draw and no blank-frame retry, both of which ScenePreview has
14
+ * (preview_ops.cpp "render-readiness hardening") because a not-yet-drawn
15
+ * texture reads back black. That is consistent with a 2D subviewport that had
16
+ * not been redrawn since the tab switch, but it has NOT been proven by
17
+ * instrumenting the engine, so this module detects the SYMPTOM (a flat frame)
18
+ * instead of asserting a cause.
19
+ *
20
+ * WHAT IT DOES. The engine encodes every snapshot as a baseline JPEG
21
+ * (Image::save_jpg_to_buffer -> libjpeg-turbo, quality 0.8, 4:2:0). A full
22
+ * decoder dependency is not acceptable for one heuristic, and nothing in
23
+ * node_modules decodes JPEG transitively. But baseline JPEG makes the question
24
+ * "is this frame flat?" cheap to answer exactly: each 8x8 block's DC coefficient
25
+ * IS its mean value (F(0,0) = 8 * mean of the level-shifted block). So this
26
+ * module Huffman-decodes the scan — the only way to find block boundaries — and
27
+ * keeps just the DC coefficient of every block, skipping the AC terms. No IDCT,
28
+ * no upsampling, no colour conversion. A frame whose blocks all share one DC per
29
+ * component is uniform by construction, not by threshold. A few hundred
30
+ * thousand Huffman symbols is a handful of milliseconds.
31
+ *
32
+ * Progressive/lossless/12-bit JPEGs (which the engine never writes) and
33
+ * anything that fails to parse come back `analyzable: false` — never a throw,
34
+ * and never a verdict.
35
+ */
36
+ export interface FrameQuality {
37
+ /** False when the bytes are not a baseline JPEG this probe can walk. */
38
+ analyzable: boolean;
39
+ /** Why the frame could not be analysed (only when !analyzable). */
40
+ reason?: string;
41
+ width?: number;
42
+ height?: number;
43
+ /** Number of luma (first component) blocks decoded. */
44
+ lumaBlocks?: number;
45
+ /** Mean luminance of the frame, 0..255 (from block means). */
46
+ meanLuma?: number;
47
+ /** max - min of the luma block means, 0..255. 0 = every block identical. */
48
+ lumaSpread?: number;
49
+ /** Largest max - min over the chroma components' block means (0 for greyscale). */
50
+ chromaSpread?: number;
51
+ /** Every block of every component carries the same DC coefficient. Exact. */
52
+ uniform: boolean;
53
+ /** uniform, or all spreads within FLAT_SPREAD_MAX — a frame with no visible
54
+ * content: not-yet-drawn viewport texture, a solid fill, a black boot frame. */
55
+ flat: boolean;
56
+ /** Coarse tone of a flat frame, for the caption. */
57
+ tone?: "black" | "white" | "grey" | "color";
58
+ }
59
+ /** Block-mean spread (in 8-bit luma/chroma units) at or below which a frame is
60
+ * treated as content-free. One quantisation step at the engine's quality is
61
+ * well under 1 unit; real editor/game frames measured in the e2e set spread
62
+ * 100+ units. */
63
+ export declare const FLAT_SPREAD_MAX = 4;
64
+ /**
65
+ * Analyse a JPEG frame without decoding pixels. Never throws.
66
+ */
67
+ export declare function analyzeJpegFrame(bytes: Uint8Array): FrameQuality;
68
+ /** Analyse a base64-encoded frame; non-JPEG mime types are not analysable. */
69
+ export declare function analyzeFrameBase64(base64: string, mime?: string): FrameQuality;
70
+ /** One clause for a caption, e.g. "uniformly black (mean luma 0/255)". */
71
+ export declare function describeFlatFrame(q: FrameQuality): string;
@@ -0,0 +1,449 @@
1
+ /**
2
+ * Frame-quality probe for engine screenshots (tool/screenshot).
3
+ *
4
+ * WHY THIS EXISTS. In the 2026-09-03 end-to-end run (docs/design/archive/E2E-2026-09-03.md,
5
+ * F-01) `summer_screenshot target:"viewport"` returned an entirely black
6
+ * 1072x1280 JPEG (src/core/capabilities/__fixtures__/frames/01-mcp-viewport-black.jpg)
7
+ * with a caption
8
+ * telling the agent to describe what it saw. It was the first viewport capture
9
+ * after scene mutations had flipped the editor from the 3D to the 2D tab; the
10
+ * same call 67 s later returned real content. Engine side, the ViewportSnapshot
11
+ * op (summerengine modules/1summer_engine/editor/ops/debug_ops.cpp) reads the
12
+ * editor SubViewport's texture with get_texture()->get_image() AS-IS — no forced
13
+ * RenderingServer draw and no blank-frame retry, both of which ScenePreview has
14
+ * (preview_ops.cpp "render-readiness hardening") because a not-yet-drawn
15
+ * texture reads back black. That is consistent with a 2D subviewport that had
16
+ * not been redrawn since the tab switch, but it has NOT been proven by
17
+ * instrumenting the engine, so this module detects the SYMPTOM (a flat frame)
18
+ * instead of asserting a cause.
19
+ *
20
+ * WHAT IT DOES. The engine encodes every snapshot as a baseline JPEG
21
+ * (Image::save_jpg_to_buffer -> libjpeg-turbo, quality 0.8, 4:2:0). A full
22
+ * decoder dependency is not acceptable for one heuristic, and nothing in
23
+ * node_modules decodes JPEG transitively. But baseline JPEG makes the question
24
+ * "is this frame flat?" cheap to answer exactly: each 8x8 block's DC coefficient
25
+ * IS its mean value (F(0,0) = 8 * mean of the level-shifted block). So this
26
+ * module Huffman-decodes the scan — the only way to find block boundaries — and
27
+ * keeps just the DC coefficient of every block, skipping the AC terms. No IDCT,
28
+ * no upsampling, no colour conversion. A frame whose blocks all share one DC per
29
+ * component is uniform by construction, not by threshold. A few hundred
30
+ * thousand Huffman symbols is a handful of milliseconds.
31
+ *
32
+ * Progressive/lossless/12-bit JPEGs (which the engine never writes) and
33
+ * anything that fails to parse come back `analyzable: false` — never a throw,
34
+ * and never a verdict.
35
+ */
36
+ /** Block-mean spread (in 8-bit luma/chroma units) at or below which a frame is
37
+ * treated as content-free. One quantisation step at the engine's quality is
38
+ * well under 1 unit; real editor/game frames measured in the e2e set spread
39
+ * 100+ units. */
40
+ export const FLAT_SPREAD_MAX = 4;
41
+ const BLACK_LUMA_MAX = 24;
42
+ const WHITE_LUMA_MIN = 232;
43
+ /** Chroma this close to the 128 neutral point reads as achromatic. */
44
+ const NEUTRAL_CHROMA_TOLERANCE = 12;
45
+ const NOT_ANALYZABLE = (reason) => ({
46
+ analyzable: false,
47
+ reason,
48
+ uniform: false,
49
+ flat: false,
50
+ });
51
+ function buildHuffmanTable(bits, huffval) {
52
+ // C.2: HUFFSIZE / HUFFCODE generation, folded into the F.2.2.3 tables.
53
+ const maxcode = new Int32Array(18).fill(-1);
54
+ const mincode = new Int32Array(18);
55
+ const valptr = new Int32Array(18);
56
+ let code = 0;
57
+ let k = 0;
58
+ for (let len = 1; len <= 16; len++) {
59
+ const count = bits[len - 1];
60
+ if (count === 0) {
61
+ maxcode[len] = -1;
62
+ }
63
+ else {
64
+ valptr[len] = k;
65
+ mincode[len] = code;
66
+ code += count;
67
+ k += count;
68
+ maxcode[len] = code - 1;
69
+ }
70
+ code <<= 1;
71
+ }
72
+ return { maxcode, mincode, valptr, huffval };
73
+ }
74
+ class ScanReader {
75
+ data;
76
+ pos;
77
+ bitBuf = 0;
78
+ bitCount = 0;
79
+ /** Set when the reader ran into a marker inside the entropy-coded data. */
80
+ markerHit = null;
81
+ constructor(data, start) {
82
+ this.data = data;
83
+ this.pos = start;
84
+ }
85
+ fill() {
86
+ while (this.bitCount <= 24) {
87
+ let byte = 0;
88
+ if (this.markerHit === null && this.pos < this.data.length) {
89
+ byte = this.data[this.pos];
90
+ if (byte === 0xff) {
91
+ const next = this.data[this.pos + 1];
92
+ if (next === 0x00) {
93
+ this.pos += 2; // stuffed 0xFF data byte
94
+ }
95
+ else if (next === 0xff) {
96
+ this.pos += 1; // fill byte, re-examine
97
+ continue;
98
+ }
99
+ else {
100
+ this.markerHit = next; // RSTn / EOI / anything else: stop here
101
+ byte = 0;
102
+ }
103
+ }
104
+ else {
105
+ this.pos += 1;
106
+ }
107
+ }
108
+ // Past a marker or the end: feed zeros. A well-formed scan never reads
109
+ // them; a corrupt one terminates through the k>63 / bad-code guards.
110
+ this.bitBuf = (this.bitBuf << 8) | byte;
111
+ this.bitCount += 8;
112
+ }
113
+ }
114
+ readBit() {
115
+ if (this.bitCount === 0)
116
+ this.fill();
117
+ this.bitCount -= 1;
118
+ return (this.bitBuf >>> this.bitCount) & 1;
119
+ }
120
+ receive(n) {
121
+ if (n === 0)
122
+ return 0;
123
+ if (this.bitCount < n)
124
+ this.fill();
125
+ this.bitCount -= n;
126
+ return (this.bitBuf >>> this.bitCount) & ((1 << n) - 1);
127
+ }
128
+ decode(table) {
129
+ let code = this.readBit();
130
+ let len = 1;
131
+ while (len <= 16 && code > table.maxcode[len]) {
132
+ code = (code << 1) | this.readBit();
133
+ len += 1;
134
+ }
135
+ if (len > 16)
136
+ throw new Error("bad huffman code");
137
+ return table.huffval[table.valptr[len] + code - table.mincode[len]];
138
+ }
139
+ /** Byte-align and consume the RSTn marker expected at a restart boundary. */
140
+ restart() {
141
+ this.bitBuf = 0;
142
+ this.bitCount = 0;
143
+ if (this.markerHit !== null) {
144
+ if (this.markerHit < 0xd0 || this.markerHit > 0xd7) {
145
+ throw new Error(`expected RSTn at restart boundary, saw 0xFF${this.markerHit.toString(16)}`);
146
+ }
147
+ this.pos += 2;
148
+ this.markerHit = null;
149
+ return;
150
+ }
151
+ // Marker not yet reached by the bit reader: it must be the next bytes.
152
+ if (this.data[this.pos] === 0xff && this.data[this.pos + 1] >= 0xd0 && this.data[this.pos + 1] <= 0xd7) {
153
+ this.pos += 2;
154
+ return;
155
+ }
156
+ throw new Error("restart interval ended without an RSTn marker");
157
+ }
158
+ }
159
+ function extend(value, bits) {
160
+ return value < 1 << (bits - 1) ? value - (1 << bits) + 1 : value;
161
+ }
162
+ /** Decode one block: record its DC, skip its AC coefficients. */
163
+ function decodeBlock(reader, comp) {
164
+ const t = reader.decode(comp.dcTable);
165
+ const diff = t === 0 ? 0 : extend(reader.receive(t), t);
166
+ comp.pred += diff;
167
+ const dc = comp.pred;
168
+ if (comp.blocks === 0) {
169
+ comp.first = dc;
170
+ comp.min = dc;
171
+ comp.max = dc;
172
+ }
173
+ else {
174
+ if (dc !== comp.first)
175
+ comp.allSame = false;
176
+ if (dc < comp.min)
177
+ comp.min = dc;
178
+ if (dc > comp.max)
179
+ comp.max = dc;
180
+ }
181
+ comp.blocks += 1;
182
+ comp.sum += dc;
183
+ let k = 1;
184
+ while (k < 64) {
185
+ const rs = reader.decode(comp.acTable);
186
+ const s = rs & 15;
187
+ const r = rs >> 4;
188
+ if (s === 0) {
189
+ if (r === 15) {
190
+ k += 16;
191
+ continue;
192
+ }
193
+ break; // EOB
194
+ }
195
+ k += r;
196
+ if (k > 63)
197
+ throw new Error("AC run past block end");
198
+ reader.receive(s);
199
+ k += 1;
200
+ }
201
+ }
202
+ /**
203
+ * Analyse a JPEG frame without decoding pixels. Never throws.
204
+ */
205
+ export function analyzeJpegFrame(bytes) {
206
+ try {
207
+ return analyze(bytes);
208
+ }
209
+ catch (err) {
210
+ return NOT_ANALYZABLE(err instanceof Error ? err.message : String(err));
211
+ }
212
+ }
213
+ function analyze(data) {
214
+ if (data.length < 4 || data[0] !== 0xff || data[1] !== 0xd8) {
215
+ return NOT_ANALYZABLE("not a JPEG (missing SOI marker)");
216
+ }
217
+ const quant = [];
218
+ const dcTables = [];
219
+ const acTables = [];
220
+ let components = [];
221
+ let width = 0;
222
+ let height = 0;
223
+ let restartInterval = 0;
224
+ let pos = 2;
225
+ const u16 = (at) => (data[at] << 8) | data[at + 1];
226
+ while (pos < data.length) {
227
+ if (data[pos] !== 0xff)
228
+ return NOT_ANALYZABLE(`marker desync at byte ${pos}`);
229
+ let marker = data[pos + 1];
230
+ while (marker === 0xff) {
231
+ pos += 1;
232
+ marker = data[pos + 1];
233
+ }
234
+ pos += 2;
235
+ if (marker === 0xd8 || (marker >= 0xd0 && marker <= 0xd7) || marker === 0x01)
236
+ continue;
237
+ if (marker === 0xd9)
238
+ return NOT_ANALYZABLE("reached EOI before a scan");
239
+ if (pos + 2 > data.length)
240
+ return NOT_ANALYZABLE("truncated segment header");
241
+ const len = u16(pos);
242
+ const segEnd = pos + len;
243
+ if (len < 2 || segEnd > data.length)
244
+ return NOT_ANALYZABLE("truncated segment");
245
+ const body = pos + 2;
246
+ if (marker === 0xdb) {
247
+ // DQT
248
+ let p = body;
249
+ while (p < segEnd) {
250
+ const pq = data[p] >> 4;
251
+ const tq = data[p] & 15;
252
+ p += 1;
253
+ const table = new Uint16Array(64);
254
+ for (let i = 0; i < 64; i++) {
255
+ if (pq === 0) {
256
+ table[i] = data[p];
257
+ p += 1;
258
+ }
259
+ else {
260
+ table[i] = u16(p);
261
+ p += 2;
262
+ }
263
+ }
264
+ quant[tq] = table;
265
+ }
266
+ }
267
+ else if (marker === 0xc0 || marker === 0xc1) {
268
+ // SOF0 baseline / SOF1 extended sequential (Huffman)
269
+ const precision = data[body];
270
+ if (precision !== 8)
271
+ return NOT_ANALYZABLE(`${precision}-bit JPEG not supported`);
272
+ height = u16(body + 1);
273
+ width = u16(body + 3);
274
+ const nf = data[body + 5];
275
+ if (nf < 1 || nf > 4)
276
+ return NOT_ANALYZABLE(`unsupported component count ${nf}`);
277
+ components = [];
278
+ for (let i = 0; i < nf; i++) {
279
+ const at = body + 6 + i * 3;
280
+ components.push({
281
+ id: data[at],
282
+ h: data[at + 1] >> 4,
283
+ v: data[at + 1] & 15,
284
+ tq: data[at + 2],
285
+ pred: 0,
286
+ blocks: 0,
287
+ first: 0,
288
+ allSame: true,
289
+ min: 0,
290
+ max: 0,
291
+ sum: 0,
292
+ });
293
+ }
294
+ }
295
+ else if (marker === 0xc2) {
296
+ return NOT_ANALYZABLE("progressive JPEG not supported");
297
+ }
298
+ else if ((marker >= 0xc3 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc)) {
299
+ return NOT_ANALYZABLE(`unsupported JPEG process (SOF${(marker - 0xc0).toString(16)})`);
300
+ }
301
+ else if (marker === 0xc4) {
302
+ // DHT
303
+ let p = body;
304
+ while (p < segEnd) {
305
+ const tc = data[p] >> 4;
306
+ const th = data[p] & 15;
307
+ p += 1;
308
+ const bits = data.subarray(p, p + 16);
309
+ p += 16;
310
+ let total = 0;
311
+ for (let i = 0; i < 16; i++)
312
+ total += bits[i];
313
+ const huffval = data.subarray(p, p + total);
314
+ p += total;
315
+ const table = buildHuffmanTable(bits, huffval);
316
+ if (tc === 0)
317
+ dcTables[th] = table;
318
+ else
319
+ acTables[th] = table;
320
+ }
321
+ }
322
+ else if (marker === 0xdd) {
323
+ restartInterval = u16(body);
324
+ }
325
+ else if (marker === 0xda) {
326
+ // SOS — the scan follows the header.
327
+ if (components.length === 0)
328
+ return NOT_ANALYZABLE("SOS before SOF");
329
+ const ns = data[body];
330
+ if (ns !== components.length) {
331
+ return NOT_ANALYZABLE("non-interleaved scan not supported");
332
+ }
333
+ const scanComps = [];
334
+ for (let i = 0; i < ns; i++) {
335
+ const cs = data[body + 1 + i * 2];
336
+ const tables = data[body + 2 + i * 2];
337
+ const comp = components.find((c) => c.id === cs);
338
+ if (!comp)
339
+ return NOT_ANALYZABLE(`scan references unknown component ${cs}`);
340
+ comp.dcTable = dcTables[tables >> 4];
341
+ comp.acTable = acTables[tables & 15];
342
+ if (!comp.dcTable || !comp.acTable)
343
+ return NOT_ANALYZABLE("scan references a missing Huffman table");
344
+ if (!quant[comp.tq])
345
+ return NOT_ANALYZABLE("component references a missing quantisation table");
346
+ scanComps.push(comp);
347
+ }
348
+ return decodeScan(data, segEnd, scanComps, width, height, restartInterval, quant);
349
+ }
350
+ // APPn, COM, DNL, anything else: skipped.
351
+ pos = segEnd;
352
+ }
353
+ return NOT_ANALYZABLE("no scan found");
354
+ }
355
+ function decodeScan(data, scanStart, comps, width, height, restartInterval, quant) {
356
+ if (width === 0 || height === 0)
357
+ return NOT_ANALYZABLE("zero-sized frame");
358
+ const reader = new ScanReader(data, scanStart);
359
+ let mcusX;
360
+ let mcusY;
361
+ let blocksPerMcu;
362
+ if (comps.length === 1) {
363
+ // Non-interleaved single component: one block per MCU, sampling ignored.
364
+ mcusX = Math.ceil(width / 8);
365
+ mcusY = Math.ceil(height / 8);
366
+ blocksPerMcu = () => 1;
367
+ }
368
+ else {
369
+ let hmax = 1;
370
+ let vmax = 1;
371
+ for (const c of comps) {
372
+ if (c.h < 1 || c.h > 4 || c.v < 1 || c.v > 4)
373
+ return NOT_ANALYZABLE("bad sampling factors");
374
+ hmax = Math.max(hmax, c.h);
375
+ vmax = Math.max(vmax, c.v);
376
+ }
377
+ mcusX = Math.ceil(width / (8 * hmax));
378
+ mcusY = Math.ceil(height / (8 * vmax));
379
+ blocksPerMcu = (c) => c.h * c.v;
380
+ }
381
+ const totalMcus = mcusX * mcusY;
382
+ for (let m = 0; m < totalMcus; m++) {
383
+ if (restartInterval > 0 && m > 0 && m % restartInterval === 0) {
384
+ reader.restart();
385
+ for (const c of comps)
386
+ c.pred = 0;
387
+ }
388
+ for (const c of comps) {
389
+ const n = blocksPerMcu(c);
390
+ for (let b = 0; b < n; b++)
391
+ decodeBlock(reader, c);
392
+ }
393
+ }
394
+ // DC -> block mean for 8-bit samples: mean = dc * Q[0] / 8 + 128.
395
+ const toMean = (c, dc) => {
396
+ const q0 = quant[c.tq][0];
397
+ return Math.min(255, Math.max(0, (dc * q0) / 8 + 128));
398
+ };
399
+ const luma = comps[0];
400
+ const lumaMean = toMean(luma, luma.sum / luma.blocks);
401
+ const lumaSpread = toMean(luma, luma.max) - toMean(luma, luma.min);
402
+ let chromaSpread = 0;
403
+ let chromaOffset = 0;
404
+ for (const c of comps.slice(1)) {
405
+ chromaSpread = Math.max(chromaSpread, toMean(c, c.max) - toMean(c, c.min));
406
+ chromaOffset = Math.max(chromaOffset, Math.abs(toMean(c, c.sum / c.blocks) - 128));
407
+ }
408
+ const uniform = comps.every((c) => c.allSame);
409
+ const flat = uniform || (lumaSpread <= FLAT_SPREAD_MAX && chromaSpread <= FLAT_SPREAD_MAX);
410
+ let tone;
411
+ if (flat) {
412
+ if (chromaOffset > NEUTRAL_CHROMA_TOLERANCE)
413
+ tone = "color";
414
+ else if (lumaMean <= BLACK_LUMA_MAX)
415
+ tone = "black";
416
+ else if (lumaMean >= WHITE_LUMA_MIN)
417
+ tone = "white";
418
+ else
419
+ tone = "grey";
420
+ }
421
+ return {
422
+ analyzable: true,
423
+ width,
424
+ height,
425
+ lumaBlocks: luma.blocks,
426
+ meanLuma: round1(lumaMean),
427
+ lumaSpread: round1(lumaSpread),
428
+ chromaSpread: round1(chromaSpread),
429
+ uniform,
430
+ flat,
431
+ tone,
432
+ };
433
+ }
434
+ function round1(value) {
435
+ return Math.round(value * 10) / 10;
436
+ }
437
+ /** Analyse a base64-encoded frame; non-JPEG mime types are not analysable. */
438
+ export function analyzeFrameBase64(base64, mime) {
439
+ if (mime && !/jpe?g/i.test(mime)) {
440
+ return NOT_ANALYZABLE(`content check only supports JPEG frames (got ${mime})`);
441
+ }
442
+ return analyzeJpegFrame(Buffer.from(base64, "base64"));
443
+ }
444
+ /** One clause for a caption, e.g. "uniformly black (mean luma 0/255)". */
445
+ export function describeFlatFrame(q) {
446
+ const tone = q.tone === "color" ? "a single flat colour" : `${q.tone ?? "flat"}`;
447
+ const how = q.uniform ? "uniformly" : "almost uniformly";
448
+ return `${how} ${tone} (mean luma ${Math.round(q.meanLuma ?? 0)}/255, spread ${q.lumaSpread ?? 0})`;
449
+ }
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ export declare const GAME_TASK_MODES: readonly ["auto", "new-game", "feature", "asset", "debug", "playtest", "polish", "ship"];
3
+ export declare const GAME_TASK_TARGETS: readonly ["auto", "2d", "3d", "ui", "audio", "animation", "level", "npc", "multiplayer"];
4
+ export declare const ASSET_POLICIES: readonly ["reuse-first", "ask-before-paid-generation", "no-paid-generation", "generate-when-clearly-needed"];
5
+ export declare const VERIFICATION_LEVELS: readonly ["none", "fast", "full"];
6
+ /**
7
+ * The one input contract for summer_start_game_task, shared by the MCP tool
8
+ * (pass `.shape` to server.tool) and the CLI dispatcher (`summer tool
9
+ * start-game-task`) so a typo like mode:"shipp" is rejected on both faces.
10
+ */
11
+ export declare const gameTaskPlanInputSchema: z.ZodObject<{
12
+ goal: z.ZodString;
13
+ mode: z.ZodDefault<z.ZodEnum<["auto", "new-game", "feature", "asset", "debug", "playtest", "polish", "ship"]>>;
14
+ target: z.ZodDefault<z.ZodEnum<["auto", "2d", "3d", "ui", "audio", "animation", "level", "npc", "multiplayer"]>>;
15
+ assetPolicy: z.ZodDefault<z.ZodEnum<["reuse-first", "ask-before-paid-generation", "no-paid-generation", "generate-when-clearly-needed"]>>;
16
+ verification: z.ZodDefault<z.ZodEnum<["none", "fast", "full"]>>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ mode: "auto" | "debug" | "new-game" | "feature" | "asset" | "playtest" | "polish" | "ship";
19
+ target: "auto" | "audio" | "level" | "npc" | "2d" | "3d" | "ui" | "animation" | "multiplayer";
20
+ goal: string;
21
+ assetPolicy: "reuse-first" | "ask-before-paid-generation" | "no-paid-generation" | "generate-when-clearly-needed";
22
+ verification: "none" | "fast" | "full";
23
+ }, {
24
+ goal: string;
25
+ mode?: "auto" | "debug" | "new-game" | "feature" | "asset" | "playtest" | "polish" | "ship" | undefined;
26
+ target?: "auto" | "audio" | "level" | "npc" | "2d" | "3d" | "ui" | "animation" | "multiplayer" | undefined;
27
+ assetPolicy?: "reuse-first" | "ask-before-paid-generation" | "no-paid-generation" | "generate-when-clearly-needed" | undefined;
28
+ verification?: "none" | "fast" | "full" | undefined;
29
+ }>;
30
+ export type GameTaskMode = (typeof GAME_TASK_MODES)[number];
31
+ export type GameTaskTarget = (typeof GAME_TASK_TARGETS)[number];
32
+ export type AssetPolicy = (typeof ASSET_POLICIES)[number];
33
+ export type VerificationLevel = (typeof VERIFICATION_LEVELS)[number];
34
+ export interface GameTaskPlanOptions {
35
+ goal: string;
36
+ mode?: GameTaskMode;
37
+ target?: GameTaskTarget;
38
+ assetPolicy?: AssetPolicy;
39
+ verification?: VerificationLevel;
40
+ }
41
+ export interface SkillRoute {
42
+ /** Library resource id, e.g. "skill/make-game". */
43
+ id: string;
44
+ name: string;
45
+ why: string;
46
+ }
47
+ export interface GameTaskPlan {
48
+ goal: string;
49
+ mode: Exclude<GameTaskMode, "auto">;
50
+ target: Exclude<GameTaskTarget, "auto"> | "general";
51
+ assetPolicy: AssetPolicy;
52
+ verification: VerificationLevel;
53
+ principles: string[];
54
+ recommendedSkills: SkillRoute[];
55
+ mcpToolPlan: {
56
+ start: string[];
57
+ mutate: string[];
58
+ assets: string[];
59
+ verify: string[];
60
+ };
61
+ hostFileWork: string[];
62
+ userGates: string[];
63
+ nextAgentSteps: string[];
64
+ antiPatterns: string[];
65
+ }
66
+ export declare function buildGameTaskPlan(options: GameTaskPlanOptions): GameTaskPlan;
@@ -1,4 +1,5 @@
1
- import { SKILL_REGISTRY } from "./skills-registry.js";
1
+ import { z } from "zod";
2
+ import { getSkillRegistry } from "../skills-registry.js";
2
3
  export const GAME_TASK_MODES = [
3
4
  "auto",
4
5
  "new-game",
@@ -27,9 +28,61 @@ export const ASSET_POLICIES = [
27
28
  "generate-when-clearly-needed",
28
29
  ];
29
30
  export const VERIFICATION_LEVELS = ["none", "fast", "full"];
30
- const SKILL_BY_NAME = new Map(SKILL_REGISTRY.map((skill) => [skill.name, skill]));
31
+ /**
32
+ * The one input contract for summer_start_game_task, shared by the MCP tool
33
+ * (pass `.shape` to server.tool) and the CLI dispatcher (`summer tool
34
+ * start-game-task`) so a typo like mode:"shipp" is rejected on both faces.
35
+ */
36
+ export const gameTaskPlanInputSchema = z.object({
37
+ goal: z.string().trim().min(1, "goal is required"),
38
+ mode: z.enum(GAME_TASK_MODES).default("auto"),
39
+ target: z.enum(GAME_TASK_TARGETS).default("auto"),
40
+ assetPolicy: z.enum(ASSET_POLICIES).default("ask-before-paid-generation"),
41
+ verification: z.enum(VERIFICATION_LEVELS).default("full"),
42
+ });
43
+ let skillIndex = null;
44
+ /**
45
+ * Lazily load the generated skill registry on first use. Loading at module
46
+ * import made a missing or corrupt registry/generated/skills-registry.json
47
+ * crash the whole MCP server / CLI at import time; now only this tool fails,
48
+ * with an actionable message.
49
+ */
50
+ function skillByName() {
51
+ if (skillIndex)
52
+ return skillIndex;
53
+ let skills;
54
+ try {
55
+ skills = getSkillRegistry();
56
+ }
57
+ catch (error) {
58
+ const reason = error instanceof Error ? error.message : String(error);
59
+ throw new Error("The Summer skill registry could not be loaded (registry/generated/skills-registry.json): " +
60
+ `${reason}. Reinstall summer-engine, or in a source checkout run 'npm run generate:registry'.`);
61
+ }
62
+ skillIndex = new Map(skills.map((skill) => [skill.name, skill]));
63
+ return skillIndex;
64
+ }
65
+ const PATTERN_CACHE = new Map();
66
+ /**
67
+ * Whole-word / whole-phrase match with light plural tolerance ("model" also
68
+ * matches "models", "enemy" also matches "enemies"). Substring matching routed
69
+ * "spaceship" to ship mode, "build" to the ui target ("b-ui-ld"), "fortune" to
70
+ * playtest ("tune") and "terror" to debug ("error").
71
+ */
72
+ function wordPattern(word) {
73
+ const cached = PATTERN_CACHE.get(word);
74
+ if (cached)
75
+ return cached;
76
+ const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
77
+ const plural = word.endsWith("y")
78
+ ? `(?:${escaped}|${escaped.slice(0, -1)}ies)`
79
+ : `${escaped}(?:e?s)?`;
80
+ const pattern = new RegExp(`(?<![a-z0-9])${plural}(?![a-z0-9])`, "i");
81
+ PATTERN_CACHE.set(word, pattern);
82
+ return pattern;
83
+ }
31
84
  function includesAny(text, words) {
32
- return words.some((word) => text.includes(word));
85
+ return words.some((word) => wordPattern(word).test(text));
33
86
  }
34
87
  function inferMode(goal, requested) {
35
88
  if (requested !== "auto")
@@ -85,7 +138,7 @@ function inferTarget(goal, requested) {
85
138
  return "general";
86
139
  }
87
140
  function addSkill(routes, name, why, weight) {
88
- if (!SKILL_BY_NAME.has(name))
141
+ if (!skillByName().has(name))
89
142
  return;
90
143
  const existing = routes.find((route) => route.name === name);
91
144
  if (existing) {
@@ -255,13 +308,11 @@ function inferSkills(mode, target, goal) {
255
308
  .sort((a, b) => b.weight - a.weight)
256
309
  .slice(0, 7)
257
310
  .map((route) => {
258
- const skill = SKILL_BY_NAME.get(route.name);
311
+ const skill = skillByName().get(route.name);
259
312
  return {
260
- id: `summer:${skill.category}/${skill.name}`,
313
+ id: skill.id,
261
314
  name: skill.name,
262
- category: skill.category,
263
315
  why: route.why,
264
- requiresMcpTools: skill.requiresMcpTools,
265
316
  };
266
317
  });
267
318
  }