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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { withEngine, missingEngineOpResult, ToolInputError, withOldEngineHint } from "./with-engine.js";
|
|
3
3
|
import { executeSceneMutation } from "./scene-tools.js";
|
|
4
|
+
import { SNAP_LIFT_MARGIN, SNAP_MAX_AUTO_LIFT, snapToSurface } from "../../core/capabilities/surface-snap.js";
|
|
4
5
|
// engine_lacks_op fallbacks: ONE copy for every face (E2E 2026-09-03 F-16).
|
|
5
6
|
import { ALIGN_DISTRIBUTE_FALLBACK, NAVIGATION_PROBE_FALLBACK, SNAP_TO_SURFACE_FALLBACK, STARCAST_FALLBACK, TEST_PLACEMENT_FALLBACK, } from "../../core/capabilities/engine-fallbacks.js";
|
|
6
7
|
/** Hard budget for one tool's model-visible result. These ops are designed to
|
|
@@ -244,9 +245,14 @@ Use the default downward direction to seat props on floors, ramps, tables, or sh
|
|
|
244
245
|
|
|
245
246
|
EVIDENCE BOUNDARY:
|
|
246
247
|
- physics means Godot swept the subject's enabled collider shapes against body colliders and refined the first-contact bracket.
|
|
247
|
-
- visual_aabb is
|
|
248
|
+
- visual_aabb is the engine's broad-phase fallback for mesh-only geometry (no collider on the subject or the support): AABBs swept against AABBs. It does not prove triangle contact, and alignUp is not applied from that approximate normal.
|
|
249
|
+
- visual_mesh: whenever the engine answers with visual_aabb (overlap_recovery_exceeded, gap_exceeds_hit_travel, surface_not_found, or a seat), a read-only probe measures the move from visible triangles instead: the subject's vertices cast along the direction onto the triangles of the meshes below (a surface cutting through the subject counts as sunk), plus the support's vertices under it cast back. One SetProp places the subject, a second read verifies the gap (the move is undone if it disagrees by more than 5 mm), and the scene is saved. The receipt says evidence visual_mesh, the engine's own answer under engine, verify {final_gap, ok}, and evidenceDetails (samples, triangles, whether the subject and the support have colliders). Meshes whose shader writes POSITION (screen-space quads) are not surfaces. When the triangles find no support either, the engine's failure is returned with mesh_fallback saying why.
|
|
248
250
|
- initiallyOverlapping and backoffDistance expose bounded pre-sweep recovery. The tool fails instead of teleporting when the subject cannot be cleared within maxDistance.
|
|
249
251
|
|
|
252
|
+
SUNK PROPS: when the subject starts inside its support (gap_exceeds_hit_travel with a start overlap), the tool lifts it against the cast direction by the overlap depth plus ${SNAP_LIFT_MARGIN} m (at most ${SNAP_MAX_AUTO_LIFT} m and the subject's own extent), snaps again from there, and keeps that only if it settles on a node it was sunk into; the receipt then carries recovery (lifted_by, original_local_position) and 'before' is the lifted pose. Otherwise the original position is restored.
|
|
253
|
+
|
|
254
|
+
FAILURES EXPLAIN THEMSELVES: after gap_exceeds_hit_travel or overlap_recovery_exceeded a read-only starcast at the current pose adds start_overlap, blocking (the nodes it touches or sits inside), below, and a concrete next_step.
|
|
255
|
+
|
|
250
256
|
The normal result is bounded below 5 KB and returns before/after transforms, supportPath, finalGap with an error bound, slopeDeg, evidence, and warnings. scenePath and subjectPath are always required; there is no editor-selection fallback. On an engine build that predates SnapToSurface the result is a structured engine_lacks_op failure naming the fallback.`, {
|
|
251
257
|
scenePath: exactScenePath.describe("Exact scene containing the subject, e.g. 'res://levels/market.tscn'"),
|
|
252
258
|
subjectPath: exactNodePath.describe("Exact Node3D path relative to the scene root, e.g. './Props/Crate'"),
|
|
@@ -286,14 +292,16 @@ The normal result is bounded below 5 KB and returns before/after transforms, sup
|
|
|
286
292
|
// Cross-field: a raw zod shape cannot express it, so it stays here.
|
|
287
293
|
if (gap > maxDistance)
|
|
288
294
|
throw new ToolInputError("gap must not exceed maxDistance.");
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
295
|
+
// ONE implementation for both faces (core/capabilities/surface-snap.ts):
|
|
296
|
+
// the snap, a starcast diagnosis on failure, and the sunk-prop lift.
|
|
297
|
+
const receipt = await snapToSurface(client, {
|
|
298
|
+
scenePath: exactScene,
|
|
299
|
+
subjectPath: exactSubject,
|
|
300
|
+
direction: direction,
|
|
301
|
+
maxDistance,
|
|
302
|
+
gap,
|
|
303
|
+
alignUp,
|
|
304
|
+
});
|
|
297
305
|
return withOldEngineHint(receipt, "SnapToSurface", SNAP_TO_SURFACE_FALLBACK);
|
|
298
306
|
}, compactResult({
|
|
299
307
|
op: "SnapToSurface",
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { withEngine, missingEngineOpResult, withOldEngineHint } from "./with-engine.js";
|
|
2
|
+
import { withEngine, missingEngineOpResult, withOldEngineHint, ToolInputError } from "./with-engine.js";
|
|
3
3
|
import { withFailureReasonHint } from "./perception-tools.js";
|
|
4
4
|
import { analyzedSnapshot, captureGame, captureScene, captureViewport, VIEWPORT_RECAPTURE_DELAY_MS, } from "../../core/capabilities/capture.js";
|
|
5
5
|
import { describeFlatFrame } from "../../core/capabilities/frame-quality.js";
|
|
6
6
|
import { CAMERA_BOOKMARK_ACTIONS, CAMERA_BOOKMARK_FALLBACK, SCREENSHOT_FRAMINGS, MAX_MARKS_CAP, buildCameraBookmarkOp, buildScenePreviewInput, formatSceneMarks, isFixedPoseFraming, readCameraPose, readSceneMarks, } from "../../core/capabilities/camera-view.js";
|
|
7
|
+
import { checkMarkOcclusion, formatMarksWithOcclusion, rememberBookmarkRender, shotSheet, slotPolicy, } from "../../core/capabilities/seeing/seeing.js";
|
|
8
|
+
import { parseVector3 } from "../../core/capabilities/seeing/math.js";
|
|
9
|
+
import { seeingContent } from "./seeing-tools.js";
|
|
7
10
|
// The capture path (content check, single viewport recapture, scene-kind read
|
|
8
11
|
// for the no-camera confession) is ONE copy in core/capabilities/capture.ts,
|
|
9
12
|
// shared with the CLI face; re-exported so tests and callers keep this door.
|
|
@@ -170,7 +173,7 @@ Static frame only — one moment, not motion. For a SEQUENCE of frames over time
|
|
|
170
173
|
marks: z
|
|
171
174
|
.boolean()
|
|
172
175
|
.optional()
|
|
173
|
-
.describe('target:"scene" only, 3D scenes. Draw a Set-of-Mark overlay: numbered tags + box outlines over the largest visible VisualInstance3D nodes (lights excluded), ranked by projected screen area. The caption lists label -> node path (scene-root-relative) so you can name what you see. Works with every framing. 2D scenes return marks_unsupported. Default false.'),
|
|
176
|
+
.describe('target:"scene" only, 3D scenes. Draw a Set-of-Mark overlay: numbered tags + box outlines over the largest visible VisualInstance3D nodes (lights excluded), ranked by projected screen area. The caption lists label -> node path (scene-root-relative) so you can name what you see, and an occlusion test (centre + 4 bounds points from the rendered camera) notes "(hidden behind <path>)" on labels whose node is hidden: ignore those. Works with every framing. 2D scenes return marks_unsupported. Default false.'),
|
|
174
177
|
max_marks: z
|
|
175
178
|
.number()
|
|
176
179
|
.int()
|
|
@@ -178,10 +181,36 @@ Static frame only — one moment, not motion. For a SEQUENCE of frames over time
|
|
|
178
181
|
.max(MAX_MARKS_CAP)
|
|
179
182
|
.optional()
|
|
180
183
|
.describe(`marks:true only. Cap on numbered labels (engine default 32, at most ${MAX_MARKS_CAP}). The caption says when the cap truncated the list.`),
|
|
181
|
-
|
|
184
|
+
compare_previous: z
|
|
185
|
+
.boolean()
|
|
186
|
+
.optional()
|
|
187
|
+
.describe('framing:"bookmark" only. Return ONE image of [previous render | now | difference map] for the bookmark, with the share of changed pixels (summer_shot_sheet compare_previous with this one bookmark); this render then replaces the bookmark\'s previous image in res://.summer/shots/<bookmark>.jpg. A plain bookmark render (no marks, at most 1024 px) only creates that image when it is missing and never overwrites the compare baseline.'),
|
|
188
|
+
update_previous: z
|
|
189
|
+
.boolean()
|
|
190
|
+
.optional()
|
|
191
|
+
.describe('framing:"bookmark" only. Replace the bookmark\'s previous image (its compare baseline) with this clean render. Default false: an existing baseline is kept.'),
|
|
192
|
+
}, async ({ target, scenePath, framing, bookmark_name, size, nodePath, camera_path, camera_position, camera_look_at, fov, marks, max_marks, compare_previous, update_previous, }) => {
|
|
193
|
+
if (compare_previous) {
|
|
194
|
+
// Same implementation as summer_shot_sheet: one bookmark row of
|
|
195
|
+
// [previous | now | difference].
|
|
196
|
+
return withEngine(async (client) => {
|
|
197
|
+
if (target !== "scene" || !bookmark_name || (framing !== undefined && framing !== "bookmark")) {
|
|
198
|
+
throw new ToolInputError('compare_previous needs target:"scene" with framing:"bookmark" and bookmark_name. Nothing was sent.');
|
|
199
|
+
}
|
|
200
|
+
const result = await shotSheet(client, {
|
|
201
|
+
scenePath,
|
|
202
|
+
shots: [{ bookmark_name, ...(fov !== undefined ? { fov } : {}) }],
|
|
203
|
+
compare_previous: true,
|
|
204
|
+
max_size: 1536,
|
|
205
|
+
});
|
|
206
|
+
return { seeing: result, ...(result.ok ? {} : { failure_reason: result.failure_reason }) };
|
|
207
|
+
}, { onResult: (wrapped) => seeingContent(wrapped.seeing) });
|
|
208
|
+
}
|
|
182
209
|
// Resolved inside the engine closure so a contradictory framing is a
|
|
183
210
|
// classified invalid_input (nothing sent), never a transport failure.
|
|
184
211
|
let preview;
|
|
212
|
+
let slotNotes = [];
|
|
213
|
+
let markOcclusion;
|
|
185
214
|
return withEngine(async (client) => {
|
|
186
215
|
if (target === "game")
|
|
187
216
|
return captureGame(client);
|
|
@@ -199,7 +228,27 @@ Static frame only — one moment, not motion. For a SEQUENCE of frames over time
|
|
|
199
228
|
marks,
|
|
200
229
|
max_marks,
|
|
201
230
|
});
|
|
202
|
-
|
|
231
|
+
const snap = teachPreviewFailure(await captureScene(client, preview));
|
|
232
|
+
// One before/after slot per bookmark: a clean render creates it
|
|
233
|
+
// when missing; only update_previous replaces an existing one.
|
|
234
|
+
const bookmark = preview.framing?.startsWith("bookmark:") ? preview.framing.slice("bookmark:".length) : undefined;
|
|
235
|
+
if (snap.ok && snap.base64 && bookmark && snap.framing === preview.framing) {
|
|
236
|
+
slotNotes = await rememberBookmarkRender(typeof client.getProjectRoot === "function" ? client.getProjectRoot() : undefined, bookmark, { base64: snap.base64, width: snap.width, height: snap.height }, preview.marks === true, slotPolicy({ updatePrevious: update_previous === true }));
|
|
237
|
+
}
|
|
238
|
+
// Labels on hidden nodes: test each labelled node from the
|
|
239
|
+
// rendered camera (centre + 4 bounds points).
|
|
240
|
+
const meta = snap.metadata;
|
|
241
|
+
const marked = snap.ok && preview.marks ? readSceneMarks(meta) : null;
|
|
242
|
+
const camera = readCameraPose(meta)?.position;
|
|
243
|
+
if (marked?.marks.length && camera) {
|
|
244
|
+
try {
|
|
245
|
+
markOcclusion = await checkMarkOcclusion(client, scenePath, parseVector3(camera, "camera_pose.position"), marked.marks);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
markOcclusion = { occlusion: new Map(), note: `NOTE: the mark occlusion check could not run (${err instanceof Error ? err.message : String(err)}).` };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return snap;
|
|
203
252
|
}
|
|
204
253
|
return captureViewport(client);
|
|
205
254
|
}, {
|
|
@@ -367,11 +416,14 @@ Static frame only — one moment, not motion. For a SEQUENCE of frames over time
|
|
|
367
416
|
details.push(`camera pose: ${parts.join(", ")}`);
|
|
368
417
|
}
|
|
369
418
|
const marksSummary = readSceneMarks(meta);
|
|
370
|
-
if (marksSummary)
|
|
371
|
-
marksBlock = formatSceneMarks(marksSummary);
|
|
419
|
+
if (marksSummary) {
|
|
420
|
+
marksBlock = markOcclusion ? formatMarksWithOcclusion(marksSummary, markOcclusion.occlusion) : formatSceneMarks(marksSummary);
|
|
421
|
+
if (markOcclusion?.note)
|
|
422
|
+
marksBlock.push(markOcclusion.note);
|
|
423
|
+
}
|
|
372
424
|
}
|
|
373
425
|
const detailNote = details.length ? `; ${details.join(", ")}` : "";
|
|
374
|
-
const trailer = [...warnings, ...notes];
|
|
426
|
+
const trailer = [...warnings, ...notes, ...slotNotes];
|
|
375
427
|
const caption = `${label} (${dims}${detailNote}). Saved to ${snap.localPath ?? "n/a"}.${frameCheck} Describe only what is visibly in the image above.` +
|
|
376
428
|
(marksBlock.length ? `\n\n${marksBlock.join("\n")}` : "") +
|
|
377
429
|
(trailer.length ? `\n\n${trailer.join("\n")}` : "");
|
package/gemini-extension.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.2.0",
|
|
5
5
|
"description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"./library/skills/3d-lighting/",
|
|
28
28
|
"./library/skills/adaptive-music/",
|
|
29
29
|
"./library/skills/agent-playtesting/",
|
|
30
|
+
"./library/skills/ai-characters-in-games/",
|
|
30
31
|
"./library/skills/ambient-bed/",
|
|
31
32
|
"./library/skills/animated-loop/",
|
|
32
33
|
"./library/skills/animation-tree/",
|
|
@@ -37,11 +38,14 @@
|
|
|
37
38
|
"./library/skills/brainstorm-game/",
|
|
38
39
|
"./library/skills/brainstorming/",
|
|
39
40
|
"./library/skills/browse-templates/",
|
|
41
|
+
"./library/skills/camera-rigs/",
|
|
40
42
|
"./library/skills/celeste-momentum-platforming/",
|
|
41
43
|
"./library/skills/character-animation-wiring/",
|
|
42
44
|
"./library/skills/character-model/",
|
|
45
|
+
"./library/skills/character-movement/",
|
|
43
46
|
"./library/skills/character-portrait/",
|
|
44
47
|
"./library/skills/cinematic-cutscene/",
|
|
48
|
+
"./library/skills/combat-basics/",
|
|
45
49
|
"./library/skills/concept-art/",
|
|
46
50
|
"./library/skills/create-asset-sheet/",
|
|
47
51
|
"./library/skills/debug/",
|
|
@@ -63,16 +67,21 @@
|
|
|
63
67
|
"./library/skills/generate-motion/",
|
|
64
68
|
"./library/skills/godogen-visual-proof-game-generation/",
|
|
65
69
|
"./library/skills/headless-scripting/",
|
|
66
|
-
"./library/skills/
|
|
70
|
+
"./library/skills/in-game-purchases/",
|
|
67
71
|
"./library/skills/instantiate-asset-pack/",
|
|
68
72
|
"./library/skills/investigating-bugs/",
|
|
69
73
|
"./library/skills/lumera-single-image-scene-reconstruction/",
|
|
70
74
|
"./library/skills/make-game/",
|
|
75
|
+
"./library/skills/multiplayer/",
|
|
76
|
+
"./library/skills/multiplayer-movement/",
|
|
77
|
+
"./library/skills/multiplayer-project/",
|
|
78
|
+
"./library/skills/multiplayer-publish/",
|
|
79
|
+
"./library/skills/multiplayer-state/",
|
|
80
|
+
"./library/skills/multiplayer-testing/",
|
|
71
81
|
"./library/skills/music-track/",
|
|
72
82
|
"./library/skills/navigate-summer/",
|
|
73
83
|
"./library/skills/new-project/",
|
|
74
84
|
"./library/skills/organic-model/",
|
|
75
|
-
"./library/skills/peer-to-peer-multiplayer/",
|
|
76
85
|
"./library/skills/pixel-art/",
|
|
77
86
|
"./library/skills/play/",
|
|
78
87
|
"./library/skills/playtesting-a-feature/",
|
|
@@ -83,11 +92,11 @@
|
|
|
83
92
|
"./library/skills/remote-deploy/",
|
|
84
93
|
"./library/skills/retarget/",
|
|
85
94
|
"./library/skills/running-in-the-cloud/",
|
|
95
|
+
"./library/skills/save-load/",
|
|
86
96
|
"./library/skills/scene-composition/",
|
|
87
97
|
"./library/skills/scene-hierarchy-design/",
|
|
88
98
|
"./library/skills/scene-scripting/",
|
|
89
99
|
"./library/skills/scene-to-level/",
|
|
90
|
-
"./library/skills/setup-multiplayer/",
|
|
91
100
|
"./library/skills/skill-create/",
|
|
92
101
|
"./library/skills/skill-improve/",
|
|
93
102
|
"./library/skills/skill-test/",
|
|
@@ -96,6 +105,17 @@
|
|
|
96
105
|
"./library/skills/sound-effect/",
|
|
97
106
|
"./library/skills/spatial-placement/",
|
|
98
107
|
"./library/skills/sprite-sheet/",
|
|
108
|
+
"./library/skills/summer-analytics/",
|
|
109
|
+
"./library/skills/summer-friends/",
|
|
110
|
+
"./library/skills/summer-leaderboards/",
|
|
111
|
+
"./library/skills/summer-match-results/",
|
|
112
|
+
"./library/skills/summer-matchmaking/",
|
|
113
|
+
"./library/skills/summer-parties/",
|
|
114
|
+
"./library/skills/summer-player-data/",
|
|
115
|
+
"./library/skills/summer-store/",
|
|
116
|
+
"./library/skills/summer-world-chat/",
|
|
117
|
+
"./library/skills/summer-world-saves/",
|
|
118
|
+
"./library/skills/text-to-motion/",
|
|
99
119
|
"./library/skills/tileable-texture/",
|
|
100
120
|
"./library/skills/trailer-shot/",
|
|
101
121
|
"./library/skills/tune-performance/",
|
|
@@ -115,6 +135,8 @@
|
|
|
115
135
|
"./library/skills/vfx-smoke/",
|
|
116
136
|
"./library/skills/vfx-water-ripple/",
|
|
117
137
|
"./library/skills/voice-line/",
|
|
138
|
+
"./library/skills/web-and-touch-input/",
|
|
139
|
+
"./library/skills/web-compatibility-look/",
|
|
118
140
|
"./library/skills/world-building-3d/",
|
|
119
141
|
"./library/skills/writing-plans/",
|
|
120
142
|
"./library/skills/writing-skills/"
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.config/amp/settings.json`; Windows `%APPDATA%/amp/settings.json` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: `"amp.mcpServers".summer-engine = { command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Amp so it reloads settings.json.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.config/crush/crushrc`; Windows `%USERPROFILE%/.config/crush/crushrc` (user); `.crushrc` (project).
|
|
8
8
|
Shape: `mcp.summer-engine = { type: "stdio", command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Crush so it reloads crushrc.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.grok/config.toml`; Windows `%USERPROFILE%/.grok/config.toml` (user); `.grok/config.toml` (project).
|
|
8
8
|
Shape: `[mcp_servers.summer-engine]` table (TOML).
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Grok Build so it reloads config.toml (it also reads ~/.claude.json and .cursor/mcp.json).
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.hermes/config.yaml`; Windows `%USERPROFILE%/.hermes/config.yaml` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: `mcp_servers.summer-engine = { command, args }` (YAML).
|
|
9
|
-
- Skills: `~/.hermes/skills` (user) or `.
|
|
9
|
+
- Skills: `~/.hermes/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`. Project skills need `hermes skills trust` before Hermes loads them.
|
|
10
10
|
- After: Run /reload-mcp in Hermes Agent (or restart it).
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.kimi-code/mcp.json`; Windows `%USERPROFILE%/.kimi-code/mcp.json` (user); `.kimi-code/mcp.json` (project).
|
|
8
8
|
Shape: `mcpServers.summer-engine = { command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Kimi Code CLI so it reconnects its MCP servers.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.vibe/config.toml`; Windows `%USERPROFILE%/.vibe/config.toml` (user); `.vibe/config.toml` (project).
|
|
8
8
|
Shape: undefined.
|
|
9
|
-
- Skills: `~/.vibe/skills` (user) or `.
|
|
9
|
+
- Skills: `~/.vibe/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Vibe so it reloads config.toml.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.config/opencode/opencode.json`; Windows `%APPDATA%/opencode/opencode.json` (user); `opencode.json` (project).
|
|
8
8
|
Shape: `mcp.summer-engine = { type: "local", command: [npx, ...], enabled: true }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`. OpenCode loads skills from this folder on the next session. Summer 3.0 wrote markdown under agents/summer and 3.1.0 wrote opencode/skills; `--force` removes both.
|
|
10
10
|
- After: Restart OpenCode so it reloads opencode.json.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.rovodev/mcp.json`; Windows `%USERPROFILE%/.rovodev/mcp.json` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: undefined.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Rovo Dev CLI so it reconnects its MCP servers.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/Library/Application Support/Code/User/mcp.json`; Linux `~/.config/Code/User/mcp.json`; Windows `%APPDATA%/Code/User/mcp.json` (user); `.vscode/mcp.json` (project).
|
|
8
8
|
Shape: `servers.summer-engine = { type: "stdio", command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart VS Code or run MCP: List Servers, then start summer-engine in Copilot Agent mode.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.warp/.mcp.json`; Windows `%USERPROFILE%/.warp/.mcp.json` (user); `.warp/.mcp.json` (project).
|
|
8
8
|
Shape: `mcpServers.summer-engine = { command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Warp detects the file and spawns the server; check Settings > AI > MCP servers.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.codeium/windsurf/mcp_config.json`; Windows `%USERPROFILE%/.codeium/windsurf/mcp_config.json` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: `mcpServers.summer-engine = { command, args }`.
|
|
9
|
-
- Skills: `~/.
|
|
9
|
+
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Devin Desktop (formerly Windsurf) and refresh MCP servers from the agent settings. Devin's docs say mcp_config.json configures the Cascade agent; for the Devin agent add the server in the app's MCP settings with the same command.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -13,17 +13,18 @@
|
|
|
13
13
|
- Diagnostics, console, debugger output, script errors
|
|
14
14
|
- Project text reads and guarded writes (`.gd`, `.cs`, `.tscn`, `.tres`, JSON, docs, config)
|
|
15
15
|
|
|
16
|
-
**Use host tools for** git, shell,
|
|
16
|
+
**Use host tools for** git, shell, searching outside the project, and non-project work. External host file writes bypass Summer's project-identity, sha256, and editor-reload safeguards and should not be used for project mutations while MCP is available.
|
|
17
17
|
|
|
18
18
|
**Rule of thumb:** project reads/writes go through Summer; live hierarchy/inspector changes use scene tools; process-level work remains with the host.
|
|
19
19
|
|
|
20
|
-
## Tool surface (
|
|
20
|
+
## Tool surface (101 tools)
|
|
21
21
|
|
|
22
|
-
### Project files (
|
|
22
|
+
### Project files (4)
|
|
23
23
|
|
|
24
24
|
| Tool | Use |
|
|
25
25
|
|---|---|
|
|
26
|
-
| `summer_read_file` | Read project text plus a full-file sha256 receipt. |
|
|
26
|
+
| `summer_read_file` | Read project text plus a full-file sha256 receipt. Big files in parts: `offset`/`limit` page by lines (or `unit:'bytes'`), `data.window` gives `next_offset`/`eof`; for JSON, `json_path` picks one value (`pieces.wall_a`), `keys` keeps matching object keys (`['wall_*']`), `keys_only` lists key names. The sha256 always covers the whole file. |
|
|
27
|
+
| `summer_grep` | Regex search over project files (ripgrep through the engine): file, line and text per match, `context_lines` before/after (0-10), `path` (res:// dir or file), `glob`, `max_results` (default 50) with `truncated`. Find the part of a big file you need, then read just that part with `summer_read_file`. |
|
|
27
28
|
| `summer_write_file` | Create-only or sha256-guarded complete file write. |
|
|
28
29
|
| `summer_replace_text` | Unique (or explicit replace-all) text mutation with read/sha guard. |
|
|
29
30
|
|
|
@@ -36,11 +37,11 @@
|
|
|
36
37
|
| `summer_open_scene` | Open a specific `.tscn`. |
|
|
37
38
|
| `summer_open` | Navigate for the user: open a summerengine.com page (billing, my games, pricing, an MCP guide) or an editor surface (scene, node, script, file, a dock) by intent name, or `print` the URL / op. Destinations: the `product-map` reference; when to use it: the `navigate-summer` skill. |
|
|
38
39
|
| `summer_create_scene` | Create a new scene. |
|
|
39
|
-
| `summer_instantiate_scene` | Add an existing scene or 3D model as a child node. |
|
|
40
|
-
| `summer_inspect_node` | Read a single node's properties. |
|
|
40
|
+
| `summer_instantiate_scene` | Add an existing scene or 3D model as a child node; `position` / `rotation_degrees` / `scale` (or `transform`) place it in the same call. |
|
|
41
|
+
| `summer_inspect_node` | Read a single node's properties (about 5 KB). `fields` keeps only named properties/globs plus derived `transform`, `global_transform`, `scene_file_path`, `aabb`, `warnings` — e.g. `fields:['transform','global_transform','scene_file_path']`. |
|
|
41
42
|
| `summer_add_node` | Add a node to the explicit `scenePath`; the tab need not be open. |
|
|
42
43
|
| `summer_remove_node` | Remove a node from the explicit `scenePath`. |
|
|
43
|
-
| `summer_replace_node` | Swap a node
|
|
44
|
+
| `summer_replace_node` | Swap a node for another scene/model or type in the explicit `scenePath` (a `.tscn`), keeping parent, index, name, transform, property overrides and added children. Verified: it saves, reads the saved file back and returns `persisted:true` only when the file holds the new scene; otherwise an error with `failure_reason: not_persisted`. `not_carried_over` lists what could not travel (groups, signal connections, sub_resource values). |
|
|
44
45
|
| `summer_select_node` | Set editor selection (visual feedback for the user). |
|
|
45
46
|
| `summer_save_scene` | Explicitly save/save-as a `scenePath`; mutation tools already append one final save. |
|
|
46
47
|
|
|
@@ -50,8 +51,8 @@
|
|
|
50
51
|
|---|---|
|
|
51
52
|
| `summer_set_prop` | Set a typed property in an explicit `scenePath` using Godot's `str_to_var()`. |
|
|
52
53
|
| `summer_set_resource_property` | Set a nested resource property in an explicit `scenePath`. |
|
|
53
|
-
| `summer_inspect_resource` | Read a resource
|
|
54
|
-
| `summer_connect_signal` | Wire a signal between nodes. |
|
|
54
|
+
| `summer_inspect_resource` | Read a resource FILE (`path`): a Mesh `.res` gives AABB, surfaces (primitive, vertex/index counts, attributes, triangles, material) and materials; a `.tscn`/`.glb` gives its nodes and meshes; anything else its non-default editor properties. Or a resource a node of the active scene holds (`nodePath` + `property`). |
|
|
55
|
+
| `summer_connect_signal` | Wire a signal between nodes in the explicit `scenePath` (a `.tscn`). Connects with `CONNECT_PERSIST` through a RunSceneScript probe (the engine's ConnectSignal op never saves the connection), saves, and returns `persisted:true` / `verified:true` only when the saved file holds the `[connection]` line; otherwise `failure_reason: not_persisted`. |
|
|
55
56
|
|
|
56
57
|
### Project & input (2)
|
|
57
58
|
|
|
@@ -96,7 +97,7 @@ Preview — the `Ui*` engine ops ship with a follow-up engine build; until then
|
|
|
96
97
|
|
|
97
98
|
| Tool | Use |
|
|
98
99
|
|---|---|
|
|
99
|
-
| `summer_world_snapshot` | Compact structured snapshot of the edited scene (paths, classes, transforms, world AABBs, visibility, resource fingerprints, light/camera/counts summary). The cheap read to run BEFORE and AFTER every mutation batch; keep the `snapshot_id`. |
|
|
100
|
+
| `summer_world_snapshot` | Compact structured snapshot of the edited scene (paths, classes, transforms, world AABBs, visibility, resource fingerprints, light/camera/counts summary). The cheap read to run BEFORE and AFTER every mutation batch; keep the `snapshot_id`. Lists at most 200 nodes by default; `path_prefix` (one subtree), `classes`, `fields` (e.g. `['pos','aabb']`) and `offset` keep it small, `matched_counts` counts a subtree's classes. `counts` and the `snapshot_id` baseline always cover the whole scene. |
|
|
100
101
|
| `summer_snapshot_diff` | Diff two snapshots into added/removed/changed + count deltas — the structural receipt that a mutation did exactly what was intended. Omit `to_id` to diff against a fresh snapshot taken now. |
|
|
101
102
|
| `summer_get_runtime_tree` | Scene tree of the RUNNING game (spawned enemies, autoloads, pooled nodes) — live state the editor reads can't show. Needs `summer_play` first. |
|
|
102
103
|
| `summer_inspect_runtime_node` | One running-game node's live properties (actual stats/position/flags) without stopping the game. Get paths from `summer_get_runtime_tree`. |
|
|
@@ -108,11 +109,25 @@ Bounded spatial evidence for deliberate 3D arrangement. All five take exact `sce
|
|
|
108
109
|
| Tool | Use |
|
|
109
110
|
|---|---|
|
|
110
111
|
| `summer_test_placement` | Ghost-test one node at a candidate global pose (read-only, never saves): overlap evidence, grounded state, signed floor gap. `fits: null` means physics could not prove clearance — never coerce it to success. |
|
|
111
|
-
| `summer_snap_to_surface` | Seat one subject on the first surface along a world ray (default downward); mutation + save. `evidence: physics` = collider sweep; `visual_aabb` = mesh-only broad-phase fallback. |
|
|
112
|
+
| `summer_snap_to_surface` | Seat one subject on the first surface along a world ray (default downward); mutation + save. `evidence: physics` = collider sweep; `visual_aabb` = the engine's mesh-only broad-phase fallback; `visual_mesh` = the tool re-measured a `visual_aabb` answer (failure or seat) on visible triangles, placed the subject with one SetProp, verified the gap and saved (`engine`, `verify` in the receipt; `mesh_fallback` says why when it could not). A prop sunk into its support is lifted by the overlap depth plus 2 cm (at most its own extent, 0.5 m) and settled from there (`recovery` in the receipt). `gap_exceeds_hit_travel` / `overlap_recovery_exceeded` failures add `start_overlap`, `blocking` (the nodes it touches or sits in), `below` and a `next_step`. |
|
|
112
113
|
| `summer_align_distribute_3d` | Align (min/center/max) or equal-space (centers/gaps) 2–16 ordered subjects along one world axis from visible AABBs; mutation + save. One-axis evidence only. |
|
|
113
114
|
| `summer_navigation_probe` | Read-only reachability between two world points on the scene's navigation map: readiness, snapped endpoints + snap distances, route length, ≤16 route points. `ready: false` = unknown, not unreachable. |
|
|
114
115
|
| `summer_starcast` | Read-only 26-direction placement rundown around one exact node: per-direction `open`/`blocked` with nearest object, distance and evidence, contact-or-overlap paths, `grounded`, coverage, warnings. `detail: summary` ≤ 5 KB; `full` adds hit geometry, an objects table and nearby lists ≤ 12 KB and downgrades to summary rather than exceed it. `visual_aabb` evidence is broad-phase, never exact contact. |
|
|
115
116
|
|
|
117
|
+
### Kit placement (7)
|
|
118
|
+
|
|
119
|
+
Placement of modular kit pieces from measured geometry, built on the existing ops (a read-only `RunSceneScript` probe, then `SetProp` / `SnapToSurface` / `InstantiateScene` with the usual scene target, undo and final save). Each takes exact paths, needs the scene open in the editor (any tab; physics rays need the active tab) and returns a receipt under 5 KB that names its evidence. Arguments, result shapes, limits and the ops each one uses: `skill/spatial-placement` (`references/kit-placement-tools.md`).
|
|
120
|
+
|
|
121
|
+
| Tool | Use |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `summer_inspect_asset` | Measure a `.tscn`/`.glb`/`.gltf` (or Mesh) WITHOUT adding it to a scene. A `summary` block first (AABB, origin label, the two largest opposite plane pairs with a `one_sided` flag per plane, port-like loop ids such as `+Y`), then per-mesh AABBs and triangle counts, the 6 largest planar faces, open boundary loops with stable ids by facing and position (`detail: "summary"` lists only port-like ones), Marker3D anchors, collision shapes. Read-only. |
|
|
124
|
+
| `summer_place_adjacent` | Put one node's bounds face against another's along an axis (gap, side), lining up the other axes (min/center/max, per axis); facade modules edge to edge, storeys stacked. One SetProp + save, verified. |
|
|
125
|
+
| `summer_attach_to_surface` | Turn a piece so its measured local back axis faces into a surface hit by a ray (up kept), then seat its back face (not its origin) with `SnapToSurface` at a standoff, keeping its height. Refuses and puts the piece back when the seat lands on another node or the move exceeds `maxMove`. Pipes, lamps, AC units, signs. |
|
|
126
|
+
| `summer_repeat_along` | Instance copies of a scene along a line (spacing or count, leftover aligned start/center/end), each placed in the same call; compact receipt with created paths. At most 64. |
|
|
127
|
+
| `summer_connect_ports` | Move and turn a piece so its port (open-loop id such as `+Y`, Marker3D name, or open-loop index) meets another piece's port, facing it; refuses a join that would tilt the piece more than `maxTiltDegrees` (default 5) unless `allowTilt`; verified distance, angle and tilt, and where the piece's other ports now point. |
|
|
128
|
+
| `summer_raycast` | One ray from any point, before anything is placed: hit path, point, normal. Physics first; visual-AABB fallback declared as such. Read-only. |
|
|
129
|
+
| `summer_measure` | Gap/overlap per axis between two nodes, or face coplanarity across 2-32 nodes (proud/recessed). Read-only. |
|
|
130
|
+
|
|
116
131
|
### Play / runtime (3)
|
|
117
132
|
|
|
118
133
|
| Tool | Use |
|
|
@@ -149,6 +164,28 @@ Drive and observe the RUNNING game (engine runtime-control ops, preview — `eng
|
|
|
149
164
|
| `summer_screenshot` | Capture a frame and return it as an image the agent sees directly — editor viewport (`target:"viewport"`, default; no play needed), offscreen scene render (`target:"scene"`, presets or `framing:"camera"` which renders through the scene's OWN camera with its REAL WorldEnvironment — the trustworthy edit-time lighting check), or running game (`target:"game"`). Newer engines add fixed poses — `framing:"bookmark"` + `bookmark_name` (saved with `summer_camera_bookmark`) or `framing:"free"` + `camera_position`/`camera_look_at` — for before/after frames that line up, and `marks:true` for numbered labels the caption maps to node paths. Use to visually verify scene layout, asset placement, scale, framing, lighting, or runtime state. On macOS the running game is a floating window that can't be captured; prefer `viewport`. |
|
|
150
165
|
| `summer_camera_bookmark` | Save (`action:"save"`, from the editor viewport camera or an explicit pose), list, or delete named camera viewpoints persisted in the project (`res://.summer/camera_bookmarks.json`). Save once, then screenshot from it with `framing:"bookmark"` every time. Returns `engine_lacks_op` on engines that predate the bookmark ops. |
|
|
151
166
|
|
|
167
|
+
`summer_screenshot framing:"bookmark"` keeps a clean render (no marks, at most 1024 px) as the bookmark's one previous image in `res://.summer/shots/<bookmark>.jpg` when it has none; an existing one is the compare baseline and is replaced only by `compare_previous:true` (which returns previous | now | difference map in one image) or `update_previous:true`. With `marks:true` each labelled node gets an occlusion test (centre + 4 bounds points) and hidden ones are noted `(hidden behind <path>)`.
|
|
168
|
+
|
|
169
|
+
### Seeing (5)
|
|
170
|
+
|
|
171
|
+
Preview. Judge a 3D environment the way a player and an artist would. Every image comes back inline (one grid image per call, never N images) with a compact caption; renders are offscreen copies of the SAVED scene with its REAL WorldEnvironment and lights; nothing in the scene, the open tab or the undo history changes. Disk is bounded: only one previous-image slot per rendered bookmark plus explicit `save_to` copies, JPEG at most 1024 px, at most 20 MB under `res://.summer/shots/` (oldest evicted first). The `verifying-scenes` skill carries the environment review loop.
|
|
172
|
+
|
|
173
|
+
| Tool | Use |
|
|
174
|
+
|---|---|
|
|
175
|
+
| `summer_frame_nodes` | Fit a camera to the world bounds of 1-16 nodes (`direction` preset or `from` vector, `fill`) and render it with the real environment; `bookmark_name` saves the pose, `marks:true` maps labels to node paths (hidden nodes are noted). An explicit `from` is checked in-engine: walls in the way, or a camera behind or inside a one-sided surface (its back is not drawn, so the image looks through it), open the caption with a WARNING and the nearest valid `from` (+ `fov`). |
|
|
176
|
+
| `summer_shot_sheet` | 1-12 bookmarks/poses in one labelled grid, same tile size, one `view`; `compare_previous:true` gives previous / now / difference map per bookmark with the changed-pixel share and makes this render the next baseline. Without it the baseline is kept (a missing one is created); `update_previous:true` replaces it on purpose. |
|
|
177
|
+
| `summer_debug_views` | One pose as beauty, lighting, unshaded (albedo), world normals, overdraw and wireframe in one grid; the caption names the method per view. |
|
|
178
|
+
| `summer_zoom` | An exact sub-frustum of a `region` (honoured exactly: no pad by default, never widened to an aspect ratio; the image takes the region's aspect) or of `mark` N (pad 0.15; warns when the node is hidden) rendered at full resolution: seams, gaps, floating pieces, texture quality. The caption reports the real zoom and `widened_because`. |
|
|
179
|
+
| `summer_frame_shot` | Smart framing for `establishing`, `eye_level`, `low_angle`, `detail` or `corridor`: candidates measured in-engine (thick sweep visibility, near-lens check, low-angle rule, frame ray grid, a small beauty render per pose for featureless areas and near/far value contrast; walls reject, and so does a camera behind or inside a one-sided surface; props frame; transparent foliage and glass are see-through cover), scored (including the key light's direction and the world edge below the horizon; an establishing pose over 15% empty ground or world edge ranks below every cleaner one), top 3 returned with breakdowns as three different views and each camera's height above the surface below it, best saved as a bookmark, top 3 rendered as one sheet. Eye-level and corridor cameras stand 1.5-1.8 m (or `eye_height`) above the walkable surface and are never raised. |
|
|
180
|
+
|
|
181
|
+
### Scene audit (1)
|
|
182
|
+
|
|
183
|
+
Preview. One fast, read-only call that walks every node of a 3D scene and lists likely visual and placement problems, so you know exactly where to look; every issue is a flag to look at, never an auto-fix. Like the seeing tools it works on an offscreen private copy of the SAVED scene (ScenePreview): the open tab never becomes unsaved, undo is untouched, nothing is saved. Save first. The `verifying-scenes` skill carries the loop: audit after each build stage, then frame every error and look item up close before calling the scene done.
|
|
184
|
+
|
|
185
|
+
| Tool | Use |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `summer_scene_audit` | Checks `through_hole` (ray grids through each facade line: rays that pass the wall and reach the far side of the building), `exposed_edge` (open outline edges of walls, bands, piers and corner blocks nothing covers within 4-7 mm, seen from walkable eye points, with a 2-60 cm reveal, a seam within 4 cm or a gap to the next sheet within 35 cm; warn on bands, look on walls unless `depth_step` agrees), `open_fixture_end` (open ends of run pieces, two or more open rims of one size, nothing joins within 2.5 cm; a cap, funnel or outlet is open by design; warn), `depth_step` (look: ray rows at each facade's band levels and every 1.25 m; band recesses, seams, proud modules, holes; a hole confirms a `through_hole`), `floor_gap` (down rays over the tiles, their seams and the strip from each tile edge to a wall within 1 m, classified by the first surface hit: the void, an underlay through a hole, or an underlay covering the floor's own drain or dip; areas from the missed rays' own footprints with the strip's size), `floating` / `sunken` (2 cm / 3 cm; the embed is against the first surface from above, named), `interpenetration` (3 cm, then every partner it cuts, up to 3), `orientation` (look: long props more than 15 deg off a wall within 1.2 m; never which way to face), `uv_stretch` (over 8:1 or collapsed UVs that an instance shows), `duplicate`, `z_fight` (coplanar overlaps from each mesh's planar face groups, between any two pieces and between two surfaces of one mesh, plus the ray samples; the tolerance is twice the 24-bit depth step at the view distance from the nearest walkable eye point, camera or bookmark, for the main camera's near/far; warn over 0.05 m2 seen from a viewpoint, `render_priority`, depth or normal offsets, see-through (alpha) materials and no depth test demoted to look with the reason), `lights` (per-object light limit, spot rims, shadowed count), `transform` (pieces left at the origin: an identity local transform under an identity parent, touching nothing, not one of a row of siblings; several sharing it warn), `resource`. `z_fight` evidence names the plane's normal and the axis to nudge (world and the piece's local). Returns at most 5 KB: counts and time per check, and one page of issues sorted by severity (`error` / `warn` / `look`) with node path, world position, reason, evidence numbers, the next tool and a `key`. `offset`/`limit` page, `checks`, `root` (subtree) and `min_severity` filter; `accept:[{key, reason}]` writes judged-fine look / warn items to `res://.summer/audit-accept.json` (later audits count them as `accepted` and hide them until their evidence changes; `show_accepted` lists them); `budget_ms` (default 3000) bounds the editor time, and a check past its weighted share stops and shows `partial` (the share it covered) in its counts; the gap detectors run last on the time the others leave; `render:"sheet"` adds one inline image of the page's first 6 issues framed from their open side, tiles labelled `#n`. Every check works from geometry, engine data and materials alone, never names or kit metadata; piece roles (dressing, wall, floor, roof, underlay, insert, facade structure, prop) come from shape. |
|
|
188
|
+
|
|
152
189
|
### Diagnostics (7)
|
|
153
190
|
|
|
154
191
|
| Tool | Use |
|
|
@@ -165,7 +202,7 @@ Drive and observe the RUNNING game (engine runtime-control ops, preview — `eng
|
|
|
165
202
|
|
|
166
203
|
| Tool | Use |
|
|
167
204
|
|---|---|
|
|
168
|
-
| `summer_search_assets` | Free public asset search (community library + user's own). Sources: `library`, `community`, `my_assets`, `all`. |
|
|
205
|
+
| `summer_search_assets` | Free public asset search (community library + user's own). Sources: `library`, `community`, `my_assets`, `all`. `style` keeps one art direction (realistic, stylized-lowpoly, toon, pixel, hand-painted, voxel); `preview` returns a numbered picture of the first 9 results; curated packs first unless `includeCommunity`. |
|
|
169
206
|
| `summer_list_my_assets` | List/search the signed-in user's generated and uploaded assets. Empty query lists recent assets. |
|
|
170
207
|
| `summer_get_asset` | Fetch one exact asset by ID with file URL, download URL, viewer URL, metadata, license, and visibility. |
|
|
171
208
|
| `summer_get_asset_download_url` | Get the primary or thumbnail download URL for a specific asset. Stable shape for future signed URLs. |
|
|
@@ -189,7 +226,7 @@ Drive and observe the RUNNING game (engine runtime-control ops, preview — `eng
|
|
|
189
226
|
| Tool | Use |
|
|
190
227
|
|---|---|
|
|
191
228
|
| `summer_check_job` | Poll a generation job. |
|
|
192
|
-
| `summer_batch` | Run multiple ops as a transaction. |
|
|
229
|
+
| `summer_batch` | Run multiple ops as a transaction. `InstantiateScene` ops may carry `position` / `rotation_degrees` / `scale` / `transform`; `receipt: "summary"` returns counts, failures with op index and created paths under 5 KB. A `ReparentNode` keeps the moved node's scene-owned children and grandchildren (the engine op drops them from the saved file) and is verified from the saved `.tscn` (`persisted:true` / `verified:true`, else `failure_reason: not_persisted`); a raw `ConnectSignal` is refused — use `summer_connect_signal`. `scenePersistence.saved` only means the SaveScene ran. |
|
|
193
230
|
|
|
194
231
|
### Meta (4)
|
|
195
232
|
|
|
@@ -197,7 +234,7 @@ Drive and observe the RUNNING game (engine runtime-control ops, preview — `eng
|
|
|
197
234
|
|---|---|
|
|
198
235
|
| `summer_start_game_task` | Route a user goal into the right workflow, skills, MCP tool groups, asset policy, gates, and verification path. |
|
|
199
236
|
| `summer_get_studio_workflow` | Discover Summer Studio's guided workflow recipes (starter prompts, ordered steps, required tools) for a goal. |
|
|
200
|
-
| `summer_get_project_context` | Project, scene, and `.summer` memory summary — call at start of session. Binds the session to the open project and surfaces a `capabilitySkewWarning` when the engine build and CLI have drifted; tools whose op the engine provably lacks return a structured `engine_lacks_op` result instead of running. |
|
|
237
|
+
| `summer_get_project_context` | Project, scene, and `.summer` memory summary — call at start of session. Binds the session to the open project and surfaces a `capabilitySkewWarning` when the engine build and CLI have drifted; tools whose op the engine provably lacks return a structured `engine_lacks_op` result instead of running. Compact by default (a few KB: `sceneSummary`, scalar `health` with capability counts); `include:['scene_tree','capabilities','settings']` adds the heavy blocks, `omitted` says how. |
|
|
201
238
|
| `summer_get_agent_playbook` | Daily operating contract (observe-first loop, content routing, invariants, verification ritual) — call at start of session. Also served natively as the `summer_agent_playbook` MCP prompt. |
|
|
202
239
|
|
|
203
240
|
### Creator platform (3)
|
|
@@ -213,7 +250,7 @@ Drive and observe the RUNNING game (engine runtime-control ops, preview — `eng
|
|
|
213
250
|
| Tool | Use |
|
|
214
251
|
|---|---|
|
|
215
252
|
| `summer_search_library` | Search the library (skills, tools, templates, references, examples, collections) by describing the task in plain words; ranked ids with `matched_by` (lexical / semantic). The first move for any task; works without the engine. |
|
|
216
|
-
| `summer_read_library` | Load one entry by id: a skill's SKILL.md plus metadata, a tool's call recipe, a template's pin, a reference's body. The last line is the `entry_id` footer to report through `summer_library_feedback`. |
|
|
253
|
+
| `summer_read_library` | Load one entry by id: a skill's SKILL.md plus metadata, a tool's call recipe, a template's pin, a reference's body. A body ends with its relative links and the id that loads each; a linked file loads by `<entry id>/<link as written>` (e.g. `skill/spatial-placement/references/kit-placement-tools.md`). The last line is the `entry_id` footer to report through `summer_library_feedback`. |
|
|
217
254
|
|
|
218
255
|
### Library feedback (1)
|
|
219
256
|
|
|
@@ -234,6 +271,13 @@ Every scene-touching skill should follow this loop:
|
|
|
234
271
|
7. `summer_get_script_errors` — catch GDScript breakage.
|
|
235
272
|
8. `summer_play` → `summer_get_debugger_errors` → `summer_screenshot` (see what's on screen) → `summer_stop` if verifying runtime.
|
|
236
273
|
|
|
274
|
+
Read big things in parts, never whole:
|
|
275
|
+
|
|
276
|
+
- `summer_get_project_context` is compact by default; add `include:['scene_tree']` (or `'capabilities'`, `'settings'`) only when you need that block.
|
|
277
|
+
- `summer_world_snapshot path_prefix:'House3' fields:['pos','aabb']` reads one subtree; `classes` and `offset` narrow and page it.
|
|
278
|
+
- `summer_inspect_node fields:['transform','global_transform','scene_file_path']` reads a transform in a few hundred bytes.
|
|
279
|
+
- `summer_grep` finds the lines (with `context_lines`), then `summer_read_file` reads just that part: `offset`/`limit` for text, `json_path` / `keys` / `keys_only` for JSON such as a kit manifest.
|
|
280
|
+
|
|
237
281
|
Every asset-generation skill should follow this loop:
|
|
238
282
|
|
|
239
283
|
1. `summer_search_assets` or `summer_list_my_assets` — reuse before generating when reasonable.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: reference/mcp-tools-reference
|
|
2
2
|
kind: reference
|
|
3
|
-
version: 1.0
|
|
3
|
+
version: 1.4.0
|
|
4
4
|
summary: Canonical reference for which Summer MCP tool to call — skills should reference tool names exactly as written here.
|
|
5
5
|
use_when:
|
|
6
6
|
- choosing between Summer MCP tools and host tools for an operation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: reference/summer-folder
|
|
2
2
|
kind: reference
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.2
|
|
4
4
|
summary: The canonical layout of the project-scoped .summer/ folder — GameSoul.md, art/audio bibles, build plan, memory, and locked state.
|
|
5
5
|
use_when:
|
|
6
6
|
- authoring a skill that writes durable design output or project memory
|
|
@@ -83,7 +83,7 @@ Then write the fact in normal Markdown so users can inspect and edit it:
|
|
|
83
83
|
| `/play` | does NOT write here |
|
|
84
84
|
| `/game-feel`, `/vfx-<effect>` | does NOT write here (VFX edits scenes/scripts) |
|
|
85
85
|
| `/tune-performance` | optionally writes `.summer/perf-notes.md` if user requests |
|
|
86
|
-
| `/
|
|
86
|
+
| `/multiplayer-*`, `/summer-*` | does NOT write here (writes `summer.build.json`, `world.json`, `network/`, `client/`, `authority/`) |
|
|
87
87
|
| `/export-and-ship` | does NOT write here (writes export configs in `project.godot`) |
|
|
88
88
|
|
|
89
89
|
## Linter check (future)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 3d-lighting
|
|
3
|
-
description:
|
|
3
|
+
description: "Set up 3D scene lighting — DirectionalLight3D vs Omni vs Spot, WorldEnvironment, sky, shadow tuning, ambient — per current Summer conventions."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: rendering-and-lighting
|