summer-engine 2.8.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +131 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +159 -391
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/{commands → cli/commands}/setup.js +43 -89
- package/dist/{commands → cli/commands}/skills.js +85 -222
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +47 -0
- package/dist/core/skills-registry.js +83 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/{lib → installer}/agent-config.d.ts +20 -1
- package/dist/{lib → installer}/agent-config.js +138 -24
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +146 -0
- package/dist/installer/skill-locations.d.ts +45 -0
- package/dist/installer/skill-locations.js +170 -0
- package/dist/installer/version-check.d.ts +174 -0
- package/dist/{lib → installer}/version-check.js +173 -42
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +70 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/cline/README.md +13 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +16 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/opencode/README.md +15 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +13 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +13 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +22 -16
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-registry.json +851 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/status.js +0 -46
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
- /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
1
|
import { z } from "zod";
|
|
2
|
+
import { imageGenerationArgsSchema } from "../../core/capabilities/image-generation.js";
|
|
3
3
|
import { writeFile, mkdir } from "fs/promises";
|
|
4
4
|
import { tmpdir } from "os";
|
|
5
5
|
import { join } from "path";
|
|
6
|
-
import { getAuthToken } from "../../
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import { getAuthToken } from "../../core/auth.js";
|
|
7
|
+
import { resolveGatewayUrl } from "../../core/config.js";
|
|
8
|
+
import { readJsonResponse } from "../../core/util/http.js";
|
|
9
|
+
import { asRecord, stringFrom } from "../../core/util/json.js";
|
|
10
|
+
import { TOOLKIT_VERSION as CLI_VERSION } from "../../core/version.js";
|
|
10
11
|
const TOOL_BY_ENDPOINT = {
|
|
11
12
|
"/api/mcp/generate/image": "summer_generate_image",
|
|
12
13
|
"/api/mcp/generate/audio": "summer_generate_audio",
|
|
@@ -19,14 +20,6 @@ const TOOL_BY_ENDPOINT = {
|
|
|
19
20
|
// ---------------------------------------------------------------------------
|
|
20
21
|
// Shared helpers
|
|
21
22
|
// ---------------------------------------------------------------------------
|
|
22
|
-
function asRecord(value) {
|
|
23
|
-
return value && typeof value === "object" && !Array.isArray(value)
|
|
24
|
-
? value
|
|
25
|
-
: null;
|
|
26
|
-
}
|
|
27
|
-
function stringFrom(value) {
|
|
28
|
-
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
29
|
-
}
|
|
30
23
|
function formatValidationDetailEntry(entry) {
|
|
31
24
|
const record = asRecord(entry);
|
|
32
25
|
if (!record) {
|
|
@@ -68,34 +61,26 @@ function formattedApiErrorMessage(status, data) {
|
|
|
68
61
|
stringFrom(record?.error) ??
|
|
69
62
|
`Request failed (${status})`);
|
|
70
63
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return
|
|
77
|
-
}
|
|
78
|
-
const text = await res.text().catch(() => "");
|
|
79
|
-
if (!text)
|
|
80
|
-
return {};
|
|
81
|
-
try {
|
|
82
|
-
return JSON.parse(text);
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return { message: text.slice(0, 1000) };
|
|
86
|
-
}
|
|
64
|
+
/** Lenient body read for Studio generation endpoints: {} for an empty body,
|
|
65
|
+
* {message} for a non-JSON one, so callers can always index the result. */
|
|
66
|
+
async function readLenientJson(res) {
|
|
67
|
+
const { text, json, parsed } = await readJsonResponse(res);
|
|
68
|
+
if (parsed)
|
|
69
|
+
return json;
|
|
70
|
+
return text ? { message: text.slice(0, 1000) } : {};
|
|
87
71
|
}
|
|
88
72
|
async function mcpGenerate(endpoint, body, timeoutMs = 120_000) {
|
|
89
73
|
const token = await getAuthToken();
|
|
90
74
|
if (!token) {
|
|
91
75
|
return {
|
|
92
|
-
error: "Not signed in. Run in your terminal:\n npx summer-engine login\nOr open: https://www.summerengine.com/login",
|
|
76
|
+
error: "Not signed in. Run in your terminal:\n npx -y summer-engine@latest login\nOr open: https://www.summerengine.com/login",
|
|
93
77
|
status: 401,
|
|
94
78
|
};
|
|
95
79
|
}
|
|
80
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
96
81
|
let res;
|
|
97
82
|
try {
|
|
98
|
-
res = await fetch(`${
|
|
83
|
+
res = await fetch(`${gatewayUrl}${endpoint}`, {
|
|
99
84
|
method: "POST",
|
|
100
85
|
headers: {
|
|
101
86
|
Authorization: `Bearer ${token}`,
|
|
@@ -114,7 +99,7 @@ async function mcpGenerate(endpoint, body, timeoutMs = 120_000) {
|
|
|
114
99
|
const msg = err instanceof Error ? err.message : String(err);
|
|
115
100
|
return { error: `Generation request failed: ${msg}`, status: 0 };
|
|
116
101
|
}
|
|
117
|
-
const data = await
|
|
102
|
+
const data = await readLenientJson(res);
|
|
118
103
|
if (!res.ok) {
|
|
119
104
|
let message = formattedApiErrorMessage(res.status, data);
|
|
120
105
|
if (res.status === 402) {
|
|
@@ -125,7 +110,7 @@ async function mcpGenerate(endpoint, body, timeoutMs = 120_000) {
|
|
|
125
110
|
if (res.status === 401) {
|
|
126
111
|
message =
|
|
127
112
|
(data.message || "Auth token expired.") +
|
|
128
|
-
"\nRe-authenticate:\n npx summer-engine login";
|
|
113
|
+
"\nRe-authenticate:\n npx -y summer-engine@latest login";
|
|
129
114
|
}
|
|
130
115
|
return { error: message, data: { ...data, status: res.status }, status: res.status };
|
|
131
116
|
}
|
|
@@ -134,9 +119,10 @@ async function mcpGenerate(endpoint, body, timeoutMs = 120_000) {
|
|
|
134
119
|
async function mcpGet(endpoint, searchParams, timeoutMs = 30_000) {
|
|
135
120
|
const token = await getAuthToken();
|
|
136
121
|
const suffix = searchParams?.size ? `?${searchParams.toString()}` : "";
|
|
122
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
137
123
|
let res;
|
|
138
124
|
try {
|
|
139
|
-
res = await fetch(`${
|
|
125
|
+
res = await fetch(`${gatewayUrl}${endpoint}${suffix}`, {
|
|
140
126
|
headers: {
|
|
141
127
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
142
128
|
"X-Summer-Client": "summer-cli",
|
|
@@ -152,7 +138,7 @@ async function mcpGet(endpoint, searchParams, timeoutMs = 30_000) {
|
|
|
152
138
|
const msg = err instanceof Error ? err.message : String(err);
|
|
153
139
|
return { error: `Request failed: ${msg}`, status: 0 };
|
|
154
140
|
}
|
|
155
|
-
const data = await
|
|
141
|
+
const data = await readLenientJson(res);
|
|
156
142
|
if (!res.ok) {
|
|
157
143
|
return {
|
|
158
144
|
error: formattedApiErrorMessage(res.status, data),
|
|
@@ -190,10 +176,11 @@ async function pollJob(jobId, maxWaitMs = 600_000, intervalMs = 5_000) {
|
|
|
190
176
|
const token = await getAuthToken();
|
|
191
177
|
if (!token)
|
|
192
178
|
return { error: "Not signed in" };
|
|
179
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
193
180
|
const deadline = Date.now() + maxWaitMs;
|
|
194
181
|
while (Date.now() < deadline) {
|
|
195
182
|
try {
|
|
196
|
-
const res = await fetch(`${
|
|
183
|
+
const res = await fetch(`${gatewayUrl}/api/mcp/jobs/${encodeURIComponent(jobId)}`, {
|
|
197
184
|
headers: { Authorization: `Bearer ${token}` },
|
|
198
185
|
signal: AbortSignal.timeout(15_000),
|
|
199
186
|
});
|
|
@@ -284,36 +271,22 @@ Two modes:
|
|
|
284
271
|
|
|
285
272
|
Style presets: "realistic" (default), "cartoon", "anime", "none"
|
|
286
273
|
|
|
274
|
+
For an alpha PNG, set removeBackground: true. Prompt wording alone does not
|
|
275
|
+
guarantee transparency; background removal runs server-side after generation.
|
|
276
|
+
|
|
287
277
|
The 'options' object is passed directly to the AI provider for full control.
|
|
288
278
|
|
|
289
279
|
Returns the asset with fileUrl (hosted) and localPath (temp file on disk).
|
|
290
280
|
Use the Read tool on localPath to show the image to the user for approval.
|
|
291
281
|
|
|
292
282
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
293
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
294
|
-
prompt: z.string().describe("Description of the image to generate"),
|
|
295
|
-
model: z
|
|
296
|
-
.string()
|
|
297
|
-
.default("nano-banana-2")
|
|
298
|
-
.describe("Model name or full provider ID"),
|
|
299
|
-
style: z
|
|
300
|
-
.string()
|
|
301
|
-
.default("realistic")
|
|
302
|
-
.describe("Style preset: realistic, cartoon, anime, or 'none' to skip"),
|
|
303
|
-
referenceImageUrl: z
|
|
304
|
-
.string()
|
|
305
|
-
.optional()
|
|
306
|
-
.describe("Source image URL for img2img / edit mode. The prompt describes how to transform this image."),
|
|
307
|
-
options: z
|
|
308
|
-
.record(z.any())
|
|
309
|
-
.optional()
|
|
310
|
-
.describe("Provider-specific params (guidance_scale, seed, image_size, negative_prompt, etc.)"),
|
|
311
|
-
}, async ({ prompt, model, style, referenceImageUrl, options }) => {
|
|
283
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageGenerationArgsSchema.shape, async ({ prompt, model, style, referenceImageUrl, removeBackground, options }) => {
|
|
312
284
|
const result = await mcpGenerate("/api/mcp/generate/image", {
|
|
313
285
|
prompt,
|
|
314
286
|
model,
|
|
315
287
|
style,
|
|
316
288
|
referenceImageUrl,
|
|
289
|
+
removeBackground,
|
|
317
290
|
options,
|
|
318
291
|
});
|
|
319
292
|
if (result.error) {
|
|
@@ -346,7 +319,7 @@ Returns source dimensions plus the generated slice URLs, names, categories, boun
|
|
|
346
319
|
boxes, and widget metadata when the sheet contains UI controls.
|
|
347
320
|
|
|
348
321
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
349
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
322
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
350
323
|
assetId: z
|
|
351
324
|
.string()
|
|
352
325
|
.describe("Summer image asset ID to slice, usually returned by summer_generate_image"),
|
|
@@ -382,7 +355,7 @@ return a normal 200 with the setting ignored.
|
|
|
382
355
|
|
|
383
356
|
Returns the generated audio URL and asset metadata.
|
|
384
357
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
385
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
358
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
386
359
|
capability: z
|
|
387
360
|
.string()
|
|
388
361
|
.describe("Type of audio: text_to_speech, sound_effects, music, text_to_dialogue"),
|
|
@@ -484,7 +457,7 @@ By default, waits for completion (up to 10 min) and returns the result directly.
|
|
|
484
457
|
Set wait=false to get the jobId immediately and poll manually with summer_check_job.
|
|
485
458
|
|
|
486
459
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
487
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
460
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
488
461
|
prompt: z
|
|
489
462
|
.string()
|
|
490
463
|
.optional()
|
|
@@ -601,7 +574,7 @@ Pass provider-specific params in 'options' (negative_prompt, num_frames, etc.).
|
|
|
601
574
|
|
|
602
575
|
Returns the generated video URL and asset metadata.
|
|
603
576
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
604
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
577
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
605
578
|
prompt: z
|
|
606
579
|
.string()
|
|
607
580
|
.describe("Description of the video content"),
|
|
@@ -651,15 +624,16 @@ waits automatically.
|
|
|
651
624
|
Status values: waiting, active, completed, failed, delayed, unknown.
|
|
652
625
|
|
|
653
626
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
654
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
627
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
655
628
|
jobId: z.string().describe("The job ID returned by an async generation tool"),
|
|
656
629
|
}, async ({ jobId }) => {
|
|
657
630
|
const token = await getAuthToken();
|
|
658
631
|
if (!token) {
|
|
659
|
-
return errorResult("Not signed in. Run: npx summer-engine login");
|
|
632
|
+
return errorResult("Not signed in. Run: npx -y summer-engine@latest login");
|
|
660
633
|
}
|
|
661
634
|
try {
|
|
662
|
-
const
|
|
635
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
636
|
+
const res = await fetch(`${gatewayUrl}/api/mcp/jobs/${encodeURIComponent(jobId)}`, {
|
|
663
637
|
headers: { Authorization: `Bearer ${token}` },
|
|
664
638
|
signal: AbortSignal.timeout(15_000),
|
|
665
639
|
});
|
|
@@ -712,7 +686,7 @@ signature moves not on the curated list, fall back to hand-authoring in the
|
|
|
712
686
|
Summer Engine or importing from Mixamo.
|
|
713
687
|
|
|
714
688
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
715
|
-
Requires authentication: run 'npx summer-engine login' first.`, {
|
|
689
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
716
690
|
rigAssetId: z
|
|
717
691
|
.string()
|
|
718
692
|
.describe("Asset ID of a rigged character (from summer_generate_3d with options.rig=true)"),
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* summer_search_library / summer_read_library — the MCP face of the runtime
|
|
3
|
+
* librarian. Behavior lives in src/core/library-search.ts and
|
|
4
|
+
* src/core/library-read.ts; `summer tool search-library|read-library`
|
|
5
|
+
* (src/core/capabilities/tool-dispatch.ts) calls the same functions.
|
|
6
|
+
* Engine-free: both read the library shipped with this package.
|
|
7
|
+
*/
|
|
8
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
|
+
export declare const SEARCH_LIBRARY_DESCRIPTION: string;
|
|
10
|
+
export declare const READ_LIBRARY_DESCRIPTION: string;
|
|
11
|
+
export declare function registerLibraryTools(server: McpServer): void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readLibraryEntry, readLibraryInputShape } from "../../core/library-read.js";
|
|
2
|
+
import { runSearchLibrary, searchLibraryInputShape } from "../../core/library-search.js";
|
|
3
|
+
import { textJson } from "./text-json.js";
|
|
4
|
+
export const SEARCH_LIBRARY_DESCRIPTION = "Search the Summer library — skills, tools, templates, references, examples, collections — by describing the task in plain words " +
|
|
5
|
+
"('make stylized water', 'the player falls through the floor', 'which tool reads script errors'). " +
|
|
6
|
+
"This is the FIRST MOVE for any task: even a 1% chance the library covers it means you search, then read the entry you pick with " +
|
|
7
|
+
"summer_read_library before acting — never act on a summary alone. " +
|
|
8
|
+
"Ranking: BM25 over ids, summaries, use_when lines and facets with kind-aware priors and related-entry boosts (the same ranker the routing eval gates). " +
|
|
9
|
+
"When this install ships registry/generated/embeddings.json and the embedding endpoint answers within 1.5s, lexical and semantic rankings are fused " +
|
|
10
|
+
"(reciprocal rank fusion) and each hit's matched_by says which side found it; offline or without embeddings it is lexical only and never fails for that reason. " +
|
|
11
|
+
"Returns {query, semantic, count, results: [{id, kind, status, summary, use_when, score, matched_by, mcp_tool_name?}], hint}. " +
|
|
12
|
+
"Scores compare only within one response. kinds narrows to some of the six kinds; include_preview:false hides preview entries; deprecated entries never surface. " +
|
|
13
|
+
"No engine needed. Privacy: only when semantic search is active is the query text sent to the Summer gateway to be embedded; nothing else leaves the machine.";
|
|
14
|
+
export const READ_LIBRARY_DESCRIPTION = "Load one library entry by id (<kind>/<slug>, as returned by summer_search_library). " +
|
|
15
|
+
"Skills: the SKILL.md body plus metadata (status, use_when, related) and how to invoke the skill in your host (bare slug). " +
|
|
16
|
+
"Tools: how to call it (MCP name, `summer tool <slug> --args`, engine requirement, authority) plus the descriptor. " +
|
|
17
|
+
"Templates: the pinned repo @ commit and tree digest (or built-in) and the `summer create <slug>` command. References: the markdown body. " +
|
|
18
|
+
"part: 'skill' = body only, 'resource' = the resource.yaml descriptor only, 'all' (default) = both. " +
|
|
19
|
+
"The LAST line of every load is the feedback footer `— entry_id: <id>@<content-hash>. If this entry is wrong, stale, or you deviate from it, report via summer_library_feedback.` " +
|
|
20
|
+
"— copy that entry_id verbatim into summer_library_feedback once you have verified the outcome in-engine. " +
|
|
21
|
+
"Unknown id -> {ok:false, error:'not_found', nearest:[up to 3 ids]}. No engine needed; reads the library shipped with this package.";
|
|
22
|
+
export function registerLibraryTools(server) {
|
|
23
|
+
server.tool("summer_search_library", SEARCH_LIBRARY_DESCRIPTION, searchLibraryInputShape, async (args) => {
|
|
24
|
+
try {
|
|
25
|
+
return textJson(await runSearchLibrary(args));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return textJson({ ok: false, error: error instanceof Error ? error.message : String(error) }, true);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
server.tool("summer_read_library", READ_LIBRARY_DESCRIPTION, readLibraryInputShape, async (args) => {
|
|
32
|
+
try {
|
|
33
|
+
const result = await readLibraryEntry(args.id, args.part ?? "all");
|
|
34
|
+
if (!result.ok)
|
|
35
|
+
return textJson(result, true);
|
|
36
|
+
return { content: [{ type: "text", text: result.text }] };
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return textJson({ ok: false, error: error instanceof Error ? error.message : String(error) }, true);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* summer_open — the MCP face of `summer open`. Same behavior as the CLI
|
|
4
|
+
* (src/core/capabilities/navigation/open.ts runOpen); this file only supplies
|
|
5
|
+
* the engine client and the browser launcher. Design: docs/design/NAVIGATION-DESIGN.md §3.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerNavigationTools(server: McpServer): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import open from "open";
|
|
2
|
+
import { getClient } from "../server.js";
|
|
3
|
+
import { getAuthToken } from "../../core/auth.js";
|
|
4
|
+
import { resolveGatewayUrl } from "../../core/config.js";
|
|
5
|
+
import { openArgsShape, runOpen } from "../../core/capabilities/navigation/open.js";
|
|
6
|
+
/**
|
|
7
|
+
* summer_open — the MCP face of `summer open`. Same behavior as the CLI
|
|
8
|
+
* (src/core/capabilities/navigation/open.ts runOpen); this file only supplies
|
|
9
|
+
* the engine client and the browser launcher. Design: docs/design/NAVIGATION-DESIGN.md §3.
|
|
10
|
+
*/
|
|
11
|
+
export function registerNavigationTools(server) {
|
|
12
|
+
server.tool("summer_open", `Open the exact summerengine.com page or Summer Engine editor surface the user wants to LOOK at, by intent name — or, with open:false, return the URL / engine op without opening anything. The result ALWAYS carries the resolved url or op, also after opening, so you can tell the user where they landed.
|
|
13
|
+
|
|
14
|
+
WHEN: the user wants to see, check, or decide something: "open my billing page", "show me my published games", "take me to pricing", "open the MCP setup guide for Cursor", "show me the scene", "select the Player node", "open player.gd". NOT for getting a result (add a node, set a property, publish) — use the mutation tools; opening a UI is a user-visible action, do it because the user asked to look, and say what will open.
|
|
15
|
+
|
|
16
|
+
target: an id (billing, usage, account, settings, team, my-games, game, pricing, download, mcp-guide, templates, asset-store, docs, scene, main-scene, node, script, file, files, scene-tree, inspector, screen-3d, assistant, project-settings, output, debugger, editor-window, …), an intent phrase ("change my plan"), a res:// path (routed by extension: .tscn -> scene, .gd -> script, else file), or a summerengine.com path ("/pricing"). Omit target to LIST every destination with surface/status/requires.
|
|
17
|
+
params: slot values — gameId + section (builds, releases, store-page, analytics, …) for game; guide (agent name: cursor, claude-code, codex, gemini, …) for mcp-guide; username; version; path / node / scene / line / col / tab for editor targets.
|
|
18
|
+
open: false resolves only and returns url (+ login_url when the page needs login) or op; nothing opens, no engine needed.
|
|
19
|
+
|
|
20
|
+
Result: { ok, action: opened | printed | listed | ambiguous | unsupported | engine_not_running | engine_error | not_found | invalid_params | open_failed | blocked_origin, target (with availability for editor ids), url, login_url, logged_in, opened_url, op, engine, failure_reason, matches, hint }.
|
|
21
|
+
- Web targets that require login open through /login?returnUrl=<path> when this machine holds no Summer login token (logged_in:false) — the destination loads after sign-in.
|
|
22
|
+
- Editor targets need Summer Engine running with the project open; otherwise action engine_not_running with the op that would have been sent and a 'summer run' hint. Nothing was opened.
|
|
23
|
+
- Editor destinations are forwarded to the engine's own navigation table (op Navigate; ids advertised in /api/health capabilities.navigation). On an engine that predates it, scene/node/script/file and the three docks still work through their original ops; anything else answers action unsupported with failure_reason engine_lacks_op and an update hint. Never claim those opened. Listing (no target) shows each editor id's availability from the connected engine.
|
|
24
|
+
- ambiguous: several destinations match; call again with one of matches[].id.
|
|
25
|
+
Only summerengine.com (and subdomains) are ever opened — a gateway configured elsewhere is refused (blocked_origin); res:// paths with .. or other escapes are refused; a machine with no browser gets open_failed with the url to hand over.`, openArgsShape, async (args) => {
|
|
26
|
+
const result = await runOpen(args, {
|
|
27
|
+
engine: () => getClient(),
|
|
28
|
+
openUrl: (url) => open(url),
|
|
29
|
+
isLoggedIn: async () => (await getAuthToken()) !== null,
|
|
30
|
+
gatewayUrl: resolveGatewayUrl,
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
34
|
+
...(result.ok ? {} : { isError: true }),
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* Perception tools. Two signals, two jobs: these ops return STRUCTURED state —
|
|
4
|
+
* exact node paths, transforms, world AABBs, counts — while summer_screenshot
|
|
5
|
+
* returns PIXELS. Structured reads prove facts ("the tree is at (4, 0, -2) and
|
|
6
|
+
* nothing clips"); pixels prove appearance. Run both around every mutation
|
|
7
|
+
* batch; neither substitutes for the other.
|
|
8
|
+
*
|
|
9
|
+
* Every tool here depends on an engine op an older build may lack. Two layers
|
|
10
|
+
* cover that: a capability pre-flight (missingEngineOpResult — nothing is sent
|
|
11
|
+
* when /api/health PROVES the op is missing) and, for engines that advertise
|
|
12
|
+
* nothing, a post-hoc rewrite of the per-op "unknown op" error into the same
|
|
13
|
+
* upgrade path.
|
|
14
|
+
*/
|
|
15
|
+
/** Amend a classified failure_reason with prescriptive recovery text. The
|
|
16
|
+
* structured failure_reason stays intact for programmatic callers; only the
|
|
17
|
+
* human/model-facing error string is taught. Shared with visual-tools.ts
|
|
18
|
+
* (camera bookmarks). */
|
|
19
|
+
export declare function withFailureReasonHint(result: unknown, hints: Record<string, string>): unknown;
|
|
20
|
+
export declare function registerPerceptionTools(server: McpServer): void;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { withEngine, missingEngineOpResult, withOldEngineHint } from "./with-engine.js";
|
|
3
|
+
// engine_lacks_op fallbacks: ONE copy for every face (E2E 2026-09-03 F-16).
|
|
4
|
+
import { RUNTIME_NODE_FALLBACK, RUNTIME_TREE_FALLBACK, SNAPSHOT_DIFF_FALLBACK, WORLD_SNAPSHOT_FALLBACK, } from "../../core/capabilities/engine-fallbacks.js";
|
|
5
|
+
/**
|
|
6
|
+
* Perception tools. Two signals, two jobs: these ops return STRUCTURED state —
|
|
7
|
+
* exact node paths, transforms, world AABBs, counts — while summer_screenshot
|
|
8
|
+
* returns PIXELS. Structured reads prove facts ("the tree is at (4, 0, -2) and
|
|
9
|
+
* nothing clips"); pixels prove appearance. Run both around every mutation
|
|
10
|
+
* batch; neither substitutes for the other.
|
|
11
|
+
*
|
|
12
|
+
* Every tool here depends on an engine op an older build may lack. Two layers
|
|
13
|
+
* cover that: a capability pre-flight (missingEngineOpResult — nothing is sent
|
|
14
|
+
* when /api/health PROVES the op is missing) and, for engines that advertise
|
|
15
|
+
* nothing, a post-hoc rewrite of the per-op "unknown op" error into the same
|
|
16
|
+
* upgrade path.
|
|
17
|
+
*/
|
|
18
|
+
/** Amend a classified failure_reason with prescriptive recovery text. The
|
|
19
|
+
* structured failure_reason stays intact for programmatic callers; only the
|
|
20
|
+
* human/model-facing error string is taught. Shared with visual-tools.ts
|
|
21
|
+
* (camera bookmarks). */
|
|
22
|
+
export function withFailureReasonHint(result, hints) {
|
|
23
|
+
if (!result || typeof result !== "object")
|
|
24
|
+
return result;
|
|
25
|
+
const envelope = result;
|
|
26
|
+
const failed = envelope.results?.find((entry) => entry.ok === false);
|
|
27
|
+
const reason = (typeof envelope.failure_reason === "string" && envelope.failure_reason) ||
|
|
28
|
+
(typeof envelope.failureReason === "string" && envelope.failureReason) ||
|
|
29
|
+
failed?.failure_reason ||
|
|
30
|
+
failed?.failureReason;
|
|
31
|
+
if (typeof reason !== "string" || !(reason in hints))
|
|
32
|
+
return result;
|
|
33
|
+
const engineError = (typeof envelope.error === "string" && envelope.error) || failed?.error || reason;
|
|
34
|
+
return { ...envelope, error: `${hints[reason]} Engine said: ${engineError}` };
|
|
35
|
+
}
|
|
36
|
+
const GAME_NOT_RUNNING_HINT = "No game is running, so there is no runtime tree to read. Start it with summer_play (wait for it to boot), then re-run this tool. For the EDITED scene's structure use summer_get_scene_tree instead — it needs no running game.";
|
|
37
|
+
const RUNTIME_TRANSPORT_HINT = "This connection cannot carry runtime debugger reads (no async reply channel), or the op was batched with others. Retry it as the ONLY op in the request; if it persists on this transport, probe the running game with a RunVerification probe instead (see the playbook's rawOpsViaBatch).";
|
|
38
|
+
export function registerPerceptionTools(server) {
|
|
39
|
+
server.tool("summer_world_snapshot", `Compact structured snapshot of the whole EDITED scene — the cheap read to run BEFORE and AFTER every mutation batch. Per node: path, class, transform (pos/rot/scale as Godot literal strings, 3-decimal floats), world AABB (3D visuals), visibility, and 8-hex resource fingerprints (script/materials — detect-change markers, never content). Plus a light summary, camera list, environment fingerprint, and per-class counts.
|
|
40
|
+
|
|
41
|
+
THE LOOP: summer_world_snapshot (note snapshot_id) -> mutate (summer_run_script / scene tools / imports) -> summer_snapshot_diff from_id:<that id> -> summer_screenshot. The diff proves exactly what changed structurally; the screenshot proves it looks right. This is how you catch a node that silently vanished on save, a transform that landed at the origin, or an AABB clipping through the floor.
|
|
42
|
+
|
|
43
|
+
Node lists are path-sorted and truncated DETERMINISTICALLY (result carries total_nodes + truncated) so two snapshots stay diffable without phantom adds/removes. The engine retains the last 8 snapshots per session, keyed by snapshot_id. Use this instead of summer_get_scene_tree when you need transforms/AABBs/fingerprints or a diffable baseline; the tree read remains the hierarchy-shaped view. On an engine build that predates GetWorldSnapshot the result is a structured engine_lacks_op failure naming the fallback.`, {
|
|
44
|
+
scene_path: z
|
|
45
|
+
.string()
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("Scene to snapshot, e.g. 'res://main.tscn'. Omit for the currently edited scene."),
|
|
48
|
+
max_nodes: z
|
|
49
|
+
.number()
|
|
50
|
+
.int()
|
|
51
|
+
.positive()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("Node cap (engine default 4000). The result declares truncation — never assume a capped list is complete."),
|
|
54
|
+
}, async ({ scene_path, max_nodes }) => withEngine(async (client) => {
|
|
55
|
+
const missing = missingEngineOpResult(client, "GetWorldSnapshot", WORLD_SNAPSHOT_FALLBACK);
|
|
56
|
+
if (missing)
|
|
57
|
+
return missing;
|
|
58
|
+
const op = { op: "GetWorldSnapshot" };
|
|
59
|
+
if (scene_path)
|
|
60
|
+
op.scene_path = scene_path;
|
|
61
|
+
if (max_nodes !== undefined)
|
|
62
|
+
op.max_nodes = max_nodes;
|
|
63
|
+
const result = await client.executeOps([op]);
|
|
64
|
+
return withFailureReasonHint(withOldEngineHint(result, "GetWorldSnapshot", WORLD_SNAPSHOT_FALLBACK), {
|
|
65
|
+
no_scene: "No scene is open to snapshot. Call summer_get_project_context, then summer_open_main_scene (or summer_open_scene with a known .tscn path), then retry.",
|
|
66
|
+
scene_not_loaded: "scene_path resolves only a LIVE editor tab or an already-cached scene — never a disk load. Open that scene first (summer_open_scene), or omit scene_path to snapshot the currently edited scene.",
|
|
67
|
+
});
|
|
68
|
+
}));
|
|
69
|
+
server.tool("summer_snapshot_diff", `Diff two world snapshots into exactly what changed: added/removed node paths, changed nodes with the fields that moved (pos, scale, material fingerprint, ...), and per-class count deltas. Reads like a receipt — no wading through two full dumps.
|
|
70
|
+
|
|
71
|
+
Standard use: take summer_world_snapshot BEFORE a mutation batch, mutate, then call this with from_id (to_id omitted = the engine takes a fresh snapshot now). Verify the diff matches your INTENT: exactly the nodes you meant to add were added, nothing you didn't touch changed, nothing vanished. An empty diff after a "successful" mutation is a red flag — the change did not land (wrong scene? unsaved? unowned nodes dropped on save?).
|
|
72
|
+
|
|
73
|
+
The engine retains the last 8 snapshot ids per session; an expired/unknown id fails with failure_reason "unknown_snapshot" — take a fresh baseline and re-run the mutation check rather than guessing.`, {
|
|
74
|
+
from_id: z.string().describe("snapshot_id of the BEFORE snapshot (from summer_world_snapshot)."),
|
|
75
|
+
to_id: z
|
|
76
|
+
.string()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe("snapshot_id of the AFTER snapshot. Omit to snapshot the current state now and diff against that."),
|
|
79
|
+
}, async ({ from_id, to_id }) => withEngine(async (client) => {
|
|
80
|
+
const missing = missingEngineOpResult(client, "DiffWorldSnapshot", SNAPSHOT_DIFF_FALLBACK);
|
|
81
|
+
if (missing)
|
|
82
|
+
return missing;
|
|
83
|
+
const op = { op: "DiffWorldSnapshot", from_id };
|
|
84
|
+
if (to_id)
|
|
85
|
+
op.to_id = to_id;
|
|
86
|
+
const result = await client.executeOps([op]);
|
|
87
|
+
return withFailureReasonHint(withOldEngineHint(result, "DiffWorldSnapshot", SNAPSHOT_DIFF_FALLBACK), {
|
|
88
|
+
unknown_snapshot: "That snapshot_id is gone (the engine retains only the last 8 per session, and ids do not survive an engine restart). Take a fresh summer_world_snapshot baseline and redo the before/after pair.",
|
|
89
|
+
});
|
|
90
|
+
}));
|
|
91
|
+
server.tool("summer_get_runtime_tree", `Scene tree of the RUNNING GAME — live runtime state, not the edited scene. Use it during playtests to see what actually spawned: dynamically created enemies/projectiles/UI, autoloads, pooled nodes — everything summer_get_scene_tree (an EDITOR read) can never show. Inspecting live keeps the bug alive; stopping the game to look usually resets it.
|
|
92
|
+
|
|
93
|
+
Returns {tree: {name, class, path, children}, total_nodes, truncated}. Depth/limit are capped and truncation is declared — never assume a capped tree is complete. Drill into one node's live properties with summer_inspect_runtime_node.
|
|
94
|
+
|
|
95
|
+
Needs a running game: fails with failure_reason "game_not_running" otherwise — start with summer_play, then re-run.`, {
|
|
96
|
+
path: z
|
|
97
|
+
.string()
|
|
98
|
+
.optional()
|
|
99
|
+
.describe("Subtree root to read, e.g. '/root/Main/Enemies'. Omit for the scene tree root."),
|
|
100
|
+
depth: z
|
|
101
|
+
.number()
|
|
102
|
+
.int()
|
|
103
|
+
.positive()
|
|
104
|
+
.optional()
|
|
105
|
+
.describe("Maximum depth to walk (engine default 3)."),
|
|
106
|
+
limit: z
|
|
107
|
+
.number()
|
|
108
|
+
.int()
|
|
109
|
+
.positive()
|
|
110
|
+
.optional()
|
|
111
|
+
.describe("Maximum nodes to return (engine default 500)."),
|
|
112
|
+
}, async ({ path, depth, limit }) => withEngine(async (client) => {
|
|
113
|
+
const missing = missingEngineOpResult(client, "GetRuntimeSceneTree", RUNTIME_TREE_FALLBACK);
|
|
114
|
+
if (missing)
|
|
115
|
+
return missing;
|
|
116
|
+
const op = { op: "GetRuntimeSceneTree" };
|
|
117
|
+
if (path)
|
|
118
|
+
op.path = path;
|
|
119
|
+
if (depth !== undefined)
|
|
120
|
+
op.depth = depth;
|
|
121
|
+
if (limit !== undefined)
|
|
122
|
+
op.limit = limit;
|
|
123
|
+
const result = await client.executeOps([op]);
|
|
124
|
+
return withFailureReasonHint(withOldEngineHint(result, "GetRuntimeSceneTree", RUNTIME_TREE_FALLBACK), {
|
|
125
|
+
game_not_running: GAME_NOT_RUNNING_HINT,
|
|
126
|
+
unsupported_transport: RUNTIME_TRANSPORT_HINT,
|
|
127
|
+
});
|
|
128
|
+
}));
|
|
129
|
+
server.tool("summer_inspect_runtime_node", `Live properties of ONE node in the RUNNING GAME: {node: {path, class, properties, children_names}} with a curated common-property set (transform, visibility, physics state, ...). The runtime counterpart of summer_inspect_node (which reads the EDITED scene) — use it to answer "what are this enemy's actual stats right now", "where IS the player", "did that flag flip" without stopping the game and losing the state.
|
|
130
|
+
|
|
131
|
+
Find the path with summer_get_runtime_tree first — runtime paths (e.g. '/root/Main/Enemies/Goblin3') often differ from edited-scene paths because nodes are spawned, renamed, or reparented at runtime.
|
|
132
|
+
|
|
133
|
+
Needs a running game: fails with failure_reason "game_not_running" otherwise — start with summer_play, then re-run.`, {
|
|
134
|
+
path: z.string().describe("Runtime node path, e.g. '/root/Main/Player'. Get it from summer_get_runtime_tree."),
|
|
135
|
+
}, async ({ path }) => withEngine(async (client) => {
|
|
136
|
+
const missing = missingEngineOpResult(client, "GetRuntimeNode", RUNTIME_NODE_FALLBACK);
|
|
137
|
+
if (missing)
|
|
138
|
+
return missing;
|
|
139
|
+
const result = await client.executeOps([{ op: "GetRuntimeNode", path }]);
|
|
140
|
+
return withFailureReasonHint(withOldEngineHint(result, "GetRuntimeNode", RUNTIME_NODE_FALLBACK), {
|
|
141
|
+
game_not_running: GAME_NOT_RUNNING_HINT,
|
|
142
|
+
unsupported_transport: RUNTIME_TRANSPORT_HINT,
|
|
143
|
+
node_not_found: "That path does not exist in the RUNNING game (runtime paths are absolute, e.g. '/root/Main/Player', and often differ from the edited scene). List what actually spawned with summer_get_runtime_tree, then retry with a path from its result.",
|
|
144
|
+
});
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
@@ -1,2 +1,16 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/**
|
|
3
|
+
* The agent playbook lives in core (src/core/capabilities/agent-playbook.ts)
|
|
4
|
+
* so this tool, the MCP prompt below, and `summer tool get-agent-playbook`
|
|
5
|
+
* share ONE implementation. The MCP surface contributes the boot drift notice
|
|
6
|
+
* it owns. Exported for tests.
|
|
7
|
+
*/
|
|
8
|
+
export declare function buildAgentPlaybook(): Record<string, unknown>;
|
|
9
|
+
export declare function renderAgentPlaybook(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Register the playbook as an MCP PROMPT as well, so hosts that surface
|
|
12
|
+
* prompts (prompt pickers, slash commands) get the operating guide natively
|
|
13
|
+
* without knowing to call the tool. Same content, second doorway.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerPlaybookPrompt(server: McpServer): void;
|
|
2
16
|
export declare function registerProjectTools(server: McpServer): void;
|