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,142 @@
1
+ id: tool/attach-to-surface
2
+ kind: tool
3
+ version: 1.0.0
4
+ summary: Mount a piece on a wall, ceiling or floor — turn its measured back into the surface found by a ray, keep it upright, seat it at a standoff. Saves the scene.
5
+ use_when:
6
+ - mounting a downpipe, gutter, lamp, AC unit, sign or fire escape on a facade
7
+ - turning a piece so its back faces a wall instead of guessing its rotation
8
+ - seating a piece against a surface at an exact standoff
9
+ do_not_use_when:
10
+ - seating a prop on a floor without turning it — summer_snap_to_surface
11
+ - joining a pipe to another pipe's end — summer_connect_ports
12
+ facets:
13
+ lifecycle:
14
+ - build
15
+ domains:
16
+ - scenes
17
+ - 3d
18
+ - world-building
19
+ - level-design
20
+ modalities:
21
+ - scenes
22
+ compatibility:
23
+ engine: ">=4.6"
24
+ related:
25
+ tools:
26
+ - tool/raycast
27
+ - tool/snap-to-surface
28
+ - tool/inspect-asset
29
+ - tool/starcast
30
+ skills:
31
+ - skill/spatial-placement
32
+ source: official
33
+ license: MIT
34
+ status: preview
35
+ aliases:
36
+ - summer_attach_to_surface
37
+ implementation:
38
+ module: src/mcp/tools/placement-tools.ts
39
+ export: registerPlacementTools
40
+ surfaces:
41
+ mcp:
42
+ tool_name: summer_attach_to_surface
43
+ remote: false
44
+ input_schema:
45
+ type: object
46
+ properties:
47
+ scenePath:
48
+ type: string
49
+ minLength: 1
50
+ maxLength: 512
51
+ description: Exact scene, e.g. 'res://levels/street.tscn'. It must be open; physics rays need it to be the active tab.
52
+ subject:
53
+ type: string
54
+ minLength: 1
55
+ maxLength: 256
56
+ description: Piece to mount (exact path from the scene root).
57
+ surface:
58
+ type: string
59
+ minLength: 1
60
+ maxLength: 256
61
+ description: Surface node. Without ray, the ray runs from the subject's origin to the nearest point of this node's bounds; with ray, hits on other nodes are skipped. The seat must land on this node (or inside it); a seat on any other node is refused and the piece is put back.
62
+ ray:
63
+ type: object
64
+ properties:
65
+ origin:
66
+ type: array
67
+ minItems: 3
68
+ maxItems: 3
69
+ items:
70
+ type: number
71
+ description: Ray start [x, y, z] in scene space.
72
+ direction:
73
+ type: array
74
+ minItems: 3
75
+ maxItems: 3
76
+ items:
77
+ type: number
78
+ description: Ray direction [x, y, z].
79
+ required:
80
+ - origin
81
+ - direction
82
+ additionalProperties: false
83
+ description: Explicit ray that finds the surface plane and its normal. Pass this or surface (or both). With a ray only, a seat on another node is refused unless that node lies on the hit plane (a coplanar neighbour module, warned).
84
+ backAxis:
85
+ type: string
86
+ enum: ["+x", "-x", "+y", "-y", "+z", "-z"]
87
+ default: "-z"
88
+ description: The subject's LOCAL axis that faces into the surface. Measure it with summer_inspect_asset.
89
+ upAxis:
90
+ type: string
91
+ enum: ["+x", "-x", "+y", "-y", "+z", "-z"]
92
+ default: "+y"
93
+ description: The subject's LOCAL axis kept toward worldUp; not on the same line as backAxis.
94
+ worldUp:
95
+ type: array
96
+ minItems: 3
97
+ maxItems: 3
98
+ items:
99
+ type: number
100
+ default: [0, 1, 0]
101
+ description: World direction the upAxis follows (projected onto the surface).
102
+ standoff:
103
+ type: number
104
+ minimum: 0
105
+ maximum: 10
106
+ default: 0
107
+ description: Gap between the subject's measured back face (the extreme of its visible bounds along backAxis) and the surface.
108
+ placeAt:
109
+ type: string
110
+ enum: [current, hit]
111
+ default: current
112
+ description: "current: the piece keeps its height and its place along the surface and only moves along the surface normal. hit: it also slides so the centre of its back face lands on the ray hit point (its height then follows the ray)."
113
+ maxMove:
114
+ type: number
115
+ exclusiveMinimum: 0
116
+ maximum: 100
117
+ default: 2
118
+ description: Refuse, changing nothing, when the piece would end farther than this from where it starts. Place the piece near its mount first; raise this only for a deliberate long move.
119
+ maxDistance:
120
+ type: number
121
+ exclusiveMinimum: 0
122
+ maximum: 1000
123
+ default: 20
124
+ description: Maximum ray length when looking for the surface.
125
+ collisionMask:
126
+ type: integer
127
+ minimum: 0
128
+ maximum: 4294967295
129
+ default: 4294967295
130
+ description: Godot 3D physics layer mask for the ray.
131
+ required:
132
+ - scenePath
133
+ - subject
134
+ additionalProperties: false
135
+ authority:
136
+ filesystem: true
137
+ editor_mutation: true
138
+ network: false
139
+ credentials: false
140
+ publish: false
141
+ evidence_checks:
142
+ - scene-valid
@@ -1,12 +1,14 @@
1
1
  id: tool/batch
