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,85 @@
1
+ ---
2
+ name: driving-the-editor-ui
3
+ description: Use when a task is an editor-workflow step a human would do with the mouse — open Project Settings or a dock, switch the 2D/3D/Script main screen, toggle a panel, clear a dialog that is blocking the editor, read what a dock shows — and when deciding whether a request is UI work or scene work. Drives the editor by NAME through summer_ui_actions, reads it as structure through summer_ui_tree, activates the long tail by path through summer_ui_activate, and treats summer_ui_screenshot as the pixels-last fallback. Preview — the ops ship with a follow-up engine build.
4
+ ---
5
+
6
+ # Driving the Editor UI
7
+
8
+ ## UI work vs scene work — decide first
9
+
10
+ The editor UI is **not** where scene work happens. Nodes, properties, placement, lighting, materials: `scene-scripting` (`summer_run_script`), the scene tools, `summer_world_snapshot` / `summer_snapshot_diff` / `summer_screenshot` (`verifying-scenes`). The Scene dock and the Inspector are *views* of that data; clicking through them to change a property is slower, less reliable, and unverifiable compared with `summer_set_prop`.
11
+
12
+ UI ops are for the steps a human does with the mouse that have no scene-level equivalent:
13
+
14
+ | Ask | Route |
15
+ |---|---|
16
+ | "Open Project Settings" / "open the Import dock" / "toggle the Animation panel" | `summer_ui_actions mode:"invoke"` by name |
17
+ | "Switch to the 3D view" / "go to the Script screen" | `summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"` |
18
+ | "Something is blocking the editor" / tool calls return `modal_open` | the blocking-dialog pattern below |
19
+ | "What does the Inspector show right now?" | `summer_ui_tree root:"dock:inspector"` |
20
+ | "Change the main scene setting" | `summer_project_setting` — a dedicated tool wins over any UI op |
21
+ | "Move the player to (0, 1, 0)" | `summer_set_prop` / `summer_run_script` — scene work, never UI |
22
+
23
+ ## The ladder
24
+
25
+ 1. **Dedicated tool** (`summer_project_setting`, `summer_open_scene`, `summer_select_node`, `summer_save_scene`, …). If one exists, the UI ops are the wrong layer.
26
+ 2. **Named action** — `summer_ui_actions mode:"list" filter:"<word>"` to find the exact `name`, then `mode:"invoke" action_name:"<name>"`. The event takes the same path the shortcut key would, so the editor's own handlers run.
27
+ 3. **Tree + activate** — `summer_ui_tree` to find a control's `path`, `summer_ui_activate` to press / toggle / select a tab / set text / set a value through the control's own input path.
28
+ 4. **Pixels** — `summer_ui_screenshot`, only to look. There is no coordinate click anywhere in this surface: if a thing is visible it is in the tree, and the tree is what activation takes.
29
+
30
+ Each rung costs more tokens and is less deterministic than the one above it. Do not start at 3 because it feels general.
31
+
32
+ ## The blocking-dialog pattern
33
+
34
+ An exclusive dialog (Project Settings, a confirmation, an unsaved-changes prompt) makes the root window drop input; every mutating UI op then answers `modal_open` with the `blocking_dialog`, and other editor operations may stall as `still_queued`.
35
+
36
+ 1. `summer_ui_tree root:"dialogs"` → read `blocking`, `blocking_dialog {title, path, class}`, and the dialog's `text` and `buttons` (`kind: ok | cancel | custom`, `enabled`).
37
+ 2. Decide with the user in view. `button:"cancel"` is the safe close and the default; `"ok"` or a custom button text confirms whatever the dialog asks — only when that is what the user wants.
38
+ 3. `summer_ui_activate action:"dismiss_dialog" path:"<blocking_dialog.path>"` (or `title:"<title>"`).
39
+ 4. Read back: the result's `visible_after` must be `false`, and `summer_ui_tree root:"dialogs"` must show `blocking:false`. `visible_after:true` means the dialog re-validated and stayed up — read it again with `root:"dialog:<title>"` instead of retrying blindly.
40
+
41
+ A dialog the human would have to click through, you also have to click through — nothing here bypasses one.
42
+
43
+ ## Main-screen switching
44
+
45
+ `spatial_editor/*` actions need the 3D screen; `canvas_item_editor/*` need 2D; the script editor's actions need Script. A `not_handled` result (`invoked:true, handled:false`) usually means the wrong screen is up.
46
+
47
+ ```
48
+ summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"
49
+ → state.current_tab / state.text read back the selected editor
50
+ ```
51
+
52
+ `value` is the editor name (`2D`, `3D`, `Script`, `Game`, `AssetLib`, case-insensitive) or `index`. `not_selected` means the switch was refused (scene change in progress, hidden editor button) — wait, retry, read back.
53
+
54
+ ## Reading a dock's state
55
+
56
+ `summer_ui_tree root:"dock:<title|id>"` (`file_system`, `scene_tree`, `inspector`, or any dock title) returns the dock's controls with `text`, `tooltip` (icon-only buttons are named by it), `checked`, `enabled`, `tabs` + `current_tab`, `value/min/max`, `item_count/selected`. Go deeper on one subtree with `root:"path:<path>"` and a larger `depth`/`limit`; `children_truncated:true` plus the real `child_count` tells you where a cut happened.
57
+
58
+ Paths and auto-names (`@Panel@123`) are stable within a session only. Re-read the tree before activating; never persist a path across sessions.
59
+
60
+ ## The deny-list
61
+
62
+ The engine refuses, with `denied_action`, anything that ends or replaces the session or deletes without the human's confirmation: `editor/file_quit`, `editor/quit_to_project_list`, `editor/reload_current_project`, `scene_tree/delete_no_confirm`, every `project_manager/*` name — and buttons or menu items whose label quits, reloads the project, or closes the editor. `summer_ui_actions mode:"list"` marks them `denied:true`. Do not attempt them and do not route around them by path; tell the user what was asked and leave that click to them. File-dialog paths that leave the project (`..`, `user://`, `~`, absolute paths outside `res://`) are refused as `denied_path`.
63
+
64
+ ## Verification — read back, never assume
65
+
66
+ - An invoke succeeded when its **effect** is observable: a dialog appears in `root:"dialogs"`, a dock's `summer_ui_tree` changes, or — for anything scene-level — `summer_snapshot_diff` / `summer_get_scene_tree` show it. `invoked:true` alone proves the event was dispatched, not that anything happened.
67
+ - `summer_ui_activate` returns `state` **after** the action from the same node (`checked`, `current_tab`, `text`, `value`, `freed:true` if the action freed it). Cite it.
68
+ - A screenshot proves appearance only. A control's exact state is in the tree.
69
+ - `engine_lacks_op` means the build predates these ops: nothing was sent. Use the dedicated tools for the outcome, or ask the user to click, and say so.
70
+
71
+ ## Failure taxonomy — what to do
72
+
73
+ | `failure_reason` | Means | Next |
74
+ |---|---|---|
75
+ | `unknown_action` (+`close_matches`) | no such name | pick one of the matches, or `mode:"list"` with a filter |
76
+ | `denied_action` | safety list | stop; hand the click to the user |
77
+ | `modal_open` (+`blocking_dialog`) | exclusive dialog eats input | blocking-dialog pattern |
78
+ | `not_handled` | dispatched, no receiver | switch main screen / reveal the owning panel, retry |
79
+ | `not_visible` / `disabled` / `obscured` | control exists but cannot take the event | reveal it, satisfy the precondition, or dismiss what covers it |
80
+ | `unsupported_control` (+`supported_actions`) | class not driven this way | use the listed action, or a named action (MenuBar) |
81
+ | `no_activation_path` | no hover and no focus reached the button | the named action instead |
82
+ | `tab_not_found` / `button_not_found` / `ambiguous_dialog` | wrong or ambiguous name | use the listed `tabs` / `buttons` / `candidates` verbatim |
83
+ | `no_renderer` | headless editor, no pixels | `summer_ui_tree`; pixels need a display |
84
+
85
+ **Related skills:** `scene-scripting` and `verifying-scenes` own the scene loop this skill deliberately stays out of; `verification-before-completion` carries the done-claiming rules; `headless-scripting` is the route when there is no editor UI at all.
@@ -0,0 +1,46 @@
1
+ id: skill/driving-the-editor-ui
2
+ kind: skill
3
+ version: 1.0.0
4
+ summary: "Drive the editor UI by name: invoke actions, clear blocking dialogs, switch the main screen, read a dock — and route scene work to the scene tools instead."
5
+ use_when:
6
+ - an editor-workflow step a human would do with the mouse — open the Import dock, switch the 2D/3D/Script main screen, toggle a bottom panel, open an editor dialog by name
7
+ - a dialog or popup is blocking the editor and tool calls come back modal_open — see it (summer_ui_tree root dialogs) and clear it (summer_ui_activate action dismiss_dialog)
8
+ - reading what a dock or dialog currently shows as structure (summer_ui_tree) instead of guessing from a screenshot
9
+ - deciding whether a request is UI work (summer_ui_*) or scene work (summer_run_script, scene tools, perception tools)
10
+ do_not_use_when:
11
+ - building or changing the scene — nodes, properties, placement, lighting go through scene-scripting and the scene tools; the editor's docks are views of that data
12
+ - verifying a visual result in the viewport or the running game — verifying-scenes (summer_screenshot, snapshot diff)
13
+ - quitting or reloading the editor, or deleting without confirmation — denied by the engine; ask the user
14
+ - "the engine build lacks the UI ops (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op — use the dedicated tools or ask the user to click"
15
+ facets:
16
+ lifecycle:
17
+ - build
18
+ domains:
19
+ - editor
20
+ - agent-workflow
21
+ - verification
22
+ modalities:
23
+ - project
24
+ compatibility:
25
+ engine: ">=4.6"
26
+ related:
27
+ tools:
28
+ - tool/ui-actions
29
+ - tool/ui-tree
30
+ - tool/ui-activate
31
+ - tool/ui-screenshot
32
+ - tool/screenshot
33
+ - tool/project-setting
34
+ - tool/open-scene
35
+ - tool/select-node
36
+ - tool/run-script
37
+ - tool/get-project-context
38
+ skills:
39
+ - skill/scene-scripting
40
+ - skill/verifying-scenes
41
+ - skill/verification-before-completion
42
+ - skill/headless-scripting
43
+ source: official
44
+ license: MIT
45
+ status: preview
46
+ recommended: false
@@ -25,9 +25,9 @@ The backing tool is `summer_generate_3d`, called multiple times. Each call costs
25
25
 
