summer-engine 3.0.0 → 3.2.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 (413) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +27 -5
  3. package/.codex-plugin/plugin.json +28 -6
  4. package/.cursor-plugin/plugin.json +27 -5
  5. package/.factory-plugin/plugin.json +27 -5
  6. package/.opencode/plugins/summer.js +1 -1
  7. package/CHANGELOG.md +120 -0
  8. package/README.md +22 -7
  9. package/assets/audit/scene_audit.gd +4136 -0
  10. package/assets/seeing/seeing_probe.gd +1873 -0
  11. package/dist/cli/commands/setup.js +6 -19
  12. package/dist/cli/commands/skills.js +57 -32
  13. package/dist/core/api-client.d.ts +9 -1
  14. package/dist/core/api-client.js +21 -4
  15. package/dist/core/capabilities/agent-playbook.js +46 -0
  16. package/dist/core/capabilities/audit/accept.d.ts +55 -0
  17. package/dist/core/capabilities/audit/accept.js +147 -0
  18. package/dist/core/capabilities/audit/args.d.ts +95 -0
  19. package/dist/core/capabilities/audit/args.js +89 -0
  20. package/dist/core/capabilities/audit/audit.d.ts +56 -0
  21. package/dist/core/capabilities/audit/audit.js +287 -0
  22. package/dist/core/capabilities/audit/frame.d.ts +14 -0
  23. package/dist/core/capabilities/audit/frame.js +35 -0
  24. package/dist/core/capabilities/audit/gaps.d.ts +96 -0
  25. package/dist/core/capabilities/audit/gaps.js +257 -0
  26. package/dist/core/capabilities/audit/judge.d.ts +162 -0
  27. package/dist/core/capabilities/audit/judge.js +1134 -0
  28. package/dist/core/capabilities/audit/math.d.ts +110 -0
  29. package/dist/core/capabilities/audit/math.js +263 -0
  30. package/dist/core/capabilities/audit/summary.d.ts +74 -0
  31. package/dist/core/capabilities/audit/summary.js +212 -0
  32. package/dist/core/capabilities/board.d.ts +31 -0
  33. package/dist/core/capabilities/board.js +43 -0
  34. package/dist/core/capabilities/camera-view.d.ts +4 -2
  35. package/dist/core/capabilities/camera-view.js +6 -3
  36. package/dist/core/capabilities/connect-signal.d.ts +85 -0
  37. package/dist/core/capabilities/connect-signal.js +285 -0
  38. package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
  39. package/dist/core/capabilities/engine-fallbacks.js +5 -0
  40. package/dist/core/capabilities/engine-ops.d.ts +5 -1
  41. package/dist/core/capabilities/engine-ops.js +0 -3
  42. package/dist/core/capabilities/engine-receipt.d.ts +12 -0
  43. package/dist/core/capabilities/engine-receipt.js +26 -0
  44. package/dist/core/capabilities/file-read.d.ts +64 -0
  45. package/dist/core/capabilities/file-read.js +325 -0
  46. package/dist/core/capabilities/game-task-plan.js +4 -2
  47. package/dist/core/capabilities/grep.d.ts +60 -0
  48. package/dist/core/capabilities/grep.js +190 -0
  49. package/dist/core/capabilities/inspect-node.d.ts +56 -0
  50. package/dist/core/capabilities/inspect-node.js +225 -0
  51. package/dist/core/capabilities/inspect-resource.d.ts +61 -0
  52. package/dist/core/capabilities/inspect-resource.js +376 -0
  53. package/dist/core/capabilities/math3d.d.ts +28 -0
  54. package/dist/core/capabilities/math3d.js +88 -0
  55. package/dist/core/capabilities/motion-generation.d.ts +62 -0
  56. package/dist/core/capabilities/motion-generation.js +138 -0
  57. package/dist/core/capabilities/placement-batch.d.ts +102 -0
  58. package/dist/core/capabilities/placement-batch.js +483 -0
  59. package/dist/core/capabilities/placement-math.d.ts +70 -0
  60. package/dist/core/capabilities/placement-math.js +209 -0
  61. package/dist/core/capabilities/placement-script.d.ts +42 -0
  62. package/dist/core/capabilities/placement-script.js +1096 -0
  63. package/dist/core/capabilities/placement.d.ts +485 -0
  64. package/dist/core/capabilities/placement.js +1731 -0
  65. package/dist/core/capabilities/project-context.d.ts +33 -2
  66. package/dist/core/capabilities/project-context.js +87 -4
  67. package/dist/core/capabilities/replace-node.d.ts +91 -0
  68. package/dist/core/capabilities/replace-node.js +423 -0
  69. package/dist/core/capabilities/runtime-control.d.ts +20 -4
  70. package/dist/core/capabilities/runtime-control.js +67 -2
  71. package/dist/core/capabilities/scene-batch.d.ts +63 -0
  72. package/dist/core/capabilities/scene-batch.js +394 -0
  73. package/dist/core/capabilities/scene-readback.d.ts +36 -0
  74. package/dist/core/capabilities/scene-readback.js +54 -0
  75. package/dist/core/capabilities/seeing/args.d.ts +348 -0
  76. package/dist/core/capabilities/seeing/args.js +178 -0
  77. package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
  78. package/dist/core/capabilities/seeing/candidates.js +282 -0
  79. package/dist/core/capabilities/seeing/math.d.ts +134 -0
  80. package/dist/core/capabilities/seeing/math.js +269 -0
  81. package/dist/core/capabilities/seeing/probe.d.ts +62 -0
  82. package/dist/core/capabilities/seeing/probe.js +188 -0
  83. package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
  84. package/dist/core/capabilities/seeing/scoring.js +639 -0
  85. package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
  86. package/dist/core/capabilities/seeing/seeing.js +1341 -0
  87. package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
  88. package/dist/core/capabilities/seeing/shot-store.js +204 -0
  89. package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
  90. package/dist/core/capabilities/surface-snap-mesh.js +425 -0
  91. package/dist/core/capabilities/surface-snap.d.ts +77 -0
  92. package/dist/core/capabilities/surface-snap.js +461 -0
  93. package/dist/core/capabilities/tool-dispatch.js +231 -72
  94. package/dist/core/capabilities/tscn.d.ts +85 -0
  95. package/dist/core/capabilities/tscn.js +391 -0
  96. package/dist/core/capabilities/world-snapshot.d.ts +58 -0
  97. package/dist/core/capabilities/world-snapshot.js +150 -0
  98. package/dist/core/capability-skew.d.ts +5 -5
  99. package/dist/core/capability-skew.js +14 -6
  100. package/dist/core/headless/worker-engine-client.d.ts +1 -1
  101. package/dist/core/headless/worker-engine-client.js +2 -2
  102. package/dist/core/library-read.d.ts +37 -5
  103. package/dist/core/library-read.js +264 -33
  104. package/dist/core/library-search.d.ts +2 -2
  105. package/dist/core/skills-registry.d.ts +9 -1
  106. package/dist/core/skills-registry.js +25 -2
  107. package/dist/installer/agent-config.d.ts +9 -4
  108. package/dist/installer/agent-config.js +194 -392
  109. package/dist/installer/agent-table.d.ts +119 -0
  110. package/dist/installer/agent-table.js +619 -0
  111. package/dist/installer/setup.js +4 -2
  112. package/dist/installer/skill-locations.d.ts +8 -17
  113. package/dist/installer/skill-locations.js +22 -101
  114. package/dist/installer/version-check.d.ts +5 -1
  115. package/dist/installer/version-check.js +38 -28
  116. package/dist/mcp/server.js +9 -3
  117. package/dist/mcp/tools/asset-tools.js +21 -3
  118. package/dist/mcp/tools/audit-tools.d.ts +23 -0
  119. package/dist/mcp/tools/audit-tools.js +60 -0
  120. package/dist/mcp/tools/debug-tools.js +3 -1
  121. package/dist/mcp/tools/file-tools.js +17 -4
  122. package/dist/mcp/tools/generate-tools.js +74 -66
  123. package/dist/mcp/tools/library-tools.js +2 -0
  124. package/dist/mcp/tools/perception-tools.js +6 -19
  125. package/dist/mcp/tools/placement-tools.d.ts +24 -0
  126. package/dist/mcp/tools/placement-tools.js +91 -0
  127. package/dist/mcp/tools/project-tools.js +18 -15
  128. package/dist/mcp/tools/scene-tools.js +71 -83
  129. package/dist/mcp/tools/seeing-tools.d.ts +24 -0
  130. package/dist/mcp/tools/seeing-tools.js +64 -0
  131. package/dist/mcp/tools/spatial-tools.js +17 -9
  132. package/dist/mcp/tools/visual-tools.js +59 -7
  133. package/gemini-extension.json +26 -4
  134. package/integrations/README.md +48 -19
  135. package/integrations/amp/README.md +12 -0
  136. package/integrations/amp/manifest-target.json +3 -0
  137. package/integrations/antigravity/README.md +12 -0
  138. package/integrations/antigravity/manifest-target.json +3 -0
  139. package/integrations/claude-desktop/README.md +12 -0
  140. package/integrations/claude-desktop/manifest-target.json +3 -0
  141. package/integrations/cline/README.md +8 -9
  142. package/integrations/cline-cli/README.md +12 -0
  143. package/integrations/cline-cli/manifest-target.json +3 -0
  144. package/integrations/copilot-jetbrains/README.md +12 -0
  145. package/integrations/copilot-jetbrains/manifest-target.json +3 -0
  146. package/integrations/crush/README.md +12 -0
  147. package/integrations/crush/manifest-target.json +3 -0
  148. package/integrations/github-copilot/README.md +8 -8
  149. package/integrations/goose/README.md +12 -0
  150. package/integrations/goose/manifest-target.json +3 -0
  151. package/integrations/grok-build/README.md +12 -0
  152. package/integrations/grok-build/manifest-target.json +3 -0
  153. package/integrations/hermes/README.md +12 -0
  154. package/integrations/hermes/manifest-target.json +3 -0
  155. package/integrations/junie/README.md +12 -0
  156. package/integrations/junie/manifest-target.json +3 -0
  157. package/integrations/kilo-code/README.md +6 -10
  158. package/integrations/kimi-code/README.md +12 -0
  159. package/integrations/kimi-code/manifest-target.json +3 -0
  160. package/integrations/kiro/README.md +12 -0
  161. package/integrations/kiro/manifest-target.json +3 -0
  162. package/integrations/lm-studio/README.md +8 -8
  163. package/integrations/mistral-vibe/README.md +12 -0
  164. package/integrations/mistral-vibe/manifest-target.json +3 -0
  165. package/integrations/opencode/README.md +9 -12
  166. package/integrations/qoder/README.md +12 -0
  167. package/integrations/qoder/manifest-target.json +3 -0
  168. package/integrations/qwen-code/README.md +12 -0
  169. package/integrations/qwen-code/manifest-target.json +3 -0
  170. package/integrations/roo-code/README.md +8 -7
  171. package/integrations/rovo-dev/README.md +12 -0
  172. package/integrations/rovo-dev/manifest-target.json +3 -0
  173. package/integrations/trae/README.md +12 -0
  174. package/integrations/trae/manifest-target.json +3 -0
  175. package/integrations/visual-studio/README.md +12 -0
  176. package/integrations/visual-studio/manifest-target.json +3 -0
  177. package/integrations/vscode-copilot/README.md +9 -9
  178. package/integrations/warp/README.md +12 -0
  179. package/integrations/warp/manifest-target.json +3 -0
  180. package/integrations/windsurf/README.md +8 -9
  181. package/integrations/zed/README.md +12 -0
  182. package/integrations/zed/manifest-target.json +3 -0
  183. package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
  184. package/library/references/mcp-tools-reference/resource.yaml +1 -1
  185. package/library/references/summer-folder/resource.yaml +1 -1
  186. package/library/references/summer-folder/summer-folder.md +1 -1
  187. package/library/skills/3d-lighting/SKILL.md +1 -1
  188. package/library/skills/README.md +264 -0
  189. package/library/skills/adaptive-music/SKILL.md +1 -1
  190. package/library/skills/agent-playtesting/SKILL.md +1 -1
  191. package/library/skills/ai-characters-in-games/SKILL.md +220 -0
  192. package/library/skills/ai-characters-in-games/resource.yaml +30 -0
  193. package/library/skills/ambient-bed/SKILL.md +1 -1
  194. package/library/skills/animated-loop/SKILL.md +1 -1
  195. package/library/skills/animation-tree/SKILL.md +1 -1
  196. package/library/skills/art-direction/SKILL.md +1 -1
  197. package/library/skills/asset-strategy/SKILL.md +2 -1
  198. package/library/skills/asset-strategy/resource.yaml +2 -1
  199. package/library/skills/audio-direction/SKILL.md +1 -1
  200. package/library/skills/auto-fire-targeting/SKILL.md +1 -1
  201. package/library/skills/brainstorm-game/SKILL.md +1 -1
  202. package/library/skills/brainstorming/SKILL.md +1 -1
  203. package/library/skills/browse-templates/SKILL.md +3 -3
  204. package/library/skills/browse-templates/resource.yaml +1 -1
  205. package/library/skills/camera-rigs/SKILL.md +128 -0
  206. package/library/skills/camera-rigs/resource.yaml +29 -0
  207. package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
  208. package/library/skills/character-animation-wiring/SKILL.md +1 -1
  209. package/library/skills/character-model/SKILL.md +1 -1
  210. package/library/skills/character-movement/SKILL.md +326 -0
  211. package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
  212. package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
  213. package/library/skills/character-movement/references/movement-3d.md +136 -0
  214. package/library/skills/character-movement/references/platformer-feel.md +83 -0
  215. package/library/skills/character-movement/resource.yaml +40 -0
  216. package/library/skills/character-portrait/SKILL.md +1 -1
  217. package/library/skills/cinematic-cutscene/SKILL.md +1 -1
  218. package/library/skills/combat-basics/SKILL.md +159 -0
  219. package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
  220. package/library/skills/combat-basics/resource.yaml +34 -0
  221. package/library/skills/concept-art/SKILL.md +1 -1
  222. package/library/skills/create-asset-sheet/SKILL.md +1 -1
  223. package/library/skills/debug/SKILL.md +1 -1
  224. package/library/skills/debugging-game-feel/SKILL.md +1 -1
  225. package/library/skills/design-level/SKILL.md +1 -1
  226. package/library/skills/design-mechanic/SKILL.md +1 -1
  227. package/library/skills/design-npc/SKILL.md +1 -1
  228. package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
  229. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
  230. package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
  231. package/library/skills/environment-kit/SKILL.md +1 -1
  232. package/library/skills/export-and-ship/SKILL.md +1 -1
  233. package/library/skills/fabricating-assets/SKILL.md +1 -1
  234. package/library/skills/facial-and-lipsync/SKILL.md +1 -1
  235. package/library/skills/fps-controller/SKILL.md +9 -7
  236. package/library/skills/fps-controller/resource.yaml +4 -1
  237. package/library/skills/game-feel/SKILL.md +1 -1
  238. package/library/skills/gameskill/SKILL.md +1 -1
  239. package/library/skills/gdscript-patterns/SKILL.md +1 -1
  240. package/library/skills/generate-motion/SKILL.md +9 -9
  241. package/library/skills/generate-motion/resource.yaml +2 -1
  242. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
  243. package/library/skills/headless-scripting/SKILL.md +1 -1
  244. package/library/skills/in-game-purchases/SKILL.md +254 -0
  245. package/library/skills/in-game-purchases/resource.yaml +29 -0
  246. package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
  247. package/library/skills/investigating-bugs/SKILL.md +1 -1
  248. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
  249. package/library/skills/make-game/SKILL.md +25 -3
  250. package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
  251. package/library/skills/make-game/references/2d-platformer.md +117 -0
  252. package/library/skills/make-game/references/2d-rpg-content.md +234 -0
  253. package/library/skills/make-game/references/2d-rpg.md +241 -0
  254. package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
  255. package/library/skills/make-game/references/2d-survivors.md +237 -0
  256. package/library/skills/make-game/references/3d-fps-systems.md +216 -0
  257. package/library/skills/make-game/references/3d-fps.md +177 -0
  258. package/library/skills/make-game/references/3d-horror-systems.md +186 -0
  259. package/library/skills/make-game/references/3d-horror.md +201 -0
  260. package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
  261. package/library/skills/make-game/references/3d-third-person.md +215 -0
  262. package/library/skills/make-game/resource.yaml +6 -1
  263. package/library/skills/multiplayer/SKILL.md +150 -0
  264. package/library/skills/multiplayer/resource.yaml +33 -0
  265. package/library/skills/multiplayer-movement/SKILL.md +510 -0
  266. package/library/skills/multiplayer-movement/files.md +501 -0
  267. package/library/skills/multiplayer-movement/resource.yaml +30 -0
  268. package/library/skills/multiplayer-project/SKILL.md +521 -0
  269. package/library/skills/multiplayer-project/files.md +448 -0
  270. package/library/skills/multiplayer-project/resource.yaml +36 -0
  271. package/library/skills/multiplayer-publish/SKILL.md +229 -0
  272. package/library/skills/multiplayer-publish/export-errors.md +89 -0
  273. package/library/skills/multiplayer-publish/resource.yaml +28 -0
  274. package/library/skills/multiplayer-state/SKILL.md +438 -0
  275. package/library/skills/multiplayer-state/files.md +592 -0
  276. package/library/skills/multiplayer-state/resource.yaml +35 -0
  277. package/library/skills/multiplayer-testing/SKILL.md +236 -0
  278. package/library/skills/multiplayer-testing/resource.yaml +39 -0
  279. package/library/skills/music-track/SKILL.md +1 -1
  280. package/library/skills/navigate-summer/SKILL.md +1 -1
  281. package/library/skills/new-project/SKILL.md +1 -1
  282. package/library/skills/organic-model/SKILL.md +1 -1
  283. package/library/skills/pixel-art/SKILL.md +1 -1
  284. package/library/skills/play/SKILL.md +1 -1
  285. package/library/skills/playtesting-a-feature/SKILL.md +1 -1
  286. package/library/skills/procedural-animation/SKILL.md +2 -2
  287. package/library/skills/procedural-animation/resource.yaml +1 -1
  288. package/library/skills/prop-model/SKILL.md +1 -1
  289. package/library/skills/psx-retro-rendering/SKILL.md +1 -1
  290. package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
  291. package/library/skills/remote-deploy/SKILL.md +1 -1
  292. package/library/skills/retarget/SKILL.md +1 -1
  293. package/library/skills/running-in-the-cloud/SKILL.md +1 -1
  294. package/library/skills/save-load/SKILL.md +156 -0
  295. package/library/skills/save-load/resource.yaml +27 -0
  296. package/library/skills/scene-composition/SKILL.md +1 -1
  297. package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
  298. package/library/skills/scene-scripting/SKILL.md +1 -1
  299. package/library/skills/scene-to-level/SKILL.md +1 -1
  300. package/library/skills/skill-create/SKILL.md +1 -1
  301. package/library/skills/skill-improve/SKILL.md +1 -1
  302. package/library/skills/skill-test/SKILL.md +1 -1
  303. package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
  304. package/library/skills/skybox-panorama/SKILL.md +1 -1
  305. package/library/skills/sound-effect/SKILL.md +1 -1
  306. package/library/skills/spatial-placement/SKILL.md +134 -3
  307. package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
  308. package/library/skills/spatial-placement/resource.yaml +16 -2
  309. package/library/skills/sprite-sheet/SKILL.md +1 -1
  310. package/library/skills/summer-analytics/SKILL.md +147 -0
  311. package/library/skills/summer-analytics/resource.yaml +28 -0
  312. package/library/skills/summer-friends/SKILL.md +226 -0
  313. package/library/skills/summer-friends/resource.yaml +28 -0
  314. package/library/skills/summer-leaderboards/SKILL.md +231 -0
  315. package/library/skills/summer-leaderboards/resource.yaml +30 -0
  316. package/library/skills/summer-match-results/SKILL.md +286 -0
  317. package/library/skills/summer-match-results/resource.yaml +32 -0
  318. package/library/skills/summer-matchmaking/SKILL.md +301 -0
  319. package/library/skills/summer-matchmaking/resource.yaml +32 -0
  320. package/library/skills/summer-parties/SKILL.md +253 -0
  321. package/library/skills/summer-parties/resource.yaml +30 -0
  322. package/library/skills/summer-player-data/SKILL.md +322 -0
  323. package/library/skills/summer-player-data/resource.yaml +30 -0
  324. package/library/skills/summer-store/SKILL.md +271 -0
  325. package/library/skills/summer-store/resource.yaml +29 -0
  326. package/library/skills/summer-world-chat/SKILL.md +195 -0
  327. package/library/skills/summer-world-chat/resource.yaml +30 -0
  328. package/library/skills/summer-world-saves/SKILL.md +284 -0
  329. package/library/skills/summer-world-saves/resource.yaml +29 -0
  330. package/library/skills/text-to-motion/SKILL.md +99 -0
  331. package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
  332. package/library/skills/text-to-motion/resource.yaml +41 -0
  333. package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
  334. package/library/skills/tileable-texture/SKILL.md +1 -1
  335. package/library/skills/trailer-shot/SKILL.md +1 -1
  336. package/library/skills/tune-performance/SKILL.md +1 -1
  337. package/library/skills/ui-basics/SKILL.md +10 -1
  338. package/library/skills/ui-graphics/SKILL.md +1 -1
  339. package/library/skills/use-widget-asset/SKILL.md +1 -1
  340. package/library/skills/using-summer/SKILL.md +2 -2
  341. package/library/skills/using-summer/resource.yaml +2 -2
  342. package/library/skills/vehicle-model/SKILL.md +1 -1
  343. package/library/skills/verification-before-completion/SKILL.md +1 -1
  344. package/library/skills/verifying-scenes/SKILL.md +76 -2
  345. package/library/skills/verifying-scenes/resource.yaml +13 -2
  346. package/library/skills/vfx-dissolve/SKILL.md +1 -1
  347. package/library/skills/vfx-fire/SKILL.md +1 -1
  348. package/library/skills/vfx-hit-spark/SKILL.md +1 -1
  349. package/library/skills/vfx-lightning/SKILL.md +1 -1
  350. package/library/skills/vfx-magic-glow/SKILL.md +1 -1
  351. package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
  352. package/library/skills/vfx-smoke/SKILL.md +1 -1
  353. package/library/skills/vfx-water-ripple/SKILL.md +1 -1
  354. package/library/skills/voice-line/SKILL.md +1 -1
  355. package/library/skills/web-and-touch-input/SKILL.md +38 -0
  356. package/library/skills/web-and-touch-input/resource.yaml +28 -0
  357. package/library/skills/web-compatibility-look/SKILL.md +62 -0
  358. package/library/skills/web-compatibility-look/resource.yaml +30 -0
  359. package/library/skills/world-building-3d/SKILL.md +8 -1
  360. package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
  361. package/library/skills/world-building-3d/resource.yaml +2 -1
  362. package/library/skills/writing-plans/SKILL.md +1 -1
  363. package/library/skills/writing-skills/SKILL.md +1 -1
  364. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
  365. package/library/tools/attach-to-surface/resource.yaml +142 -0
  366. package/library/tools/batch/resource.yaml +9 -3
  367. package/library/tools/connect-ports/resource.yaml +120 -0
  368. package/library/tools/connect-signal/resource.yaml +3 -2
  369. package/library/tools/debug-views/resource.yaml +94 -0
  370. package/library/tools/frame-nodes/resource.yaml +104 -0
  371. package/library/tools/frame-shot/resource.yaml +134 -0
  372. package/library/tools/generate-motion/resource.yaml +44 -9
  373. package/library/tools/get-board/resource.yaml +50 -0
  374. package/library/tools/get-project-context/resource.yaml +13 -2
  375. package/library/tools/grep/resource.yaml +77 -0
  376. package/library/tools/inspect-asset/resource.yaml +71 -0
  377. package/library/tools/inspect-node/resource.yaml +9 -2
  378. package/library/tools/inspect-resource/resource.yaml +16 -5
  379. package/library/tools/instantiate-scene/resource.yaml +27 -2
  380. package/library/tools/measure/resource.yaml +96 -0
  381. package/library/tools/place-adjacent/resource.yaml +113 -0
  382. package/library/tools/play/resource.yaml +15 -2
  383. package/library/tools/raycast/resource.yaml +101 -0
  384. package/library/tools/read-file/resource.yaml +36 -2
  385. package/library/tools/read-library/resource.yaml +2 -2
  386. package/library/tools/repeat-along/resource.yaml +129 -0
  387. package/library/tools/replace-node/resource.yaml +11 -5
  388. package/library/tools/scene-audit/resource.yaml +144 -0
  389. package/library/tools/screenshot/resource.yaml +13 -2
  390. package/library/tools/search-assets/resource.yaml +18 -0
  391. package/library/tools/shot-sheet/resource.yaml +110 -0
  392. package/library/tools/snap-to-surface/resource.yaml +4 -1
  393. package/library/tools/world-snapshot/resource.yaml +24 -3
  394. package/library/tools/zoom/resource.yaml +105 -0
  395. package/package.json +3 -3
  396. package/registry/generated/aliases.json +17 -3
  397. package/registry/generated/counts.json +3 -3
  398. package/registry/generated/gemini-extension.json +26 -4
  399. package/registry/generated/index.json +2154 -469
  400. package/registry/generated/marketplace.claude.json +2 -2
  401. package/registry/generated/plugin.claude.json +27 -5
  402. package/registry/generated/plugin.codex.json +28 -6
  403. package/registry/generated/plugin.cursor.json +27 -5
  404. package/registry/generated/plugin.factory.json +27 -5
  405. package/registry/generated/skills-index.md +264 -0
  406. package/registry/generated/skills-registry.json +901 -206
  407. package/registry/generated/templates-registry.json +2 -2
  408. package/library/skills/host-authoritative-state/SKILL.md +0 -332
  409. package/library/skills/host-authoritative-state/resource.yaml +0 -28
  410. package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
  411. package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
  412. package/library/skills/setup-multiplayer/SKILL.md +0 -336
  413. package/library/skills/setup-multiplayer/resource.yaml +0 -28