2
2
  kind: tool
3
- version: 1.0.3
4
- summary: Run multiple engine ops in one call, forwarded verbatim; one undo step unless single-only ops force a split (then one per chunk). Also reaches raw ops.
3
+ version: 1.1.0
4
+ summary: Run engine ops in one call, verbatim; one undo step unless single-only ops split it. ReparentNode keeps and verifies its subtree; raw ConnectSignal is refused.
5
5
  use_when:
6
6
  - multi-node builds that should undo as one step (no single-only ops in the list)
7
7
  - reaching engine ops that have no dedicated tool
8
+ - placing many kit pieces, one InstantiateScene op per piece with its position and rotation, read back with receipt summary
8
9
  do_not_use_when:
9
10
  - you need the whole list to be exactly one undo step but it contains a single-only op (the engine splits it; expect one undo step per chunk)
11
+ - connecting a signal — a raw ConnectSignal is refused; use summer_connect_signal
10
12
  facets:
11
13
  lifecycle:
12
14
  - build
@@ -38,7 +40,11 @@ input_schema:
38
40
  items:
39
41
  type: object
40
42
  additionalProperties: {}
41
- description: Array of operation objects, each with 'op' plus its parameters
43
+ description: Array of operation objects, each with 'op' plus its parameters. InstantiateScene ops may also carry position, rotation_degrees, scale or transform; the tool sets them on the created node. Each InstantiateScene is its own engine request; the transforms of a run of them travel together before the next other op, so N placed pieces plus the save cost about N + 2 requests.
44
+ receipt:
45
+ type: string
46
+ enum: [full, summary]
47
+ description: "full (default): every engine receipt. summary: counts, failures with their op index, created node paths only (under 5 KB)."
42
48
  required:
43
49
  - ops
44
50
  additionalProperties: false