26
26
  ## When NOT to use
27
27
 
28
- - A single hero prop (single chest, single throne) → `summer:3d-assets/prop-model`.
29
- - Open-world terrain (rolling hills, forests) → use a heightmap + scattered organic models from `summer:3d-assets/organic-model`.
30
- - Repeating flat surfaces only (just walls and floors, no decorative pieces) → `summer:asset-pipeline/asset-strategy` Pipeline 2 (textures + CSG) is cheaper and snaps perfectly to grid.
28
+ - A single hero prop (single chest, single throne) → `prop-model`.
29
+ - Open-world terrain (rolling hills, forests) → use a heightmap + scattered organic models from `organic-model`.
30
+ - Repeating flat surfaces only (just walls and floors, no decorative pieces) → `asset-strategy` Pipeline 2 (textures + CSG) is cheaper and snaps perfectly to grid.
31
31
  - Characters or vehicles in the scene — those are separate skills.
32
32
 
33
33
  ## The style anchor pattern
@@ -144,8 +144,8 @@ Check the AABB. If the wall is 1.85m tall when you asked for 3m, scale it in the
144
144
 
145
145
  ## Edge cases
146
146
 
147
- - **Curved or organic kit (cave, alien hive).** Modular geometry resists snapping. Generate longer pieces (4m walls, transition tiles) and accept some overlap. Or switch to procedural — `summer:level-design` can scatter cave pieces with rotation jitter.
148
- - **Outdoor kit (cliffs, ruins, forest path).** Use the kit pattern but accept rotation/jitter at placement time. Mesh edges should fade naturally rather than snap cleanly. Pair with `summer:3d-assets/organic-model` for foliage scatter.
147
+ - **Curved or organic kit (cave, alien hive).** Modular geometry resists snapping. Generate longer pieces (4m walls, transition tiles) and accept some overlap. Or switch to procedural — `design-level` can scatter cave pieces with rotation jitter.
148
+ - **Outdoor kit (cliffs, ruins, forest path).** Use the kit pattern but accept rotation/jitter at placement time. Mesh edges should fade naturally rather than snap cleanly. Pair with `organic-model` for foliage scatter.
149
149
  - **Sci-fi kit (corridors, doors, terminals).** The style suffix becomes critical — `clean panels, soft cyan emissive trim, brushed metal, white background, isolated object`. Hard surfaces drift more than organic ones; review every piece.
