summer-engine 2.8.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +134 -41
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +159 -391
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/{commands → cli/commands}/setup.js +43 -89
- package/dist/{commands → cli/commands}/skills.js +85 -222
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +47 -0
- package/dist/core/skills-registry.js +83 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/{lib → installer}/agent-config.d.ts +20 -1
- package/dist/{lib → installer}/agent-config.js +148 -23
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +146 -0
- package/dist/installer/skill-locations.d.ts +45 -0
- package/dist/installer/skill-locations.js +170 -0
- package/dist/installer/version-check.d.ts +174 -0
- package/dist/{lib → installer}/version-check.js +173 -42
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +70 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/cline/README.md +13 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +16 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/opencode/README.md +15 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +13 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +13 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +23 -23
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +9 -1
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +22 -16
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-registry.json +851 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/status.js +0 -46
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -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,20 +121,46 @@ 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) {
|
|
145
|
+
// node is a real executable on every platform; spawn("node") resolves fine.
|
|
108
146
|
return {
|
|
109
147
|
command: "node",
|
|
110
148
|
args: [resolveLocalCliPath(), "mcp"],
|
|
111
149
|
};
|
|
112
150
|
}
|
|
151
|
+
// On Windows, npx is a .cmd/.ps1 shim, and Node's spawn() does not do PATHEXT
|
|
152
|
+
// resolution — hosts that spawn("npx") directly (Claude Code, Kimi Code,
|
|
153
|
+
// Cursor, ...) fail with ENOENT even though npx works in a terminal. Route
|
|
154
|
+
// through cmd.exe so the shim resolves. (User-reported: Imitater967, 2026-09-01.)
|
|
155
|
+
if (platform === "win32") {
|
|
156
|
+
return {
|
|
157
|
+
command: "cmd.exe",
|
|
158
|
+
args: ["/c", "npx", "-y", spec, "mcp"],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
113
161
|
return {
|
|
114
162
|
command: "npx",
|
|
115
|
-
args: ["-y",
|
|
163
|
+
args: ["-y", spec, "mcp"],
|
|
116
164
|
};
|
|
117
165
|
}
|
|
118
166
|
export function renderConfigSnippet(agent, server) {
|
|
@@ -142,7 +190,7 @@ export function renderConfigSnippet(agent, server) {
|
|
|
142
190
|
}, null, 2) + "\n");
|
|
143
191
|
}
|
|
144
192
|
if (agent === "gemini") {
|
|
145
|
-
return (
|
|
193
|
+
return renderJsonFile(geminiExtensionManifest(server, readBundledGeminiManifestSync()));
|
|
146
194
|
}
|
|
147
195
|
return (JSON.stringify({
|
|
148
196
|
mcpServers: {
|
|
@@ -154,6 +202,14 @@ function resolveLocalCliPath() {
|
|
|
154
202
|
const thisFile = fileURLToPath(import.meta.url);
|
|
155
203
|
return resolve(dirname(thisFile), "..", "bin", "summer.js");
|
|
156
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"];
|
|
157
213
|
function resolveConfigTarget(agent, scope, cwd, env) {
|
|
158
214
|
const override = getConfigPathOverride(agent, env);
|
|
159
215
|
const warnings = [];
|
|
@@ -448,15 +504,98 @@ async function upsertVsCodeMcpConfig(path, server, write) {
|
|
|
448
504
|
}
|
|
449
505
|
async function upsertGeminiExtension(path, server, write) {
|
|
450
506
|
const current = await readJsonConfig(path);
|
|
451
|
-
const
|
|
507
|
+
const bundled = await readBundledGeminiManifest();
|
|
508
|
+
const next = geminiExtensionManifest(server, bundled, current);
|
|
452
509
|
const currentRendered = renderJsonFile(current);
|
|
453
510
|
const nextRendered = renderJsonFile(next);
|
|
454
|
-
|
|
511
|
+
let changed = currentRendered !== nextRendered;
|
|
455
512
|
if (write && changed) {
|
|
456
513
|
await writeTextFile(path, nextRendered);
|
|
457
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
|
+
}
|
|
458
534
|
return { changed };
|
|
459
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
|
+
}
|
|
460
599
|
function opencodeServerEntry(server) {
|
|
461
600
|
const entry = {
|
|
462
601
|
type: "local",
|
|
@@ -490,20 +629,6 @@ function vsCodeServerEntry(server) {
|
|
|
490
629
|
}
|
|
491
630
|
return entry;
|
|
492
631
|
}
|
|
493
|
-
function geminiExtensionManifest(server, base = {}) {
|
|
494
|
-
const manifest = { ...base };
|
|
495
|
-
manifest.name = "summer";
|
|
496
|
-
manifest.description =
|
|
497
|
-
"Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the Summer skills.";
|
|
498
|
-
manifest.contextFileName = "GEMINI.md";
|
|
499
|
-
manifest.mcpServers = {
|
|
500
|
-
[SUMMER_MCP_SERVER_NAME]: {
|
|
501
|
-
command: server.command,
|
|
502
|
-
args: server.args,
|
|
503
|
-
},
|
|
504
|
-
};
|
|
505
|
-
return manifest;
|
|
506
|
-
}
|
|
507
632
|
async function readTextFileIfExists(path) {
|
|
508
633
|
if (!existsSync(path))
|
|
509
634
|
return "";
|
|
@@ -597,7 +722,7 @@ function createNextSteps(agent, scope, path) {
|
|
|
597
722
|
: agent === "lm-studio"
|
|
598
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."
|
|
599
724
|
: agent === "gemini"
|
|
600
|
-
? "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)."
|
|
601
726
|
: agent === "github-copilot"
|
|
602
727
|
? "Restart Copilot CLI, or run /mcp reload and /skills reload in the active session."
|
|
603
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;
|