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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poly Haven HDRI import (tool/import-hdri). Shared by the MCP tool
|
|
3
|
+
* (summer_import_hdri) and the CLI dispatcher (`summer tool import-hdri`).
|
|
4
|
+
*
|
|
5
|
+
* Talks to Poly Haven's public API — no key, no Summer account, CC0 catalog —
|
|
6
|
+
* then downloads the chosen .hdr/.exr THROUGH the engine's import pipeline
|
|
7
|
+
* (ImportFromUrl) so the result is a usable res:// texture. Every value read
|
|
8
|
+
* from the API is treated as untrusted data: ids must be slugs, download URLs
|
|
9
|
+
* must point back at Poly Haven over https.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
export declare const HDRI_RESOLUTIONS: readonly ["1k", "2k", "4k"];
|
|
13
|
+
export type HdriResolution = (typeof HDRI_RESOLUTIONS)[number];
|
|
14
|
+
/** Refuse downloads above this unless the caller opts in: a 16k .exr is
|
|
15
|
+
* hundreds of MB pulled through the engine on a user's machine. */
|
|
16
|
+
export declare const HDRI_MAX_DOWNLOAD_BYTES: number;
|
|
17
|
+
/**
|
|
18
|
+
* The one input contract for summer_import_hdri, shared by the MCP tool (pass
|
|
19
|
+
* `.shape` to server.tool) and the CLI dispatcher (`summer tool import-hdri`)
|
|
20
|
+
* so an off-ladder resolution is rejected on both faces.
|
|
21
|
+
*/
|
|
22
|
+
export declare const importHdriArgsSchema: z.ZodObject<{
|
|
23
|
+
query: z.ZodOptional<z.ZodString>;
|
|
24
|
+
assetId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
resolution: z.ZodDefault<z.ZodEnum<["1k", "2k", "4k"]>>;
|
|
26
|
+
allow_large: z.ZodDefault<z.ZodBoolean>;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
resolution: "1k" | "2k" | "4k";
|
|
29
|
+
allow_large: boolean;
|
|
30
|
+
query?: string | undefined;
|
|
31
|
+
assetId?: string | undefined;
|
|
32
|
+
}, {
|
|
33
|
+
query?: string | undefined;
|
|
34
|
+
assetId?: string | undefined;
|
|
35
|
+
resolution?: "1k" | "2k" | "4k" | undefined;
|
|
36
|
+
allow_large?: boolean | undefined;
|
|
37
|
+
}>;
|
|
38
|
+
export interface ImportHdriArgs {
|
|
39
|
+
query?: string;
|
|
40
|
+
assetId?: string;
|
|
41
|
+
resolution?: HdriResolution;
|
|
42
|
+
/** Opt in to files above HDRI_MAX_DOWNLOAD_BYTES. */
|
|
43
|
+
allow_large?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** The engine surface this capability needs: one ImportFromUrl op. */
|
|
46
|
+
export interface HdriImportEngine {
|
|
47
|
+
executeOps(ops: Record<string, unknown>[]): Promise<unknown>;
|
|
48
|
+
}
|
|
49
|
+
export interface ImportHdriResult {
|
|
50
|
+
success: true;
|
|
51
|
+
assetId: string;
|
|
52
|
+
name?: string;
|
|
53
|
+
resolution: string;
|
|
54
|
+
resolutionNote?: string;
|
|
55
|
+
format: string;
|
|
56
|
+
importedTo: string;
|
|
57
|
+
license: string;
|
|
58
|
+
alternates?: Array<{
|
|
59
|
+
id: string;
|
|
60
|
+
name?: string;
|
|
61
|
+
}>;
|
|
62
|
+
nextStep: string;
|
|
63
|
+
applyScript: string;
|
|
64
|
+
}
|
|
65
|
+
export type ImportHdriErrorCode = "bad_args" | "no_results" | "no_hdri_file" | "file_too_large" | "import_failed" | "hdri_import_failed";
|
|
66
|
+
export declare class ImportHdriError extends Error {
|
|
67
|
+
readonly code: ImportHdriErrorCode;
|
|
68
|
+
readonly hint?: string | undefined;
|
|
69
|
+
constructor(code: ImportHdriErrorCode, message: string, hint?: string | undefined);
|
|
70
|
+
}
|
|
71
|
+
/** Poly Haven asset ids are lowercase slugs. Anything else in an API response
|
|
72
|
+
* is rejected before it can reach a URL or res:// path. */
|
|
73
|
+
export declare function isSafePolyHavenId(id: string): boolean;
|
|
74
|
+
/** Only accept download URLs that point back at Poly Haven over https, with
|
|
75
|
+
* no embedded credentials (https://user:pw@polyhaven.com/... parses to the
|
|
76
|
+
* right hostname but is not a URL we should ever hand to the engine). */
|
|
77
|
+
export declare function isPolyHavenDownloadUrl(rawUrl: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* The summer_run_script body that wires an imported HDRI as the sky. Plain
|
|
80
|
+
* GDScript against WorldEnvironment using only the baseline ctx helpers
|
|
81
|
+
* (get_scene_root / set_owner_recursive / report) — `ctx.ensure_environment`
|
|
82
|
+
* is not part of any shipped engine's ctx API and must not be relied on.
|
|
83
|
+
*/
|
|
84
|
+
export declare function hdriApplySnippet(importedPath: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Search (or pick by id), choose a file, import through the engine. Throws
|
|
87
|
+
* ImportHdriError with a stable code for every failure the caller should
|
|
88
|
+
* surface as data; unexpected transport errors propagate as plain Errors.
|
|
89
|
+
*/
|
|
90
|
+
export declare function importPolyHavenHdri(args: ImportHdriArgs, engine: () => Promise<HdriImportEngine>): Promise<ImportHdriResult>;
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poly Haven HDRI import (tool/import-hdri). Shared by the MCP tool
|
|
3
|
+
* (summer_import_hdri) and the CLI dispatcher (`summer tool import-hdri`).
|
|
4
|
+
*
|
|
5
|
+
* Talks to Poly Haven's public API — no key, no Summer account, CC0 catalog —
|
|
6
|
+
* then downloads the chosen .hdr/.exr THROUGH the engine's import pipeline
|
|
7
|
+
* (ImportFromUrl) so the result is a usable res:// texture. Every value read
|
|
8
|
+
* from the API is treated as untrusted data: ids must be slugs, download URLs
|
|
9
|
+
* must point back at Poly Haven over https.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
const POLYHAVEN_API_URL = "https://api.polyhaven.com";
|
|
13
|
+
const POLYHAVEN_USER_AGENT = "summer-engine-cli";
|
|
14
|
+
export const HDRI_RESOLUTIONS = ["1k", "2k", "4k"];
|
|
15
|
+
/** Refuse downloads above this unless the caller opts in: a 16k .exr is
|
|
16
|
+
* hundreds of MB pulled through the engine on a user's machine. */
|
|
17
|
+
export const HDRI_MAX_DOWNLOAD_BYTES = 64 * 1024 * 1024;
|
|
18
|
+
/**
|
|
19
|
+
* The one input contract for summer_import_hdri, shared by the MCP tool (pass
|
|
20
|
+
* `.shape` to server.tool) and the CLI dispatcher (`summer tool import-hdri`)
|
|
21
|
+
* so an off-ladder resolution is rejected on both faces.
|
|
22
|
+
*/
|
|
23
|
+
export const importHdriArgsSchema = z.object({
|
|
24
|
+
query: z.string().optional(),
|
|
25
|
+
assetId: z.string().optional(),
|
|
26
|
+
resolution: z.enum(HDRI_RESOLUTIONS).default("2k"),
|
|
27
|
+
allow_large: z
|
|
28
|
+
.boolean()
|
|
29
|
+
.default(false)
|
|
30
|
+
.describe(`Allow files above ${HDRI_MAX_DOWNLOAD_BYTES / (1024 * 1024)} MB.`),
|
|
31
|
+
});
|
|
32
|
+
export class ImportHdriError extends Error {
|
|
33
|
+
code;
|
|
34
|
+
hint;
|
|
35
|
+
constructor(code, message, hint) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.code = code;
|
|
38
|
+
this.hint = hint;
|
|
39
|
+
this.name = "ImportHdriError";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Poly Haven asset ids are lowercase slugs. Anything else in an API response
|
|
43
|
+
* is rejected before it can reach a URL or res:// path. */
|
|
44
|
+
export function isSafePolyHavenId(id) {
|
|
45
|
+
return /^[a-z0-9_-]{1,100}$/.test(id);
|
|
46
|
+
}
|
|
47
|
+
/** Only accept download URLs that point back at Poly Haven over https, with
|
|
48
|
+
* no embedded credentials (https://user:pw@polyhaven.com/... parses to the
|
|
49
|
+
* right hostname but is not a URL we should ever hand to the engine). */
|
|
50
|
+
export function isPolyHavenDownloadUrl(rawUrl) {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = new URL(rawUrl);
|
|
53
|
+
return (parsed.protocol === "https:" &&
|
|
54
|
+
parsed.username === "" &&
|
|
55
|
+
parsed.password === "" &&
|
|
56
|
+
(parsed.hostname === "polyhaven.com" ||
|
|
57
|
+
parsed.hostname.endsWith(".polyhaven.com") ||
|
|
58
|
+
parsed.hostname === "polyhaven.org" ||
|
|
59
|
+
parsed.hostname.endsWith(".polyhaven.org")));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function polyHavenGetJson(endpoint) {
|
|
66
|
+
const res = await fetch(`${POLYHAVEN_API_URL}${endpoint}`, {
|
|
67
|
+
headers: { "User-Agent": POLYHAVEN_USER_AGENT },
|
|
68
|
+
signal: AbortSignal.timeout(20_000),
|
|
69
|
+
});
|
|
70
|
+
if (!res.ok) {
|
|
71
|
+
throw new Error(`Poly Haven API request failed (${res.status}) for ${endpoint}`);
|
|
72
|
+
}
|
|
73
|
+
return (await res.json());
|
|
74
|
+
}
|
|
75
|
+
/** The Poly Haven API has no text-search endpoint; /assets?type=hdris returns
|
|
76
|
+
* the full HDRI catalog keyed by id. Score entries against the query terms. */
|
|
77
|
+
function scorePolyHavenEntry(id, entry, terms) {
|
|
78
|
+
const name = typeof entry.name === "string" ? entry.name.toLowerCase() : "";
|
|
79
|
+
const tags = Array.isArray(entry.tags)
|
|
80
|
+
? entry.tags.filter((tag) => typeof tag === "string").map((tag) => tag.toLowerCase())
|
|
81
|
+
: [];
|
|
82
|
+
const categories = Array.isArray(entry.categories)
|
|
83
|
+
? entry.categories
|
|
84
|
+
.filter((category) => typeof category === "string")
|
|
85
|
+
.map((category) => category.toLowerCase())
|
|
86
|
+
: [];
|
|
87
|
+
let score = 0;
|
|
88
|
+
for (const term of terms) {
|
|
89
|
+
if (id.includes(term))
|
|
90
|
+
score += 4;
|
|
91
|
+
if (name.includes(term))
|
|
92
|
+
score += 4;
|
|
93
|
+
if (tags.some((tag) => tag === term))
|
|
94
|
+
score += 3;
|
|
95
|
+
else if (tags.some((tag) => tag.includes(term)))
|
|
96
|
+
score += 2;
|
|
97
|
+
if (categories.some((category) => category === term))
|
|
98
|
+
score += 3;
|
|
99
|
+
else if (categories.some((category) => category.includes(term)))
|
|
100
|
+
score += 1;
|
|
101
|
+
}
|
|
102
|
+
return score;
|
|
103
|
+
}
|
|
104
|
+
function pickHdriFile(files, requested) {
|
|
105
|
+
const hdri = files.hdri;
|
|
106
|
+
if (!hdri || typeof hdri !== "object")
|
|
107
|
+
return null;
|
|
108
|
+
// Prefer the requested resolution, then step DOWN, then step up.
|
|
109
|
+
const ladder = ["1k", "2k", "4k", "8k", "16k"];
|
|
110
|
+
const start = ladder.indexOf(requested);
|
|
111
|
+
const candidates = start === -1
|
|
112
|
+
? ladder
|
|
113
|
+
: [
|
|
114
|
+
ladder[start],
|
|
115
|
+
...ladder.slice(0, start).reverse(),
|
|
116
|
+
...ladder.slice(start + 1),
|
|
117
|
+
];
|
|
118
|
+
for (const resolution of candidates) {
|
|
119
|
+
const byFormat = hdri[resolution];
|
|
120
|
+
if (!byFormat || typeof byFormat !== "object")
|
|
121
|
+
continue;
|
|
122
|
+
for (const format of ["hdr", "exr"]) {
|
|
123
|
+
const file = byFormat[format];
|
|
124
|
+
if (file && typeof file.url === "string" && isPolyHavenDownloadUrl(file.url)) {
|
|
125
|
+
return { resolution, format, url: file.url, size: file.size };
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The summer_run_script body that wires an imported HDRI as the sky. Plain
|
|
133
|
+
* GDScript against WorldEnvironment using only the baseline ctx helpers
|
|
134
|
+
* (get_scene_root / set_owner_recursive / report) — `ctx.ensure_environment`
|
|
135
|
+
* is not part of any shipped engine's ctx API and must not be relied on.
|
|
136
|
+
*/
|
|
137
|
+
export function hdriApplySnippet(importedPath) {
|
|
138
|
+
return [
|
|
139
|
+
"func run(ctx):",
|
|
140
|
+
" var root = ctx.get_scene_root()",
|
|
141
|
+
" var env: WorldEnvironment = null",
|
|
142
|
+
' var found = root.find_children("*", "WorldEnvironment", true, false)',
|
|
143
|
+
" if found.size() > 0:",
|
|
144
|
+
" env = found[0]",
|
|
145
|
+
" else:",
|
|
146
|
+
" env = WorldEnvironment.new()",
|
|
147
|
+
' env.name = "WorldEnvironment"',
|
|
148
|
+
" root.add_child(env)",
|
|
149
|
+
" ctx.set_owner_recursive(env)",
|
|
150
|
+
" var e: Environment = env.environment",
|
|
151
|
+
" if e == null:",
|
|
152
|
+
" e = Environment.new()",
|
|
153
|
+
" env.environment = e",
|
|
154
|
+
" var mat := PanoramaSkyMaterial.new()",
|
|
155
|
+
` mat.panorama = load("${importedPath}")`,
|
|
156
|
+
" var sky := Sky.new()",
|
|
157
|
+
" sky.sky_material = mat",
|
|
158
|
+
" e.background_mode = Environment.BG_SKY",
|
|
159
|
+
" e.sky = sky",
|
|
160
|
+
" e.ambient_light_source = Environment.AMBIENT_SOURCE_BG",
|
|
161
|
+
" e.reflected_light_source = Environment.REFLECTION_SOURCE_BG",
|
|
162
|
+
` ctx.report("sky", "${importedPath}")`,
|
|
163
|
+
].join("\n");
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Search (or pick by id), choose a file, import through the engine. Throws
|
|
167
|
+
* ImportHdriError with a stable code for every failure the caller should
|
|
168
|
+
* surface as data; unexpected transport errors propagate as plain Errors.
|
|
169
|
+
*/
|
|
170
|
+
export async function importPolyHavenHdri(args, engine) {
|
|
171
|
+
const resolution = args.resolution ?? "2k";
|
|
172
|
+
const query = args.query?.trim() ?? "";
|
|
173
|
+
if (!args.assetId && !query) {
|
|
174
|
+
throw new ImportHdriError("bad_args", "Pass query (to search) or assetId (exact Poly Haven id).");
|
|
175
|
+
}
|
|
176
|
+
let chosenId = args.assetId?.trim() ?? "";
|
|
177
|
+
let chosenName;
|
|
178
|
+
let alternates = [];
|
|
179
|
+
if (chosenId) {
|
|
180
|
+
if (!isSafePolyHavenId(chosenId)) {
|
|
181
|
+
throw new ImportHdriError("bad_args", "assetId must be a Poly Haven slug (lowercase letters, digits, _ or -).");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const catalog = await polyHavenGetJson("/assets?type=hdris");
|
|
186
|
+
const terms = query
|
|
187
|
+
.toLowerCase()
|
|
188
|
+
.split(/[^a-z0-9]+/)
|
|
189
|
+
.filter((term) => term.length > 1);
|
|
190
|
+
const scored = Object.entries(catalog)
|
|
191
|
+
.filter(([id]) => isSafePolyHavenId(id))
|
|
192
|
+
.map(([id, entry]) => ({
|
|
193
|
+
id,
|
|
194
|
+
entry,
|
|
195
|
+
score: scorePolyHavenEntry(id, entry ?? {}, terms),
|
|
196
|
+
}))
|
|
197
|
+
.filter((candidate) => candidate.score > 0)
|
|
198
|
+
.sort((a, b) => b.score - a.score);
|
|
199
|
+
if (scored.length === 0) {
|
|
200
|
+
throw new ImportHdriError("no_results", `No Poly Haven HDRI matched "${query}". Try broader terms like 'sunset', 'studio', 'night', 'forest'.`);
|
|
201
|
+
}
|
|
202
|
+
chosenId = scored[0].id;
|
|
203
|
+
chosenName =
|
|
204
|
+
typeof scored[0].entry?.name === "string" ? scored[0].entry.name : undefined;
|
|
205
|
+
alternates = scored.slice(1, 5).map((candidate) => ({
|
|
206
|
+
id: candidate.id,
|
|
207
|
+
name: typeof candidate.entry?.name === "string" ? candidate.entry.name : undefined,
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
const files = await polyHavenGetJson(`/files/${encodeURIComponent(chosenId)}`);
|
|
211
|
+
const file = pickHdriFile(files, resolution);
|
|
212
|
+
if (!file) {
|
|
213
|
+
throw new ImportHdriError("no_hdri_file", `Poly Haven asset "${chosenId}" has no downloadable .hdr/.exr — is it an HDRI id?`);
|
|
214
|
+
}
|
|
215
|
+
if (typeof file.size === "number" &&
|
|
216
|
+
file.size > HDRI_MAX_DOWNLOAD_BYTES &&
|
|
217
|
+
args.allow_large !== true) {
|
|
218
|
+
const mb = (bytes) => (bytes / (1024 * 1024)).toFixed(1);
|
|
219
|
+
throw new ImportHdriError("file_too_large", `Poly Haven "${chosenId}" at ${file.resolution} is ${mb(file.size)} MB, above the ` +
|
|
220
|
+
`${mb(HDRI_MAX_DOWNLOAD_BYTES)} MB ceiling for an engine-side download.`, "Pick a lower resolution, or pass allow_large:true to download it anyway.");
|
|
221
|
+
}
|
|
222
|
+
const importedPath = `res://sky/${chosenId}_${file.resolution}.${file.format}`;
|
|
223
|
+
const client = await engine();
|
|
224
|
+
const importResult = await client.executeOps([
|
|
225
|
+
{ op: "ImportFromUrl", url: file.url, path: importedPath },
|
|
226
|
+
]);
|
|
227
|
+
const receipts = importResult?.results ?? [];
|
|
228
|
+
const failure = receipts.find((receipt) => receipt?.ok === false);
|
|
229
|
+
if (importResult?.status === "error" || failure) {
|
|
230
|
+
throw new ImportHdriError("import_failed", failure?.error || "Could not import the HDRI. Check engine logs.", "Make sure Summer Engine is running with the project loaded.");
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
success: true,
|
|
234
|
+
assetId: chosenId,
|
|
235
|
+
name: chosenName,
|
|
236
|
+
resolution: file.resolution,
|
|
237
|
+
resolutionNote: file.resolution === resolution
|
|
238
|
+
? undefined
|
|
239
|
+
: `Requested ${resolution} was not available; imported ${file.resolution} instead.`,
|
|
240
|
+
format: file.format,
|
|
241
|
+
importedTo: importedPath,
|
|
242
|
+
license: "CC0 (Poly Haven) — free for any use, no attribution required.",
|
|
243
|
+
alternates: alternates.length > 0 ? alternates : undefined,
|
|
244
|
+
nextStep: "Wire it into the environment with summer_run_script using this exact script " +
|
|
245
|
+
"(needs an engine with RunSceneScript; on an older engine run the same body through " +
|
|
246
|
+
"summer_run_editor_script), then verify with summer_screenshot framing:\"camera\" " +
|
|
247
|
+
"(preset framings substitute the environment):",
|
|
248
|
+
applyScript: hdriApplySnippet(importedPath),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Shared MCP/CLI image request contract; optional flags preserve omission. */
|
|
3
|
+
export declare const imageGenerationArgsSchema: z.ZodObject<{
|
|
4
|
+
prompt: z.ZodString;
|
|
5
|
+
model: z.ZodDefault<z.ZodString>;
|
|
6
|
+
style: z.ZodDefault<z.ZodString>;
|
|
7
|
+
referenceImageUrl: z.ZodOptional<z.ZodString>;
|
|
8
|
+
removeBackground: z.ZodOptional<z.ZodBoolean>;
|
|
9
|
+
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
prompt: string;
|
|
12
|
+
model: string;
|
|
13
|
+
style: string;
|
|
14
|
+
options?: Record<string, any> | undefined;
|
|
15
|
+
referenceImageUrl?: string | undefined;
|
|
16
|
+
removeBackground?: boolean | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
prompt: string;
|
|
19
|
+
options?: Record<string, any> | undefined;
|
|
20
|
+
model?: string | undefined;
|
|
21
|
+
style?: string | undefined;
|
|
22
|
+
referenceImageUrl?: string | undefined;
|
|
23
|
+
removeBackground?: boolean | undefined;
|
|
24
|
+
}>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Shared MCP/CLI image request contract; optional flags preserve omission. */
|
|
3
|
+
export const imageGenerationArgsSchema = z.object({
|
|
4
|
+
prompt: z.string().describe("Description of the image to generate"),
|
|
5
|
+
model: z
|
|
6
|
+
.string()
|
|
7
|
+
.default("nano-banana-2")
|
|
8
|
+
.describe("Model name or full provider ID"),
|
|
9
|
+
style: z
|
|
10
|
+
.string()
|
|
11
|
+
.default("realistic")
|
|
12
|
+
.describe("Style preset: realistic, cartoon, anime, or 'none' to skip"),
|
|
13
|
+
referenceImageUrl: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Source image URL for img2img / edit mode. The prompt describes how to transform this image."),
|
|
17
|
+
removeBackground: z.boolean().optional().describe("Remove the background server-side and return an alpha PNG for sprites, icons, or isolated objects."),
|
|
18
|
+
options: z
|
|
19
|
+
.record(z.any())
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Provider-specific params (guidance_scale, seed, image_size, negative_prompt, etc.)"),
|
|
22
|
+
});
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `summer open` / `summer_open` — one behavior, two faces (CONTRACT §3).
|
|
3
|
+
*
|
|
4
|
+
* Resolve a target (id, intent phrase, res:// path or summerengine.com path)
|
|
5
|
+
* against the product map (./targets.ts), then either open it — the browser
|
|
6
|
+
* for web targets (through /login?returnUrl= when login is required and the
|
|
7
|
+
* CLI is not logged in), the running Summer Engine via the local API for
|
|
8
|
+
* editor targets — or, with `open: false`, return what would open without
|
|
9
|
+
* opening.
|
|
10
|
+
*
|
|
11
|
+
* Editor targets are FORWARDED, not implemented here: when the engine
|
|
12
|
+
* advertises `capabilities.navigation` the tool sends the one-table op
|
|
13
|
+
* `Navigate { target, ...args }`; on an engine that predates it the few ids the
|
|
14
|
+
* original ops can serve (scene, node, script, file, the three docks) use those
|
|
15
|
+
* ops and everything else answers `engine_lacks_op`. See NAVIGATION-PLAN.md.
|
|
16
|
+
*
|
|
17
|
+
* Both faces call runOpen(); the CLI (tool-dispatch + `summer open`) and the
|
|
18
|
+
* MCP tool (src/mcp/tools/navigation-tools.ts) only differ in how the engine
|
|
19
|
+
* client and the browser launcher are supplied.
|
|
20
|
+
*/
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
import type { EngineCapabilities } from "../../capability-skew.js";
|
|
23
|
+
import { type EditorTargetMeta, type NavParam, type NavSurface, type NavTarget } from "./targets.js";
|
|
24
|
+
export type OpenSurface = "auto" | NavSurface;
|
|
25
|
+
/** The ONE argument shape both faces validate with (mirrors
|
|
26
|
+
* library/tools/open/resource.yaml input_schema; parity-tested). */
|
|
27
|
+
export declare const openArgsShape: {
|
|
28
|
+
target: z.ZodOptional<z.ZodString>;
|
|
29
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
30
|
+
surface: z.ZodOptional<z.ZodEnum<["auto", "web", "editor"]>>;
|
|
31
|
+
open: z.ZodOptional<z.ZodBoolean>;
|
|
32
|
+
};
|
|
33
|
+
export declare const openArgsSchema: z.ZodObject<{
|
|
34
|
+
target: z.ZodOptional<z.ZodString>;
|
|
35
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
36
|
+
surface: z.ZodOptional<z.ZodEnum<["auto", "web", "editor"]>>;
|
|
37
|
+
open: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
}, "strict", z.ZodTypeAny, {
|
|
39
|
+
params?: Record<string, string> | undefined;
|
|
40
|
+
target?: string | undefined;
|
|
41
|
+
surface?: "web" | "editor" | "auto" | undefined;
|
|
42
|
+
open?: boolean | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
params?: Record<string, string> | undefined;
|
|
45
|
+
target?: string | undefined;
|
|
46
|
+
surface?: "web" | "editor" | "auto" | undefined;
|
|
47
|
+
open?: boolean | undefined;
|
|
48
|
+
}>;
|
|
49
|
+
export type OpenArgs = z.infer<typeof openArgsSchema>;
|
|
50
|
+
export type OpenAction = "opened" | "printed" | "listed" | "ambiguous" | "unsupported" | "engine_not_running" | "engine_error" | "not_found" | "invalid_params" | "open_failed" | "blocked_origin";
|
|
51
|
+
export interface OpenMatch {
|
|
52
|
+
id: string;
|
|
53
|
+
surface: NavSurface;
|
|
54
|
+
title: string;
|
|
55
|
+
score: number;
|
|
56
|
+
}
|
|
57
|
+
export type EditorAvailability = "available" | "legacy" | "unavailable" | "unknown";
|
|
58
|
+
export interface OpenTargetSummary {
|
|
59
|
+
id: string;
|
|
60
|
+
surface: NavSurface;
|
|
61
|
+
title: string;
|
|
62
|
+
description: string;
|
|
63
|
+
requires: NavTarget["requires"];
|
|
64
|
+
params?: readonly NavParam[];
|
|
65
|
+
/** Editor rows: whether the connected engine can open it. `legacy` = served by
|
|
66
|
+
* a pre-Navigate op; `unknown` = engine not reachable when listing. */
|
|
67
|
+
availability?: EditorAvailability;
|
|
68
|
+
}
|
|
69
|
+
export interface OpenResult {
|
|
70
|
+
ok: boolean;
|
|
71
|
+
action: OpenAction;
|
|
72
|
+
target?: OpenTargetSummary;
|
|
73
|
+
/** Web: the destination URL. */
|
|
74
|
+
url?: string;
|
|
75
|
+
/** Web: the login deep link when the target requires login. */
|
|
76
|
+
login_url?: string;
|
|
77
|
+
/** Web: whether this CLI holds a Summer login token (a hint; the browser may still ask). */
|
|
78
|
+
logged_in?: boolean;
|
|
79
|
+
/** Web: the URL actually launched (url or login_url). */
|
|
80
|
+
opened_url?: string;
|
|
81
|
+
/** Web: the path was not in the map but is on an allowed origin. */
|
|
82
|
+
unmapped?: boolean;
|
|
83
|
+
/** Editor: the op that was (or would be) sent. */
|
|
84
|
+
op?: Record<string, unknown>;
|
|
85
|
+
/** Editor: engine state. */
|
|
86
|
+
engine?: {
|
|
87
|
+
running: boolean;
|
|
88
|
+
version?: string;
|
|
89
|
+
navigation?: boolean;
|
|
90
|
+
error?: string;
|
|
91
|
+
};
|
|
92
|
+
/** Editor: the raw engine receipt on success. */
|
|
93
|
+
receipt?: unknown;
|
|
94
|
+
/** Structured failure class for ok:false results (engine_lacks_op, …). */
|
|
95
|
+
failure_reason?: string;
|
|
96
|
+
matches?: OpenMatch[];
|
|
97
|
+
targets?: OpenTargetSummary[];
|
|
98
|
+
hint?: string;
|
|
99
|
+
}
|
|
100
|
+
/** The slice of the engine client the tool needs (EngineApiClient satisfies it). */
|
|
101
|
+
export interface OpenEngineClient {
|
|
102
|
+
executeOps(ops: Array<Record<string, unknown>>): Promise<unknown>;
|
|
103
|
+
getProjectState(prefix?: string): Promise<unknown>;
|
|
104
|
+
getEngineVersion?(): string | undefined;
|
|
105
|
+
getEngineCapabilities?(): EngineCapabilities | undefined;
|
|
106
|
+
}
|
|
107
|
+
export interface OpenDeps {
|
|
108
|
+
/** Connect to the running engine; MUST throw when it is not reachable. */
|
|
109
|
+
engine(): Promise<OpenEngineClient>;
|
|
110
|
+
openUrl(url: string): Promise<unknown>;
|
|
111
|
+
isLoggedIn(): Promise<boolean>;
|
|
112
|
+
gatewayUrl(): Promise<string>;
|
|
113
|
+
docsOrigin?: string;
|
|
114
|
+
}
|
|
115
|
+
/** The only origins this tool ever opens a browser on: summerengine.com and its
|
|
116
|
+
* subdomains, plus loopback for local web development. A configured gateway
|
|
117
|
+
* (SUMMER_GATEWAY_URL / gateway.url) that points anywhere else is refused —
|
|
118
|
+
* the API calls may go there, a browser launch never does. */
|
|
119
|
+
export declare function isAllowedNavigationOrigin(origin: string): boolean;
|
|
120
|
+
/** A project resource path the engine may be asked to open: `res://` plus a
|
|
121
|
+
* plain relative path — no parent segments, no backslashes, no percent
|
|
122
|
+
* escapes, nothing that could name a file outside the project. Returns the
|
|
123
|
+
* problem, or null when the path is acceptable. */
|
|
124
|
+
export declare function resPathProblem(value: string): string | null;
|
|
125
|
+
export declare function tokenize(text: string): string[];
|
|
126
|
+
/** Rank every target for a free-text query. Exported for tests. */
|
|
127
|
+
export declare function rankTargets(query: string, surface?: OpenSurface): OpenMatch[];
|
|
128
|
+
type Resolution = {
|
|
129
|
+
kind: "target";
|
|
130
|
+
target: NavTarget;
|
|
131
|
+
params: Record<string, string>;
|
|
132
|
+
} | {
|
|
133
|
+
kind: "url";
|
|
134
|
+
url: string;
|
|
135
|
+
} | {
|
|
136
|
+
kind: "ambiguous";
|
|
137
|
+
matches: OpenMatch[];
|
|
138
|
+
} | {
|
|
139
|
+
kind: "not_found";
|
|
140
|
+
matches: OpenMatch[];
|
|
141
|
+
hint: string;
|
|
142
|
+
};
|
|
143
|
+
export declare function unsafeRedirectParam(pathWithQuery: string): string | null;
|
|
144
|
+
export declare function resolveTarget(rawTarget: string, params: Record<string, string>, surface: OpenSurface): Resolution;
|
|
145
|
+
/** Fill a web path template. `{slot}` required, `[/{slot}]` optional. */
|
|
146
|
+
export declare function renderWebPath(template: string, params: Record<string, string>, declared?: readonly NavParam[]): string;
|
|
147
|
+
/** The one-table op: Navigate { target, ...args }. */
|
|
148
|
+
export declare function buildNavigateOp(meta: EditorTargetMeta, params: Record<string, string>): Record<string, unknown>;
|
|
149
|
+
/** The pre-Navigate op for engines that predate the table (only some rows have one). */
|
|
150
|
+
export declare function buildLegacyOp(meta: EditorTargetMeta, params: Record<string, string>): Record<string, unknown> | null;
|
|
151
|
+
/** Which ids the connected engine can open. undefined = engine predates the advert. */
|
|
152
|
+
export declare function advertisedNavigation(client: OpenEngineClient): Set<string> | undefined;
|
|
153
|
+
export declare function editorAvailability(meta: EditorTargetMeta, advertised: Set<string> | undefined): EditorAvailability;
|
|
154
|
+
export declare function listTargets(surface?: OpenSurface, advertised?: Set<string> | undefined | "unknown"): OpenTargetSummary[];
|
|
155
|
+
export declare function runOpen(args: OpenArgs, deps: OpenDeps): Promise<OpenResult>;
|
|
156
|
+
export {};
|