150
150
  - **The user wants to add a piece later.** The locked suffix lives in the kit's notes (drop it in `assets/kits/dungeon/STYLE.md` if the user wants persistence). Reuse it verbatim for any addition — never re-derive.
151
151
 
@@ -164,12 +164,12 @@ After the kit is staged:
164
164
 
165
165
  > Dungeon kit ready: `res://assets/kits/dungeon/` with wall, floor, pillar, door, corner, arch on a 2m snap grid. Display scene at `res://assets/kits/dungeon/kit_dungeon.tscn`.
166
166
  >
167
- > Next: hand off to the level-design step — instantiate kit pieces into `level_01.tscn`, snap to the 2m grid, dress with props (`summer:3d-assets/prop-model`) and foliage (`summer:3d-assets/organic-model`). For lighting, see `summer:3d-lighting`.
167
+ > Next: hand off to the level-design step — instantiate kit pieces into `level_01.tscn`, snap to the 2m grid, dress with props (`prop-model`) and foliage (`organic-model`). For lighting, see `3d-lighting`.
168
168
 
169
169
  ## See also
170
170
 
171
- - `summer:3d-assets/prop-model` — for the chests, statues, and decorative props that dress the kit.
172
- - `summer:3d-assets/organic-model` — for foliage and rocks that break up modular repetition.
173
- - `summer:asset-pipeline/asset-strategy` — Pipeline 2 (textures + CSG) is the cheaper alternative when pieces are flat.
174
- - `summer:scene-composition` — how to organize the kit scene and the level scenes that consume it.
175
- - `summer:3d-lighting` — interior kit pieces typically need warm point lights at sconce positions.
171
+ - `prop-model` — for the chests, statues, and decorative props that dress the kit.
172
+ - `organic-model` — for foliage and rocks that break up modular repetition.
173
+ - `asset-strategy` — Pipeline 2 (textures + CSG) is the cheaper alternative when pieces are flat.
174
+ - `scene-composition` — how to organize the kit scene and the level scenes that consume it.
175
+ - `3d-lighting` — interior kit pieces typically need warm point lights at sconce positions.
@@ -0,0 +1,29 @@
1
+ id: skill/environment-kit
2
+ kind: skill
3
+ version: 1.0.3
4
+ summary: Generate a modular environment kit — wall pieces, floor tiles, pillars, doors, arches, corners — snap-together meshes sharing one visual style.
5
+ use_when:
6
+ - generating a modular environment kit of snap-together pieces that form a level — dungeon kit, modular walls, interior pieces
7
+ - building a dungeon, interior, or town kit from repeatable pieces that snap together in one style
8
+ facets:
9
+ lifecycle:
10
+ - build
11
+ domains:
12
+ - 3d
13
+ - assets
14
+ modalities:
15
+ - 3d-models
16
+ - scenes
17
+ compatibility:
18
+ engine: ">=4.6"
19
+ related:
20
+ skills:
21
+ - skill/organic-model
22
+ - skill/prop-model
23
+ - skill/asset-strategy
24
+ source: official
25
+ license: MIT
26
+ status: stable
27
+ recommended: false
28
+ aliases:
29
+ - skills/3d-assets/environment-kit
@@ -275,7 +275,7 @@ To enable another target, prove one of these before returning to step 2:
275
275
 
276
276
  On Apple Silicon, `binary_format/architecture="arm64"` is the natural guess, and it fails leaving a **0-byte `.app` that looks like success**. Only `"universal"` ships.
277
277
 
278
- See `summer:headless-scripting` for the wider pattern this is one instance of.
278
+ See `headless-scripting` for the wider pattern this is one instance of.
279
279
 
280
280
  If the user is on a CI system (GitHub Actions etc), this is the right place to point them at a cross-compile workflow — Godot can export Windows + Linux from a Linux runner.
281
281
 
@@ -346,7 +346,7 @@ Use this as a one-shot grep before any export:
346
346
 
347
347
  ## Collaborative protocol
348
348
 
349
- This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See `../../../references/collaborative-protocol.md`.
349
+ This skill produces release artifacts. Always ask before each build is invoked. Group platforms — "I'm about to build Windows + Mac + Linux release configs into `build/`. OK?". See `../../references/collaborative-protocol/collaborative-protocol.md`.
350
350
 
351
351
  ## Want a working starter?
352
352
 
@@ -354,10 +354,10 @@ No template — this is a workflow. Each project's export config and store asset
354
354
 
355
355
  ## See also
356
356
 
357
- - `../../../references/mcp-tools-reference.md` — full MCP tool list
358
- - `../../../references/godot-version.md` — Summer compatibility and
357
+ - `../../references/mcp-tools-reference/mcp-tools-reference.md` — full MCP tool list
358
+ - `../../references/godot-version/godot-version.md` — Summer compatibility and
359
359
  export-template versioning
