summer-engine 2.8.1 → 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 +134 -41
- 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 +148 -23
- 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/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
- 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 +23 -23
- 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 +9 -1
- 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/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
- 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/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
- 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/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/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
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { EngineApiClient } from "../core/api-client.js";
|
|
3
|
+
import type { EngineSelection } from "../core/engine.js";
|
|
4
|
+
import { getCachedBootDriftNotice as getCachedNotice } from "./boot-notice.js";
|
|
4
5
|
export declare const getCachedBootDriftNotice: typeof getCachedNotice;
|
|
6
|
+
/**
|
|
7
|
+
* Server `instructions` in the MCP initialize response (SDK ServerOptions,
|
|
8
|
+
* @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
|
|
9
|
+
* session, before any tool call — the place for the five habits the E2E run
|
|
10
|
+
* (docs/design/archive/E2E-2026-09-03.md, F-17) showed an agent needs on the first
|
|
11
|
+
* turn and would otherwise learn the hard way. Kept under 600 characters so
|
|
12
|
+
* it costs a few hundred tokens once; the full operating guide stays in the
|
|
13
|
+
* summer_agent_playbook prompt / summer_get_agent_playbook tool.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SUMMER_MCP_INSTRUCTIONS: string;
|
|
5
16
|
export declare function configureMcpEngineSelection(selection?: EngineSelection): void;
|
|
6
17
|
export declare function getClient(): Promise<EngineApiClient>;
|
|
7
18
|
export declare function resetClient(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Build the MCP server with every Summer tool registered, without connecting
|
|
21
|
+
* a transport. startMcpServer() uses this; tests use it to count the live
|
|
22
|
+
* tool surface against registry/generated/counts.json.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMcpServer(): {
|
|
25
|
+
server: McpServer;
|
|
26
|
+
getRegisteredToolCount: () => number;
|
|
27
|
+
};
|
|
8
28
|
export interface StartMcpServerOptions {
|
|
9
29
|
projectPath?: string;
|
|
10
30
|
instanceId?: string;
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,24 +1,46 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
-
import { EngineApiClient } from "../
|
|
3
|
+
import { EngineApiClient } from "../core/api-client.js";
|
|
5
4
|
import { registerSceneTools } from "./tools/scene-tools.js";
|
|
6
5
|
import { registerDebugTools } from "./tools/debug-tools.js";
|
|
7
6
|
import { registerVisualTools } from "./tools/visual-tools.js";
|
|
8
7
|
import { WITH_ENGINE_META } from "./tools/with-engine.js";
|
|
9
|
-
import { registerProjectTools } from "./tools/project-tools.js";
|
|
8
|
+
import { registerPlaybookPrompt, registerProjectTools, } from "./tools/project-tools.js";
|
|
9
|
+
import { registerPerceptionTools } from "./tools/perception-tools.js";
|
|
10
|
+
import { registerSpatialTools } from "./tools/spatial-tools.js";
|
|
11
|
+
import { registerScriptTools } from "./tools/script-tools.js";
|
|
12
|
+
import { registerEventTools } from "./tools/event-tools.js";
|
|
13
|
+
import { registerFabricateTools } from "./tools/fabricate-tools.js";
|
|
14
|
+
import { registerUiTools } from "./tools/ui-tools.js";
|
|
15
|
+
import { registerRuntimeTools } from "./tools/runtime-tools.js";
|
|
16
|
+
import { recordToolCall, registrationHasInputSchema, trajectoryArgsFor, } from "../core/trajectory.js";
|
|
10
17
|
import { registerFileTools } from "./tools/file-tools.js";
|
|
11
18
|
import { registerAssetTools } from "./tools/asset-tools.js";
|
|
12
19
|
import { registerGenerateTools } from "./tools/generate-tools.js";
|
|
13
|
-
import { registerCloudTools } from "./tools/cloud-tools.js";
|
|
14
20
|
import { registerCreatorTools } from "./tools/creator-tools.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
import { registerFeedbackTools } from "./tools/feedback-tools.js";
|
|
22
|
+
import { registerNavigationTools } from "./tools/navigation-tools.js";
|
|
23
|
+
import { registerLibraryTools } from "./tools/library-tools.js";
|
|
24
|
+
import { getCachedBootDriftNotice as getCachedNotice, setCachedBootDriftNotice, } from "./boot-notice.js";
|
|
25
|
+
import { appendMcpLogEvent } from "../core/mcp-log.js";
|
|
26
|
+
import { buildBootDriftNotice, fetchLatestRegistryVersion, } from "../installer/version-check.js";
|
|
27
|
+
import { TOOLKIT_VERSION as version } from "../core/version.js";
|
|
20
28
|
let processDiagnosticsInstalled = false;
|
|
21
29
|
export const getCachedBootDriftNotice = getCachedNotice;
|
|
30
|
+
/**
|
|
31
|
+
* Server `instructions` in the MCP initialize response (SDK ServerOptions,
|
|
32
|
+
* @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
|
|
33
|
+
* session, before any tool call — the place for the five habits the E2E run
|
|
34
|
+
* (docs/design/archive/E2E-2026-09-03.md, F-17) showed an agent needs on the first
|
|
35
|
+
* turn and would otherwise learn the hard way. Kept under 600 characters so
|
|
36
|
+
* it costs a few hundred tokens once; the full operating guide stays in the
|
|
37
|
+
* summer_agent_playbook prompt / summer_get_agent_playbook tool.
|
|
38
|
+
*/
|
|
39
|
+
export const SUMMER_MCP_INSTRUCTIONS = "Summer Engine MCP. Call summer_get_project_context first: it binds this session to the open project and returns mainScene, projectMemory (GameSoul, template pin) and any capabilitySkewWarning. " +
|
|
40
|
+
"Before building or fixing, summer_search_library then summer_read_library the hit — skills, examples and templates live there. " +
|
|
41
|
+
"After a playthrough read summer_get_diagnostics, not summer_get_console alone (runtime errors live in the debugger). " +
|
|
42
|
+
"A uniformly black screenshot means the viewport had not redrawn — recapture before concluding. " +
|
|
43
|
+
"Report entries you verified in-engine via summer_library_feedback.";
|
|
22
44
|
/**
|
|
23
45
|
* Fire-and-forget probe of the npm registry on MCP boot. Caches the result for
|
|
24
46
|
* the session. We never await this in startup so a slow / offline registry
|
|
@@ -38,6 +60,18 @@ export function configureMcpEngineSelection(selection) {
|
|
|
38
60
|
cachedClient = null;
|
|
39
61
|
}
|
|
40
62
|
export async function getClient() {
|
|
63
|
+
// Opt-in per-project routing (editor -> live worker -> spawned worker).
|
|
64
|
+
// OFF by default: with the flag unset this block is skipped entirely and
|
|
65
|
+
// src/core/headless/ is never even loaded (dynamic import). With the flag
|
|
66
|
+
// set, the router returns null whenever the existing path should serve the
|
|
67
|
+
// call (no project context, or a live editor has the project open), so
|
|
68
|
+
// editor behavior stays identical. See docs/HEADLESS_ROUTING.md.
|
|
69
|
+
if (process.env.SUMMER_HEADLESS_ROUTING === "1") {
|
|
70
|
+
const { getHeadlessRoutedClient } = await import("../core/headless/mcp-routing.js");
|
|
71
|
+
const routed = await getHeadlessRoutedClient(engineSelection);
|
|
72
|
+
if (routed)
|
|
73
|
+
return routed;
|
|
74
|
+
}
|
|
41
75
|
if (cachedClient) {
|
|
42
76
|
// The engine rotates its api-token (and can change ports) on every launch, so
|
|
43
77
|
// a cached client can outlive the engine instance it was built for. If the
|
|
@@ -61,10 +95,10 @@ export async function getClient() {
|
|
|
61
95
|
? error.message
|
|
62
96
|
: "Summer Engine is not running.";
|
|
63
97
|
throw new Error(reason + "\n" +
|
|
64
|
-
"Open the intended project in Summer Engine, or run: npx summer-engine run\n" +
|
|
98
|
+
"Open the intended project in Summer Engine, or run: npx -y summer-engine@latest run\n" +
|
|
65
99
|
"Note: only tools that touch the local project need the engine. Cloud tools " +
|
|
66
100
|
"(summer_generate_*, summer_search_assets, summer_list_my_assets, summer_get_asset, " +
|
|
67
|
-
"summer_check_job) work right now without it — they only need 'npx summer-engine login'.");
|
|
101
|
+
"summer_check_job) work right now without it — they only need 'npx -y summer-engine@latest login'.");
|
|
68
102
|
}
|
|
69
103
|
}
|
|
70
104
|
export function resetClient() {
|
|
@@ -141,11 +175,50 @@ function installResultSizeLogger(server) {
|
|
|
141
175
|
if (typeof handler !== "function")
|
|
142
176
|
return original(...args);
|
|
143
177
|
registeredToolCount += 1;
|
|
178
|
+
// Schema-less tools receive only the SDK's `extra` — never record that as
|
|
179
|
+
// the tool's arguments (see registrationHasInputSchema).
|
|
180
|
+
const hasInputSchema = registrationHasInputSchema(args);
|
|
144
181
|
const wrapped = async (...handlerArgs) => {
|
|
145
182
|
const startedAt = Date.now();
|
|
146
|
-
|
|
183
|
+
let result;
|
|
184
|
+
try {
|
|
185
|
+
result = await handler(...handlerArgs);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
// A handler THROW never produced a result to classify; record it as
|
|
189
|
+
// ok:false / exception so the stream does not silently skip failures,
|
|
190
|
+
// then let the SDK turn it into the protocol error it always did.
|
|
191
|
+
recordToolCall({
|
|
192
|
+
tool: name,
|
|
193
|
+
args: trajectoryArgsFor(hasInputSchema, handlerArgs),
|
|
194
|
+
exception: error instanceof Error ? error.message : String(error),
|
|
195
|
+
durationMs: Date.now() - startedAt,
|
|
196
|
+
});
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
147
199
|
const durationMs = Date.now() - startedAt;
|
|
148
200
|
try {
|
|
201
|
+
// Opt-in local trajectory capture: one JSONL line per tool call when
|
|
202
|
+
// SUMMER_TRAJECTORY_DIR is set. recordToolCall never throws and is a
|
|
203
|
+
// no-op when the env var is unset.
|
|
204
|
+
{
|
|
205
|
+
const record = result;
|
|
206
|
+
const callMeta = record && typeof record === "object"
|
|
207
|
+
? record[WITH_ENGINE_META]
|
|
208
|
+
: undefined;
|
|
209
|
+
recordToolCall({
|
|
210
|
+
tool: name,
|
|
211
|
+
args: trajectoryArgsFor(hasInputSchema, handlerArgs),
|
|
212
|
+
isError: record?.isError === true,
|
|
213
|
+
terminalState: callMeta?.terminalState,
|
|
214
|
+
errorClass: callMeta?.errorClass,
|
|
215
|
+
failureReason: callMeta?.failureReason,
|
|
216
|
+
durationMs,
|
|
217
|
+
// Read only under SUMMER_TRAJECTORY_EVAL=1 (bounded summary); the
|
|
218
|
+
// default redacted stream ignores it.
|
|
219
|
+
result,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
149
222
|
if (result &&
|
|
150
223
|
typeof result === "object" &&
|
|
151
224
|
"content" in result &&
|
|
@@ -213,6 +286,42 @@ function installResultSizeLogger(server) {
|
|
|
213
286
|
};
|
|
214
287
|
return () => registeredToolCount;
|
|
215
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Build the MCP server with every Summer tool registered, without connecting
|
|
291
|
+
* a transport. startMcpServer() uses this; tests use it to count the live
|
|
292
|
+
* tool surface against registry/generated/counts.json.
|
|
293
|
+
*/
|
|
294
|
+
export function createMcpServer() {
|
|
295
|
+
const server = new McpServer({
|
|
296
|
+
name: "summer-engine",
|
|
297
|
+
version,
|
|
298
|
+
}, { instructions: SUMMER_MCP_INSTRUCTIONS });
|
|
299
|
+
// Passive observability: log result-size to stderr but do not modify
|
|
300
|
+
// results. See installResultSizeLogger above.
|
|
301
|
+
const getRegisteredToolCount = installResultSizeLogger(server);
|
|
302
|
+
registerSceneTools(server);
|
|
303
|
+
registerDebugTools(server);
|
|
304
|
+
registerVisualTools(server);
|
|
305
|
+
registerProjectTools(server);
|
|
306
|
+
registerFileTools(server);
|
|
307
|
+
registerAssetTools(server);
|
|
308
|
+
registerGenerateTools(server);
|
|
309
|
+
registerCreatorTools(server);
|
|
310
|
+
registerFeedbackTools(server);
|
|
311
|
+
registerScriptTools(server);
|
|
312
|
+
registerPerceptionTools(server);
|
|
313
|
+
registerSpatialTools(server);
|
|
314
|
+
registerNavigationTools(server);
|
|
315
|
+
registerLibraryTools(server);
|
|
316
|
+
registerEventTools(server);
|
|
317
|
+
registerFabricateTools(server);
|
|
318
|
+
registerUiTools(server);
|
|
319
|
+
registerRuntimeTools(server);
|
|
320
|
+
// The playbook is also an MCP prompt so prompt-surfacing hosts get it
|
|
321
|
+
// natively (same content as the summer_get_agent_playbook tool).
|
|
322
|
+
registerPlaybookPrompt(server);
|
|
323
|
+
return { server, getRegisteredToolCount };
|
|
324
|
+
}
|
|
216
325
|
export async function startMcpServer(options = {}) {
|
|
217
326
|
configureMcpEngineSelection({
|
|
218
327
|
instanceId: options.instanceId ?? process.env.SUMMER_ENGINE_INSTANCE_ID,
|
|
@@ -231,22 +340,7 @@ export async function startMcpServer(options = {}) {
|
|
|
231
340
|
cwd: options.cwd ?? process.cwd(),
|
|
232
341
|
},
|
|
233
342
|
});
|
|
234
|
-
const server =
|
|
235
|
-
name: "summer-engine",
|
|
236
|
-
version,
|
|
237
|
-
});
|
|
238
|
-
// Passive observability: log result-size to stderr but do not modify
|
|
239
|
-
// results. See installResultSizeLogger above.
|
|
240
|
-
const getRegisteredToolCount = installResultSizeLogger(server);
|
|
241
|
-
registerSceneTools(server);
|
|
242
|
-
registerDebugTools(server);
|
|
243
|
-
registerVisualTools(server);
|
|
244
|
-
registerProjectTools(server);
|
|
245
|
-
registerFileTools(server);
|
|
246
|
-
registerAssetTools(server);
|
|
247
|
-
registerGenerateTools(server);
|
|
248
|
-
registerCloudTools(server);
|
|
249
|
-
registerCreatorTools(server);
|
|
343
|
+
const { server, getRegisteredToolCount } = createMcpServer();
|
|
250
344
|
// Fire-and-forget — never block tool registration on the npm registry.
|
|
251
345
|
void probeBootDrift().catch((error) => {
|
|
252
346
|
setCachedBootDriftNotice(null);
|
|
@@ -1,51 +1,15 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { getAuthToken } from "../../
|
|
2
|
+
import { getAuthToken } from "../../core/auth.js";
|
|
3
|
+
import { resolveGatewayUrl } from "../../core/config.js";
|
|
3
4
|
import { getClient } from "../server.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const KENNEY_URL_PATTERN = /\/kenney\/3d\/([^/]+)\//;
|
|
7
|
-
function getPackSlugFromUrl(fileUrl) {
|
|
8
|
-
return fileUrl.match(KENNEY_URL_PATTERN)?.[1] ?? null;
|
|
9
|
-
}
|
|
10
|
-
function buildKenneyTextureUrl(fileUrl) {
|
|
11
|
-
const lastSlash = fileUrl.lastIndexOf("/");
|
|
12
|
-
const base = lastSlash >= 0 ? fileUrl.slice(0, lastSlash) : fileUrl;
|
|
13
|
-
return `${base}/Textures/colormap.png`;
|
|
14
|
-
}
|
|
15
|
-
async function textureExists(url) {
|
|
16
|
-
try {
|
|
17
|
-
const res = await fetch(url, { method: "HEAD", signal: AbortSignal.timeout(5000) });
|
|
18
|
-
return res.ok;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Build import entries for Kenney 3D assets: texture first, then GLB.
|
|
26
|
-
* Pack-scoped paths prevent texture collision (each pack has its own Textures/colormap.png).
|
|
27
|
-
* See: publicsummerengine/Docs/ASSET_IMPORT_END_TO_END.md
|
|
28
|
-
*/
|
|
29
|
-
async function buildKenneyImportEntries(fileUrl, packSlug, fileName) {
|
|
30
|
-
const textureUrl = buildKenneyTextureUrl(fileUrl);
|
|
31
|
-
const hasTexture = await textureExists(textureUrl);
|
|
32
|
-
if (!hasTexture) {
|
|
33
|
-
return [{ url: fileUrl, path: `res://assets/models/kenney/${packSlug}/${fileName}` }];
|
|
34
|
-
}
|
|
35
|
-
const glbPath = `res://assets/models/kenney/${packSlug}/${fileName}`;
|
|
36
|
-
const glbDir = glbPath.replace(/\/[^/]+$/, "");
|
|
37
|
-
const texturePath = `${glbDir}/Textures/colormap.png`;
|
|
38
|
-
return [
|
|
39
|
-
{ url: textureUrl, path: texturePath },
|
|
40
|
-
{ url: fileUrl, path: glbPath },
|
|
41
|
-
];
|
|
42
|
-
}
|
|
5
|
+
import { ImportHdriError, importPolyHavenHdri, } from "../../core/capabilities/hdri-import.js";
|
|
6
|
+
import { importResolvedAsset } from "../../core/capabilities/asset-import.js";
|
|
43
7
|
async function searchAssetsApi(params) {
|
|
44
8
|
const token = await getAuthToken();
|
|
45
9
|
if (!token) {
|
|
46
10
|
return {
|
|
47
11
|
error: "Not logged in",
|
|
48
|
-
message: "Not signed in. The user needs to run this in their terminal:\n npx summer-engine login\nOr open: https://www.summerengine.com/login\nAsset search requires a Summer Engine account (free to create).",
|
|
12
|
+
message: "Not signed in. The user needs to run this in their terminal:\n npx -y summer-engine@latest login\nOr open: https://www.summerengine.com/login\nAsset search requires a Summer Engine account (free to create).",
|
|
49
13
|
};
|
|
50
14
|
}
|
|
51
15
|
const searchParams = new URLSearchParams();
|
|
@@ -59,7 +23,8 @@ async function searchAssetsApi(params) {
|
|
|
59
23
|
if (params.source) {
|
|
60
24
|
searchParams.set("source", params.source);
|
|
61
25
|
}
|
|
62
|
-
const
|
|
26
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
27
|
+
const res = await fetch(`${gatewayUrl}/api/mcp/assets?${searchParams}`, {
|
|
63
28
|
headers: { Authorization: `Bearer ${token}` },
|
|
64
29
|
signal: AbortSignal.timeout(15000),
|
|
65
30
|
});
|
|
@@ -69,7 +34,7 @@ async function searchAssetsApi(params) {
|
|
|
69
34
|
return {
|
|
70
35
|
error: "unauthorized",
|
|
71
36
|
message: (data.message || "Auth token expired.") +
|
|
72
|
-
" The user needs to re-authenticate:\n npx summer-engine login --force",
|
|
37
|
+
" The user needs to re-authenticate:\n npx -y summer-engine@latest login --force",
|
|
73
38
|
};
|
|
74
39
|
}
|
|
75
40
|
if (res.status === 429) {
|
|
@@ -92,10 +57,11 @@ async function authedGetJson(endpoint, timeoutMs = 15_000) {
|
|
|
92
57
|
return {
|
|
93
58
|
status: 401,
|
|
94
59
|
error: "not_logged_in",
|
|
95
|
-
message: "Not signed in. Run in your terminal:\n npx summer-engine login",
|
|
60
|
+
message: "Not signed in. Run in your terminal:\n npx -y summer-engine@latest login",
|
|
96
61
|
};
|
|
97
62
|
}
|
|
98
|
-
const
|
|
63
|
+
const gatewayUrl = await resolveGatewayUrl();
|
|
64
|
+
const res = await fetch(`${gatewayUrl}${endpoint}`, {
|
|
99
65
|
headers: { Authorization: `Bearer ${token}` },
|
|
100
66
|
signal: AbortSignal.timeout(timeoutMs),
|
|
101
67
|
});
|
|
@@ -124,99 +90,6 @@ async function getAssetDownloadUrlApi(assetId, role) {
|
|
|
124
90
|
}
|
|
125
91
|
return { data: result.data };
|
|
126
92
|
}
|
|
127
|
-
function fileNameFromUrl(fileUrl) {
|
|
128
|
-
return fileUrl.split("/").pop()?.split("?")[0] || "asset";
|
|
129
|
-
}
|
|
130
|
-
function sanitizeNodeName(name) {
|
|
131
|
-
return ((name || "Asset")
|
|
132
|
-
.replace(/[^\p{L}\p{N}_]+/gu, "_")
|
|
133
|
-
.replace(/^_+|_+$/g, "") || "Asset");
|
|
134
|
-
}
|
|
135
|
-
async function buildImportEntriesForAsset(asset, targetPath) {
|
|
136
|
-
const fileUrl = asset.importUrl || asset.fileUrl;
|
|
137
|
-
if (!fileUrl)
|
|
138
|
-
throw new Error("Asset has no import URL.");
|
|
139
|
-
const fileName = targetPath?.split("/").pop() || asset.fileName || fileNameFromUrl(fileUrl);
|
|
140
|
-
const packSlug = asset.packSlug ?? getPackSlugFromUrl(fileUrl) ?? "misc";
|
|
141
|
-
if (targetPath) {
|
|
142
|
-
if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
|
|
143
|
-
const textureUrl = buildKenneyTextureUrl(fileUrl);
|
|
144
|
-
const hasTexture = await textureExists(textureUrl);
|
|
145
|
-
if (hasTexture) {
|
|
146
|
-
const glbDir = targetPath.replace(/\/[^/]+$/, "");
|
|
147
|
-
return {
|
|
148
|
-
importPath: targetPath,
|
|
149
|
-
imports: [
|
|
150
|
-
{ url: textureUrl, path: `${glbDir}/Textures/colormap.png` },
|
|
151
|
-
{ url: fileUrl, path: targetPath },
|
|
152
|
-
],
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return {
|
|
157
|
-
importPath: targetPath,
|
|
158
|
-
imports: [{ url: fileUrl, path: targetPath }],
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
if (asset.type === "3d_model" && fileUrl.includes("kenney/3d/")) {
|
|
162
|
-
const imports = await buildKenneyImportEntries(fileUrl, packSlug, fileName);
|
|
163
|
-
return { imports, importPath: imports[imports.length - 1].path };
|
|
164
|
-
}
|
|
165
|
-
const path = asset.type === "3d_model"
|
|
166
|
-
? `res://assets/models/${fileName}`
|
|
167
|
-
: `res://assets/${fileName}`;
|
|
168
|
-
return { imports: [{ url: fileUrl, path }], importPath: path };
|
|
169
|
-
}
|
|
170
|
-
async function importResolvedAsset(args) {
|
|
171
|
-
const { asset, parent, scenePath, path, name } = args;
|
|
172
|
-
if (parent && !scenePath) {
|
|
173
|
-
throw new Error("scenePath is required when importing an asset into a scene");
|
|
174
|
-
}
|
|
175
|
-
const { imports, importPath } = await buildImportEntriesForAsset(asset, path);
|
|
176
|
-
const client = await getClient();
|
|
177
|
-
const importResult = imports.length === 1
|
|
178
|
-
? await client.executeOps([
|
|
179
|
-
{ op: "ImportFromUrl", url: imports[0].url, path: imports[0].path },
|
|
180
|
-
])
|
|
181
|
-
: await client.executeOps([{ op: "ImportFromUrlBatch", imports }]);
|
|
182
|
-
const importReceipts = importResult?.results ?? [];
|
|
183
|
-
const importFailure = importReceipts.find((receipt) => receipt?.ok === false);
|
|
184
|
-
if (importResult?.status === "error" || importFailure) {
|
|
185
|
-
throw new Error(importFailure?.error || "Could not import asset. Check engine logs.");
|
|
186
|
-
}
|
|
187
|
-
let addedToScene = false;
|
|
188
|
-
let sceneReceipt = null;
|
|
189
|
-
if (parent && asset.type === "3d_model") {
|
|
190
|
-
sceneReceipt = await client.executeIdentityBoundOps([
|
|
191
|
-
{
|
|
192
|
-
op: "InstantiateScene",
|
|
193
|
-
parent,
|
|
194
|
-
scene: importPath,
|
|
195
|
-
name: sanitizeNodeName(name || asset.title),
|
|
196
|
-
},
|
|
197
|
-
{ op: "SaveScene" },
|
|
198
|
-
], { scenePath });
|
|
199
|
-
const placementReceipts = sceneReceipt?.results ?? [];
|
|
200
|
-
const placementFailure = placementReceipts.find((receipt) => receipt?.ok !== true);
|
|
201
|
-
if (sceneReceipt?.status === "error" ||
|
|
202
|
-
placementReceipts.length !== 2 ||
|
|
203
|
-
placementFailure) {
|
|
204
|
-
throw new Error(placementFailure?.error || `Could not add asset to ${scenePath}`);
|
|
205
|
-
}
|
|
206
|
-
addedToScene = true;
|
|
207
|
-
}
|
|
208
|
-
return {
|
|
209
|
-
success: true,
|
|
210
|
-
assetId: asset.id,
|
|
211
|
-
asset: asset.title,
|
|
212
|
-
type: asset.type,
|
|
213
|
-
importedTo: importPath,
|
|
214
|
-
addedToScene,
|
|
215
|
-
parent: parent || null,
|
|
216
|
-
scenePath: scenePath || null,
|
|
217
|
-
sceneReceipt,
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
93
|
function jsonSuccess(data) {
|
|
221
94
|
return {
|
|
222
95
|
content: [
|
|
@@ -250,7 +123,7 @@ Uses hybrid search: keywords + semantic similarity. Finds assets by name AND by
|
|
|
250
123
|
Returns asset names, types, preview URLs, and import-ready file URLs.
|
|
251
124
|
|
|
252
125
|
Cloud tool — works WITHOUT the Summer Engine app open.
|
|
253
|
-
Requires authentication (so we can attribute usage and apply per-user rate limits): run 'npx summer-engine login' first.`, {
|
|
126
|
+
Requires authentication (so we can attribute usage and apply per-user rate limits): run 'npx -y summer-engine@latest login' first.`, {
|
|
254
127
|
query: z.string().describe("Natural language search, e.g. 'low-poly tree', 'sci-fi weapon'. For my_assets, can be empty to list recent."),
|
|
255
128
|
assetType: z.enum(["2d_image", "animation", "3d_model", "audio", "music", "all"]).default("all").describe("Filter by asset type"),
|
|
256
129
|
limit: z.number().default(10).describe("Max results (1-20)"),
|
|
@@ -391,7 +264,7 @@ itself does not — only this import step does).`, {
|
|
|
391
264
|
});
|
|
392
265
|
}
|
|
393
266
|
try {
|
|
394
|
-
const imported = await importResolvedAsset({
|
|
267
|
+
const imported = await importResolvedAsset(await getClient(), {
|
|
395
268
|
asset: fetched.asset,
|
|
396
269
|
parent,
|
|
397
270
|
scenePath,
|
|
@@ -419,7 +292,7 @@ itself does not — only this import step does).`, {
|
|
|
419
292
|
Use when the user wants a specific type of asset added: "Add a tree to the scene", "Import a wooden barrel".
|
|
420
293
|
Searches, picks the top result, downloads and imports it, then optionally adds it to the scene.
|
|
421
294
|
|
|
422
|
-
Requires authentication. If the user gets an auth error, they need to run 'npx summer-engine login' in their terminal first. Summer Engine must be running.`, {
|
|
295
|
+
Requires authentication. If the user gets an auth error, they need to run 'npx -y summer-engine@latest login' in their terminal first. Summer Engine must be running.`, {
|
|
423
296
|
query: z.string().describe("What to find, e.g. 'low-poly tree', 'wooden crate'"),
|
|
424
297
|
parent: z.string().optional().describe("Parent node path to add the asset under, e.g. './World'. If omitted, only imports (no scene placement)"),
|
|
425
298
|
scenePath: z.string().optional().describe("Required with parent. Exact res:// target scene path."),
|
|
@@ -464,7 +337,7 @@ Requires authentication. If the user gets an auth error, they need to run 'npx s
|
|
|
464
337
|
};
|
|
465
338
|
}
|
|
466
339
|
try {
|
|
467
|
-
const imported = await importResolvedAsset({ asset: best, parent, scenePath });
|
|
340
|
+
const imported = await importResolvedAsset(await getClient(), { asset: best, parent, scenePath });
|
|
468
341
|
// 2D sprites and audio: import only; user adds to scene manually
|
|
469
342
|
return {
|
|
470
343
|
content: [
|
|
@@ -503,4 +376,51 @@ Requires authentication. If the user gets an auth error, they need to run 'npx s
|
|
|
503
376
|
};
|
|
504
377
|
}
|
|
505
378
|
});
|
|
379
|
+
server.tool("summer_import_hdri", `Search Poly Haven's CC0 HDRI library and import one as environment lighting.
|
|
380
|
+
|
|
381
|
+
The single cheapest visual-quality upgrade for a 3D scene: a real HDRI sky lights
|
|
382
|
+
and reflects the whole world. Searches ~1,000 CC0 HDRIs on Poly Haven's public API
|
|
383
|
+
(no account, no key), downloads the .hdr/.exr through the engine's import pipeline
|
|
384
|
+
into res://sky/, and returns a ready-to-run summer_run_script snippet that wires it
|
|
385
|
+
into the WorldEnvironment (PanoramaSkyMaterial + sky ambient/reflections).
|
|
386
|
+
|
|
387
|
+
Pass query ("sunset beach", "night city", "studio") to search, or assetId for an
|
|
388
|
+
exact Poly Haven id. resolution 2k is right for most games; 4k for hero skies.
|
|
389
|
+
All results are CC0 — no attribution required.
|
|
390
|
+
|
|
391
|
+
Requires the Summer Engine app to be open with the project loaded (the download
|
|
392
|
+
runs through the engine). No Summer login needed.`, {
|
|
393
|
+
query: z
|
|
394
|
+
.string()
|
|
395
|
+
.optional()
|
|
396
|
+
.describe("What kind of sky/environment, e.g. 'sunset beach', 'overcast field', 'studio'. Omit when assetId is given."),
|
|
397
|
+
assetId: z
|
|
398
|
+
.string()
|
|
399
|
+
.optional()
|
|
400
|
+
.describe("Exact Poly Haven asset id (lowercase slug, e.g. 'kloppenheim_02'). Skips the search."),
|
|
401
|
+
resolution: z
|
|
402
|
+
.enum(["1k", "2k", "4k"])
|
|
403
|
+
.default("2k")
|
|
404
|
+
.describe("HDRI resolution. 2k (default) is right for most games; 4k for hero skies; 1k for quick blockouts."),
|
|
405
|
+
}, async ({ query, assetId, resolution }) => {
|
|
406
|
+
try {
|
|
407
|
+
const result = await importPolyHavenHdri({ query, assetId, resolution: resolution }, () => getClient());
|
|
408
|
+
return jsonSuccess(result);
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
if (err instanceof ImportHdriError) {
|
|
412
|
+
return jsonError({
|
|
413
|
+
error: err.code,
|
|
414
|
+
message: err.message,
|
|
415
|
+
...(err.hint ? { hint: err.hint } : {}),
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
419
|
+
return jsonError({
|
|
420
|
+
error: "hdri_import_failed",
|
|
421
|
+
message: msg,
|
|
422
|
+
hint: "Poly Haven may be unreachable, or Summer Engine is not running.",
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
});
|
|
506
426
|
}
|
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { CreatorOperationError, listCreatorReleases, publishCreator,
|
|
3
|
-
import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "../../
|
|
4
|
-
|
|
5
|
-
return {
|
|
6
|
-
content: [
|
|
7
|
-
{
|
|
8
|
-
type: "text",
|
|
9
|
-
text: JSON.stringify(value, null, 2),
|
|
10
|
-
},
|
|
11
|
-
],
|
|
12
|
-
...(isError ? { isError: true } : {}),
|
|
13
|
-
};
|
|
14
|
-
}
|
|
2
|
+
import { CreatorOperationError, listCreatorReleases, publishCreator, } from "../../core/capabilities/creator.js";
|
|
3
|
+
import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "../../core/config.js";
|
|
4
|
+
import { textJson } from "./text-json.js";
|
|
15
5
|
async function creatorResult(operation) {
|
|
16
6
|
try {
|
|
17
7
|
return textJson(await operation());
|
|
@@ -34,7 +24,7 @@ async function creatorResult(operation) {
|
|
|
34
24
|
}
|
|
35
25
|
}
|
|
36
26
|
export function registerCreatorTools(server) {
|
|
37
|
-
server.tool("summer_creator_publish", "Publish an exact exported Summer .pck through the versioned
|
|
27
|
+
server.tool("summer_creator_publish", "Publish an exact exported Summer .pck through the versioned Summer Platform creator API. First call with confirm=false and present the returned project, version, digest, size, artifact path, channel, and notes; set confirm only after the user approves that exact target. The server independently verifies token scope, ownership, bytes, and review state.", {
|
|
38
28
|
project: z.string().optional().describe("Project root. Defaults to the current working directory."),
|
|
39
29
|
artifact: z.string().describe("Exact path to the exported Summer .pck artifact."),
|
|
40
30
|
version: z.string().describe("Immutable release version."),
|
|
@@ -47,7 +37,7 @@ export function registerCreatorTools(server) {
|
|
|
47
37
|
...args,
|
|
48
38
|
face: "mcp",
|
|
49
39
|
})));
|
|
50
|
-
server.tool("summer_creator_releases", "List real creator-owned releases from the versioned
|
|
40
|
+
server.tool("summer_creator_releases", "List real creator-owned releases from the versioned Summer Platform creator API. The server independently verifies the exact publish scope and project ownership.", {
|
|
51
41
|
projectId: z.string().optional().describe("Creator project ID. Defaults to ~/.summer/config.json."),
|
|
52
42
|
limit: z.number().int().min(1).max(100).default(20),
|
|
53
43
|
cursor: z.string().optional().describe("Opaque nextCursor from the previous page."),
|
|
@@ -55,14 +45,6 @@ export function registerCreatorTools(server) {
|
|
|
55
45
|
...args,
|
|
56
46
|
face: "mcp",
|
|
57
47
|
})));
|
|
58
|
-
server.tool("summer_creator_logs", "Read creator runtime logs for a project or release. If the required platform route or token scope is unavailable, returns the exact recovery action instead of placeholder logs.", {
|
|
59
|
-
projectId: z.string().optional().describe("Creator project ID. Defaults to ~/.summer/config.json."),
|
|
60
|
-
releaseId: z.string().optional().describe("Optional release ID."),
|
|
61
|
-
limit: z.number().int().min(1).max(1000).default(100),
|
|
62
|
-
}, async (args) => creatorResult(() => readCreatorLogs({
|
|
63
|
-
...args,
|
|
64
|
-
face: "mcp",
|
|
65
|
-
})));
|
|
66
48
|
server.tool("summer_creator_config", "Read or update the shared non-secret ~/.summer configuration used by the CLI and this MCP. Mutations require confirm=true. Tokens are never returned or accepted by this tool.", {
|
|
67
49
|
action: z.enum(["list", "get", "set", "unset"]),
|
|
68
50
|
key: z.enum(CONFIG_KEYS).optional(),
|