summer-engine 3.1.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 (366) 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 +102 -0
  8. package/README.md +18 -3
  9. package/assets/audit/scene_audit.gd +4136 -0
  10. package/assets/seeing/seeing_probe.gd +1873 -0
  11. package/dist/cli/commands/skills.js +20 -2
  12. package/dist/core/api-client.d.ts +9 -1
  13. package/dist/core/api-client.js +21 -4
  14. package/dist/core/capabilities/agent-playbook.js +46 -0
  15. package/dist/core/capabilities/audit/accept.d.ts +55 -0
  16. package/dist/core/capabilities/audit/accept.js +147 -0
  17. package/dist/core/capabilities/audit/args.d.ts +95 -0
  18. package/dist/core/capabilities/audit/args.js +89 -0
  19. package/dist/core/capabilities/audit/audit.d.ts +56 -0
  20. package/dist/core/capabilities/audit/audit.js +287 -0
  21. package/dist/core/capabilities/audit/frame.d.ts +14 -0
  22. package/dist/core/capabilities/audit/frame.js +35 -0
  23. package/dist/core/capabilities/audit/gaps.d.ts +96 -0
  24. package/dist/core/capabilities/audit/gaps.js +257 -0
  25. package/dist/core/capabilities/audit/judge.d.ts +162 -0
  26. package/dist/core/capabilities/audit/judge.js +1134 -0
  27. package/dist/core/capabilities/audit/math.d.ts +110 -0
  28. package/dist/core/capabilities/audit/math.js +263 -0
  29. package/dist/core/capabilities/audit/summary.d.ts +74 -0
  30. package/dist/core/capabilities/audit/summary.js +212 -0
  31. package/dist/core/capabilities/board.d.ts +31 -0
  32. package/dist/core/capabilities/board.js +43 -0
  33. package/dist/core/capabilities/camera-view.d.ts +4 -2
  34. package/dist/core/capabilities/camera-view.js +6 -3
  35. package/dist/core/capabilities/connect-signal.d.ts +85 -0
  36. package/dist/core/capabilities/connect-signal.js +285 -0
  37. package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
  38. package/dist/core/capabilities/engine-fallbacks.js +5 -0
  39. package/dist/core/capabilities/engine-ops.d.ts +5 -1
  40. package/dist/core/capabilities/engine-ops.js +0 -3
  41. package/dist/core/capabilities/engine-receipt.d.ts +12 -0
  42. package/dist/core/capabilities/engine-receipt.js +26 -0
  43. package/dist/core/capabilities/file-read.d.ts +64 -0
  44. package/dist/core/capabilities/file-read.js +325 -0
  45. package/dist/core/capabilities/game-task-plan.js +4 -2
  46. package/dist/core/capabilities/grep.d.ts +60 -0
  47. package/dist/core/capabilities/grep.js +190 -0
  48. package/dist/core/capabilities/inspect-node.d.ts +56 -0
  49. package/dist/core/capabilities/inspect-node.js +225 -0
  50. package/dist/core/capabilities/inspect-resource.d.ts +61 -0
  51. package/dist/core/capabilities/inspect-resource.js +376 -0
  52. package/dist/core/capabilities/math3d.d.ts +28 -0
  53. package/dist/core/capabilities/math3d.js +88 -0
  54. package/dist/core/capabilities/motion-generation.d.ts +62 -0
  55. package/dist/core/capabilities/motion-generation.js +138 -0
  56. package/dist/core/capabilities/placement-batch.d.ts +102 -0
  57. package/dist/core/capabilities/placement-batch.js +483 -0
  58. package/dist/core/capabilities/placement-math.d.ts +70 -0
  59. package/dist/core/capabilities/placement-math.js +209 -0
  60. package/dist/core/capabilities/placement-script.d.ts +42 -0
  61. package/dist/core/capabilities/placement-script.js +1096 -0
  62. package/dist/core/capabilities/placement.d.ts +485 -0
  63. package/dist/core/capabilities/placement.js +1731 -0
  64. package/dist/core/capabilities/project-context.d.ts +33 -2
  65. package/dist/core/capabilities/project-context.js +87 -4
  66. package/dist/core/capabilities/replace-node.d.ts +91 -0
  67. package/dist/core/capabilities/replace-node.js +423 -0
  68. package/dist/core/capabilities/runtime-control.d.ts +18 -2
  69. package/dist/core/capabilities/runtime-control.js +67 -2
  70. package/dist/core/capabilities/scene-batch.d.ts +63 -0
  71. package/dist/core/capabilities/scene-batch.js +394 -0
  72. package/dist/core/capabilities/scene-readback.d.ts +36 -0
  73. package/dist/core/capabilities/scene-readback.js +54 -0
  74. package/dist/core/capabilities/seeing/args.d.ts +348 -0
  75. package/dist/core/capabilities/seeing/args.js +178 -0
  76. package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
  77. package/dist/core/capabilities/seeing/candidates.js +282 -0
  78. package/dist/core/capabilities/seeing/math.d.ts +134 -0
  79. package/dist/core/capabilities/seeing/math.js +269 -0
  80. package/dist/core/capabilities/seeing/probe.d.ts +62 -0
  81. package/dist/core/capabilities/seeing/probe.js +188 -0
  82. package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
  83. package/dist/core/capabilities/seeing/scoring.js +639 -0
  84. package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
  85. package/dist/core/capabilities/seeing/seeing.js +1341 -0
  86. package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
  87. package/dist/core/capabilities/seeing/shot-store.js +204 -0
  88. package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
  89. package/dist/core/capabilities/surface-snap-mesh.js +425 -0
  90. package/dist/core/capabilities/surface-snap.d.ts +77 -0
  91. package/dist/core/capabilities/surface-snap.js +461 -0
  92. package/dist/core/capabilities/tool-dispatch.js +231 -72
  93. package/dist/core/capabilities/tscn.d.ts +85 -0
  94. package/dist/core/capabilities/tscn.js +391 -0
  95. package/dist/core/capabilities/world-snapshot.d.ts +58 -0
  96. package/dist/core/capabilities/world-snapshot.js +150 -0
  97. package/dist/core/capability-skew.d.ts +5 -5
  98. package/dist/core/capability-skew.js +14 -6
  99. package/dist/core/headless/worker-engine-client.d.ts +1 -1
  100. package/dist/core/headless/worker-engine-client.js +2 -2
  101. package/dist/core/library-read.d.ts +37 -5
  102. package/dist/core/library-read.js +264 -33
  103. package/dist/core/library-search.d.ts +2 -2
  104. package/dist/installer/agent-config.js +5 -3
  105. package/dist/installer/agent-table.d.ts +16 -0
  106. package/dist/installer/agent-table.js +52 -17
  107. package/dist/mcp/server.js +9 -3
  108. package/dist/mcp/tools/asset-tools.js +21 -3
  109. package/dist/mcp/tools/audit-tools.d.ts +23 -0
  110. package/dist/mcp/tools/audit-tools.js +60 -0
  111. package/dist/mcp/tools/debug-tools.js +3 -1
  112. package/dist/mcp/tools/file-tools.js +17 -4
  113. package/dist/mcp/tools/generate-tools.js +74 -66
  114. package/dist/mcp/tools/library-tools.js +2 -0
  115. package/dist/mcp/tools/perception-tools.js +6 -19
  116. package/dist/mcp/tools/placement-tools.d.ts +24 -0
  117. package/dist/mcp/tools/placement-tools.js +91 -0
  118. package/dist/mcp/tools/project-tools.js +18 -15
  119. package/dist/mcp/tools/scene-tools.js +71 -83
  120. package/dist/mcp/tools/seeing-tools.d.ts +24 -0
  121. package/dist/mcp/tools/seeing-tools.js +64 -0
  122. package/dist/mcp/tools/spatial-tools.js +17 -9
  123. package/dist/mcp/tools/visual-tools.js +59 -7
  124. package/gemini-extension.json +26 -4
  125. package/integrations/amp/README.md +1 -1
  126. package/integrations/crush/README.md +1 -1
  127. package/integrations/grok-build/README.md +1 -1
  128. package/integrations/hermes/README.md +1 -1
  129. package/integrations/kimi-code/README.md +1 -1
  130. package/integrations/mistral-vibe/README.md +1 -1
  131. package/integrations/opencode/README.md +1 -1
  132. package/integrations/rovo-dev/README.md +1 -1
  133. package/integrations/vscode-copilot/README.md +1 -1
  134. package/integrations/warp/README.md +1 -1
  135. package/integrations/windsurf/README.md +1 -1
  136. package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
  137. package/library/references/mcp-tools-reference/resource.yaml +1 -1
  138. package/library/references/summer-folder/resource.yaml +1 -1
  139. package/library/references/summer-folder/summer-folder.md +1 -1
  140. package/library/skills/3d-lighting/SKILL.md +1 -1
  141. package/library/skills/README.md +36 -14
  142. package/library/skills/adaptive-music/SKILL.md +1 -1
  143. package/library/skills/agent-playtesting/SKILL.md +1 -1
  144. package/library/skills/ai-characters-in-games/SKILL.md +220 -0
  145. package/library/skills/ai-characters-in-games/resource.yaml +30 -0
  146. package/library/skills/ambient-bed/SKILL.md +1 -1
  147. package/library/skills/animated-loop/SKILL.md +1 -1
  148. package/library/skills/animation-tree/SKILL.md +1 -1
  149. package/library/skills/art-direction/SKILL.md +1 -1
  150. package/library/skills/asset-strategy/SKILL.md +2 -1
  151. package/library/skills/asset-strategy/resource.yaml +2 -1
  152. package/library/skills/audio-direction/SKILL.md +1 -1
  153. package/library/skills/auto-fire-targeting/SKILL.md +1 -1
  154. package/library/skills/brainstorm-game/SKILL.md +1 -1
  155. package/library/skills/brainstorming/SKILL.md +1 -1
  156. package/library/skills/browse-templates/SKILL.md +3 -3
  157. package/library/skills/browse-templates/resource.yaml +1 -1
  158. package/library/skills/camera-rigs/SKILL.md +128 -0
  159. package/library/skills/camera-rigs/resource.yaml +29 -0
  160. package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
  161. package/library/skills/character-animation-wiring/SKILL.md +1 -1
  162. package/library/skills/character-model/SKILL.md +1 -1
  163. package/library/skills/character-movement/SKILL.md +326 -0
  164. package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
  165. package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
  166. package/library/skills/character-movement/references/movement-3d.md +136 -0
  167. package/library/skills/character-movement/references/platformer-feel.md +83 -0
  168. package/library/skills/character-movement/resource.yaml +40 -0
  169. package/library/skills/character-portrait/SKILL.md +1 -1
  170. package/library/skills/cinematic-cutscene/SKILL.md +1 -1
  171. package/library/skills/combat-basics/SKILL.md +159 -0
  172. package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
  173. package/library/skills/combat-basics/resource.yaml +34 -0
  174. package/library/skills/concept-art/SKILL.md +1 -1
  175. package/library/skills/create-asset-sheet/SKILL.md +1 -1
  176. package/library/skills/debug/SKILL.md +1 -1
  177. package/library/skills/debugging-game-feel/SKILL.md +1 -1
  178. package/library/skills/design-level/SKILL.md +1 -1
  179. package/library/skills/design-mechanic/SKILL.md +1 -1
  180. package/library/skills/design-npc/SKILL.md +1 -1
  181. package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
  182. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
  183. package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
  184. package/library/skills/environment-kit/SKILL.md +1 -1
  185. package/library/skills/export-and-ship/SKILL.md +1 -1
  186. package/library/skills/fabricating-assets/SKILL.md +1 -1
  187. package/library/skills/facial-and-lipsync/SKILL.md +1 -1
  188. package/library/skills/fps-controller/SKILL.md +9 -7
  189. package/library/skills/fps-controller/resource.yaml +4 -1
  190. package/library/skills/game-feel/SKILL.md +1 -1
  191. package/library/skills/gameskill/SKILL.md +1 -1
  192. package/library/skills/gdscript-patterns/SKILL.md +1 -1
  193. package/library/skills/generate-motion/SKILL.md +9 -9
  194. package/library/skills/generate-motion/resource.yaml +2 -1
  195. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
  196. package/library/skills/headless-scripting/SKILL.md +1 -1
  197. package/library/skills/in-game-purchases/SKILL.md +254 -0
  198. package/library/skills/in-game-purchases/resource.yaml +29 -0
  199. package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
  200. package/library/skills/investigating-bugs/SKILL.md +1 -1
  201. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
  202. package/library/skills/make-game/SKILL.md +25 -3
  203. package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
  204. package/library/skills/make-game/references/2d-platformer.md +117 -0
  205. package/library/skills/make-game/references/2d-rpg-content.md +234 -0
  206. package/library/skills/make-game/references/2d-rpg.md +241 -0
  207. package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
  208. package/library/skills/make-game/references/2d-survivors.md +237 -0
  209. package/library/skills/make-game/references/3d-fps-systems.md +216 -0
  210. package/library/skills/make-game/references/3d-fps.md +177 -0
  211. package/library/skills/make-game/references/3d-horror-systems.md +186 -0
  212. package/library/skills/make-game/references/3d-horror.md +201 -0
  213. package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
  214. package/library/skills/make-game/references/3d-third-person.md +215 -0
  215. package/library/skills/make-game/resource.yaml +6 -1
  216. package/library/skills/multiplayer/SKILL.md +150 -0
  217. package/library/skills/multiplayer/resource.yaml +33 -0
  218. package/library/skills/multiplayer-movement/SKILL.md +510 -0
  219. package/library/skills/multiplayer-movement/files.md +501 -0
  220. package/library/skills/multiplayer-movement/resource.yaml +30 -0
  221. package/library/skills/multiplayer-project/SKILL.md +521 -0
  222. package/library/skills/multiplayer-project/files.md +448 -0
  223. package/library/skills/multiplayer-project/resource.yaml +36 -0
  224. package/library/skills/multiplayer-publish/SKILL.md +229 -0
  225. package/library/skills/multiplayer-publish/export-errors.md +89 -0
  226. package/library/skills/multiplayer-publish/resource.yaml +28 -0
  227. package/library/skills/multiplayer-state/SKILL.md +438 -0
  228. package/library/skills/multiplayer-state/files.md +592 -0
  229. package/library/skills/multiplayer-state/resource.yaml +35 -0
  230. package/library/skills/multiplayer-testing/SKILL.md +236 -0
  231. package/library/skills/multiplayer-testing/resource.yaml +39 -0
  232. package/library/skills/music-track/SKILL.md +1 -1
  233. package/library/skills/navigate-summer/SKILL.md +1 -1
  234. package/library/skills/new-project/SKILL.md +1 -1
  235. package/library/skills/organic-model/SKILL.md +1 -1
  236. package/library/skills/pixel-art/SKILL.md +1 -1
  237. package/library/skills/play/SKILL.md +1 -1
  238. package/library/skills/playtesting-a-feature/SKILL.md +1 -1
  239. package/library/skills/procedural-animation/SKILL.md +2 -2
  240. package/library/skills/procedural-animation/resource.yaml +1 -1
  241. package/library/skills/prop-model/SKILL.md +1 -1
  242. package/library/skills/psx-retro-rendering/SKILL.md +1 -1
  243. package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
  244. package/library/skills/remote-deploy/SKILL.md +1 -1
  245. package/library/skills/retarget/SKILL.md +1 -1
  246. package/library/skills/running-in-the-cloud/SKILL.md +1 -1
  247. package/library/skills/save-load/SKILL.md +156 -0
  248. package/library/skills/save-load/resource.yaml +27 -0
  249. package/library/skills/scene-composition/SKILL.md +1 -1
  250. package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
  251. package/library/skills/scene-scripting/SKILL.md +1 -1
  252. package/library/skills/scene-to-level/SKILL.md +1 -1
  253. package/library/skills/skill-create/SKILL.md +1 -1
  254. package/library/skills/skill-improve/SKILL.md +1 -1
  255. package/library/skills/skill-test/SKILL.md +1 -1
  256. package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
  257. package/library/skills/skybox-panorama/SKILL.md +1 -1
  258. package/library/skills/sound-effect/SKILL.md +1 -1
  259. package/library/skills/spatial-placement/SKILL.md +134 -3
  260. package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
  261. package/library/skills/spatial-placement/resource.yaml +16 -2
  262. package/library/skills/sprite-sheet/SKILL.md +1 -1
  263. package/library/skills/summer-analytics/SKILL.md +147 -0
  264. package/library/skills/summer-analytics/resource.yaml +28 -0
  265. package/library/skills/summer-friends/SKILL.md +226 -0
  266. package/library/skills/summer-friends/resource.yaml +28 -0
  267. package/library/skills/summer-leaderboards/SKILL.md +231 -0
  268. package/library/skills/summer-leaderboards/resource.yaml +30 -0
  269. package/library/skills/summer-match-results/SKILL.md +286 -0
  270. package/library/skills/summer-match-results/resource.yaml +32 -0
  271. package/library/skills/summer-matchmaking/SKILL.md +301 -0
  272. package/library/skills/summer-matchmaking/resource.yaml +32 -0
  273. package/library/skills/summer-parties/SKILL.md +253 -0
  274. package/library/skills/summer-parties/resource.yaml +30 -0
  275. package/library/skills/summer-player-data/SKILL.md +322 -0
  276. package/library/skills/summer-player-data/resource.yaml +30 -0
  277. package/library/skills/summer-store/SKILL.md +271 -0
  278. package/library/skills/summer-store/resource.yaml +29 -0
  279. package/library/skills/summer-world-chat/SKILL.md +195 -0
  280. package/library/skills/summer-world-chat/resource.yaml +30 -0
  281. package/library/skills/summer-world-saves/SKILL.md +284 -0
  282. package/library/skills/summer-world-saves/resource.yaml +29 -0
  283. package/library/skills/text-to-motion/SKILL.md +99 -0
  284. package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
  285. package/library/skills/text-to-motion/resource.yaml +41 -0
  286. package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
  287. package/library/skills/tileable-texture/SKILL.md +1 -1
  288. package/library/skills/trailer-shot/SKILL.md +1 -1
  289. package/library/skills/tune-performance/SKILL.md +1 -1
  290. package/library/skills/ui-basics/SKILL.md +10 -1
  291. package/library/skills/ui-graphics/SKILL.md +1 -1
  292. package/library/skills/use-widget-asset/SKILL.md +1 -1
  293. package/library/skills/using-summer/SKILL.md +2 -2
  294. package/library/skills/using-summer/resource.yaml +2 -2
  295. package/library/skills/vehicle-model/SKILL.md +1 -1
  296. package/library/skills/verification-before-completion/SKILL.md +1 -1
  297. package/library/skills/verifying-scenes/SKILL.md +76 -2
  298. package/library/skills/verifying-scenes/resource.yaml +13 -2
  299. package/library/skills/vfx-dissolve/SKILL.md +1 -1
  300. package/library/skills/vfx-fire/SKILL.md +1 -1
  301. package/library/skills/vfx-hit-spark/SKILL.md +1 -1
  302. package/library/skills/vfx-lightning/SKILL.md +1 -1
  303. package/library/skills/vfx-magic-glow/SKILL.md +1 -1
  304. package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
  305. package/library/skills/vfx-smoke/SKILL.md +1 -1
  306. package/library/skills/vfx-water-ripple/SKILL.md +1 -1
  307. package/library/skills/voice-line/SKILL.md +1 -1
  308. package/library/skills/web-and-touch-input/SKILL.md +38 -0
  309. package/library/skills/web-and-touch-input/resource.yaml +28 -0
  310. package/library/skills/web-compatibility-look/SKILL.md +62 -0
  311. package/library/skills/web-compatibility-look/resource.yaml +30 -0
  312. package/library/skills/world-building-3d/SKILL.md +8 -1
  313. package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
  314. package/library/skills/world-building-3d/resource.yaml +2 -1
  315. package/library/skills/writing-plans/SKILL.md +1 -1
  316. package/library/skills/writing-skills/SKILL.md +1 -1
  317. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
  318. package/library/tools/attach-to-surface/resource.yaml +142 -0
  319. package/library/tools/batch/resource.yaml +9 -3
  320. package/library/tools/connect-ports/resource.yaml +120 -0
  321. package/library/tools/connect-signal/resource.yaml +3 -2
  322. package/library/tools/debug-views/resource.yaml +94 -0
  323. package/library/tools/frame-nodes/resource.yaml +104 -0
  324. package/library/tools/frame-shot/resource.yaml +134 -0
  325. package/library/tools/generate-motion/resource.yaml +44 -9
  326. package/library/tools/get-board/resource.yaml +50 -0
  327. package/library/tools/get-project-context/resource.yaml +13 -2
  328. package/library/tools/grep/resource.yaml +77 -0
  329. package/library/tools/inspect-asset/resource.yaml +71 -0
  330. package/library/tools/inspect-node/resource.yaml +9 -2
  331. package/library/tools/inspect-resource/resource.yaml +16 -5
  332. package/library/tools/instantiate-scene/resource.yaml +27 -2
  333. package/library/tools/measure/resource.yaml +96 -0
  334. package/library/tools/place-adjacent/resource.yaml +113 -0
  335. package/library/tools/play/resource.yaml +15 -2
  336. package/library/tools/raycast/resource.yaml +101 -0
  337. package/library/tools/read-file/resource.yaml +36 -2
  338. package/library/tools/read-library/resource.yaml +2 -2
  339. package/library/tools/repeat-along/resource.yaml +129 -0
  340. package/library/tools/replace-node/resource.yaml +11 -5
  341. package/library/tools/scene-audit/resource.yaml +144 -0
  342. package/library/tools/screenshot/resource.yaml +13 -2
  343. package/library/tools/search-assets/resource.yaml +18 -0
  344. package/library/tools/shot-sheet/resource.yaml +110 -0
  345. package/library/tools/snap-to-surface/resource.yaml +4 -1
  346. package/library/tools/world-snapshot/resource.yaml +24 -3
  347. package/library/tools/zoom/resource.yaml +105 -0
  348. package/package.json +1 -1
  349. package/registry/generated/aliases.json +17 -3
  350. package/registry/generated/counts.json +3 -3
  351. package/registry/generated/gemini-extension.json +26 -4
  352. package/registry/generated/index.json +2154 -469
  353. package/registry/generated/marketplace.claude.json +2 -2
  354. package/registry/generated/plugin.claude.json +27 -5
  355. package/registry/generated/plugin.codex.json +28 -6
  356. package/registry/generated/plugin.cursor.json +27 -5
  357. package/registry/generated/plugin.factory.json +27 -5
  358. package/registry/generated/skills-index.md +36 -14
  359. package/registry/generated/skills-registry.json +421 -124
  360. package/registry/generated/templates-registry.json +2 -2
  361. package/library/skills/host-authoritative-state/SKILL.md +0 -332
  362. package/library/skills/host-authoritative-state/resource.yaml +0 -28
  363. package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
  364. package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
  365. package/library/skills/setup-multiplayer/SKILL.md +0 -336
  366. package/library/skills/setup-multiplayer/resource.yaml +0 -28
