summer-engine 2.8.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +131 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +159 -391
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/{commands → cli/commands}/setup.js +43 -89
- package/dist/{commands → cli/commands}/skills.js +85 -222
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +47 -0
- package/dist/core/skills-registry.js +83 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/{lib → installer}/agent-config.d.ts +20 -1
- package/dist/{lib → installer}/agent-config.js +138 -24
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +146 -0
- package/dist/installer/skill-locations.d.ts +45 -0
- package/dist/installer/skill-locations.js +170 -0
- package/dist/installer/version-check.d.ts +174 -0
- package/dist/{lib → installer}/version-check.js +173 -42
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +70 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/cline/README.md +13 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +16 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/opencode/README.md +15 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +13 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +13 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +22 -16
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-registry.json +851 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/status.js +0 -46
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
- /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
package/commands/gameskill.md
CHANGED
|
@@ -1,112 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Capture what this game-development session taught as a reusable skill (project, user or Summer library) so the next agent starts where you ended.
|
|
3
|
+
allowed-tools: Read Write Edit Glob Grep Bash Skill
|
|
4
|
+
---
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
# /gameskill — capture session learnings
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
Activate the library skill `summer:gameskill` and follow it exactly; this command is only the entry point. If the `Skill` tool cannot find it, read `library/skills/gameskill/SKILL.md` from the Summer package (the plugin root, or `node_modules/summer-engine/`) and follow that file.
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
Ground rules the skill enforces, so you do not drift while it loads:
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
The Summer CLI lives at `tools/summer-cli/` and is normally invoked with
|
|
13
|
-
`npx -y summer-engine@latest`. It installs, signs in, creates, and runs Summer
|
|
14
|
-
projects and can install the current Summer skill bundle for supported
|
|
15
|
-
agents.
|
|
16
|
-
2. **`~/development/PublicSummerEngine`** — the web app at summerengine.com. Has its own AI skill stores at `src/lib/ai/skills/bundled/` and `public/knowledge/summer/skills/` for the in-browser chat agent. ALSO has its own MCP-style consumers of the engine API (`src/lib/bridge/direct-executor.ts`, `src/lib/ai/tools/run-and-verify.ts`) which call the same engine endpoints the CLI does.
|
|
17
|
-
3. **The active Summer game project** — usually
|
|
18
|
-
`~/development/<game-name>` or whatever game we were just working on. The
|
|
19
|
-
live compatibility line comes from Summer Engine, not this prompt. Real
|
|
20
|
-
working code in this repo is the gold standard for examples.
|
|
21
|
-
|
|
22
|
-
The skill system is the value flywheel: every game we ship teaches lessons → the lessons become skills → the next user (or AI) starts smarter. Your job here is to close that loop for what we just did.
|
|
23
|
-
|
|
24
|
-
## Cross-repo change awareness — read this before any non-trivial fix
|
|
25
|
-
|
|
26
|
-
When the lesson is "the engine should expose more / behave differently," the change usually crosses repo boundaries. Map the layers before you edit:
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
[active game] → calls MCP / web app
|
|
30
|
-
↓
|
|
31
|
-
[summer-cli MCP server (TypeScript)] → calls /api/ops + /api/state/* on the engine
|
|
32
|
-
↓
|
|
33
|
-
[Summer Engine binary (C++ in SummerEngine repo)] — source of truth for what the API can return
|
|
34
|
-
|
|
35
|
-
[PublicSummerEngine web app (TypeScript)] → also calls the same engine endpoints via direct-executor or Redis bridge
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Implications:
|
|
39
|
-
|
|
40
|
-
- **A C++ change in `SummerEngine/modules/1summer_engine/` or `SummerEngine/editor/` reaches everyone** (CLI MCP, web app, future tools). Most powerful, also highest blast radius.
|
|
41
|
-
- **A TypeScript change in `tools/summer-cli/src/mcp/`** only changes what the CLI exposes. The web app has its own TypeScript layer in `PublicSummerEngine/src/lib/bridge/` — same engine endpoints, different glue. Don't assume your CLI tool change is web-app-aware.
|
|
42
|
-
- **A skill update in `tools/summer-cli/skills/`** affects every agent that runs `summer skills install`. The web app's skill store is separate (`PublicSummerEngine/src/lib/ai/skills/bundled/`) and currently uses a different format (template wizards, not Markdown discipline guides). Don't try to mirror skills there blindly.
|
|
43
|
-
|
|
44
|
-
When you change an engine endpoint's response shape (add fields, rename fields, change semantics):
|
|
45
|
-
|
|
46
|
-
1. Grep both `tools/summer-cli/src/` and `PublicSummerEngine/src/lib/` for consumers of that endpoint.
|
|
47
|
-
2. Confirm the change is **additive** (new fields, no removed/renamed) so existing consumers still work without modification.
|
|
48
|
-
3. If the change is breaking, update both consumers in the same logical commit set.
|
|
49
|
-
4. Note in TOOLING-TODO.md what's now possible that wasn't before.
|
|
50
|
-
|
|
51
|
-
Engine binary changes ship via a rebuild + new release. The user has to pull the new engine for the change to take effect. CLI/web TypeScript changes ship via npm publish or web deploy. State this delivery cost in your report so the user knows what they're getting today vs after a release.
|
|
52
|
-
|
|
53
|
-
## The four skill stores (probe each before doing anything)
|
|
54
|
-
|
|
55
|
-
1. **Canonical source** — `~/development/SummerEngine/tools/summer-cli/skills/`
|
|
56
|
-
- Single source of truth. Domains: `ui-and-ux`, `gameplay-mechanics`, `character-controllers`, `scripting-patterns`, `visual-effects`, `debugging`, `rendering-and-lighting`, `scene-and-project`, `level-design`, `audio`, `ai-and-npcs`, `asset-pipeline`, `performance`, `deployment`, `multiplayer-and-networking`, plus `workflow` for process skills.
|
|
57
|
-
- The `skills:` array in `.claude-plugin/plugin.json` is the registry. Sibling shared docs live at top-level `references/`; test specs at top-level `tests/`.
|
|
58
|
-
2. **Claude auto-discovery** — `~/.claude/skills/` (currently 7 skills, written here by `summer skills install --as-claude-skill`).
|
|
59
|
-
3. **Web-app stores** — `~/development/PublicSummerEngine/src/lib/ai/skills/` and `public/knowledge/summer/skills/`. Mirror only if the learning applies to the web chat agent too — check what's there before assuming.
|
|
60
|
-
4. **The active game** — read it as ground truth. Working code from the real project beats invented examples.
|
|
61
|
-
|
|
62
|
-
## What to do, in order
|
|
63
|
-
|
|
64
|
-
1. **One short sentence to the user.** "Capturing learnings from this session into the skill library." That's it. No plan dump.
|
|
65
|
-
|
|
66
|
-
2. **Probe the stores.** Glob each path above. Note what exists and what's empty. Print a tight summary (one line per domain with skill count).
|
|
67
|
-
|
|
68
|
-
3. **Recap the session.** Look back over the conversation. Pull out the learnings that are non-obvious AND general — things a future agent or user would benefit from but couldn't derive from reading the codebase. Examples that count:
|
|
69
|
-
- A working shader (the actual code) → `visual-effects`
|
|
70
|
-
- A GDScript idiom that beat the obvious approach → `scripting-patterns`
|
|
71
|
-
- A UI layout that survived the design pass → `ui-and-ux`
|
|
72
|
-
- A bug + root cause + fix that wasn't in any docs → `debugging`
|
|
73
|
-
- A Godot 4.6 quirk (type inference, `.keys()` weirdness, signal gotchas) → `scripting-patterns`
|
|
74
|
-
- A spawning/AI/enemy pattern that worked → `ai-and-npcs` or `gameplay-mechanics`
|
|
75
|
-
- A perf fix with measured before/after → `performance`
|
|
76
|
-
- An asset-creation workflow that beat alternatives → `asset-pipeline`
|
|
77
|
-
|
|
78
|
-
Examples that DON'T count:
|
|
79
|
-
- One-off code with no general lesson
|
|
80
|
-
- Stuff already documented in `CLAUDE.md` or an existing skill
|
|
81
|
-
- Personal preference with no reasoning behind it
|
|
82
|
-
- Anything you have to manufacture to fill space
|
|
83
|
-
|
|
84
|
-
4. **Decide placement.** For each learning:
|
|
85
|
-
- **Update existing skill** — name the file, quote the section, draft the addition.
|
|
86
|
-
- **Create new skill** — pick the domain, name the file, draft the full skill markdown.
|
|
87
|
-
Match the format of existing skills in the same domain exactly. Read one if you're unsure.
|
|
88
|
-
|
|
89
|
-
5. **One tight pause for the user.** Five-to-ten lines max: what files you'll touch, what each one captures, what gets left out. Wait for OK or redirect. Don't ask multiple questions.
|
|
90
|
-
|
|
91
|
-
6. **Apply.**
|
|
92
|
-
- Write/edit `.md` files under `tools/summer-cli/skills/<domain>/`.
|
|
93
|
-
- Register a new skill in `.claude-plugin/plugin.json` (plus `.codex-plugin/`, `.cursor-plugin/`) AND in `src/lib/skills-registry.ts` `SKILL_REGISTRY`. Both are required.
|
|
94
|
-
- If the skill belongs in the curated Claude set, also write it to `~/.claude/skills/<name>/` so it's live in the current session — and tell the user to consider adding it to the CLI's default install set.
|
|
95
|
-
- If the learning applies to the web chat agent, mirror to `PublicSummerEngine` skill stores too.
|
|
96
|
-
- Run `git status` in `~/development/SummerEngine` (and `PublicSummerEngine` if touched) so the diff is visible.
|
|
97
|
-
|
|
98
|
-
7. **Report.** One short message. Files changed, the future-agent payoff in one sentence per skill, and what (if anything) is still uncaptured.
|
|
99
|
-
|
|
100
|
-
## Style rules — non-negotiable
|
|
101
|
-
|
|
102
|
-
- **Tight. No slop. No glazing.** Mathias hates filler.
|
|
103
|
-
- **Capture the why, not just the what.** "Use X" rots. "Use X because Y breaks under Z (we hit this in PRUT chest reveal, 2026-05)" survives. Always lead skill updates with the reason.
|
|
104
|
-
- **Real working code from the active project beats invented examples.** Lift from PRUT or whatever we were in.
|
|
105
|
-
- **VFX is code** — shaders + GDScript + node setup. Never image-generation pipelines or Meshy prompts.
|
|
106
|
-
- **No em dashes** (—) in any user-facing copy you write into skills. Use periods or restructure the sentence.
|
|
107
|
-
- **`[SUMMER]` markers on core Godot engine file edits** — but skill `.md` files don't need them.
|
|
108
|
-
- **Verify before claiming.** If a skill says "Summer Engine does X" or "Stripe is configured Y way", verify in the actual code/DB before writing it down.
|
|
109
|
-
|
|
110
|
-
## When there's nothing worth capturing
|
|
111
|
-
|
|
112
|
-
It's totally fine to come back with "session was tactical, no durable learnings worth a skill update." Don't manufacture skills from thin air. Better to ship nothing into the skill library than ship noise.
|
|
12
|
+
- Default home is the game project's own skills directory for the agent you are in (`.claude/skills/<slug>/`, `.agents/skills/<slug>/`, `.cursor/rules/`). Only inside a checkout of the summer-engine agent repo do you add to `library/skills/<slug>/` (`resource.yaml` + `SKILL.md`, flat slugs); everything in `registry/generated/` and every plugin manifest is generated from it, so run `npm run generate:registry` after editing and never hand-edit those files. From anywhere else, send general lessons through `summer_library_feedback`.
|
|
13
|
+
- Capture only learnings that are non-obvious AND general. Lead with the why. Real working code from the active project beats invented examples. VFX is shader + GDScript + node setup, never an image-generation pipeline.
|
|
14
|
+
- It is fine to report "session was tactical, no durable learnings." Do not manufacture skills.
|
package/commands/summer.md
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Summer Engine game-dev persona and command router. Use for "/summer <anything>" — routes the request to the right Summer skill and starts the game-dev workflow.
|
|
3
|
+
argument-hint: <what you want to build, fix, or ship>
|
|
4
|
+
allowed-tools: Read Glob Grep Edit Write Skill Bash summer_get_project_context summer_get_scene_tree summer_get_diagnostics summer_search_assets summer_create_debug_report
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /summer — Summer Engine persona
|
|
8
|
+
|
|
9
|
+
You are now Summer's in-engine collaborator. The user typed `/summer` because they want game-dev-shaped help inside Summer Engine, not generic software advice. Drop the SaaS-PM voice. You ship games.
|
|
2
10
|
|
|
3
11
|
Arguments:
|
|
4
12
|
|
|
@@ -6,8 +14,68 @@ Arguments:
|
|
|
6
14
|
$ARGUMENTS
|
|
7
15
|
```
|
|
8
16
|
|
|
9
|
-
|
|
17
|
+
## Voice
|
|
18
|
+
|
|
19
|
+
You know the engine cold. Scenes are `.tscn`, resources are `.tres`, scripts are GDScript unless the user said C#. The `summer-engine` MCP server drives the running editor. Read every file in the project freely with Read / Glob / Grep — code, scenes, resources, configs; that is how you understand the project. The one rule: do not hand-edit `.tscn` / `.tres` files with Write / Edit while the editor has that scene open — the editor's in-memory state overwrites you on save. Mutate scenes through `summer_*` MCP tools. Scripts, configs, and any closed scene are fine to edit directly.
|
|
20
|
+
|
|
21
|
+
You are opinionated about scope. When the user describes three features in one sentence, ask which one is the playable demo and defer the other two. "Wouldn't it be cool if" gets "yes, after the core loop runs." Get the core loop into the player's hands by the end of the session, then iterate. Polish happens after the game is playable, not before.
|
|
22
|
+
|
|
23
|
+
You speak game-dev shorthand (PCs, NPCs, juice, hit-stop, root motion, blendspace, navmesh, kinematic vs rigid) and assume the user knows it. You are confident about cost: every generation has a number, and you say the number before spending the user's money.
|
|
24
|
+
|
|
25
|
+
## What to do
|
|
26
|
+
|
|
27
|
+
1. Detect the request shape (new game / new feature / new asset / bug / discussion / build).
|
|
28
|
+
2. Confirm Summer Engine context. Call `summer_get_project_context` if available. If it returns nothing, the user is not in a Summer project yet — route to `summer:brainstorm-game`.
|
|
29
|
+
3. Invoke the right Summer skill with the `Skill` tool. Do not paraphrase the skill; let the specialist run and follow it exactly.
|
|
30
|
+
4. State the estimated cost (dollars and seconds) before any generation call.
|
|
31
|
+
|
|
32
|
+
## Routing
|
|
33
|
+
|
|
34
|
+
Skills are flat slugs under the `summer:` namespace (`summer:<slug>`); there are no category paths.
|
|
35
|
+
|
|
36
|
+
| Request shape | First skill |
|
|
37
|
+
|---|---|
|
|
38
|
+
| brainstorm a [genre] game / let's make a [genre] / I'm stuck / what should I work on | `summer:brainstorm-game` |
|
|
39
|
+
| start a new project | `summer:new-project` |
|
|
40
|
+
| make me a game from scratch | `summer:make-game` |
|
|
41
|
+
| add a [character / enemy / NPC / prop / vehicle] | `summer:asset-strategy` |
|
|
42
|
+
| add a sound for [event] | `summer:sound-effect` |
|
|
43
|
+
| add ambient music | `summer:music-track` |
|
|
44
|
+
| make me fire / smoke / lightning / muzzle flash / magic glow / hit spark / dissolve / water ripple | `summer:vfx-fire`, `summer:vfx-smoke`, `summer:vfx-lightning`, `summer:vfx-muzzle-flash`, `summer:vfx-magic-glow`, `summer:vfx-hit-spark`, `summer:vfx-dissolve`, `summer:vfx-water-ripple` |
|
|
45
|
+
| build the FPS controller | `summer:fps-controller` |
|
|
46
|
+
| debug / the game crashes when [X] / broken behavior / cloud or Codex failure / send this to support | `summer:debug` (support-report mode first: call `summer_create_debug_report` when available and tell the user where the Markdown report was written; keep fixing only if they also asked for a fix) |
|
|
47
|
+
| add an animation to [character] | `summer:generate-motion` |
|
|
48
|
+
| wire up a state machine for [character] | `summer:animation-tree` |
|
|
49
|
+
| the game feels mushy / add juice | `summer:game-feel` |
|
|
50
|
+
| ship a trailer | `summer:trailer-shot` |
|
|
51
|
+
| cutscene for [X] | `summer:cinematic-cutscene` |
|
|
52
|
+
| let me play it | `summer:play` |
|
|
53
|
+
|
|
54
|
+
If nothing fits, activate `summer:using-summer` and call `summer_search_library` (then `summer_read_library`) to find the closest skill. Never invent a skill name; verify it exists first.
|
|
55
|
+
|
|
56
|
+
## Tone rules
|
|
57
|
+
|
|
58
|
+
- No corporate hedging. "I'd recommend" becomes "do this." "It might be worth considering" becomes "next step is."
|
|
59
|
+
- Cost-aware: "Generating with kling. 5s, ~$0.50. OK?" — never "I'll generate a video now."
|
|
60
|
+
- Scope-aware: the cut list goes in `.summer/GameSoul.md`, not in V1.
|
|
61
|
+
- Confirm before destructive moves: replacing nodes, deleting assets, regenerating expensive outputs.
|
|
62
|
+
- Do not redirect users to external docs; solve it in-conversation.
|
|
63
|
+
|
|
64
|
+
## Engine awareness
|
|
65
|
+
|
|
66
|
+
- If any MCP call returns "Summer Engine is not running": tell the user `summer run` (or open the Summer Engine app and load the project). Meanwhile do non-MCP work: read code, plan, draft GDScript. The MCP server reconnects on the next call.
|
|
67
|
+
- If `.summer/GameSoul.md` exists, read it before any creative work. It is the source of truth for art direction, audio direction, and the cut list.
|
|
68
|
+
|
|
69
|
+
## Examples
|
|
10
70
|
|
|
11
|
-
|
|
71
|
+
> User: /summer make a knight
|
|
72
|
+
>
|
|
73
|
+
> Summer: Knight character. asset-strategy first to lock the look (concept image), then character-model for the rigged mesh. ~$0.10 for the concept, ~$0.40 for the 3D pass. OK?
|
|
74
|
+
>
|
|
75
|
+
> [invokes `summer:asset-strategy`]
|
|
12
76
|
|
|
13
|
-
|
|
77
|
+
> User: /summer the game crashes when I pick up the sword
|
|
78
|
+
>
|
|
79
|
+
> Summer: Going to debug. Writing the support report first, then the fix.
|
|
80
|
+
>
|
|
81
|
+
> [invokes `summer:debug`]
|
package/dist/bin/summer.js
CHANGED
|
@@ -1,88 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import { runCommand } from "../commands/run.js";
|
|
9
|
-
import { openCommand } from "../commands/open.js";
|
|
10
|
-
import { installCommand } from "../commands/install.js";
|
|
11
|
-
import { createCommand } from "../commands/create.js";
|
|
12
|
-
import { listCommand } from "../commands/list.js";
|
|
13
|
-
import { memoryCommand } from "../commands/memory.js";
|
|
14
|
-
import { skillsCommand } from "../commands/skills.js";
|
|
15
|
-
import { orchestratorCommand } from "../commands/orchestrator.js";
|
|
16
|
-
import { setupCommand } from "../commands/setup.js";
|
|
17
|
-
import { doctorCommand } from "../commands/doctor.js";
|
|
18
|
-
import { planCommand } from "../commands/plan.js";
|
|
19
|
-
import { cloudCommand } from "../commands/cloud.js";
|
|
20
|
-
import { debugCommand } from "../commands/debug.js";
|
|
21
|
-
import { configCommand } from "../commands/config.js";
|
|
22
|
-
import { publishCommand } from "../commands/publish.js";
|
|
23
|
-
import { releasesCommand } from "../commands/releases.js";
|
|
24
|
-
import { logsCommand } from "../commands/logs.js";
|
|
25
|
-
import { getBanner } from "../lib/banner.js";
|
|
26
|
-
import { c, sym } from "../lib/format.js";
|
|
27
|
-
const require = createRequire(import.meta.url);
|
|
28
|
-
const { version } = require("../../package.json");
|
|
29
|
-
const program = new Command();
|
|
30
|
-
program
|
|
31
|
-
.name("summer")
|
|
32
|
-
.description("CLI and MCP tools for Summer Engine — the AI-native game engine")
|
|
33
|
-
.version(version)
|
|
34
|
-
.action(() => {
|
|
35
|
-
printIntro(version);
|
|
36
|
-
});
|
|
37
|
-
program.addCommand(installCommand);
|
|
38
|
-
program.addCommand(loginCommand);
|
|
39
|
-
program.addCommand(logoutCommand);
|
|
40
|
-
program.addCommand(statusCommand);
|
|
41
|
-
program.addCommand(runCommand);
|
|
42
|
-
program.addCommand(openCommand);
|
|
43
|
-
program.addCommand(createCommand);
|
|
44
|
-
program.addCommand(listCommand);
|
|
45
|
-
program.addCommand(memoryCommand);
|
|
46
|
-
program.addCommand(skillsCommand);
|
|
47
|
-
program.addCommand(mcpCommand);
|
|
48
|
-
program.addCommand(setupCommand);
|
|
49
|
-
program.addCommand(doctorCommand);
|
|
50
|
-
program.addCommand(debugCommand);
|
|
51
|
-
program.addCommand(planCommand);
|
|
52
|
-
program.addCommand(orchestratorCommand);
|
|
53
|
-
program.addCommand(cloudCommand);
|
|
54
|
-
program.addCommand(configCommand);
|
|
55
|
-
program.addCommand(publishCommand);
|
|
56
|
-
program.addCommand(releasesCommand);
|
|
57
|
-
program.addCommand(logsCommand);
|
|
58
|
-
program.parseAsync().catch((err) => {
|
|
59
|
-
console.error(err instanceof Error ? err.message : String(err));
|
|
60
|
-
process.exit(1);
|
|
61
|
-
});
|
|
62
|
-
function printIntro(version) {
|
|
63
|
-
console.log("");
|
|
64
|
-
console.log(getBanner());
|
|
65
|
-
console.log("");
|
|
66
|
-
console.log(` ${sym.arrow()} ${c.bold("Summer Engine")} ${c.dim("v" + version)} ${c.dim("·")} AI-native game engine`);
|
|
67
|
-
console.log("");
|
|
68
|
-
console.log(` ${c.bold("Setup wizard")}`);
|
|
69
|
-
console.log(` Open Claude Code, Cursor, Codex, Copilot, Devin Desktop (formerly Windsurf), or another supported agent and paste:`);
|
|
70
|
-
console.log(` ${c.brand("\"Install Summer Engine and let's make a game.\"")}`);
|
|
71
|
-
console.log("");
|
|
72
|
-
console.log(` ${c.bold("Manual commands")}`);
|
|
73
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest setup claude-code --yes`);
|
|
74
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest create 3d-basic my-game`);
|
|
75
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest plan make a small arena shooter`);
|
|
76
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest debug "player crashes on pickup"`);
|
|
77
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest memory`);
|
|
78
|
-
console.log(` ${c.dim("$")} npx -y summer-engine@latest doctor`);
|
|
79
|
-
console.log("");
|
|
80
|
-
console.log(` ${c.bold("Slash commands")} ${c.dim("(in your AI agent)")}`);
|
|
81
|
-
console.log(` ${c.brand("/summer debug")} ${c.dim("Create a support-ready debug report")}`);
|
|
82
|
-
console.log(` ${c.brand("/debug")} ${c.dim("Triage and fix a bug end-to-end")}`);
|
|
83
|
-
console.log(` ${c.brand("/play")} ${c.dim("Run the game and report state")}`);
|
|
84
|
-
console.log("");
|
|
85
|
-
console.log(` ${c.dim("Docs:")} https://summerengine.com/docs`);
|
|
86
|
-
console.log(` ${c.dim("Source:")} https://github.com/SummerEngine/summer-engine-agent`);
|
|
87
|
-
console.log("");
|
|
88
|
-
}
|
|
2
|
+
// Composition root: the only module allowed to import both the cli and mcp
|
|
3
|
+
// layers. All command wiring lives in src/cli; the MCP server and its
|
|
4
|
+
// `summer mcp` command live in src/mcp.
|
|
5
|
+
import { runCli } from "../cli/index.js";
|
|
6
|
+
import { mcpCommand } from "../mcp/command.js";
|
|
7
|
+
runCli(mcpCommand);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getBanner(version?: string): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function getBanner(version) {
|
|
2
|
+
const reset = "\x1b[0m";
|
|
3
|
+
// Vertical gradient for SUMMER ENGINE
|
|
4
|
+
const colors = [
|
|
5
|
+
"\x1b[38;2;255;223;137m", // row 1
|
|
6
|
+
"\x1b[38;2;255;203;107m", // row 2
|
|
7
|
+
"\x1b[38;2;255;183;78m", // row 3
|
|
8
|
+
"\x1b[38;2;255;163;49m", // row 4
|
|
9
|
+
"\x1b[38;2;255;143;23m", // row 5
|
|
10
|
+
"\x1b[38;2;255;123;0m", // row 6
|
|
11
|
+
"\x1b[38;2;242;104;0m", // row 7
|
|
12
|
+
"\x1b[38;2;229;85;0m", // row 8
|
|
13
|
+
"\x1b[38;2;215;67;0m", // row 9
|
|
14
|
+
"\x1b[38;2;201;50;0m", // row 10
|
|
15
|
+
"\x1b[38;2;187;34;0m", // row 11
|
|
16
|
+
"\x1b[38;2;173;20;0m", // row 12
|
|
17
|
+
];
|
|
18
|
+
const headerLines = [
|
|
19
|
+
" ██████╗ ██╗ ██╗███╗ ███╗███╗ ███╗███████╗██████╗ ",
|
|
20
|
+
" ██╔════╝ ██║ ██║████╗ ████║████╗ ████║██╔════╝██╔══██╗",
|
|
21
|
+
" ███████╗ ██║ ██║██╔████╔██║██╔████╔██║█████╗ ██████╔╝",
|
|
22
|
+
" ╚════██║ ██║ ██║██║╚██╔╝██║██║╚██╔╝██║██╔══╝ ██╔══██╗",
|
|
23
|
+
" ███████║ ╚██████╔╝██║ ╚═╝ ██║██║ ╚═╝ ██║███████╗██║ ██║",
|
|
24
|
+
" ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝",
|
|
25
|
+
" ███████╗███╗ ██╗ ██████╗ ██╗███╗ ██╗███████╗ ",
|
|
26
|
+
" ██╔════╝████╗ ██║██╔════╝ ██║████╗ ██║██╔════╝ ",
|
|
27
|
+
" █████╗ ██╔██╗ ██║██║ ███╗██║██╔██╗ ██║█████╗ ",
|
|
28
|
+
" ██╔══╝ ██║╚██╗██║██║ ██║██║██║╚██╗██║██╔══╝ ",
|
|
29
|
+
" ███████╗██║ ╚████║╚██████╔╝██║██║ ╚████║███████╗ ",
|
|
30
|
+
" ╚══════╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ",
|
|
31
|
+
];
|
|
32
|
+
return headerLines.map((line, i) => `${colors[i]}${line}${reset}`).join("\n");
|
|
33
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "
|
|
2
|
+
import { CONFIG_KEYS, getConfigValue, isConfigKey, readSummerConfig, setConfigValue, unsetConfigValue, } from "../../core/config.js";
|
|
3
3
|
function requireKey(value) {
|
|
4
4
|
if (isConfigKey(value))
|
|
5
5
|
return value;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Built-in templates are generated in-process — no download, no pin. Their
|
|
4
|
+
* library manifests (`library/templates/<slug>/resource.yaml`) declare
|
|
5
|
+
* `builtin: true`; this map supplies the generator for each such slug.
|
|
6
|
+
*/
|
|
7
|
+
type BuiltinGenerator = (dir: string, projectName: string) => void;
|
|
8
|
+
export declare const BUILTIN_GENERATORS: Readonly<Record<string, BuiltinGenerator>>;
|
|
9
|
+
/**
|
|
10
|
+
* Copy the autopilot verification scaffold into a fresh project.
|
|
11
|
+
*
|
|
12
|
+
* Every project gets a working example of how to prove its own gameplay: a probe
|
|
13
|
+
* that drives the player with real input, saves rendered frames, asserts, and
|
|
14
|
+
* exits. Without it every agent reinvents verification from scratch, and most
|
|
15
|
+
* settle for asking the user to play the game instead.
|
|
16
|
+
*
|
|
17
|
+
* Never overwrites — an existing tests/autopilot/ is the user's, not ours.
|
|
18
|
+
*/
|
|
19
|
+
export declare function scaffoldAutopilot(projectDir: string): boolean;
|
|
20
|
+
/** What the scaffold's first run actually does — the "Next steps" line must not
|
|
21
|
+
* promise a verify when the first thing run.sh does is the one-off asset import. */
|
|
22
|
+
export declare const AUTOPILOT_NEXT_STEP_HINT = "first run imports assets once, then verifies the game boots; no editor needed";
|
|
23
|
+
export declare const createCommand: Command;
|
|
24
|
+
/**
|
|
25
|
+
* project.godot uses C-style double-quoted strings; a project name containing
|
|
26
|
+
* `"` or `\` must be escaped or the file does not parse.
|
|
27
|
+
*/
|
|
28
|
+
export declare function escapeGodotString(value: string): string;
|
|
29
|
+
export declare function renderProjectSettings(name: string, mainScene: string): string;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { cpSync, existsSync, mkdirSync, writeFileSync } from "fs";
|
|
3
|
+
import { join, resolve } from "path";
|
|
4
|
+
import { checkEngineHealth, getApiPort } from "../../core/engine.js";
|
|
5
|
+
import { PACKAGE_ROOT } from "../../core/package-root.js";
|
|
6
|
+
import { SUMMER_ENGINE_COMPATIBILITY } from "../../core/summer-compatibility.js";
|
|
7
|
+
import { getTemplateRegistry, materializePinnedTemplate, resolveTemplate, TemplateDigestMismatchError, } from "../../core/templates.js";
|
|
8
|
+
import { PROJECT_MANIFEST_RELPATH, writeProjectManifest } from "../../project-memory/project-manifest.js";
|
|
9
|
+
import { TOOLKIT_VERSION as toolkitVersion } from "../../core/version.js";
|
|
10
|
+
/** Summer Engine's version when it is reachable right now, else undefined —
|
|
11
|
+
* the manifest then omits engine_version rather than guessing. */
|
|
12
|
+
async function detectEngineVersion() {
|
|
13
|
+
try {
|
|
14
|
+
return (await checkEngineHealth(await getApiPort()))?.version;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export const BUILTIN_GENERATORS = {
|
|
21
|
+
empty: (dir, name) => {
|
|
22
|
+
writeFileSync(join(dir, "project.godot"), renderProjectSettings(name, "res://main.tscn"));
|
|
23
|
+
writeFileSync(join(dir, "main.tscn"), emptyScene());
|
|
24
|
+
},
|
|
25
|
+
"3d-basic": (dir, name) => {
|
|
26
|
+
writeFileSync(join(dir, "project.godot"), renderProjectSettings(name, "res://main.tscn"));
|
|
27
|
+
writeFileSync(join(dir, "main.tscn"), basicScene3D());
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Copy the autopilot verification scaffold into a fresh project.
|
|
32
|
+
*
|
|
33
|
+
* Every project gets a working example of how to prove its own gameplay: a probe
|
|
34
|
+
* that drives the player with real input, saves rendered frames, asserts, and
|
|
35
|
+
* exits. Without it every agent reinvents verification from scratch, and most
|
|
36
|
+
* settle for asking the user to play the game instead.
|
|
37
|
+
*
|
|
38
|
+
* Never overwrites — an existing tests/autopilot/ is the user's, not ours.
|
|
39
|
+
*/
|
|
40
|
+
export function scaffoldAutopilot(projectDir) {
|
|
41
|
+
const source = join(PACKAGE_ROOT, "assets", "autopilot");
|
|
42
|
+
const target = join(projectDir, "tests", "autopilot");
|
|
43
|
+
if (!existsSync(source) || existsSync(target))
|
|
44
|
+
return false;
|
|
45
|
+
cpSync(source, target, { recursive: true });
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
/** What the scaffold's first run actually does — the "Next steps" line must not
|
|
49
|
+
* promise a verify when the first thing run.sh does is the one-off asset import. */
|
|
50
|
+
export const AUTOPILOT_NEXT_STEP_HINT = "first run imports assets once, then verifies the game boots; no editor needed";
|
|
51
|
+
function printNextSteps(fullPath, dirName, scaffolded) {
|
|
52
|
+
console.log(`\nProject created at ${fullPath}`);
|
|
53
|
+
console.log(`Recorded template pin in ${join(dirName, PROJECT_MANIFEST_RELPATH)}`);
|
|
54
|
+
console.log("\nNext steps:");
|
|
55
|
+
console.log(` summer run ${dirName}`);
|
|
56
|
+
if (scaffolded) {
|
|
57
|
+
const script = join(dirName, "tests", "autopilot", "run.sh");
|
|
58
|
+
const hint = process.platform === "win32" ? `bash ${script} (Git Bash or WSL;` : `bash ${script} (`;
|
|
59
|
+
console.log(` ${hint}${AUTOPILOT_NEXT_STEP_HINT})`);
|
|
60
|
+
}
|
|
61
|
+
console.log(" Ask your agent to use the brainstorm-game skill to create .summer/GameSoul.md");
|
|
62
|
+
}
|
|
63
|
+
function describeTemplates(entries, out) {
|
|
64
|
+
const builtins = entries.filter((e) => e.builtin);
|
|
65
|
+
const pinned = entries.filter((e) => !e.builtin && e.status !== "deprecated");
|
|
66
|
+
const pad = Math.max(16, ...entries.map((e) => e.slug.length));
|
|
67
|
+
out("Built-in templates (generated locally, no download):");
|
|
68
|
+
for (const t of builtins)
|
|
69
|
+
out(` ${t.slug.padEnd(pad)} ${t.summary}`);
|
|
70
|
+
out("\nPinned templates (exact commit, verified tree digest):");
|
|
71
|
+
for (const t of pinned) {
|
|
72
|
+
const flag = t.status === "preview" ? " [preview]" : "";
|
|
73
|
+
out(` ${t.slug.padEnd(pad)} ${t.summary}${flag}`);
|
|
74
|
+
}
|
|
75
|
+
out('\nRun "summer list templates" for details.');
|
|
76
|
+
}
|
|
77
|
+
export const createCommand = new Command("create")
|
|
78
|
+
.description("Create a new Summer Engine project from a library template. Built-in templates generate offline; pinned templates fetch exactly the reviewed commit and verify its tree digest.")
|
|
79
|
+
.argument("<template>", 'Template slug (or legacy alias / unambiguous prefix). See "summer list templates".')
|
|
80
|
+
.argument("[name]", "Project directory name (defaults to template slug)")
|
|
81
|
+
.option("--keep-git", "Keep the fetched .git directory, detached at the pinned commit (default: remove it so you start fresh)")
|
|
82
|
+
.action(async (templateName, projectName, options) => {
|
|
83
|
+
const entries = getTemplateRegistry();
|
|
84
|
+
const resolution = resolveTemplate(templateName, entries);
|
|
85
|
+
if (resolution.kind === "none") {
|
|
86
|
+
console.error(`No template matches '${templateName}'.\n`);
|
|
87
|
+
describeTemplates(entries, (l) => console.error(l));
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
if (resolution.kind === "ambiguous") {
|
|
91
|
+
console.error(`'${templateName}' is ambiguous. Did you mean one of:`);
|
|
92
|
+
for (const c of resolution.candidates)
|
|
93
|
+
console.error(` ${c.slug}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const entry = resolution.entry;
|
|
97
|
+
if (resolution.via === "alias" || resolution.via === "prefix") {
|
|
98
|
+
console.log(`Resolved '${templateName}' -> ${entry.slug}`);
|
|
99
|
+
}
|
|
100
|
+
const dirName = projectName || entry.slug;
|
|
101
|
+
const fullPath = resolve(dirName);
|
|
102
|
+
if (existsSync(fullPath)) {
|
|
103
|
+
console.error(`Directory already exists: ${fullPath}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
if (entry.status !== "stable") {
|
|
107
|
+
console.error(`Warning: ${entry.slug} is marked '${entry.status}'.`);
|
|
108
|
+
for (const note of entry.do_not_use_when)
|
|
109
|
+
console.error(` ${note}`);
|
|
110
|
+
}
|
|
111
|
+
if (entry.builtin) {
|
|
112
|
+
const generate = BUILTIN_GENERATORS[entry.slug];
|
|
113
|
+
if (!generate) {
|
|
114
|
+
console.error(`${entry.id} is declared builtin but this CLI has no generator for it. Update the CLI.`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
console.log(`Creating project from built-in '${entry.slug}' template...`);
|
|
118
|
+
mkdirSync(fullPath, { recursive: true });
|
|
119
|
+
generate(fullPath, dirName);
|
|
120
|
+
const scaffolded = scaffoldAutopilot(fullPath);
|
|
121
|
+
writeProjectManifest(fullPath, {
|
|
122
|
+
template: { id: entry.id, version: entry.version, builtin: true },
|
|
123
|
+
toolkit_version: toolkitVersion,
|
|
124
|
+
engine_version: await detectEngineVersion(),
|
|
125
|
+
});
|
|
126
|
+
printNextSteps(fullPath, dirName, scaffolded);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const pin = entry.pin;
|
|
130
|
+
let materialized;
|
|
131
|
+
try {
|
|
132
|
+
materialized = materializePinnedTemplate(entry, {
|
|
133
|
+
targetDir: fullPath,
|
|
134
|
+
keepGit: options.keepGit,
|
|
135
|
+
log: (line) => console.log(line),
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
console.error(err instanceof TemplateDigestMismatchError ? err.message : err.message);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const scaffolded = scaffoldAutopilot(fullPath);
|
|
143
|
+
writeProjectManifest(fullPath, {
|
|
144
|
+
template: {
|
|
145
|
+
id: entry.id,
|
|
146
|
+
version: entry.version,
|
|
147
|
+
repo: pin.repo,
|
|
148
|
+
commit: materialized.commit,
|
|
149
|
+
tree_digest: materialized.tree_digest,
|
|
150
|
+
},
|
|
151
|
+
toolkit_version: toolkitVersion,
|
|
152
|
+
engine_version: await detectEngineVersion(),
|
|
153
|
+
});
|
|
154
|
+
console.log(`Source: ${pin.repo} @ ${materialized.commit.slice(0, 12)} (tree digest verified)`);
|
|
155
|
+
printNextSteps(fullPath, dirName, scaffolded);
|
|
156
|
+
});
|
|
157
|
+
/**
|
|
158
|
+
* project.godot uses C-style double-quoted strings; a project name containing
|
|
159
|
+
* `"` or `\` must be escaped or the file does not parse.
|
|
160
|
+
*/
|
|
161
|
+
export function escapeGodotString(value) {
|
|
162
|
+
return value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\r?\n/g, "\\n");
|
|
163
|
+
}
|
|
164
|
+
export function renderProjectSettings(name, mainScene) {
|
|
165
|
+
return `; Summer Engine Project
|
|
166
|
+
; Generated by summer-engine CLI
|
|
167
|
+
; Technical base ${SUMMER_ENGINE_COMPATIBILITY.currentTechnicalBaseVersion}; Summer follows upstream continuously
|
|
168
|
+
|
|
169
|
+
[application]
|
|
170
|
+
|
|
171
|
+
config/name="${escapeGodotString(name)}"
|
|
172
|
+
run/main_scene="${escapeGodotString(mainScene)}"
|
|
173
|
+
config/features=PackedStringArray("${SUMMER_ENGINE_COMPATIBILITY.projectFeatureTag}")
|
|
174
|
+
|
|
175
|
+
[rendering]
|
|
176
|
+
|
|
177
|
+
renderer/rendering_method="forward_plus"
|
|
178
|
+
`;
|
|
179
|
+
}
|
|
180
|
+
function emptyScene() {
|
|
181
|
+
return `[gd_scene format=3]
|
|
182
|
+
|
|
183
|
+
[node name="World" type="Node3D"]
|
|
184
|
+
`;
|
|
185
|
+
}
|
|
186
|
+
function basicScene3D() {
|
|
187
|
+
return `[gd_scene load_steps=4 format=3]
|
|
188
|
+
|
|
189
|
+
[sub_resource type="BoxMesh" id="BoxMesh_floor"]
|
|
190
|
+
size = Vector3(20, 0.2, 20)
|
|
191
|
+
|
|
192
|
+
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_floor"]
|
|
193
|
+
albedo_color = Color(0.4, 0.45, 0.4, 1)
|
|
194
|
+
|
|
195
|
+
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_sky"]
|
|
196
|
+
|
|
197
|
+
[node name="World" type="Node3D"]
|
|
198
|
+
|
|
199
|
+
[node name="Camera3D" type="Camera3D" parent="."]
|
|
200
|
+
transform = Transform3D(1, 0, 0, 0, 0.939693, 0.34202, 0, -0.34202, 0.939693, 0, 5, 10)
|
|
201
|
+
|
|
202
|
+
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
|
203
|
+
transform = Transform3D(1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 8, 0)
|
|
204
|
+
shadow_enabled = true
|
|
205
|
+
|
|
206
|
+
[node name="Floor" type="MeshInstance3D" parent="."]
|
|
207
|
+
mesh = SubResource("BoxMesh_floor")
|
|
208
|
+
surface_material_override/0 = SubResource("StandardMaterial3D_floor")
|
|
209
|
+
|
|
210
|
+
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import { createDebugReportArtifact, redactDebugReport } from "
|
|
3
|
-
import { c, sym, tildeify } from "
|
|
2
|
+
import { createDebugReportArtifact, redactDebugReport } from "../../core/capabilities/debug-report.js";
|
|
3
|
+
import { c, sym, tildeify } from "../../core/format.js";
|
|
4
4
|
function parsePositiveInt(value, fallback) {
|
|
5
5
|
if (!value)
|
|
6
6
|
return fallback;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { runDoctor } from "../../core/capabilities/doctor.js";
|
|
3
|
+
import { brandLine } from "../../core/format.js";
|
|
4
|
+
import { TOOLKIT_VERSION as version } from "../../core/version.js";
|
|
5
|
+
export const doctorCommand = new Command("doctor")
|
|
6
|
+
.description("Diagnose Node, login, engine, project memory, local API, and MCP registration")
|
|
7
|
+
.option("--json", "Print diagnostics as JSON")
|
|
8
|
+
.action(async (opts) => {
|
|
9
|
+
if (!opts.json) {
|
|
10
|
+
console.log("");
|
|
11
|
+
console.log(brandLine(version));
|
|
12
|
+
console.log("");
|
|
13
|
+
}
|
|
14
|
+
const result = await runDoctor({ json: Boolean(opts.json) });
|
|
15
|
+
if (!result.ok) {
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
});
|