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
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Command, Option } from "commander";
|
|
2
|
+
import { configureAgentMcp, resolveAgentSelection, resolveConfigScope, supportedAgents, } from "../../installer/agent-config.js";
|
|
3
|
+
import { previewNote, setupSkills } from "../../installer/setup.js";
|
|
4
|
+
import { printDoctorResult, runDoctor } from "../../core/capabilities/doctor.js";
|
|
5
|
+
import { brandLine, c, sym, tildeify } from "../../core/format.js";
|
|
6
|
+
import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
|
|
7
|
+
import { resolveDefaultChannel } from "../../installer/version-check.js";
|
|
8
|
+
import { agentLabel } from "../../installer/agent-table.js";
|
|
9
|
+
export const setupCommand = new Command("setup")
|
|
10
|
+
.description("Configure Summer Engine for an AI agent and run diagnostics")
|
|
11
|
+
.argument("[agent]", `Agent to configure: ${supportedAgents.join(", ")}`)
|
|
12
|
+
.option("--agent <agent>", `Agent to configure: ${supportedAgents.join(", ")}`)
|
|
13
|
+
.option("--scope <scope>", "Configuration scope: user or project", "user")
|
|
14
|
+
.option("--dry-run", "Show planned changes without writing files")
|
|
15
|
+
.option("--print", "Print the MCP config snippet instead of writing files")
|
|
16
|
+
.option("--local-dev", "Point the agent at this checkout's built CLI (node <repo>/dist/bin/summer.js mcp) instead of npx summer-engine@latest — for testing unpublished builds. SUMMER_DEV=1 does the same.")
|
|
17
|
+
.option("--channel <dist-tag>", "npm dist-tag the agent's MCP entry runs: npx -y summer-engine@<dist-tag> mcp (default latest; use next while a release soaks on the next tag). SUMMER_CHANNEL does the same.")
|
|
18
|
+
.option("--yes", "Apply practical setup steps without prompting")
|
|
19
|
+
.option("--json", "Print setup result as JSON")
|
|
20
|
+
.option("--force", "Overwrite existing skill content (passes --force through to skills install)")
|
|
21
|
+
.option("--recommended", "Install only the recommended skill subset instead of the whole library")
|
|
22
|
+
.option("--stable-only", "Skip preview skills (installed by default; each is labelled preview in its guidance)")
|
|
23
|
+
// Pre-reversal opt-in, kept one release as a hidden no-op so old scripts still parse.
|
|
24
|
+
.addOption(new Option("--include-preview", "No-op: preview skills install by default").hideHelp())
|
|
25
|
+
.action(async (agentArg, opts) => {
|
|
26
|
+
const agent = resolveAgentSelection(agentArg, opts.agent);
|
|
27
|
+
const scope = resolveConfigScope(opts.scope);
|
|
28
|
+
const defaultChannel = await resolveDefaultChannel(cliVersion);
|
|
29
|
+
const config = await configureAgentMcp({
|
|
30
|
+
agent,
|
|
31
|
+
scope,
|
|
32
|
+
dryRun: opts.dryRun,
|
|
33
|
+
print: opts.print,
|
|
34
|
+
localDev: Boolean(opts.localDev) || process.env.SUMMER_DEV === "1",
|
|
35
|
+
channel: opts.channel ?? process.env.SUMMER_CHANNEL ?? defaultChannel.channel,
|
|
36
|
+
});
|
|
37
|
+
if (!opts.channel && !process.env.SUMMER_CHANNEL && defaultChannel.note && !opts.print) {
|
|
38
|
+
console.log(` ${c.dim(defaultChannel.note)}`);
|
|
39
|
+
}
|
|
40
|
+
const skills = setupSkills(agent, {
|
|
41
|
+
dryRun: Boolean(opts.dryRun || opts.print),
|
|
42
|
+
yes: Boolean(opts.yes),
|
|
43
|
+
force: Boolean(opts.force),
|
|
44
|
+
scope,
|
|
45
|
+
recommended: Boolean(opts.recommended),
|
|
46
|
+
stableOnly: Boolean(opts.stableOnly),
|
|
47
|
+
});
|
|
48
|
+
const doctor = await runDoctor({ quiet: true });
|
|
49
|
+
if (opts.json) {
|
|
50
|
+
console.log(JSON.stringify({
|
|
51
|
+
ok: doctor.ok && skills.status !== "failed",
|
|
52
|
+
config,
|
|
53
|
+
skills,
|
|
54
|
+
doctor,
|
|
55
|
+
}, null, 2));
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
printSetupResult(config, skills, doctor);
|
|
59
|
+
}
|
|
60
|
+
if (!doctor.ok || skills.status === "failed") {
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
function printSetupResult(config, skills, doctor) {
|
|
65
|
+
if (config.print) {
|
|
66
|
+
console.log(config.snippet.trimEnd());
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log("");
|
|
70
|
+
console.log(brandLine(cliVersion));
|
|
71
|
+
console.log("");
|
|
72
|
+
const label = agentLabel(config.agent);
|
|
73
|
+
if (config.dryRun) {
|
|
74
|
+
console.log(` ${c.dim("(dry run)")} Would link to ${label} ${c.dim(tildeify(config.path))}`);
|
|
75
|
+
}
|
|
76
|
+
else if (config.wrote) {
|
|
77
|
+
console.log(` ${sym.ok()} Linked to ${c.bold(label)} ${c.dim(tildeify(config.path))}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(` ${sym.ok()} Already linked to ${c.bold(label)} ${c.dim(tildeify(config.path))}`);
|
|
81
|
+
}
|
|
82
|
+
if (config.localDev) {
|
|
83
|
+
console.log(` ${c.dim("(local dev)")} MCP server command: ${c.dim(`${config.server.command} ${config.server.args.join(" ")}`)}`);
|
|
84
|
+
}
|
|
85
|
+
else if (config.channel !== "latest") {
|
|
86
|
+
console.log(` ${c.dim(`(channel ${config.channel})`)} MCP server command: ${c.dim(`${config.server.command} ${config.server.args.join(" ")}`)}`);
|
|
87
|
+
}
|
|
88
|
+
if (skills.status === "installed") {
|
|
89
|
+
const installed = parseInstalledSkills(skills.stdout);
|
|
90
|
+
if (installed.length > 0) {
|
|
91
|
+
const where = parseSkillTargetDir(skills.stdout);
|
|
92
|
+
const note = previewNote(skills);
|
|
93
|
+
const tally = skills.installed
|
|
94
|
+
? c.dim(` (${skills.installed.added} new, ${skills.installed.updated} updated${note ? `; ${note}` : ""})`)
|
|
95
|
+
: "";
|
|
96
|
+
console.log(` ${sym.ok()} Installed ${c.bold(String(installed.length) + " skills")}${tally} ${where ? c.dim(tildeify(where)) : ""}`);
|
|
97
|
+
const grouped = installed.reduce((rows, name, i) => {
|
|
98
|
+
const row = Math.floor(i / 3);
|
|
99
|
+
rows[row] = rows[row] ?? [];
|
|
100
|
+
rows[row].push(name);
|
|
101
|
+
return rows;
|
|
102
|
+
}, []);
|
|
103
|
+
for (const row of grouped) {
|
|
104
|
+
console.log(` ${c.dim(row.join(" · "))}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(` ${sym.ok()} ${skills.message}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (skills.status === "planned" && config.dryRun) {
|
|
112
|
+
const note = previewNote(skills);
|
|
113
|
+
console.log(` ${c.dim("(dry run)")} Would install ${c.bold(String(skills.count ?? "?") + " skills")}${note ? c.dim(` (${note})`) : ""} ${c.dim(skills.destination ?? "")}`);
|
|
114
|
+
}
|
|
115
|
+
else if (skills.status === "planned" || skills.status === "skipped") {
|
|
116
|
+
console.log(` ${sym.warn()} Skills: ${c.dim(skills.message)}`);
|
|
117
|
+
}
|
|
118
|
+
else if (skills.status === "failed") {
|
|
119
|
+
console.log(` ${sym.fail()} Skills install failed`);
|
|
120
|
+
if (skills.stderr)
|
|
121
|
+
console.log(` ${c.dim(skills.stderr)}`);
|
|
122
|
+
}
|
|
123
|
+
for (const warning of config.warnings) {
|
|
124
|
+
console.log(` ${sym.warn()} ${c.yellow(warning)}`);
|
|
125
|
+
}
|
|
126
|
+
console.log("");
|
|
127
|
+
printDoctorResult(doctor);
|
|
128
|
+
if (doctor.ok && skills.status !== "failed" && !config.dryRun) {
|
|
129
|
+
console.log("");
|
|
130
|
+
console.log(`${c.dim("Try it:")} open ${label} and ask: ${c.bold("\"add a DirectionalLight3D and Camera3D to my scene\"")}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function parseInstalledSkills(stdout) {
|
|
134
|
+
if (!stdout)
|
|
135
|
+
return [];
|
|
136
|
+
// Lines look like: " Installed fps-controller -> /path/.../fps-controller"
|
|
137
|
+
const names = [];
|
|
138
|
+
for (const line of stdout.split("\n")) {
|
|
139
|
+
const m = line.match(/^\s*(?:Installed|Updated|Generated)\s+([a-z0-9-]+)\s+->/i);
|
|
140
|
+
if (m)
|
|
141
|
+
names.push(m[1]);
|
|
142
|
+
}
|
|
143
|
+
return names;
|
|
144
|
+
}
|
|
145
|
+
function parseSkillTargetDir(stdout) {
|
|
146
|
+
if (!stdout)
|
|
147
|
+
return null;
|
|
148
|
+
for (const line of stdout.split("\n")) {
|
|
149
|
+
const m = line.match(/^\s*(?:Installed|Updated|Generated)\s+[a-z0-9-]+\s+->\s+(.+)$/i);
|
|
150
|
+
if (m) {
|
|
151
|
+
const path = m[1].trim();
|
|
152
|
+
// Strip trailing /<skill-name> to get the parent dir
|
|
153
|
+
const parent = path.replace(/\/[a-z0-9-]+$/i, "/");
|
|
154
|
+
return parent;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
@@ -1,244 +1,65 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
1
|
+
import { Command, Option } from "commander";
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, cpSync, rmSync, writeFileSync, readdirSync, copyFileSync, } from "fs";
|
|
3
3
|
import { join, dirname } from "path";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
// Resolve commands dir:
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
import { AGENT_CLIENTS, getSkillRegistry, resolveSkillDir, selectSkillsForBulkInstall, } from "../../core/skills-registry.js";
|
|
6
|
+
import { tildeify } from "../../core/format.js";
|
|
7
|
+
import { writeSkillMarker } from "../../installer/version-check.js";
|
|
8
|
+
import { pruneRetiredSkills } from "../../installer/legacy-skills.js";
|
|
9
|
+
import { resolveInstallLocation, resolveSkillAgent, resolveSkillScope, } from "../../installer/skill-locations.js";
|
|
10
|
+
import { PACKAGE_ROOT } from "../../core/package-root.js";
|
|
11
|
+
import { agentLabel as tableAgentLabel, agentSpec, defaultPathContext, legacyRuleFiles } from "../../installer/agent-table.js";
|
|
12
|
+
import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
|
|
13
|
+
// Skill files live in library/skills/<slug>/ and are resolved through the
|
|
14
|
+
// generated registry (registry/generated/skills-registry.json).
|
|
15
|
+
// Resolve commands dir: from dist/cli/commands/skills.js -> ../../../commands.
|
|
16
|
+
// Used by Claude Code installs to also copy
|
|
16
17
|
// slash commands (e.g. /gameskill) to ~/.claude/commands/. Other agents don't
|
|
17
18
|
// have an equivalent today, so the copy is gated to claude-code.
|
|
18
|
-
const commandsDir = join(
|
|
19
|
-
const SKILL_SCOPES = ["user", "project"];
|
|
19
|
+
const commandsDir = join(PACKAGE_ROOT, "commands");
|
|
20
20
|
function getBuiltinSkills() {
|
|
21
|
-
|
|
22
|
-
for (const entry of SKILL_REGISTRY) {
|
|
23
|
-
if (!entry.public)
|
|
24
|
-
continue;
|
|
25
|
-
const skillPath = join(skillsDir, entry.category, entry.name, "SKILL.md");
|
|
26
|
-
if (!existsSync(skillPath))
|
|
27
|
-
continue;
|
|
28
|
-
const frontmatter = parseSkillFrontmatter(skillPath);
|
|
29
|
-
if (!frontmatter)
|
|
30
|
-
continue;
|
|
31
|
-
skills.push({
|
|
32
|
-
...entry,
|
|
33
|
-
name: entry.name,
|
|
34
|
-
description: frontmatter.description,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return skills;
|
|
38
|
-
}
|
|
39
|
-
function parseSkillFrontmatter(skillPath) {
|
|
40
|
-
try {
|
|
41
|
-
const content = readFileSync(skillPath, "utf-8");
|
|
42
|
-
const match = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
43
|
-
if (!match)
|
|
44
|
-
return null;
|
|
45
|
-
const front = match[1];
|
|
46
|
-
const name = front.match(/^name:\s*(.+)$/m)?.[1]?.trim();
|
|
47
|
-
const description = front.match(/^description:\s*(.+)$/m)?.[1]?.trim();
|
|
48
|
-
if (!name || !description)
|
|
49
|
-
return null;
|
|
50
|
-
return { name, description };
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
21
|
+
return getSkillRegistry().filter((entry) => existsSync(join(resolveSkillDir(entry), "SKILL.md")));
|
|
55
22
|
}
|
|
56
23
|
function getSkillMeta(name) {
|
|
57
24
|
return getBuiltinSkills().find((skill) => skill.name === name) ?? null;
|
|
58
25
|
}
|
|
59
26
|
function getSkillPath(name) {
|
|
60
|
-
const entry =
|
|
27
|
+
const entry = getSkillRegistry().find((s) => s.name === name);
|
|
61
28
|
if (!entry)
|
|
62
29
|
return null;
|
|
63
|
-
const path =
|
|
30
|
+
const path = resolveSkillDir(entry);
|
|
64
31
|
if (!existsSync(path) || !existsSync(join(path, "SKILL.md")))
|
|
65
32
|
return null;
|
|
66
33
|
return path;
|
|
67
34
|
}
|
|
68
35
|
function getSkillBody(name) {
|
|
69
|
-
const
|
|
70
|
-
if (!
|
|
36
|
+
const path = getSkillPath(name);
|
|
37
|
+
if (!path)
|
|
71
38
|
throw new Error(`Unknown skill: ${name}`);
|
|
72
|
-
const
|
|
73
|
-
const content = readFileSync(skillPath, "utf-8");
|
|
39
|
+
const content = readFileSync(join(path, "SKILL.md"), "utf-8");
|
|
74
40
|
return content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, "").trim();
|
|
75
41
|
}
|
|
76
42
|
function die(message) {
|
|
77
43
|
console.error(message);
|
|
78
44
|
process.exit(1);
|
|
79
45
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return SKILL_SCOPES.includes(value);
|
|
85
|
-
}
|
|
86
|
-
function parseAgent(value) {
|
|
87
|
-
if (isAgentClient(value))
|
|
88
|
-
return value;
|
|
89
|
-
die(`Unknown agent: ${value}. Use one of: ${AGENT_CLIENTS.join(", ")}.`);
|
|
90
|
-
}
|
|
91
|
-
function parseScope(value) {
|
|
92
|
-
if (isSkillScope(value))
|
|
93
|
-
return value;
|
|
94
|
-
die(`Unknown scope: ${value}. Use user or project.`);
|
|
95
|
-
}
|
|
96
|
-
function resolveAgent(opts) {
|
|
97
|
-
if (opts.asClaudeSkill && opts.asCursorSkill) {
|
|
98
|
-
die("Use only one legacy alias: --as-claude-skill or --as-cursor-skill.");
|
|
99
|
-
}
|
|
100
|
-
const legacyAgent = opts.asClaudeSkill
|
|
101
|
-
? "claude-code"
|
|
102
|
-
: opts.asCursorSkill
|
|
103
|
-
? "cursor"
|
|
104
|
-
: undefined;
|
|
105
|
-
if (opts.agent && legacyAgent && opts.agent !== legacyAgent) {
|
|
106
|
-
die(`Conflicting agent options: --agent ${opts.agent} with legacy alias for ${legacyAgent}.`);
|
|
46
|
+
/** Run an installer-layer option parser; its Error message becomes the CLI's exit line. */
|
|
47
|
+
function orDie(parse) {
|
|
48
|
+
try {
|
|
49
|
+
return parse();
|
|
107
50
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
function resolveScope(agent, opts) {
|
|
111
|
-
if (opts.scope)
|
|
112
|
-
return parseScope(opts.scope);
|
|
113
|
-
if (agent === "cursor" ||
|
|
114
|
-
agent === "windsurf" ||
|
|
115
|
-
agent === "cline" ||
|
|
116
|
-
agent === "roo-code" ||
|
|
117
|
-
agent === "kilo-code") {
|
|
118
|
-
return "project";
|
|
51
|
+
catch (error) {
|
|
52
|
+
die(error instanceof Error ? error.message : String(error));
|
|
119
53
|
}
|
|
120
|
-
return "user";
|
|
121
54
|
}
|
|
122
55
|
function agentLabel(agent) {
|
|
123
|
-
|
|
124
|
-
case "claude-code":
|
|
125
|
-
return "Claude Code";
|
|
126
|
-
case "codex":
|
|
127
|
-
return "Codex";
|
|
128
|
-
case "cursor":
|
|
129
|
-
return "Cursor";
|
|
130
|
-
case "windsurf":
|
|
131
|
-
return "Devin Desktop (Windsurf)";
|
|
132
|
-
case "cline":
|
|
133
|
-
return "Cline";
|
|
134
|
-
case "roo-code":
|
|
135
|
-
return "Roo Code";
|
|
136
|
-
case "kilo-code":
|
|
137
|
-
return "Kilo Code";
|
|
138
|
-
case "gemini":
|
|
139
|
-
return "Gemini CLI";
|
|
140
|
-
case "github-copilot":
|
|
141
|
-
return "GitHub Copilot CLI";
|
|
142
|
-
case "vscode-copilot":
|
|
143
|
-
return "GitHub Copilot in VS Code";
|
|
144
|
-
case "opencode":
|
|
145
|
-
return "OpenCode";
|
|
146
|
-
case "summer":
|
|
147
|
-
return "Summer";
|
|
148
|
-
}
|
|
56
|
+
return agent === "summer" ? "Summer" : tableAgentLabel(agent);
|
|
149
57
|
}
|
|
150
|
-
function
|
|
151
|
-
|
|
152
|
-
if (overrideDir) {
|
|
153
|
-
if (agent === "cursor")
|
|
154
|
-
return { kind: "cursor-rule-dir", path: overrideDir };
|
|
155
|
-
if (agent === "windsurf") {
|
|
156
|
-
return { kind: "windsurf-rule-file", path: join(overrideDir, ".windsurfrules") };
|
|
157
|
-
}
|
|
158
|
-
if (agent === "cline" || agent === "roo-code" || agent === "kilo-code") {
|
|
159
|
-
return { kind: "cline-rule-dir", path: overrideDir };
|
|
160
|
-
}
|
|
161
|
-
if (agent === "gemini") {
|
|
162
|
-
return { kind: "gemini-skill-dir", path: overrideDir };
|
|
163
|
-
}
|
|
164
|
-
if (agent === "opencode") {
|
|
165
|
-
return { kind: "opencode-skill-dir", path: overrideDir };
|
|
166
|
-
}
|
|
167
|
-
return { kind: "skill-dir", path: overrideDir };
|
|
168
|
-
}
|
|
169
|
-
const root = scope === "user" ? homedir() : process.cwd();
|
|
170
|
-
switch (agent) {
|
|
171
|
-
case "codex":
|
|
172
|
-
return { kind: "skill-dir", path: join(root, ".agents", "skills") };
|
|
173
|
-
case "claude-code":
|
|
174
|
-
return { kind: "skill-dir", path: join(root, ".claude", "skills") };
|
|
175
|
-
case "cursor":
|
|
176
|
-
return { kind: "cursor-rule-dir", path: join(root, ".cursor", "rules") };
|
|
177
|
-
case "windsurf":
|
|
178
|
-
return { kind: "windsurf-rule-file", path: join(root, ".windsurfrules") };
|
|
179
|
-
case "cline":
|
|
180
|
-
return {
|
|
181
|
-
kind: "cline-rule-dir",
|
|
182
|
-
path: scope === "user"
|
|
183
|
-
? clineUserRulesDir()
|
|
184
|
-
: join(process.cwd(), ".clinerules"),
|
|
185
|
-
};
|
|
186
|
-
case "roo-code":
|
|
187
|
-
return {
|
|
188
|
-
kind: "cline-rule-dir",
|
|
189
|
-
path: scope === "user"
|
|
190
|
-
? rooCodeUserRulesDir()
|
|
191
|
-
: join(process.cwd(), ".clinerules"),
|
|
192
|
-
};
|
|
193
|
-
case "kilo-code":
|
|
194
|
-
return {
|
|
195
|
-
kind: "cline-rule-dir",
|
|
196
|
-
path: scope === "user"
|
|
197
|
-
? join(homedir(), ".kilocode", "rules")
|
|
198
|
-
: join(process.cwd(), ".kilocode", "rules"),
|
|
199
|
-
};
|
|
200
|
-
case "gemini":
|
|
201
|
-
return {
|
|
202
|
-
kind: "gemini-skill-dir",
|
|
203
|
-
path: join(homedir(), ".gemini", "extensions", "summer-engine", "skills"),
|
|
204
|
-
};
|
|
205
|
-
case "github-copilot":
|
|
206
|
-
case "vscode-copilot":
|
|
207
|
-
return {
|
|
208
|
-
kind: "skill-dir",
|
|
209
|
-
path: scope === "user"
|
|
210
|
-
? join(homedir(), ".copilot", "skills")
|
|
211
|
-
: join(process.cwd(), ".github", "skills"),
|
|
212
|
-
};
|
|
213
|
-
case "opencode":
|
|
214
|
-
return {
|
|
215
|
-
kind: "opencode-skill-dir",
|
|
216
|
-
path: scope === "user"
|
|
217
|
-
? opencodeUserAgentsDir()
|
|
218
|
-
: join(process.cwd(), ".opencode", "agents", "summer"),
|
|
219
|
-
};
|
|
220
|
-
case "summer":
|
|
221
|
-
return { kind: "skill-dir", path: join(root, ".summer", "skills") };
|
|
222
|
-
}
|
|
58
|
+
function previewSkippedLine(count) {
|
|
59
|
+
return ` Skipped ${count} preview skill${count === 1 ? "" : "s"} (--stable-only).`;
|
|
223
60
|
}
|
|
224
|
-
function
|
|
225
|
-
|
|
226
|
-
return join(homedir(), "Documents", "Cline", "Rules");
|
|
227
|
-
}
|
|
228
|
-
function rooCodeUserRulesDir() {
|
|
229
|
-
// Roo Code reads global rules from the user's Documents/Roo/Rules folder.
|
|
230
|
-
return join(homedir(), "Documents", "Roo", "Rules");
|
|
231
|
-
}
|
|
232
|
-
function opencodeUserAgentsDir() {
|
|
233
|
-
// OpenCode's user-scope agent definition directory varies by OS.
|
|
234
|
-
// On Windows, OpenCode reads from %APPDATA%/opencode/agents/summer.
|
|
235
|
-
// On Linux/macOS, it reads from $XDG_CONFIG_HOME or ~/.config/opencode/agents/summer.
|
|
236
|
-
if (platform() === "win32") {
|
|
237
|
-
const appData = process.env.APPDATA ?? join(homedir(), "AppData", "Roaming");
|
|
238
|
-
return join(appData, "opencode", "agents", "summer");
|
|
239
|
-
}
|
|
240
|
-
const xdg = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
241
|
-
return join(xdg, "opencode", "agents", "summer");
|
|
61
|
+
function previewIncludedLine(count) {
|
|
62
|
+
return ` ${count} preview skill${count === 1 ? "" : "s"} included — labelled in ${count === 1 ? "its" : "each skill's"} guidance; add --stable-only to skip.`;
|
|
242
63
|
}
|
|
243
64
|
function selectSkills(name, opts) {
|
|
244
65
|
if (opts.all && opts.recommended) {
|
|
@@ -248,10 +69,16 @@ function selectSkills(name, opts) {
|
|
|
248
69
|
die("Specify either a skill name or a bulk option, not both.");
|
|
249
70
|
}
|
|
250
71
|
const skills = getBuiltinSkills();
|
|
251
|
-
if (opts.all)
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
72
|
+
if (opts.all || opts.recommended) {
|
|
73
|
+
// Bulk installs take stable and preview skills (preview is a label, not a
|
|
74
|
+
// gate); --stable-only skips preview. An explicit name below installs
|
|
75
|
+
// regardless of status.
|
|
76
|
+
const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(skills, {
|
|
77
|
+
recommended: Boolean(opts.recommended),
|
|
78
|
+
stableOnly: Boolean(opts.stableOnly),
|
|
79
|
+
});
|
|
80
|
+
return { skills: selected, previewIncluded, previewSkipped };
|
|
81
|
+
}
|
|
255
82
|
if (!name) {
|
|
256
83
|
console.error("Specify a skill name, --recommended, or --all.");
|
|
257
84
|
printAvailableSkillNames();
|
|
@@ -263,7 +90,7 @@ function selectSkills(name, opts) {
|
|
|
263
90
|
printAvailableSkillNames();
|
|
264
91
|
process.exit(1);
|
|
265
92
|
}
|
|
266
|
-
return [skill];
|
|
93
|
+
return { skills: [skill], previewIncluded: 0, previewSkipped: 0 };
|
|
267
94
|
}
|
|
268
95
|
function printAvailableSkillNames() {
|
|
269
96
|
const skills = getBuiltinSkills();
|
|
@@ -275,9 +102,7 @@ function printAvailableSkillNames() {
|
|
|
275
102
|
}
|
|
276
103
|
}
|
|
277
104
|
function installSkill(skill, agent, location, options) {
|
|
278
|
-
|
|
279
|
-
die(`${skill.name} does not support ${agentLabel(agent)}.`);
|
|
280
|
-
}
|
|
105
|
+
// Every library skill supports every agent client (registry clients: "all").
|
|
281
106
|
switch (location.kind) {
|
|
282
107
|
case "skill-dir":
|
|
283
108
|
return copySkillDirectory(skill, location.path, options);
|
|
@@ -287,8 +112,6 @@ function installSkill(skill, agent, location, options) {
|
|
|
287
112
|
return upsertWindsurfRule(skill, location.path);
|
|
288
113
|
case "cline-rule-dir":
|
|
289
114
|
return writeClineRule(skill, location.path);
|
|
290
|
-
case "gemini-skill-dir":
|
|
291
|
-
return writeGeminiSkill(skill, location.path);
|
|
292
115
|
case "opencode-skill-dir":
|
|
293
116
|
return writeOpencodeSkill(skill, location.path);
|
|
294
117
|
}
|
|
@@ -299,13 +122,14 @@ function copySkillDirectory(skill, targetDir, options) {
|
|
|
299
122
|
die(`Skill files missing: ${skill.name}`);
|
|
300
123
|
mkdirSync(targetDir, { recursive: true });
|
|
301
124
|
const dest = join(targetDir, skill.name);
|
|
302
|
-
|
|
125
|
+
const existed = existsSync(dest);
|
|
126
|
+
if (options.force && existed) {
|
|
303
127
|
// Wipe stale skill content so re-installs overwrite cleanly even if files
|
|
304
128
|
// were renamed or removed upstream.
|
|
305
129
|
rmSync(dest, { recursive: true, force: true });
|
|
306
130
|
}
|
|
307
131
|
cpSync(src, dest, { recursive: true, force: true });
|
|
308
|
-
return { action: "Installed", path: dest };
|
|
132
|
+
return { action: existed ? "Updated" : "Installed", path: dest };
|
|
309
133
|
}
|
|
310
134
|
function writeCursorRule(skill, rulesDir) {
|
|
311
135
|
mkdirSync(rulesDir, { recursive: true });
|
|
@@ -335,16 +159,6 @@ function writeClineRule(skill, rulesDir) {
|
|
|
335
159
|
writeFileSync(rulePath, renderRuleBody(skill) + "\n", "utf-8");
|
|
336
160
|
return { action: "Generated", path: rulePath };
|
|
337
161
|
}
|
|
338
|
-
function writeGeminiSkill(skill, skillsDir) {
|
|
339
|
-
// Gemini extensions support a contextFileName, but skill discovery for
|
|
340
|
-
// arbitrary markdown is not standardized. We drop each SKILL.md alongside
|
|
341
|
-
// the extension so the agent can reference them by path; the install
|
|
342
|
-
// summary surfaces this so the user knows where to point Gemini.
|
|
343
|
-
mkdirSync(skillsDir, { recursive: true });
|
|
344
|
-
const rulePath = join(skillsDir, `${skill.name}.md`);
|
|
345
|
-
writeFileSync(rulePath, renderRuleBody(skill) + "\n", "utf-8");
|
|
346
|
-
return { action: "Generated", path: rulePath };
|
|
347
|
-
}
|
|
348
162
|
function writeOpencodeSkill(skill, skillsDir) {
|
|
349
163
|
// OpenCode supports agent markdown definitions; the exact discovery
|
|
350
164
|
// convention for ad-hoc skills isn't fully documented. We write each skill
|
|
@@ -381,8 +195,11 @@ function printInstallSummary(count, agent, scope, location) {
|
|
|
381
195
|
const label = agentLabel(agent);
|
|
382
196
|
const tildeified = tildeify(location.path);
|
|
383
197
|
console.log(`\n${count} skill${count === 1 ? "" : "s"} ready for ${label} (${scope} scope).`);
|
|
198
|
+
const reloadHint = agent === "summer" ? undefined : agentSpec(agent).skills?.reloadHint;
|
|
384
199
|
if (location.kind === "skill-dir") {
|
|
385
200
|
console.log(`${label} can read skills from ${tildeified}/<skill>/SKILL.md`);
|
|
201
|
+
if (reloadHint)
|
|
202
|
+
console.log(reloadHint);
|
|
386
203
|
}
|
|
387
204
|
else if (location.kind === "cursor-rule-dir") {
|
|
388
205
|
console.log(`Cursor rules are in ${tildeified}/summer-<skill>.mdc`);
|
|
@@ -391,10 +208,6 @@ function printInstallSummary(count, agent, scope, location) {
|
|
|
391
208
|
console.log(`${label} rules are in ${tildeified}/summer-<skill>.md`);
|
|
392
209
|
console.log("Restart VS Code to pick up new rules.");
|
|
393
210
|
}
|
|
394
|
-
else if (location.kind === "gemini-skill-dir") {
|
|
395
|
-
console.log(`Skill files are in ${tildeified}/<skill>.md`);
|
|
396
|
-
console.log("Reference them from Gemini by path, or run `gemini extensions enable summer-engine` to load the bundled context.");
|
|
397
|
-
}
|
|
398
211
|
else if (location.kind === "opencode-skill-dir") {
|
|
399
212
|
console.log(`Skill files are in ${tildeified}/<skill>.md`);
|
|
400
213
|
console.log("Restart OpenCode so it picks up the new agent definitions.");
|
|
@@ -411,16 +224,40 @@ export const skillsCommand = new Command("skills")
|
|
|
411
224
|
skillsCommand
|
|
412
225
|
.command("list")
|
|
413
226
|
.description("List available skills")
|
|
414
|
-
.
|
|
227
|
+
.option("--by-domain", "Group skills by their primary domain (same grouping as library/skills/README.md)")
|
|
228
|
+
.action((opts) => {
|
|
415
229
|
const skills = getBuiltinSkills();
|
|
416
230
|
if (skills.length === 0) {
|
|
417
231
|
console.log("No skills found.");
|
|
418
232
|
return;
|
|
419
233
|
}
|
|
420
|
-
|
|
421
|
-
for (const s of skills) {
|
|
234
|
+
const line = (s) => {
|
|
422
235
|
const badge = s.recommended ? "recommended" : "optional";
|
|
423
|
-
|
|
236
|
+
const tag = s.status === "preview" ? "[preview] " : "";
|
|
237
|
+
return ` ${s.name.padEnd(24)} ${badge.padEnd(11)} ${tag}${s.description}`;
|
|
238
|
+
};
|
|
239
|
+
if (opts.byDomain) {
|
|
240
|
+
const groups = new Map();
|
|
241
|
+
for (const s of skills) {
|
|
242
|
+
const primary = s.domains[0] ?? "uncategorised";
|
|
243
|
+
groups.set(primary, [...(groups.get(primary) ?? []), s]);
|
|
244
|
+
}
|
|
245
|
+
console.log(`${skills.length} skills by primary domain (full index: library/skills/README.md):`);
|
|
246
|
+
for (const domain of [...groups.keys()].sort()) {
|
|
247
|
+
const group = groups.get(domain);
|
|
248
|
+
console.log(`\n${domain} (${group.length})`);
|
|
249
|
+
for (const s of group)
|
|
250
|
+
console.log(line(s));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
console.log("Available public skills:\n");
|
|
255
|
+
for (const s of skills)
|
|
256
|
+
console.log(line(s));
|
|
257
|
+
}
|
|
258
|
+
const previewCount = skills.filter((s) => s.status === "preview").length;
|
|
259
|
+
if (previewCount > 0) {
|
|
260
|
+
console.log(`\n[preview] = not yet exercised in-engine by the Summer team (${previewCount}); labelled in the skill's guidance. --all / --recommended and summer setup install these like any other skill — add --stable-only to skip them.`);
|
|
424
261
|
}
|
|
425
262
|
console.log("\nInstall recommended: summer skills install --recommended");
|
|
426
263
|
console.log("Install one: summer skills install <name>");
|
|
@@ -430,27 +267,61 @@ skillsCommand
|
|
|
430
267
|
.command("install [name]")
|
|
431
268
|
.description("Install Summer skills for a target agent")
|
|
432
269
|
.option("--all", "Install all available skills")
|
|
433
|
-
.option("--recommended", "Install recommended
|
|
270
|
+
.option("--recommended", "Install only the recommended skill subset (summer setup installs all by default)")
|
|
271
|
+
.option("--stable-only", "With --all / --recommended, skip preview skills (installed by default; labelled preview in their guidance)")
|
|
434
272
|
.option("--agent <agent>", `Target agent: ${AGENT_CLIENTS.join("|")}`)
|
|
435
273
|
.option("--scope <scope>", "Install scope: user or project")
|
|
436
|
-
|
|
437
|
-
.
|
|
274
|
+
// Legacy aliases: still accepted for old scripts, hidden from --help.
|
|
275
|
+
.addOption(new Option("--as-claude-skill", "Legacy alias for --agent claude-code").hideHelp())
|
|
276
|
+
.addOption(new Option("--as-cursor-skill", "Legacy alias for --agent cursor").hideHelp())
|
|
277
|
+
// Pre-reversal opt-in, kept one release as a hidden no-op so old scripts still parse.
|
|
278
|
+
.addOption(new Option("--include-preview", "No-op: preview skills install by default").hideHelp())
|
|
438
279
|
.option("--force", "Overwrite existing skill files (wipe stale skill dirs before copying)")
|
|
439
280
|
.action((name, opts) => {
|
|
440
|
-
const agent =
|
|
441
|
-
const scope =
|
|
281
|
+
const agent = orDie(() => resolveSkillAgent(opts));
|
|
282
|
+
const scope = orDie(() => resolveSkillScope(agent, opts));
|
|
442
283
|
const location = resolveInstallLocation(agent, scope);
|
|
443
|
-
const skills = selectSkills(name, opts);
|
|
284
|
+
const { skills, previewIncluded, previewSkipped } = selectSkills(name, opts);
|
|
444
285
|
if (skills.length === 0) {
|
|
445
286
|
console.log("No skills found.");
|
|
287
|
+
if (previewSkipped > 0)
|
|
288
|
+
console.log(previewSkippedLine(previewSkipped));
|
|
446
289
|
return;
|
|
447
290
|
}
|
|
448
291
|
for (const skill of skills) {
|
|
449
292
|
const result = installSkill(skill, agent, location, {
|
|
450
293
|
force: Boolean(opts.force),
|
|
451
294
|
});
|
|
295
|
+
// Keep this line's shape: setup tallies it (Installed|Updated|Generated <name> -> <path>).
|
|
452
296
|
console.log(` ${result.action} ${skill.name} -> ${result.path}`);
|
|
453
297
|
}
|
|
298
|
+
// Upgrades: with --force, remove the skills Summer installed in 2.8.x that
|
|
299
|
+
// v3 retired or renamed (summer-cloud, the un-prefixed vfx recipes, ...),
|
|
300
|
+
// so no host keeps a skill that points at removed tools.
|
|
301
|
+
if (opts.force && !name && (location.kind === "skill-dir" || location.kind === "opencode-skill-dir")) {
|
|
302
|
+
for (const pruned of pruneRetiredSkills(location.path, getSkillRegistry().map((entry) => entry.name))) {
|
|
303
|
+
console.log(` Removed ${pruned.name} -> ${pruned.path} (retired in 3.0.0)`);
|
|
304
|
+
}
|
|
305
|
+
// Agents that moved from generated rule files to SKILL.md skills in 3.1
|
|
306
|
+
// (Cursor, OpenCode): drop the rule files 3.0 wrote so the agent does not
|
|
307
|
+
// load both for the same slug. Only files with Summer's own naming go.
|
|
308
|
+
if (agent !== "summer" && !process.env.SUMMER_SKILLS_DIR) {
|
|
309
|
+
const legacy = legacyRuleFiles(agentSpec(agent), scope, defaultPathContext(), skills.map((skill) => skill.name)) ?? [];
|
|
310
|
+
for (const file of legacy) {
|
|
311
|
+
if (!existsSync(file))
|
|
312
|
+
continue;
|
|
313
|
+
rmSync(file, { force: true });
|
|
314
|
+
console.log(` Removed ${tildeify(file)} (rule file from Summer 3.0; now a skill)`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (name && skills[0]?.status === "preview") {
|
|
319
|
+
console.log(` Note: ${name} is a preview skill — not yet exercised in-engine by the Summer team; its guidance says so.`);
|
|
320
|
+
}
|
|
321
|
+
if (previewIncluded > 0)
|
|
322
|
+
console.log(previewIncludedLine(previewIncluded));
|
|
323
|
+
if (previewSkipped > 0)
|
|
324
|
+
console.log(previewSkippedLine(previewSkipped));
|
|
454
325
|
// Claude Code: also install slash commands (`tools/summer-cli/commands/*.md`)
|
|
455
326
|
// into `~/.claude/commands/`. Other agents don't have an equivalent today.
|
|
456
327
|
if (agent === "claude-code") {
|
|
@@ -526,11 +397,10 @@ skillsCommand
|
|
|
526
397
|
console.log(`\n${meta.name}`);
|
|
527
398
|
console.log("-".repeat(40));
|
|
528
399
|
console.log(meta.description);
|
|
529
|
-
console.log(`
|
|
400
|
+
console.log(`Id: ${meta.id}`);
|
|
530
401
|
console.log(`Recommended: ${meta.recommended ? "yes" : "no"}`);
|
|
531
|
-
console.log(`
|
|
532
|
-
console.log(`
|
|
533
|
-
console.log(`Test scenario: ${meta.testScenario}`);
|
|
402
|
+
console.log(`Status: ${meta.status}`);
|
|
403
|
+
console.log(`Agents: ${AGENT_CLIENTS.join(", ")}`);
|
|
534
404
|
console.log("\n" + "-".repeat(40));
|
|
535
405
|
const body = content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, "");
|
|
536
406
|
const preview = body.split("\n").slice(0, 30).join("\n");
|