360
- - `../../../references/collaborative-protocol.md` — "May I write" pattern
360
+ - `../../references/collaborative-protocol/collaborative-protocol.md` — "May I write" pattern
361
361
  - `deployment/export-presets/SKILL.md` — preset config deep dive
362
362
  - `deployment/web-html5-export/SKILL.md` — HTML5-specific traps
363
363
  - `deployment/steam-uploader/SKILL.md` — `steamcmd` + GodotSteam (when shipped)
@@ -0,0 +1,32 @@
1
+ id: skill/export-and-ship
2
+ kind: skill
3
+ version: 1.0.3
4
+ summary: "Assess and prepare a game export: inventory installed templates and targets, validate release assets and config, produce supported builds after approval."
5
+ use_when:
6
+ - the user wants to assess or prepare a Summer game export — Steam, itch, HTML5, iOS, Android targets as available in the installed build
7
+ - the user says 'publish my game', 'release it', or 'ship a build to players' — produce the build they will upload
8
+ do_not_use_when:
9
+ - publishing, uploading, hosting, or submitting a game — this skill only produces local builds
10
+ facets:
11
+ lifecycle:
12
+ - launch
13
+ domains:
14
+ - deployment
15
+ - project
16
+ modalities:
17
+ - project
18
+ compatibility:
19
+ engine: ">=4.6"
20
+ related:
21
+ skills:
22
+ - skill/debug
23
+ - skill/tune-performance
24
+ source: official
25
+ license: MIT
26
+ status: stable
27
+ recommended: true
28
+ aliases:
29
+ - skills/deployment/export-and-ship
30
+ lint_exceptions:
31
+ - url-allowlist
32
+ lint_exception_reason: godotsteam.com is a read-only documentation link for the GodotSteam integration the export flow references.
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: fabricating-assets
3
+ description: Use when an asset needs Blender's mesh tooling rather than generation or a library download — a modular kit with exact dimensions and snapping, VFX meshes (shatter fragments, curve sweeps, LOD chains), or decimating/UV-unwrapping/baking a generated model — and you are about to write a bpy script for summer_fabricate_3d. Covers the route decision (fabricate vs generate vs import), the bpy rules that survive glTF export, the script -> import -> snapshot -> screenshot loop, every failure_reason and what to do about it, and the licensing shape (the user's own Blender, never bundled).
4
+ ---
5
+
6
+ # Fabricating Assets
7
+
8
+ ## Overview
9
+
10
+ `summer_fabricate_3d` runs a Blender Python (bpy) script you write in the **user's own installed Blender**, headless and supervised by the engine, validates the `.glb` the script's objects were exported to, moves it under `res://`, waits for the import, and (optionally) instantiates it into the open scene with `target_size` normalization. One call: script → glb → import → scene.
11
+
12
+ It exists for a narrow slice of assets: the mesh-processing mid-tier that the engine does not have (exact booleans, bevels, UV unwrap, decimate, remesh, curve sweeps, fracture) and that generation and libraries serve badly. Everywhere else it is the wrong tool — route first.
13
+
14
+ Three facts shape every use:
15
+
16
+ 1. **It is optional and detect-never-bundle.** Summer does not ship, download, or install Blender. If the machine has none, the result is a structured `blender_not_found` with the fix, and the decision to install belongs to the user.
17
+ 2. **It is blind until import.** There is no viewport while the script runs. Perception comes back only through the result (`objects`, `dimensions`, `warnings`, `skipped`) and then through the normal scene loop (`summer_snapshot_diff` + `summer_screenshot`).
18
+ 3. **One fabrication at a time per editor.** A second call while one is in flight fails with `busy`. Wait for the result; never fire in parallel.
19
+
20
+ ## Route first — fabricate, generate, or import?
21
+
22
+ | Asset class | First route | Second | Why |
23
+ |---|---|---|---|
24
+ | Blockout / placeholder | `scene-scripting` primitives or CSG | fabricate | Must be instant and in-scene; no process spawn is justified |
25
+ | Generic hard-surface prop ("a barrel") | `summer_search_assets` → `summer_import_asset` (`prop-model`) | `summer_generate_3d` | The free library plus `target_size` beats paid generation and a 2-minute wait, in a consistent style |
26
+ | Bespoke prop ("the artifact from our GDD") | `summer_generate_3d` | fabricate | Image-to-3D is exactly what generation is for; fabricate when exact dimensions or parametric variants matter |
27
+ | **Modular kit** (walls, pipes, fences, rails that snap) | **fabricate** | library kit (`environment-kit`) | Generation cannot hold dimensions and style across 30 pieces; array + boolean + bevel + one material is the classic kit workflow |
28
+ | Characters (rigged, animated) | `summer_generate_3d` (`character-model`) | library | Scripted organic modelling is the documented failure mode; fabrication has no path to competitive organics blind |
29
+ | Environments / terrain | in-engine terrain + library set dressing | generation for landmarks | Terrain wants interactive tools; dressing wants scatter |
30
+ | Materials / textures / skies | library (`summer_import_hdri`, texture packs) | generation | Fabricate only to bake a procedural material to images |
31
+ | **VFX meshes** (shatter pieces, trails, sweeps, LOD chains) | **fabricate** | in-engine | Bisect/fracture, curve sweeps, decimate are one-liners in bpy and absent in the engine |
32
+ | **Post-processing a generated model** (decimate / UV / bake) | **fabricate** | — | The fix for generation's documented weaknesses; no other route exists |
33
+ | UI | library + 2D image generation | — | 3D tooling is irrelevant |
34
+
35
+ Fabricate wins in exactly three rows. If the request is not one of them, stop here and use `asset-strategy` to pick the specialist skill.
36
+
37
+ ## Prerequisite — the user's Blender
38
+
39
+ The engine looks for Blender 4.2 LTS or newer in this order:
40
+
41
+ 1. `blender_path` passed in the call (only when the user named a path — never guess one);
42
+ 2. the `SUMMER_BLENDER_BIN` environment variable of the editor process;
43
+ 3. Editor Settings → FileSystem → Import → Blender → Blender Path (`filesystem/import/blender/blender_path`, the same setting `.blend` import uses);
44
+ 4. `PATH`, the platform's well-known install locations, and `~/.summer/tools/blender-<version>/`.
45
+
46
+ When none resolves, the result is `failure_reason: blender_not_found` with `tried` (every path checked) and a prescriptive `error`. Relay it as a one-line decision: "Fabrication needs Blender (4.2 LTS or newer) on this machine. Install it from the official Blender download page, or point `SUMMER_BLENDER_BIN` at an existing executable and restart the editor. Or I can generate the asset or import one from the free library instead." Then do what the user chooses. Do not install software on their behalf, and do not retry the call hoping the answer changes.
47
+
48
+ The `blender_version` in every successful result is a fact, not a suggestion: bpy APIs change across majors, and models skew toward older bpy from training data. When a `script_error` names a missing attribute or operator, check it against the version that actually ran.
49
+
50
+ ## The script contract
51
+
52
+ `source` is plain bpy code. It runs in a factory-startup Blender (no user add-ons, no preferences, online access off) with an **empty** scene — no default cube, light, or camera — and these names already bound: `bpy`, `bmesh`, `mathutils`, `math`, `Vector`, `Matrix`, `Euler`.
53
+
54
+ The script must **create mesh objects and leave them linked in the scene**. Nothing else. The engine's bootstrap then collects, audits, exports, and validates:
55
+
56
+ - **Do not export, do not save, do not quit.** `bpy.ops.export_scene.gltf`, `bpy.ops.wm.save_mainfile`, `bpy.ops.wm.quit_blender` in your script break the contract and the run.
57
+ - **What exports:** `MESH`, `CURVE`, `SURFACE`, `META`, `FONT` objects become meshes; `EMPTY` and `ARMATURE` keep hierarchy and skins; cameras, lights, probes and speakers are dropped.
58
+ - **Hidden means helper.** An object hidden in the viewport or disabled for render is treated as a boolean cutter or guide: it is *not* exported and is listed in `skipped`. Use this deliberately for cutters; check `skipped` when a piece is missing.
59
+ - **Modifiers are applied at export** (`export_apply`), including Geometry Nodes — the scene stays non-destructive, so do not `modifier_apply` by hand unless you need the result for a later step (a boolean whose output feeds a second boolean, for instance). Consequence: **shape keys are dropped** when modifiers exist; a `warning` says so.
60
+ - **Only a Principled BSDF surface survives glTF.** Any other shader (Emission-only, Diffuse, custom node group) exports grey or black — a `warning` names the material. Build materials as Principled BSDF with constant values or Image Texture inputs.
61
+ - **Procedural Base Color is baked for you** (Cycles, 2K cap, capped material count; meshes without UVs get a Smart UV Project first) and reported in `baked`. **Procedural Metallic / Roughness / Normal / Emission / Alpha are NOT baked** — set constants, or bake them to an Image Texture in your script; the `warnings` list tells you which channel was left procedural.
62
+ - **Axis and units:** model in Blender's native Z-up, in metres; the export converts to the engine's +Y-up (`dimensions` in the result is already +Y-up). A 2 m wall segment is `dimensions.y ≈ 2`.
63
+ - **Naming:** object names become node names in the imported scene. Name every object and material (`obj.name = "Wall_2m_A"`). The `name` argument names the `.glb` (`res://assets/fabricated/<name>.glb` unless `out_path` says otherwise) and the instantiated node; it is sanitized to `[A-Za-z0-9_-]`.
64
+ - **Determinism:** seed anything random (`random.seed(7)`, noise textures with fixed seeds). A re-run must produce the same mesh so the loop below converges.
65
+ - **No network.** Blender's online access is off; scripts that fetch anything fail. Reference images and existing models come from the project on disk (below).
66
+
67
+ ### Minimal template
68
+
69
+ ```python
70
+ # Kit piece: 2 m wall segment with a door cutout, bevelled, one material.
71
+ import bmesh
72
+
73
+ def make_box(name, size, location):
74
+ bpy.ops.mesh.primitive_cube_add(size=1, location=location)
75
+ obj = bpy.context.active_object
76
+ obj.name = name
77
+ obj.scale = size
78
+ bpy.ops.object.transform_apply(scale=True)
79
+ return obj
80
+
81
+ wall = make_box("Wall_2m_Door", (2.0, 0.2, 3.0), (0, 0, 1.5))
82
+
83
+ cutter = make_box("DoorCutter", (1.0, 0.4, 2.1), (0, 0, 1.05))
84
+ cutter.hide_set(True) # hidden = helper: used by the boolean, never exported
85
+ cutter.hide_render = True
86
+
87
+ cut = wall.modifiers.new("Door", "BOOLEAN")
88
+ cut.operation = "DIFFERENCE"
89
+ cut.object = cutter
90
+ cut.solver = "EXACT"
91
+
92
+ bevel = wall.modifiers.new("Bevel", "BEVEL")
93
+ bevel.width = 0.02
94
+ bevel.segments = 2
95
+
96
+ mat = bpy.data.materials.new("KitStone")
97
+ mat.use_nodes = True
98
+ bsdf = mat.node_tree.nodes["Principled BSDF"]
99
+ bsdf.inputs["Base Color"].default_value = (0.55, 0.52, 0.48, 1.0)
100
+ bsdf.inputs["Roughness"].default_value = 0.85
101
+ wall.data.materials.append(mat)
102
+ ```
103
+
104
+ Call it with `name: "wall_2m_door"`, `import_to_scene: {parent: "./Kit"}`, no `target_size` (the piece is already modelled at 2 × 0.2 × 3 m — a kit that snaps must keep its authored dimensions).
105
+
106
+ ## The loop
107
+
108
+ 1. `summer_get_project_context` — confirm the engine is up and which project is bound; read `projectPath` if the script needs a file from the project.
109
+ 2. `summer_world_snapshot` — the BEFORE baseline; keep `snapshot_id`.
110
+ 3. `summer_fabricate_3d` — `source`, `name`, `import_to_scene: {parent, position?}`, and `target_size` only when the asset is *not* dimension-authored (a hero prop whose size you are normalizing, not a kit piece). Default `max_seconds` 120 covers boot + script + bake + export for ordinary pieces; raise it (up to 600) for exact booleans on dense meshes or several bakes.
111
+ 4. **Read the result before looking at anything else.** `ok` and `ran`; `objects[]` (each with `vertices`, `faces`, `triangles`, `materials`, `modifiers`) against what you meant to build; `dimensions` in +Y-up metres against the spec; `skipped` for pieces that vanished because they were hidden; `warnings` for grey-material and unbaked-channel problems; `baked` for what the bootstrap did to your materials; `output` for your own `print()`s. A non-zero `exit_code` after a validated export is a warning, not a failure — the artifact is what was verified.
112
+ 5. `summer_snapshot_diff from_id:<the id>` — the structural receipt: exactly one new subtree under `parent` named `<name>`, nothing else changed.
113
+ 6. `summer_screenshot` — look at it. `target:"scene" framing:"camera"` when materials or lighting matter; a preset framing for silhouette and scale checks.
114
+ 7. Iterate on the script and re-run with the same `name` — the `.glb` is overwritten in place (`overwrote_existing: true`), and the previously instantiated node is still in the scene: remove it with `summer_remove_node` before re-importing to scene, or import without `import_to_scene` and let the existing instance pick up the new file.
115
+ 8. `summer_save_scene` once the piece is right. Instantiation is one undo action in the open scene, not a save — an unsaved instance is lost when the editor closes.
116
+
117
+ Never claim a visual result without step 6. The full perception discipline is `verifying-scenes`.
118
+
119
+ ### Post-processing a generated model
120
+
121
+ Generation delivers dense triangulated geometry with poor UVs. Fabrication is the fix:
122
+
123
+ ```python
124
+ import os
125
+ src = os.path.join(PROJECT_DIR, "assets", "generated", "goblin_statue.glb") # PROJECT_DIR from summer_get_project_context.projectPath
126
+ bpy.ops.import_scene.gltf(filepath=src)
127
+ meshes = [o for o in bpy.context.scene.objects if o.type == "MESH"]
128
+ for o in meshes:
129
+ bpy.context.view_layer.objects.active = o
130
+ o.select_set(True)
131
+ dec = o.modifiers.new("Decimate", "DECIMATE")
132
+ dec.ratio = 0.25
133
+ bpy.ops.object.mode_set(mode="EDIT")
134
+ bpy.ops.mesh.select_all(action="SELECT")
135
+ bpy.ops.uv.smart_project(angle_limit=math.radians(66), island_margin=0.02)
136
+ bpy.ops.object.mode_set(mode="OBJECT")
137
+ ```
138
+
139
+ Substitute the real absolute project path for `PROJECT_DIR` (a string literal built from `summer_get_project_context` → `projectPath`); scripts have no `res://`. Write the result to a *new* `out_path` (`res://assets/generated/goblin_statue_lod1.glb`) so the original stays for comparison, and compare `objects[].triangles` before and after in the result.
140
+
141
+ ### Shatter fragments without add-ons
142
+
143
+ Factory startup disables add-ons, so cell-fracture operators are not available. Cut with `bmesh.ops.bisect_plane` in a loop over random planes, `bmesh.ops.split_edges` / separate by loose parts, and name each fragment `Shard_00`, `Shard_01`, … — the imported scene then carries one `MeshInstance3D` per shard, ready for a `RigidBody3D` wrap in a `summer_run_script` pass.
144
+
145
+ ## Failure taxonomy — read `failure_reason`, then act
146
+
147
+ | `failure_reason` | What happened | Do |
148
+ |---|---|---|
149
+ | `engine_lacks_op` | This engine build predates FabricateMesh (nothing was sent) | Route to `summer_generate_3d`, `summer_search_assets` / `summer_import_asset`, or `summer_run_script` blockout geometry; tell the user an engine update enables fabrication |
150
+ | `blender_not_found` | No usable Blender executable (see `tried`) | Relay the one-line decision above; never guess a path or install anything |
151
+ | `blender_launch_failed` | The executable exists but did not start (permissions, broken install, wrong architecture) | Show the `error` and `output` tail to the user; a different `blender_path` or a reinstall is their call |
152
+ | `script_error` | Your bpy raised (`traceback_tail`, `script_line`, `blender_version`) | Fix the named line against the reported version; `script_line` maps to your `source` |
153
+ | `timeout` | The child exceeded `max_seconds` (echoed) and was killed; nothing was imported | Raise the budget (≤ 600), or split — one piece per call, fewer bakes, coarser booleans |
154
+ | `export_empty` | The script left no exportable object | Everything hidden? Not linked to a collection? Wrong type (a light, a camera)? Check `skipped` |
155
+ | `export_failed` / `export_missing` | The exporter failed or wrote nothing | Read `errors` — usually a material or modifier the exporter cannot handle; simplify |
156
+ | `bootstrap_error` | The engine's own bootstrap failed (not your script) | Report it verbatim as a bug; do not work around it |
157
+ | `import_failed` | The `.glb` is at `out_path` but the editor did not import it | Read the importer's message with `summer_get_console`; often a zero-face mesh or an oversized texture. Fix and re-run, or `summer_instantiate_scene` the file after a manual rescan |
158
+ | `instantiate_failed` | Imported fine; instantiation into the open scene failed (bad `parent`, no scene open) | The asset is in the project — open the right scene and `summer_instantiate_scene` it with `target_size` |
159
+ | `busy` | Another fabrication is in flight | Wait for that result; never parallelize |
160
+ | `cancelled` / `shutdown` | The run was cancelled or the editor closed | Re-run when the editor is back |
161
+ | `rejected_identity` | The engine switched projects mid-run | `summer_get_project_context` to rebind, then decide whether to re-run |
162
+ | `bad_args` | Malformed `out_path`, `target_size`, or empty `source` | Fix the argument; nothing was sent |
163
+
164
+ Every failure leaves the project untouched except `import_failed` / `instantiate_failed`, which are honest about the `.glb` they did write. A `no_rewind_point: true` on any result means no SummerGit checkpoint exists for the run — say so before doing more destructive work.
165
+
166
+ ## Licensing and attribution
167
+
168
+ - **Blender is the user's.** Summer runs the executable they installed as a separate process and talks to it only through arguments, files, and the exit code. Nothing in Summer links against Blender or imports bpy; the small export bootstrap the engine writes to a scratch directory is a separately licensed GPL file precisely because it does. Do not move project logic into bpy scripts expecting it to stay proprietary.
169
+ - **Output is unencumbered.** Meshes made with Blender belong to the user; the `.glb` in their project carries no Blender licence obligation.
170
+ - **Scripts you write here are created on the user's machine and never distributed by Summer.** If you adapt a bpy snippet from elsewhere, respect its licence — prefer your own code or CC0 sources, and record the origin in `.summer/memory/decisions/` when it matters for the project.
171
+ - **Trademark.** "Blender" is a trademark of the Blender Foundation. Refer to it factually as the dependency ("requires Blender"); never describe the feature as powered by, built on, or branded with Blender, and never use its logo. Summer's name for this capability is *mesh fabrication*.
172
+ - Imported library assets keep their own licences (`summer_search_assets` results carry `licenseType`); fabrication does not change that.
173
+
174
+ ## Red Flags — STOP
175
+
176
+ | Red flag | Reality |
177
+ |---|---|
178
+ | Fabricating a barrel, a crate, a chair | Library first, generation second. Fabricate is for kits, VFX meshes, and post-processing |
179
+ | Fabricating a character or creature | Scripted organic modelling is the documented failure mode; `summer_generate_3d` with rigging |
180
+ | A script that calls `export_scene.gltf`, saves, or quits | Breaks the contract; the bootstrap exports |
181
+ | A material that is not a Principled BSDF | Exports grey; the `warnings` list said so |
182
+ | Procedural roughness or normal maps left unbaked | Not baked automatically — set constants or bake in the script |
183
+ | `target_size` on a kit piece | Destroys the authored dimensions the kit snaps on |
184
+ | Two fabrications in flight | `busy`; one at a time per editor |
185
+ | Guessing a `blender_path` | Only the user knows where their Blender is; use the resolution order |
186
+ | Installing Blender for the user | Never. Relay the decision |
187
+ | Claiming the piece looks right without a screenshot | The fabricator is blind; only step 6 sees |
188
+ | A hidden object that was supposed to export | Hidden means helper; unhide it or check `skipped` |
189
+ | Retrying the same script after `timeout` | Raise the budget or split the job; the same oversized script times out again |
190
+
191
+ **Related skills:**
192
+ - `asset-strategy` — the route decision for every "I need a [thing]".
193
+ - `environment-kit`, `prop-model`, `character-model` — the generation and library specialists fabrication defers to.
194
+ - `scene-scripting` — in-scene geometry, placement loops, and wrapping fabricated pieces in bodies and collisions.
195
+ - `verifying-scenes` and `verification-before-completion` — the evidence discipline after import.
@@ -0,0 +1,52 @@
1
+ id: skill/fabricating-assets
2
+ kind: skill
3
+ version: 1.0.0
4
+ summary: Fabricate meshes with a bpy script in the user's own Blender (summer_fabricate_3d) — kits with exact dimensions, VFX meshes, post-processing generated models.
5
+ use_when:
6
+ - writing a Blender Python (bpy) script for summer_fabricate_3d and deciding whether fabrication, generation, or the free library is the right route for an asset
7
+ - a parametric hard-surface set with exact dimensions, booleans, bevels, and shared materials that must stay consistent across many pieces
8
+ - VFX meshes — shatter fragments, curve sweeps, trails, LOD chains — or decimating, UV-unwrapping, and baking a generated model before it goes into the scene
9
+ - a fabrication failed (blender_not_found, script_error, export_empty, import_failed, busy, timeout) and the result needs to be read correctly
10
+ do_not_use_when:
11
+ - a generic prop — search the free library first (summer_search_assets, prop-model), then generate (summer_generate_3d)
12
+ - a character or any organic shape — character-model / organic-model; scripted organic modelling is the documented failure mode
13
+ - a blockout or placeholder — scene-scripting primitives/CSG are instant and in-scene
14
+ - "the engine build lacks FabricateMesh (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op — route to summer_generate_3d / summer_search_assets / summer_run_script instead"
15
+ facets:
16
+ lifecycle:
17
+ - build
18
+ domains:
19
+ - 3d
20
+ - assets
21
+ - scripting
22
+ - agent-workflow
23
+ modalities:
24
+ - 3d-models
25
+ - scripts
26
+ - assets
27
+ compatibility:
28
+ engine: ">=4.6"
29
+ related:
30
+ tools:
31
+ - tool/fabricate-3d
32
+ - tool/generate-3d
33
+ - tool/search-assets
34
+ - tool/import-asset
35
+ - tool/instantiate-scene
36
+ - tool/get-project-context
37
+ - tool/world-snapshot
38
+ - tool/snapshot-diff
39
+ - tool/screenshot
40
+ - tool/get-console
41
+ skills:
42
+ - skill/asset-strategy
43
+ - skill/environment-kit
44
+ - skill/prop-model
45
+ - skill/character-model
46
+ - skill/scene-scripting
47
+ - skill/verifying-scenes
48
+ - skill/verification-before-completion
49
+ source: official
50
+ license: MIT
51
+ status: preview
52
+ recommended: false
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
6
  category: animation
