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,96 @@
1
+ /**
2
+ * Judgment for the gap detectors of summer_scene_audit. The kernel
3
+ * measures; this file decides.
4
+ *
5
+ * - exposed_edge (A): open outline edges of walls and facade members (bands,
6
+ * piers, joints: the kernel's geometric roles) that nothing covers within
7
+ * 4-7 mm, seen from walkable space, with a 2-60 cm reveal behind them or a
8
+ * coplanar continuation within 4 cm (seam) or 35 cm (bridged gap).
9
+ * - open_fixture_end: open ends of run pieces (two or more open rims of one
10
+ * size) nothing joins within a sleeve tolerance, seen from the open side.
11
+ * - depth_step (C): runs of recessed or proud depth along each facade row.
12
+ *
13
+ * Severity: exposed_edge warns on band pieces (and on walls when depth_step
14
+ * agrees), else look; open_fixture_end warns; depth_step is look, and a
15
+ * depth_step hole next to a through_hole confirms it (warn -> error). A
16
+ * confirming flag is folded into the issue it confirms.
17
+ */
18
+ import { type Vec3 } from "../seeing/math.js";
19
+ import type { AuditCheck } from "./args.js";
20
+ import type { AuditIssue, InstRow, KernelResult } from "./judge.js";
21
+ import { type Box } from "./math.js";
22
+ export declare const CONFIRM_RADIUS = 0.6;
23
+ /** exposed_edge classes that count (sky, far and mixed are silhouettes, not gaps). */
24
+ export declare const EDGE_CLASSES: Set<string>;
25
+ export interface GkLine {
26
+ b: number;
27
+ ax: 0 | 2;
28
+ c: number;
29
+ lo: number;
30
+ hi: number;
31
+ y0: number;
32
+ y1: number;
33
+ tmin: number;
34
+ tmax: number;
35
+ sides: number[];
36
+ pieces: number[];
37
+ }
38
+ export interface EdgeFlag {
39
+ owner: number;
40
+ cls: string;
41
+ len: number;
42
+ n: number;
43
+ c: Vec3;
44
+ box: Box;
45
+ step: number;
46
+ counts: {
47
+ gap: number;
48
+ seam: number;
49
+ bridge: number;
50
+ sky: number;
51
+ far: number;
52
+ };
53
+ eye: Vec3;
54
+ hit: number;
55
+ }
56
+ export interface FixtureEnd {
57
+ i: number;
58
+ c: Vec3;
59
+ out: Vec3;
60
+ r: number;
61
+ eye: Vec3;
62
+ }
63
+ export interface DepthFlag {
64
+ kind: string;
65
+ line: number;
66
+ side: number;
67
+ s0: number;
68
+ s1: number;
69
+ y0: number;
70
+ y1: number;
71
+ rows: number;
72
+ depth: number;
73
+ c: Vec3;
74
+ }
75
+ export declare function parseGkLines(raw: unknown): GkLine[];
76
+ /** Door-like openings the kernel found (inserts reaching the floor, 1.8 m
77
+ * or taller): world boxes. */
78
+ export declare function parseDoors(raw: unknown): Box[];
79
+ export declare function parseEdgeFlags(raw: unknown): EdgeFlag[];
80
+ export declare function parseFixtureEnds(raw: unknown): FixtureEnd[];
81
+ export declare function parseDepthFlags(raw: unknown): DepthFlag[];
82
+ export declare function instBox(r: InstRow): Box;
83
+ /** The world box a depth_step run covers (its rows, 10 cm deep at the facade). */
84
+ export declare function depthBox(f: DepthFlag, lines: readonly GkLine[]): Box;
85
+ export interface GapJudgement {
86
+ issues: AuditIssue[];
87
+ /** Checks that ran but could measure nothing (no walkable eye points). */
88
+ unmeasured: AuditCheck[];
89
+ notes: string[];
90
+ }
91
+ /**
92
+ * exposed_edge, open_fixture_end and depth_step issues,
93
+ * with confirmation folded in. `holes` (the through_hole issues) are
94
+ * updated in place when a depth_step hole confirms one.
95
+ */
96
+ export declare function judgeGaps(result: KernelResult, inst: readonly InstRow[], want: ReadonlySet<AuditCheck>, holes?: AuditIssue[]): GapJudgement;
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Judgment for the gap detectors of summer_scene_audit. The kernel
3
+ * measures; this file decides.
4
+ *
5
+ * - exposed_edge (A): open outline edges of walls and facade members (bands,
6
+ * piers, joints: the kernel's geometric roles) that nothing covers within
7
+ * 4-7 mm, seen from walkable space, with a 2-60 cm reveal behind them or a
8
+ * coplanar continuation within 4 cm (seam) or 35 cm (bridged gap).
9
+ * - open_fixture_end: open ends of run pieces (two or more open rims of one
10
+ * size) nothing joins within a sleeve tolerance, seen from the open side.
11
+ * - depth_step (C): runs of recessed or proud depth along each facade row.
12
+ *
13
+ * Severity: exposed_edge warns on band pieces (and on walls when depth_step
14
+ * agrees), else look; open_fixture_end warns; depth_step is look, and a
15
+ * depth_step hole next to a through_hole confirms it (warn -> error). A
16
+ * confirming flag is folded into the issue it confirms.
17
+ */
18
+ import { add, distance, normalize, scale, sub } from "../seeing/math.js";
19
+ import { boxCenter, boxDistance, boxIntersection, growBox, makeBox } from "./math.js";
20
+ export const CONFIRM_RADIUS = 0.6;
21
+ /** exposed_edge classes that count (sky, far and mixed are silhouettes, not gaps). */
22
+ export const EDGE_CLASSES = new Set(["gap", "seam", "bridge"]);
23
+ // ---------------------------------------------------------------------------
24
+ // Parsing
25
+ // ---------------------------------------------------------------------------
26
+ const r2 = (n) => Math.round(n * 100) / 100 || 0;
27
+ const r3 = (n) => Math.round(n * 1000) / 1000 || 0;
28
+ const v2 = (v) => [r2(v[0]), r2(v[1]), r2(v[2])];
29
+ const fmt = (v) => `(${r2(v[0])},${r2(v[1])},${r2(v[2])})`;
30
+ const cm = (m) => `${Math.round(m * 1000) / 10} cm`;
31
+ function num(v, fallback = 0) {
32
+ return typeof v === "number" && Number.isFinite(v) ? v : fallback;
33
+ }
34
+ function vec(v) {
35
+ return Array.isArray(v) && v.length >= 3 ? [num(v[0]), num(v[1]), num(v[2])] : [0, 0, 0];
36
+ }
37
+ function arr(v) {
38
+ return Array.isArray(v) ? v : [];
39
+ }
40
+ function obj(v) {
41
+ return v && typeof v === "object" && !Array.isArray(v) ? v : {};
42
+ }
43
+ export function parseGkLines(raw) {
44
+ return arr(obj(raw).lines).map((l) => {
45
+ const r = obj(l);
46
+ return {
47
+ b: num(r.b, -1),
48
+ ax: num(r.ax) === 2 ? 2 : 0,
49
+ c: num(r.c),
50
+ lo: num(r.lo),
51
+ hi: num(r.hi),
52
+ y0: num(r.y0),
53
+ y1: num(r.y1),
54
+ tmin: num(r.tmin),
55
+ tmax: num(r.tmax),
56
+ sides: arr(r.sides).map((s) => num(s)),
57
+ pieces: arr(r.pieces).map((p) => num(p, -1)),
58
+ };
59
+ });
60
+ }
61
+ /** Door-like openings the kernel found (inserts reaching the floor, 1.8 m
62
+ * or taller): world boxes. */
63
+ export function parseDoors(raw) {
64
+ return arr(obj(raw).doors).filter(Array.isArray).map((d) => makeBox(vec(d[0]), vec(d[1])));
65
+ }
66
+ export function parseEdgeFlags(raw) {
67
+ return arr(obj(raw).flags).filter(Array.isArray).map((f) => ({
68
+ owner: num(f[0], -1),
69
+ cls: String(f[1] ?? ""),
70
+ len: num(f[2]),
71
+ n: num(f[3]),
72
+ c: vec(f[4]),
73
+ box: makeBox(vec(f[5]), vec(f[6])),
74
+ step: num(f[7]),
75
+ counts: { gap: num(f[8]), seam: num(f[9]), bridge: num(f[10]), sky: num(f[11]), far: num(f[12]) },
76
+ eye: vec(f[13]),
77
+ hit: num(f[14], -1),
78
+ }));
79
+ }
80
+ export function parseFixtureEnds(raw) {
81
+ return arr(obj(raw).ends).filter(Array.isArray).map((e) => ({ i: num(e[0], -1), c: vec(e[1]), out: vec(e[2]), r: num(e[3]), eye: vec(e[4]) }));
82
+ }
83
+ export function parseDepthFlags(raw) {
84
+ return arr(obj(raw).flags).filter(Array.isArray).map((f) => ({
85
+ kind: String(f[0] ?? ""),
86
+ line: num(f[1], -1),
87
+ side: num(f[2], 1),
88
+ s0: num(f[3]),
89
+ s1: num(f[4]),
90
+ y0: num(f[5]),
91
+ y1: num(f[6]),
92
+ rows: num(f[7], 1),
93
+ depth: num(f[8]),
94
+ c: vec(f[9]),
95
+ }));
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Geometry helpers
99
+ // ---------------------------------------------------------------------------
100
+ export function instBox(r) {
101
+ return makeBox(sub(r.c, scale(r.e, 0.5)), add(r.c, scale(r.e, 0.5)));
102
+ }
103
+ /** The world box a depth_step run covers (its rows, 10 cm deep at the facade). */
104
+ export function depthBox(f, lines) {
105
+ const ln = lines[f.line];
106
+ const ax = ln?.ax ?? 0;
107
+ const th = 2 - ax;
108
+ const lo = [f.c[0], f.y0 - 0.05, f.c[2]];
109
+ const hi = [f.c[0], f.y1 + 0.05, f.c[2]];
110
+ lo[ax] = f.s0;
111
+ hi[ax] = f.s1;
112
+ lo[th] = f.c[th] - 0.05;
113
+ hi[th] = f.c[th] + 0.05;
114
+ return { lo, hi };
115
+ }
116
+ function lookDirs(dir, clear) {
117
+ return [{ dir: normalize(add(normalize(dir), [0, 0.35, 0])), clear, pref: 1 }];
118
+ }
119
+ function nearestLinePiece(line, p, inst) {
120
+ if (!line)
121
+ return undefined;
122
+ let best;
123
+ let bd = Infinity;
124
+ for (const pi of line.pieces) {
125
+ const r = inst[pi];
126
+ if (!r)
127
+ continue;
128
+ const d = boxDistance(instBox(r), makeBox(p, p));
129
+ if (d < bd) {
130
+ bd = d;
131
+ best = r;
132
+ }
133
+ }
134
+ return best;
135
+ }
136
+ const C_WHY = {
137
+ seam: (f) => `a ${cm(f.s1 - f.s0)} recess runs up the facade over ${f.rows} row(s): a seam between modules`,
138
+ hole: (f) => (f.depth >= 2 ? `a ${r2(f.s1 - f.s0)} m wide opening with nothing within 1.2 m behind it, over ${f.rows} rows, the facade on both sides or above it: a hole or a missing module` : `a ${r2(f.s1 - f.s0)} m wide recess ${r2(f.depth)} m deep over ${f.rows} rows: a hole or a missing module`),
139
+ proud: (f) => `a ${r2(f.s1 - f.s0)} m run stands ${cm(-f.depth)} proud of the facade over ${f.rows} rows: a module out of line`,
140
+ band_recess: (f) => `the band level recesses ${cm(f.depth)} over ${cm(f.s1 - f.s0)}, flush both sides: a gap in the band`,
141
+ band_end_recess: (f) => `the band level recesses ${cm(f.depth)} over ${cm(f.s1 - f.s0)} at a band end`,
142
+ band_missing_run: (f) => `the band level recesses ${cm(f.depth)} over ${r2(f.s1 - f.s0)} m: a missing band run`,
143
+ band_through: (f) => `the band level opens ${r2(f.depth)} m deep over ${cm(f.s1 - f.s0)}: through the band`,
144
+ };
145
+ /**
146
+ * exposed_edge, open_fixture_end and depth_step issues,
147
+ * with confirmation folded in. `holes` (the through_hole issues) are
148
+ * updated in place when a depth_step hole confirms one.
149
+ */
150
+ export function judgeGaps(result, inst, want, holes = []) {
151
+ const out = [];
152
+ const notes = [];
153
+ const unmeasured = [];
154
+ const gk = obj(result.gk);
155
+ const lines = parseGkLines(gk);
156
+ const eyes = num(gk.eyes);
157
+ const ran = (c) => want.has(c) && result[c === "exposed_edge" ? "exposed" : c === "open_fixture_end" ? "fixture_ends" : "depth_steps"] !== undefined;
158
+ if (eyes <= 0 && (ran("exposed_edge") || ran("open_fixture_end") || ran("depth_step"))) {
159
+ notes.push("gap detectors: no walkable eye points (no open-sky floor), so nothing counts as seen; exposed_edge, open_fixture_end and depth_step measured nothing.");
160
+ for (const c of ["exposed_edge", "open_fixture_end", "depth_step"])
161
+ if (ran(c))
162
+ unmeasured.push(c);
163
+ }
164
+ // Band pieces: the kernel's geometric bands (a run of thin pieces at one
165
+ // height along a facade wall).
166
+ const isBand = (r) => r?.r === "struct" && r.w === "band";
167
+ const edges = ran("exposed_edge") ? parseEdgeFlags(result.exposed).filter((f) => EDGE_CLASSES.has(f.cls) && inst[f.owner]) : [];
168
+ const depth = ran("depth_step") ? parseDepthFlags(result.depth_steps).filter((f) => lines[f.line]) : [];
169
+ const depthBoxes = depth.map((f) => depthBox(f, lines));
170
+ const usedDepth = new Set();
171
+ if (ran("exposed_edge")) {
172
+ edges.forEach((e) => {
173
+ const r = inst[e.owner];
174
+ const cK = depthBoxes.map((b, j) => (!usedDepth.has(j) && boxDistance(b, e.box) <= CONFIRM_RADIUS ? j : -1)).filter((j) => j >= 0);
175
+ const band = isBand(r);
176
+ cK.forEach((j) => usedDepth.add(j));
177
+ const severity = band || cK.length ? "warn" : "look";
178
+ const reveal = e.cls === "seam" ? "a coplanar sheet continues within 4 cm: a seam you can see into" : e.cls === "bridge" ? "the next coplanar sheet starts within 35 cm: a gap between sheets" : `the reveal behind it is ${cm(e.step)} deep`;
179
+ const behind = inst[e.hit];
180
+ out.push({
181
+ check: "exposed_edge",
182
+ severity,
183
+ path: r.p,
184
+ pos: v2(e.c),
185
+ why: `open ${band ? "band" : "outline"} edge ${cm(e.len)} long that nothing covers within 7 mm, seen from walkable space; ${reveal}${cK.length ? "; depth_step confirms it" : ""}`,
186
+ ev: { cls: e.cls, len_m: r2(e.len), samples: e.n, ...(e.cls === "gap" ? { reveal_m: r3(e.step) } : {}), piece: r.k, seen_from: v2(e.eye), ...(behind && behind !== r ? { behind: behind.p } : {}), ...(cK.length ? { confirmed_by: ["depth_step"] } : {}) },
187
+ next: `summer_zoom at ${fmt(e.c)}; summer_measure ${r.p} against its neighbour, then move it flush, add the missing piece or cover the end`,
188
+ score: e.len + (band ? 0.5 : 0),
189
+ frame: { focus: e.c, size: Math.max(0.8, Math.min(4, e.len)), dirs: [{ dir: normalize(sub(e.eye, e.c)), clear: distance(e.eye, e.c), pref: 1 }] },
190
+ });
191
+ });
192
+ }
193
+ if (ran("open_fixture_end")) {
194
+ for (const f of parseFixtureEnds(result.fixture_ends)) {
195
+ const r = inst[f.i];
196
+ if (!r)
197
+ continue;
198
+ out.push({
199
+ check: "open_fixture_end",
200
+ severity: "warn",
201
+ path: r.p,
202
+ pos: v2(f.c),
203
+ why: `open end of ${r.k} (${cm(2 * f.r)} across) seen from walkable space: nothing joins it within 2.5 cm (a missing elbow, coupler, section or end piece)`,
204
+ ev: { radius_m: r3(f.r), opens: v2(f.out), seen_from: v2(f.eye) },
205
+ next: `summer_zoom at ${fmt(f.c)}; add the next piece (summer_connect_ports ${r.p} ...), or end the run in the wall or with an end piece`,
206
+ score: f.r,
207
+ frame: { focus: f.c, size: Math.max(0.6, 4 * f.r), dirs: [{ dir: normalize(sub(f.eye, f.c)), clear: distance(f.eye, f.c), pref: 1 }] },
208
+ });
209
+ }
210
+ }
211
+ // depth_step: holes confirm through_hole; the rest are look items. A run
212
+ // that a door-like opening (an insert reaching the floor) covers over half
213
+ // its length is the door's recess, not a band running through it.
214
+ if (ran("depth_step")) {
215
+ const doors = parseDoors(gk);
216
+ depth.forEach((f, k) => {
217
+ if (usedDepth.has(k))
218
+ return;
219
+ const box = depthBoxes[k];
220
+ const ax = lines[f.line]?.ax ?? 0;
221
+ const run = growBox(box, 0.3);
222
+ if (doors.some((d) => {
223
+ const inter = boxIntersection(d, run);
224
+ return !!inter && inter.hi[ax] - inter.lo[ax] >= 0.5 * (f.s1 - f.s0);
225
+ }))
226
+ return;
227
+ if (f.kind === "hole") {
228
+ const hole = holes.find((h) => h.check === "through_hole" && boxDistance(growBox(makeBox(h.pos, h.pos), Math.max(num(h.ev.w), num(h.ev.h), 0.3) / 2), box) <= 1.0);
229
+ if (hole) {
230
+ hole.ev.confirmed_by = ["depth_step"];
231
+ if (hole.severity === "warn")
232
+ hole.severity = "error";
233
+ hole.why += `; depth_step confirms a ${r2(f.s1 - f.s0)} m recess`;
234
+ return;
235
+ }
236
+ }
237
+ const ln = lines[f.line];
238
+ const r = nearestLinePiece(ln, boxCenter(box), inst);
239
+ if (!r)
240
+ return;
241
+ const side = [0, 0, 0];
242
+ side[2 - (ln?.ax ?? 0)] = f.side;
243
+ out.push({
244
+ check: "depth_step",
245
+ severity: "look",
246
+ path: r.p,
247
+ pos: v2(boxCenter(box)),
248
+ why: (C_WHY[f.kind] ?? ((x) => `a depth step (${x.kind}) of ${cm(x.depth)}`))(f),
249
+ ev: { kind: f.kind, w_m: r2(f.s1 - f.s0), ...(f.depth >= 2 ? { open: true } : { depth_m: r3(f.depth) }), rows: f.rows, y: [r2(f.y0), r2(f.y1)] },
250
+ next: `summer_zoom at ${fmt(boxCenter(box))}`,
251
+ score: (f.s1 - f.s0) * Math.abs(f.depth),
252
+ frame: { focus: boxCenter(box), size: Math.max(1, f.s1 - f.s0), dirs: lookDirs(side, 3) },
253
+ });
254
+ });
255
+ }
256
+ return { issues: out, unmeasured, notes };
257
+ }
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Judgment for summer_scene_audit: the kernel's raw measurements (rays that
3
+ * passed, gaps under props, hull overlaps, UV candidates, ...)
4
+ * become issues with a check, a severity, a node path, a world position, a
5
+ * one-line reason, the evidence numbers and the next tool to use.
6
+ *
7
+ * Every issue is a flag for the agent to LOOK at, never an auto-fix. The
8
+ * thresholds are the spec's (2 cm floating, 3 cm embed/overlap, 15 deg
9
+ * parallelism, UV stretch 8); the severity grading above them is ours and
10
+ * documented next to each check. Roles (wall, floor, insert, prop, ...) come
11
+ * from the kernel, which derives them from geometry and engine data only.
12
+ */
13
+ import { type Vec3 } from "../seeing/math.js";
14
+ import type { AuditCheck, Severity } from "./args.js";
15
+ import { type Basis9 } from "./math.js";
16
+ export interface FrameDir {
17
+ dir: Vec3;
18
+ clear: number;
19
+ pref: number;
20
+ }
21
+ export interface FrameHint {
22
+ focus: Vec3;
23
+ size: number;
24
+ dirs: FrameDir[];
25
+ /** A viewpoint the kernel proved can see the spot (uv_stretch). */
26
+ viewer?: Vec3;
27
+ }
28
+ export interface AuditIssue {
29
+ check: AuditCheck;
30
+ severity: Severity;
31
+ path: string;
32
+ pos: Vec3;
33
+ why: string;
34
+ ev: Record<string, unknown>;
35
+ next: string;
36
+ /** Magnitude for ordering within a severity (bigger first). */
37
+ score: number;
38
+ frame?: FrameHint;
39
+ /** Set by the accept filter: the reason it was accepted (show_accepted). */
40
+ accepted?: string;
41
+ /** Set by the accept filter: accepted once, but its evidence changed. */
42
+ acceptStale?: string;
43
+ }
44
+ export interface InstRow {
45
+ p: string;
46
+ k: string;
47
+ s: string;
48
+ r: string;
49
+ in: boolean;
50
+ o: Vec3;
51
+ b: Basis9;
52
+ sc: Vec3;
53
+ det: number;
54
+ c: Vec3;
55
+ e: Vec3;
56
+ le: Vec3;
57
+ lc: Vec3;
58
+ m: number;
59
+ f: Vec3;
60
+ nan?: boolean;
61
+ lo?: Vec3;
62
+ cl?: number[];
63
+ /** Why the kernel gave it its role (geometry or material evidence, e.g. "sheet", "slab", "in_opening", "band", "see_through", "size"). */
64
+ w?: string;
65
+ /** Its LOCAL transform is identity / its parent's GLOBAL transform is identity. */
66
+ li?: boolean;
67
+ pi?: boolean;
68
+ }
69
+ export interface KernelResult {
70
+ instances?: InstRow[];
71
+ lines?: unknown[];
72
+ floors?: Record<string, unknown>;
73
+ support?: unknown[];
74
+ overlaps?: unknown[];
75
+ long_props?: unknown[];
76
+ uv?: unknown[];
77
+ /** z_fight from planar face groups: {near, far, pairs, in_mesh}. */
78
+ zfight_geo?: Record<string, unknown>;
79
+ lights?: Record<string, unknown>;
80
+ resources?: Record<string, unknown>;
81
+ [key: string]: unknown;
82
+ }
83
+ /** The 16 clearance directions the kernel measures around every instance
84
+ * (8 azimuths at 20 deg up, then 8 at 45 deg up). */
85
+ export declare function clearanceDirections(): Vec3[];
86
+ /** Clusters of see-through rays on each facade line; clusters beside the same
87
+ * host and insert (both sides of a too-narrow door) become one issue. */
88
+ export declare function judgeThroughHoles(lines: unknown[], inst: InstRow[]): AuditIssue[];
89
+ /**
90
+ * floor_gap. Down rays over the tile footprints (a grid, plus rays along the
91
+ * seams between tiles) and along each tile edge that a wall bounds within
92
+ * 1 m (the strip between the last tile and the wall base). Each row says
93
+ * which surface the ray hit FIRST:
94
+ * - nothing: the void shows (error);
95
+ * - an underlay with the floor's own surface right under it: the underlay
96
+ * plane sits above a drain channel or dip and paints over it ("covers the
97
+ * floor", warn), not a hole;
98
+ * - an underlay with nothing under it: a hole in the tile, or a bare strip
99
+ * outside the tiles.
100
+ * A piece whose own mesh has holes (or whose low surfaces the underlay
101
+ * covers) in every tile is ONE issue for the piece. Areas are the sum of the
102
+ * missed rays' own footprints, with the strip's dimensions.
103
+ */
104
+ export declare function judgeFloorGaps(floors: Record<string, unknown> | undefined, inst: InstRow[]): AuditIssue[];
105
+ export declare function judgeSupport(support: unknown[], inst: InstRow[]): AuditIssue[];
106
+ /** Overlaps the kernel reports start at 1 cm; a prop is an issue when its
107
+ * deepest overlap is over 3 cm, and then every partner it cuts is named. */
108
+ export declare const OVERLAP_MIN = 0.03;
109
+ export declare const OVERLAP_PARTNERS = 3;
110
+ export declare function judgeOverlaps(overlaps: unknown[], inst: InstRow[]): AuditIssue[];
111
+ /** World bounds of two pieces touch (within `slack`) on all three axes. */
112
+ export declare function boundsTouch(a: InstRow, b: InstRow, slack?: number): boolean;
113
+ export declare function judgeLongProps(rows: unknown[], inst: InstRow[]): AuditIssue[];
114
+ export declare const UV_STRETCH_LIMIT = 8;
115
+ export declare const UV_MIN_AREA = 0.02;
116
+ /** UVs of a triangle all within this distance sample one texel: a flat
117
+ * colour, never a visible stretch. */
118
+ export declare const UV_POINT_EPSILON = 0.002;
119
+ export declare function judgeUv(rows: unknown[], inst: InstRow[]): AuditIssue[];
120
+ export declare function judgeDuplicates(inst: InstRow[]): {
121
+ issues: AuditIssue[];
122
+ pairs: Set<string>;
123
+ };
124
+ export declare function judgeZFight(lines: unknown[], floors: Record<string, unknown> | undefined, inst: InstRow[], duplicatePairs: Set<string>, alreadyReported?: ReadonlySet<string>): AuditIssue[];
125
+ /** Which way to nudge a z-fighting face: the plane's normal as a world axis
126
+ * and as the piece's own local axis (what summer_set_prop moves). */
127
+ export declare function nudgeAxes(subject: InstRow, normal: Vec3): {
128
+ world: string;
129
+ local: string;
130
+ };
131
+ /**
132
+ * z_fight from geometry: the kernel's planar face groups, compared between
133
+ * instances (any role: props, roofs, ledges, side walls, ceilings, inserts
134
+ * against hosts, decals and overlay cards) and within one mesh (two
135
+ * surfaces on one plane). A pair counts when its plane gap is under twice
136
+ * the 24-bit depth step at its view distance (the nearest walkable eye
137
+ * point, camera or bookmark; 30 m without one) for the main camera's near
138
+ * and far. Severity: warn over 0.05 m2 seen from a viewpoint; look
139
+ * otherwise, and look (never skipped) when the material says it may be
140
+ * intentional: render_priority, a depth or normal offset, a see-through
141
+ * (alpha) material, or no depth test / depth writes.
142
+ * Returns the issues and the instance pairs they cover (the ray samples do
143
+ * not report those again).
144
+ */
145
+ export declare function judgeZFightGeometry(geo: Record<string, unknown> | undefined, inst: InstRow[], duplicatePairs: Set<string>): {
146
+ issues: AuditIssue[];
147
+ pairs: Set<string>;
148
+ };
149
+ export declare function judgeLights(lights: Record<string, unknown> | undefined, inst: InstRow[]): AuditIssue[];
150
+ /**
151
+ * Pieces left at the scene origin, never placed: the global origin within
152
+ * 1 cm AND an identity LOCAL transform AND an identity parent, and not part
153
+ * of a structured layout (touching another piece, or one of a row of
154
+ * siblings along a line through the origin). A module placed so its corner is
155
+ * the world origin, or one placed by its parent, is not flagged.
156
+ */
157
+ export declare function unplacedAtOrigin(inst: readonly InstRow[]): Set<InstRow>;
158
+ export declare function judgeTransforms(inst: InstRow[]): AuditIssue[];
159
+ export declare function judgeResources(res: Record<string, unknown> | undefined, inst: InstRow[]): AuditIssue[];
160
+ /** Same check + severity + piece under the same parent: one issue that names
161
+ * the count and the range (16 gutter sections 5.4-5.9 cm off the wall). */
162
+ export declare function groupRepeats(issues: AuditIssue[], inst: InstRow[], min?: number): AuditIssue[];