@@ -0,0 +1,448 @@
1
+ # multiplayer-project: complete files
2
+
3
+ Every file below ran as shown under Local Play. Compare against your project, or copy a file whole.
4
+
5
+ ## `authority/main.gd`
6
+
7
+ ```gdscript
8
+ extends Node
9
+ ## The match server. It runs headless and owns every rule.
10
+
11
+ const Game = preload("res://network/game.gd")
12
+ const PlayerArchetype = preload("res://authority/player_archetype.tres")
13
+
14
+ var spawner: SummerNetworkSpawner
15
+ var world: SummerNetworkWorld
16
+ var seat_of := {} # session_id -> seat, held until the Session leaves
17
+
18
+
19
+ func _ready() -> void:
20
+ spawner = Game.build_network(self, PlayerArchetype)
21
+ world = $World
22
+ spawner.entity_spawned.connect(_on_player_spawned)
23
+ spawner.command_received.connect(_on_command)
24
+ world.session_left.connect(_on_session_left)
25
+ var initialized: SummerResult = await Summer.initialize(Game.GAME_ID).get_result_or_completed_signal()
26
+ if not initialized.ok:
27
+ push_error(initialized.message)
28
+ return
29
+ if not world.is_ready():
30
+ await world.binding_ready
31
+ if not spawner.is_network_ready():
32
+ await spawner.network_ready
33
+ print("COURTYARD_AUTHORITY_READY")
34
+
35
+
36
+ ## A seat is a player's place in this World for their whole stay, across
37
+ ## reconnects. Returns -1 when the World is full.
38
+ func _seat(session: SummerSession) -> int:
39
+ if seat_of.has(session.session_id):
40
+ return seat_of[session.session_id]
41
+ var taken := seat_of.values()
42
+ for seat in Game.MAX_PLAYERS:
43
+ if seat not in taken:
44
+ seat_of[session.session_id] = seat
45
+ return seat
46
+ return -1
47
+
48
+
49
+ ## The Spawner spawns one player entity per joined player, once that player's
50
+ ## network is ready (and again after a reconnect).
51
+ func _on_player_spawned(entity: SummerNetworkEntity) -> void:
52
+ print("COURTYARD_PLAYER_SPAWNED seat=%d entity=%d" % [_seat(entity.session), entity.entity_id])
53
+
54
+
55
+ func _on_command(request: SummerNetworkCommandRequest) -> void:
56
+ var command := Game.unpack(request.payload)
57
+ match str(command.get("c", "")):
58
+ "join":
59
+ _join(request)
60
+ _:
61
+ request.refuse(&"unknown_command")
62
+
63
+
64
+ ## A client sends "join" once its network is ready.
65
+ func _join(request: SummerNetworkCommandRequest) -> void:
66
+ var seat := _seat(request.get_session())
67
+ if seat < 0:
68
+ request.refuse(&"match_full")
69
+ return
70
+ request.accept({}, Game.pack({"seat": seat}))
71
+ print("COURTYARD_PLAYER_JOINED seat=%d" % seat)
72
+
73
+
74
+ ## The Session ended for good: free the seat and everything the player had.
75
+ func _on_session_left(session: SummerSession, reason: String) -> void:
76
+ var seat: int = seat_of.get(session.session_id, -1)
77
+ seat_of.erase(session.session_id)
78
+ print("COURTYARD_PLAYER_LEFT seat=%d reason=%s" % [seat, reason])
79
+ ```
80
+
81
+ ## `authority/main.tscn`
82
+
83
+ ```ini
84
+ [gd_scene load_steps=2 format=3]
85
+
86
+ [ext_resource type="Script" path="res://authority/main.gd" id="1"]
87
+
88
+ [node name="Authority" type="Node"]
89
+ script = ExtResource("1")
90
+ ```
91
+
92
+ ## `authority/player_archetype.tres`
93
+
94
+ ```ini
95
+ [gd_resource type="SummerEntityArchetype" load_steps=3 format=3]
96
+
97
+ [ext_resource type="SummerNetworkSchema" path="res://network/player_schema.tres" id="1"]
98
+ [ext_resource type="PackedScene" path="res://authority/player_model.tscn" id="2"]
99
+
100
+ [resource]
101
+ archetype_id = &"player"
102
+ network_schema = ExtResource("1")
103
+ authority_model_scene = ExtResource("2")
104
+ ```
105
+
106
+ ## `authority/player_model.tscn`
107
+
108
+ ```ini
109
+ [gd_scene format=3]
110
+
111
+ [node name="PlayerModel" type="Node3D"]
112
+ ```
113
+
114
+ ## `client/main.gd`
115
+
116
+ ```gdscript
117
+ extends Node
118
+ ## What each player runs: joins the match and shows every player.
119
+
120
+ const Game = preload("res://network/game.gd")
121
+ const PlayerArchetype = preload("res://client/player_archetype.tres")
122
+
123
+ var spawner: SummerNetworkSpawner
124
+
125
+
126
+ func _ready() -> void:
127
+ spawner = Game.build_network(self, PlayerArchetype)
128
+ # Connect signals like state_group_created here, before joining, or values
129
+ # that arrive during the join go unseen (multiplayer-movement adds them).
130
+ var initialized: SummerResult = await Summer.initialize(Game.GAME_ID).get_result_or_completed_signal()
131
+ if not initialized.ok:
132
+ push_error(initialized.message)
133
+ return
134
+ var join := Summer.client.join(SummerJoinTarget.queue(Game.QUEUE))
135
+ # Hosted matchmaking may ask the player to accept a match.
136
+ join.acceptance_required.connect(func(proposal: SummerMatchmakingProposal) -> void: proposal.accept())
137
+ var joined: SummerResult = await join.get_result_or_completed_signal()
138
+ if not joined.ok:
139
+ push_error("join failed: %s %s" % [joined.code, joined.message])
140
+ return
141
+ if not spawner.is_network_ready():
142
+ await spawner.network_ready
143
+ var entered := await command({"c": "join"})
144
+ if not entered.ok:
145
+ push_error("could not enter the match: %s" % entered.error)
146
+ return
147
+ print("COURTYARD_CLIENT_JOINED")
148
+
149
+
150
+ ## Sends one Command and waits for the authority's answer.
151
+ func command(payload: Dictionary) -> Dictionary:
152
+ var admission := spawner.enqueue_command(Game.CMD, Game.pack(payload))
153
+ if not admission.is_enqueued():
154
+ return {"ok": false, "error": String(admission.get_code())}
155
+ var handle := admission.get_handle()
156
+ if not handle.is_terminal():
157
+ await handle.completed
158
+ if handle.get_outcome() == SummerNetworkCommandHandle.OUTCOME_ACCEPTED:
159
+ return {"ok": true, "error": "", "result": Game.unpack(handle.get_result())}
160
+ return {"ok": false, "error": String(handle.get_reason())}
161
+ ```
162
+
163
+ ## `client/main.tscn`
164
+
165
+ ```ini
166
+ [gd_scene load_steps=5 format=3]
167
+
168
+ [ext_resource type="Script" path="res://client/main.gd" id="1"]
169
+
170
+ [sub_resource type="BoxShape3D" id="FloorShape"]
171
+ size = Vector3(80, 1, 80)
172
+
173
+ [sub_resource type="BoxMesh" id="FloorMesh"]
174
+ size = Vector3(80, 1, 80)
175
+
176
+ [node name="Main" type="Node"]
177
+ script = ExtResource("1")
178
+
179
+ [node name="Floor" type="StaticBody3D" parent="."]
180
+ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
181
+
182
+ [node name="Shape" type="CollisionShape3D" parent="Floor"]
183
+ shape = SubResource("FloorShape")
184
+
185
+ [node name="Mesh" type="MeshInstance3D" parent="Floor"]
186
+ mesh = SubResource("FloorMesh")
187
+
188
+ [node name="Sun" type="DirectionalLight3D" parent="."]
189
+ transform = Transform3D(1, 0, 0, 0, 0.5, 0.866, 0, -0.866, 0.5, 0, 10, 0)
190
+ ```
191
+
192
+ ## `client/player_archetype.tres`
193
+
194
+ ```ini
195
+ [gd_resource type="SummerEntityArchetype" load_steps=4 format=3]
196
+
197
+ [ext_resource type="SummerNetworkSchema" path="res://network/player_schema.tres" id="1"]
198
+ [ext_resource type="PackedScene" path="res://client/player_owner.tscn" id="2"]
199
+ [ext_resource type="PackedScene" path="res://client/player_observer.tscn" id="3"]
200
+
201
+ [resource]
202
+ archetype_id = &"player"
203
+ network_schema = ExtResource("1")
204
+ owner_projection_scene = ExtResource("2")
205
+ observer_projection_scene = ExtResource("3")
206
+ ```
207
+
208
+ ## `client/player_observer.tscn`
209
+
210
+ ```ini
211
+ [gd_scene load_steps=2 format=3]
212
+
213
+ [sub_resource type="CapsuleMesh" id="Mesh"]
214
+
215
+ [node name="PlayerObserver" type="Node3D"]
216
+
217
+ [node name="Body" type="MeshInstance3D" parent="."]
218
+ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
219
+ mesh = SubResource("Mesh")
220
+ ```
221
+
222
+ ## `client/player_owner.tscn`
223
+
224
+ ```ini
225
+ [gd_scene load_steps=3 format=3]
226
+
227
+ [sub_resource type="CapsuleShape3D" id="Shape"]
228
+
229
+ [sub_resource type="CapsuleMesh" id="Mesh"]
230
+
231
+ [node name="PlayerOwner" type="CharacterBody3D"]
232
+
233
+ [node name="Shape" type="CollisionShape3D" parent="."]
234
+ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
235
+ shape = SubResource("Shape")
236
+
237
+ [node name="Body" type="MeshInstance3D" parent="."]
238
+ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
239
+ mesh = SubResource("Mesh")
240
+
241
+ [node name="Camera3D" type="Camera3D" parent="."]
242
+ transform = Transform3D(1, 0, 0, 0, 0.8, 0.6, 0, -0.6, 0.8, 0, 6, 8)
243
+ current = true
244
+ ```
245
+
246
+ ## `network/composition.tres`
247
+
248
+ ```ini
249
+ [gd_resource type="SummerNetworkComposition" load_steps=6 format=3]
250
+
251
+ [sub_resource type="SummerNetworkField" id="CommandBytes"]
252
+ field_name = &"b"
253
+ type = 20
254
+
255
+ [sub_resource type="SummerNetworkSchema" id="CommandSchema"]
256
+ schema_id = &"courtyard.cmd.v1"
257
+ state_fields = Array[SummerNetworkField]([SubResource("CommandBytes")])
258
+
259
+ [sub_resource type="SummerNetworkField" id="ResultBytes"]
260
+ field_name = &"b"
261
+ type = 20
262
+
263
+ [sub_resource type="SummerNetworkSchema" id="ResultSchema"]
264
+ schema_id = &"courtyard.cmd.result.v1"
265
+ state_fields = Array[SummerNetworkField]([SubResource("ResultBytes")])
266
+
267
+ [sub_resource type="SummerNetworkOccurrenceStream" id="Commands"]
268
+ stream_id = &"courtyard.cmd"
269
+ command_scope = 2
270
+ command_tick_dispatch = true
271
+ command_timeout_msec = 8000
272
+ payload_schema = SubResource("CommandSchema")
273
+ result_schema = SubResource("ResultSchema")
274
+
275
+ [resource]
276
+ network_version = "1.0.0"
277
+ occurrence_streams = Array[SummerNetworkOccurrenceStream]([SubResource("Commands")])
278
+ ```
279
+
280
+ ## `network/game.gd`
281
+
282
+ ```gdscript
283
+ extends RefCounted
284
+ ## Shared by the client and the authority: ids, streams and shared rules.
285
+
286
+ const GAME_ID := "game_courtyard"
287
+ const QUEUE := &"courtyard"
288
+ const CMD := &"courtyard.cmd"
289
+ const MAX_PLAYERS := 8
290
+ const COMPOSITION := preload("res://network/composition.tres")
291
+
292
+
293
+ ## Adds the World, an Entities root and the Spawner under `parent`. Both sides
294
+ ## pass their own player archetype; the composition is the same file.
295
+ static func build_network(parent: Node, player: SummerEntityArchetype) -> SummerNetworkSpawner:
296
+ var world := SummerNetworkWorld.new()
297
+ world.name = "World"
298
+ parent.add_child(world)
299
+ var entities := Node3D.new()
300
+ entities.name = "Entities"
301
+ parent.add_child(entities)
302
+ var spawner := SummerNetworkSpawner.new()
303
+ spawner.name = "Spawner"
304
+ spawner.network_world_path = NodePath("../World")
305
+ spawner.entities_root_path = NodePath("../Entities")
306
+ spawner.archetypes = [player]
307
+ spawner.player_archetype = &"player" # one entity per joined player
308
+ spawner.network_composition = COMPOSITION
309
+ parent.add_child(spawner)
310
+ return spawner
311
+
312
+
313
+ ## Commands and results travel as JSON bytes: a network String holds at most
314
+ ## 256 bytes.
315
+ static func pack(document: Dictionary) -> Dictionary:
316
+ return {"b": JSON.stringify(document).to_utf8_buffer()}
317
+
318
+
319
+ static func unpack(fields: Dictionary) -> Dictionary:
320
+ var parsed: Variant = JSON.parse_string((fields.get("b", PackedByteArray()) as PackedByteArray).get_string_from_utf8())
321
+ return parsed if parsed is Dictionary else {}
322
+ ```
323
+
324
+ ## `network/player_schema.tres`
325
+
326
+ ```ini
327
+ [gd_resource type="SummerNetworkSchema" format=3]
328
+
329
+ [resource]
330
+ schema_id = &"courtyard.player.v1"
331
+ ```
332
+
333
+ ## `project.godot`
334
+
335
+ ```ini
336
+ config_version=5
337
+
338
+ [application]
339
+
340
+ config/name="Courtyard"
341
+ run/main_scene="res://client/main.tscn"
342
+ run/main_scene.summer_client="res://client/main.tscn"
343
+ run/main_scene.summer_authority="res://authority/main.tscn"
344
+
345
+ [rendering]
346
+
347
+ textures/vram_compression/import_etc2_astc=true
348
+ ```
349
+
350
+ ## `runtime-manifest.json`
351
+
352
+ ```json
353
+ {
354
+ "profile": "headless_engine",
355
+ "entry_point": "authority/main.tscn",
356
+ "export_preset": "Courtyard Authority"
357
+ }
358
+ ```
359
+
360
+ ## `source-domains.json`
361
+
362
+ ```json
363
+ {
364
+ "schema": "summer.source-domain-graph.v1",
365
+ "roots": [
366
+ { "domain": "shared", "paths": ["project.godot", "network", "world.json", "runtime-manifest.json"] },
367
+ { "domain": "client", "paths": ["client"] },
368
+ { "domain": "authority_engine", "paths": ["authority"] }
369
+ ],
370
+ "dependencies": []
371
+ }
372
+ ```
373
+
374
+ ## `summer.build.json`
375
+
376
+ ```json
377
+ {
378
+ "schema": "summer.build.v2",
379
+ "gameId": "game_courtyard",
380
+ "executionMode": "hosted",
381
+ "targetPlatforms": ["ios", "macos"],
382
+ "project": { "directory": "." },
383
+ "server": { "exportPreset": "Courtyard Authority" },
384
+ "runtime": {
385
+ "protocolVersion": "1.0.0",
386
+ "interfaces": {
387
+ "multiplayer": 6, "session": 3, "lobby": 3, "presence": 3,
388
+ "config": 3, "party": 1, "matchSearch": 1
389
+ },
390
+ "scenes": ["res://client/main.tscn"],
391
+ "worldDefinitions": ["world.json"],
392
+ "queues": [
393
+ {
394
+ "name": "courtyard",
395
+ "minPlayers": 2,
396
+ "maxPlayers": 8,
397
+ "worldDefinition": "courtyard",
398
+ "policy": "fifo",
399
+ "transport": "enet"
400
+ }
401
+ ],
402
+ "tickRate": 60,
403
+ "config": { "keys": {} },
404
+ "presence": { "tokens": {} },
405
+ "lobby": { "fields": {} },
406
+ "server": { "tier": "small" }
407
+ }
408
+ }
409
+ ```
410
+
411
+ ## `world.json`
412
+
413
+ ```json
414
+ {
415
+ "schema": "summer.world-definition.v1",
416
+ "definition_id": "courtyard",
417
+ "lifetime": "match_scoped",
418
+ "topology": "dedicated",
419
+ "client_entry_point": "res://client/main.tscn",
420
+ "components": [
421
+ {
422
+ "component_id": "match",
423
+ "profile": "headless_engine",
424
+ "runtime_descriptor": "runtime-manifest.json",
425
+ "entry_point": "authority/main.tscn",
426
+ "owns": ["match"]
427
+ }
428
+ ],
429
+ "source_graph": "source-domains.json",
430
+ "network_compositions": ["res://network/composition.tres"],
431
+ "services": { "required": [], "optional": [] },
432
+ "settlement": { "mode": "required", "version": 1 },
433
+ "persistence": {
434
+ "mode": "none",
435
+ "recovery_point_seconds": 0,
436
+ "snapshot_schemas": [],
437
+ "migration_ids": []
438
+ },
439
+ "lifecycle": {
440
+ "reconnect_seconds": 30,
441
+ "drain_seconds": 5,
442
+ "transfer": "disabled",
443
+ "completion_owner": "world"
444
+ },
445
+ "placement": { "region_policy": "nearest" },
446
+ "limits_profile": "default"
447
+ }
448
+ ```
@@ -0,0 +1,36 @@
1
+ id: skill/multiplayer-project
2
+ kind: skill
3
+ version: 1.0.0
4
+ summary: "Set up a Summer multiplayer project: both entry scenes, World and queue files, joining, and a first Local Play run."
5
+ use_when:
6
+ - "making a Summer game playable online or co-op: the first multiplayer setup"
7
+ - "adding multiplayer to a Summer game: the client and authority scenes, summer.build.json, world.json and joining a queue"
8
+ - "a Summer multiplayer project has no summer.build.json or world.json yet, or Local Play cannot find the World"
9
+ - "laying out a multiplayer project in client/, authority/ and network/ folders"
10
+ facets:
11
+ lifecycle:
12
+ - build
13
+ domains:
14
+ - multiplayer
15
+ - project
16
+ - scripting
17
+ modalities:
18
+ - scripts
19
+ - scenes
20
+ - project
21
+ compatibility:
22
+ engine: ">=4.6"
23
+ related:
24
+ skills:
25
+ - skill/multiplayer
26
+ - skill/multiplayer-movement
27
+ - skill/multiplayer-state
28
+ - skill/multiplayer-testing
29
+ - skill/multiplayer-publish
30
+ - skill/summer-matchmaking
31
+ - skill/summer-parties
32
+ - skill/summer-world-saves
33
+ source: official
34
+ license: MIT
35
+ status: stable
36
+ recommended: false