@@ -0,0 +1,56 @@
1
+ /**
2
+ * inspect-node — ONE implementation of `summer_inspect_node` for both faces
3
+ * (src/mcp/tools/scene-tools.ts and tool-dispatch.ts).
4
+ *
5
+ * The engine's state:inspector returns every editor-visible property of a
6
+ * node (StateProvider::inspector_state) — about 5 KB to read one transform.
7
+ * `fields` keeps only the named properties (globs allowed) and adds a few
8
+ * derived fields the inspector cannot give:
9
+ * transform local position / rotation_degrees / scale (+ Transform3D
10
+ * literal for 3D nodes);
11
+ * global_transform world origin/basis composed down the ancestor chain from
12
+ * the world snapshot's local pos/rot_deg/scale;
13
+ * scene_file_path the res:// scene the node instances (world snapshot);
14
+ * aabb the node's world AABB (world snapshot);
15
+ * warnings the node's configuration warnings.
16
+ * The world snapshot is read only when one of its fields is asked for.
17
+ */
18
+ import { z } from "zod";
19
+ import { type CapabilityAdvertisingClient } from "../capability-skew.js";
20
+ import { type JsonRecord } from "../util/json.js";
21
+ import { basisFromEulerScale, parseVec3, type Vec3 } from "./math3d.js";
22
+ export { basisFromEulerScale, parseVec3 };
23
+ export declare const INSPECT_NODE_DERIVED_FIELDS: readonly string[];
24
+ export declare const inspectNodeInputShape: {
25
+ path: z.ZodString;
26
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
27
+ };
28
+ export declare const inspectNodeInputSchema: z.ZodObject<{
29
+ path: z.ZodString;
30
+ fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
31
+ }, "strict", z.ZodTypeAny, {
32
+ path: string;
33
+ fields?: string[] | undefined;
34
+ }, {
35
+ path: string;
36
+ fields?: string[] | undefined;
37
+ }>;
38
+ export type InspectNodeArgs = z.infer<typeof inspectNodeInputSchema>;
39
+ export interface InspectNodeClient extends CapabilityAdvertisingClient {
40
+ inspectNode(path: string): Promise<unknown>;
41
+ executeOps(ops: Record<string, unknown>[], options?: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
42
+ }
43
+ export interface SnapshotNode {
44
+ pos?: Vec3;
45
+ rot?: Vec3;
46
+ scale?: Vec3;
47
+ entry: JsonRecord;
48
+ }
49
+ /** World transform of a Node3D: its local transform composed with every
50
+ * Node3D directly above it. A Node3D's parent space ends at the first
51
+ * ancestor that is not a Node3D (a plain Node or a CanvasItem — the snapshot
52
+ * lists CanvasItems only with include_2d), as in Godot. */
53
+ export declare function globalTransform(index: Map<string, SnapshotNode>, path: string): JsonRecord | {
54
+ error: string;
55
+ };
56
+ export declare function inspectNodeFields(client: InspectNodeClient, args: InspectNodeArgs): Promise<unknown>;
@@ -0,0 +1,225 @@
1
+ /**
2
+ * inspect-node — ONE implementation of `summer_inspect_node` for both faces
3
+ * (src/mcp/tools/scene-tools.ts and tool-dispatch.ts).
4
+ *
5
+ * The engine's state:inspector returns every editor-visible property of a
6
+ * node (StateProvider::inspector_state) — about 5 KB to read one transform.
7
+ * `fields` keeps only the named properties (globs allowed) and adds a few
8
+ * derived fields the inspector cannot give:
9
+ * transform local position / rotation_degrees / scale (+ Transform3D
10
+ * literal for 3D nodes);
11
+ * global_transform world origin/basis composed down the ancestor chain from
12
+ * the world snapshot's local pos/rot_deg/scale;
13
+ * scene_file_path the res:// scene the node instances (world snapshot);
14
+ * aabb the node's world AABB (world snapshot);
15
+ * warnings the node's configuration warnings.
16
+ * The world snapshot is read only when one of its fields is asked for.
17
+ */
18
+ import { z } from "zod";
19
+ import { missingEngineOpResult } from "../capability-skew.js";
20
+ import { asRecord } from "../util/json.js";
21
+ import { annotateVariantTypes } from "./variant-types.js";
22
+ import { extractOpError } from "./engine-receipt.js";
23
+ import { WORLD_SNAPSHOT_FALLBACK } from "./engine-fallbacks.js";
24
+ import { normalizeNodePath, parentNodePath } from "./tscn.js";
25
+ import { applyMat3 as apply, basisFromEulerScale, IDENTITY3, mulMat3 as mul, parseVec3, transformLiteral, vec3Literal, } from "./math3d.js";
26
+ export { basisFromEulerScale, parseVec3 };
27
+ export const INSPECT_NODE_DERIVED_FIELDS = [
28
+ "transform",
29
+ "global_transform",
30
+ "scene_file_path",
31
+ "aabb",
32
+ "warnings",
33
+ ];
34
+ const SNAPSHOT_FIELDS = new Set(["global_transform", "scene_file_path", "aabb"]);
35
+ // Mirrors library/tools/inspect-node/resource.yaml input_schema (parity-tested).
36
+ export const inspectNodeInputShape = {
37
+ path: z.string().describe("Node path from scene tree, e.g. 'Player', 'World/Enemies/Boss', 'DirectionalLight3D'"),
38
+ fields: z
39
+ .array(z.string())
40
+ .max(48)
41
+ .optional()
42
+ .describe("Only these fields: property names or globs (e.g. 'position', 'surface_material_override/*') and the derived fields transform, global_transform, scene_file_path, aabb, warnings. Omit for every property."),
43
+ };
44
+ export const inspectNodeInputSchema = z.object(inspectNodeInputShape).strict();
45
+ // ---------------------------------------------------------------------------
46
+ function propsOf(payload) {
47
+ const data = asRecord(asRecord(payload)?.data);
48
+ const props = data?.props;
49
+ return Array.isArray(props) ? props.filter((p) => asRecord(p)) : [];
50
+ }
51
+ function globMatcher(pattern) {
52
+ if (!/[*?]/.test(pattern))
53
+ return (name) => name === pattern;
54
+ const regex = new RegExp(`^${pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".")}$`);
55
+ return (name) => regex.test(name);
56
+ }
57
+ function localTransformFromProps(props) {
58
+ const value = (name) => props.find((p) => p.name === name)?.value;
59
+ const position = parseVec3(value("position"));
60
+ const rotation = parseVec3(value("rotation"));
61
+ const scale = parseVec3(value("scale"));
62
+ if (position && rotation && scale) {
63
+ const rotDeg = rotation.map((r) => (r * 180) / Math.PI);
64
+ const out = {
65
+ position: vec3Literal(position),
66
+ rotation_degrees: vec3Literal(rotDeg),
67
+ scale: vec3Literal(scale),
68
+ source: "inspector (rotation read in radians at 3 decimals)",
69
+ };
70
+ const order = value("rotation_order");
71
+ if (order === undefined || order === 2)
72
+ out.transform = transformLiteral(basisFromEulerScale(rotDeg, scale), position);
73
+ else
74
+ out.rotation_order = order;
75
+ return out;
76
+ }
77
+ // 2D / Control: report what the inspector has.
78
+ const out = {};
79
+ for (const name of ["position", "rotation", "scale", "skew", "size"]) {
80
+ const v = value(name);
81
+ if (v !== undefined)
82
+ out[name] = v;
83
+ }
84
+ return Object.keys(out).length > 0 ? { ...out, source: "inspector" } : null;
85
+ }
86
+ async function snapshotIndex(client) {
87
+ const missing = missingEngineOpResult(client, "GetWorldSnapshot", WORLD_SNAPSHOT_FALLBACK);
88
+ if (missing)
89
+ return { error: missing.error };
90
+ let result;
91
+ try {
92
+ result = await client.executeOps([{ op: "GetWorldSnapshot" }]);
93
+ }
94
+ catch (err) {
95
+ return { error: err instanceof Error ? err.message : String(err) };
96
+ }
97
+ const failure = extractOpError(result);
98
+ if (failure)
99
+ return { error: failure };
100
+ const root = asRecord(result);
101
+ const payload = Array.isArray(root?.nodes)
102
+ ? root
103
+ : asRecord((Array.isArray(root?.results) ? root.results : []).find((r) => asRecord(r)?.op === "GetWorldSnapshot"));
104
+ const nodes = Array.isArray(payload?.nodes) ? payload.nodes : null;
105
+ if (!nodes)
106
+ return { error: "the world snapshot returned no node list" };
107
+ const index = new Map();
108
+ for (const raw of nodes) {
109
+ const entry = asRecord(raw);
110
+ if (!entry || typeof entry.path !== "string")
111
+ continue;
112
+ index.set(normalizeNodePath(entry.path), {
113
+ pos: parseVec3(entry.pos) ?? undefined,
114
+ rot: parseVec3(entry.rot_deg) ?? undefined,
115
+ scale: parseVec3(entry.scale) ?? undefined,
116
+ entry,
117
+ });
118
+ }
119
+ return index;
120
+ }
121
+ function hasTransform(node) {
122
+ return !!node && !!node.pos && !!node.rot && !!node.scale;
123
+ }
124
+ /** World transform of a Node3D: its local transform composed with every
125
+ * Node3D directly above it. A Node3D's parent space ends at the first
126
+ * ancestor that is not a Node3D (a plain Node or a CanvasItem — the snapshot
127
+ * lists CanvasItems only with include_2d), as in Godot. */
128
+ export function globalTransform(index, path) {
129
+ const target = index.get(path);
130
+ if (!target)
131
+ return { error: `the world snapshot does not list ${path} (a 2D node, or the scene is larger than the snapshot cap)` };
132
+ if (!hasTransform(target))
133
+ return { error: `${path} is not a 3D node` };
134
+ const chain = [target];
135
+ for (let p = parentNodePath(path); p !== null; p = parentNodePath(p)) {
136
+ const node = index.get(p);
137
+ if (!hasTransform(node))
138
+ break;
139
+ chain.unshift(node);
140
+ }
141
+ let basis = IDENTITY3;
142
+ let origin = [0, 0, 0];
143
+ for (const node of chain) {
144
+ const local = basisFromEulerScale(node.rot, node.scale);
145
+ const moved = apply(basis, node.pos);
146
+ origin = [moved[0] + origin[0], moved[1] + origin[1], moved[2] + origin[2]];
147
+ basis = mul(basis, local);
148
+ }
149
+ return {
150
+ origin: vec3Literal(origin),
151
+ transform: transformLiteral(basis, origin),
152
+ source: "composed from the world snapshot's local pos/rot_deg/scale down the parent chain (YXZ Euler; top_level nodes not detected)",
153
+ };
154
+ }
155
+ export async function inspectNodeFields(client, args) {
156
+ const payload = annotateVariantTypes(await client.inspectNode(args.path));
157
+ if (!args.fields || args.fields.length === 0)
158
+ return payload;
159
+ if (extractOpError(payload))
160
+ return payload;
161
+ const root = asRecord(payload);
162
+ const data = asRecord(root?.data);
163
+ if (!root || !data)
164
+ return payload;
165
+ const props = propsOf(payload);
166
+ const requested = args.fields;
167
+ const derived = requested.filter((f) => INSPECT_NODE_DERIVED_FIELDS.includes(f));
168
+ const propPatterns = requested.filter((f) => !INSPECT_NODE_DERIVED_FIELDS.includes(f)).map(globMatcher);
169
+ const keptProps = props.filter((p) => propPatterns.some((match) => match(String(p.name ?? ""))));
170
+ const missing = requested
171
+ .filter((f) => !INSPECT_NODE_DERIVED_FIELDS.includes(f))
172
+ .filter((f) => !props.some((p) => globMatcher(f)(String(p.name ?? ""))));
173
+ const out = {
174
+ node_path: data.node_path,
175
+ node_type: data.node_type,
176
+ node_name: data.node_name,
177
+ ...(keptProps.length > 0 ? { props: keptProps } : {}),
178
+ };
179
+ const unavailable = {};
180
+ if (derived.includes("transform")) {
181
+ const local = localTransformFromProps(props);
182
+ if (local)
183
+ out.transform = local;
184
+ else
185
+ unavailable.transform = "this node has no position/rotation/scale (not a Node3D, Node2D or Control)";
186
+ }
187
+ if (derived.includes("warnings"))
188
+ out.warnings = Array.isArray(data.warnings) ? data.warnings : [];
189
+ if (derived.some((f) => SNAPSHOT_FIELDS.has(f))) {
190
+ const nodePath = normalizeNodePath(String(data.node_path ?? args.path));
191
+ const index = await snapshotIndex(client);
192
+ if (!(index instanceof Map)) {
193
+ for (const f of derived.filter((d) => SNAPSHOT_FIELDS.has(d)))
194
+ unavailable[f] = `world snapshot unavailable: ${index.error}`;
195
+ }
196
+ else {
197
+ const map = index;
198
+ const node = map.get(nodePath);
199
+ if (derived.includes("scene_file_path")) {
200
+ if (node)
201
+ out.scene_file_path = typeof node.entry.scene_file === "string" ? node.entry.scene_file : null;
202
+ else
203
+ unavailable.scene_file_path = `the world snapshot does not list ${nodePath}`;
204
+ }
205
+ if (derived.includes("aabb")) {
206
+ if (node?.entry.aabb)
207
+ out.aabb = node.entry.aabb;
208
+ else
209
+ unavailable.aabb = node ? "the node has no visual bounds" : `the world snapshot does not list ${nodePath}`;
210
+ }
211
+ if (derived.includes("global_transform")) {
212
+ const global = globalTransform(map, nodePath);
213
+ if ("error" in global && typeof global.error === "string")
214
+ unavailable.global_transform = global.error;
215
+ else
216
+ out.global_transform = global;
217
+ }
218
+ }
219
+ }
220
+ if (missing.length > 0)
221
+ out.missing_fields = missing;
222
+ if (Object.keys(unavailable).length > 0)
223
+ out.unavailable = unavailable;
224
+ return { ...root, data: out };
225
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * inspect-resource — ONE implementation of `summer_inspect_resource` for both
3
+ * faces (src/mcp/tools/scene-tools.ts and tool-dispatch.ts).
4
+ *
5
+ * The engine's state:resource (StateProvider::resource_properties_state)
6
+ * reads a resource a NODE holds: it takes nodePath + property and answers
7
+ * "missing nodePath or property" to anything else. The tool used to send it
8
+ * only `path`, so every call failed, on a mesh .res or a .glb alike. Two forms
9
+ * now:
10
+ *
11
+ * path a resource FILE, loaded in the editor by a read-only
12
+ * RunSceneScript probe (undo none, no checkpoint; the
13
+ * path travels as base64 data, never as source):
14
+ * Mesh AABB, surfaces (primitive, vertex and
15
+ * index counts, attributes, triangles,
16
+ * material), materials, blend shapes
17
+ * PackedScene node count, the first nodes with their
18
+ * types, instanced scenes and meshes, and
19
+ * a pointer to summer_inspect_asset
20
+ * Texture2D size
21
+ * every other editor properties that differ from the
22
+ * class default (defaults are counted)
23
+ * nodePath+property the engine endpoint, for a resource a node of the
24
+ * active scene holds (e.g. Floor + mesh).
25
+ */
26
+ import { z } from "zod";
27
+ import { type CapabilityAdvertisingClient } from "../capability-skew.js";
28
+ import { type JsonRecord } from "../util/json.js";
29
+ export declare const INSPECT_RESOURCE_ARGS_TOKEN = "__SUMMER_RESOURCE_ARGS__";
30
+ export declare const INSPECT_RESOURCE_FALLBACK = "read a text resource (.tres/.tscn) with summer_read_file, or pass nodePath + property for a resource a node of the open scene holds";
31
+ export declare const inspectResourceInputShape: {
32
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
33
+ nodePath: z.ZodOptional<z.ZodString>;
34
+ property: z.ZodOptional<z.ZodString>;
35
+ };
36
+ export declare const inspectResourceInputSchema: z.ZodObject<{
37
+ path: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
38
+ nodePath: z.ZodOptional<z.ZodString>;
39
+ property: z.ZodOptional<z.ZodString>;
40
+ }, "strict", z.ZodTypeAny, {
41
+ path?: string | undefined;
42
+ nodePath?: string | undefined;
43
+ property?: string | undefined;
44
+ }, {
45
+ path?: string | undefined;
46
+ nodePath?: string | undefined;
47
+ property?: string | undefined;
48
+ }>;
49
+ export type InspectResourceArgs = z.output<typeof inspectResourceInputSchema>;
50
+ export interface InspectResourceClient extends CapabilityAdvertisingClient {
51
+ executeIdentityBoundOps(ops: Record<string, unknown>[], options?: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
52
+ inspectNodeResource(nodePath: string, property: string): Promise<unknown>;
53
+ }
54
+ export declare function inspectResource(client: InspectResourceClient, args: InspectResourceArgs): Promise<unknown>;
55
+ /** Load a resource file read-only in the editor and describe it compactly. */
56
+ export declare function inspectResourceFile(client: InspectResourceClient, path: string): Promise<JsonRecord>;
57
+ export declare function buildInspectResourceScript(args: {
58
+ path: string;
59
+ }): string;
60
+ /** The probe source with its placeholder, for tests. */
61
+ export declare function inspectResourceProbeTemplate(): string;