summer-engine 2.8.2 → 3.1.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 +149 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +161 -393
- 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/cli/commands/setup.js +158 -0
- package/dist/{commands → cli/commands}/skills.js +121 -251
- 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 +55 -0
- package/dist/core/skills-registry.js +106 -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/installer/agent-config.d.ts +63 -0
- package/dist/installer/agent-config.js +540 -0
- package/dist/installer/agent-table.d.ts +103 -0
- package/dist/installer/agent-table.js +584 -0
- 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 +148 -0
- package/dist/installer/skill-locations.d.ts +36 -0
- package/dist/installer/skill-locations.js +91 -0
- package/dist/installer/version-check.d.ts +178 -0
- package/dist/installer/version-check.js +479 -0
- 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 +99 -0
- package/integrations/amp/README.md +12 -0
- package/integrations/amp/manifest-target.json +3 -0
- package/integrations/antigravity/README.md +12 -0
- package/integrations/antigravity/manifest-target.json +3 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/claude-desktop/README.md +12 -0
- package/integrations/claude-desktop/manifest-target.json +3 -0
- package/integrations/cline/README.md +12 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/cline-cli/README.md +12 -0
- package/integrations/cline-cli/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/copilot-jetbrains/README.md +12 -0
- package/integrations/copilot-jetbrains/manifest-target.json +3 -0
- package/integrations/crush/README.md +12 -0
- package/integrations/crush/manifest-target.json +3 -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/goose/README.md +12 -0
- package/integrations/goose/manifest-target.json +3 -0
- package/integrations/grok-build/README.md +12 -0
- package/integrations/grok-build/manifest-target.json +3 -0
- package/integrations/hermes/README.md +12 -0
- package/integrations/hermes/manifest-target.json +3 -0
- package/integrations/junie/README.md +12 -0
- package/integrations/junie/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +12 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/kimi-code/README.md +12 -0
- package/integrations/kimi-code/manifest-target.json +3 -0
- package/integrations/kiro/README.md +12 -0
- package/integrations/kiro/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/mistral-vibe/README.md +12 -0
- package/integrations/mistral-vibe/manifest-target.json +3 -0
- package/integrations/opencode/README.md +12 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/qoder/README.md +12 -0
- package/integrations/qoder/manifest-target.json +3 -0
- package/integrations/qwen-code/README.md +12 -0
- package/integrations/qwen-code/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +14 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/rovo-dev/README.md +12 -0
- package/integrations/rovo-dev/manifest-target.json +3 -0
- package/integrations/trae/README.md +12 -0
- package/integrations/trae/manifest-target.json +3 -0
- package/integrations/visual-studio/README.md +12 -0
- package/integrations/visual-studio/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/warp/README.md +12 -0
- package/integrations/warp/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +12 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/integrations/zed/README.md +12 -0
- package/integrations/zed/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/library/skills/README.md +242 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +21 -15
- 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-index.md +242 -0
- package/registry/generated/skills-registry.json +1249 -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/setup.js +0 -217
- package/dist/commands/status.js +0 -46
- package/dist/lib/agent-config.d.ts +0 -39
- package/dist/lib/agent-config.js +0 -626
- 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/lib/version-check.js +0 -338
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
- /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { readStoreJson, readStoreText, removeStoreFile, writeStoreJson, writeStoreText, } from "./store.js";
|
|
1
|
+
import { SummerStoreError, readStoreJson, readStoreText, removeStoreFile, writeStoreJson, writeStoreText, } from "./store.js";
|
|
2
2
|
export { getSummerDir } from "./store.js";
|
|
3
3
|
const AUTH_TOKEN_FILE = "auth-token";
|
|
4
|
-
|
|
4
|
+
/** Written by v2 `summer login` for the removed Summer Cloud sync. Only ever removed now (logout). */
|
|
5
|
+
const LEGACY_CLOUD_TOKEN_FILE = "cloud-token";
|
|
5
6
|
const CREATOR_TOKEN_FILE = "creator-token";
|
|
6
7
|
const USER_FILE = "user.json";
|
|
7
8
|
const METADATA_FILE = "credential-metadata.json";
|
|
@@ -45,13 +46,29 @@ function decodeJwtPayload(token) {
|
|
|
45
46
|
}
|
|
46
47
|
return {};
|
|
47
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* credential-metadata.json is ADVISORY: everything in it is re-derivable from
|
|
51
|
+
* the JWT (see getCredentialMetadata's fallback), so unparseable contents are
|
|
52
|
+
* treated as an empty document and rewritten on the next save. It must never
|
|
53
|
+
* strand a valid token behind an "Already logged in" that cannot be used.
|
|
54
|
+
* Unsafe files (symlink/directory) and unreadable stores still fail: those are
|
|
55
|
+
* the store's security contract, not a stale-content problem.
|
|
56
|
+
*/
|
|
48
57
|
async function readMetadata() {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
try {
|
|
59
|
+
return ((await readStoreJson(METADATA_FILE)) ?? {
|
|
60
|
+
schemaVersion: 1,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof SummerStoreError && error.code === "invalid_store_json") {
|
|
65
|
+
return { schemaVersion: 1 };
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
52
69
|
}
|
|
53
|
-
async function updateMetadata(kind, value) {
|
|
54
|
-
|
|
70
|
+
async function updateMetadata(kind, value, current) {
|
|
71
|
+
current ??= await readMetadata();
|
|
55
72
|
const next = {
|
|
56
73
|
...current,
|
|
57
74
|
schemaVersion: 1,
|
|
@@ -59,33 +76,42 @@ async function updateMetadata(kind, value) {
|
|
|
59
76
|
};
|
|
60
77
|
if (!next.auth)
|
|
61
78
|
delete next.auth;
|
|
62
|
-
if (!next.cloud)
|
|
63
|
-
delete next.cloud;
|
|
64
79
|
if (!next.creator)
|
|
65
80
|
delete next.creator;
|
|
66
81
|
await writeStoreJson(METADATA_FILE, next);
|
|
67
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Gateway credential. SUMMER_TOKEN wins over ~/.summer/auth-token so a
|
|
85
|
+
* headless/cloud agent can authenticate gateway features (asset search,
|
|
86
|
+
* generation, releases) without a browser login. The env override never
|
|
87
|
+
* touches the store: `summer login` still writes the file, and the desktop
|
|
88
|
+
* engine keeps reading it. Local engine ops need neither — they authenticate
|
|
89
|
+
* with the engine-minted ~/.summer/api-token (see core/engine.ts).
|
|
90
|
+
*/
|
|
68
91
|
export async function getAuthToken() {
|
|
92
|
+
if (hasEnvAuthToken())
|
|
93
|
+
return process.env.SUMMER_TOKEN.trim();
|
|
69
94
|
const token = await readStoreText(AUTH_TOKEN_FILE);
|
|
70
95
|
return token?.trim() || null;
|
|
71
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* True when SUMMER_TOKEN (env) is the credential in effect. `summer logout`
|
|
99
|
+
* only clears the store, so status/logout must say the env token still
|
|
100
|
+
* applies rather than reporting the stored identity as the active one.
|
|
101
|
+
*/
|
|
102
|
+
export function hasEnvAuthToken() {
|
|
103
|
+
return Boolean(process.env.SUMMER_TOKEN?.trim());
|
|
104
|
+
}
|
|
72
105
|
export async function saveAuthToken(token, scopes = []) {
|
|
73
106
|
const clean = token.trim();
|
|
74
107
|
if (!clean)
|
|
75
108
|
throw new Error("Cannot save an empty auth token.");
|
|
109
|
+
// Read (and so validate) the metadata document BEFORE the token goes live:
|
|
110
|
+
// a metadata file the store refuses must fail the login while nothing has
|
|
111
|
+
// been written, not after auth-token already exists.
|
|
112
|
+
const metadata = await readMetadata();
|
|
76
113
|
await writeStoreText(AUTH_TOKEN_FILE, `${clean}\n`);
|
|
77
|
-
await updateMetadata("auth", decodeJwtMetadata(clean, scopes));
|
|
78
|
-
}
|
|
79
|
-
export async function getCloudToken() {
|
|
80
|
-
const token = await readStoreText(CLOUD_TOKEN_FILE);
|
|
81
|
-
return token?.trim() || null;
|
|
82
|
-
}
|
|
83
|
-
export async function saveCloudToken(token, scopes = []) {
|
|
84
|
-
const clean = token.trim();
|
|
85
|
-
if (!clean)
|
|
86
|
-
throw new Error("Cannot save an empty cloud token.");
|
|
87
|
-
await writeStoreText(CLOUD_TOKEN_FILE, `${clean}\n`);
|
|
88
|
-
await updateMetadata("cloud", decodeJwtMetadata(clean, scopes));
|
|
114
|
+
await updateMetadata("auth", decodeJwtMetadata(clean, scopes), metadata);
|
|
89
115
|
}
|
|
90
116
|
/**
|
|
91
117
|
* Summercraft creator tokens are a separate credential audience from the
|
|
@@ -132,29 +158,25 @@ export async function saveLoginSession(session) {
|
|
|
132
158
|
// Keep auth-token and user.json canonical: the desktop engine already reads
|
|
133
159
|
// those exact files. credential-metadata.json adds audience/scope information
|
|
134
160
|
// without changing or duplicating the secret.
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
161
|
+
// Write order: user.json, then auth-token, then the advisory metadata. The
|
|
162
|
+
// desktop engine cross-checks token.sub against user.json's id
|
|
163
|
+
// (summerengine auth_manager.cpp, inspect_cli_bootstrap_credential), so a
|
|
164
|
+
// write interrupted between the first two files fails closed instead of
|
|
165
|
+
// adopting a mismatched identity. The metadata write is last and is NOT a
|
|
166
|
+
// gate: the token is already live by then, and its contents are re-derived
|
|
167
|
+
// from the JWT whenever the file is missing or unparseable.
|
|
168
|
+
await saveUserInfo(session.user);
|
|
143
169
|
await saveAuthToken(session.token, session.scopes);
|
|
144
170
|
}
|
|
145
171
|
export async function getCredentialMetadata() {
|
|
146
172
|
const metadata = await readMetadata();
|
|
147
173
|
const token = await getAuthToken();
|
|
148
|
-
const cloudToken = await getCloudToken();
|
|
149
174
|
const creatorToken = await getCreatorToken();
|
|
150
175
|
return {
|
|
151
176
|
schemaVersion: 1,
|
|
152
177
|
...(token
|
|
153
178
|
? { auth: metadata.auth ?? decodeJwtMetadata(token) }
|
|
154
179
|
: {}),
|
|
155
|
-
...(cloudToken
|
|
156
|
-
? { cloud: metadata.cloud ?? decodeJwtMetadata(cloudToken) }
|
|
157
|
-
: {}),
|
|
158
180
|
...(creatorToken
|
|
159
181
|
? {
|
|
160
182
|
creator: metadata.creator ?? {
|
|
@@ -170,7 +192,7 @@ export async function clearAuthCredentials() {
|
|
|
170
192
|
let removed = 0;
|
|
171
193
|
for (const file of [
|
|
172
194
|
AUTH_TOKEN_FILE,
|
|
173
|
-
|
|
195
|
+
LEGACY_CLOUD_TOKEN_FILE,
|
|
174
196
|
CREATOR_TOKEN_FILE,
|
|
175
197
|
USER_FILE,
|
|
176
198
|
METADATA_FILE,
|
|
@@ -180,9 +202,3 @@ export async function clearAuthCredentials() {
|
|
|
180
202
|
}
|
|
181
203
|
return removed;
|
|
182
204
|
}
|
|
183
|
-
export function assertCredentialScopes(metadata, requiredScopes) {
|
|
184
|
-
const missing = requiredScopes.filter((scope) => !metadata?.scopes.includes(scope));
|
|
185
|
-
if (missing.length === 0)
|
|
186
|
-
return;
|
|
187
|
-
throw new Error(`This sign-in does not grant ${missing.join(", ")}. Recovery: run "summer login --force" after the platform enables scoped creator tokens, then retry.`);
|
|
188
|
-
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The agent playbook — a product surface, not boilerplate. Structured on the
|
|
3
|
+
* observe-first / verify-always skeleton that measurably steers agents:
|
|
4
|
+
* observe-first step 0, screenshot before AND after every mutation batch,
|
|
5
|
+
* priority-ordered content routing with scripting as the explicit last
|
|
6
|
+
* resort, per-route anti-patterns, physical invariants, cost rules, and a
|
|
7
|
+
* closing verification ritual.
|
|
8
|
+
*
|
|
9
|
+
* ONE implementation for every surface (CONTRACT §2): the MCP
|
|
10
|
+
* summer_get_agent_playbook tool and summer_agent_playbook prompt
|
|
11
|
+
* (src/mcp/tools/project-tools.ts) and `summer tool get-agent-playbook`
|
|
12
|
+
* (tool-dispatch.ts) all render this. Surface-owned extras — the MCP boot
|
|
13
|
+
* drift notice — are passed in, never imported: core does not know mcp.
|
|
14
|
+
*/
|
|
15
|
+
export interface AgentPlaybookOptions {
|
|
16
|
+
/** The MCP layer's cached "Summer update available" notice, if any. */
|
|
17
|
+
summerUpdateNotice?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare function buildAgentPlaybook(options?: AgentPlaybookOptions): Record<string, unknown>;
|
|
20
|
+
export declare function renderAgentPlaybook(options?: AgentPlaybookOptions): string;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
export function buildAgentPlaybook(options = {}) {
|
|
2
|
+
return {
|
|
3
|
+
summerUpdateNotice: options.summerUpdateNotice ?? null,
|
|
4
|
+
// ------------------------------------------------------------------
|
|
5
|
+
// STEP 0 — OBSERVE FIRST. Before anything else, every session, and
|
|
6
|
+
// before EVERY mutation batch.
|
|
7
|
+
// ------------------------------------------------------------------
|
|
8
|
+
step0_observeFirst: [
|
|
9
|
+
"Before anything, call summer_get_project_context — it returns project/scene paths, .summer memory, and BINDS this session to the open project (see projectBinding). Never guess scene filenames.",
|
|
10
|
+
"Then read the scene. IF the engine advertises GetWorldSnapshot (summer_get_project_context returns no capabilitySkewWarning naming it — and the build is new enough to have summer_world_snapshot at all): call summer_world_snapshot and keep its snapshot_id — a compact structured read of the whole scene (paths, classes, transforms, world AABBs, counts, resource fingerprints); run it BEFORE and AFTER every mutation batch and diff the two with summer_snapshot_diff. OTHERWISE (older engine, or the tool returns failure_reason engine_lacks_op / an unknown-op error): use summer_get_scene_tree with scenePath for structure and summer_inspect_node for transforms, and verify with summer_screenshot — do not keep retrying summer_world_snapshot.",
|
|
11
|
+
"Use projectMemory from summer_get_project_context to decide which .summer Markdown files to read before creative/audio/dialogue/level/character work. Never change priority: locked memory without explicit user confirmation.",
|
|
12
|
+
"Understand the request and outline a brief plan before reaching for mutating tools.",
|
|
13
|
+
],
|
|
14
|
+
// ------------------------------------------------------------------
|
|
15
|
+
// VISUAL VERIFICATION — pixels are the second signal.
|
|
16
|
+
// ------------------------------------------------------------------
|
|
17
|
+
visualVerification: [
|
|
18
|
+
"Use summer_screenshot BEFORE making changes to see the current state, and AFTER every mutation batch or asset import to verify the result. Two signals, two jobs: summer_snapshot_diff proves exact structural facts; the screenshot proves appearance. Run both.",
|
|
19
|
+
"For lighting, mood, environment, or emissive materials, use summer_screenshot target:'scene' framing:'camera' — it renders through the scene's OWN camera with its REAL WorldEnvironment. The preset framings (iso/top/...) substitute a flat preview environment and CANNOT verify lighting.",
|
|
20
|
+
"When executing multiple batches, screenshot between them — catch the wrong turn at batch 2, not batch 7.",
|
|
21
|
+
"If something looks wrong in the screenshot or the diff, investigate and fix before proceeding. Do not stack more work on a broken base.",
|
|
22
|
+
],
|
|
23
|
+
// ------------------------------------------------------------------
|
|
24
|
+
// LIBRARY FEEDBACK — report how the library entries you used worked out.
|
|
25
|
+
// ------------------------------------------------------------------
|
|
26
|
+
libraryFeedback: [
|
|
27
|
+
"At a natural checkpoint, call summer_library_feedback once with every skill/example/reference you loaded: outcome 'worked' only after in-engine verification (diff + screenshot), 'worked_with_fixes' with the deviation, 'wrong'/'outdated'/'incomplete' when the entry misled you.",
|
|
28
|
+
"Fire-and-forget and privacy-bounded (entry IDs + outcome enums + short notes about the ENTRY, never the project). Honors SUMMER_NO_TELEMETRY=1 / DO_NOT_TRACK=1.",
|
|
29
|
+
],
|
|
30
|
+
// ------------------------------------------------------------------
|
|
31
|
+
// CONTENT ROUTING — priority-ordered. Scripting geometry by hand is
|
|
32
|
+
// the LAST resort, not the default.
|
|
33
|
+
// ------------------------------------------------------------------
|
|
34
|
+
contentRouting: {
|
|
35
|
+
priorityOrder: [
|
|
36
|
+
"1_reuseProjectAssets",
|
|
37
|
+
"2_assetLibraryImport",
|
|
38
|
+
"3_generation",
|
|
39
|
+
"4_scripting_LAST_RESORT",
|
|
40
|
+
],
|
|
41
|
+
"1_reuseProjectAssets": {
|
|
42
|
+
when: "Always check first. The project may already contain the model/texture/audio you need — or an instance you can duplicate.",
|
|
43
|
+
how: "summer_world_snapshot counts + scene_file entries show what is already instanced; the fs-tree/read tools and summer_list_my_assets show what is already imported or previously generated.",
|
|
44
|
+
antiPatterns: [
|
|
45
|
+
"Regenerating an asset the project already has — duplicate the existing instance instead (a summer_run_script loop can clone and re-place it in one call).",
|
|
46
|
+
],
|
|
47
|
+
fallBackWhen: "Nothing suitable exists in the project.",
|
|
48
|
+
},
|
|
49
|
+
"2_assetLibraryImport": {
|
|
50
|
+
when: "Any recognizable object: props, furniture, vehicles, characters, vegetation, buildings. ESPECIALLY organic shapes — imported meshes beat hand-scripted geometry by miles.",
|
|
51
|
+
how: "summer_search_assets (source: library | my_assets | all) -> summer_import_asset or summer_import_asset_by_id -> instance it. When instancing an imported .glb, pass target_size to summer_instantiate_scene (chair 1.0, door 2.0, car 4.5, person 1.7) so the asset lands at a plausible physical size; the receipt reports dimensions + scale_applied.",
|
|
52
|
+
antiPatterns: [
|
|
53
|
+
"Importing without a target_size and eyeballing scale from a screenshot — commit to real-world size, then verify AABBs.",
|
|
54
|
+
"Importing one asset per prop when a handful of kit pieces can be duplicated and recombined.",
|
|
55
|
+
],
|
|
56
|
+
fallBackWhen: "No suitable asset in the library, or the user wants something the search cannot match.",
|
|
57
|
+
},
|
|
58
|
+
"3_generation": {
|
|
59
|
+
when: "A custom or unique SINGLE item no library has (summer_generate_3d / summer_generate_image / summer_generate_audio). Generation is metered — respect the session's asset policy and ask before paid generation when unsure.",
|
|
60
|
+
how: "Generate -> summer_check_job until the state is TERMINAL (never proceed on a pending job) -> summer_get_asset -> summer_import_asset_by_id -> instance with target_size -> CHECK the world AABB and adjust position/rotation.",
|
|
61
|
+
antiPatterns: [
|
|
62
|
+
"Never generate the whole scene in one shot — generation is for single items; composition happens in the scene.",
|
|
63
|
+
"Do not generate ground/terrain — script a plane/heightfield or import a kit.",
|
|
64
|
+
"Do not generate parts of one object separately and try to assemble them afterwards.",
|
|
65
|
+
],
|
|
66
|
+
fallBackWhen: "Generation is unavailable/denied by policy, fails, or the item is a simple primitive.",
|
|
67
|
+
},
|
|
68
|
+
"4_scripting_LAST_RESORT": {
|
|
69
|
+
when: [
|
|
70
|
+
"A simple primitive or blockout is explicitly wanted (boxes, floors, CSG shapes).",
|
|
71
|
+
"No suitable asset exists in the project or library and generation is unavailable, failed, or not worth the cost.",
|
|
72
|
+
"The task is inherently procedural: scattering/duplicating EXISTING assets, grids, GridMap fills, lighting rigs, cameras, environment setup, basic materials/colors.",
|
|
73
|
+
],
|
|
74
|
+
how: "summer_run_script (the scene-scripting skill has the recipes and the ctx helper API). Placement math, duplication loops, and rigs are scripting's home turf — hand-modeling detailed geometry is not.",
|
|
75
|
+
antiPatterns: [
|
|
76
|
+
"Never generate the whole scene in one script — build in small verified batches: script -> diff -> screenshot -> next.",
|
|
77
|
+
"Don't hand-model organic shapes (characters, creatures, trees, rocks) with SurfaceTool/CSG — import them (route 2).",
|
|
78
|
+
"Don't fake lighting with emissive materials when a light rig is wanted.",
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
// ------------------------------------------------------------------
|
|
83
|
+
// PHYSICAL INVARIANTS — hold after EVERY placement/import.
|
|
84
|
+
// ------------------------------------------------------------------
|
|
85
|
+
physicalInvariants: [
|
|
86
|
+
"ALWAYS check world AABBs (summer_world_snapshot per-node aabb) after placing or importing: objects that should not clip must not clip, nothing floats above the ground it should rest on, nothing is buried in it.",
|
|
87
|
+
"Spatial relationships must be plausible: a lamp ON the desk, a chair AT the table, wheels TOUCHING the road. Verify with AABBs (facts) plus a screenshot (appearance) — not either alone.",
|
|
88
|
+
"Commit to real-world scale at import time (target_size), then verify: a door around 2 units, a person around 1.7. If the AABB says 40, the import scale is wrong — fix it before composing around it.",
|
|
89
|
+
],
|
|
90
|
+
// ------------------------------------------------------------------
|
|
91
|
+
// COST RULES.
|
|
92
|
+
// ------------------------------------------------------------------
|
|
93
|
+
costRules: [
|
|
94
|
+
"Duplicate is cheaper than regenerate: reuse previously generated/imported assets by duplicating nodes in a script — never re-run a paid generation for the same item.",
|
|
95
|
+
"Generation is metered; import and reuse are not. Exhaust routes 1-2 before route 3, and batch what you can.",
|
|
96
|
+
"Engine calls are cheap; YOUR context is not: prefer summer_world_snapshot + summer_snapshot_diff (compact, capped, fingerprinted) over repeated full-tree dumps.",
|
|
97
|
+
],
|
|
98
|
+
// ------------------------------------------------------------------
|
|
99
|
+
// Verification ladder (climb only as high as the change demands).
|
|
100
|
+
// ------------------------------------------------------------------
|
|
101
|
+
verificationLadder: {
|
|
102
|
+
"1_compiles": [
|
|
103
|
+
"After writing/editing a .gd file, call summer_get_script_errors <path> — compiles without running the game.",
|
|
104
|
+
"For a project-wide sweep of editor + runtime issues, call summer_get_diagnostics (it tells you whether to then read summer_get_console / summer_get_debugger_errors).",
|
|
105
|
+
],
|
|
106
|
+
"2_looks_right": [
|
|
107
|
+
"Structured: summer_snapshot_diff against your pre-mutation snapshot_id — exactly what was added/removed/changed, and nothing else.",
|
|
108
|
+
"To SEE the result, call summer_screenshot. Pick the target deliberately:",
|
|
109
|
+
" target:'viewport' (default) = the editor's CURRENT open tab, exactly as it looks now. Edit-time check. No game boot.",
|
|
110
|
+
" target:'scene' = an OFFSCREEN render of a scene FILE (pass scenePath). No game boot; physics/particles/animations are STATIC at t=0. Best for 'is the composition/scale right' without disturbing the open tab. It confesses if the scene has no Camera3D or no light — READ those warnings.",
|
|
111
|
+
" target:'scene' framing:'camera' = through the scene's OWN camera with the REAL environment — the trustworthy edit-time lighting/mood check.",
|
|
112
|
+
" target:'game' = a frame from the RUNNING game (real runtime state). summer_play FIRST. Over a plain local HTTP connection this returns an honest failure (needs the Summer desktop bridge); when it fails, fall back to viewport/scene or ask the user.",
|
|
113
|
+
],
|
|
114
|
+
"3_runs": [
|
|
115
|
+
"Compose the run-and-check yourself — there is no single 'verify' tool:",
|
|
116
|
+
"summer_play [scene] -> boot the game (or a specific scene)",
|
|
117
|
+
"summer_get_debugger_errors -> runtime errors (null refs, missing nodes, physics)",
|
|
118
|
+
"summer_get_runtime_tree / summer_inspect_runtime_node -> LIVE runtime structure and node state (spawned enemies, autoloads, actual stats) without stopping the game",
|
|
119
|
+
"summer_game_probe / summer_game_control / summer_game_input / summer_runtime_set|call|spawn|animate -> runtime-control engine builds only (engine_lacks_op otherwise): probe ONE frame (state + pixels, frame-stamped), pause/step exact frames, script or record/replay input, set/call/spawn/animate live nodes. The agent-playtesting skill is the loop: summer_play (seed/fixed_fps; instance + mode:'offscreen' for a parallel instance) -> probe -> act -> step/probe -> assert. Never claim motion without a probe of the frame after.",
|
|
120
|
+
"summer_screenshot target:'game' -> optional visual of the live frame",
|
|
121
|
+
"summer_stop -> stop when runtime verification is finished; editor scene mutations are not categorically blocked by a running game, but an existing game instance may need a restart to observe them",
|
|
122
|
+
],
|
|
123
|
+
"4_interactive": [
|
|
124
|
+
"To prove input-driven behavior (does jump/move/shoot actually work), prefer RunVerification — a scripted, repeatable probe. SimulateInput is also reachable as a single op against the RUNNING game (see rawOpsViaBatch); do NOT hand this rung to the user while either route works.",
|
|
125
|
+
"On a runtime-control engine build, summer_game_input action:'script' drives the LIVE game with timed events ({at_frame, type:'action'|'key'|'mouse_click'|'axis'|'raw', ...}); record_start/record_stop capture real input and replay plays it back (seed only on a deterministic offscreen instance). One script in flight per instance (busy). Pair every script with summer_game_probe before and after, or summer_game_control action:'step' for the exact frame.",
|
|
126
|
+
"RunVerification: spawn a hidden, disposable game instance that runs a GDScript probe (press inputs, read state, save frames) and dies — never touches the user's editor. Returns results.json + frames. Send it as a raw op through summer_batch (see rawOpsViaBatch).",
|
|
127
|
+
"Unlike the editor's own --headless mode, the verify instance renders REAL PIXELS, so save_frame('name') writes a real image and Performance.TIME_FPS reports a real number. save_frame REQUIRES a name argument — save_frame() with no args is a script error (probe fails).",
|
|
128
|
+
"Mount probe scenes DEFERRED: get_tree().root.add_child.call_deferred(instance); await get_tree().process_frame; await settle(). A direct add_child during _ready can hit the parent-busy guard and 'succeed' while capturing a black frame.",
|
|
129
|
+
"press()/key() are COROUTINES — 'await press(\"move_right\", 500)' or the hold never elapses and the input does nothing.",
|
|
130
|
+
"Assert on physics-frame-derived state (positions after N 'await get_tree().physics_frame'), which is reproducible. press(hold_ms) waits on wall clock, so distance-travelled jitters run to run — assert 'moved more than X', never an exact value.",
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
// HONESTY — mirror the in-product agent's vision rules. A capture is
|
|
134
|
+
// a fact, not a formality; a failed capture is itself a result.
|
|
135
|
+
honestyRules: [
|
|
136
|
+
"NEVER describe an image you did not actually receive. If summer_screenshot returned isError or a text-only fallback (no image block), say the capture failed and why — do not invent what the frame 'probably' shows.",
|
|
137
|
+
"A failed or blocked capture is a RESULT, not a dead end: report it, then climb down the ladder (scene->viewport) or ask the user for a screenshot.",
|
|
138
|
+
"Describe only what is actually in the returned frame. Do not pad with expected content.",
|
|
139
|
+
"target:'scene' with preset framings is STATIC (t=0), uses a synthetic camera and a FLAT environment — do not claim animation/particles/lighting/mood from it; framing:'camera' is the honest lighting view. Heed the no-camera / no-light / synthetic-camera warnings.",
|
|
140
|
+
"Claim only what a diff or frame proved: 'the snapshot diff shows 40 trees added and the screenshot shows them on the terrain' — not 'the forest looks great' from imagination.",
|
|
141
|
+
"Pass structured engine failures (failure_reason, terminalState, errorClass) through to the user verbatim — never soften 'unsupported' or 'bridge_required' into a vague 'it didn't work'.",
|
|
142
|
+
],
|
|
143
|
+
// The session is pinned to the project open when you first called
|
|
144
|
+
// summer_get_project_context. This keeps a mutation from landing in
|
|
145
|
+
// the WRONG project after an in-place project switch.
|
|
146
|
+
projectBinding: [
|
|
147
|
+
"summer_get_project_context binds this session to the currently-open project and is the deliberate (re)bind point.",
|
|
148
|
+
"If the engine later switches projects in place, mutating ops are REJECTED with identity_mismatch (nothing is applied — your edit did NOT land in the wrong project).",
|
|
149
|
+
"summer_screenshot adds a projectMismatch WARNING when the engine's live project no longer matches this binding — the frame may be from the wrong project; do not trust it until you rebind.",
|
|
150
|
+
"To intentionally follow the switch, call summer_get_project_context again to rebind, then retry.",
|
|
151
|
+
"summer_get_project_context also surfaces a capabilitySkewWarning when the engine build and this CLI have drifted apart — non-fatal; tools whose op the engine provably lacks return a structured engine_lacks_op result (nothing is sent) naming the fallback.",
|
|
152
|
+
],
|
|
153
|
+
safeDefaults: [
|
|
154
|
+
"Never guess scene filenames (main.tscn/Main.tscn) -- get them from summer_get_project_context.",
|
|
155
|
+
"Use summer_replace_text for existing project text and summer_write_file with create_only:true for new files; overwrites require the sha256 from summer_read_file.",
|
|
156
|
+
"For live scene hierarchy and inspector changes, prefer scene tools. Guarded text writes support .tscn/.tres, and the engine schedules editor reloads after they land.",
|
|
157
|
+
"Write GDScript by default; use C# only if the project already uses it.",
|
|
158
|
+
"Never remove multiple top-level nodes unless the user explicitly requests destructive edits.",
|
|
159
|
+
"Never change priority: locked .summer memory, voice IDs, canon, or provider bindings without explicit user confirmation.",
|
|
160
|
+
],
|
|
161
|
+
liveEngineFlow: [
|
|
162
|
+
"Use this flow when you genuinely need live engine state (navmesh/light bake, scene mutation, runtime inspect):",
|
|
163
|
+
"summer_get_project_context",
|
|
164
|
+
"Choose the exact res:// scenePath. OpenScene is a user-visible tab action, not a mutation prerequisite.",
|
|
165
|
+
"summer_world_snapshot (keep the snapshot_id) — or summer_get_scene_tree with scenePath for the hierarchy view.",
|
|
166
|
+
"summer_add_node / summer_set_prop / summer_set_resource_property with scenePath — or one summer_run_script for anything computed.",
|
|
167
|
+
"Mutation tools append one final SaveScene; use summer_save_scene only for a standalone save/save-as.",
|
|
168
|
+
"summer_snapshot_diff from_id:<the id> + summer_screenshot — then summer_get_diagnostics.",
|
|
169
|
+
],
|
|
170
|
+
// summer_batch forwards each {op, ...} verbatim to the engine, so
|
|
171
|
+
// engine ops that have no dedicated tool are still reachable.
|
|
172
|
+
rawOpsViaBatch: [
|
|
173
|
+
"summer_batch runs an array of raw engine ops in one undo group; each op is passed through untouched, so newer engine ops with no dedicated tool are still callable.",
|
|
174
|
+
"RunVerification (hidden probe instance): summer_batch ops:[{op:'RunVerification', probe_source:'<gdscript>', max_seconds:20}]. probe_source extends SummerProbeBase and uses report(name, value)/save_frame(name)/press(action)/key(keycode)/finish(); returns {ok, results, frames, out_dir} or {ok:false, failure_reason: spawn_failed|timeout|bad_args|no_project|probe_not_node}. save_frame REQUIRES a name argument.",
|
|
175
|
+
"SimulateInput (drive the RUNNING game — summer_play first): summer_batch ops:[{op:'SimulateInput', type:'action', action:'jump', pressed:true}], sent ALONE as the only op. failure_reason 'not_running' = start the game first; 'unsupported' = the running game build predates the handler — use RunVerification instead.",
|
|
176
|
+
"SINGLE-OP CONTRACT: the engine rejects any multi-op batch containing SaveScene, InstantiateScene, ReplaceNode, SimulateInput, ViewportSnapshot, GameSnapshot, GetRuntimeSceneTree, GetRuntimeNode, the runtime-control ops (SetRuntimeProp, CallRuntimeMethod, SpawnRuntimeScene, FreeRuntimeNode, RuntimeAnimation, RuntimeAnimationTree, GetRuntimeBones, GamePause, GameStep, GameSpeed, SimulateInputScript, InputRecordStart, InputRecordStop, InputReplay, GameProbe), Run*/Import* or Git* ops (failure_reason 'unsupported_transport', nothing executes). summer_batch splits these into sequential requests for you; when composing raw batches keep them as their own call anyway.",
|
|
177
|
+
"WriteFile and ReplaceText are rejected here by design — use summer_write_file / summer_replace_text so project identity, content guards and same-file ordering are enforced.",
|
|
178
|
+
"You do not need an engine op to run a shell command: your own host already has a shell. The engine binary that runs project scripts is at OS.get_executable_path() (on macOS, /Applications/Summer.app/Contents/MacOS/Summer); see the summer-cli headless-scripting skill.",
|
|
179
|
+
"These are runtime ops, not scene mutations — the batch undo group is a harmless no-op for them.",
|
|
180
|
+
],
|
|
181
|
+
// Scene scripting: when one GDScript beats a chain of CRUD ops.
|
|
182
|
+
scripting: [
|
|
183
|
+
"Single property tweak -> summer_set_prop. Composition or ANY computed placement (3+ related ops, scatter/grids/rings, procedural meshes, bulk edits) -> summer_run_script: one GDScript `func run(ctx):` executed in the LIVE editor against the OPEN scene, with ctx.get_scene_root() / ctx.report(key, value) / print capture.",
|
|
184
|
+
"OWNERSHIP in scripts: call ctx.set_owner_recursive(node) AFTER add_child on every created subtree (manual form: node.owner = root on the node AND each descendant), or the nodes silently vanish on save. The ctx creation helpers (ctx.add_node, ctx.add_mesh, ctx.instance_scene, ...) set the owner for you — prefer them.",
|
|
185
|
+
"Cold batch/project-wide jobs (re-save every scene, resource sweeps, long bakes) -> summer_run_editor_script: a fresh HEADLESS child editor against the ON-DISK project. Unsaved live edits are invisible to it; it has no renderer, so it can never screenshot.",
|
|
186
|
+
"Property/method/signal lookup -> summer_api_docs (offline class reference, stamped with the engine technical base it was generated from). Verify names before scripting instead of guessing; entries list declared members only, so walk `inherits` for inherited ones.",
|
|
187
|
+
"The loop: summer_world_snapshot -> summer_run_script -> summer_snapshot_diff + summer_screenshot -> iterate. The scene-scripting skill carries the recipes (scatter, SurfaceTool, CSG, GridMap, lighting rigs) and the ctx helper API; the verifying-scenes skill carries the perception discipline.",
|
|
188
|
+
],
|
|
189
|
+
recovery: [
|
|
190
|
+
"If a scene mutation reports missing_scene_path: pass the exact res:// scenePath and retry.",
|
|
191
|
+
"If a scene target cannot load: repair the named missing/invalid dependency, then retry the same scenePath.",
|
|
192
|
+
"If open_scene fails: re-check mainScene from summer_get_project_context.",
|
|
193
|
+
"If save fails: use the returned scenePath/error to repair the exact cause. A running game alone is not a generic scene-mutation blocker.",
|
|
194
|
+
"If a mutation is rejected with identity_mismatch: the engine switched projects — call summer_get_project_context to rebind (only if you meant to follow it), then retry.",
|
|
195
|
+
"If a guarded file mutation is rejected with content mismatch: call summer_read_file again, review the new content, and retry with its new sha256 only if the edit is still valid.",
|
|
196
|
+
"If a tool returns failure_reason engine_lacks_op, or a run op returns 'unsupported' / an unknown-op error: this engine build predates it — the result names the fallback (e.g. summer_run_editor_script for RunSceneScript); otherwise fall back to summer_play + summer_get_debugger_errors. Update Summer Engine to clear the skew.",
|
|
197
|
+
"If summer_snapshot_diff fails with unknown_snapshot: the id expired (engine keeps the last 8 per session) — take a fresh summer_world_snapshot baseline and redo the before/after pair.",
|
|
198
|
+
"If a runtime read fails with game_not_running: start the game with summer_play, then re-run; for edited-scene structure use summer_get_scene_tree instead.",
|
|
199
|
+
"If a script hits its budget ('Summer script budget exceeded'): the engine rolled the undo action back when undo:'action' was in effect (result rolled_back:true) — split the work into smaller scripts and re-run piece by piece; never resubmit the same oversized script.",
|
|
200
|
+
"If any op returns 'unsupported_transport': it was batched with other ops. Resend it as the ONLY op in the request (nothing from the rejected batch was applied).",
|
|
201
|
+
],
|
|
202
|
+
debugging: [
|
|
203
|
+
"Set SUMMER_MCP_DEBUG=1 in the MCP server's environment to log a structured stderr line per tool call (tool, ok, durationMs, terminalState, errorClass, failureReason, retried, boundProjectIdHash). With the flag OFF, only failures are logged. Use it to see exactly which op failed and why.",
|
|
204
|
+
],
|
|
205
|
+
// ------------------------------------------------------------------
|
|
206
|
+
// CLOSING RITUAL — before claiming a task done.
|
|
207
|
+
// ------------------------------------------------------------------
|
|
208
|
+
verificationRitual: [
|
|
209
|
+
"1. summer_snapshot_diff against the snapshot_id you took before the work — the structural receipt: exactly the intended nodes changed, nothing vanished, counts add up.",
|
|
210
|
+
"2. summer_screenshot AFTER completing the task (framing:'camera' when lighting/mood was touched) — and LOOK at it.",
|
|
211
|
+
"3. summer_get_diagnostics — no new errors/warnings.",
|
|
212
|
+
"4. Claim only what steps 1-3 proved, citing them. A claim without its diff/frame/diagnostics is not a verification, it is a hope.",
|
|
213
|
+
],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
export function renderAgentPlaybook(options = {}) {
|
|
217
|
+
return JSON.stringify(buildAgentPlaybook(options), null, 2);
|
|
218
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface ApiDocsProperty {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
default?: string;
|
|
5
|
+
desc?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ApiDocsMethod {
|
|
8
|
+
sig: string;
|
|
9
|
+
desc?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ApiDocsConstant {
|
|
12
|
+
name: string;
|
|
13
|
+
value: string;
|
|
14
|
+
enum?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ApiDocsClass {
|
|
17
|
+
inherits: string | null;
|
|
18
|
+
brief: string;
|
|
19
|
+
properties?: ApiDocsProperty[];
|
|
20
|
+
methods?: ApiDocsMethod[];
|
|
21
|
+
signals?: ApiDocsMethod[];
|
|
22
|
+
constants?: ApiDocsConstant[];
|
|
23
|
+
}
|
|
24
|
+
export interface ApiDocs {
|
|
25
|
+
classes: Record<string, ApiDocsClass>;
|
|
26
|
+
/** Engine technical base the asset was generated from. */
|
|
27
|
+
technical_base?: string;
|
|
28
|
+
}
|
|
29
|
+
/** Test seam: point the loader at a fixture (or a missing path) and drop the
|
|
30
|
+
* cache. Omit the path to restore the shipped bundle. */
|
|
31
|
+
export declare function resetApiDocsForTests(path?: string): void;
|
|
32
|
+
export declare function isApiDocsBundleInstalled(): boolean;
|
|
33
|
+
export declare const API_DOCS_NOT_INSTALLED = "api docs bundle not installed: this summer-engine install has no assets/api-docs.json.gz, so the offline class reference is unavailable. Reinstall or update the summer-engine package (npx summer-engine@latest). Until then, verify property/method names against the engine itself (summer_inspect_node / summer_inspect_resource) instead of guessing.";
|
|
34
|
+
/** Resolve a class (case-insensitive) and optionally a single member across
|
|
35
|
+
* properties/methods/signals/constants. Never throws for a missing bundle. */
|
|
36
|
+
export declare function lookupApiDocs(className: string, member?: string): Record<string, unknown>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline engine class-reference lookup (tool/api-docs). Shared by the MCP
|
|
3
|
+
* tool (summer_api_docs) and the CLI dispatcher (`summer tool api-docs`).
|
|
4
|
+
*
|
|
5
|
+
* Reads assets/api-docs.json.gz — built by a separate step from the engine's
|
|
6
|
+
* class reference and stamped with the technical base it came from. The
|
|
7
|
+
* bundle can be absent from an install; every entry point answers with a
|
|
8
|
+
* structured api_docs_not_installed result instead of throwing.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { resolve } from "node:path";
|
|
12
|
+
import { PACKAGE_ROOT } from "../package-root.js";
|
|
13
|
+
import { gunzipSync } from "node:zlib";
|
|
14
|
+
const DEFAULT_API_DOCS_PATH = resolve(PACKAGE_ROOT, "assets/api-docs.json.gz");
|
|
15
|
+
let apiDocsPath = DEFAULT_API_DOCS_PATH;
|
|
16
|
+
let apiDocsCache = null;
|
|
17
|
+
let apiDocsIndex = null;
|
|
18
|
+
/** Test seam: point the loader at a fixture (or a missing path) and drop the
|
|
19
|
+
* cache. Omit the path to restore the shipped bundle. */
|
|
20
|
+
export function resetApiDocsForTests(path) {
|
|
21
|
+
apiDocsPath = path ?? DEFAULT_API_DOCS_PATH;
|
|
22
|
+
apiDocsCache = null;
|
|
23
|
+
apiDocsIndex = null;
|
|
24
|
+
}
|
|
25
|
+
export function isApiDocsBundleInstalled() {
|
|
26
|
+
return existsSync(apiDocsPath);
|
|
27
|
+
}
|
|
28
|
+
export const API_DOCS_NOT_INSTALLED = "api docs bundle not installed: this summer-engine install has no assets/api-docs.json.gz, so the offline class reference is unavailable. Reinstall or update the summer-engine package (npx summer-engine@latest). Until then, verify property/method names against the engine itself (summer_inspect_node / summer_inspect_resource) instead of guessing.";
|
|
29
|
+
function loadApiDocs() {
|
|
30
|
+
if (!apiDocsCache) {
|
|
31
|
+
apiDocsCache = JSON.parse(gunzipSync(readFileSync(apiDocsPath)).toString("utf8"));
|
|
32
|
+
apiDocsIndex = new Map(Object.keys(apiDocsCache.classes).map((name) => [name.toLowerCase(), name]));
|
|
33
|
+
}
|
|
34
|
+
return apiDocsCache;
|
|
35
|
+
}
|
|
36
|
+
function suggestClasses(query) {
|
|
37
|
+
const docs = loadApiDocs();
|
|
38
|
+
const needle = query.toLowerCase();
|
|
39
|
+
const names = Object.keys(docs.classes);
|
|
40
|
+
const contains = names.filter((name) => name.toLowerCase().includes(needle));
|
|
41
|
+
if (contains.length > 0)
|
|
42
|
+
return contains.slice(0, 10);
|
|
43
|
+
// No substring hit — fall back to shared-prefix closeness so a typo like
|
|
44
|
+
// "BoxShap3D" still lands near "BoxShape3D".
|
|
45
|
+
const prefixLen = (name) => {
|
|
46
|
+
const lower = name.toLowerCase();
|
|
47
|
+
let i = 0;
|
|
48
|
+
while (i < lower.length && i < needle.length && lower[i] === needle[i])
|
|
49
|
+
i++;
|
|
50
|
+
return i;
|
|
51
|
+
};
|
|
52
|
+
return names
|
|
53
|
+
.map((name) => ({ name, score: prefixLen(name) }))
|
|
54
|
+
.filter(({ score }) => score >= 3)
|
|
55
|
+
.sort((a, b) => b.score - a.score)
|
|
56
|
+
.slice(0, 10)
|
|
57
|
+
.map(({ name }) => name);
|
|
58
|
+
}
|
|
59
|
+
/** Resolve a class (case-insensitive) and optionally a single member across
|
|
60
|
+
* properties/methods/signals/constants. Never throws for a missing bundle. */
|
|
61
|
+
export function lookupApiDocs(className, member) {
|
|
62
|
+
if (!isApiDocsBundleInstalled()) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
failure_reason: "api_docs_not_installed",
|
|
66
|
+
error: API_DOCS_NOT_INSTALLED,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const docs = loadApiDocs();
|
|
70
|
+
const canonical = apiDocsIndex.get(className.trim().toLowerCase());
|
|
71
|
+
if (!canonical) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
error: `Unknown class "${className}".`,
|
|
75
|
+
suggestions: suggestClasses(className.trim()),
|
|
76
|
+
hint: "Class names are exact engine class names, e.g. 'BoxShape3D', 'CharacterBody3D'.",
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
// Stamp every successful lookup with the technical base the reference was
|
|
80
|
+
// generated from, so version-sensitive answers name their source.
|
|
81
|
+
const base = docs.technical_base ? { technical_base: docs.technical_base } : {};
|
|
82
|
+
const entry = docs.classes[canonical];
|
|
83
|
+
if (!member) {
|
|
84
|
+
return { ok: true, class: canonical, ...base, ...entry };
|
|
85
|
+
}
|
|
86
|
+
const needle = member.trim().toLowerCase();
|
|
87
|
+
const property = entry.properties?.find((p) => p.name.toLowerCase() === needle);
|
|
88
|
+
const method = entry.methods?.find((m) => m.sig.toLowerCase().startsWith(needle + "("));
|
|
89
|
+
const signal = entry.signals?.find((s) => s.sig.toLowerCase().startsWith(needle + "("));
|
|
90
|
+
const constant = entry.constants?.find((c) => c.name.toLowerCase() === needle);
|
|
91
|
+
if (property || method || signal || constant) {
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
class: canonical,
|
|
95
|
+
...base,
|
|
96
|
+
inherits: entry.inherits,
|
|
97
|
+
...(property ? { property } : {}),
|
|
98
|
+
...(method ? { method } : {}),
|
|
99
|
+
...(signal ? { signal } : {}),
|
|
100
|
+
...(constant ? { constant } : {}),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const memberNames = [
|
|
104
|
+
...(entry.properties ?? []).map((p) => p.name),
|
|
105
|
+
...(entry.methods ?? []).map((m) => m.sig.split("(")[0]),
|
|
106
|
+
...(entry.signals ?? []).map((s) => s.sig.split("(")[0]),
|
|
107
|
+
...(entry.constants ?? []).map((c) => c.name),
|
|
108
|
+
];
|
|
109
|
+
const close = memberNames.filter((name) => name.toLowerCase().includes(needle)).slice(0, 10);
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
error: `Class ${canonical} has no member "${member}".`,
|
|
113
|
+
suggestions: close,
|
|
114
|
+
hint: entry.inherits
|
|
115
|
+
? `Members are not inherited into this entry — also check the parent class ${entry.inherits}.`
|
|
116
|
+
: undefined,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset import into the engine-bound project (Kenney texture pairing + path
|
|
3
|
+
* inference + optional scene placement). ONE copy shared by the MCP asset tools
|
|
4
|
+
* and the CLI dispatch table.
|
|
5
|
+
* See: publicsummerengine/Docs/ASSET_IMPORT_END_TO_END.md
|
|
6
|
+
*/
|
|
7
|
+
import type { EngineApiClient } from "../api-client.js";
|
|
8
|
+
/** An asset record as returned by the Summer gateway asset APIs. */
|
|
9
|
+
export type GatewayAsset = {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
type: string;
|
|
13
|
+
fileUrl: string;
|
|
14
|
+
thumbnailUrl?: string | null;
|
|
15
|
+
pack?: string | null;
|
|
16
|
+
packSlug?: string | null;
|
|
17
|
+
importUrl?: string;
|
|
18
|
+
downloadUrl?: string;
|
|
19
|
+
fileName?: string | null;
|
|
20
|
+
mimeType?: string | null;
|
|
21
|
+
visibility?: string;
|
|
22
|
+
licenseType?: string | null;
|
|
23
|
+
metadata?: Record<string, unknown>;
|
|
24
|
+
};
|
|
25
|
+
export declare function buildKenneyTextureUrl(fileUrl: string): string;
|
|
26
|
+
export declare function textureExists(url: string): Promise<boolean>;
|
|
27
|
+
/** Godot node names reject . : @ / " %; keep letters, digits and underscores. */
|
|
28
|
+
export declare function sanitizeNodeName(name: string): string;
|
|
29
|
+
export interface ImportResolvedAssetArgs {
|
|
30
|
+
asset: GatewayAsset;
|
|
31
|
+
parent?: string;
|
|
32
|
+
scenePath?: string;
|
|
33
|
+
path?: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
}
|
|
36
|
+
/** Import a resolved gateway asset into the project (texture + GLB for Kenney
|
|
37
|
+
* packs) and, for 3D models with a `parent`, instantiate it into `scenePath`
|
|
38
|
+
* and save. Throws with a user-facing message on any engine refusal. */
|
|
39
|
+
export declare function importResolvedAsset(client: EngineApiClient, args: ImportResolvedAssetArgs): Promise<{
|
|
40
|
+
success: boolean;
|
|
41
|
+
assetId: string;
|
|
42
|
+
asset: string;
|
|
43
|
+
type: string;
|
|
44
|
+
importedTo: string;
|
|
45
|
+
addedToScene: boolean;
|
|
46
|
+
parent: string | null;
|
|
47
|
+
scenePath: string | null;
|
|
48
|
+
sceneReceipt: unknown;
|
|
49
|
+
}>;
|