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