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
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { existsSync } from "fs";
|
|
2
|
-
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
1
|
+
import { existsSync, readFileSync } from "fs";
|
|
2
|
+
import { copyFile, mkdir, readFile, writeFile } from "fs/promises";
|
|
3
3
|
import { dirname, join, resolve } from "path";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
|
+
import { PACKAGE_ROOT } from "../core/package-root.js";
|
|
5
6
|
import { homedir, platform } from "os";
|
|
6
7
|
export const SUMMER_MCP_SERVER_NAME = "summer-engine";
|
|
7
8
|
export const supportedAgents = [
|
|
@@ -64,10 +65,31 @@ export function parseScope(value) {
|
|
|
64
65
|
return normalized;
|
|
65
66
|
return null;
|
|
66
67
|
}
|
|
68
|
+
/** `summer setup [agent] --agent <agent>`: positional and option must agree;
|
|
69
|
+
* throws with a user-facing message when neither names a supported agent. */
|
|
70
|
+
export function resolveAgentSelection(agentArg, agentOpt) {
|
|
71
|
+
if (agentArg && agentOpt && parseAgent(agentArg) !== parseAgent(agentOpt)) {
|
|
72
|
+
throw new Error("Specify the agent either positionally or with --agent, not both.");
|
|
73
|
+
}
|
|
74
|
+
const parsed = parseAgent(agentOpt ?? agentArg);
|
|
75
|
+
if (!parsed) {
|
|
76
|
+
throw new Error(`Specify an agent: ${supportedAgents.join(", ")}`);
|
|
77
|
+
}
|
|
78
|
+
return parsed;
|
|
79
|
+
}
|
|
80
|
+
/** `--scope` with a user-facing error; absent means "user". */
|
|
81
|
+
export function resolveConfigScope(scopeOpt) {
|
|
82
|
+
const parsed = parseScope(scopeOpt);
|
|
83
|
+
if (!parsed) {
|
|
84
|
+
throw new Error("Invalid --scope. Use user or project.");
|
|
85
|
+
}
|
|
86
|
+
return parsed;
|
|
87
|
+
}
|
|
67
88
|
export async function configureAgentMcp(options) {
|
|
68
89
|
const env = options.env ?? process.env;
|
|
69
90
|
const cwd = resolve(options.cwd ?? process.cwd());
|
|
70
|
-
const
|
|
91
|
+
const channel = normalizeChannel(options.channel);
|
|
92
|
+
const server = createSummerMcpServerConfig(Boolean(options.localDev), process.platform, channel);
|
|
71
93
|
const target = resolveConfigTarget(options.agent, options.scope, cwd, env);
|
|
72
94
|
const snippet = renderConfigSnippet(options.agent, server);
|
|
73
95
|
const dryRun = Boolean(options.dryRun);
|
|
@@ -99,11 +121,26 @@ export async function configureAgentMcp(options) {
|
|
|
99
121
|
dryRun,
|
|
100
122
|
print,
|
|
101
123
|
localDev: Boolean(options.localDev),
|
|
124
|
+
channel,
|
|
102
125
|
warnings: target.warnings,
|
|
103
126
|
nextSteps: createNextSteps(options.agent, options.scope, target.path),
|
|
104
127
|
};
|
|
105
128
|
}
|
|
106
|
-
export
|
|
129
|
+
export const DEFAULT_CHANNEL = "latest";
|
|
130
|
+
/** npm dist-tags are lowercase words like `latest`, `next`, `beta`, `v3-preview`;
|
|
131
|
+
* anything that could be read as a version or a path is refused (a bare
|
|
132
|
+
* version belongs in a version bump, not a channel). */
|
|
133
|
+
export function normalizeChannel(channel) {
|
|
134
|
+
const value = (channel ?? "").trim();
|
|
135
|
+
if (value === "")
|
|
136
|
+
return DEFAULT_CHANNEL;
|
|
137
|
+
if (!/^[a-z][a-z0-9-]*$/.test(value) || /^v?\d/.test(value)) {
|
|
138
|
+
throw new Error(`Invalid channel "${channel}": use an npm dist-tag such as latest or next (lowercase letters, digits, hyphens).`);
|
|
139
|
+
}
|
|
140
|
+
return value;
|
|
141
|
+
}
|
|
142
|
+
export function createSummerMcpServerConfig(localDev, platform = process.platform, channel = DEFAULT_CHANNEL) {
|
|
143
|
+
const spec = `summer-engine@${normalizeChannel(channel)}`;
|
|
107
144
|
if (localDev) {
|
|
108
145
|
// node is a real executable on every platform; spawn("node") resolves fine.
|
|
109
146
|
return {
|
|
@@ -118,12 +155,12 @@ export function createSummerMcpServerConfig(localDev, platform = process.platfor
|
|
|
118
155
|
if (platform === "win32") {
|
|
119
156
|
return {
|
|
120
157
|
command: "cmd.exe",
|
|
121
|
-
args: ["/c", "npx", "-y",
|
|
158
|
+
args: ["/c", "npx", "-y", spec, "mcp"],
|
|
122
159
|
};
|
|
123
160
|
}
|
|
124
161
|
return {
|
|
125
162
|
command: "npx",
|
|
126
|
-
args: ["-y",
|
|
163
|
+
args: ["-y", spec, "mcp"],
|
|
127
164
|
};
|
|
128
165
|
}
|
|
129
166
|
export function renderConfigSnippet(agent, server) {
|
|
@@ -153,7 +190,7 @@ export function renderConfigSnippet(agent, server) {
|
|
|
153
190
|
}, null, 2) + "\n");
|
|
154
191
|
}
|
|
155
192
|
if (agent === "gemini") {
|
|
156
|
-
return (
|
|
193
|
+
return renderJsonFile(geminiExtensionManifest(server, readBundledGeminiManifestSync()));
|
|
157
194
|
}
|
|
158
195
|
return (JSON.stringify({
|
|
159
196
|
mcpServers: {
|
|
@@ -165,6 +202,14 @@ function resolveLocalCliPath() {
|
|
|
165
202
|
const thisFile = fileURLToPath(import.meta.url);
|
|
166
203
|
return resolve(dirname(thisFile), "..", "bin", "summer.js");
|
|
167
204
|
}
|
|
205
|
+
/** Installed package root (dist/ and src/ alike). */
|
|
206
|
+
export function resolvePackageRoot() {
|
|
207
|
+
return PACKAGE_ROOT;
|
|
208
|
+
}
|
|
209
|
+
/** Directory name Gemini expects the extension under; the manifest `name` must match it. */
|
|
210
|
+
export const GEMINI_EXTENSION_DIR_NAME = "summer-engine";
|
|
211
|
+
/** Files copied next to the extension manifest so `contextFileName` (GEMINI.md, which imports AGENTS.md) resolves. */
|
|
212
|
+
const GEMINI_CONTEXT_FILES = ["GEMINI.md", "AGENTS.md"];
|
|
168
213
|
function resolveConfigTarget(agent, scope, cwd, env) {
|
|
169
214
|
const override = getConfigPathOverride(agent, env);
|
|
170
215
|
const warnings = [];
|
|
@@ -459,15 +504,98 @@ async function upsertVsCodeMcpConfig(path, server, write) {
|
|
|
459
504
|
}
|
|
460
505
|
async function upsertGeminiExtension(path, server, write) {
|
|
461
506
|
const current = await readJsonConfig(path);
|
|
462
|
-
const
|
|
507
|
+
const bundled = await readBundledGeminiManifest();
|
|
508
|
+
const next = geminiExtensionManifest(server, bundled, current);
|
|
463
509
|
const currentRendered = renderJsonFile(current);
|
|
464
510
|
const nextRendered = renderJsonFile(next);
|
|
465
|
-
|
|
511
|
+
let changed = currentRendered !== nextRendered;
|
|
466
512
|
if (write && changed) {
|
|
467
513
|
await writeTextFile(path, nextRendered);
|
|
468
514
|
}
|
|
515
|
+
// GEMINI.md (the declared contextFileName) and AGENTS.md (which it imports)
|
|
516
|
+
// must sit next to the manifest or Gemini has no context file to load.
|
|
517
|
+
const extensionDir = dirname(path);
|
|
518
|
+
const packageRoot = resolvePackageRoot();
|
|
519
|
+
for (const name of GEMINI_CONTEXT_FILES) {
|
|
520
|
+
const src = join(packageRoot, name);
|
|
521
|
+
if (!existsSync(src))
|
|
522
|
+
continue;
|
|
523
|
+
const dest = join(extensionDir, name);
|
|
524
|
+
const srcText = await readFile(src, "utf-8");
|
|
525
|
+
const destText = existsSync(dest) ? await readFile(dest, "utf-8") : null;
|
|
526
|
+
if (destText === srcText)
|
|
527
|
+
continue;
|
|
528
|
+
changed = true;
|
|
529
|
+
if (write) {
|
|
530
|
+
await mkdir(extensionDir, { recursive: true, mode: 0o700 });
|
|
531
|
+
await copyFile(src, dest);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
469
534
|
return { changed };
|
|
470
535
|
}
|
|
536
|
+
/**
|
|
537
|
+
* The GENERATED gemini-extension.json shipped at the package root
|
|
538
|
+
* (registry/generated/gemini-extension.json -> gemini-extension.json). Absent
|
|
539
|
+
* only in broken installs; the installer then falls back to a minimal manifest.
|
|
540
|
+
*/
|
|
541
|
+
async function readBundledGeminiManifest() {
|
|
542
|
+
const path = join(resolvePackageRoot(), "gemini-extension.json");
|
|
543
|
+
if (!existsSync(path))
|
|
544
|
+
return {};
|
|
545
|
+
try {
|
|
546
|
+
return await readJsonConfig(path);
|
|
547
|
+
}
|
|
548
|
+
catch {
|
|
549
|
+
return {};
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
function readBundledGeminiManifestSync() {
|
|
553
|
+
const path = join(resolvePackageRoot(), "gemini-extension.json");
|
|
554
|
+
if (!existsSync(path))
|
|
555
|
+
return {};
|
|
556
|
+
try {
|
|
557
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
558
|
+
return isJsonObject(parsed) ? parsed : {};
|
|
559
|
+
}
|
|
560
|
+
catch {
|
|
561
|
+
return {};
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Manifest written to ~/.gemini/extensions/summer-engine/gemini-extension.json.
|
|
566
|
+
*
|
|
567
|
+
* Starts from the generated package manifest (version, description, settings,
|
|
568
|
+
* contextFileName, ...) so the installed copy never drifts from the registry,
|
|
569
|
+
* then overrides what only makes sense at install time:
|
|
570
|
+
* - `name` = the extension directory name (Gemini requires them to match;
|
|
571
|
+
* geminicli.com/docs/extensions/reference), which is "summer-engine".
|
|
572
|
+
* - `mcpServers` = the same launcher every other host gets (npx -y ...@latest,
|
|
573
|
+
* cmd.exe-wrapped on Windows). The bundled entry runs from `${extensionPath}`
|
|
574
|
+
* where no package is installed, and that only works inside the npm layout.
|
|
575
|
+
* - `skills` is dropped: Gemini has no such manifest field; it discovers
|
|
576
|
+
* <extension>/skills/<name>/SKILL.md, which `summer skills install --agent
|
|
577
|
+
* gemini` writes.
|
|
578
|
+
* - the `_generated` banner is dropped: this file is written by the installer.
|
|
579
|
+
* Unknown keys already present in the user's file (`base`) are preserved.
|
|
580
|
+
*/
|
|
581
|
+
function geminiExtensionManifest(server, bundled, base = {}) {
|
|
582
|
+
const { _generated: _banner, skills: _skills, ...fromPackage } = bundled;
|
|
583
|
+
const manifest = { ...base, ...fromPackage };
|
|
584
|
+
manifest.name = GEMINI_EXTENSION_DIR_NAME;
|
|
585
|
+
if (typeof manifest.description !== "string") {
|
|
586
|
+
manifest.description =
|
|
587
|
+
"Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills.";
|
|
588
|
+
}
|
|
589
|
+
manifest.contextFileName = "GEMINI.md";
|
|
590
|
+
manifest.mcpServers = {
|
|
591
|
+
[SUMMER_MCP_SERVER_NAME]: {
|
|
592
|
+
command: server.command,
|
|
593
|
+
args: server.args,
|
|
594
|
+
...(server.env && Object.keys(server.env).length > 0 ? { env: { ...server.env } } : {}),
|
|
595
|
+
},
|
|
596
|
+
};
|
|
597
|
+
return manifest;
|
|
598
|
+
}
|
|
471
599
|
function opencodeServerEntry(server) {
|
|
472
600
|
const entry = {
|
|
473
601
|
type: "local",
|
|
@@ -501,20 +629,6 @@ function vsCodeServerEntry(server) {
|
|
|
501
629
|
}
|
|
502
630
|
return entry;
|
|
503
631
|
}
|
|
504
|
-
function geminiExtensionManifest(server, base = {}) {
|
|
505
|
-
const manifest = { ...base };
|
|
506
|
-
manifest.name = "summer";
|
|
507
|
-
manifest.description =
|
|
508
|
-
"Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the Summer skills.";
|
|
509
|
-
manifest.contextFileName = "GEMINI.md";
|
|
510
|
-
manifest.mcpServers = {
|
|
511
|
-
[SUMMER_MCP_SERVER_NAME]: {
|
|
512
|
-
command: server.command,
|
|
513
|
-
args: server.args,
|
|
514
|
-
},
|
|
515
|
-
};
|
|
516
|
-
return manifest;
|
|
517
|
-
}
|
|
518
632
|
async function readTextFileIfExists(path) {
|
|
519
633
|
if (!existsSync(path))
|
|
520
634
|
return "";
|
|
@@ -608,7 +722,7 @@ function createNextSteps(agent, scope, path) {
|
|
|
608
722
|
: agent === "lm-studio"
|
|
609
723
|
? "Open LM Studio, toggle on the summer-engine MCP server in the Program tab, and raise the loaded model's context length to 32k or higher."
|
|
610
724
|
: agent === "gemini"
|
|
611
|
-
? "Run `
|
|
725
|
+
? "Run `summer skills install --all --agent gemini` if skills were not installed, then restart Gemini CLI (or `gemini extensions enable summer-engine` if it is disabled)."
|
|
612
726
|
: agent === "github-copilot"
|
|
613
727
|
? "Restart Copilot CLI, or run /mcp reload and /skills reload in the active session."
|
|
614
728
|
: agent === "vscode-copilot"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill directory names the 2.8.x package installed into hosts' skill folders
|
|
3
|
+
* (`~/.claude/skills/<name>` and the equivalents). v3 flattened and renamed
|
|
4
|
+
* the library, so a `summer setup --force` on an upgraded machine must remove
|
|
5
|
+
* the entries Summer itself installed that no longer exist — otherwise a
|
|
6
|
+
* retired skill such as `summer-cloud` stays behind and keeps telling agents
|
|
7
|
+
* to call tools that were removed (release review P1-2, 2026-09-11).
|
|
8
|
+
*
|
|
9
|
+
* The list is exactly the SKILL.md basenames shipped in summer-engine@2.8.2.
|
|
10
|
+
* Pruning removes a name ONLY when it is absent from the current registry, so
|
|
11
|
+
* a slug that returns to the library is never touched, and never removes a
|
|
12
|
+
* directory that has no SKILL.md (not a skill Summer wrote).
|
|
13
|
+
*/
|
|
14
|
+
export declare const LEGACY_SKILL_SLUGS_2_8_2: readonly string[];
|
|
15
|
+
export interface PrunedSkill {
|
|
16
|
+
name: string;
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
/** Names Summer installed in 2.8.x that the current registry no longer ships. */
|
|
20
|
+
export declare function retiredSkillNames(currentSkillNames: Iterable<string>): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Remove retired Summer skill directories from one host skill folder. Only
|
|
23
|
+
* directories that still contain a SKILL.md are removed (that is what Summer
|
|
24
|
+
* wrote); anything else with a colliding name is left alone.
|
|
25
|
+
*/
|
|
26
|
+
export declare function pruneRetiredSkills(skillsDir: string, currentSkillNames: Iterable<string>): PrunedSkill[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { existsSync, rmSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Skill directory names the 2.8.x package installed into hosts' skill folders
|
|
5
|
+
* (`~/.claude/skills/<name>` and the equivalents). v3 flattened and renamed
|
|
6
|
+
* the library, so a `summer setup --force` on an upgraded machine must remove
|
|
7
|
+
* the entries Summer itself installed that no longer exist — otherwise a
|
|
8
|
+
* retired skill such as `summer-cloud` stays behind and keeps telling agents
|
|
9
|
+
* to call tools that were removed (release review P1-2, 2026-09-11).
|
|
10
|
+
*
|
|
11
|
+
* The list is exactly the SKILL.md basenames shipped in summer-engine@2.8.2.
|
|
12
|
+
* Pruning removes a name ONLY when it is absent from the current registry, so
|
|
13
|
+
* a slug that returns to the library is never touched, and never removes a
|
|
14
|
+
* directory that has no SKILL.md (not a skill Summer wrote).
|
|
15
|
+
*/
|
|
16
|
+
export const LEGACY_SKILL_SLUGS_2_8_2 = [
|
|
17
|
+
"character-portrait", "concept-art", "create-asset-sheet", "instantiate-asset-pack", "pixel-art",
|
|
18
|
+
"skybox-panorama", "sprite-sheet", "tileable-texture", "ui-graphics", "use-widget-asset",
|
|
19
|
+
"character-model", "environment-kit", "organic-model", "prop-model", "vehicle-model",
|
|
20
|
+
"design-npc", "animation-tree", "facial-and-lipsync", "generate-motion", "procedural-animation",
|
|
21
|
+
"retarget", "asset-strategy", "adaptive-music", "ambient-bed", "audio-direction", "music-track",
|
|
22
|
+
"sound-effect", "voice-line", "fps-controller", "debug", "export-and-ship", "remote-deploy",
|
|
23
|
+
"auto-fire-targeting", "design-mechanic", "design-level", "scene-to-level",
|
|
24
|
+
"host-authoritative-state", "peer-to-peer-multiplayer", "setup-multiplayer", "tune-performance",
|
|
25
|
+
"3d-lighting", "art-direction", "brainstorm-game", "browse-templates", "make-game", "new-project",
|
|
26
|
+
"play", "scene-composition", "summer-cloud", "gdscript-patterns", "ui-basics", "animated-loop",
|
|
27
|
+
"cinematic-cutscene", "trailer-shot", "game-feel", "dissolve", "fire", "hit-spark", "lightning",
|
|
28
|
+
"magic-glow", "muzzle-flash", "smoke", "water-ripple", "brainstorming", "debugging-game-feel",
|
|
29
|
+
"diagnosing-perf-regressions", "dispatching-parallel-agents", "gameskill", "headless-scripting",
|
|
30
|
+
"investigating-bugs", "mcpupdate", "playtesting-a-feature", "skill-create", "skill-improve",
|
|
31
|
+
"skill-test", "using-summer", "verification-before-completion", "writing-plans", "writing-skills",
|
|
32
|
+
];
|
|
33
|
+
/** Names Summer installed in 2.8.x that the current registry no longer ships. */
|
|
34
|
+
export function retiredSkillNames(currentSkillNames) {
|
|
35
|
+
const current = new Set(currentSkillNames);
|
|
36
|
+
return LEGACY_SKILL_SLUGS_2_8_2.filter((name) => !current.has(name));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Remove retired Summer skill directories from one host skill folder. Only
|
|
40
|
+
* directories that still contain a SKILL.md are removed (that is what Summer
|
|
41
|
+
* wrote); anything else with a colliding name is left alone.
|
|
42
|
+
*/
|
|
43
|
+
export function pruneRetiredSkills(skillsDir, currentSkillNames) {
|
|
44
|
+
const pruned = [];
|
|
45
|
+
for (const name of retiredSkillNames(currentSkillNames)) {
|
|
46
|
+
const dir = join(skillsDir, name);
|
|
47
|
+
if (!existsSync(join(dir, "SKILL.md")))
|
|
48
|
+
continue;
|
|
49
|
+
rmSync(dir, { recursive: true, force: true });
|
|
50
|
+
pruned.push({ name, path: dir });
|
|
51
|
+
}
|
|
52
|
+
return pruned;
|
|
53
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { SupportedAgent } from "./agent-config.js";
|
|
2
|
+
export interface SkillSetupResult {
|
|
3
|
+
status: "installed" | "planned" | "skipped" | "failed";
|
|
4
|
+
message: string;
|
|
5
|
+
command?: string[];
|
|
6
|
+
stdout?: string;
|
|
7
|
+
stderr?: string;
|
|
8
|
+
/** Number of skills selected for install (all, or the recommended subset). */
|
|
9
|
+
count?: number;
|
|
10
|
+
/** Preview skills installed alongside the stable ones (the default). */
|
|
11
|
+
previewIncluded?: number;
|
|
12
|
+
/** Preview skills left out because --stable-only was given. */
|
|
13
|
+
previewSkipped?: number;
|
|
14
|
+
/** Where the skills land, e.g. "~/.claude/skills/<skill>/SKILL.md". */
|
|
15
|
+
destination?: string;
|
|
16
|
+
/** Post-install tallies parsed from `skills install` output. */
|
|
17
|
+
installed?: {
|
|
18
|
+
total: number;
|
|
19
|
+
added: number;
|
|
20
|
+
updated: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface SkillInstallInvocation {
|
|
24
|
+
command: string;
|
|
25
|
+
args: string[];
|
|
26
|
+
display: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface SkillSetupOptions {
|
|
29
|
+
dryRun: boolean;
|
|
30
|
+
yes: boolean;
|
|
31
|
+
force: boolean;
|
|
32
|
+
/** Skills scope; defaults to the MCP scope so both land in the same place. */
|
|
33
|
+
scope?: "user" | "project";
|
|
34
|
+
/** Install only `recommended: true` skills instead of the whole library. */
|
|
35
|
+
recommended?: boolean;
|
|
36
|
+
/** Skip `status: preview` skills. By default they install like any other
|
|
37
|
+
* skill — preview is a label carried in the skill's guidance, not a gate. */
|
|
38
|
+
stableOnly?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The preview clause of the setup summary — one wording for the result message
|
|
42
|
+
* and the CLI line, e.g. "10 preview — labelled in each skill's guidance; use
|
|
43
|
+
* --stable-only to skip". Empty when there is nothing to say.
|
|
44
|
+
*/
|
|
45
|
+
export declare function previewNote(result: {
|
|
46
|
+
previewIncluded?: number;
|
|
47
|
+
previewSkipped?: number;
|
|
48
|
+
}): string;
|
|
49
|
+
/**
|
|
50
|
+
* Install the Summer skill library for an agent as part of `summer setup`.
|
|
51
|
+
*
|
|
52
|
+
* Installs EVERY library skill by default: skills are progressive-disclosure
|
|
53
|
+
* (name + description in context, body on activation), and the session entry
|
|
54
|
+
* skill `using-summer` is not in the recommended subset, so a
|
|
55
|
+
* recommended-only default left the documented starting point uninstalled.
|
|
56
|
+
* `--recommended` keeps the smaller subset as an opt-in; `--stable-only` drops
|
|
57
|
+
* the preview skills (installed by default, labelled in their guidance).
|
|
58
|
+
*/
|
|
59
|
+
export declare function setupSkills(agent: SupportedAgent, options: SkillSetupOptions): SkillSetupResult;
|
|
60
|
+
/** @deprecated use setupSkills; kept for older callers. */
|
|
61
|
+
export declare const setupRecommendedSkills: (agent: SupportedAgent, options: {
|
|
62
|
+
dryRun: boolean;
|
|
63
|
+
yes: boolean;
|
|
64
|
+
force: boolean;
|
|
65
|
+
}) => SkillSetupResult;
|
|
66
|
+
/**
|
|
67
|
+
* Count `skills install` result lines. Directory installs print
|
|
68
|
+
* "Installed <skill> -> <path>" for new copies and "Updated <skill> -> <path>"
|
|
69
|
+
* for re-installs; rule-file agents (Cursor, Cline, ...) always print
|
|
70
|
+
* "Generated <skill> -> <path>" and are counted as updated-or-new (added).
|
|
71
|
+
*/
|
|
72
|
+
export declare function tallyInstallOutput(stdout: string): {
|
|
73
|
+
total: number;
|
|
74
|
+
added: number;
|
|
75
|
+
updated: number;
|
|
76
|
+
};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { spawnSync } from "child_process";
|
|
2
|
+
import { AGENT_CLIENTS, getSkillRegistry, selectSkillsForBulkInstall, } from "../core/skills-registry.js";
|
|
3
|
+
import { describeInstallLocation, resolveInstallLocation } from "./skill-locations.js";
|
|
4
|
+
/**
|
|
5
|
+
* The preview clause of the setup summary — one wording for the result message
|
|
6
|
+
* and the CLI line, e.g. "10 preview — labelled in each skill's guidance; use
|
|
7
|
+
* --stable-only to skip". Empty when there is nothing to say.
|
|
8
|
+
*/
|
|
9
|
+
export function previewNote(result) {
|
|
10
|
+
if (result.previewIncluded) {
|
|
11
|
+
return `${result.previewIncluded} preview — labelled in each skill's guidance; use --stable-only to skip`;
|
|
12
|
+
}
|
|
13
|
+
if (result.previewSkipped) {
|
|
14
|
+
return `${result.previewSkipped} preview skipped by --stable-only`;
|
|
15
|
+
}
|
|
16
|
+
return "";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Install the Summer skill library for an agent as part of `summer setup`.
|
|
20
|
+
*
|
|
21
|
+
* Installs EVERY library skill by default: skills are progressive-disclosure
|
|
22
|
+
* (name + description in context, body on activation), and the session entry
|
|
23
|
+
* skill `using-summer` is not in the recommended subset, so a
|
|
24
|
+
* recommended-only default left the documented starting point uninstalled.
|
|
25
|
+
* `--recommended` keeps the smaller subset as an opt-in; `--stable-only` drops
|
|
26
|
+
* the preview skills (installed by default, labelled in their guidance).
|
|
27
|
+
*/
|
|
28
|
+
export function setupSkills(agent, options) {
|
|
29
|
+
if (agent === "lm-studio") {
|
|
30
|
+
return {
|
|
31
|
+
status: "skipped",
|
|
32
|
+
message: "LM Studio has no rules or skills folder. The MCP server ships summer_get_agent_playbook, so the model can pull Summer guidance in-chat.",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const scope = options.scope ?? "user";
|
|
36
|
+
const recommended = Boolean(options.recommended);
|
|
37
|
+
const stableOnly = Boolean(options.stableOnly);
|
|
38
|
+
const invocation = skillInstallInvocation(agent, {
|
|
39
|
+
force: options.force,
|
|
40
|
+
scope,
|
|
41
|
+
recommended,
|
|
42
|
+
stableOnly,
|
|
43
|
+
});
|
|
44
|
+
if (!invocation) {
|
|
45
|
+
return {
|
|
46
|
+
status: "skipped",
|
|
47
|
+
message: "No automatic skill installer is available for this agent yet. Run `summer skills install --all` and point the agent at the installed SKILL.md files.",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(getSkillRegistry(), { recommended, stableOnly });
|
|
51
|
+
const count = selected.length;
|
|
52
|
+
const note = previewNote({ previewIncluded, previewSkipped });
|
|
53
|
+
const destination = isAgentClient(agent)
|
|
54
|
+
? describeInstallLocation(resolveInstallLocation(agent, scope))
|
|
55
|
+
: undefined;
|
|
56
|
+
const subset = recommended ? "recommended " : "";
|
|
57
|
+
if (options.dryRun || !options.yes) {
|
|
58
|
+
return {
|
|
59
|
+
status: "planned",
|
|
60
|
+
command: invocation.display,
|
|
61
|
+
count,
|
|
62
|
+
previewIncluded,
|
|
63
|
+
previewSkipped,
|
|
64
|
+
destination,
|
|
65
|
+
message: `Would install ${count} ${subset}skills${note ? ` (${note})` : ""} to ${destination ?? "the agent's skills directory"} with: ${invocation.display.join(" ")}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const result = spawnSync(invocation.command, invocation.args, {
|
|
69
|
+
env: process.env,
|
|
70
|
+
encoding: "utf-8",
|
|
71
|
+
});
|
|
72
|
+
if (result.status === 0) {
|
|
73
|
+
const installed = tallyInstallOutput(result.stdout);
|
|
74
|
+
return {
|
|
75
|
+
status: "installed",
|
|
76
|
+
command: invocation.display,
|
|
77
|
+
count,
|
|
78
|
+
previewIncluded,
|
|
79
|
+
previewSkipped,
|
|
80
|
+
destination,
|
|
81
|
+
installed,
|
|
82
|
+
message: `Installed ${installed.total} ${subset}skills (${installed.added} new, ${installed.updated} updated${note ? `; ${note}` : ""}).`,
|
|
83
|
+
stdout: result.stdout.trim(),
|
|
84
|
+
stderr: result.stderr.trim(),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
status: "failed",
|
|
89
|
+
command: invocation.display,
|
|
90
|
+
count,
|
|
91
|
+
destination,
|
|
92
|
+
message: `Skill install failed with exit code ${result.status ?? "unknown"}.`,
|
|
93
|
+
stdout: result.stdout.trim(),
|
|
94
|
+
stderr: result.stderr.trim(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/** @deprecated use setupSkills; kept for older callers. */
|
|
98
|
+
export const setupRecommendedSkills = (agent, options) => setupSkills(agent, { ...options, recommended: true });
|
|
99
|
+
function isAgentClient(agent) {
|
|
100
|
+
return AGENT_CLIENTS.includes(agent);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Count `skills install` result lines. Directory installs print
|
|
104
|
+
* "Installed <skill> -> <path>" for new copies and "Updated <skill> -> <path>"
|
|
105
|
+
* for re-installs; rule-file agents (Cursor, Cline, ...) always print
|
|
106
|
+
* "Generated <skill> -> <path>" and are counted as updated-or-new (added).
|
|
107
|
+
*/
|
|
108
|
+
export function tallyInstallOutput(stdout) {
|
|
109
|
+
let added = 0;
|
|
110
|
+
let updated = 0;
|
|
111
|
+
for (const line of stdout.split("\n")) {
|
|
112
|
+
const m = line.match(/^\s*(Installed|Updated|Generated)\s+([a-z0-9-]+)\s+->/i);
|
|
113
|
+
if (!m)
|
|
114
|
+
continue;
|
|
115
|
+
if (m[1].toLowerCase() === "updated")
|
|
116
|
+
updated += 1;
|
|
117
|
+
else
|
|
118
|
+
added += 1;
|
|
119
|
+
}
|
|
120
|
+
return { total: added + updated, added, updated };
|
|
121
|
+
}
|
|
122
|
+
function skillInstallInvocation(agent, opts) {
|
|
123
|
+
const cliPath = process.argv[1];
|
|
124
|
+
if (!cliPath)
|
|
125
|
+
return null;
|
|
126
|
+
const command = cliPath.endsWith(".js") ? process.execPath : cliPath;
|
|
127
|
+
const prefix = cliPath.endsWith(".js") ? [cliPath] : [];
|
|
128
|
+
const baseArgs = [
|
|
129
|
+
"skills",
|
|
130
|
+
"install",
|
|
131
|
+
opts.recommended ? "--recommended" : "--all",
|
|
132
|
+
"--agent",
|
|
133
|
+
agent,
|
|
134
|
+
"--scope",
|
|
135
|
+
opts.scope,
|
|
136
|
+
];
|
|
137
|
+
if (opts.force)
|
|
138
|
+
baseArgs.push("--force");
|
|
139
|
+
if (opts.stableOnly)
|
|
140
|
+
baseArgs.push("--stable-only");
|
|
141
|
+
return {
|
|
142
|
+
command,
|
|
143
|
+
args: [...prefix, ...baseArgs],
|
|
144
|
+
display: [cliPath, ...baseArgs],
|
|
145
|
+
};
|
|
146
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where `summer skills install` puts skills for each agent client.
|
|
3
|
+
*
|
|
4
|
+
* Lives in the installer layer (not cli/) so `summer setup` can report the
|
|
5
|
+
* destination and count without importing the CLI (import-direction contract
|
|
6
|
+
* §2: shared layers never import cli or mcp).
|
|
7
|
+
*/
|
|
8
|
+
import { type AgentClient } from "../core/skills-registry.js";
|
|
9
|
+
export declare const SKILL_SCOPES: readonly ["user", "project"];
|
|
10
|
+
export type SkillScope = (typeof SKILL_SCOPES)[number];
|
|
11
|
+
/** The agent/scope flags `summer skills install` accepts (legacy aliases included). */
|
|
12
|
+
export interface SkillInstallSelection {
|
|
13
|
+
agent?: string;
|
|
14
|
+
scope?: string;
|
|
15
|
+
asClaudeSkill?: boolean;
|
|
16
|
+
asCursorSkill?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Throws with a user-facing message on an unknown agent. */
|
|
19
|
+
export declare function parseSkillAgent(value: string): AgentClient;
|
|
20
|
+
/** Throws with a user-facing message on an unknown scope. */
|
|
21
|
+
export declare function parseSkillScope(value: string): SkillScope;
|
|
22
|
+
/** Pick the agent from --agent / legacy --as-claude-skill / --as-cursor-skill
|
|
23
|
+
* (default "summer"); throws on conflicting flags. */
|
|
24
|
+
export declare function resolveSkillAgent(opts: SkillInstallSelection): AgentClient;
|
|
25
|
+
/** Explicit --scope wins; otherwise project-rooted agents default to "project". */
|
|
26
|
+
export declare function resolveSkillScope(agent: AgentClient, opts: SkillInstallSelection): SkillScope;
|
|
27
|
+
export type InstallLocation = {
|
|
28
|
+
kind: "skill-dir";
|
|
29
|
+
path: string;
|
|
30
|
+
} | {
|
|
31
|
+
kind: "cursor-rule-dir";
|
|
32
|
+
path: string;
|
|
33
|
+
} | {
|
|
34
|
+
kind: "windsurf-rule-file";
|
|
35
|
+
path: string;
|
|
36
|
+
} | {
|
|
37
|
+
kind: "cline-rule-dir";
|
|
38
|
+
path: string;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "opencode-skill-dir";
|
|
41
|
+
path: string;
|
|
42
|
+
};
|
|
43
|
+
export declare function resolveInstallLocation(agent: AgentClient, scope: SkillScope): InstallLocation;
|
|
44
|
+
/** One-line, human path pattern for where an install location puts skills. */
|
|
45
|
+
export declare function describeInstallLocation(location: InstallLocation): string;
|