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,52 @@
1
+ export declare const SHOTS_DIR: string;
2
+ export declare const SAVED_SUBDIR = "saved";
3
+ export declare const SHOT_MAX_EDGE = 1024;
4
+ export declare const SHOTS_MAX_TOTAL_BYTES: number;
5
+ /** Same grammar as camera bookmark names (preview_ops.cpp). */
6
+ export declare const SHOT_NAME_PATTERN: RegExp;
7
+ export declare class ShotStoreError extends Error {
8
+ readonly reason: "bad_name" | "not_jpeg" | "too_large" | "over_cap" | "unsafe_path" | "no_project";
9
+ constructor(reason: "bad_name" | "not_jpeg" | "too_large" | "over_cap" | "unsafe_path" | "no_project", message: string);
10
+ }
11
+ export interface ShotWrite {
12
+ path: string;
13
+ /** res:// form of the written file. */
14
+ resPath: string;
15
+ bytes: number;
16
+ width: number;
17
+ height: number;
18
+ replaced: boolean;
19
+ evicted: string[];
20
+ }
21
+ export interface ShotFile {
22
+ path: string;
23
+ bytes: number;
24
+ mtimeMs: number;
25
+ }
26
+ export interface ShotStoreOptions {
27
+ maxTotalBytes?: number;
28
+ maxEdge?: number;
29
+ }
30
+ export declare class ShotStore {
31
+ readonly root: string;
32
+ private readonly projectRoot;
33
+ private readonly maxTotalBytes;
34
+ private readonly maxEdge;
35
+ constructor(projectRoot: string, options?: ShotStoreOptions);
36
+ static forProject(projectRoot: string | undefined, options?: ShotStoreOptions): ShotStore;
37
+ slotPath(bookmark: string): string;
38
+ savedPath(name: string): string;
39
+ resPath(path: string): string;
40
+ readSlot(bookmark: string): Promise<ShotFile | null>;
41
+ writeSlot(bookmark: string, jpeg: Uint8Array): Promise<ShotWrite>;
42
+ saveCopy(name: string, jpeg: Uint8Array): Promise<ShotWrite>;
43
+ /** Every file under the folder, oldest first. */
44
+ list(): Promise<ShotFile[]>;
45
+ private write;
46
+ /** Throws unless `path` resolves strictly inside the shots folder. */
47
+ private inside;
48
+ /** Refuse a symlink anywhere from the project's .summer folder down to `path`. */
49
+ private refuseSymlinks;
50
+ }
51
+ /** Read a stored shot (for compare_previous). */
52
+ export declare function readShot(path: string): Promise<Buffer>;
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Bounded image storage for the seeing tools: res://.summer/shots/.
3
+ *
4
+ * Inline images are the product; disk is a strictly bounded side channel.
5
+ * - Nothing is written unless a bookmark was rendered (its one before/after
6
+ * slot) or the caller passed save_to (one named copy).
7
+ * - One slot per bookmark: .summer/shots/<bookmark>.jpg, overwritten by the
8
+ * next render of that bookmark. Named copies: .summer/shots/saved/<name>.jpg.
9
+ * - JPEG only, longest edge <= SHOT_MAX_EDGE, and the folder never holds more
10
+ * than SHOTS_MAX_TOTAL_BYTES: the oldest files are evicted first.
11
+ * - Writes never leave the folder: names are validated, the resolved path is
12
+ * checked against the folder, and symlinks are refused at every level.
13
+ * Every file here is safe to delete at any time (a dot folder: not imported,
14
+ * synced or exported).
15
+ */
16
+ import { lstat, mkdir, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
17
+ import { existsSync } from "node:fs";
18
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
19
+ import { randomBytes } from "node:crypto";
20
+ import { analyzeJpegFrame } from "../frame-quality.js";
21
+ export const SHOTS_DIR = join(".summer", "shots");
22
+ export const SAVED_SUBDIR = "saved";
23
+ export const SHOT_MAX_EDGE = 1024;
24
+ export const SHOTS_MAX_TOTAL_BYTES = 20 * 1024 * 1024;
25
+ /** Same grammar as camera bookmark names (preview_ops.cpp). */
26
+ export const SHOT_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
27
+ export class ShotStoreError extends Error {
28
+ reason;
29
+ constructor(reason, message) {
30
+ super(message);
31
+ this.reason = reason;
32
+ this.name = "ShotStoreError";
33
+ }
34
+ }
35
+ export class ShotStore {
36
+ root;
37
+ projectRoot;
38
+ maxTotalBytes;
39
+ maxEdge;
40
+ constructor(projectRoot, options = {}) {
41
+ if (!projectRoot || !isAbsolute(projectRoot)) {
42
+ throw new ShotStoreError("no_project", "The project root is not an absolute local path; shots are unavailable.");
43
+ }
44
+ this.projectRoot = resolve(projectRoot);
45
+ this.root = join(this.projectRoot, SHOTS_DIR);
46
+ this.maxTotalBytes = options.maxTotalBytes ?? SHOTS_MAX_TOTAL_BYTES;
47
+ this.maxEdge = options.maxEdge ?? SHOT_MAX_EDGE;
48
+ }
49
+ static forProject(projectRoot, options) {
50
+ if (!projectRoot || !existsSync(join(projectRoot, "project.godot"))) {
51
+ throw new ShotStoreError("no_project", "The bound project is not on this machine (no project.godot at the engine's project path), so before/after shots cannot be kept.");
52
+ }
53
+ return new ShotStore(projectRoot, options);
54
+ }
55
+ slotPath(bookmark) {
56
+ return this.inside(join(this.root, `${checkName(bookmark, "bookmark name")}.jpg`));
57
+ }
58
+ savedPath(name) {
59
+ return this.inside(join(this.root, SAVED_SUBDIR, `${checkName(name, "save_to")}.jpg`));
60
+ }
61
+ resPath(path) {
62
+ return `res://${relative(this.projectRoot, path).split(sep).join("/")}`;
63
+ }
64
+ async readSlot(bookmark) {
65
+ const path = this.slotPath(bookmark);
66
+ await this.refuseSymlinks(path);
67
+ try {
68
+ const info = await lstat(path);
69
+ if (!info.isFile())
70
+ return null;
71
+ return { path, bytes: info.size, mtimeMs: info.mtimeMs };
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ async writeSlot(bookmark, jpeg) {
78
+ return this.write(this.slotPath(bookmark), jpeg);
79
+ }
80
+ async saveCopy(name, jpeg) {
81
+ return this.write(this.savedPath(name), jpeg);
82
+ }
83
+ /** Every file under the folder, oldest first. */
84
+ async list() {
85
+ const out = [];
86
+ const walk = async (dir) => {
87
+ let names;
88
+ try {
89
+ names = await readdir(dir);
90
+ }
91
+ catch {
92
+ return;
93
+ }
94
+ for (const name of names) {
95
+ const full = join(dir, name);
96
+ let info;
97
+ try {
98
+ info = await lstat(full);
99
+ }
100
+ catch {
101
+ continue;
102
+ }
103
+ if (info.isSymbolicLink())
104
+ continue;
105
+ if (info.isDirectory())
106
+ await walk(full);
107
+ else if (info.isFile())
108
+ out.push({ path: full, bytes: info.size, mtimeMs: info.mtimeMs });
109
+ }
110
+ };
111
+ await walk(this.root);
112
+ return out.sort((a, b) => a.mtimeMs - b.mtimeMs || a.path.localeCompare(b.path));
113
+ }
114
+ async write(target, jpeg) {
115
+ const info = analyzeJpegFrame(jpeg);
116
+ if (jpeg.length < 4 || jpeg[0] !== 0xff || jpeg[1] !== 0xd8 || !info.width || !info.height) {
117
+ throw new ShotStoreError("not_jpeg", "Only baseline JPEG images are stored under .summer/shots/.");
118
+ }
119
+ if (Math.max(info.width, info.height) > this.maxEdge) {
120
+ throw new ShotStoreError("too_large", `Image is ${info.width}x${info.height}; stored shots are at most ${this.maxEdge} px on the longest edge.`);
121
+ }
122
+ if (jpeg.length > this.maxTotalBytes) {
123
+ throw new ShotStoreError("over_cap", `Image is ${jpeg.length} bytes, more than the whole ${this.maxTotalBytes}-byte shots budget.`);
124
+ }
125
+ await this.refuseSymlinks(target);
126
+ await mkdir(join(target, ".."), { recursive: true });
127
+ await this.refuseSymlinks(target);
128
+ let replaced = false;
129
+ try {
130
+ replaced = (await lstat(target)).isFile();
131
+ }
132
+ catch {
133
+ // new file
134
+ }
135
+ // The file being replaced does not count: it is overwritten, not kept.
136
+ const evicted = [];
137
+ const files = (await this.list()).filter((f) => f.path !== target);
138
+ let total = files.reduce((sum, f) => sum + f.bytes, 0);
139
+ for (const file of files) {
140
+ if (total + jpeg.length <= this.maxTotalBytes)
141
+ break;
142
+ await rm(this.inside(file.path), { force: true });
143
+ total -= file.bytes;
144
+ evicted.push(this.resPath(file.path));
145
+ }
146
+ const tmp = this.inside(join(this.root, `.tmp-${randomBytes(6).toString("hex")}.jpg`));
147
+ await writeFile(tmp, jpeg, { mode: 0o644 });
148
+ try {
149
+ await rename(tmp, target);
150
+ }
151
+ catch (err) {
152
+ await rm(tmp, { force: true });
153
+ throw err;
154
+ }
155
+ return {
156
+ path: target,
157
+ resPath: this.resPath(target),
158
+ bytes: jpeg.length,
159
+ width: info.width,
160
+ height: info.height,
161
+ replaced,
162
+ evicted,
163
+ };
164
+ }
165
+ /** Throws unless `path` resolves strictly inside the shots folder. */
166
+ inside(path) {
167
+ const full = resolve(path);
168
+ const rel = relative(this.root, full);
169
+ if (!rel || rel.startsWith("..") || isAbsolute(rel) || rel.split(sep).includes("..")) {
170
+ throw new ShotStoreError("unsafe_path", `Refusing to touch ${full}: outside ${this.root}.`);
171
+ }
172
+ return full;
173
+ }
174
+ /** Refuse a symlink anywhere from the project's .summer folder down to `path`. */
175
+ async refuseSymlinks(path) {
176
+ const rel = relative(this.projectRoot, path).split(sep);
177
+ let cur = this.projectRoot;
178
+ for (const part of rel) {
179
+ cur = join(cur, part);
180
+ try {
181
+ const info = await lstat(cur);
182
+ if (info.isSymbolicLink()) {
183
+ throw new ShotStoreError("unsafe_path", `Refusing to write through the symlink ${cur}.`);
184
+ }
185
+ }
186
+ catch (err) {
187
+ if (err instanceof ShotStoreError)
188
+ throw err;
189
+ return; // the rest does not exist yet
190
+ }
191
+ }
192
+ }
193
+ }
194
+ function checkName(name, label) {
195
+ if (typeof name !== "string" || !SHOT_NAME_PATTERN.test(name)) {
196
+ throw new ShotStoreError("bad_name", `${label} must be 1-64 characters from A-Z a-z 0-9 _ - (got ${JSON.stringify(String(name)).slice(0, 80)}).`);
197
+ }
198
+ return name;
199
+ }
200
+ /** Read a stored shot (for compare_previous). */
201
+ export async function readShot(path) {
202
+ await stat(path);
203
+ return readFile(path);
204
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * surface-snap-mesh — the visible-mesh measurement behind
3
+ * `summer_snap_to_surface` when colliders cannot answer.
4
+ *
5
+ * The engine's SnapToSurface sweeps the subject's colliders against body
6
+ * colliders. When the subject or the support has no collider it falls back to
7
+ * visual_aabb: the subject's visible AABB swept against the AABB of every
8
+ * other visible geometry in the scene. One large AABB anywhere around the
9
+ * subject (a tree, a building block, a full-screen post quad whose mesh
10
+ * carries a huge custom AABB) then counts as an overlap that no back-off
11
+ * clears: collider-less ferns on a ground PlaneMesh all failed with
12
+ * overlap_recovery_exceeded, "starts in contact with or inside (unnamed)".
13
+ *
14
+ * This probe measures the same move from triangles instead. It is one
15
+ * read-only GDScript sent through RunSceneScript (undo "none", no
16
+ * checkpoint), with its arguments as base64 data, never source:
17
+ *
18
+ * - the subject's visible mesh triangles in scene space; its vertices are
19
+ * cast along the direction, each from the subject's top plane (the
20
+ * subject's extreme against the direction) above it, onto the
21
+ * triangles of every other visible mesh whose bounds meet the swept
22
+ * column. A surface between that plane and the vertex means the subject
23
+ * is sunk into it (negative travel);
24
+ * - the support's vertices inside the subject's footprint are cast back
25
+ * against the subject's triangles, for support peaks between subject
26
+ * vertices;
27
+ * - travel = the smallest of those distances; the new local position is
28
+ * the current one plus (travel - gap) along the direction, mapped
29
+ * through the parent's transform.
30
+ *
31
+ * Meshes whose shader writes POSITION (screen-space quads) and non-mesh
32
+ * geometry (CSG, MultiMesh, sprites) are skipped and counted. It reads the
33
+ * scene only; the mutation is an ordinary SetProp + SaveScene sent by
34
+ * surface-snap.ts.
35
+ */
36
+ import { type CapabilityAdvertisingClient } from "../capability-skew.js";
37
+ import { type JsonRecord } from "../util/json.js";
38
+ export declare const SNAP_MESH_ARGS_TOKEN = "__SUMMER_SNAP_MESH_ARGS__";
39
+ export interface SnapMeshProbeArgs {
40
+ scenePath: string;
41
+ subjectPath: string;
42
+ direction: [number, number, number];
43
+ maxDistance: number;
44
+ gap: number;
45
+ }
46
+ export interface MeshSnapMeasure {
47
+ ok: true;
48
+ /** A support was found within maxDistance. */
49
+ found: boolean;
50
+ /** Distance the subject can move along the direction before its visible
51
+ * triangles touch the support's (negative: it is sunk that deep). */
52
+ travel?: number;
53
+ /** travel - gap: the move along the direction. */
54
+ shift?: number;
55
+ support?: string;
56
+ support_has_collider?: boolean;
57
+ subject_colliders?: number;
58
+ hit_point?: [number, number, number];
59
+ hit_normal?: [number, number, number];
60
+ /** Which cast found the contact: a subject vertex onto the support, or a support vertex onto the subject. */
61
+ contact_from?: "subject_vertex" | "support_vertex";
62
+ /** The subject's extent along the direction. */
63
+ extent?: number;
64
+ /** Godot literals of the subject's local position now and after the move. */
65
+ position?: string;
66
+ position_after?: string;
67
+ origin_before?: [number, number, number];
68
+ origin_after?: [number, number, number];
69
+ samples?: number;
70
+ subject_vertices?: number;
71
+ support_meshes?: number;
72
+ support_triangles?: number;
73
+ reverse_partial?: boolean;
74
+ skipped?: JsonRecord;
75
+ }
76
+ export interface MeshSnapFailure {
77
+ ok: false;
78
+ failure_reason: string;
79
+ error: string;
80
+ }
81
+ export interface SnapMeshClient extends CapabilityAdvertisingClient {
82
+ executeIdentityBoundOps(ops: Record<string, unknown>[], options?: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
83
+ }
84
+ /** Measure the visible-mesh snap from the subject's current pose. */
85
+ export declare function measureMeshSnap(client: SnapMeshClient, args: SnapMeshProbeArgs): Promise<MeshSnapMeasure | MeshSnapFailure>;
86
+ export declare function buildSnapMeshScript(args: Record<string, unknown>): string;
87
+ /** The probe source with its placeholder, for tests. */
88
+ export declare function snapMeshProbeTemplate(): string;