7
7
  user-invocable: false
8
- allowed-tools: Read Grep Edit Write summer_search_assets summer_inspect_resource summer_inspect_node summer_generate_audio summer_generate_motion summer_add_node summer_set_prop summer_set_resource_property summer_save_scene summer_get_script_errors
8
+ allowed-tools: Read Grep Edit Write summer_search_assets summer_inspect_resource summer_inspect_node summer_generate_audio summer_generate_motion summer_run_script summer_add_node summer_set_prop summer_set_resource_property summer_save_scene summer_get_script_errors
9
9
  paths: ["**/*.gd", "**/*.tscn", "**/*.tres"]
10
10
  ---
11
11
 
@@ -31,7 +31,7 @@ The 2026 production stack:
31
31
 
32
32
  ## When NOT to use this skill
33
33
 
34
- - Character has no face / no BlendShapes (helmeted soldier, robot, mascot). Hard-skip to body language via `summer:animation/generate-motion`.
34
+ - Character has no face / no BlendShapes (helmeted soldier, robot, mascot). Hard-skip to body language via `generate-motion`.
35
35
  - The dialogue is written but not yet voiced — generate audio first via `summer_generate_audio({capability: "text_to_speech", ...})`. Lipsync without audio has nothing to sync to.
36
36
  - Pre-rendered cinematic from external DCC. Lipsync is in the rendered video, not the engine.