@@ -0,0 +1,120 @@
1
+ id: tool/connect-ports
2
+ kind: tool
3
+ version: 1.0.0
4
+ summary: Join one piece's port (a Marker3D, or an open pipe end id such as '+Y') to another's, facing it; refuses joins that tilt the piece. Saves the scene.
5
+ use_when:
6
+ - joining a pipe, duct or gutter section end to end with the previous one
7
+ - fitting a bend, funnel or outlet onto a run
8
+ - snapping any two pieces together by named Marker3D anchors
9
+ do_not_use_when:
10
+ - mounting a piece on a wall — summer_attach_to_surface
11
+ - putting bounds faces together without ports — summer_place_adjacent
12
+ facets:
13
+ lifecycle:
14
+ - build
15
+ domains:
16
+ - scenes
17
+ - 3d
18
+ - world-building
19
+ modalities:
20
+ - scenes
21
+ compatibility:
22
+ engine: ">=4.6"
23
+ related:
24
+ tools:
25
+ - tool/inspect-asset
26
+ - tool/attach-to-surface
27
+ - tool/measure
28
+ skills:
29
+ - skill/spatial-placement
30
+ source: official
31
+ license: MIT
32
+ status: preview
33
+ aliases:
34
+ - summer_connect_ports
35
+ implementation:
36
+ module: src/mcp/tools/placement-tools.ts
37
+ export: registerPlacementTools
38
+ surfaces:
39
+ mcp:
40
+ tool_name: summer_connect_ports
41
+ remote: false
42
+ input_schema:
43
+ type: object
44
+ properties:
45
+ scenePath:
46
+ type: string
47
+ minLength: 1
48
+ maxLength: 512
49
+ description: Exact scene, e.g. 'res://levels/street.tscn'. It must be open in the editor (any tab).
50
+ subject:
51
+ type: string
52
+ minLength: 1
53
+ maxLength: 256
54
+ description: Piece to move.
55
+ subjectPort:
56
+ oneOf:
57
+ - type: string
58
+ minLength: 1
59
+ maxLength: 128
60
+ - type: integer
61
+ minimum: 0
62
+ maximum: 255
63
+ description: "An open-loop id from summer_inspect_asset, e.g. '+Y' (the outermost open loop facing +Y in the piece's own axes) or '+Y#2' (the next one facing +Y); or a Marker3D (or Node3D) name under the subject, whose -Z axis points out of the port; or an open-loop index. Ids and indices follow the stable order (facing, then position), never the radius."
64
+ target:
65
+ type: string
66
+ minLength: 1
67
+ maxLength: 256
68
+ description: Piece that stays put.
69
+ targetPort:
70
+ oneOf:
71
+ - type: string
72
+ minLength: 1
73
+ maxLength: 128
74
+ - type: integer
75
+ minimum: 0
76
+ maximum: 255
77
+ description: Port on the target (open-loop id such as '-Y', marker name, or open-loop index).
78
+ gap:
79
+ type: number
80
+ minimum: -1
81
+ maximum: 10
82
+ default: 0
83
+ description: Distance between the ports along the target port's direction.
84
+ rollDegrees:
85
+ type: number
86
+ minimum: -360
87
+ maximum: 360
88
+ default: 0
89
+ description: "Extra turn of the subject, in degrees, about the joined port axis, applied after the ports are lined up. Axis: the target port's direction reversed, pointing from the joint into the target (receipt roll_axis). Sign: right-hand rule about that axis; positive turns counter-clockwise when you look back along the axis from inside the target toward the subject. Zero: the shortest turn that makes the subject's port face the target's from the subject's CURRENT orientation, so the same value gives different results from different start poses. Read other_ports in the receipt; once the ports are joined, a second call turns by exactly rollDegrees about the joint (180 flips a bend's free end to the other side)."
90
+ maxTiltDegrees:
91
+ type: number
92
+ minimum: 0
93
+ maximum: 180
94
+ default: 5
95
+ description: Refuse the join, changing nothing, when it would tilt the subject's up axis (its local +Y) more than this many degrees from where it points now. Turning about the up axis is never tilt. The refusal names the predicted tilt and the subject ports that would join within the limit.
96
+ allowTilt:
97
+ type: boolean
98
+ default: false
99
+ description: true joins even when the subject tilts more than maxTiltDegrees (a bend laid on its side, a sloped run). The receipt still reports tilt_degrees.
100
+ maxTriangles:
101
+ type: integer
102
+ minimum: 100
103
+ maximum: 300000
104
+ default: 60000
105
+ description: Triangle budget (100-300000) per node when ports are open-loop ids or indices.
106
+ required:
107
+ - scenePath
108
+ - subject
109
+ - subjectPort
110
+ - target
111
+ - targetPort
112
+ additionalProperties: false
113
+ authority:
114
+ filesystem: true
115
+ editor_mutation: true
116
+ network: false
117
+ credentials: false
118
+ publish: false
119
+ evidence_checks:
120
+ - scene-valid
@@ -1,13 +1,14 @@
1
1
  id: tool/connect-signal
