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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +27 -5
- package/.codex-plugin/plugin.json +28 -6
- package/.cursor-plugin/plugin.json +27 -5
- package/.factory-plugin/plugin.json +27 -5
- package/.opencode/plugins/summer.js +1 -1
- package/CHANGELOG.md +102 -0
- package/README.md +18 -3
- package/assets/audit/scene_audit.gd +4136 -0
- package/assets/seeing/seeing_probe.gd +1873 -0
- package/dist/cli/commands/skills.js +20 -2
- package/dist/core/api-client.d.ts +9 -1
- package/dist/core/api-client.js +21 -4
- package/dist/core/capabilities/agent-playbook.js +46 -0
- package/dist/core/capabilities/audit/accept.d.ts +55 -0
- package/dist/core/capabilities/audit/accept.js +147 -0
- package/dist/core/capabilities/audit/args.d.ts +95 -0
- package/dist/core/capabilities/audit/args.js +89 -0
- package/dist/core/capabilities/audit/audit.d.ts +56 -0
- package/dist/core/capabilities/audit/audit.js +287 -0
- package/dist/core/capabilities/audit/frame.d.ts +14 -0
- package/dist/core/capabilities/audit/frame.js +35 -0
- package/dist/core/capabilities/audit/gaps.d.ts +96 -0
- package/dist/core/capabilities/audit/gaps.js +257 -0
- package/dist/core/capabilities/audit/judge.d.ts +162 -0
- package/dist/core/capabilities/audit/judge.js +1134 -0
- package/dist/core/capabilities/audit/math.d.ts +110 -0
- package/dist/core/capabilities/audit/math.js +263 -0
- package/dist/core/capabilities/audit/summary.d.ts +74 -0
- package/dist/core/capabilities/audit/summary.js +212 -0
- package/dist/core/capabilities/board.d.ts +31 -0
- package/dist/core/capabilities/board.js +43 -0
- package/dist/core/capabilities/camera-view.d.ts +4 -2
- package/dist/core/capabilities/camera-view.js +6 -3
- package/dist/core/capabilities/connect-signal.d.ts +85 -0
- package/dist/core/capabilities/connect-signal.js +285 -0
- package/dist/core/capabilities/engine-fallbacks.d.ts +5 -0
- package/dist/core/capabilities/engine-fallbacks.js +5 -0
- package/dist/core/capabilities/engine-ops.d.ts +5 -1
- package/dist/core/capabilities/engine-ops.js +0 -3
- package/dist/core/capabilities/engine-receipt.d.ts +12 -0
- package/dist/core/capabilities/engine-receipt.js +26 -0
- package/dist/core/capabilities/file-read.d.ts +64 -0
- package/dist/core/capabilities/file-read.js +325 -0
- package/dist/core/capabilities/game-task-plan.js +4 -2
- package/dist/core/capabilities/grep.d.ts +60 -0
- package/dist/core/capabilities/grep.js +190 -0
- package/dist/core/capabilities/inspect-node.d.ts +56 -0
- package/dist/core/capabilities/inspect-node.js +225 -0
- package/dist/core/capabilities/inspect-resource.d.ts +61 -0
- package/dist/core/capabilities/inspect-resource.js +376 -0
- package/dist/core/capabilities/math3d.d.ts +28 -0
- package/dist/core/capabilities/math3d.js +88 -0
- package/dist/core/capabilities/motion-generation.d.ts +62 -0
- package/dist/core/capabilities/motion-generation.js +138 -0
- package/dist/core/capabilities/placement-batch.d.ts +102 -0
- package/dist/core/capabilities/placement-batch.js +483 -0
- package/dist/core/capabilities/placement-math.d.ts +70 -0
- package/dist/core/capabilities/placement-math.js +209 -0
- package/dist/core/capabilities/placement-script.d.ts +42 -0
- package/dist/core/capabilities/placement-script.js +1096 -0
- package/dist/core/capabilities/placement.d.ts +485 -0
- package/dist/core/capabilities/placement.js +1731 -0
- package/dist/core/capabilities/project-context.d.ts +33 -2
- package/dist/core/capabilities/project-context.js +87 -4
- package/dist/core/capabilities/replace-node.d.ts +91 -0
- package/dist/core/capabilities/replace-node.js +423 -0
- package/dist/core/capabilities/runtime-control.d.ts +18 -2
- package/dist/core/capabilities/runtime-control.js +67 -2
- package/dist/core/capabilities/scene-batch.d.ts +63 -0
- package/dist/core/capabilities/scene-batch.js +394 -0
- package/dist/core/capabilities/scene-readback.d.ts +36 -0
- package/dist/core/capabilities/scene-readback.js +54 -0
- package/dist/core/capabilities/seeing/args.d.ts +348 -0
- package/dist/core/capabilities/seeing/args.js +178 -0
- package/dist/core/capabilities/seeing/candidates.d.ts +127 -0
- package/dist/core/capabilities/seeing/candidates.js +282 -0
- package/dist/core/capabilities/seeing/math.d.ts +134 -0
- package/dist/core/capabilities/seeing/math.js +269 -0
- package/dist/core/capabilities/seeing/probe.d.ts +62 -0
- package/dist/core/capabilities/seeing/probe.js +188 -0
- package/dist/core/capabilities/seeing/scoring.d.ts +235 -0
- package/dist/core/capabilities/seeing/scoring.js +639 -0
- package/dist/core/capabilities/seeing/seeing.d.ts +233 -0
- package/dist/core/capabilities/seeing/seeing.js +1341 -0
- package/dist/core/capabilities/seeing/shot-store.d.ts +52 -0
- package/dist/core/capabilities/seeing/shot-store.js +204 -0
- package/dist/core/capabilities/surface-snap-mesh.d.ts +88 -0
- package/dist/core/capabilities/surface-snap-mesh.js +425 -0
- package/dist/core/capabilities/surface-snap.d.ts +77 -0
- package/dist/core/capabilities/surface-snap.js +461 -0
- package/dist/core/capabilities/tool-dispatch.js +231 -72
- package/dist/core/capabilities/tscn.d.ts +85 -0
- package/dist/core/capabilities/tscn.js +391 -0
- package/dist/core/capabilities/world-snapshot.d.ts +58 -0
- package/dist/core/capabilities/world-snapshot.js +150 -0
- package/dist/core/capability-skew.d.ts +5 -5
- package/dist/core/capability-skew.js +14 -6
- package/dist/core/headless/worker-engine-client.d.ts +1 -1
- package/dist/core/headless/worker-engine-client.js +2 -2
- package/dist/core/library-read.d.ts +37 -5
- package/dist/core/library-read.js +264 -33
- package/dist/core/library-search.d.ts +2 -2
- package/dist/installer/agent-config.js +5 -3
- package/dist/installer/agent-table.d.ts +16 -0
- package/dist/installer/agent-table.js +52 -17
- package/dist/mcp/server.js +9 -3
- package/dist/mcp/tools/asset-tools.js +21 -3
- package/dist/mcp/tools/audit-tools.d.ts +23 -0
- package/dist/mcp/tools/audit-tools.js +60 -0
- package/dist/mcp/tools/debug-tools.js +3 -1
- package/dist/mcp/tools/file-tools.js +17 -4
- package/dist/mcp/tools/generate-tools.js +74 -66
- package/dist/mcp/tools/library-tools.js +2 -0
- package/dist/mcp/tools/perception-tools.js +6 -19
- package/dist/mcp/tools/placement-tools.d.ts +24 -0
- package/dist/mcp/tools/placement-tools.js +91 -0
- package/dist/mcp/tools/project-tools.js +18 -15
- package/dist/mcp/tools/scene-tools.js +71 -83
- package/dist/mcp/tools/seeing-tools.d.ts +24 -0
- package/dist/mcp/tools/seeing-tools.js +64 -0
- package/dist/mcp/tools/spatial-tools.js +17 -9
- package/dist/mcp/tools/visual-tools.js +59 -7
- package/gemini-extension.json +26 -4
- package/integrations/amp/README.md +1 -1
- package/integrations/crush/README.md +1 -1
- package/integrations/grok-build/README.md +1 -1
- package/integrations/hermes/README.md +1 -1
- package/integrations/kimi-code/README.md +1 -1
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/vscode-copilot/README.md +1 -1
- package/integrations/warp/README.md +1 -1
- package/integrations/windsurf/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +59 -15
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/summer-folder/resource.yaml +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +1 -1
- package/library/skills/README.md +36 -14
- package/library/skills/adaptive-music/SKILL.md +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +220 -0
- package/library/skills/ai-characters-in-games/resource.yaml +30 -0
- package/library/skills/ambient-bed/SKILL.md +1 -1
- package/library/skills/animated-loop/SKILL.md +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/art-direction/SKILL.md +1 -1
- package/library/skills/asset-strategy/SKILL.md +2 -1
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/browse-templates/SKILL.md +3 -3
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +128 -0
- package/library/skills/camera-rigs/resource.yaml +29 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +1 -1
- package/library/skills/character-model/SKILL.md +1 -1
- package/library/skills/character-movement/SKILL.md +326 -0
- package/library/skills/character-movement/references/default-third-person-controller.gd +201 -0
- package/library/skills/character-movement/references/default-third-person-verification-probe.gd +154 -0
- package/library/skills/character-movement/references/movement-3d.md +136 -0
- package/library/skills/character-movement/references/platformer-feel.md +83 -0
- package/library/skills/character-movement/resource.yaml +40 -0
- package/library/skills/character-portrait/SKILL.md +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +1 -1
- package/library/skills/combat-basics/SKILL.md +159 -0
- package/library/skills/combat-basics/references/projectiles-and-aoe.md +100 -0
- package/library/skills/combat-basics/resource.yaml +34 -0
- package/library/skills/concept-art/SKILL.md +1 -1
- package/library/skills/create-asset-sheet/SKILL.md +1 -1
- package/library/skills/debug/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/design-level/SKILL.md +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-npc/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/environment-kit/SKILL.md +1 -1
- package/library/skills/export-and-ship/SKILL.md +1 -1
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +1 -1
- package/library/skills/fps-controller/SKILL.md +9 -7
- package/library/skills/fps-controller/resource.yaml +4 -1
- package/library/skills/game-feel/SKILL.md +1 -1
- package/library/skills/gameskill/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/generate-motion/SKILL.md +9 -9
- package/library/skills/generate-motion/resource.yaml +2 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/in-game-purchases/SKILL.md +254 -0
- package/library/skills/in-game-purchases/resource.yaml +29 -0
- package/library/skills/instantiate-asset-pack/SKILL.md +1 -1
- package/library/skills/investigating-bugs/SKILL.md +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +1 -1
- package/library/skills/make-game/SKILL.md +25 -3
- package/library/skills/make-game/references/2d-platformer-polish.md +93 -0
- package/library/skills/make-game/references/2d-platformer.md +117 -0
- package/library/skills/make-game/references/2d-rpg-content.md +234 -0
- package/library/skills/make-game/references/2d-rpg.md +241 -0
- package/library/skills/make-game/references/2d-survivors-progression.md +201 -0
- package/library/skills/make-game/references/2d-survivors.md +237 -0
- package/library/skills/make-game/references/3d-fps-systems.md +216 -0
- package/library/skills/make-game/references/3d-fps.md +177 -0
- package/library/skills/make-game/references/3d-horror-systems.md +186 -0
- package/library/skills/make-game/references/3d-horror.md +201 -0
- package/library/skills/make-game/references/3d-third-person-systems.md +220 -0
- package/library/skills/make-game/references/3d-third-person.md +215 -0
- package/library/skills/make-game/resource.yaml +6 -1
- package/library/skills/multiplayer/SKILL.md +150 -0
- package/library/skills/multiplayer/resource.yaml +33 -0
- package/library/skills/multiplayer-movement/SKILL.md +510 -0
- package/library/skills/multiplayer-movement/files.md +501 -0
- package/library/skills/multiplayer-movement/resource.yaml +30 -0
- package/library/skills/multiplayer-project/SKILL.md +521 -0
- package/library/skills/multiplayer-project/files.md +448 -0
- package/library/skills/multiplayer-project/resource.yaml +36 -0
- package/library/skills/multiplayer-publish/SKILL.md +229 -0
- package/library/skills/multiplayer-publish/export-errors.md +89 -0
- package/library/skills/multiplayer-publish/resource.yaml +28 -0
- package/library/skills/multiplayer-state/SKILL.md +438 -0
- package/library/skills/multiplayer-state/files.md +592 -0
- package/library/skills/multiplayer-state/resource.yaml +35 -0
- package/library/skills/multiplayer-testing/SKILL.md +236 -0
- package/library/skills/multiplayer-testing/resource.yaml +39 -0
- package/library/skills/music-track/SKILL.md +1 -1
- package/library/skills/navigate-summer/SKILL.md +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/organic-model/SKILL.md +1 -1
- package/library/skills/pixel-art/SKILL.md +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/procedural-animation/SKILL.md +2 -2
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +1 -1
- package/library/skills/psx-retro-rendering/SKILL.md +1 -1
- package/library/skills/realtime-wet-surfaces/SKILL.md +2 -2
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/retarget/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/save-load/SKILL.md +156 -0
- package/library/skills/save-load/resource.yaml +27 -0
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +1 -1
- package/library/skills/scene-scripting/SKILL.md +1 -1
- package/library/skills/scene-to-level/SKILL.md +1 -1
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +1 -1
- package/library/skills/skill-test/SKILL.md +1 -1
- package/library/skills/skintokens-auto-rigging/SKILL.md +1 -1
- package/library/skills/skybox-panorama/SKILL.md +1 -1
- package/library/skills/sound-effect/SKILL.md +1 -1
- package/library/skills/spatial-placement/SKILL.md +134 -3
- package/library/skills/spatial-placement/references/kit-placement-tools.md +364 -0
- package/library/skills/spatial-placement/resource.yaml +16 -2
- package/library/skills/sprite-sheet/SKILL.md +1 -1
- package/library/skills/summer-analytics/SKILL.md +147 -0
- package/library/skills/summer-analytics/resource.yaml +28 -0
- package/library/skills/summer-friends/SKILL.md +226 -0
- package/library/skills/summer-friends/resource.yaml +28 -0
- package/library/skills/summer-leaderboards/SKILL.md +231 -0
- package/library/skills/summer-leaderboards/resource.yaml +30 -0
- package/library/skills/summer-match-results/SKILL.md +286 -0
- package/library/skills/summer-match-results/resource.yaml +32 -0
- package/library/skills/summer-matchmaking/SKILL.md +301 -0
- package/library/skills/summer-matchmaking/resource.yaml +32 -0
- package/library/skills/summer-parties/SKILL.md +253 -0
- package/library/skills/summer-parties/resource.yaml +30 -0
- package/library/skills/summer-player-data/SKILL.md +322 -0
- package/library/skills/summer-player-data/resource.yaml +30 -0
- package/library/skills/summer-store/SKILL.md +271 -0
- package/library/skills/summer-store/resource.yaml +29 -0
- package/library/skills/summer-world-chat/SKILL.md +195 -0
- package/library/skills/summer-world-chat/resource.yaml +30 -0
- package/library/skills/summer-world-saves/SKILL.md +284 -0
- package/library/skills/summer-world-saves/resource.yaml +29 -0
- package/library/skills/text-to-motion/SKILL.md +99 -0
- package/library/skills/text-to-motion/prompts-and-controls.md +34 -0
- package/library/skills/text-to-motion/resource.yaml +41 -0
- package/library/skills/text-to-motion/rigging-for-text-motion.md +54 -0
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +1 -1
- package/library/skills/tune-performance/SKILL.md +1 -1
- package/library/skills/ui-basics/SKILL.md +10 -1
- package/library/skills/ui-graphics/SKILL.md +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/using-summer/SKILL.md +2 -2
- package/library/skills/using-summer/resource.yaml +2 -2
- package/library/skills/vehicle-model/SKILL.md +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verifying-scenes/SKILL.md +76 -2
- package/library/skills/verifying-scenes/resource.yaml +13 -2
- package/library/skills/vfx-dissolve/SKILL.md +1 -1
- package/library/skills/vfx-fire/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-lightning/SKILL.md +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +1 -1
- package/library/skills/vfx-smoke/SKILL.md +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +1 -1
- package/library/skills/voice-line/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +38 -0
- package/library/skills/web-and-touch-input/resource.yaml +28 -0
- package/library/skills/web-compatibility-look/SKILL.md +62 -0
- package/library/skills/web-compatibility-look/resource.yaml +30 -0
- package/library/skills/world-building-3d/SKILL.md +8 -1
- package/library/skills/world-building-3d/references/spatial-tools.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +2 -1
- package/library/skills/writing-plans/SKILL.md +1 -1
- package/library/skills/writing-skills/SKILL.md +1 -1
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +2 -2
- package/library/tools/attach-to-surface/resource.yaml +142 -0
- package/library/tools/batch/resource.yaml +9 -3
- package/library/tools/connect-ports/resource.yaml +120 -0
- package/library/tools/connect-signal/resource.yaml +3 -2
- package/library/tools/debug-views/resource.yaml +94 -0
- package/library/tools/frame-nodes/resource.yaml +104 -0
- package/library/tools/frame-shot/resource.yaml +134 -0
- package/library/tools/generate-motion/resource.yaml +44 -9
- package/library/tools/get-board/resource.yaml +50 -0
- package/library/tools/get-project-context/resource.yaml +13 -2
- package/library/tools/grep/resource.yaml +77 -0
- package/library/tools/inspect-asset/resource.yaml +71 -0
- package/library/tools/inspect-node/resource.yaml +9 -2
- package/library/tools/inspect-resource/resource.yaml +16 -5
- package/library/tools/instantiate-scene/resource.yaml +27 -2
- package/library/tools/measure/resource.yaml +96 -0
- package/library/tools/place-adjacent/resource.yaml +113 -0
- package/library/tools/play/resource.yaml +15 -2
- package/library/tools/raycast/resource.yaml +101 -0
- package/library/tools/read-file/resource.yaml +36 -2
- package/library/tools/read-library/resource.yaml +2 -2
- package/library/tools/repeat-along/resource.yaml +129 -0
- package/library/tools/replace-node/resource.yaml +11 -5
- package/library/tools/scene-audit/resource.yaml +144 -0
- package/library/tools/screenshot/resource.yaml +13 -2
- package/library/tools/search-assets/resource.yaml +18 -0
- package/library/tools/shot-sheet/resource.yaml +110 -0
- package/library/tools/snap-to-surface/resource.yaml +4 -1
- package/library/tools/world-snapshot/resource.yaml +24 -3
- package/library/tools/zoom/resource.yaml +105 -0
- package/package.json +1 -1
- package/registry/generated/aliases.json +17 -3
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +26 -4
- package/registry/generated/index.json +2154 -469
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +27 -5
- package/registry/generated/plugin.codex.json +28 -6
- package/registry/generated/plugin.cursor.json +27 -5
- package/registry/generated/plugin.factory.json +27 -5
- package/registry/generated/skills-index.md +36 -14
- package/registry/generated/skills-registry.json +421 -124
- package/registry/generated/templates-registry.json +2 -2
- package/library/skills/host-authoritative-state/SKILL.md +0 -332
- package/library/skills/host-authoritative-state/resource.yaml +0 -28
- package/library/skills/peer-to-peer-multiplayer/SKILL.md +0 -373
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +0 -28
- package/library/skills/setup-multiplayer/SKILL.md +0 -336
- package/library/skills/setup-multiplayer/resource.yaml +0 -28
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit-placement tools, shared by both faces: the MCP tools
|
|
3
|
+
* (src/mcp/tools/placement-tools.ts) register these zod shapes and call these
|
|
4
|
+
* runners; `summer tool <slug>` (tool-dispatch.ts) parses with the same
|
|
5
|
+
* schemas and calls the same runners.
|
|
6
|
+
*
|
|
7
|
+
* summer_inspect_asset measure an asset file without adding it to a scene
|
|
8
|
+
* summer_place_adjacent put one node's bounds face against another's
|
|
9
|
+
* summer_attach_to_surface turn a piece's back onto a surface and seat it
|
|
10
|
+
* summer_repeat_along instance copies of a scene along a line
|
|
11
|
+
* summer_connect_ports meet one piece's port with another's
|
|
12
|
+
* summer_raycast cast an arbitrary ray (physics, then visual AABB)
|
|
13
|
+
* summer_measure gap/overlap per axis, or face coplanarity
|
|
14
|
+
*
|
|
15
|
+
* No engine op is new. Reads run the placement probe (placement-script.ts)
|
|
16
|
+
* through RunSceneScript with undo "none" and no checkpoint; mutations are the
|
|
17
|
+
* ordinary SetProp / SnapToSurface / InstantiateScene ops with the usual scene
|
|
18
|
+
* target, undo and final SaveScene. attach_to_surface checks its seat before
|
|
19
|
+
* the SaveScene and, when it refuses, sets the piece's original transform back
|
|
20
|
+
* instead of saving. Every result is compact (< 5 KB) and names its evidence:
|
|
21
|
+
* visual_aabb (visible GeometryInstance3D bounds, the definition
|
|
22
|
+
* AlignDistribute3D uses), physics (collider queries), or mesh_triangles.
|
|
23
|
+
*/
|
|
24
|
+
import { z } from "zod";
|
|
25
|
+
import { type CapabilityAdvertisingClient } from "../capability-skew.js";
|
|
26
|
+
import { type JsonRecord } from "../util/json.js";
|
|
27
|
+
import { type Basis3, type SignedAxis, type Vec3, type WorldAxis, type Xform } from "./placement-math.js";
|
|
28
|
+
export interface PlacementClient extends CapabilityAdvertisingClient {
|
|
29
|
+
executeIdentityBoundOps(ops: Record<string, unknown>[], options?: Record<string, unknown>, timeoutMs?: number): Promise<unknown>;
|
|
30
|
+
}
|
|
31
|
+
export type PlacementResult = JsonRecord & {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
};
|
|
34
|
+
/** What a placement tool tells the model when the engine lacks RunSceneScript. */
|
|
35
|
+
export declare const PLACEMENT_PROBE_FALLBACK = "read bounds with summer_starcast (or summer_inspect_node + summer_inspect_resource) and place with summer_set_prop, then verify with summer_screenshot";
|
|
36
|
+
export declare function isSafeNodePath(value: string): boolean;
|
|
37
|
+
export declare function isSafeResPath(value: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Run the placement probe and return its result dictionary, or a structured
|
|
40
|
+
* failure. Never mutates: undo "none", no checkpoint.
|
|
41
|
+
*/
|
|
42
|
+
export declare function runPlacementProbe(client: PlacementClient, tool: string, args: JsonRecord, seconds?: number): Promise<PlacementResult>;
|
|
43
|
+
/** Trim the named lists (in order) until the result fits; declare every trim. */
|
|
44
|
+
export declare function fitToBudget(result: JsonRecord, listKeys: string[], target?: number): JsonRecord;
|
|
45
|
+
export declare const inspectAssetArgsSchema: z.ZodObject<{
|
|
46
|
+
path: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
47
|
+
maxTriangles: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
48
|
+
detail: z.ZodDefault<z.ZodOptional<z.ZodEnum<["summary", "full"]>>>;
|
|
49
|
+
}, "strip", z.ZodTypeAny, {
|
|
50
|
+
path: string;
|
|
51
|
+
detail: "summary" | "full";
|
|
52
|
+
maxTriangles: number;
|
|
53
|
+
}, {
|
|
54
|
+
path: string;
|
|
55
|
+
detail?: "summary" | "full" | undefined;
|
|
56
|
+
maxTriangles?: number | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
export type InspectAssetArgs = z.output<typeof inspectAssetArgsSchema>;
|
|
59
|
+
/** Planes the probe reports, largest first. */
|
|
60
|
+
interface PlaneRecord {
|
|
61
|
+
normal: Vec3;
|
|
62
|
+
offset: number;
|
|
63
|
+
area: number;
|
|
64
|
+
tris?: number;
|
|
65
|
+
cull_back?: number;
|
|
66
|
+
}
|
|
67
|
+
/** One open boundary loop as the probe reports it: full precision, in the
|
|
68
|
+
* piece's own frame (the frame of the asset root, or of the scene node with
|
|
69
|
+
* its own transform excluded), in discovery order. */
|
|
70
|
+
export interface RawLoop {
|
|
71
|
+
center: Vec3;
|
|
72
|
+
direction: Vec3;
|
|
73
|
+
radius: number;
|
|
74
|
+
vertices?: number;
|
|
75
|
+
mesh?: number;
|
|
76
|
+
max_dev?: number;
|
|
77
|
+
direction_ambiguous?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/** A loop with its stable place: `index` in the stable order and `id`. */
|
|
80
|
+
export interface OrderedLoop extends RawLoop {
|
|
81
|
+
index: number;
|
|
82
|
+
id: string;
|
|
83
|
+
/** The signed piece axis its outward direction is nearest, e.g. "+Y";
|
|
84
|
+
* "~Y" when the probe could not decide which way it faces. */
|
|
85
|
+
facing: string;
|
|
86
|
+
}
|
|
87
|
+
/** What the port-like rules read from a loop. */
|
|
88
|
+
interface LoopRecord {
|
|
89
|
+
direction: Vec3;
|
|
90
|
+
radius: number;
|
|
91
|
+
center?: Vec3;
|
|
92
|
+
direction_ambiguous?: boolean;
|
|
93
|
+
}
|
|
94
|
+
/** A stable open-loop id: "+Y", "+Y#2" (the second loop facing +Y), "~Z". */
|
|
95
|
+
export declare const LOOP_ID_PATTERN: RegExp;
|
|
96
|
+
/**
|
|
97
|
+
* The stable order and ids of a piece's open loops. Sort key: the signed piece
|
|
98
|
+
* axis the outward direction is nearest (+X, -X, +Y, -Y, +Z, -Z, then the
|
|
99
|
+
* undecided ~X, ~Y, ~Z); then the outermost along that axis first; then centre
|
|
100
|
+
* x, y, z; radius (largest first) and vertex count only break exact ties. All
|
|
101
|
+
* in the piece's own frame, so the ids are the same in summer_inspect_asset
|
|
102
|
+
* and summer_connect_ports and do not change with the piece's pose. The first
|
|
103
|
+
* loop facing +Y is "+Y", the next "+Y#2". Exported for tests.
|
|
104
|
+
*/
|
|
105
|
+
export declare function orderLoops(loops: RawLoop[]): OrderedLoop[];
|
|
106
|
+
export type PortSelector = {
|
|
107
|
+
kind: "marker";
|
|
108
|
+
name: string;
|
|
109
|
+
} | {
|
|
110
|
+
kind: "loop_id";
|
|
111
|
+
id: string;
|
|
112
|
+
} | {
|
|
113
|
+
kind: "loop_index";
|
|
114
|
+
index: number;
|
|
115
|
+
};
|
|
116
|
+
/** "+y", "+Y" and "+Y#1" all name the loop "+Y"; numbers are loop indices;
|
|
117
|
+
* any other string is a Marker3D (or Node3D) name. */
|
|
118
|
+
export declare function parsePortSelector(port: string | number): PortSelector;
|
|
119
|
+
/**
|
|
120
|
+
* The two largest pairs of opposite planes, for reading facing at a glance:
|
|
121
|
+
* per plane direction the largest plane and the largest one facing the other
|
|
122
|
+
* way (null for a single sheet), ranked by their combined area; pairs under 1%
|
|
123
|
+
* of the largest pair's area are left out. Exported for tests.
|
|
124
|
+
*/
|
|
125
|
+
export declare function planePairs(planes: PlaneRecord[], limit?: number): JsonRecord[];
|
|
126
|
+
/**
|
|
127
|
+
* Loops that look like pipe or duct ends: radius over 2 cm, a decided
|
|
128
|
+
* direction, and at least one partner loop of similar radius facing more than
|
|
129
|
+
* 60 degrees away (the other end of a straight run or a bend). The outline of
|
|
130
|
+
* a flat sheet and its holes all face one way and never qualify. Exported for
|
|
131
|
+
* tests.
|
|
132
|
+
*/
|
|
133
|
+
export declare function portLikeLoops<T extends LoopRecord>(loops: T[], aabb?: {
|
|
134
|
+
min: Vec3;
|
|
135
|
+
max: Vec3;
|
|
136
|
+
}): T[];
|
|
137
|
+
export declare function inspectAsset(client: PlacementClient, args: InspectAssetArgs): Promise<PlacementResult>;
|
|
138
|
+
export declare const measureArgsSchema: z.ZodObject<{
|
|
139
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
140
|
+
mode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["pair", "plane"]>>>;
|
|
141
|
+
a: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
|
|
142
|
+
b: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
|
|
143
|
+
axis: z.ZodOptional<z.ZodEnum<["x", "y", "z"]>>;
|
|
144
|
+
nodes: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, "many">>;
|
|
145
|
+
face: z.ZodOptional<z.ZodEnum<["+x", "-x", "+y", "-y", "+z", "-z"]>>;
|
|
146
|
+
space: z.ZodDefault<z.ZodOptional<z.ZodEnum<["world", "local"]>>>;
|
|
147
|
+
tolerance: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
148
|
+
}, "strip", z.ZodTypeAny, {
|
|
149
|
+
mode: "pair" | "plane";
|
|
150
|
+
scenePath: string;
|
|
151
|
+
space: "local" | "world";
|
|
152
|
+
tolerance: number;
|
|
153
|
+
a?: string | undefined;
|
|
154
|
+
axis?: "y" | "x" | "z" | undefined;
|
|
155
|
+
nodes?: string[] | undefined;
|
|
156
|
+
b?: string | undefined;
|
|
157
|
+
face?: "-y" | "+x" | "-x" | "+y" | "+z" | "-z" | undefined;
|
|
158
|
+
}, {
|
|
159
|
+
scenePath: string;
|
|
160
|
+
mode?: "pair" | "plane" | undefined;
|
|
161
|
+
a?: string | undefined;
|
|
162
|
+
space?: "local" | "world" | undefined;
|
|
163
|
+
axis?: "y" | "x" | "z" | undefined;
|
|
164
|
+
nodes?: string[] | undefined;
|
|
165
|
+
b?: string | undefined;
|
|
166
|
+
tolerance?: number | undefined;
|
|
167
|
+
face?: "-y" | "+x" | "-x" | "+y" | "+z" | "-z" | undefined;
|
|
168
|
+
}>;
|
|
169
|
+
export type MeasureArgs = z.output<typeof measureArgsSchema>;
|
|
170
|
+
export declare function measure(client: PlacementClient, args: MeasureArgs): Promise<PlacementResult>;
|
|
171
|
+
export declare const raycastArgsSchema: z.ZodObject<{
|
|
172
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
173
|
+
origin: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
174
|
+
direction: z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number], [number, number, number]>;
|
|
175
|
+
maxDistance: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
176
|
+
collisionMask: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
177
|
+
collideWithAreas: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
178
|
+
evidence: z.ZodDefault<z.ZodOptional<z.ZodEnum<["auto", "physics", "visual_aabb"]>>>;
|
|
179
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, "many">>;
|
|
180
|
+
}, "strip", z.ZodTypeAny, {
|
|
181
|
+
scenePath: string;
|
|
182
|
+
origin: [number, number, number];
|
|
183
|
+
direction: [number, number, number];
|
|
184
|
+
evidence: "auto" | "physics" | "visual_aabb";
|
|
185
|
+
maxDistance: number;
|
|
186
|
+
collisionMask: number;
|
|
187
|
+
collideWithAreas: boolean;
|
|
188
|
+
exclude?: string[] | undefined;
|
|
189
|
+
}, {
|
|
190
|
+
scenePath: string;
|
|
191
|
+
origin: [number, number, number];
|
|
192
|
+
direction: [number, number, number];
|
|
193
|
+
evidence?: "auto" | "physics" | "visual_aabb" | undefined;
|
|
194
|
+
maxDistance?: number | undefined;
|
|
195
|
+
collisionMask?: number | undefined;
|
|
196
|
+
collideWithAreas?: boolean | undefined;
|
|
197
|
+
exclude?: string[] | undefined;
|
|
198
|
+
}>;
|
|
199
|
+
export type RaycastArgs = z.output<typeof raycastArgsSchema>;
|
|
200
|
+
export declare function raycast(client: PlacementClient, args: RaycastArgs): Promise<PlacementResult>;
|
|
201
|
+
declare const alignMode: z.ZodEnum<["min", "center", "max", "none"]>;
|
|
202
|
+
type AlignMode = z.output<typeof alignMode>;
|
|
203
|
+
export declare const placeAdjacentArgsSchema: z.ZodObject<{
|
|
204
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
205
|
+
subject: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
206
|
+
reference: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
207
|
+
axis: z.ZodEnum<["x", "y", "z"]>;
|
|
208
|
+
side: z.ZodEnum<["min", "max"]>;
|
|
209
|
+
gap: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
210
|
+
alignOtherAxes: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodEnum<["min", "center", "max", "none"]>, z.ZodObject<{
|
|
211
|
+
x: z.ZodOptional<z.ZodEnum<["min", "center", "max", "none"]>>;
|
|
212
|
+
y: z.ZodOptional<z.ZodEnum<["min", "center", "max", "none"]>>;
|
|
213
|
+
z: z.ZodOptional<z.ZodEnum<["min", "center", "max", "none"]>>;
|
|
214
|
+
}, "strip", z.ZodTypeAny, {
|
|
215
|
+
y?: "none" | "min" | "max" | "center" | undefined;
|
|
216
|
+
x?: "none" | "min" | "max" | "center" | undefined;
|
|
217
|
+
z?: "none" | "min" | "max" | "center" | undefined;
|
|
218
|
+
}, {
|
|
219
|
+
y?: "none" | "min" | "max" | "center" | undefined;
|
|
220
|
+
x?: "none" | "min" | "max" | "center" | undefined;
|
|
221
|
+
z?: "none" | "min" | "max" | "center" | undefined;
|
|
222
|
+
}>]>>>;
|
|
223
|
+
space: z.ZodDefault<z.ZodOptional<z.ZodEnum<["world", "local"]>>>;
|
|
224
|
+
}, "strip", z.ZodTypeAny, {
|
|
225
|
+
scenePath: string;
|
|
226
|
+
space: "local" | "world";
|
|
227
|
+
gap: number;
|
|
228
|
+
axis: "y" | "x" | "z";
|
|
229
|
+
subject: string;
|
|
230
|
+
reference: string;
|
|
231
|
+
side: "min" | "max";
|
|
232
|
+
alignOtherAxes: "none" | "min" | "max" | "center" | {
|
|
233
|
+
y?: "none" | "min" | "max" | "center" | undefined;
|
|
234
|
+
x?: "none" | "min" | "max" | "center" | undefined;
|
|
235
|
+
z?: "none" | "min" | "max" | "center" | undefined;
|
|
236
|
+
};
|
|
237
|
+
}, {
|
|
238
|
+
scenePath: string;
|
|
239
|
+
axis: "y" | "x" | "z";
|
|
240
|
+
subject: string;
|
|
241
|
+
reference: string;
|
|
242
|
+
side: "min" | "max";
|
|
243
|
+
space?: "local" | "world" | undefined;
|
|
244
|
+
gap?: number | undefined;
|
|
245
|
+
alignOtherAxes?: "none" | "min" | "max" | "center" | {
|
|
246
|
+
y?: "none" | "min" | "max" | "center" | undefined;
|
|
247
|
+
x?: "none" | "min" | "max" | "center" | undefined;
|
|
248
|
+
z?: "none" | "min" | "max" | "center" | undefined;
|
|
249
|
+
} | undefined;
|
|
250
|
+
}>;
|
|
251
|
+
export type PlaceAdjacentArgs = z.output<typeof placeAdjacentArgsSchema>;
|
|
252
|
+
/** Per-axis translation that puts subject against reference. Exported for tests. */
|
|
253
|
+
export declare function adjacentDeltas(subject: Array<[number, number]>, reference: Array<[number, number]>, axis: WorldAxis, side: "min" | "max", gap: number, align: (axis: WorldAxis) => AlignMode): Vec3;
|
|
254
|
+
export declare function placeAdjacent(client: PlacementClient, args: PlaceAdjacentArgs): Promise<PlacementResult>;
|
|
255
|
+
export declare const attachToSurfaceArgsSchema: z.ZodObject<{
|
|
256
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
257
|
+
subject: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
258
|
+
surface: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>>;
|
|
259
|
+
ray: z.ZodOptional<z.ZodObject<{
|
|
260
|
+
origin: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
261
|
+
direction: z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number], [number, number, number]>;
|
|
262
|
+
}, "strip", z.ZodTypeAny, {
|
|
263
|
+
origin: [number, number, number];
|
|
264
|
+
direction: [number, number, number];
|
|
265
|
+
}, {
|
|
266
|
+
origin: [number, number, number];
|
|
267
|
+
direction: [number, number, number];
|
|
268
|
+
}>>;
|
|
269
|
+
placeAt: z.ZodDefault<z.ZodOptional<z.ZodEnum<["current", "hit"]>>>;
|
|
270
|
+
maxMove: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
271
|
+
backAxis: z.ZodDefault<z.ZodOptional<z.ZodEnum<["+x", "-x", "+y", "-y", "+z", "-z"]>>>;
|
|
272
|
+
upAxis: z.ZodDefault<z.ZodOptional<z.ZodEnum<["+x", "-x", "+y", "-y", "+z", "-z"]>>>;
|
|
273
|
+
worldUp: z.ZodDefault<z.ZodOptional<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number], [number, number, number]>>>;
|
|
274
|
+
standoff: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
275
|
+
maxDistance: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
276
|
+
collisionMask: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
277
|
+
}, "strip", z.ZodTypeAny, {
|
|
278
|
+
scenePath: string;
|
|
279
|
+
subject: string;
|
|
280
|
+
maxDistance: number;
|
|
281
|
+
collisionMask: number;
|
|
282
|
+
placeAt: "current" | "hit";
|
|
283
|
+
maxMove: number;
|
|
284
|
+
backAxis: "-y" | "+x" | "-x" | "+y" | "+z" | "-z";
|
|
285
|
+
upAxis: "-y" | "+x" | "-x" | "+y" | "+z" | "-z";
|
|
286
|
+
worldUp: [number, number, number];
|
|
287
|
+
standoff: number;
|
|
288
|
+
surface?: string | undefined;
|
|
289
|
+
ray?: {
|
|
290
|
+
origin: [number, number, number];
|
|
291
|
+
direction: [number, number, number];
|
|
292
|
+
} | undefined;
|
|
293
|
+
}, {
|
|
294
|
+
scenePath: string;
|
|
295
|
+
subject: string;
|
|
296
|
+
surface?: string | undefined;
|
|
297
|
+
ray?: {
|
|
298
|
+
origin: [number, number, number];
|
|
299
|
+
direction: [number, number, number];
|
|
300
|
+
} | undefined;
|
|
301
|
+
maxDistance?: number | undefined;
|
|
302
|
+
collisionMask?: number | undefined;
|
|
303
|
+
placeAt?: "current" | "hit" | undefined;
|
|
304
|
+
maxMove?: number | undefined;
|
|
305
|
+
backAxis?: "-y" | "+x" | "-x" | "+y" | "+z" | "-z" | undefined;
|
|
306
|
+
upAxis?: "-y" | "+x" | "-x" | "+y" | "+z" | "-z" | undefined;
|
|
307
|
+
worldUp?: [number, number, number] | undefined;
|
|
308
|
+
standoff?: number | undefined;
|
|
309
|
+
}>;
|
|
310
|
+
export type AttachToSurfaceArgs = z.output<typeof attachToSurfaceArgsSchema>;
|
|
311
|
+
/** The piece is turned and put this far in front of its planned seat before
|
|
312
|
+
* SnapToSurface sweeps it in. */
|
|
313
|
+
export declare const ATTACH_PRESEAT_CLEARANCE = 0.05;
|
|
314
|
+
/** How far past the planned seat the sweep may go (a collider set back from
|
|
315
|
+
* the visible back face). */
|
|
316
|
+
export declare const ATTACH_SEAT_REACH = 0.25;
|
|
317
|
+
/** A seat this far in front of the planned plane stopped on something else. */
|
|
318
|
+
export declare const ATTACH_PLAN_TOLERANCE = 0.03;
|
|
319
|
+
/** Extents of a node's visible bounds along its own local axes, relative to
|
|
320
|
+
* its origin: lo/hi per local x, y, z. Exported for tests. */
|
|
321
|
+
export declare function localExtents(intervals: Array<[number, number]>, dirs: Vec3[], origin: Vec3): {
|
|
322
|
+
lo: Vec3;
|
|
323
|
+
hi: Vec3;
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* Where the subject's origin must go so its back face (the extreme of its
|
|
327
|
+
* visible bounds along backAxis) sits standoff in front of the surface plane
|
|
328
|
+
* through hitPoint. `current` keeps the origin's place along the surface (and
|
|
329
|
+
* so its height on a wall); `hit` puts the centre of the back face on the hit
|
|
330
|
+
* point. `rotation` maps local unit axes to their new world directions.
|
|
331
|
+
* Exported for tests.
|
|
332
|
+
*/
|
|
333
|
+
export declare function seatOrigin(plan: {
|
|
334
|
+
origin: Vec3;
|
|
335
|
+
extents: {
|
|
336
|
+
lo: Vec3;
|
|
337
|
+
hi: Vec3;
|
|
338
|
+
};
|
|
339
|
+
backAxis: SignedAxis;
|
|
340
|
+
rotation: Basis3;
|
|
341
|
+
hitPoint: Vec3;
|
|
342
|
+
normal: Vec3;
|
|
343
|
+
standoff: number;
|
|
344
|
+
placeAt: "current" | "hit";
|
|
345
|
+
}): {
|
|
346
|
+
origin: Vec3;
|
|
347
|
+
backOffset: number;
|
|
348
|
+
backCentre: Vec3;
|
|
349
|
+
};
|
|
350
|
+
/** The mounting rotation: local back -> -normal, local up -> world up projected
|
|
351
|
+
* onto the surface plane. Exported for tests. */
|
|
352
|
+
export declare function mountingRotation(backAxis: SignedAxis, upAxis: SignedAxis, normal: Vec3, worldUp: Vec3, currentUp?: Vec3): {
|
|
353
|
+
rotation: Basis3;
|
|
354
|
+
up: Vec3;
|
|
355
|
+
usedCurrentUp: boolean;
|
|
356
|
+
} | null;
|
|
357
|
+
/** One concrete next step for a failed seat, naming what blocked it. */
|
|
358
|
+
export declare function seatNextStep(reason: string, blockers: JsonRecord | undefined, sweep: number): string;
|
|
359
|
+
export declare function attachToSurface(client: PlacementClient, args: AttachToSurfaceArgs): Promise<PlacementResult>;
|
|
360
|
+
export declare const repeatAlongArgsSchema: z.ZodObject<{
|
|
361
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
362
|
+
template: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
363
|
+
parent: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
364
|
+
start: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
365
|
+
end: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
366
|
+
direction: z.ZodOptional<z.ZodEffects<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, [number, number, number], [number, number, number]>>;
|
|
367
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
368
|
+
spacing: z.ZodOptional<z.ZodNumber>;
|
|
369
|
+
align: z.ZodDefault<z.ZodOptional<z.ZodEnum<["start", "center", "end"]>>>;
|
|
370
|
+
rotationDegrees: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
371
|
+
scale: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
372
|
+
namePrefix: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
373
|
+
}, "strip", z.ZodTypeAny, {
|
|
374
|
+
scenePath: string;
|
|
375
|
+
template: string;
|
|
376
|
+
parent: string;
|
|
377
|
+
start: [number, number, number];
|
|
378
|
+
align: "end" | "start" | "center";
|
|
379
|
+
end?: [number, number, number] | undefined;
|
|
380
|
+
count?: number | undefined;
|
|
381
|
+
scale?: [number, number, number] | undefined;
|
|
382
|
+
direction?: [number, number, number] | undefined;
|
|
383
|
+
spacing?: number | undefined;
|
|
384
|
+
rotationDegrees?: [number, number, number] | undefined;
|
|
385
|
+
namePrefix?: string | undefined;
|
|
386
|
+
}, {
|
|
387
|
+
scenePath: string;
|
|
388
|
+
template: string;
|
|
389
|
+
parent: string;
|
|
390
|
+
start: [number, number, number];
|
|
391
|
+
end?: [number, number, number] | undefined;
|
|
392
|
+
count?: number | undefined;
|
|
393
|
+
scale?: [number, number, number] | undefined;
|
|
394
|
+
direction?: [number, number, number] | undefined;
|
|
395
|
+
spacing?: number | undefined;
|
|
396
|
+
align?: "end" | "start" | "center" | undefined;
|
|
397
|
+
rotationDegrees?: [number, number, number] | undefined;
|
|
398
|
+
namePrefix?: string | undefined;
|
|
399
|
+
}>;
|
|
400
|
+
export type RepeatAlongArgs = z.output<typeof repeatAlongArgsSchema>;
|
|
401
|
+
export declare const REPEAT_MAX_COPIES = 64;
|
|
402
|
+
/** Copy positions for a repeat_along call. Exported for tests. */
|
|
403
|
+
export declare function repeatPositions(args: Pick<RepeatAlongArgs, "start" | "end" | "direction" | "count" | "spacing" | "align">): {
|
|
404
|
+
positions: Vec3[];
|
|
405
|
+
spacing: number;
|
|
406
|
+
direction: Vec3;
|
|
407
|
+
};
|
|
408
|
+
export declare function repeatAlong(client: PlacementClient, args: RepeatAlongArgs): Promise<PlacementResult>;
|
|
409
|
+
/** A join may tilt the subject's up axis this many degrees unless allowed. */
|
|
410
|
+
export declare const DEFAULT_MAX_TILT_DEGREES = 5;
|
|
411
|
+
export declare const connectPortsArgsSchema: z.ZodObject<{
|
|
412
|
+
scenePath: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>;
|
|
413
|
+
subject: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
414
|
+
subjectPort: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodNumber]>;
|
|
415
|
+
target: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
416
|
+
targetPort: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodNumber]>;
|
|
417
|
+
gap: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
418
|
+
rollDegrees: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
419
|
+
maxTiltDegrees: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
420
|
+
allowTilt: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
421
|
+
maxTriangles: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
422
|
+
}, "strip", z.ZodTypeAny, {
|
|
423
|
+
scenePath: string;
|
|
424
|
+
target: string;
|
|
425
|
+
gap: number;
|
|
426
|
+
subject: string;
|
|
427
|
+
maxTriangles: number;
|
|
428
|
+
subjectPort: string | number;
|
|
429
|
+
targetPort: string | number;
|
|
430
|
+
rollDegrees: number;
|
|
431
|
+
maxTiltDegrees: number;
|
|
432
|
+
allowTilt: boolean;
|
|
433
|
+
}, {
|
|
434
|
+
scenePath: string;
|
|
435
|
+
target: string;
|
|
436
|
+
subject: string;
|
|
437
|
+
subjectPort: string | number;
|
|
438
|
+
targetPort: string | number;
|
|
439
|
+
gap?: number | undefined;
|
|
440
|
+
maxTriangles?: number | undefined;
|
|
441
|
+
rollDegrees?: number | undefined;
|
|
442
|
+
maxTiltDegrees?: number | undefined;
|
|
443
|
+
allowTilt?: boolean | undefined;
|
|
444
|
+
}>;
|
|
445
|
+
export type ConnectPortsArgs = z.output<typeof connectPortsArgsSchema>;
|
|
446
|
+
interface PortRead {
|
|
447
|
+
kind: string;
|
|
448
|
+
position: Vec3;
|
|
449
|
+
direction: Vec3;
|
|
450
|
+
radius?: number;
|
|
451
|
+
name?: string;
|
|
452
|
+
id?: string;
|
|
453
|
+
index?: number;
|
|
454
|
+
direction_ambiguous?: boolean;
|
|
455
|
+
analysis_truncated?: boolean;
|
|
456
|
+
/** The subject's other ports (ports read with other_ports). */
|
|
457
|
+
others?: PortRead[];
|
|
458
|
+
others_total?: number;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* The probe's answer for one port -> the port in scene space. A marker comes
|
|
462
|
+
* resolved; an open-loop port comes as every loop of the node in its own
|
|
463
|
+
* frame, which is ordered here (orderLoops) and picked by id or index, so the
|
|
464
|
+
* same id names the same loop in every pose. With withOthers, the node's other
|
|
465
|
+
* loops come along in scene space.
|
|
466
|
+
*/
|
|
467
|
+
export declare function resolveProbePort(raw: unknown, selector: PortSelector, label: "subject" | "target", node: string, withOthers: boolean): {
|
|
468
|
+
port: PortRead;
|
|
469
|
+
} | {
|
|
470
|
+
failure: PlacementResult;
|
|
471
|
+
};
|
|
472
|
+
/** New scene-space transform that joins the subject port to the target port.
|
|
473
|
+
* `joint` is where the subject port lands; a subject point p moves to
|
|
474
|
+
* rotation * (p - subject port) + joint. */
|
|
475
|
+
export declare function connectTransform(subject: Xform, sp: PortRead, tp: PortRead, gap: number, rollDegrees: number): {
|
|
476
|
+
xform: Xform;
|
|
477
|
+
rotation: Basis3;
|
|
478
|
+
joint: Vec3;
|
|
479
|
+
rollAxis: Vec3;
|
|
480
|
+
};
|
|
481
|
+
/** How far a scene-space rotation turns the subject's up axis (its local +Y),
|
|
482
|
+
* in degrees. A turn about the up axis is 0. Exported for tests. */
|
|
483
|
+
export declare function tiltDegrees(subject: Xform, rotation: Basis3): number;
|
|
484
|
+
export declare function connectPorts(client: PlacementClient, args: ConnectPortsArgs): Promise<PlacementResult>;
|
|
485
|
+
export {};
|