37
37
 
@@ -169,7 +169,18 @@ This is a plain `Animation` resource authored in code — no editor required.
169
169
  reloads with every track and track type intact (verified on the shipped 4.6.1
170
170
  binary with value, blend-shape and method tracks in one resource). Any advice
171
171
  that says animation tracks or keyframes can only be authored in the editor GUI
172
- is wrong.
172
+ is wrong. The bake function also runs unchanged inside a `summer_run_script`
173
+ body against the live editor — often more convenient than the headless lane
174
+ because the result lands in the open scene's library and the run is
175
+ transactional.
176
+
177
+ For QUICK facial keys that don't need a viseme timeline (a roar, a wince, an
178
+ eyebrow raise), animation-tier engines collapse the whole bake into `ctx.animate` with
179
+ a `"blend_shapes/<name>"` property path (value tracks, verified working) — one
180
+ call per shape, same `anim_name` appends tracks to one clip. Recipe in
181
+ `character-animation-wiring`. The Rhubarb bake loop above
182
+ stays the right tool for full audio-synced viseme timelines — 15 tracks with
183
+ per-cue keys is exactly what the loop is for.
173
184
 
174
185
  If you used the Whisper/ARPAbet cloud fallback instead of Rhubarb, swap `bake_from_rhubarb` for a variant that consumes `{ phoneme, start, duration }` triples and applies the ARPAbet → viseme table from the Reference card.
