summer-engine 3.8.0 → 4.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 -13
- package/.claude-plugin/plugin.json +24 -22
- package/.codex-plugin/plugin.json +18 -22
- package/.cursor-plugin/plugin.json +8 -14
- package/.factory-plugin/plugin.json +6 -13
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +133 -0
- package/GEMINI.md +3 -3
- package/README.md +118 -37
- 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/config.js +3 -2
- package/dist/cli/commands/create.js +12 -3
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +30 -13
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/memory.js +6 -2
- package/dist/cli/commands/ops.d.ts +64 -0
- package/dist/cli/commands/ops.js +329 -0
- package/dist/cli/commands/setup.d.ts +4 -0
- package/dist/cli/commands/setup.js +254 -26
- package/dist/cli/commands/skills.js +28 -11
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.js +36 -21
- 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 +33 -10
- package/dist/core/capabilities/apps.js +25 -12
- package/dist/core/capabilities/audit/args.d.ts +6 -6
- 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 +4 -4
- 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/hdri-import.d.ts +2 -2
- package/dist/core/capabilities/motion-generation.d.ts +2 -2
- 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/placement.d.ts +23 -23
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +42 -42
- 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/seeing/args.d.ts +16 -16
- 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/capabilities/ui-control.d.ts +2 -2
- package/dist/core/capabilities/world-snapshot.d.ts +4 -4
- 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.d.ts +2 -2
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/areas.d.ts +11 -0
- package/dist/core/ops/areas.js +24 -0
- package/dist/core/ops/catalog.d.ts +45 -0
- package/dist/core/ops/catalog.js +157 -0
- package/dist/core/ops/cloud.d.ts +64 -0
- package/dist/core/ops/cloud.js +198 -0
- package/dist/core/ops/contract.d.ts +120 -0
- package/dist/core/ops/contract.js +134 -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/public-catalog.d.ts +48 -0
- package/dist/core/ops/public-catalog.js +56 -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 +8 -0
- package/dist/core/ops/search.js +187 -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 +27 -6
- package/dist/installer/agent-table.d.ts +12 -0
- package/dist/installer/agent-table.js +33 -9
- package/dist/installer/cli-permissions.d.ts +65 -0
- package/dist/installer/cli-permissions.js +182 -0
- package/dist/installer/setup.d.ts +4 -0
- package/dist/installer/setup.js +12 -4
- package/dist/installer/skills-refresh.d.ts +29 -0
- package/dist/installer/skills-refresh.js +261 -0
- package/dist/installer/version-check.d.ts +51 -11
- package/dist/installer/version-check.js +147 -37
- 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 +453 -0
- package/dist/mcp/server.d.ts +45 -11
- package/dist/mcp/server.js +263 -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/dist/project-memory/agent-instructions.d.ts +47 -0
- package/dist/project-memory/agent-instructions.js +226 -0
- package/gemini-extension.json +6 -13
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/README.md +1 -1
- package/integrations/claude/README.md +6 -0
- package/integrations/claude/manifest-target.json +4 -0
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/gemini/README.md +11 -0
- 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/integrations/windsurf/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 +69 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +121 -118
- package/library/skills/adaptive-music/SKILL.md +40 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +23 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +16 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +38 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +60 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +27 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +17 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +51 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +26 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +15 -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 +14 -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 +11 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +22 -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 +28 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +83 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +27 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +39 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +79 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +20 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +12 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +29 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +258 -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 +37 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +34 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +13 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +40 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +18 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +43 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +13 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +24 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +43 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +29 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +30 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +36 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +50 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +34 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +15 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +16 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +51 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +18 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +13 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +14 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +12 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +19 -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 +33 -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 +13 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +19 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +18 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +25 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +17 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +16 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +38 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +26 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +12 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +48 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +42 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +19 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +24 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +38 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +48 -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 +43 -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 +13 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +15 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +43 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +11 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +16 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +18 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +26 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +96 -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 +24 -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 +12 -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 +47 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +52 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +44 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +55 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +14 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +13 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +22 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +77 -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 +86 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-cli/SKILL.md +133 -0
- package/library/skills/summer-cli/resource.yaml +31 -0
- package/library/skills/summer-friends/SKILL.md +14 -0
- package/library/skills/summer-leaderboards/SKILL.md +16 -0
- package/library/skills/summer-match-results/SKILL.md +17 -0
- package/library/skills/summer-matchmaking/SKILL.md +17 -0
- package/library/skills/summer-parties/SKILL.md +14 -0
- package/library/skills/summer-player-data/SKILL.md +14 -0
- package/library/skills/summer-store/SKILL.md +16 -1
- package/library/skills/summer-world-chat/SKILL.md +14 -0
- package/library/skills/summer-world-saves/SKILL.md +14 -0
- package/library/skills/text-to-motion/SKILL.md +45 -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 +37 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +46 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +32 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +55 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +64 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +15 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +32 -5
- package/library/skills/using-summer/resource.yaml +3 -2
- package/library/skills/vehicle-model/SKILL.md +92 -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 +31 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +21 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +41 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +24 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +30 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +46 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +43 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +39 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +35 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +87 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +20 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +21 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +29 -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 +8 -5
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +6 -13
- package/registry/generated/index.json +482 -349
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude-directory.json +168 -0
- package/registry/generated/plugin.claude.json +24 -22
- package/registry/generated/plugin.codex.json +18 -22
- package/registry/generated/plugin.cursor.json +8 -14
- package/registry/generated/plugin.factory.json +6 -13
- package/registry/generated/server.json +43 -0
- package/registry/generated/skills-index.md +121 -118
- package/registry/generated/skills-registry.json +167 -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 +1241 -0
- package/registry/operations/public-catalog.json +33160 -0
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sound-effect
|
|
3
|
-
description: "Make
|
|
3
|
+
description: "Make sound effects (swings, hits, whooshes, reloads, UI): three versions to pick from, then wire them."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: audio
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_assets_generate_sfx_choices summer_assets_choices summer_assets_generate_audio summer_assets_search summer_import_from_url summer_import_asset_by_id summer_add_node summer_set_prop summer_instantiate_scene summer_inspect_node summer_get_scene_tree summer_call
|
|
9
9
|
paths: ["audio/sfx/**", "scripts/**", "**/*.tscn"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -17,8 +17,8 @@ paths: ["audio/sfx/**", "scripts/**", "**/*.tscn"]
|
|
|
17
17
|
>
|
|
18
18
|
> Say why in one plain line: the best model changes a lot from one sound to the next, so picking by ear gives a better result.
|
|
19
19
|
>
|
|
20
|
-
> - **Yes** → `
|
|
21
|
-
> - **No** → `
|
|
20
|
+
> - **Yes** → `assets.generate_sfx_choices`, tell them where to listen (their Studio tab opens the page, else `reviewUrl`), then `assets.choices` until they decide. Import the approved clips and wire them. The model they approve becomes their default.
|
|
21
|
+
> - **No** → `assets.generate_audio` with `capability: "sound_effects"` and **no** `modelId` (it uses their approved default, else ElevenLabs).
|
|
22
22
|
>
|
|
23
23
|
> Ask once per chat. After they answer, do not ask again in the same chat; follow their answer for the rest of it.
|
|
24
24
|
|
|
@@ -38,7 +38,7 @@ Read `.summer/audio-bible.md` if it exists and map the request to one of its SFX
|
|
|
38
38
|
|
|
39
39
|
### 2. Reuse before you generate
|
|
40
40
|
|
|
41
|
-
Generation costs credits. `
|
|
41
|
+
Generation costs credits (`dryRun: true` on the generate call shows how many). `assets.search({ query: "<subject>", assetType: "audio", scope: "all" })`; if a clip fits, ask whether to use it.
|
|
42
42
|
|
|
43
43
|
### 3. Write the prompt
|
|
44
44
|
|
|
@@ -60,7 +60,7 @@ Foley one-shot: <physical event with materials>, <transient + tail described>, c
|
|
|
60
60
|
Foley sequence, exactly 2 seconds, three distinct mechanical sounds: at 0.2 s the empty magazine is released and pulled out with a metal click; at 1.0 s a full magazine is slammed in with a solid clack; at 1.6 s the charging handle is pulled back and released with a sharp metallic snap. Close-mic, dry, no gunshot, no music.
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
**Loops:** write `seamless loop` in the text and pass `loop: true`. Only ElevenLabs SFX v2 makes loops: use `
|
|
63
|
+
**Loops:** write `seamless loop` in the text and pass `loop: true`. Only ElevenLabs SFX v2 makes loops: use `assets.generate_audio` with `modelId: "eleven_text_to_sound_v2"`, or include it in a choice set.
|
|
64
64
|
|
|
65
65
|
Avoid: vibe words (`epic`, `cool`, `realistic`), several unrelated events in one prompt (split them, unless it is a timed sequence), and no length.
|
|
66
66
|
|
|
@@ -87,34 +87,34 @@ Show the prompt and the length before you call; every version is a billed genera
|
|
|
87
87
|
**Choice set (the person said yes):**
|
|
88
88
|
|
|
89
89
|
```
|
|
90
|
-
|
|
90
|
+
assets.generate_sfx_choices({ text: "<prompt>", durationSeconds: 1.0 })
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
The
|
|
93
|
+
The answer has `choiceSetId`, `reviewUrl`, the `clips` and `studioTabOpened`. The page opens in their open Summer Studio tab; if `studioTabOpened` is false, give them `reviewUrl`. Do not pick for them. Then:
|
|
94
94
|
|
|
95
95
|
```
|
|
96
|
-
|
|
96
|
+
assets.choices({ choiceSetId: "<id>", waitSeconds: 50 })
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
Call it again while `status` is `pending`. When it is `decided`, each
|
|
99
|
+
Call it again while `status` is `pending`. When it is `decided`, each clip with `approved: true` has `audioUrl`, `assetId` and the person's `note`. If they approved none, ask what to change and make a new set.
|
|
100
100
|
|
|
101
101
|
**One version (the person said no, or later sounds after a decided set):**
|
|
102
102
|
|
|
103
103
|
```
|
|
104
|
-
|
|
104
|
+
assets.generate_audio({ capability: "sound_effects", text: "<prompt>", durationSeconds: 1.0 })
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
Leave out `modelId` so their approved default runs. The description goes in `text`, not `prompt` (`
|
|
107
|
+
Leave out `modelId` so their approved default runs. The description goes in `text`, not `prompt` (without `text` the call is refused: `text_required`). The answer's `asset` has `assetId`, `fileUrl` and `durationSeconds`.
|
|
108
108
|
|
|
109
109
|
No Summer project (an asset-only request, or the engine is not installed or not running): stop here. The clips are in the person's Summer library; give them the `audioUrl` of each approved version and skip steps 7 and 8.
|
|
110
110
|
|
|
111
111
|
### 7. Import
|
|
112
112
|
|
|
113
113
|
```
|
|
114
|
-
summer_import_from_url(url: "<audioUrl>", path: "res://audio/sfx/sword_clash_01.<
|
|
114
|
+
summer_import_from_url(url: "<audioUrl>", path: "res://audio/sfx/sword_clash_01.<ext>")
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
-
or `summer_import_asset_by_id(assetId: "<assetId>", path: "res://audio/sfx/sword_clash_01.<
|
|
117
|
+
or `summer_import_asset_by_id(assetId: "<assetId>", path: "res://audio/sfx/sword_clash_01.<ext>")`. Keep the extension of the file you got (the end of `audioUrl` or `fileUrl`). When the person approved several versions, import each one (`_01`, `_02`, …) and play a random one per event for variety.
|
|
118
118
|
|
|
119
119
|
One-shots keep loop OFF in the Import dock; looping a one-shot clicks. For a loop: WAV uses Edit > Loop Mode = Forward; OGG/MP3 use Loop = on.
|
|
120
120
|
|
|
@@ -126,13 +126,18 @@ One-shots keep loop OFF in the Import dock; looping a one-shot clicks. For a loo
|
|
|
126
126
|
| `AudioStreamPlayer2D` | 2D positional |
|
|
127
127
|
| `AudioStreamPlayer3D` | 3D positional (weapon swing in the world, footstep) |
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
One script adds the player with its settings; `scenePath` is the exact scene to change:
|
|
130
130
|
|
|
131
131
|
```
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
132
|
+
summer_run_script(scenePath="res://main.tscn", source="""
|
|
133
|
+
func run(ctx):
|
|
134
|
+
ctx.add_node("AudioStreamPlayer3D", "SwingSFX", ctx.find("Player"), {
|
|
135
|
+
"stream": load("res://audio/sfx/sword_swing_01.wav"),
|
|
136
|
+
"bus": "SFX",
|
|
137
|
+
"max_distance": 25.0,
|
|
138
|
+
})
|
|
139
|
+
ctx.save_scene()
|
|
140
|
+
""")
|
|
136
141
|
```
|
|
137
142
|
|
|
138
143
|
The bus must match the bible (`SFX`, `UI`, `Ambient`, …); the default bus is `Master`. If the bus does not exist, run `/audio-direction`.
|
|
@@ -156,6 +161,10 @@ Save it as a `.tscn` and instantiate it per event in GDScript (`preload(...).ins
|
|
|
156
161
|
|
|
157
162
|
`summer_inspect_node(path="Player/SwingSFX")`: verify `stream`, `bus`, `volume_db`. Too quiet: raise `volume_db` (+3 to +9, never past +12), else regenerate with a heavier description. Too long: `stop()` on a timer.
|
|
158
163
|
|
|
164
|
+
## Without Summer Engine
|
|
165
|
+
|
|
166
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-6 and skip steps 7-9 (import, wiring, scene check). With `assets.generate_sfx_choices`, the person picks in the page; then save each approved clip where the person asked with `assets.get` and `out` (the `summer-assets` skill says how), and tell them the path and format.
|
|
167
|
+
|
|
159
168
|
## Fallback (no MCP)
|
|
160
169
|
|
|
161
170
|
Print the prompt, the length and the target path (`res://audio/sfx/<name>.wav`), and tell the person to make it in Summer Studio, then import it.
|
|
@@ -166,4 +175,27 @@ Print the prompt, the length and the target path (`res://audio/sfx/<name>.wav`),
|
|
|
166
175
|
- `ambient-bed` — long looping textures
|
|
167
176
|
- `music-track` — music
|
|
168
177
|
- `voice-line` — speech
|
|
169
|
-
-
|
|
178
|
+
- `summer_docs_read` id `reference/mcp-tools-reference`
|
|
179
|
+
|
|
180
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
181
|
+
## From a shell
|
|
182
|
+
|
|
183
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
184
|
+
|
|
185
|
+
| In this skill | Command |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `assets.choices`, `summer_assets_choices` | `summer assets choices` |
|
|
188
|
+
| `assets.generate_audio`, `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
189
|
+
| `assets.generate_sfx_choices`, `summer_assets_generate_sfx_choices` | `summer assets generate-sfx-choices` |
|
|
190
|
+
| `assets.get` | `summer assets get` |
|
|
191
|
+
| `assets.search`, `summer_assets_search` | `summer assets search` |
|
|
192
|
+
| `summer_docs_read` | `summer docs read` |
|
|
193
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
194
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
195
|
+
| `summer_import_asset_by_id` | `summer engine import-asset-by-id` |
|
|
196
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
197
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
198
|
+
| `summer_instantiate_scene` | `summer engine instantiate-scene` |
|
|
199
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
200
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
201
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/sound-effect
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.1.0
|
|
4
|
-
summary: "Make
|
|
4
|
+
summary: "Make sound effects (swings, hits, whooshes, reloads, UI): three versions to pick from, then wire them."
|
|
5
5
|
use_when:
|
|
6
6
|
- generating short SFX one-shots — footsteps, weapon swings, UI clicks, hit impacts, environmental cues
|
|
7
7
|
- an action, impact, or UI interaction is silent and needs a short one-shot sound wired to it
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spatial-placement
|
|
3
|
-
description: "Place 3D objects and modular kit pieces from measured geometry
|
|
3
|
+
description: "Place 3D objects and modular kit pieces from measured geometry: floors, walls, facades, pipes, alcoves."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: scene-and-project
|
|
@@ -108,17 +108,25 @@ with its back `-z` and open loops at both ends; `wall_lamp` has its back `-z`;
|
|
|
108
108
|
`wall_clamp` is small with its back `-z`. Scene `res://facade_test.tscn` with a
|
|
109
109
|
`Facade` Node3D at the origin.
|
|
110
110
|
|
|
111
|
+
Place every piece at a rough pose in one `summer_batch`, then let the measured
|
|
112
|
+
tools seat each one:
|
|
113
|
+
|
|
111
114
|
```text
|
|
112
|
-
|
|
113
|
-
scene:"res://kit/wall_double.tscn", name:"G1", position:[0,0,0]}
|
|
114
|
-
|
|
115
|
+
summer_batch {scenePath:"res://facade_test.tscn", receipt:"summary", ops:[
|
|
116
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/wall_double.tscn", name:"G1", position:[0,0,0]},
|
|
117
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/window_double.tscn", name:"G2", position:[2,0,0]},
|
|
118
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/window_double.tscn", name:"U1", position:[0,3,0]},
|
|
119
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/window_double.tscn", name:"U2", position:[2,3,0]},
|
|
120
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/gutter_section.tscn", name:"Pipe_1", position:[2.15,0.1,0.5]},
|
|
121
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/gutter_section.tscn", name:"Pipe_2", position:[2.15,1.1,0.1]},
|
|
122
|
+
{op:"InstantiateScene", parent:"./Facade", scene:"res://kit/wall_lamp.tscn", name:"Lamp", position:[1,2.6,0.5]}]}
|
|
123
|
+
-> one compact receipt: the seven nodes and their poses
|
|
124
|
+
|
|
115
125
|
summer_place_adjacent {scenePath:"res://facade_test.tscn", subject:"./Facade/G2",
|
|
116
126
|
reference:"./Facade/G1", axis:"x", side:"max", alignOtherAxes:{y:"min", z:"max"}}
|
|
117
127
|
-> verify {gap:0, residuals:{y:0, z:0}}
|
|
118
|
-
summer_instantiate_scene {..., scene:"res://kit/window_double.tscn", name:"U1", position:[0,3,0]}
|
|
119
128
|
summer_place_adjacent {..., subject:"./Facade/U1", reference:"./Facade/G1",
|
|
120
129
|
axis:"y", side:"max", alignOtherAxes:{x:"min", z:"max"}}
|
|
121
|
-
summer_instantiate_scene {..., scene:"res://kit/window_double.tscn", name:"U2", position:[2,3,0]}
|
|
122
130
|
summer_place_adjacent {..., subject:"./Facade/U2", reference:"./Facade/U1",
|
|
123
131
|
axis:"x", side:"max", alignOtherAxes:{y:"min", z:"max"}}
|
|
124
132
|
summer_measure {scenePath:"res://facade_test.tscn", mode:"plane",
|
|
@@ -127,11 +135,9 @@ summer_measure {scenePath:"res://facade_test.tscn", mode:"plane",
|
|
|
127
135
|
|
|
128
136
|
summer_raycast {scenePath:"res://facade_test.tscn", origin:[2.15,0.5,1], direction:[0,0,-1]}
|
|
129
137
|
-> hit ./Facade/G2, normal [0,0,1]: the wall front, by physics
|
|
130
|
-
summer_instantiate_scene {..., scene:"res://kit/gutter_section.tscn", name:"Pipe_1", position:[2.15,0.1,0.5]}
|
|
131
138
|
summer_attach_to_surface {scenePath:"res://facade_test.tscn", subject:"./Facade/Pipe_1",
|
|
132
139
|
ray:{origin:[2.15,0.5,1], direction:[0,0,-1]}, backAxis:"-z", upAxis:"+y", standoff:0.02}
|
|
133
140
|
-> seated_on "Facade/G2", final_gap 0.02, back_face_gap 0.02; the pipe keeps y 0.1
|
|
134
|
-
summer_instantiate_scene {..., scene:"res://kit/gutter_section.tscn", name:"Pipe_2", position:[2.15,1.1,0.1]}
|
|
135
141
|
summer_connect_ports {scenePath:"res://facade_test.tscn", subject:"./Facade/Pipe_2", subjectPort:"-Y",
|
|
136
142
|
target:"./Facade/Pipe_1", targetPort:"+Y"}
|
|
137
143
|
-> tilt_degrees 0, verify {distance:0, angle_degrees:0}, other_ports [{id:"+Y", direction:[0,1,0]}]
|
|
@@ -139,7 +145,6 @@ summer_repeat_along {scenePath:"res://facade_test.tscn", template:"res://kit/wal
|
|
|
139
145
|
parent:"./Facade", start:[2.15,0.3,0.02], end:[2.15,1.9,0.02], spacing:0.45}
|
|
140
146
|
-> count 4, created ["Facade/wall_clamp_1", ...]
|
|
141
147
|
|
|
142
|
-
summer_instantiate_scene {..., scene:"res://kit/wall_lamp.tscn", name:"Lamp", position:[1,2.6,0.5]}
|
|
143
148
|
summer_attach_to_surface {scenePath:"res://facade_test.tscn", subject:"./Facade/Lamp",
|
|
144
149
|
surface:"./Facade/G1", backAxis:"-z", standoff:0}
|
|
145
150
|
summer_starcast {scenePath:"res://facade_test.tscn", path:"./Facade/Lamp", directionSpace:"local"}
|
|
@@ -203,3 +208,33 @@ anchors, pass their names instead.
|
|
|
203
208
|
- A piece seated flush against a single-sided wall can read `open` in the
|
|
204
209
|
wall's direction while `contacts` lists the wall: Starcast's one ray per
|
|
205
210
|
direction starts at the touching face. Read `contacts` too.
|
|
211
|
+
|
|
212
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
213
|
+
## From a shell
|
|
214
|
+
|
|
215
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
216
|
+
|
|
217
|
+
| In this skill | Command |
|
|
218
|
+
|---|---|
|
|
219
|
+
| `summer_align_distribute_3d` | `summer engine align-distribute-3d` |
|
|
220
|
+
| `summer_attach_to_surface` | `summer engine attach-to-surface` |
|
|
221
|
+
| `summer_batch` | `summer engine batch` |
|
|
222
|
+
| `summer_connect_ports` | `summer engine connect-ports` |
|
|
223
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
224
|
+
| `summer_inspect_asset` | `summer engine inspect-asset` |
|
|
225
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
226
|
+
| `summer_instantiate_scene` | `summer engine instantiate-scene` |
|
|
227
|
+
| `summer_measure` | `summer engine measure` |
|
|
228
|
+
| `summer_open_scene` | `summer engine open-scene` |
|
|
229
|
+
| `summer_place_adjacent` | `summer engine place-adjacent` |
|
|
230
|
+
| `summer_raycast` | `summer engine raycast` |
|
|
231
|
+
| `summer_repeat_along` | `summer engine repeat-along` |
|
|
232
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
233
|
+
| `summer_screenshot` | `summer engine screenshot` |
|
|
234
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
235
|
+
| `summer_snap_to_surface` | `summer engine snap-to-surface` |
|
|
236
|
+
| `summer_snapshot_diff` | `summer engine snapshot-diff` |
|
|
237
|
+
| `summer_starcast` | `summer engine starcast` |
|
|
238
|
+
| `summer_test_placement` | `summer engine test-placement` |
|
|
239
|
+
| `summer_world_snapshot` | `summer engine world-snapshot` |
|
|
240
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/spatial-placement
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.1.0
|
|
4
|
-
summary: Place 3D objects and modular kit pieces from measured geometry
|
|
4
|
+
summary: "Place 3D objects and modular kit pieces from measured geometry: floors, walls, facades, pipes, alcoves."
|
|
5
5
|
use_when:
|
|
6
6
|
- positioning a prop, character, collider, or platform so it sits flush, avoids overlap, or keeps clearance
|
|
7
7
|
- placing something against a wall, inside an alcove, or on a shelf and needing to know which side is blocked and by how much
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sprite-sheet
|
|
3
|
-
description: "Generate animated 2D character
|
|
3
|
+
description: "Generate animated 2D character sprite sheets (walk, attack, idle, death) for AnimatedSprite2D."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: 2d-assets
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Glob Write Edit
|
|
8
|
+
allowed-tools: Read Grep Glob Write Edit summer_assets_generate_image summer_assets_slice_sheet summer_assets_search summer_import_from_url summer_import_from_url_batch summer_import_asset_by_id summer_set_resource_property summer_write_file summer_add_node summer_set_prop summer_save_scene summer_call
|
|
9
9
|
paths: ["assets/**", "sprites/**", "art/sprites/**"]
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -18,10 +18,10 @@ Sprite-sheet generation from a single text-to-image call is **unreliable**. Mode
|
|
|
18
18
|
This skill therefore offers **three paths**, ranked by reliability:
|
|
19
19
|
|
|
20
20
|
1. **Per-frame img2img** (most reliable) — generate the base pose, then generate each subsequent frame via `referenceImageUrl` with a small pose delta. Composite the frames into a sheet externally or wire each as a separate `SpriteFrames` entry.
|
|
21
|
-
2. **Single-call sheet + auto-slice** (fast; sheet coherence is the gamble, not the cutting) — one prompt asks for the grid, then `
|
|
21
|
+
2. **Single-call sheet + auto-slice** (fast; sheet coherence is the gamble, not the cutting) — one prompt asks for the grid, then `assets.slice_sheet` cuts it into individual frames server-side. Worth trying once for short cycles (4 frames or fewer) before falling back to (1).
|
|
22
22
|
3. **Manual authoring** (most reliable, slowest) — hand-author in **Aseprite** or **Piskel**. For pixel art at 32×32, this is often faster than fixing AI generations.
|
|
23
23
|
|
|
24
|
-
There is no single "generate a sprite sheet"
|
|
24
|
+
There is no single "generate a sprite sheet" operation, but there **is** a shared two-step sheet pipeline, and it is the same one Studio's Guided "sprite-sheet" workflow runs: `assets.generate_image` produces one sheet, then `assets.slice_sheet({ assetId })` runs the server-side vision slicer that removes the background, detects each frame's bounding box, crops, and uploads every frame as its own image (one URL per slice). Call `summer_call({ op: "docs.workflows", input: { workflowId: "sprite-sheet" } })` for the current ordered recipe and its stated limitations. Only Studio's frame-preview and visual timing-review UI is unreachable from MCP — the generation and the slicing both are reachable.
|
|
25
25
|
|
|
26
26
|
So do not tell the user to cut a generated sheet by hand or in ImageMagick. The cutting is automated; what is unreliable is inter-frame *consistency* inside the generated sheet.
|
|
27
27
|
|
|
@@ -38,7 +38,7 @@ So do not tell the user to cut a generated sheet by hand or in ImageMagick. The
|
|
|
38
38
|
- The character is 3D — use `generate-motion` for skeletal animation.
|
|
39
39
|
- The user wants a single static sprite → `pixel-art` or `character-portrait`.
|
|
40
40
|
- The user wants UI animation (loading spinner, button hover) — animate via `AnimationPlayer` rotating/tweening a static texture instead. Don't sprite-sheet UI.
|
|
41
|
-
- The user has 12+ frames per animation and 4+ animations. That is dozens to hundreds of generations, each using credits. Pause and agree on scope first.
|
|
41
|
+
- The user has 12+ frames per animation and 4+ animations. That is dozens to hundreds of generations, each using credits. Pause and agree on scope first; `dryRun: true` on one frame's call shows its credits.
|
|
42
42
|
|
|
43
43
|
## Steps
|
|
44
44
|
|
|
@@ -69,16 +69,16 @@ State the path before starting: "I'll do per-frame img2img: 6 generations. The f
|
|
|
69
69
|
Generate frame 1 (or use existing base). For each subsequent frame, prompt the pose delta and pass the previous frame as `referenceImageUrl`:
|
|
70
70
|
|
|
71
71
|
```
|
|
72
|
-
|
|
73
|
-
prompt
|
|
74
|
-
referenceImageUrl
|
|
75
|
-
model
|
|
76
|
-
style
|
|
77
|
-
removeBackground
|
|
78
|
-
)
|
|
72
|
+
assets.generate_image({
|
|
73
|
+
prompt: "goblin warrior, walk cycle frame 2 of 6, right leg forward, slight bob upward, identical character, same costume, same palette. Not a different character, not a different costume, no scene background.",
|
|
74
|
+
referenceImageUrl: "<frame 1 fileUrl>",
|
|
75
|
+
model: "nano-banana-2",
|
|
76
|
+
style: "<same as base>",
|
|
77
|
+
removeBackground: true
|
|
78
|
+
})
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
`
|
|
81
|
+
Keep `aspectRatio` (and `width` / `height`, if you set them) the same for every frame; put negations in the prompt text. `removeBackground: true` gives you real alpha instead of a prompted "transparent background" that the model may paint as a literal checkerboard. `referenceImageUrl` only works on edit-capable models (`nano-banana-2`, `seedream-5-pro`, `nano-banana-lite`, `gpt-image-2`, `gemini-flash`, `flux-2`); `grok-imagine` has no edit endpoint and returns `edit_not_supported`.
|
|
82
82
|
|
|
83
83
|
Repeat for each frame. Save each as `goblin_walk_01.png`, `goblin_walk_02.png`, etc.
|
|
84
84
|
|
|
@@ -89,23 +89,24 @@ composite them into one sheet image.
|
|
|
89
89
|
### 3b. Path 2 — Single-call sheet, then auto-slice
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
|
|
93
|
-
prompt
|
|
94
|
-
model
|
|
95
|
-
style
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
assets.generate_image({
|
|
93
|
+
prompt: "goblin warrior walk cycle, sprite sheet, 6 frames in a horizontal row, identical character across frames, side view, frames clearly separated with empty space between them, consistent lighting, consistent palette. No scene background, no varying lighting, not a different character per frame.",
|
|
94
|
+
model: "nano-banana-2",
|
|
95
|
+
style: "none",
|
|
96
|
+
aspectRatio: "21:9",
|
|
97
|
+
removeBackground: true
|
|
98
|
+
})
|
|
98
99
|
```
|
|
99
100
|
|
|
100
|
-
There is no `"pixel"` style preset (`style` is `realistic | cartoon | anime | none
|
|
101
|
+
There is no `"pixel"` style preset (`style` is `realistic | cartoon | anime | none`). A wide `aspectRatio` gives a row of frames room; the layout and the negations have to be in the prompt.
|
|
101
102
|
|
|
102
103
|
Then cut it with the same server-side slicer Studio uses, passing the asset id the generation returned:
|
|
103
104
|
|
|
104
105
|
```
|
|
105
|
-
|
|
106
|
+
assets.slice_sheet({ assetId: "<generated sheet assetId>" })
|
|
106
107
|
```
|
|
107
108
|
|
|
108
|
-
It returns the
|
|
109
|
+
It returns `source` (the sheet's width and height) and `slices`: each slice's `url`, `name`, `category` and `bbox`. The slices are image URLs, not assets: import the frames you want with `summer_import_from_url_batch`.
|
|
109
110
|
|
|
110
111
|
Inspect the result. If the frames are coherent and the count matches, proceed. If anatomy morphs across the row, or the slicer returns one giant box (items touching / no gaps), fall back to Path 1 or Path 3 — re-prompting with more separation between frames is the first thing to try.
|
|
111
112
|
|
|
@@ -202,7 +203,7 @@ func _physics_process(delta):
|
|
|
202
203
|
- **Wiring an inconsistent sheet anyway** because you don't want to regenerate. Ship the inconsistency and the player notices the morphing limbs immediately. Cut the frame count or hand-author instead.
|
|
203
204
|
- **Sprite-sheeting things that don't need to be sprite-sheeted.** UI animation, simple bobs, fades — use `AnimationPlayer` to tween a static texture instead. Sprite sheets are for character animation specifically.
|
|
204
205
|
- **Pretending Aseprite is a failure.** Hand-authoring 4 pixel-art frames takes 10 minutes and looks better than 8 AI generations. Don't oversell AI here.
|
|
205
|
-
- **Sending the user to ImageMagick or Aseprite to *cut* a generated sheet.** `
|
|
206
|
+
- **Sending the user to ImageMagick or Aseprite to *cut* a generated sheet.** `assets.slice_sheet` does that server-side. Hand off the creative work, not the mechanical work.
|
|
206
207
|
|
|
207
208
|
## Edge cases
|
|
208
209
|
|
|
@@ -212,14 +213,18 @@ func _physics_process(delta):
|
|
|
212
213
|
- **User wants a turn-around (rotating in place over 8 frames).** Same as 8-direction; generate single-frame per angle as anchor, accept that AI rotation won't be perfectly consistent.
|
|
213
214
|
- **Animation needs to loop seamlessly.** Make frame N+1 explicitly bridge back to frame 1 in your prompt. Or generate one extra "bridge" frame and drop it.
|
|
214
215
|
|
|
216
|
+
## Without Summer Engine
|
|
217
|
+
|
|
218
|
+
In a session without Summer Engine tools (the assets profile; the `summer-assets` skill has the whole loop), do steps 1-3 and skip steps 4-6 (import, `AnimatedSprite2D`, trigger code). Pass `out` with the person's folder for each frame, or slice a sheet with `assets.slice_sheet` and save each piece with `assets.get` and `out` (the `summer-assets` skill says how). Tell the person the frame order and the frame rate you planned.
|
|
219
|
+
|
|
215
220
|
## Fallback (no MCP)
|
|
216
221
|
|
|
217
222
|
Print the per-frame call sequence:
|
|
218
223
|
|
|
219
224
|
```
|
|
220
|
-
Frame 1:
|
|
221
|
-
Frame 2:
|
|
222
|
-
Frame 3:
|
|
225
|
+
Frame 1: assets.generate_image({ prompt: "<base>", model: "nano-banana-2", style: "none", ... })
|
|
226
|
+
Frame 2: assets.generate_image({ prompt: "<base + delta>", referenceImageUrl: "<frame 1>", ... })
|
|
227
|
+
Frame 3: assets.generate_image({ prompt: "<base + delta>", referenceImageUrl: "<frame 2>", ... })
|
|
223
228
|
...
|
|
224
229
|
```
|
|
225
230
|
|
|
@@ -241,4 +246,27 @@ After the animation is wired:
|
|
|
241
246
|
- `character-portrait` — base portrait for higher-res characters.
|
|
242
247
|
- `generate-motion` — 3D-skeletal counterpart.
|
|
243
248
|
- `sound-effect` — frame-synced SFX.
|
|
244
|
-
-
|
|
249
|
+
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_image`.
|
|
250
|
+
|
|
251
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
252
|
+
## From a shell
|
|
253
|
+
|
|
254
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
255
|
+
|
|
256
|
+
| In this skill | Command |
|
|
257
|
+
|---|---|
|
|
258
|
+
| `assets.generate_image`, `summer_assets_generate_image` | `summer assets generate-image` |
|
|
259
|
+
| `assets.get` | `summer assets get` |
|
|
260
|
+
| `summer_assets_search` | `summer assets search` |
|
|
261
|
+
| `assets.slice_sheet`, `summer_assets_slice_sheet` | `summer assets slice-sheet` |
|
|
262
|
+
| `summer_docs_read` | `summer docs read` |
|
|
263
|
+
| `docs.workflows` | `summer docs workflows` |
|
|
264
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
265
|
+
| `summer_import_asset_by_id` | `summer engine import-asset-by-id` |
|
|
266
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
267
|
+
| `summer_import_from_url_batch` | `summer engine import-from-url-batch` |
|
|
268
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
269
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
270
|
+
| `summer_set_resource_property` | `summer engine set-resource-property` |
|
|
271
|
+
| `summer_write_file` | `summer engine write-file` |
|
|
272
|
+
<!-- /shell-commands -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
id: skill/sprite-sheet
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.4
|
|
4
|
-
summary: Generate animated 2D character
|
|
4
|
+
summary: "Generate animated 2D character sprite sheets (walk, attack, idle, death) for AnimatedSprite2D."
|
|
5
5
|
use_when:
|
|
6
6
|
- generating animated 2D character sprites laid out as a grid of frames — walk cycle, attack frames, idle bob, death sequence
|
|
7
7
|
- a 2D sprite needs its frames laid out as one grid image for AnimatedSprite2D or SpriteFrames
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: store-art
|
|
3
|
-
description: "Make Summer Games store art per slot
|
|
3
|
+
description: "Make Summer Games store art per slot: key art, covers, icons, screenshots, trailer, size and text rules."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: deployment
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools:
|
|
8
|
+
allowed-tools: summer_docs_read
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# /store-art — store art
|
|
@@ -14,10 +14,21 @@ This skill covers every store art slot per flow (desktop and mobile): size, shap
|
|
|
14
14
|
|
|
15
15
|
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
16
|
|
|
17
|
-
1. `
|
|
17
|
+
1. `summer_docs_read` with id `skill/store-art` returns the current text when this machine is signed in (`summer login`).
|
|
18
18
|
2. A host that shows MCP prompts or resources has it as the `store-art` prompt and the resource `summer://skills/store-art`.
|
|
19
19
|
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
20
|
|
|
21
21
|
Screenshots: `summer_capture_gameplay` takes them offscreen. Get past the title screen with the game's own flags in `args` or with `steps`, e.g. `{"args":["--autostart"],"steps":[{"wait":3000},{"shot":true},{"key":"Space"},{"wait":800},{"shot":true}]}`.
|
|
22
22
|
|
|
23
23
|
The one rule to keep even before you load it: Key art, covers and icons carry no text: the stores draw the title over them. Screenshots are real play.
|
|
24
|
+
|
|
25
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
26
|
+
## From a shell
|
|
27
|
+
|
|
28
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
29
|
+
|
|
30
|
+
| In this skill | Command |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `summer_docs_read` | `summer docs read` |
|
|
33
|
+
| `summer_capture_gameplay` | `summer engine capture-gameplay` |
|
|
34
|
+
<!-- /shell-commands -->
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
id: skill/store-art
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "Make Summer Games store art per slot
|
|
4
|
+
summary: "Make Summer Games store art per slot: key art, covers, icons, screenshots, trailer, size and text rules."
|
|
5
5
|
use_when:
|
|
6
6
|
- "making or choosing store art for Summer Games: key art, cover, icon, screenshots, trailer"
|
|
7
|
-
- "
|
|
7
|
+
- "store.set_art rejects an image for its shape or size, or store.get_listing says an art slot is missing"
|
|
8
8
|
- "deciding whether a store image may carry text, and which slot falls back to which"
|
|
9
9
|
facets:
|
|
10
10
|
lifecycle:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: store-listing
|
|
3
|
-
description: "Write a Summer Games store page
|
|
3
|
+
description: "Write a Summer Games store page: title, tagline, descriptions, tags, per platform, and what never to write."
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: deployment
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools:
|
|
8
|
+
allowed-tools: summer_docs_read
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# /store-listing — store listing
|
|
@@ -14,8 +14,18 @@ This skill covers the store page text per flow (desktop and mobile): targets, ti
|
|
|
14
14
|
|
|
15
15
|
Its current text lives on the hosted Summer Engine MCP, the same text the Studio agent reads, so it changes with the store and is never stale here. Load it before you act:
|
|
16
16
|
|
|
17
|
-
1. `
|
|
17
|
+
1. `summer_docs_read` with id `skill/store-listing` returns the current text when this machine is signed in (`summer login`).
|
|
18
18
|
2. A host that shows MCP prompts or resources has it as the `store-listing` prompt and the resource `summer://skills/store-listing`.
|
|
19
19
|
3. Without a store sign-in: https://docs.summerengine.com/llms.txt lists every docs page; fetch any page as .md.
|
|
20
20
|
|
|
21
21
|
The one rule to keep even before you load it: Never invent features, modes, player counts, awards or prices.
|
|
22
|
+
|
|
23
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
24
|
+
## From a shell
|
|
25
|
+
|
|
26
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
27
|
+
|
|
28
|
+
| In this skill | Command |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `summer_docs_read` | `summer docs read` |
|
|
31
|
+
<!-- /shell-commands -->
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
id: skill/store-listing
|
|
2
2
|
kind: skill
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
summary: "Write a Summer Games store page
|
|
4
|
+
summary: "Write a Summer Games store page: title, tagline, descriptions, tags, per platform, and what never to write."
|
|
5
5
|
use_when:
|
|
6
6
|
- "writing or fixing a game's store page text on Summer Games: title, tagline, description, tags"
|
|
7
|
-
- "
|
|
7
|
+
- "store.update_listing or store.get_listing says a text field is missing or wrong"
|
|
8
8
|
- "choosing the targets (web, Mac, Windows, Linux, iPhone, Android) that decide the desktop and mobile store flows"
|
|
9
9
|
facets:
|
|
10
10
|
lifecycle:
|
|
@@ -5,11 +5,11 @@ license: MIT
|
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: multiplayer-and-networking
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read Grep Edit Write summer_get_script_errors summer_play summer_stop summer_get_diagnostics
|
|
8
|
+
allowed-tools: Read Grep Edit Write summer_get_script_errors summer_play summer_stop summer_get_diagnostics summer_call
|
|
9
9
|
paths: ["**/*.gd"]
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# /summer-analytics — game events you
|
|
12
|
+
# /summer-analytics — game events you read in Grow
|
|
13
13
|
|
|
14
14
|
## Overview
|
|
15
15
|
|
|
@@ -105,9 +105,11 @@ On the client, after a menu choice:
|
|
|
105
105
|
|
|
106
106
|
### 4. Read the results
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
`analytics.summary` (hosted, after `summer login`) returns the
|
|
109
|
+
game's top custom events next to its store page views, launches and play
|
|
110
|
+
time; the `grow-analytics` skill says how to read them. In Studio:
|
|
111
|
+
`studio.open` with target `game`, params `gameId` (your game's id) and
|
|
112
|
+
`section: "analytics"`. Events show up after a short delay.
|
|
111
113
|
|
|
112
114
|
## Result codes
|
|
113
115
|
|
|
@@ -145,3 +147,18 @@ Every failure is final: none of them asks you to capture again.
|
|
|
145
147
|
- `multiplayer` — where the client and the authority run
|
|
146
148
|
- `multiplayer-state` — the authority's Command handlers, where most events happen
|
|
147
149
|
- `summer-match-results` — results and ratings, which Summer records itself
|
|
150
|
+
|
|
151
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
152
|
+
## From a shell
|
|
153
|
+
|
|
154
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
155
|
+
|
|
156
|
+
| In this skill | Command |
|
|
157
|
+
|---|---|
|
|
158
|
+
| `analytics.summary` | `summer analytics summary` |
|
|
159
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
160
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
161
|
+
| `summer_play` | `summer engine play` |
|
|
162
|
+
| `summer_stop` | `summer engine stop` |
|
|
163
|
+
| `studio.open` | `summer studio open` |
|
|
164
|
+
<!-- /shell-commands -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: skill/summer-analytics
|
|
2
2
|
kind: skill
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
summary: "Send game events to Summer analytics from the authority or client: fire-and-forget, never blocking gameplay."
|
|
5
5
|
use_when:
|
|
6
6
|
- "adding analytics, telemetry or event tracking to a Summer game: level completed, coin collected, tutorial funnel"
|
|
@@ -25,5 +25,5 @@ related:
|
|
|
25
25
|
- skill/grow-analytics
|
|
26
26
|
source: official
|
|
27
27
|
license: MIT
|
|
28
|
-
status:
|
|
28
|
+
status: stable
|
|
29
29
|
recommended: false
|