summer-engine 3.8.0 → 4.0.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 -13
- package/.claude-plugin/plugin.json +23 -22
- package/.codex-plugin/plugin.json +4 -12
- package/.cursor-plugin/plugin.json +4 -12
- package/.factory-plugin/plugin.json +4 -12
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +96 -0
- package/GEMINI.md +3 -3
- package/README.md +103 -33
- package/assets/icon.png +0 -0
- package/commands/start.md +71 -0
- package/commands/summer.md +3 -2
- package/dist/cli/banner.js +3 -0
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/ops.d.ts +47 -0
- package/dist/cli/commands/ops.js +301 -0
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +37 -12
- package/dist/cli/commands/skills.js +11 -7
- package/dist/cli/index.js +7 -0
- package/dist/core/agent-host.d.ts +65 -0
- package/dist/core/agent-host.js +193 -0
- package/dist/core/capabilities/agent-playbook.d.ts +3 -0
- package/dist/core/capabilities/agent-playbook.js +54 -2
- package/dist/core/capabilities/apps.d.ts +25 -2
- package/dist/core/capabilities/apps.js +25 -12
- package/dist/core/capabilities/doctor.d.ts +3 -0
- package/dist/core/capabilities/doctor.js +20 -15
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
- package/dist/core/capabilities/game-task-plan.d.ts +12 -6
- package/dist/core/capabilities/game-task-plan.js +80 -5
- package/dist/core/capabilities/motion-generation.js +2 -2
- package/dist/core/capabilities/navigation/open.d.ts +6 -2
- package/dist/core/capabilities/navigation/open.js +3 -0
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +4 -4
- package/dist/core/capabilities/scene-script-target.d.ts +17 -0
- package/dist/core/capabilities/scene-script-target.js +70 -0
- package/dist/core/capabilities/sfx-choices.d.ts +4 -0
- package/dist/core/capabilities/sfx-choices.js +13 -6
- package/dist/core/capabilities/tool-dispatch.d.ts +12 -3
- package/dist/core/capabilities/tool-dispatch.js +81 -46
- package/dist/core/embeddings.d.ts +2 -0
- package/dist/core/embeddings.js +1 -1
- package/dist/core/error-codes.d.ts +62 -0
- package/dist/core/error-codes.js +97 -0
- package/dist/core/format.d.ts +2 -0
- package/dist/core/format.js +2 -1
- package/dist/core/hosted-mcp.d.ts +22 -0
- package/dist/core/hosted-mcp.js +56 -1
- package/dist/core/library-read.js +5 -0
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/catalog.d.ts +41 -0
- package/dist/core/ops/catalog.js +145 -0
- package/dist/core/ops/cloud.d.ts +56 -0
- package/dist/core/ops/cloud.js +175 -0
- package/dist/core/ops/contract.d.ts +119 -0
- package/dist/core/ops/contract.js +142 -0
- package/dist/core/ops/engine-answer.d.ts +25 -0
- package/dist/core/ops/engine-answer.js +117 -0
- package/dist/core/ops/engine.d.ts +55 -0
- package/dist/core/ops/engine.js +649 -0
- package/dist/core/ops/save-files.d.ts +78 -0
- package/dist/core/ops/save-files.js +419 -0
- package/dist/core/ops/search.d.ts +9 -0
- package/dist/core/ops/search.js +55 -0
- package/dist/core/skills-registry.d.ts +16 -1
- package/dist/core/skills-registry.js +35 -2
- package/dist/core/telemetry.d.ts +32 -0
- package/dist/core/telemetry.js +38 -10
- package/dist/core/tool-profiles.d.ts +25 -0
- package/dist/core/tool-profiles.js +41 -0
- package/dist/installer/agent-config.d.ts +17 -4
- package/dist/installer/agent-config.js +22 -6
- package/dist/installer/agent-table.d.ts +3 -0
- package/dist/installer/agent-table.js +10 -7
- package/dist/installer/setup.d.ts +2 -0
- package/dist/installer/setup.js +9 -4
- package/dist/installer/version-check.d.ts +29 -9
- package/dist/installer/version-check.js +81 -28
- package/dist/mcp/command.js +7 -0
- package/dist/mcp/hosted-mount.d.ts +27 -2
- package/dist/mcp/hosted-mount.js +53 -23
- package/dist/mcp/legacy-toolset.d.ts +27 -0
- package/dist/mcp/legacy-toolset.js +43 -0
- package/dist/mcp/ops-surface.d.ts +59 -0
- package/dist/mcp/ops-surface.js +443 -0
- package/dist/mcp/server.d.ts +35 -11
- package/dist/mcp/server.js +234 -89
- package/dist/mcp/tool-results.d.ts +26 -0
- package/dist/mcp/tool-results.js +81 -0
- package/dist/mcp/tool-surface.d.ts +65 -0
- package/dist/mcp/tool-surface.js +317 -0
- package/dist/mcp/tools/app-tools.js +9 -2
- package/dist/mcp/tools/asset-tools.js +55 -53
- package/dist/mcp/tools/audit-tools.js +21 -21
- package/dist/mcp/tools/debug-tools.js +6 -6
- package/dist/mcp/tools/fabricate-tools.js +6 -6
- package/dist/mcp/tools/generate-tools.js +76 -70
- package/dist/mcp/tools/project-tools.d.ts +9 -4
- package/dist/mcp/tools/project-tools.js +16 -10
- package/dist/mcp/tools/scene-tools.js +12 -23
- package/dist/mcp/tools/script-tools.js +9 -5
- package/dist/mcp/tools/with-engine.d.ts +6 -0
- package/dist/mcp/tools/with-engine.js +19 -0
- package/gemini-extension.json +4 -12
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/junie/README.md +1 -1
- package/integrations/lm-studio/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/visual-studio/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +79 -51
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/product-map/resource.yaml +2 -2
- package/library/skills/3d-lighting/SKILL.md +53 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +119 -117
- package/library/skills/adaptive-music/SKILL.md +19 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +22 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +41 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +21 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +10 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/resource.yaml +1 -1
- package/library/skills/bounded-engine-runs/SKILL.md +1 -1
- package/library/skills/bounded-engine-runs/resource.yaml +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorm-game/resource.yaml +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/brainstorming/resource.yaml +1 -1
- package/library/skills/browse-templates/SKILL.md +1 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +2 -2
- package/library/skills/camera-rigs/resource.yaml +1 -1
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -0
- package/library/skills/character-animation-wiring/SKILL.md +4 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +55 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +3 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +24 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +58 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +16 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +239 -0
- package/library/skills/concept-to-level/references/technical-rules.md +150 -0
- package/library/skills/concept-to-level/resource.yaml +44 -0
- package/library/skills/create-asset-sheet/SKILL.md +19 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +2 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +23 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +22 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +20 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +6 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +7 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +14 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +33 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +8 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +4 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +30 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +3 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +1 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +2 -2
- package/library/skills/instantiate-asset-pack/resource.yaml +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +1 -0
- package/library/skills/make-game/SKILL.md +4 -4
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/make-game/references/3d-fps.md +1 -1
- package/library/skills/make-game/references/3d-horror.md +1 -1
- package/library/skills/make-game/references/3d-third-person.md +2 -2
- package/library/skills/make-game/resource.yaml +1 -1
- package/library/skills/multiplayer/SKILL.md +1 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +1 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +8 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +1 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +22 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +11 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +24 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +27 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +20 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +25 -19
- package/library/skills/prop-model/resource.yaml +1 -1
- package/library/skills/psx-retro-rendering/resource.yaml +1 -0
- package/library/skills/publish-your-game/SKILL.md +16 -6
- package/library/skills/publish-your-game/resource.yaml +3 -3
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -0
- package/library/skills/release-readiness/SKILL.md +1 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +23 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +1 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +2 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +66 -636
- package/library/skills/scene-scripting/references/ctx-api.md +184 -0
- package/library/skills/scene-scripting/references/recipes-2d-ui.md +193 -0
- package/library/skills/scene-scripting/references/recipes-3d.md +280 -0
- package/library/skills/scene-scripting/resource.yaml +4 -4
- package/library/skills/scene-to-level/SKILL.md +2 -2
- package/library/skills/scene-to-level/resource.yaml +1 -1
- package/library/skills/skill-create/resource.yaml +1 -0
- package/library/skills/skill-improve/resource.yaml +1 -0
- package/library/skills/skill-test/SKILL.md +2 -2
- package/library/skills/skill-test/resource.yaml +1 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +1 -0
- package/library/skills/skybox-panorama/SKILL.md +27 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +29 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +14 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +32 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +3 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +3 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +7 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +48 -32
- package/library/skills/summer-apps/manifest.md +1 -1
- package/library/skills/summer-apps/minimal-app.md +7 -7
- package/library/skills/summer-apps/resource.yaml +1 -1
- package/library/skills/summer-apps/sdk-reference.md +5 -5
- package/library/skills/summer-apps-design/SKILL.md +1 -1
- package/library/skills/summer-apps-design/resource.yaml +1 -1
- package/library/skills/summer-assets/SKILL.md +56 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-store/SKILL.md +1 -1
- package/library/skills/text-to-motion/SKILL.md +30 -23
- package/library/skills/text-to-motion/prompts-and-controls.md +5 -5
- package/library/skills/text-to-motion/resource.yaml +1 -1
- package/library/skills/text-to-motion/rigging-for-text-motion.md +2 -2
- package/library/skills/tileable-texture/SKILL.md +19 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +28 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +41 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +47 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +6 -5
- package/library/skills/using-summer/resource.yaml +1 -1
- package/library/skills/vehicle-model/SKILL.md +65 -57
- package/library/skills/vehicle-model/resource.yaml +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verification-before-completion/resource.yaml +1 -1
- package/library/skills/verifying-scenes/SKILL.md +2 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +2 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +15 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +7 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +23 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +20 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +13 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +12 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +71 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +1 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +1 -1
- package/library/skills/writing-skills/resource.yaml +1 -0
- package/library/tools/add-node/GUIDE.md +14 -0
- package/library/tools/align-distribute-3d/GUIDE.md +7 -0
- package/library/tools/app-call/resource.yaml +1 -1
- package/library/tools/app-guide/resource.yaml +2 -2
- package/library/tools/app-page/resource.yaml +1 -1
- package/library/tools/app-screenshot/resource.yaml +19 -1
- package/library/tools/app-tools/resource.yaml +1 -1
- package/library/tools/attach-to-surface/GUIDE.md +15 -0
- package/library/tools/batch/GUIDE.md +27 -0
- package/library/tools/camera-bookmark/GUIDE.md +12 -0
- package/library/tools/capture-gameplay/GUIDE.md +3 -0
- package/library/tools/capture-gameplay/resource.yaml +3 -3
- package/library/tools/check-job/resource.yaml +1 -1
- package/library/tools/clear-console/GUIDE.md +3 -0
- package/library/tools/connect-ports/GUIDE.md +9 -0
- package/library/tools/connect-signal/GUIDE.md +14 -0
- package/library/tools/create-debug-report/GUIDE.md +10 -0
- package/library/tools/create-scene/GUIDE.md +10 -0
- package/library/tools/debug-views/GUIDE.md +7 -0
- package/library/tools/enable-plugin/GUIDE.md +3 -0
- package/library/tools/export-game/GUIDE.md +3 -0
- package/library/tools/export-game/resource.yaml +3 -3
- package/library/tools/export-templates/GUIDE.md +3 -0
- package/library/tools/fabricate-3d/GUIDE.md +19 -0
- package/library/tools/frame-nodes/GUIDE.md +9 -0
- package/library/tools/frame-shot/GUIDE.md +9 -0
- package/library/tools/game-control/GUIDE.md +9 -0
- package/library/tools/game-input/GUIDE.md +9 -0
- package/library/tools/game-probe/GUIDE.md +9 -0
- package/library/tools/generate-3d/resource.yaml +3 -3
- package/library/tools/generate-motion/resource.yaml +2 -2
- package/library/tools/get-console/GUIDE.md +9 -0
- package/library/tools/get-console/resource.yaml +5 -0
- package/library/tools/get-debugger-errors/GUIDE.md +7 -0
- package/library/tools/get-debugger-errors/resource.yaml +5 -0
- package/library/tools/get-debugger-warnings/GUIDE.md +7 -0
- package/library/tools/get-debugger-warnings/resource.yaml +5 -0
- package/library/tools/get-diagnostics/GUIDE.md +13 -0
- package/library/tools/get-project-context/GUIDE.md +25 -0
- package/library/tools/get-runtime-tree/GUIDE.md +7 -0
- package/library/tools/get-runtime-tree/resource.yaml +5 -0
- package/library/tools/get-scene-tree/GUIDE.md +11 -0
- package/library/tools/get-scene-tree/resource.yaml +5 -0
- package/library/tools/get-script-errors/GUIDE.md +5 -0
- package/library/tools/grep/GUIDE.md +11 -0
- package/library/tools/import-asset/GUIDE.md +8 -0
- package/library/tools/import-asset-by-id/GUIDE.md +12 -0
- package/library/tools/import-from-url/GUIDE.md +10 -0
- package/library/tools/import-from-url-batch/GUIDE.md +3 -0
- package/library/tools/import-hdri/GUIDE.md +16 -0
- package/library/tools/input-map-bind/GUIDE.md +11 -0
- package/library/tools/inspect-asset/GUIDE.md +14 -0
- package/library/tools/inspect-asset/resource.yaml +5 -0
- package/library/tools/inspect-node/GUIDE.md +11 -0
- package/library/tools/inspect-node/resource.yaml +5 -0
- package/library/tools/inspect-resource/GUIDE.md +7 -0
- package/library/tools/inspect-resource/resource.yaml +5 -0
- package/library/tools/inspect-runtime-node/GUIDE.md +7 -0
- package/library/tools/inspect-runtime-node/resource.yaml +5 -0
- package/library/tools/instantiate-scene/GUIDE.md +12 -0
- package/library/tools/is-running/GUIDE.md +3 -0
- package/library/tools/measure/GUIDE.md +8 -0
- package/library/tools/navigation-probe/GUIDE.md +9 -0
- package/library/tools/open/resource.yaml +2 -2
- package/library/tools/open-main-scene/GUIDE.md +6 -0
- package/library/tools/open-scene/GUIDE.md +8 -0
- package/library/tools/place-adjacent/GUIDE.md +7 -0
- package/library/tools/play/GUIDE.md +13 -0
- package/library/tools/project-setting/GUIDE.md +9 -0
- package/library/tools/publish-build/resource.yaml +6 -6
- package/library/tools/raycast/GUIDE.md +7 -0
- package/library/tools/read-file/GUIDE.md +10 -0
- package/library/tools/read-library/resource.yaml +5 -0
- package/library/tools/recent-events/GUIDE.md +7 -0
- package/library/tools/remove-node/GUIDE.md +3 -0
- package/library/tools/repeat-along/GUIDE.md +5 -0
- package/library/tools/replace-node/GUIDE.md +9 -0
- package/library/tools/replace-text/GUIDE.md +5 -0
- package/library/tools/run-editor-script/GUIDE.md +16 -0
- package/library/tools/run-script/GUIDE.md +30 -0
- package/library/tools/run-script/resource.yaml +6 -3
- package/library/tools/runtime-animate/GUIDE.md +7 -0
- package/library/tools/runtime-call/GUIDE.md +7 -0
- package/library/tools/runtime-set/GUIDE.md +9 -0
- package/library/tools/runtime-spawn/GUIDE.md +9 -0
- package/library/tools/save-scene/GUIDE.md +3 -0
- package/library/tools/scene-audit/GUIDE.md +29 -0
- package/library/tools/screenshot/GUIDE.md +17 -0
- package/library/tools/select-node/GUIDE.md +3 -0
- package/library/tools/set-prop/GUIDE.md +23 -0
- package/library/tools/set-resource-property/GUIDE.md +8 -0
- package/library/tools/shot-sheet/GUIDE.md +7 -0
- package/library/tools/snap-to-surface/GUIDE.md +17 -0
- package/library/tools/snapshot-diff/GUIDE.md +7 -0
- package/library/tools/starcast/GUIDE.md +12 -0
- package/library/tools/stop/GUIDE.md +3 -0
- package/library/tools/test-placement/GUIDE.md +7 -0
- package/library/tools/ui-actions/GUIDE.md +12 -0
- package/library/tools/ui-activate/GUIDE.md +11 -0
- package/library/tools/ui-screenshot/GUIDE.md +9 -0
- package/library/tools/ui-tree/GUIDE.md +10 -0
- package/library/tools/wait-for-event/GUIDE.md +11 -0
- package/library/tools/world-snapshot/GUIDE.md +9 -0
- package/library/tools/write-file/GUIDE.md +5 -0
- package/library/tools/zoom/GUIDE.md +5 -0
- package/package.json +6 -4
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +4 -12
- package/registry/generated/index.json +433 -339
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude.json +23 -22
- package/registry/generated/plugin.codex.json +4 -12
- package/registry/generated/plugin.cursor.json +4 -12
- package/registry/generated/plugin.factory.json +4 -12
- package/registry/generated/server.json +34 -0
- package/registry/generated/skills-index.md +119 -117
- package/registry/generated/skills-registry.json +153 -115
- package/registry/operations/fixtures/invalid-deprecated-without-replacement.json +60 -0
- package/registry/operations/fixtures/invalid-name.json +60 -0
- package/registry/operations/fixtures/invalid-publish-without-owner.json +82 -0
- package/registry/operations/fixtures/invalid-spend-without-estimate.json +42 -0
- package/registry/operations/fixtures/invalid-unknown-field.json +61 -0
- package/registry/operations/fixtures/valid-player-facing.json +82 -0
- package/registry/operations/fixtures/valid-read.json +60 -0
- package/registry/operations/fixtures/valid-spend.json +43 -0
- package/registry/operations/legacy-names.json +1206 -0
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# summer_fabricate_3d
|
|
2
|
+
|
|
3
|
+
Fabricate a 3D mesh asset by running a Blender Python (bpy) script in the USER'S OWN installed Blender — headless, supervised by the engine — then import the exported .glb into the project and optionally instantiate it into the open scene. Blender is a dependency the user installs; Summer never bundles, downloads, or brands it.
|
|
4
|
+
|
|
5
|
+
WHEN — the three asset classes neither generation nor the free library serve well:
|
|
6
|
+
- modular kits with exact dimensions and snapping (walls, pipes, fences, rails: array + boolean + bevel, one shared material) — generation cannot hold size and style across 30 pieces;
|
|
7
|
+
- VFX meshes (shatter pieces, curve sweeps, trails, LOD chains) — one-liners in bpy, absent in the engine;
|
|
8
|
+
- post-processing a generated model (decimate -> UV unwrap -> bake) before it goes into the scene.
|
|
9
|
+
WHEN NOT: a generic prop (barrel, crate, chair) -> summer_search_assets / summer_import_asset first, then summer_generate_3d; a character or any organic shape -> summer_generate_3d (scripted organic modelling is the documented failure mode); a blockout or placeholder -> summer_run_script primitives/CSG, instant and in-scene. Route with the asset-strategy skill; the fabricating-assets skill carries the bpy rules, recipes and the fix for each failure_reason.
|
|
10
|
+
|
|
11
|
+
SCRIPT CONTRACT: 'source' is plain bpy that must CREATE mesh objects and leave them linked in the scene — do NOT export and do NOT quit. The engine's bootstrap exports for you: modifiers applied, Geometry Nodes realized, +Y-up conversion, materials as Principled BSDF only, a procedural Base Color baked to a 2K texture; procedural Metallic/Roughness/Normal/Emission are NOT baked (see 'warnings'). Hidden or render-disabled objects are helpers (boolean cutters, guides), not exported, listed in 'skipped'. Model in metres. MESH/CURVE/SURFACE/META/FONT export as meshes, EMPTY/ARMATURE keep hierarchy, cameras and lights are dropped. Name your objects — they become node names.
|
|
12
|
+
|
|
13
|
+
REQUIRES BLENDER 4.2 LTS or newer. Resolution: 'blender_path' -> SUMMER_BLENDER_BIN in the editor's environment -> Editor Settings filesystem/import/blender/blender_path -> PATH, well-known install dirs, ~/.summer/tools/blender-*. Not found -> failure_reason blender_not_found with the exact fix and every path checked; relay it to the user as a one-line decision; never guess a path or install anything for them.
|
|
14
|
+
|
|
15
|
+
ONE fabrication runs at a time per editor (failure_reason busy: wait for the result, never fire two in parallel). There is no viewport feedback while the script runs, so keep scripts deterministic (fixed seeds) and verify afterwards.
|
|
16
|
+
|
|
17
|
+
Returns blender_version, blender_path, out_path, objects[{name, type, vertices, faces, triangles, materials, modifiers}], object_count, dimensions{x,y,z} (+Y up, source scale), warnings, baked, skipped, output, errors, exit_code, duration_ms, checkpoint; with import_to_scene also imported_node_path / scale_applied / instance_dimensions; no_rewind_point:true when no checkpoint exists. failure_reason: blender_not_found | blender_launch_failed | script_error (traceback_tail + script_line; fix the bpy for the reported blender_version) | timeout (raise max_seconds or split the job) | export_empty (check hide/render flags and collection links) | export_failed | export_missing | import_failed / instantiate_failed (the .glb IS at out_path: summer_instantiate_scene it yourself; importer message in summer_get_console) | busy | cancelled.
|
|
18
|
+
|
|
19
|
+
THE LOOP: summer_world_snapshot BEFORE (keep snapshot_id) -> summer_fabricate_3d with import_to_scene (+ target_size for real-world scale) -> read dimensions/warnings/skipped -> summer_snapshot_diff + summer_screenshot -> iterate. Never claim a visual result without the screenshot. An engine build without FabricateMesh returns a structured engine_lacks_op failure (nothing is sent): use summer_generate_3d / summer_search_assets, or update Summer Engine.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_frame_nodes
|
|
2
|
+
|
|
3
|
+
Frame one or more nodes with a camera fitted to their WORLD bounds and render it with the scene's REAL WorldEnvironment, lights, fog and tonemap (unlike summer_screenshot nodePath, which only works with the flat preview environment).
|
|
4
|
+
|
|
5
|
+
Pick the side with direction (front/back/left/right/top/iso) or an explicit from vector; fill sets how much of the frame they span. bookmark_name also saves the fitted pose so every later render (summer_shot_sheet, summer_debug_views, summer_screenshot framing:"bookmark") lines up with it. marks:true adds numbered labels mapped to node paths.
|
|
6
|
+
|
|
7
|
+
An explicit from is checked in-engine before you trust the image: if walls block the nodes, or the camera stands behind or inside a one-sided surface (its back is not drawn, so the image would look THROUGH the wall), the caption opens with a WARNING and the nearest valid from (+ fov) to pass back. With marks:true every labelled node gets an occlusion test (centre + 4 bounds points); hidden ones are noted "(hidden behind <path>)".
|
|
8
|
+
|
|
9
|
+
Returns the image + caption: the pose as Vector3 literals, the bounds, the environment used, the view check, and the mark list. Read-only: the scene file, the open tab and the undo history are never touched (the render is an offscreen copy of the SAVED scene). The image arrives inline; the caption carries poses, labels and numbers. Failures are structured (failure_reason), never a silent fallback.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_frame_shot
|
|
2
|
+
|
|
3
|
+
Smart framing: find good camera poses for a shot type automatically, measured in-engine against the real geometry.
|
|
4
|
+
|
|
5
|
+
shot: establishing (wide), eye_level (from a spawn node at player eye height), low_angle (hero, near the ground looking up: the camera moves closer and widens its FOV instead of sinking into the ground), detail (close-up), corridor (down a lane or corridor found inside the subject by a free-space scan, preferring the view in from its open end, walls on both sides).
|
|
6
|
+
|
|
7
|
+
How: candidate poses on a ring/hemisphere (or along the corridor line) at the distance where the subject fills the shot's target share of the frame; each is checked with a THICK sphere sweep to points on the subject (thin rays miss corners), a near-lens sphere (camera inside or touching geometry is nudged forward or rejected), a ray grid through the frame, and a small beauty render per pose. Walls/terrain blocking the subject reject a pose, and so does a camera behind or inside a one-sided surface (a sight line or a quarter of the frame meeting a wall from behind: its back is not drawn, so the image would look through it). Foliage, fences, props and pipes in front are allowed (wanted, up to a limit) as framing; transparent materials (alpha, scissor, glass, foliage cards) are see-through cover at partial weight. Scored on rule-of-thirds placement, frame fill, level horizon, sky share, depth behind the subject (no flat wall right behind it), empty or featureless areas, near-wall clearance, near/far value contrast, foreground framing, surfaces seen from behind, the key light's direction (side or front-side beats a flat front-lit face) and the world edge (sky or void below the horizon).
|
|
8
|
+
|
|
9
|
+
Returns the top 3 with score breakdowns and poses — three different views (one per side of the subject while the score allows, at least 25 degrees apart) — saves the best as a bookmark (default <shot>_<subject>), and renders the 3 as one sheet with real lighting (render:"best" or "none" to save context). Read-only: the scene file, the open tab and the undo history are never touched (the render is an offscreen copy of the SAVED scene). The image arrives inline; the caption carries poses, labels and numbers. Failures are structured (failure_reason), never a silent fallback. Saving the bookmark writes res://.summer/camera_bookmarks.json.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_game_control
|
|
2
|
+
|
|
3
|
+
Control the clock of the RUNNING game and list instances. action:'pause' suspends it (GamePause — Engine time frozen, physics inactive; SceneTree.paused untouched), 'resume' lifts the suspension, 'step' advances EXACTLY frames (1..600) of kind 'physics' (default) or 'process' and leaves the game suspended (GameStep), 'speed' sets the user time scale (GameSpeed, 0.25 = quarter speed), 'instances' lists every live game instance (ListGameInstances: name, mode, pid, attached, breaked, scene, seed, fixed_fps, deterministic, summer_capture).
|
|
4
|
+
|
|
5
|
+
Frame stepping is how you make exact assertions: pause -> summer_game_probe -> act -> step 1 -> probe; the step result reports before/after frame counters, exact, overshoot, and draws the last stepped frame before replying so the following probe shows it. A minimized game window draws no frames and cannot step (timeout). step and pause answer game_breaked while the game sits at a breakpoint. GameSpeed rides a no-reply channel: acknowledged:false means the engine could not read the new time_scale back (older game build) — verify with summer_game_probe time_scale.
|
|
6
|
+
|
|
7
|
+
'instances' is also the boot check after summer_play {instance, mode:'offscreen'}: address an instance only once attached:true (before that the ops answer request_failed). THE LOOP: summer_play (add instance + mode:'offscreen' for a disposable instance; deterministic:true + seed for a reproducible run; fixed_fps for exact timing) -> wait for boot (summer_is_running, or summer_game_control action:'instances' showing attached:true) -> summer_game_probe BEFORE (frame-stamped state + pixels) -> act (summer_runtime_set / summer_runtime_call / summer_game_input) -> summer_game_control action:'step' for exact frames, or let it run -> summer_game_probe AFTER -> assert on the two probes. Never claim something moved, spawned or fired without a probe that shows it.
|
|
8
|
+
|
|
9
|
+
Needs a RUNNING game: failure_reason game_not_running (summer_play first), request_failed (debug session still attaching — wait, retry), unknown_instance (summer_game_control action:'instances'), game_breaked (the game sits at a breakpoint — continue it first), timeout (game wedged, minimized or breaked — summer_get_debugger_errors, or summer_stop + summer_play), unsupported (the running game predates the summer capture; restart it after updating). All runtime paths are ABSOLUTE ('/root/Main/Player') and come from summer_game_probe tree / summer_get_runtime_tree. On an engine build that predates these ops the result is a structured engine_lacks_op failure; the fallback for exact frames is a RunVerification probe awaiting physics_frame N times.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_game_input
|
|
2
|
+
|
|
3
|
+
Drive the RUNNING game's input like a player would. action:'script' schedules up to 1000 timed synthetic events (SimulateInputScript): [{at_frame: 0, type:'action', action:'move_right', hold_ms: 500}, {at_frame: 30, type:'action', action:'jump', hold_ms: 50}]; types action | key (keycode / physical_keycode) | mouse_click (position [x,y], button) | axis (action_negative/action_positive, signed strength) | raw ({class, props} — a recorded InputEvent). clock 'frame' (at_frame, exact) or 'ms' (at_ms — exact only when the instance runs with fixed_fps, else approximate; the result reports clock_mapping). action:'record_start' / 'record_stop' capture the game's REAL input into res://.summer/replays/<id>.json (InputRecordStart/Stop — cap 20,000 events / ~1 MiB, truncated:true when hit); action:'replay' plays a recording (or inline events) back (InputReplay), with seed asserting reproducibility on a deterministic offscreen instance.
|
|
4
|
+
|
|
5
|
+
script returns {scheduled, applied, rejected[{index, failure_reason, error}], first_frame, last_frame, completed, clock_mapping}; per-event rejections (unknown_action: not in the project InputMap — summer_input_map_bind, or use type:'key') are non-fatal unless all_rejected. ONE script in flight per instance: a second call answers busy — wait for the first. wait:true (default) blocks until the last event fires but the engine caps it at 20 s; a longer script uses wait:false and observes with summer_game_probe. replay returns the same shape plus {recording, deterministic}; seed on an instance not started with summer_play {mode:'offscreen', deterministic:true} answers nondeterministic_instance.
|
|
6
|
+
|
|
7
|
+
Scripts vs recordings: a script is the readable, editable repro you write from the spec; a recording is the exact repro of what a human (or a script) actually did — replay it on a deterministic instance for an A/B under identical inputs. Input is an ACTION: prove what it caused with summer_game_probe before/after (or summer_game_control action:'step' for the exact frame). THE LOOP: summer_play (add instance + mode:'offscreen' for a disposable instance; deterministic:true + seed for a reproducible run; fixed_fps for exact timing) -> wait for boot (summer_is_running, or summer_game_control action:'instances' showing attached:true) -> summer_game_probe BEFORE (frame-stamped state + pixels) -> act (summer_runtime_set / summer_runtime_call / summer_game_input) -> summer_game_control action:'step' for exact frames, or let it run -> summer_game_probe AFTER -> assert on the two probes. Never claim something moved, spawned or fired without a probe that shows it.
|
|
8
|
+
|
|
9
|
+
Needs a RUNNING game: failure_reason game_not_running (summer_play first), request_failed (debug session still attaching — wait, retry), unknown_instance (summer_game_control action:'instances'), game_breaked (the game sits at a breakpoint — continue it first), timeout (game wedged, minimized or breaked — summer_get_debugger_errors, or summer_stop + summer_play), unsupported (the running game predates the summer capture; restart it after updating). All runtime paths are ABSOLUTE ('/root/Main/Player') and come from summer_game_probe tree / summer_get_runtime_tree. engine_lacks_op on an older build names the fallback (single SimulateInput ops via summer_batch, or a RunVerification probe's press()/key()).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_game_probe
|
|
2
|
+
|
|
3
|
+
State AND pixels of ONE frame of the RUNNING game, atomically (GameProbe): the live scene tree (tree {path, depth, limit}), up to 64 property reads (props ['/root/Main/Player:position', '/root/Main/HUD/Health:value']) and a screenshot of the game viewport, all stamped with the SAME frame counters. This is the evidence tool of the playtest loop — the only read where "what the tree says" and "what the screen shows" cannot come from different moments.
|
|
4
|
+
|
|
5
|
+
You SEE the screenshot as an image block; the text block carries the frame stamp ({frame: {process_frames, physics_frames, frames_drawn}, image_frame, suspended, paused, time_scale}), values {key: Godot literal string}, missing[] (keys that did not resolve — a typo or a node that is gone), tree/total_nodes/truncated. Two probes around an action are a claim's proof: cite both frame numbers. screenshot:false is the cheap state-only read (works when the window draws nothing). max_dim (default 1280) bounds the image. Unlike summer_screenshot target:'game', the capture happens game-side, so it works for offscreen and floating instances.
|
|
6
|
+
|
|
7
|
+
THE LOOP: summer_play (add instance + mode:'offscreen' for a disposable instance; deterministic:true + seed for a reproducible run; fixed_fps for exact timing) -> wait for boot (summer_is_running, or summer_game_control action:'instances' showing attached:true) -> summer_game_probe BEFORE (frame-stamped state + pixels) -> act (summer_runtime_set / summer_runtime_call / summer_game_input) -> summer_game_control action:'step' for exact frames, or let it run -> summer_game_probe AFTER -> assert on the two probes. Never claim something moved, spawned or fired without a probe that shows it.
|
|
8
|
+
|
|
9
|
+
Needs a RUNNING game: failure_reason game_not_running (summer_play first), request_failed (debug session still attaching — wait, retry), unknown_instance (summer_game_control action:'instances'), game_breaked (the game sits at a breakpoint — continue it first), timeout (game wedged, minimized or breaked — summer_get_debugger_errors, or summer_stop + summer_play), unsupported (the running game predates the summer capture; restart it after updating). All runtime paths are ABSOLUTE ('/root/Main/Player') and come from summer_game_probe tree / summer_get_runtime_tree. A probe still answers while the game is breaked. On an engine build that predates GameProbe the result is a structured engine_lacks_op failure; fall back to summer_get_runtime_tree + summer_screenshot target:'game' (two calls, two frames).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: tool/generate-3d
|
|
2
2
|
kind: tool
|
|
3
3
|
version: 1.0.2
|
|
4
|
-
summary: Generate a 3D model from text or images via Summer Studio, with optional auto-rig and animation pipeline;
|
|
4
|
+
summary: Generate a 3D model from text or images via Summer Studio, with optional auto-rig and animation pipeline; returns a job id to poll with summer_check_job.
|
|
5
5
|
use_when:
|
|
6
6
|
- creating a 3D asset or character from a prompt or reference image
|
|
7
7
|
- '"make me a low-poly tree / a sci-fi crate / a goblin for my game"'
|
|
@@ -95,8 +95,8 @@ input_schema:
|
|
|
95
95
|
description: Character height used by auto-rigging
|
|
96
96
|
wait:
|
|
97
97
|
type: boolean
|
|
98
|
-
default:
|
|
99
|
-
description:
|
|
98
|
+
default: false
|
|
99
|
+
description: Block until the job finishes (up to 10 min) and return the result. Default false returns the jobId at once; poll summer_check_job.
|
|
100
100
|
options:
|
|
101
101
|
type: object
|
|
102
102
|
additionalProperties: {}
|
|
@@ -82,8 +82,8 @@ input_schema:
|
|
|
82
82
|
description: Stable retry key so the same logical request is not billed or queued twice
|
|
83
83
|
wait:
|
|
84
84
|
type: boolean
|
|
85
|
-
default:
|
|
86
|
-
description:
|
|
85
|
+
default: false
|
|
86
|
+
description: Block until the job finishes (up to 10 min) and return the result. Default false returns the jobId at once; poll summer_check_job.
|
|
87
87
|
options:
|
|
88
88
|
type: object
|
|
89
89
|
additionalProperties: {}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_get_console
|
|
2
|
+
|
|
3
|
+
Read recent messages from the editor's Output panel (print() output, editor-side warnings and errors).
|
|
4
|
+
|
|
5
|
+
SCOPE: the editor console ONLY. Runtime errors from a played game are collected by the debugger, not the console — right after summer_play this tool can honestly report errors 0 while summer_get_debugger_errors holds several. Never treat this tool alone as the post-play verdict: read summer_get_diagnostics (console + debugger + script errors together) first, then come here for message bodies. Every result carries a "_scope" note restating this.
|
|
6
|
+
|
|
7
|
+
Output is post-processed for token economy: consecutive identical messages collapse into one entry with a "(×N)" count suffix, and the response carries a "_filter" summary so you can see what was hidden. Message types come straight from the editor log (error / warning / std / editor); errors_only=true (default) drops the std/editor lines — startup banners and print() output — and keeps errors and warnings. Use errors_only=false to read print() output, raw=true to bypass all shaping.
|
|
8
|
+
|
|
9
|
+
Use after summer_get_diagnostics indicates console issues, or to check what your print() statements said.
|
|
@@ -60,6 +60,11 @@ input_schema:
|
|
|
60
60
|
type: boolean
|
|
61
61
|
default: false
|
|
62
62
|
description: Bypass dedupe and level filtering — return engine output verbatim
|
|
63
|
+
maxCharacters:
|
|
64
|
+
type: integer
|
|
65
|
+
minimum: 500
|
|
66
|
+
maximum: 1000000
|
|
67
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
63
68
|
additionalProperties: false
|
|
64
69
|
authority:
|
|
65
70
|
filesystem: false
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_get_debugger_errors
|
|
2
|
+
|
|
3
|
+
Read runtime errors from the debugger. These occur while the game is running (null references, missing nodes, physics errors). Different from console output — these come from the debugger, not print statements.
|
|
4
|
+
|
|
5
|
+
For warning text, use summer_get_debugger_warnings (separate tool — engine returns warning count here but not the bodies).
|
|
6
|
+
|
|
7
|
+
Output is deduped: identical errors firing every frame collapse into one entry with a "(×N)" count suffix. A "_filter" summary tells you exactly what was collapsed or truncated. Use raw=true to bypass shaping when you really need every entry.
|
|
@@ -47,6 +47,11 @@ input_schema:
|
|
|
47
47
|
type: boolean
|
|
48
48
|
default: false
|
|
49
49
|
description: Bypass dedupe — return engine output verbatim
|
|
50
|
+
maxCharacters:
|
|
51
|
+
type: integer
|
|
52
|
+
minimum: 500
|
|
53
|
+
maximum: 1000000
|
|
54
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
50
55
|
additionalProperties: false
|
|
51
56
|
authority:
|
|
52
57
|
filesystem: false
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_get_debugger_warnings
|
|
2
|
+
|
|
3
|
+
Read runtime warnings from the debugger panel. Warnings are non-fatal issues the game flags during play: missing optional resources, dead signal connections, deprecated API use, large allocations, physics warnings, etc.
|
|
4
|
+
|
|
5
|
+
Returns structured entries with file/line/function/error_descr/callstack — same shape as summer_get_debugger_errors but filtered to severity = "warning". Engine-internal warnings without a source file are filtered out as noise.
|
|
6
|
+
|
|
7
|
+
Use this when summer_get_diagnostics shows a non-zero `debugger.warnings` count and you want to see what they actually say.
|
|
@@ -43,6 +43,11 @@ input_schema:
|
|
|
43
43
|
type: boolean
|
|
44
44
|
default: false
|
|
45
45
|
description: Bypass dedupe
|
|
46
|
+
maxCharacters:
|
|
47
|
+
type: integer
|
|
48
|
+
minimum: 500
|
|
49
|
+
maximum: 1000000
|
|
50
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
46
51
|
additionalProperties: false
|
|
47
52
|
authority:
|
|
48
53
|
filesystem: false
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# summer_get_diagnostics
|
|
2
|
+
|
|
3
|
+
Quick overview of all errors and warnings from the editor console, the runtime debugger, and script errors together. Returns error counts and a guidance message.
|
|
4
|
+
|
|
5
|
+
ALWAYS call this FIRST before diving into summer_get_console or summer_get_debugger_errors. It tells you where to look. It is also THE post-play read: a played game's runtime errors land in the debugger section here (and in summer_get_debugger_errors), never in the editor console — summer_get_console alone can honestly report errors 0 right after a play session that produced several.
|
|
6
|
+
|
|
7
|
+
By default the response is a prioritized view: errors first, then warnings, then a small capped tail of recent info/std noise. Counts (console totals, debugger totals) are always complete — only low-severity message bodies are trimmed, and a "_view" block reports exactly what was suppressed. Pass includeAll: true for the full untrimmed engine payload.
|
|
8
|
+
|
|
9
|
+
Typical workflow after making changes or playing:
|
|
10
|
+
1. summer_get_diagnostics — are there issues? (after a play session: check debugger.errors)
|
|
11
|
+
2. If errors: summer_get_debugger_errors (runtime, with stacks) or summer_get_console (editor output) for details
|
|
12
|
+
3. Fix the issues
|
|
13
|
+
4. summer_get_diagnostics again to verify
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# summer_get_project_context
|
|
2
|
+
|
|
3
|
+
Get essential project context before editing. The default payload is COMPACT (a few KB):
|
|
4
|
+
- project name and project path, current scene path, main scene path
|
|
5
|
+
- sceneSummary: the open scene's root node and node count (not its tree)
|
|
6
|
+
- health: the engine's scalar status fields plus capability COUNTS
|
|
7
|
+
- projectMemory: the .summer summary — GameSoul/build-plan/memory files and
|
|
8
|
+
`pin` (.summer/project.json: which template at which commit started this
|
|
9
|
+
project, toolkit version, created_at)
|
|
10
|
+
- warnings: capabilitySkewWarning (only when the engine build and this CLI
|
|
11
|
+
have drifted apart — non-fatal; explains upcoming 'unknown op' failures),
|
|
12
|
+
rebindError, summerUpdateNotice
|
|
13
|
+
- omitted: how to ask for each heavy block that was left out
|
|
14
|
+
|
|
15
|
+
Use this first in every fresh chat to avoid guessing scene filenames or editing the wrong scene. It also binds the session to the open project.
|
|
16
|
+
|
|
17
|
+
Heavy blocks are opt-in with include: 'scene_tree' (the open scene's tree, up
|
|
18
|
+
to 200 nodes; for one subtree prefer summer_world_snapshot path_prefix),
|
|
19
|
+
'capabilities' (the engine's full op lists), 'settings' (project settings in
|
|
20
|
+
project.data.entries, trimmed to the curated default groups: application/,
|
|
21
|
+
display/window/, the project's input/ actions, default gravity,
|
|
22
|
+
rendering/renderer/, the 2D default texture filter; the trim is declared in
|
|
23
|
+
settingsTruncated / totalSettings / settingsPrefixesIncluded /
|
|
24
|
+
settingsPrefixesExcluded). settingsPrefixes (e.g. ["audio/", "layer_names/"])
|
|
25
|
+
or settingsPrefix read other settings groups and imply 'settings'.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_get_runtime_tree
|
|
2
|
+
|
|
3
|
+
Scene tree of the RUNNING GAME — live runtime state, not the edited scene. Use it during playtests to see what actually spawned: dynamically created enemies/projectiles/UI, autoloads, pooled nodes — everything summer_get_scene_tree (an EDITOR read) can never show. Inspecting live keeps the bug alive; stopping the game to look usually resets it.
|
|
4
|
+
|
|
5
|
+
Returns {tree: {name, class, path, children}, total_nodes, truncated}. Depth/limit are capped and truncation is declared — never assume a capped tree is complete. Drill into one node's live properties with summer_inspect_runtime_node.
|
|
6
|
+
|
|
7
|
+
Needs a running game: fails with failure_reason "game_not_running" otherwise — start with summer_play, then re-run.
|
|
@@ -53,6 +53,11 @@ input_schema:
|
|
|
53
53
|
type: integer
|
|
54
54
|
exclusiveMinimum: 0
|
|
55
55
|
description: Maximum nodes to return (engine default 500).
|
|
56
|
+
maxCharacters:
|
|
57
|
+
type: integer
|
|
58
|
+
minimum: 500
|
|
59
|
+
maximum: 1000000
|
|
60
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
56
61
|
additionalProperties: false
|
|
57
62
|
authority:
|
|
58
63
|
filesystem: false
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# summer_get_scene_tree
|
|
2
|
+
|
|
3
|
+
Get a scene tree. Pass scenePath to read that exact in-memory/open scene;
|
|
4
|
+
omit it only when you intentionally want the currently visible editor scene.
|
|
5
|
+
Scene mutations load their explicit target, so a follow-up targeted read does
|
|
6
|
+
not require OpenScene.
|
|
7
|
+
|
|
8
|
+
The engine defaults to depth 2 and limit 200 nodes and SILENTLY truncates
|
|
9
|
+
deeper hierarchies (the response then carries truncated: true and a visited
|
|
10
|
+
count lower than the real node count). Pass an explicit depth (e.g. 10) to
|
|
11
|
+
read a full tree — a 102-node scene returns only 61 nodes at the defaults.
|
|
@@ -43,6 +43,11 @@ input_schema:
|
|
|
43
43
|
type: integer
|
|
44
44
|
exclusiveMinimum: 0
|
|
45
45
|
description: Maximum number of nodes to return. Engine default is 200.
|
|
46
|
+
maxCharacters:
|
|
47
|
+
type: integer
|
|
48
|
+
minimum: 500
|
|
49
|
+
maximum: 1000000
|
|
50
|
+
description: Most characters of text to return (default 8000). A longer result is cut and says so.
|
|
46
51
|
additionalProperties: false
|
|
47
52
|
authority:
|
|
48
53
|
filesystem: false
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# summer_get_script_errors
|
|
2
|
+
|
|
3
|
+
Check a GDScript file for parse/compile errors without running the game.
|
|
4
|
+
|
|
5
|
+
Use after writing or editing a .gd file to verify it compiles. Returns line numbers, error messages, and severity. Much faster than running the game to discover script errors.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# summer_grep
|
|
2
|
+
|
|
3
|
+
Search project files with a regular expression (ripgrep, through the engine) and get file + line + text per match, optionally with context lines around each.
|
|
4
|
+
|
|
5
|
+
Use it to find things in big files without reading them whole: every '"fits_into"' in a kit manifest, the scenes of a kit (glob '*.tscn'), where a signal handler is defined. Then read exactly the part you need with summer_read_file (offset/limit, or json_path for JSON).
|
|
6
|
+
|
|
7
|
+
- path: a res:// directory or file (default: the whole project; .godot/ and .import/ are never searched).
|
|
8
|
+
- glob: ripgrep --glob filter ('*.gd', '**/*.json', '!addons/**'). Ripgrep skips files ignored by .gitignore unless a glob names them.
|
|
9
|
+
- context_lines (0-10): lines before/after each match, as before[] / after[].
|
|
10
|
+
- max_results (default 50, max 500) caps the matches; truncated:true says there were more. Lines are clipped to max_line_chars.
|
|
11
|
+
Case-insensitive unless case_sensitive:true. Read-only.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# summer_import_asset
|
|
2
|
+
|
|
3
|
+
Search the asset library and import the best match into the project in one step.
|
|
4
|
+
|
|
5
|
+
Use when the user wants a specific type of asset added: "Add a tree to the scene", "Import a wooden barrel".
|
|
6
|
+
Searches, picks the top result, downloads and imports it, then optionally adds it to the scene.
|
|
7
|
+
|
|
8
|
+
Requires authentication. If the user gets an auth error, they need to run 'npx -y summer-engine@latest login' in their terminal first. Summer Engine must be running.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# summer_import_asset_by_id
|
|
2
|
+
|
|
3
|
+
Import an exact Summer asset ID into the current project.
|
|
4
|
+
|
|
5
|
+
Use this when the asset was just generated, selected from my assets, or returned
|
|
6
|
+
by search. Unlike summer_import_asset, this does not search or guess: it fetches
|
|
7
|
+
the asset by ID, downloads it through Summer Engine, and runs Godot's import
|
|
8
|
+
pipeline. For 3D models, pass parent and scenePath to instantiate it in that
|
|
9
|
+
exact scene; it does not need to be the active editor tab.
|
|
10
|
+
|
|
11
|
+
Requires the Summer Engine app to be open with the project loaded (generation
|
|
12
|
+
itself does not — only this import step does).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# summer_import_from_url
|
|
2
|
+
|
|
3
|
+
Download a file from a URL and import it into the project. Triggers Godot's full import pipeline — generates .import files, extracts textures from .glb models, creates materials.
|
|
4
|
+
|
|
5
|
+
Use this for:
|
|
6
|
+
- 3D models (.glb, .gltf, .obj)
|
|
7
|
+
- Textures (.png, .jpg, .webp)
|
|
8
|
+
- Audio (.ogg, .wav, .mp3)
|
|
9
|
+
|
|
10
|
+
The path is auto-inferred from the URL filename if not specified. After import, the asset is immediately usable in scenes.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# summer_import_hdri
|
|
2
|
+
|
|
3
|
+
Search Poly Haven's CC0 HDRI library and import one as environment lighting.
|
|
4
|
+
|
|
5
|
+
The single cheapest visual-quality upgrade for a 3D scene: a real HDRI sky lights
|
|
6
|
+
and reflects the whole world. Searches ~1,000 CC0 HDRIs on Poly Haven's public API
|
|
7
|
+
(no account, no key), downloads the .hdr/.exr through the engine's import pipeline
|
|
8
|
+
into res://sky/, and returns a ready-to-run summer_run_script snippet that wires it
|
|
9
|
+
into the WorldEnvironment (PanoramaSkyMaterial + sky ambient/reflections).
|
|
10
|
+
|
|
11
|
+
Pass query ("sunset beach", "night city", "studio") to search, or assetId for an
|
|
12
|
+
exact Poly Haven id. resolution 2k is right for most games; 4k for hero skies.
|
|
13
|
+
All results are CC0 — no attribution required.
|
|
14
|
+
|
|
15
|
+
Requires the Summer Engine app to be open with the project loaded (the download
|
|
16
|
+
runs through the engine). No Summer login needed.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# summer_input_map_bind
|
|
2
|
+
|
|
3
|
+
Set up input controls. Creates the action if it doesn't exist, then binds events to it.
|
|
4
|
+
|
|
5
|
+
Event format:
|
|
6
|
+
- Keyboard: { type: "key", key: "W" } or { type: "key", key: "Space" }
|
|
7
|
+
- Mouse button: { type: "mouse_button", button: 1 } (1=left, 2=right, 3=middle)
|
|
8
|
+
- Common keys: "W", "A", "S", "D", "Space", "Shift", "E", "Escape", "Up", "Down", "Left", "Right"
|
|
9
|
+
|
|
10
|
+
Example: Bind jump to Space and W:
|
|
11
|
+
name: "jump", events: [{ type: "key", key: "Space" }, { type: "key", key: "W" }]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# summer_inspect_asset
|
|
2
|
+
|
|
3
|
+
Measure a 3D asset file (.tscn/.scn/.glb/.gltf, or a Mesh resource) WITHOUT adding it to any scene: it is loaded and instanced off-scene in the editor, measured, and freed. Call it once per kit piece before placing it, instead of guessing size, origin or facing.
|
|
4
|
+
|
|
5
|
+
Returns (all in the asset root's own frame, the frame position/rotation apply in), the facing evidence first:
|
|
6
|
+
- summary {aabb, origin {fraction, label e.g. "x:center y:min z:min"}, plane_pairs, port_like_loops [loop ids], triangles, mesh_count, anchor_count, collision_count, warnings?}. plane_pairs: the 2 largest pairs of opposite planes (a pair under 1% of the largest one's area is left out), each {larger, opposite (null for a single sheet), separation}; every plane {axis (e.g. "+z", only when the normal is within about 1 degree of it), normal, offset, area, one_sided}. one_sided true = its material culls back faces, so the plane is invisible from behind its normal: a single sheet that is one_sided faces along its normal and its back is the opposite axis. An oblique normal (no axis) means a baked yaw or a 45-degree corner face. warnings says when the triangle budget cut the analysis and which maxTriangles covers the whole mesh
|
|
7
|
+
- aabb, origin, meshes [{path, tris, min, max}], triangles total
|
|
8
|
+
- planes: the 6 largest planar face groups {normal, offset, area, tris, cull_back, one_sided}; normals follow the triangle winding (outward faces). You decide the front; the tool does not label facing
|
|
9
|
+
- open_loops: open boundary loops {id, index, mesh, center, direction (outward), radius, vertices, max_dev} in a stable order: grouped by the piece axis the direction is nearest (+X, -X, +Y, -Y, +Z, -Z; ~X/~Y/~Z when undecided), the outermost along that axis first, then by centre; never by radius. id names the loop by that order: "+Y" is the outermost loop facing +Y, "+Y#2" the next. summer_connect_ports accepts the id (or the index); the same id names the same loop on the placed node in any pose. detail "summary" (default) lists only port-like loops (radius over 2 cm with a partner loop facing more than 60 degrees away: the ends of a pipe, duct or bend; or the one opening of an end piece, such as an outlet's socket, on its bounding-box face) and says how many it omitted; detail "full" lists every loop, including the outline of flat sheets
|
|
10
|
+
- anchors: Marker3D nodes {name, path, position, forward (-Z), up}
|
|
11
|
+
- collision: CollisionShape3D nodes {path, shape, size/radius/height/faces, center, min, max}
|
|
12
|
+
- analysis {triangles_analyzed, triangle_budget, truncated}; a "truncated" object when a list was cut to fit 5 KB
|
|
13
|
+
|
|
14
|
+
maxTriangles 100-300000 (default 60000). Evidence is mesh_triangles. Uses the existing RunSceneScript op (in the live editor, read-only); an engine without it answers engine_lacks_op.
|
|
@@ -60,6 +60,11 @@ input_schema:
|
|
|
60
60
|
enum: [summary, full]
|
|
61
61
|
default: summary
|
|
62
62
|
description: "summary: open_loops lists only port-like loops (radius over 2 cm with a partner loop facing another way, or the one opening of an end piece on its bounding-box face), or none. full: every open loop, including the outline of flat sheets. Every loop has a stable id ('+Y', '+Y#2') that summer_connect_ports accepts. Both start with the summary block (AABB, origin, the two largest opposite plane pairs with one_sided flags, port-like loop ids)."
|
|
63
|
+
maxCharacters:
|
|
64
|
+
type: integer
|
|
65
|
+
minimum: 500
|
|
66
|
+
maximum: 1000000
|
|
67
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
63
68
|
required:
|
|
64
69
|
- path
|
|
65
70
|
additionalProperties: false
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# summer_inspect_node
|
|
2
|
+
|
|
3
|
+
Get all editable properties of a node with their current values, types, and resource info.
|
|
4
|
+
|
|
5
|
+
Call this before modifying a node to understand its current state. Returns every property the Godot inspector would show. Each prop carries the engine's raw Variant.Type integer as "type" plus its name as "type_name" (e.g. type 5 = TYPE_VECTOR2, 20 = TYPE_COLOR, 24 = TYPE_OBJECT); resource-valued props also carry resource_type / resource_path.
|
|
6
|
+
|
|
7
|
+
Reads the currently OPEN scene — "path" is relative to its root (there is no scenePath argument; open the scene first if needed).
|
|
8
|
+
|
|
9
|
+
Example: inspect a light to see its energy, color, shadow settings before changing them.
|
|
10
|
+
|
|
11
|
+
The full read is about 5 KB. To read only what you need, pass fields: property names or globs ('position', 'surface_material_override/*'), plus derived fields: transform (local position / rotation_degrees / scale, and a Transform3D literal for 3D nodes), global_transform (world origin + Transform3D, composed from the world snapshot), scene_file_path (the scene this node instances), aabb (world bounds), warnings. Example: fields:['transform','global_transform','scene_file_path'] is a few hundred bytes. missing_fields and unavailable say what could not be read.
|
|
@@ -42,6 +42,11 @@ input_schema:
|
|
|
42
42
|
type: string
|
|
43
43
|
maxItems: 48
|
|
44
44
|
description: "Only these fields: property names or globs (e.g. 'position', 'surface_material_override/*') and the derived fields transform, global_transform, scene_file_path, aabb, warnings. Omit for every property."
|
|
45
|
+
maxCharacters:
|
|
46
|
+
type: integer
|
|
47
|
+
minimum: 500
|
|
48
|
+
maximum: 1000000
|
|
49
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
45
50
|
required:
|
|
46
51
|
- path
|
|
47
52
|
additionalProperties: false
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_inspect_resource
|
|
2
|
+
|
|
3
|
+
Read a resource: a material, mesh, shape, texture, environment, or a scene/model file.
|
|
4
|
+
|
|
5
|
+
Two forms, pass exactly one:
|
|
6
|
+
- path: a resource FILE ('res://materials/ground.tres', a mesh 'res://kit/meshes/wall_01.res', 'res://models/player.glb'), loaded read-only in the editor. A Mesh returns its AABB, surface_count and per surface the primitive, vertex and index counts, attributes, triangles and material (class, path or embedded, albedo for standard materials), plus the unique materials and blend shapes. A scene or model (.tscn/.glb/.gltf) returns its node count, the first 40 nodes with type, instanced scene and mesh, and its meshes; summer_inspect_asset measures it (AABB, planes, ports). Every other resource (and a mesh) returns its editor properties that differ from the class default (props), with props_at_default counting the rest.
|
|
7
|
+
- nodePath + property: a resource a node of the ACTIVE scene tab holds, e.g. nodePath 'Floor', property 'mesh'. For example, summer_inspect_node tells you a MeshInstance3D has a "StandardMaterial3D" material_override — this form returns its albedo_color, metallic, roughness, etc.
|
|
@@ -47,6 +47,11 @@ input_schema:
|
|
|
47
47
|
minLength: 1
|
|
48
48
|
maxLength: 128
|
|
49
49
|
description: With nodePath, the node property holding the resource, e.g. 'mesh', 'material_override', 'shape', 'environment'.
|
|
50
|
+
maxCharacters:
|
|
51
|
+
type: integer
|
|
52
|
+
minimum: 500
|
|
53
|
+
maximum: 1000000
|
|
54
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
50
55
|
additionalProperties: false
|
|
51
56
|
authority:
|
|
52
57
|
filesystem: false
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_inspect_runtime_node
|
|
2
|
+
|
|
3
|
+
Live properties of ONE node in the RUNNING GAME: {node: {path, class, properties, children_names}} with a curated common-property set (transform, visibility, physics state, ...). The runtime counterpart of summer_inspect_node (which reads the EDITED scene) — use it to answer "what are this enemy's actual stats right now", "where IS the player", "did that flag flip" without stopping the game and losing the state.
|
|
4
|
+
|
|
5
|
+
Find the path with summer_get_runtime_tree first — runtime paths (e.g. '/root/Main/Enemies/Goblin3') often differ from edited-scene paths because nodes are spawned, renamed, or reparented at runtime.
|
|
6
|
+
|
|
7
|
+
Needs a running game: fails with failure_reason "game_not_running" otherwise — start with summer_play, then re-run.
|
|
@@ -43,6 +43,11 @@ input_schema:
|
|
|
43
43
|
path:
|
|
44
44
|
type: string
|
|
45
45
|
description: Runtime node path, e.g. '/root/Main/Player'. Get it from summer_get_runtime_tree.
|
|
46
|
+
maxCharacters:
|
|
47
|
+
type: integer
|
|
48
|
+
minimum: 500
|
|
49
|
+
maximum: 1000000
|
|
50
|
+
description: Most characters of text to return (default 4000). A longer result is cut and says so.
|
|
46
51
|
required:
|
|
47
52
|
- path
|
|
48
53
|
additionalProperties: false
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# summer_instantiate_scene
|
|
2
|
+
|
|
3
|
+
Add an existing scene or 3D model as a child node. Use this to:
|
|
4
|
+
- Add a .tscn prefab (reusable scene) as a child
|
|
5
|
+
- Add a .glb/.gltf 3D model into the scene
|
|
6
|
+
- Compose scenes from smaller scenes (e.g., add a "Player" scene into a "Level" scene)
|
|
7
|
+
|
|
8
|
+
The scene must already exist in the project. Use summer_import_from_url first if importing from external sources.
|
|
9
|
+
|
|
10
|
+
PASS target_size FOR IMPORTED MODELS. Downloaded/generated .glb assets arrive at arbitrary scale (a "chair" can be 40 units tall). target_size uniformly scales the instanced subtree so its largest world-AABB dimension equals that many units — commit to real-world size: chair 1.0, door 2.0, car 4.5, person 1.7, tree 6-10. The result then reports dimensions + scale_applied; verify placement afterwards (summer_world_snapshot AABBs, summer_screenshot). Older engine builds ignore target_size — when the result lacks scale_applied, this tool appends a note and you must scale the node yourself (summer_set_prop scale) and re-check.
|
|
11
|
+
|
|
12
|
+
PLACE IT IN THE SAME CALL: position, rotation_degrees and scale ([x, y, z], parent-local, like summer_set_prop), or transform (a "Transform3D(...)" string). The instance is created, then those properties are set on the exact node path the receipt reports (a name collision rename is followed), then the scene is saved: one call per piece, no window at the origin. The result adds placement {nodePath, applied, fields}. Do not combine transform with the others, or scale/transform with target_size. Measure a kit piece first with summer_inspect_asset.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# summer_measure
|
|
2
|
+
|
|
3
|
+
Measure placement between specific nodes from their visible-mesh bounds (evidence visual_aabb). Read-only, never saves. Complements summer_starcast (which reports clearance around ONE node in 26 directions).
|
|
4
|
+
|
|
5
|
+
mode pair (a, b): per axis {gap (> 0 clearance, < 0 overlap depth), relation gap|touching|overlap, a/b intervals, delta_min/max/center (b minus a)} and boxes_overlap. Catches facade gaps and modules that overlap.
|
|
6
|
+
mode plane (nodes, face): whether that face of every node lies on one plane: {coplanar, plane (median), spread, nodes [{path, face, deviation, off_plane: proud|recessed}]}. Catches modules standing proud of a facade line. face '+z' = the face pointing along +z.
|
|
7
|
+
|
|
8
|
+
space "local" measures along the axes of a (pair) or nodes[0] (plane), for rotated facades. tolerance (default 5 mm) decides touching / coplanar.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# summer_navigation_probe
|
|
2
|
+
|
|
3
|
+
Inspect whether two explicit world-space points are connected by the targeted 3D scene's built-in Godot navigation map without changing or saving the scene.
|
|
4
|
+
|
|
5
|
+
Returns navigation readiness and its reason, map iteration and region counts, requested and layer-filtered snapped endpoints, snap distances, conservative reachability, full route length, and at most 16 deterministic route points. A path is reachable only when it terminates at both snapped endpoints within the reported tolerance.
|
|
6
|
+
|
|
7
|
+
ready:false means navigation evidence is unavailable, not that the route is unreachable. In particular, map iteration 0 precedes the first usable synchronization and can return silently empty paths; iteration 1 and later are usable. evidence is always navigation. Normal results are capped below 5 KB.
|
|
8
|
+
|
|
9
|
+
Always pass an exact scenePath and finite world-space start/end points. This read-only tool never uses editor selection, creates undo history, or calls SaveScene. On an engine build that predates NavigationProbe3D the result is a structured engine_lacks_op failure naming the fallback.
|
|
@@ -9,7 +9,7 @@ use_when:
|
|
|
9
9
|
- 'handing the user a link instead of opening a browser (open: false), or checking which destination an intent maps to'
|
|
10
10
|
- resolving where a user intent lives ("where do I change my plan?") before acting
|
|
11
11
|
do_not_use_when:
|
|
12
|
-
- the user wants a result, not a view — add the node, set the property, publish; use the mutation tools (summer_add_node, summer_set_prop,
|
|
12
|
+
- the user wants a result, not a view — add the node, set the property, publish; use the mutation tools (summer_add_node, summer_set_prop, store.publish)
|
|
13
13
|
- opening a project directory in the engine — that is the CLI's `summer open <path>` / `summer run <path>` project launcher, not a navigation target
|
|
14
14
|
- the destination is not on summerengine.com or docs.summerengine.com — the tool refuses other origins
|
|
15
15
|
facets:
|
|
@@ -73,7 +73,7 @@ input_schema:
|
|
|
73
73
|
authority:
|
|
74
74
|
filesystem: false
|
|
75
75
|
editor_mutation: false
|
|
76
|
-
network:
|
|
76
|
+
network: true
|
|
77
77
|
credentials: false
|
|
78
78
|
publish: false
|
|
79
79
|
evidence_checks:
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# summer_open_scene
|
|
2
|
+
|
|
3
|
+
Open a scene file in the editor. Use this to switch between scenes.
|
|
4
|
+
|
|
5
|
+
Do not guess paths. Prefer:
|
|
6
|
+
1) summer_get_project_context (read mainScene)
|
|
7
|
+
2) summer_open_main_scene (open known main scene)
|
|
8
|
+
3) summer_open_scene only when user gave an explicit path.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# summer_place_adjacent
|
|
2
|
+
|
|
3
|
+
Move one node so its bounds face sits against another node's bounds face along one axis: facade modules edge to edge, a storey stacked on the one below, a cornice on a wall. Optionally line up the other two axes (min, center or max), per axis.
|
|
4
|
+
|
|
5
|
+
Example: next module to the right, same base height, same front plane: {axis:"x", side:"max", gap:0, alignOtherAxes:{y:"min", z:"max"}}.
|
|
6
|
+
|
|
7
|
+
Bounds are the visible GeometryInstance3D AABBs (the definition summer_align_distribute_3d uses; evidence visual_aabb). space "local" uses the reference's own axes for rotated facades. When the subject is inside the reference, its geometry is left out of the reference's bounds. One SetProp on position, one undo step, then the scene is saved; a fresh read verifies the achieved gap and residuals (verify). Returns {moved_by, position, verify:{gap, residuals}}. The scene must be open in the editor (any tab).
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# summer_play
|
|
2
|
+
|
|
3
|
+
Start the game. With no parameters it runs QUIETLY inside Summer Engine's viewport (the 'main' instance); scene runs one level or UI screen instead of the main scene.
|
|
4
|
+
|
|
5
|
+
QUIET BY DEFAULT (focus:false, PlayGame agent:true): the user usually works on the same machine, so the EDITOR stays put. It does not switch to the Game tab or take keyboard focus (nor follow the game's later focus report), and skips the render-health self-check that would misread the untouched Game view as a GPU failure and flip the user's embed setting. Quiet play does NOT hide the game: it runs embedded in the Game view (visible if that tab is open) and is the running game for summer_is_running / summer_screenshot target:'game' / summer_get_diagnostics. With "Embed Game on Play" off the game gets its own OS window; engines with --summer-background (0.5.66+) open it without taking focus. The result echoes agent_quiet:true when honoured; without agent_quiet the engine predates quiet play and most likely took focus (posture_note says so). focus:true launches like the toolbar Play button (Game tab + focus): ONLY when the user is watching and asked to see the game come up.
|
|
6
|
+
|
|
7
|
+
After starting, confirm boot with summer_is_running (boot time varies; never sleep a guessed delay), then summer_get_diagnostics for runtime errors.
|
|
8
|
+
|
|
9
|
+
DETERMINISTIC RUNS (newer engines): seed / fixed_fps / time_scale pin THIS launch only, nothing persisted. seed pins the GLOBAL RNG only (not RandomNumberGenerator instances, randomize(), rand_from_seed, wall-clock, thread/IO/audio timing). The result's `determinism` block says whether the pins applied (applied:false carries a reason: already_running, editor_run_args_override, launch_not_started) and restates seed_scope. NO determinism block although you sent a pin = the engine predates the params and the run is NOT reproducible (the tool says so); never claim otherwise.
|
|
10
|
+
|
|
11
|
+
PLAYTEST LAUNCH (engine runtime-control build): instance + mode:'offscreen' spawn a disposable hidden instance (at most 3) that summer_game_probe / summer_game_input / summer_game_control / summer_runtime_* address by name; two side by side make an A/B. deterministic:true (offscreen only) is what lets summer_game_input action:'replay' accept a seed. Poll summer_game_control action:'instances' until attached:true (the result reports session_attached) before addressing it. Then probe -> act -> step/probe -> assert (the agent-playtesting skill). Failure reasons: too_many_instances, instance_exists, session_timeout (child never attached; check summer_get_console), unsupported_mode, main_scene_not_configured. A game already running answers playing:true with determinism.applied:false: summer_stop first to apply seed/fixed_fps.
|
|
12
|
+
|
|
13
|
+
MULTIPLAYER — LOCAL PLAY (engine with Local Play; the multiplayer-testing skill): players:N starts the game's authority headless plus N clients on this machine, each joining through the game's OWN Summer.client.join(SummerJoinTarget.queue(...)): no account, login, Docker, CLI or local-only game code. Scenes and queue come from summer.build.json's WorldDefinition (client_entry_point, the headless_engine component entry_point). queue picks another declared queue; queue WITHOUT players starts its minPlayers; spectators adds spectator clients. local_play.warnings flags a roster outside minPlayers..maxPlayers. The local_play block lists every process (label, role, persona) and the port; failure_reason local_play_unavailable says what to declare. Every process attaches to the editor debugger: screenshots, input and summer_game_* go to the FIRST client, the authority's output is in summer_get_console, summer_stop stops them all. A join for a different queue fails naming both queues. Not a proof of sign-in, matchmaking or hosted admission (staging). No local_play block although you sent players = the engine predates Local Play and ran ONE client; the tool says so.
|