175
186
 
@@ -258,7 +269,7 @@ If the user has a CMUDict-style phoneme list and wants to map manually, this is
258
269
  ### Quality bar
259
270
 
260
271
  - ~12 phonemes/sec is normal English speech; the bake produces ~25 keyframes/sec across all tracks. Below 60fps playback on weak hardware: enable `BlendShape track interpolation = NEAREST` (loses smoothness, gains 30% perf). Reserve for mobile / very crowded crowd scenes.
261
- - Lipsync alone is ~70% of "alive". Add idle blink + idle micro-head-bob (`summer:animation/procedural-animation`) and you're at ~95%. The remaining 5% is brow articulation tied to dialogue sentiment, which is bespoke per scene.
272
+ - Lipsync alone is ~70% of "alive". Add idle blink + idle micro-head-bob (`procedural-animation`) and you're at ~95%. The remaining 5% is brow articulation tied to dialogue sentiment, which is bespoke per scene.
262
273
 
263
274
  ## Anti-patterns
264
275
 
@@ -285,15 +296,16 @@ production speech recognition or photoreal lip sync.
285
296
 
286
297
  ## Handoff
287
298
 
288
- - For voice generation upstream, `summer:audio/generate-voice` (which wraps `summer_generate_audio({capability: "text_to_speech", ...})`).
289
- - For dialogue scripts and conversation flow, `summer:ai-and-npcs/design-npc`.
290
- - For the AnimationTree this layer composes into, `summer:animation/animation-tree`.
291
- - For idle blinks, saccades, and head-tracking that complement lipsync, `summer:animation/procedural-animation`.
299
+ - For voice generation upstream, `voice-line` (which wraps `summer_generate_audio({capability: "text_to_speech", ...})`).
300
+ - For dialogue scripts and conversation flow, `design-npc`.
301
+ - For the AnimationTree this layer composes into, `animation-tree`.
302
+ - For idle blinks, saccades, and head-tracking that complement lipsync, `procedural-animation`.
292
303
  - For full performance capture (face + body together), out of scope — see Meshy's mocap docs or external pipelines.
293
304
 
294
305
  ## See also
295
306
 
296
- - `summer:audio/generate-voice` — TTS upstream of this skill.
297
- - `summer:animation/animation-tree` — wire the lipsync OneShot into the character's tree.
298
- - `summer:animation/procedural-animation` — eye blinks, saccades, head idle.
307
+ - `voice-line` — TTS upstream of this skill.
308
+ - `character-animation-wiring` — the blend-shape `ctx.animate` mechanism, plus the body wiring this face layer sits on.
309
+ - `animation-tree` — wire the lipsync OneShot into the character's tree.
310
+ - `procedural-animation` — eye blinks, saccades, head idle.
299
311
  - Rhubarb Lip Sync — https://github.com/DanielSWolf/rhubarb-lip-sync (external tool; phoneme extraction).