2
2
  kind: tool
3
- version: 1.0.2
4
- summary: Connect a signal between two nodes; the receiver's script must define the target method.
3
+ version: 1.1.0
4
+ summary: Connect a signal between two nodes so the saved scene keeps it (CONNECT_PERSIST, verified from the saved .tscn); the receiver should define the target method.
5
5
  use_when:
6
6
  - wiring events like body_entered, pressed, or timeout
7
7
  - '"when the button is pressed, call my function"'
8
8
  - running code when the player enters an Area3D or a Timer finishes
9
9
  do_not_use_when:
10
10
  - the receiver script does not define the target method yet — write it first with summer_write_file / summer_replace_text
11
+ - the scene is a binary .scn — connect from summer_run_script with CONNECT_PERSIST, then summer_save_scene
11
12
  facets:
12
13
  lifecycle:
13
14
  - build
@@ -0,0 +1,94 @@
1
+ id: tool/debug-views
2
+ kind: tool
3
+ version: 1.0.0
4
+ summary: 'One pose as a grid of beauty, lighting-only, unshaded/albedo, world normals, overdraw and wireframe views.'
5
+ use_when:
6
+ - 'understanding WHY a shot reads badly: light direction and pools, texture/value balance, normal seams, overdraw hot spots, triangle density'
7
+ - 'checking floating or duplicated geometry, flipped normals or missing light in one framed view'
8
+ - 'judging an environment like an artist, on the weakest shot of a sheet'
9
+ do_not_use_when:
10
+ - 'you only need the final image — summer_shot_sheet or summer_frame_nodes'
11
+ - 'a pixel-exact close-up of a problem — summer_zoom with the same pose'
12
+ facets:
13
+ lifecycle:
14
+ - build
15
+ domains:
16
+ - verification
17
+ - scenes
18
+ - 3d
19
+ modalities:
20
+ - scenes
21
+ compatibility:
22
+ engine: ">=4.6"
23
+ related:
24
+ tools:
25
+ - tool/shot-sheet
26
+ - tool/zoom
27
+ - tool/frame-shot
28
+ - tool/camera-bookmark
29
+ skills:
30
+ - skill/verifying-scenes
31
+ source: official
32
+ license: MIT
33
+ status: preview
34
+ aliases:
35
+ - summer_debug_views
36
+ implementation:
37
+ module: src/mcp/tools/seeing-tools.ts
38
+ export: registerSeeingTools
39
+ surfaces:
40
+ mcp:
41
+ tool_name: summer_debug_views
42
+ remote: false
43
+ input_schema:
44
+ type: object
45
+ properties:
46
+ scenePath:
47
+ type: string
48
+ description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
49
+ bookmark_name:
50
+ type: string
51
+ description: Pose from a camera bookmark (summer_camera_bookmark). Use INSTEAD of camera_position/camera_look_at.
52
+ camera_position:
53
+ type: string
54
+ description: 'Explicit pose: camera position, "Vector3(x, y, z)". Goes with camera_look_at.'
55
+ camera_look_at:
56
+ type: string
57
+ description: 'Explicit pose: point the camera looks at, "Vector3(x, y, z)".'
58
+ fov:
59
+ type: number
60
+ description: "Vertical field of view in degrees (1..179). Default: the bookmark's own, or 60."
61
+ views:
62
+ type: array
63
+ items:
64
+ type: string
65
+ enum:
66
+ - beauty
67
+ - lighting
68
+ - unshaded
69
+ - normals
70
+ - overdraw
71
+ - wireframe
72
+ maxItems: 8
73
+ description: "Which views, in grid order (default all six: beauty, lighting, unshaded, normals, overdraw, wireframe)."
74
+ update_previous:
75
+ type: boolean
76
+ description: 'bookmark_name only: replace the bookmark''s previous image (compare baseline) with this beauty tile. Default false: only a missing slot is created.'
77
+ max_size:
78
+ type: integer
79
+ minimum: 64
80
+ maximum: 4096
81
+ description: Longest edge of the returned JPEG in pixels (default 1536). Bigger costs more context; up to 4096 for detail work on a PC.
82
+ aspect:
83
+ type: number
84
+ description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
85
+ save_to:
86
+ type: string
87
+ description: Also write the returned image to res://.summer/shots/saved/<name>.jpg (1-64 of A-Z a-z 0-9 _ -; needs max_size <= 1024). Nothing is written without it, except one previous-image slot per rendered bookmark.
88
+ additionalProperties: false
89
+ authority:
90
+ filesystem: true
91
+ editor_mutation: false
92
+ network: false
93
+ credentials: false
94
+ publish: false
@@ -0,0 +1,104 @@
1
+ id: tool/frame-nodes
2
+ kind: tool
3
+ version: 1.0.0
4
+ summary: 'Frame nodes by their world bounds and render with the scene''s REAL environment and lights (optionally save the pose as a bookmark).'
5
+ use_when:
6
+ - '"show me the houses/props with the real lighting" — fit a camera to one or more nodes and render it with the scene''s WorldEnvironment'
7
+ - 'framing a node from a chosen side (front/back/left/right/top/iso or an explicit direction) for a lighting or mood check; an explicit direction is checked for walls and back faces between the camera and the nodes'
8
+ - 'creating a hero-view bookmark that fits a group of nodes, so later shot sheets and compares line up'
9
+ do_not_use_when:
10
+ - 'the editor viewport or a game frame is what you need — summer_screenshot'
11
+ - 'you do not know a good view — summer_frame_shot finds and scores poses for a shot type'
12
+ - 'requires an engine build with ScenePreview fixed-pose framings (Summer Engine 0.5.66 or newer); older engines return engine_lacks_op or framing_unsupported'
13
+ facets:
14
+ lifecycle:
15
+ - build
16
+ domains:
17
+ - verification
18
+ - scenes
19
+ - 3d
20
+ modalities:
21
+ - scenes
22
+ compatibility:
23
+ engine: ">=4.6"
24
+ related:
25
+ tools:
26
+ - tool/screenshot
27
+ - tool/camera-bookmark
28
+ - tool/shot-sheet
29
+ - tool/frame-shot
30
+ - tool/zoom
31
+ skills:
32
+ - skill/verifying-scenes
33
+ source: official
34
+ license: MIT
35
+ status: preview
36
+ aliases:
37
+ - summer_frame_nodes
38
+ implementation:
39
+ module: src/mcp/tools/seeing-tools.ts
40
+ export: registerSeeingTools
41
+ surfaces:
42
+ mcp:
43
+ tool_name: summer_frame_nodes
44
+ remote: false
45
+ input_schema:
46
+ type: object
47
+ properties:
48
+ scenePath:
49
+ type: string
50
+ description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
51
+ nodes:
52
+ type: array
53
+ items:
54
+ type: string
55
+ minItems: 1
56
+ maxItems: 16
57
+ description: Node paths relative to the scene root ("House1", "Props/Crate_02"). The camera fits their combined WORLD bounds (visible meshes, children included).
58
+ direction:
59
+ type: string
60
+ enum:
61
+ - front
62
+ - back
63
+ - left
64
+ - right
65
+ - top
66
+ - iso
67
+ description: 'Side the camera sits on: "front" (+Z), "back" (-Z), "left" (-X), "right" (+X), "top", "iso" (default, 3/4 from -X,+Y,-Z like summer_screenshot). Use from for anything else.'
68
+ from:
69
+ type: string
70
+ description: 'Explicit direction FROM the nodes TOWARD the camera, "Vector3(1, 0.4, 2)". Replaces direction. The fitted pose is checked in-engine: when walls block it, or it puts the camera behind or inside a one-sided surface (whose back is not drawn, so the image would look THROUGH it), the caption opens with a WARNING and offers the nearest valid from (+ fov); the requested view is still rendered.'
71
+ fill:
72
+ type: number
73
+ description: Share of the frame the nodes span along their limiting dimension (0.1..1.5, default 0.8).
74
+ fov:
75
+ type: number
76
+ description: Vertical field of view in degrees (default 50).
77
+ max_size:
78
+ type: integer
79
+ minimum: 64
80
+ maximum: 4096
81
+ description: Longest edge of the returned JPEG in pixels (default 1024). Bigger costs more context; up to 4096 for detail work on a PC.
82
+ aspect:
83
+ type: number
84
+ description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
85
+ marks:
86
+ type: boolean
87
+ description: 'Numbered Set-of-Mark labels over the largest visible nodes; the caption maps label -> node path (feed a label to summer_zoom mark). Each labelled node gets an occlusion test (centre + 4 bounds points); a node hidden behind other geometry is noted "(hidden behind <path>)" — ignore its label.'
88
+ max_marks:
89
+ type: integer
90
+ minimum: 1
91
+ maximum: 128
92
+ description: "marks only: cap on labels (engine default 32)."
93
+ bookmark_name:
94
+ type: string
95
+ description: Also save the fitted pose as this camera bookmark (1-64 of A-Z a-z 0-9 _ -), so later renders line up with it.
96
+ required:
97
+ - nodes
98
+ additionalProperties: false
99
+ authority:
100
+ filesystem: true
101
+ editor_mutation: false
102
+ network: false
103
+ credentials: false
104
+ publish: false
@@ -0,0 +1,134 @@
1
+ id: tool/frame-shot
2
+ kind: tool
3
+ version: 1.0.0
4
+ summary: 'Smart framing: find, score and bookmark camera poses for a shot type (establishing, eye level, low-angle, detail, corridor) with in-engine visibility tests.'
5
+ use_when:
6
+ - '"find a good view of X" / "frame an establishing shot" / "show it from the player''s eye" / "look down the street"'
7
+ - 'choosing hero views to bookmark for an environment review loop'
8
+ - 'checking whether walls or terrain block the view of a subject, and which props frame it (a camera behind or inside a one-sided wall is rejected; transparent foliage and glass are see-through cover)'
9
+ - 'three different establishing views at once (one per side while the score allows), scored on the key light''s direction and the world edge below the horizon'
10
+ do_not_use_when:
11
+ - 'you already have the pose — summer_shot_sheet, summer_frame_nodes or summer_screenshot'
12
+ - 'gameplay camera collision in the running game — that is the camera rig''s job (camera-collision-avoidance knowledge)'
13
+ - 'a 2D scene'
14
+ facets:
15
+ lifecycle:
16
+ - build
17
+ domains:
18
+ - verification
19
+ - scenes
20
+ - 3d
21
+ modalities:
22
+ - scenes
23
+ compatibility:
24
+ engine: ">=4.6"
25
+ related:
26
+ tools:
27
+ - tool/shot-sheet
28
+ - tool/camera-bookmark
29
+ - tool/frame-nodes
30
+ - tool/debug-views
31
+ - tool/zoom
32
+ skills:
33
+ - skill/verifying-scenes
34
+ source: official
35
+ license: MIT
36
+ status: preview
37
+ aliases:
38
+ - summer_frame_shot
39
+ implementation:
40
+ module: src/mcp/tools/seeing-tools.ts
41
+ export: registerSeeingTools
42
+ surfaces:
43
+ mcp:
44
+ tool_name: summer_frame_shot
45
+ remote: false
46
+ input_schema:
47
+ type: object
48
+ properties:
49
+ scenePath:
50
+ type: string
51
+ description: Scene to look at, e.g. "res://levels/town.tscn" (the SAVED file). Omit for the scene open in the editor.
52
+ shot:
53
+ type: string
54
+ enum:
55
+ - establishing
56
+ - eye_level
57
+ - low_angle
58
+ - detail
59
+ - corridor
60
+ description: '"establishing" (wide, whole subject, 12-40 deg up; a pose showing more than 15% empty ground or world edge ranks below every pose showing less), "eye_level" (player eye at spawn: its Camera3D kept inside 1.5-1.8 m, or eye_height, above the walkable surface under the camera), "low_angle" (hero, camera near the ground looking up), "detail" (close-up), "corridor" (down a lane/corridor inside the subject, found by a free-space scan, at eye height; prefers looking in from its open end). Eye-level and corridor cameras are never raised: a pose that cannot stand at eye height moves horizontally or is rejected. Every top pose states its camera height above the surface below it and its absolute y.'
61
+ subject:
62
+ type: array
63
+ items:
64
+ type: string
65
+ maxItems: 8
66
+ description: Node paths to frame (required except for eye_level, where it is what the player looks at).
67
+ spawn:
68
+ type: string
69
+ description: "eye_level only: node the player stands at, e.g. the player or a spawn marker. Its own geometry never counts as an occluder."
70
+ eye_height:
71
+ type: number
72
+ description: "eye_level/corridor: exact camera height in metres above the walkable surface under the camera (default: 1.6; an eye_level spawn's own Camera3D keeps its height clamped into 1.5-1.8)."
73
+ fov:
74
+ type: number
75
+ description: Override the shot type's field of view (establishing 55, eye_level 60/75, low_angle 60 then widened, detail 40, corridor 60/75).
76
+ aspect:
77
+ type: number
78
+ description: Frame width/height (default 1.7778 = 16:9). Every tile uses it.
79
+ occluders:
80
+ type: object
81
+ properties:
82
+ hard:
83
+ type: array
84
+ items:
85
+ type: string
86
+ description: "Path prefixes that must never block the view (walls, terrain): a pose they block is rejected."
87
+ soft:
88
+ type: array
89
+ items:
90
+ type: string
91
+ description: Path prefixes that may sit in front as framing (foliage, fences, props).
92
+ ignore:
93
+ type: array
94
+ items:
95
+ type: string
96
+ description: Path prefixes left out of the visibility pass entirely.
97
+ hard_layers:
98
+ type: integer
99
+ description: "Physics layer mask: geometry whose nearest CollisionObject3D is on these layers is hard."
100
+ soft_layers:
101
+ type: integer
102
+ description: Physics layer mask for soft geometry.
103
+ additionalProperties: false
104
+ description: "Override the occluder classification. Default: path names (wall/house/terrain... = hard; tree/fence/lamp/prop/pipe... = soft), MultiMesh = soft, else size (<= 2.5 m = soft). The caption reports the counts by rule."
105
+ max_soft_fraction:
106
+ type: number
107
+ description: Most of the subject that soft geometry may cover before a pose is rejected (0..1, default 0.67).
108
+ bookmark_name:
109
+ type: string
110
+ description: Name for the saved best pose (default <shot>_<subject leaf>).
111
+ save_bookmark:
112
+ type: boolean
113
+ description: Save the best pose as a camera bookmark (default true).
114
+ render:
115
+ type: string
116
+ enum:
117
+ - sheet
118
+ - best
119
+ - none
120
+ description: '"sheet" (default): the top 3 in one labelled grid with real lighting; "best": the winner only; "none": scores only.'
121
+ max_size:
122
+ type: integer
123
+ minimum: 64
124
+ maximum: 4096
125
+ description: Longest edge of the returned JPEG in pixels (default 1536). Bigger costs more context; up to 4096 for detail work on a PC.
126
+ required:
127
+ - shot
128
+ additionalProperties: false
129
+ authority:
130
+ filesystem: true
131
+ editor_mutation: false
132
+ network: false
133
+ credentials: false
134
+ publish: false