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
|
@@ -0,0 +1,170 @@
|
|
|
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 { join } from "path";
|
|
9
|
+
import { homedir, platform } from "os";
|
|
10
|
+
import { AGENT_CLIENTS } from "../core/skills-registry.js";
|
|
11
|
+
import { tildeify } from "../core/format.js";
|
|
12
|
+
export const SKILL_SCOPES = ["user", "project"];
|
|
13
|
+
function isAgentClient(value) {
|
|
14
|
+
return AGENT_CLIENTS.includes(value);
|
|
15
|
+
}
|
|
16
|
+
function isSkillScope(value) {
|
|
17
|
+
return SKILL_SCOPES.includes(value);
|
|
18
|
+
}
|
|
19
|
+
/** Throws with a user-facing message on an unknown agent. */
|
|
20
|
+
export function parseSkillAgent(value) {
|
|
21
|
+
if (isAgentClient(value))
|
|
22
|
+
return value;
|
|
23
|
+
throw new Error(`Unknown agent: ${value}. Use one of: ${AGENT_CLIENTS.join(", ")}.`);
|
|
24
|
+
}
|
|
25
|
+
/** Throws with a user-facing message on an unknown scope. */
|
|
26
|
+
export function parseSkillScope(value) {
|
|
27
|
+
if (isSkillScope(value))
|
|
28
|
+
return value;
|
|
29
|
+
throw new Error(`Unknown scope: ${value}. Use user or project.`);
|
|
30
|
+
}
|
|
31
|
+
/** Pick the agent from --agent / legacy --as-claude-skill / --as-cursor-skill
|
|
32
|
+
* (default "summer"); throws on conflicting flags. */
|
|
33
|
+
export function resolveSkillAgent(opts) {
|
|
34
|
+
if (opts.asClaudeSkill && opts.asCursorSkill) {
|
|
35
|
+
throw new Error("Use only one legacy alias: --as-claude-skill or --as-cursor-skill.");
|
|
36
|
+
}
|
|
37
|
+
const legacyAgent = opts.asClaudeSkill
|
|
38
|
+
? "claude-code"
|
|
39
|
+
: opts.asCursorSkill
|
|
40
|
+
? "cursor"
|
|
41
|
+
: undefined;
|
|
42
|
+
if (opts.agent && legacyAgent && opts.agent !== legacyAgent) {
|
|
43
|
+
throw new Error(`Conflicting agent options: --agent ${opts.agent} with legacy alias for ${legacyAgent}.`);
|
|
44
|
+
}
|
|
45
|
+
return parseSkillAgent(opts.agent ?? legacyAgent ?? "summer");
|
|
46
|
+
}
|
|
47
|
+
/** Explicit --scope wins; otherwise project-rooted agents default to "project". */
|
|
48
|
+
export function resolveSkillScope(agent, opts) {
|
|
49
|
+
if (opts.scope)
|
|
50
|
+
return parseSkillScope(opts.scope);
|
|
51
|
+
if (agent === "cursor" ||
|
|
52
|
+
agent === "windsurf" ||
|
|
53
|
+
agent === "cline" ||
|
|
54
|
+
agent === "roo-code" ||
|
|
55
|
+
agent === "kilo-code") {
|
|
56
|
+
return "project";
|
|
57
|
+
}
|
|
58
|
+
return "user";
|
|
59
|
+
}
|
|
60
|
+
export function resolveInstallLocation(agent, scope) {
|
|
61
|
+
const overrideDir = process.env.SUMMER_SKILLS_DIR;
|
|
62
|
+
if (overrideDir) {
|
|
63
|
+
if (agent === "cursor")
|
|
64
|
+
return { kind: "cursor-rule-dir", path: overrideDir };
|
|
65
|
+
if (agent === "windsurf") {
|
|
66
|
+
return { kind: "windsurf-rule-file", path: join(overrideDir, ".windsurfrules") };
|
|
67
|
+
}
|
|
68
|
+
if (agent === "cline" || agent === "roo-code" || agent === "kilo-code") {
|
|
69
|
+
return { kind: "cline-rule-dir", path: overrideDir };
|
|
70
|
+
}
|
|
71
|
+
if (agent === "gemini") {
|
|
72
|
+
return { kind: "skill-dir", path: overrideDir };
|
|
73
|
+
}
|
|
74
|
+
if (agent === "opencode") {
|
|
75
|
+
return { kind: "opencode-skill-dir", path: overrideDir };
|
|
76
|
+
}
|
|
77
|
+
return { kind: "skill-dir", path: overrideDir };
|
|
78
|
+
}
|
|
79
|
+
const root = scope === "user" ? homedir() : process.cwd();
|
|
80
|
+
switch (agent) {
|
|
81
|
+
case "codex":
|
|
82
|
+
return { kind: "skill-dir", path: join(root, ".agents", "skills") };
|
|
83
|
+
case "claude-code":
|
|
84
|
+
return { kind: "skill-dir", path: join(root, ".claude", "skills") };
|
|
85
|
+
case "cursor":
|
|
86
|
+
return { kind: "cursor-rule-dir", path: join(root, ".cursor", "rules") };
|
|
87
|
+
case "windsurf":
|
|
88
|
+
return { kind: "windsurf-rule-file", path: join(root, ".windsurfrules") };
|
|
89
|
+
case "cline":
|
|
90
|
+
return {
|
|
91
|
+
kind: "cline-rule-dir",
|
|
92
|
+
path: scope === "user"
|
|
93
|
+
? clineUserRulesDir()
|
|
94
|
+
: join(process.cwd(), ".clinerules"),
|
|
95
|
+
};
|
|
96
|
+
case "roo-code":
|
|
97
|
+
return {
|
|
98
|
+
kind: "cline-rule-dir",
|
|
99
|
+
path: scope === "user"
|
|
100
|
+
? rooCodeUserRulesDir()
|
|
101
|
+
: join(process.cwd(), ".clinerules"),
|
|
102
|
+
};
|
|
103
|
+
case "kilo-code":
|
|
104
|
+
return {
|
|
105
|
+
kind: "cline-rule-dir",
|
|
106
|
+
path: scope === "user"
|
|
107
|
+
? join(homedir(), ".kilocode", "rules")
|
|
108
|
+
: join(process.cwd(), ".kilocode", "rules"),
|
|
109
|
+
};
|
|
110
|
+
case "gemini":
|
|
111
|
+
// Gemini discovers extension skills from <extension>/skills/<name>/SKILL.md
|
|
112
|
+
// (geminicli.com/docs/extensions/reference), so copy the skill directories
|
|
113
|
+
// as-is. The extension dir itself is written by `summer setup gemini`.
|
|
114
|
+
return {
|
|
115
|
+
kind: "skill-dir",
|
|
116
|
+
path: join(homedir(), ".gemini", "extensions", "summer-engine", "skills"),
|
|
117
|
+
};
|
|
118
|
+
case "github-copilot":
|
|
119
|
+
case "vscode-copilot":
|
|
120
|
+
return {
|
|
121
|
+
kind: "skill-dir",
|
|
122
|
+
path: scope === "user"
|
|
123
|
+
? join(homedir(), ".copilot", "skills")
|
|
124
|
+
: join(process.cwd(), ".github", "skills"),
|
|
125
|
+
};
|
|
126
|
+
case "opencode":
|
|
127
|
+
return {
|
|
128
|
+
kind: "opencode-skill-dir",
|
|
129
|
+
path: scope === "user"
|
|
130
|
+
? opencodeUserAgentsDir()
|
|
131
|
+
: join(process.cwd(), ".opencode", "agents", "summer"),
|
|
132
|
+
};
|
|
133
|
+
case "summer":
|
|
134
|
+
return { kind: "skill-dir", path: join(root, ".summer", "skills") };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function clineUserRulesDir() {
|
|
138
|
+
// Cline reads global rules from the user's Documents/Cline/Rules folder.
|
|
139
|
+
return join(homedir(), "Documents", "Cline", "Rules");
|
|
140
|
+
}
|
|
141
|
+
function rooCodeUserRulesDir() {
|
|
142
|
+
// Roo Code reads global rules from the user's Documents/Roo/Rules folder.
|
|
143
|
+
return join(homedir(), "Documents", "Roo", "Rules");
|
|
144
|
+
}
|
|
145
|
+
function opencodeUserAgentsDir() {
|
|
146
|
+
// OpenCode's user-scope agent definition directory varies by OS.
|
|
147
|
+
// On Windows, OpenCode reads from %APPDATA%/opencode/agents/summer.
|
|
148
|
+
// On Linux/macOS, it reads from $XDG_CONFIG_HOME or ~/.config/opencode/agents/summer.
|
|
149
|
+
if (platform() === "win32") {
|
|
150
|
+
const appData = process.env.APPDATA ?? join(homedir(), "AppData", "Roaming");
|
|
151
|
+
return join(appData, "opencode", "agents", "summer");
|
|
152
|
+
}
|
|
153
|
+
const xdg = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
154
|
+
return join(xdg, "opencode", "agents", "summer");
|
|
155
|
+
}
|
|
156
|
+
/** One-line, human path pattern for where an install location puts skills. */
|
|
157
|
+
export function describeInstallLocation(location) {
|
|
158
|
+
const p = tildeify(location.path);
|
|
159
|
+
switch (location.kind) {
|
|
160
|
+
case "skill-dir":
|
|
161
|
+
return `${p}/<skill>/SKILL.md`;
|
|
162
|
+
case "cursor-rule-dir":
|
|
163
|
+
return `${p}/summer-<skill>.mdc`;
|
|
164
|
+
case "cline-rule-dir":
|
|
165
|
+
case "opencode-skill-dir":
|
|
166
|
+
return `${p}/summer-<skill>.md`;
|
|
167
|
+
case "windsurf-rule-file":
|
|
168
|
+
return p;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version drift detection helpers used by `summer doctor` and the MCP server
|
|
3
|
+
* boot path.
|
|
4
|
+
*
|
|
5
|
+
* Two checks are exposed:
|
|
6
|
+
* - cli-version-current: compares installed package.json version against the
|
|
7
|
+
* latest published `summer-engine` on the npm registry.
|
|
8
|
+
* - skills-version-stale: reads a `.summer-version` marker written into the
|
|
9
|
+
* skill install dir (per-agent) and compares against the current CLI.
|
|
10
|
+
*
|
|
11
|
+
* Both are designed to be silent on offline / network errors — we never want
|
|
12
|
+
* to false-alarm a user just because their wifi is flaky.
|
|
13
|
+
*/
|
|
14
|
+
import { type StdioMcpServerConfig } from "./agent-config.js";
|
|
15
|
+
export interface SemverParts {
|
|
16
|
+
major: number;
|
|
17
|
+
minor: number;
|
|
18
|
+
patch: number;
|
|
19
|
+
}
|
|
20
|
+
export type DriftSeverity = "ok" | "warning" | "fail";
|
|
21
|
+
export interface DriftClassification {
|
|
22
|
+
severity: DriftSeverity;
|
|
23
|
+
reason: "current" | "ahead" | "patch-only" | "minor-drift" | "major-drift" | "behind";
|
|
24
|
+
}
|
|
25
|
+
export declare function parseSemver(version: string): SemverParts | null;
|
|
26
|
+
export declare function compareSemver(a: SemverParts, b: SemverParts): number;
|
|
27
|
+
/**
|
|
28
|
+
* Classify drift between an installed and a target version.
|
|
29
|
+
*
|
|
30
|
+
* ok installed >= target, OR installed is behind only on patch
|
|
31
|
+
* OR installed differs only in pre-release/build metadata.
|
|
32
|
+
* warning one minor version behind on the same major.
|
|
33
|
+
* fail two or more minors behind, or any major-version drift behind.
|
|
34
|
+
*/
|
|
35
|
+
export declare function classifyDrift(installed: SemverParts, target: SemverParts): DriftClassification;
|
|
36
|
+
export interface RegistryFetchOptions {
|
|
37
|
+
/** Override the default fetch (used in tests). Must implement the global fetch shape. */
|
|
38
|
+
fetchImpl?: typeof fetch;
|
|
39
|
+
/** Override the timeout. */
|
|
40
|
+
timeoutMs?: number;
|
|
41
|
+
/** Override the URL (used in tests). */
|
|
42
|
+
url?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface RegistryFetchResult {
|
|
45
|
+
ok: true;
|
|
46
|
+
version: string;
|
|
47
|
+
}
|
|
48
|
+
export interface RegistryFetchFailure {
|
|
49
|
+
ok: false;
|
|
50
|
+
reason: "registry-unreachable";
|
|
51
|
+
message?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function fetchLatestRegistryVersion(options?: RegistryFetchOptions): Promise<RegistryFetchResult | RegistryFetchFailure>;
|
|
54
|
+
/**
|
|
55
|
+
* Build the `cli-version-current` doctor check. Pure helper so tests can drive
|
|
56
|
+
* registry responses through `fetchImpl` rather than touching the network.
|
|
57
|
+
*/
|
|
58
|
+
export interface CliVersionCheckInput {
|
|
59
|
+
installedVersion: string;
|
|
60
|
+
registry: RegistryFetchResult | RegistryFetchFailure;
|
|
61
|
+
}
|
|
62
|
+
export interface CliVersionCheckOutput {
|
|
63
|
+
status: DriftSeverity;
|
|
64
|
+
message: string;
|
|
65
|
+
details: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
export declare function buildCliVersionCheck(input: CliVersionCheckInput): CliVersionCheckOutput;
|
|
68
|
+
export declare const SKILL_VERSION_MARKER_FILENAME = ".summer-version";
|
|
69
|
+
export interface SkillVersionMarker {
|
|
70
|
+
version: string;
|
|
71
|
+
installedAt: string;
|
|
72
|
+
}
|
|
73
|
+
export declare function readSkillMarker(dir: string): SkillVersionMarker | null;
|
|
74
|
+
export declare function writeSkillMarker(dir: string, version: string, now?: Date): string;
|
|
75
|
+
/**
|
|
76
|
+
* Candidate locations for skill-version markers. Listed roughly in order of
|
|
77
|
+
* how likely a Summer user is to have them populated. We probe every candidate,
|
|
78
|
+
* not just the first one — if multiple agents have markers, the most-stale one
|
|
79
|
+
* wins so we surface the worst case to the user.
|
|
80
|
+
*/
|
|
81
|
+
export interface SkillMarkerCandidate {
|
|
82
|
+
agent: string;
|
|
83
|
+
dir: string;
|
|
84
|
+
}
|
|
85
|
+
export declare function defaultSkillMarkerCandidates(): SkillMarkerCandidate[];
|
|
86
|
+
/**
|
|
87
|
+
* How the agent's Summer MCP entry was recorded by `summer setup`
|
|
88
|
+
* (agent-config.ts createSummerMcpServerConfig): a `--local-dev` link runs
|
|
89
|
+
* `node <checkout>/dist/bin/summer.js mcp`; a normal install runs
|
|
90
|
+
* `npx -y summer-engine@latest mcp`. The refresh command doctor recommends
|
|
91
|
+
* must keep that shape — the npx form on a local-dev machine would replace
|
|
92
|
+
* the checkout link with the published package (E2E 2026-09-03 F-09).
|
|
93
|
+
*/
|
|
94
|
+
export interface RecordedInstall {
|
|
95
|
+
localDev: boolean;
|
|
96
|
+
/** The CLI entry point the agent runs, when local-dev. */
|
|
97
|
+
cliPath: string | null;
|
|
98
|
+
/** Where the answer came from: the agent's config file, or — when it has
|
|
99
|
+
* no readable Summer entry — the nature of the CLI running this check. */
|
|
100
|
+
source: "agent-config" | "running-cli";
|
|
101
|
+
}
|
|
102
|
+
export type RefreshChannel = "latest" | "next";
|
|
103
|
+
/** The npm dist-tag a refresh command should name. A CLI that is AHEAD of
|
|
104
|
+
* npm `latest` was installed from `next` (a soaking release); telling that
|
|
105
|
+
* user to run `summer-engine@latest` would silently downgrade the MCP server
|
|
106
|
+
* while leaving the newer skills in place (release review P1-3). */
|
|
107
|
+
export declare function refreshChannel(installedVersion: string, latestVersion: string | undefined): RefreshChannel;
|
|
108
|
+
/** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
|
|
109
|
+
* given: `next` while this CLI is ahead of npm latest, else `latest`. Network
|
|
110
|
+
* failure means `latest` (never blocks setup). */
|
|
111
|
+
export declare function resolveDefaultChannel(installedVersion: string): Promise<{
|
|
112
|
+
channel: RefreshChannel;
|
|
113
|
+
note?: string;
|
|
114
|
+
}>;
|
|
115
|
+
export interface SkillsVersionCheckInput {
|
|
116
|
+
installedCliVersion: string;
|
|
117
|
+
candidates: SkillMarkerCandidate[];
|
|
118
|
+
/** npm latest, when known, so the refresh command names the right dist-tag. */
|
|
119
|
+
latestRegistryVersion?: string;
|
|
120
|
+
/** Resolves how the stale agent's MCP entry was recorded; defaults to
|
|
121
|
+
* detectRecordedInstall. Seam for tests. */
|
|
122
|
+
recordedInstall?: (agent: string) => Promise<RecordedInstall | null> | RecordedInstall | null;
|
|
123
|
+
}
|
|
124
|
+
export interface SkillsVersionCheckOutput {
|
|
125
|
+
/** "ok" or "warning" — stale skills never fail doctor (TESTING.md §d). */
|
|
126
|
+
status: DriftSeverity;
|
|
127
|
+
message: string;
|
|
128
|
+
details: Record<string, unknown>;
|
|
129
|
+
}
|
|
130
|
+
export declare function buildSkillsVersionCheck(input: SkillsVersionCheckInput): Promise<SkillsVersionCheckOutput>;
|
|
131
|
+
/**
|
|
132
|
+
* The command that refreshes an agent's skills without changing how its MCP
|
|
133
|
+
* entry was recorded: the local-dev form re-links the same checkout
|
|
134
|
+
* (`setup --local-dev --force` re-copies the checkout's skills); the npx form
|
|
135
|
+
* is for installs that already run the published package.
|
|
136
|
+
*/
|
|
137
|
+
export declare function skillsRefreshCommand(agent: string, install: RecordedInstall | null, channel?: RefreshChannel): string;
|
|
138
|
+
/** The shape `summer setup --local-dev` writes: `node <…>/dist/bin/summer.js mcp`
|
|
139
|
+
* (createSummerMcpServerConfig(true)). */
|
|
140
|
+
export declare function isLocalDevServerConfig(server: StdioMcpServerConfig): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Read the Summer MCP entry an agent's config records, shape-tolerantly
|
|
143
|
+
* (this is the read side of agent-config.ts's per-format writers):
|
|
144
|
+
* json {"mcpServers": {"summer-engine": {command, args}}} Claude Code, Cursor, …
|
|
145
|
+
* json-copilot {"mcpServers": {"summer-engine": {type, command, args}}}
|
|
146
|
+
* json-vscode {"servers": {"summer-engine": {type, command, args}}}
|
|
147
|
+
* json-opencode {"mcp": {"summer-engine": {type, command: [cmd, ...args]}}}
|
|
148
|
+
* toml (codex) [mcp_servers.summer-engine]\ncommand = "…"\nargs = ["…", …]
|
|
149
|
+
* Returns null when the file is missing, unparsable, or has no Summer entry.
|
|
150
|
+
*/
|
|
151
|
+
export declare function readRecordedMcpServer(text: string, format: "json" | "toml" | "json-opencode" | "json-copilot" | "json-vscode"): StdioMcpServerConfig | null;
|
|
152
|
+
/** Is the CLI running this check a source checkout rather than an installed
|
|
153
|
+
* package? npm/npx/global installs all live under a node_modules directory. */
|
|
154
|
+
export declare function runningCliIsCheckout(packageRoot?: string): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* How `summer setup` recorded the agent's Summer MCP entry. Resolves the
|
|
157
|
+
* agent's user-scope config path through agent-config's own target
|
|
158
|
+
* resolution (print mode: no file is written or read there), then reads the
|
|
159
|
+
* entry. Marker agents without an agent config ("summer") and agents whose
|
|
160
|
+
* config has no readable Summer entry fall back to the nature of the running
|
|
161
|
+
* CLI: a checkout recommends re-linking itself, an installed package the npx form.
|
|
162
|
+
*/
|
|
163
|
+
export declare function detectRecordedInstall(agent: string): Promise<RecordedInstall | null>;
|
|
164
|
+
/**
|
|
165
|
+
* Helper used by the MCP server boot path to render a one-line drift notice.
|
|
166
|
+
* Returns null when no notice is needed (fresh, ahead, patch-only, offline).
|
|
167
|
+
*/
|
|
168
|
+
export interface BootDriftNotice {
|
|
169
|
+
installedVersion: string;
|
|
170
|
+
latestVersion: string;
|
|
171
|
+
agent?: string;
|
|
172
|
+
text: string;
|
|
173
|
+
}
|
|
174
|
+
export declare function buildBootDriftNotice(installedVersion: string, registry: RegistryFetchResult | RegistryFetchFailure, agent?: string): BootDriftNotice | null;
|
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
* Both are designed to be silent on offline / network errors — we never want
|
|
12
12
|
* to false-alarm a user just because their wifi is flaky.
|
|
13
13
|
*/
|
|
14
|
-
import { existsSync, readFileSync, writeFileSync
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
15
|
import { homedir, platform } from "node:os";
|
|
16
|
-
import { join } from "node:path";
|
|
16
|
+
import { join, sep } from "node:path";
|
|
17
|
+
import { PACKAGE_ROOT } from "../core/package-root.js";
|
|
18
|
+
import { configureAgentMcp, parseAgent, SUMMER_MCP_SERVER_NAME, } from "./agent-config.js";
|
|
17
19
|
const NPM_REGISTRY_LATEST_URL = "https://registry.npmjs.org/summer-engine/latest";
|
|
18
20
|
const REGISTRY_FETCH_TIMEOUT_MS = 3000;
|
|
19
21
|
export function parseSemver(version) {
|
|
@@ -224,7 +226,30 @@ export function defaultSkillMarkerCandidates() {
|
|
|
224
226
|
}
|
|
225
227
|
return candidates;
|
|
226
228
|
}
|
|
227
|
-
|
|
229
|
+
/** The npm dist-tag a refresh command should name. A CLI that is AHEAD of
|
|
230
|
+
* npm `latest` was installed from `next` (a soaking release); telling that
|
|
231
|
+
* user to run `summer-engine@latest` would silently downgrade the MCP server
|
|
232
|
+
* while leaving the newer skills in place (release review P1-3). */
|
|
233
|
+
export function refreshChannel(installedVersion, latestVersion) {
|
|
234
|
+
const installed = parseSemver(installedVersion);
|
|
235
|
+
const latest = latestVersion ? parseSemver(latestVersion) : null;
|
|
236
|
+
if (!installed || !latest)
|
|
237
|
+
return "latest";
|
|
238
|
+
return classifyDrift(installed, latest).reason === "ahead" ? "next" : "latest";
|
|
239
|
+
}
|
|
240
|
+
/** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
|
|
241
|
+
* given: `next` while this CLI is ahead of npm latest, else `latest`. Network
|
|
242
|
+
* failure means `latest` (never blocks setup). */
|
|
243
|
+
export async function resolveDefaultChannel(installedVersion) {
|
|
244
|
+
const registry = await fetchLatestRegistryVersion();
|
|
245
|
+
if (!registry.ok)
|
|
246
|
+
return { channel: "latest" };
|
|
247
|
+
const channel = refreshChannel(installedVersion, registry.version);
|
|
248
|
+
return channel === "next"
|
|
249
|
+
? { channel, note: `This CLI (${installedVersion}) is ahead of npm latest (${registry.version}); the MCP entry is pinned to summer-engine@next so the agent keeps running this release. Pass --channel latest to override.` }
|
|
250
|
+
: { channel };
|
|
251
|
+
}
|
|
252
|
+
export async function buildSkillsVersionCheck(input) {
|
|
228
253
|
const cliParsed = parseSemver(input.installedCliVersion);
|
|
229
254
|
if (!cliParsed) {
|
|
230
255
|
return {
|
|
@@ -274,35 +299,153 @@ export function buildSkillsVersionCheck(input) {
|
|
|
274
299
|
installedAt: worst.marker.installedAt,
|
|
275
300
|
cliVersion: input.installedCliVersion,
|
|
276
301
|
};
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
};
|
|
284
|
-
case "warning":
|
|
285
|
-
return {
|
|
286
|
-
status: "warning",
|
|
287
|
-
message: `skills v${worst.marker.version} are one minor version behind v${input.installedCliVersion}`,
|
|
288
|
-
details: {
|
|
289
|
-
...baseDetails,
|
|
290
|
-
recommendedAction: skillsRefreshCommand(worst.agent),
|
|
291
|
-
},
|
|
292
|
-
};
|
|
293
|
-
case "fail":
|
|
294
|
-
return {
|
|
295
|
-
status: "fail",
|
|
296
|
-
message: `skills v${worst.marker.version} are significantly behind v${input.installedCliVersion}`,
|
|
297
|
-
details: {
|
|
298
|
-
...baseDetails,
|
|
299
|
-
recommendedAction: skillsRefreshCommand(worst.agent),
|
|
300
|
-
},
|
|
301
|
-
};
|
|
302
|
+
if (worst.drift.severity === "ok") {
|
|
303
|
+
return {
|
|
304
|
+
status: "ok",
|
|
305
|
+
message: `skills v${worst.marker.version} match CLI`,
|
|
306
|
+
details: baseDetails,
|
|
307
|
+
};
|
|
302
308
|
}
|
|
309
|
+
// Skills that lag the CLI still work — the toolkit is not broken, the
|
|
310
|
+
// library it installed is older than the one it ships. That is a warning
|
|
311
|
+
// with a refresh command, never an exit-1 failure; a "fail"-grade drift
|
|
312
|
+
// (two minors or a major behind) only changes the wording.
|
|
313
|
+
const install = await resolveRecordedInstall(input.recordedInstall, worst.agent);
|
|
314
|
+
return {
|
|
315
|
+
status: "warning",
|
|
316
|
+
message: worst.drift.severity === "fail"
|
|
317
|
+
? `skills v${worst.marker.version} are significantly behind v${input.installedCliVersion}`
|
|
318
|
+
: `skills v${worst.marker.version} are one minor version behind v${input.installedCliVersion}`,
|
|
319
|
+
details: {
|
|
320
|
+
...baseDetails,
|
|
321
|
+
drift: worst.drift.reason,
|
|
322
|
+
...(install ? { install } : {}),
|
|
323
|
+
recommendedAction: skillsRefreshCommand(worst.agent, install, refreshChannel(input.installedCliVersion, input.latestRegistryVersion)),
|
|
324
|
+
},
|
|
325
|
+
};
|
|
303
326
|
}
|
|
304
|
-
function
|
|
305
|
-
|
|
327
|
+
async function resolveRecordedInstall(resolver, agent) {
|
|
328
|
+
try {
|
|
329
|
+
return (await (resolver ?? detectRecordedInstall)(agent)) ?? null;
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// A detection failure must not break doctor; the npx form is the
|
|
333
|
+
// conservative default only when nothing says local-dev.
|
|
334
|
+
return null;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* The command that refreshes an agent's skills without changing how its MCP
|
|
339
|
+
* entry was recorded: the local-dev form re-links the same checkout
|
|
340
|
+
* (`setup --local-dev --force` re-copies the checkout's skills); the npx form
|
|
341
|
+
* is for installs that already run the published package.
|
|
342
|
+
*/
|
|
343
|
+
export function skillsRefreshCommand(agent, install, channel = "latest") {
|
|
344
|
+
if (install?.localDev && install.cliPath) {
|
|
345
|
+
return `node ${install.cliPath} setup ${agent} --local-dev --yes --force`;
|
|
346
|
+
}
|
|
347
|
+
const tag = channel === "next" ? "next" : "latest";
|
|
348
|
+
return `npx clear-npx-cache && npx -y summer-engine@${tag} setup ${agent} --yes --force${channel === "next" ? " --channel next" : ""}`;
|
|
349
|
+
}
|
|
350
|
+
/** The shape `summer setup --local-dev` writes: `node <…>/dist/bin/summer.js mcp`
|
|
351
|
+
* (createSummerMcpServerConfig(true)). */
|
|
352
|
+
export function isLocalDevServerConfig(server) {
|
|
353
|
+
const entry = server.args[0] ?? "";
|
|
354
|
+
return (server.command === "node" &&
|
|
355
|
+
/(^|[\\/])bin[\\/]summer\.js$/.test(entry) &&
|
|
356
|
+
server.args[1] === "mcp");
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Read the Summer MCP entry an agent's config records, shape-tolerantly
|
|
360
|
+
* (this is the read side of agent-config.ts's per-format writers):
|
|
361
|
+
* json {"mcpServers": {"summer-engine": {command, args}}} Claude Code, Cursor, …
|
|
362
|
+
* json-copilot {"mcpServers": {"summer-engine": {type, command, args}}}
|
|
363
|
+
* json-vscode {"servers": {"summer-engine": {type, command, args}}}
|
|
364
|
+
* json-opencode {"mcp": {"summer-engine": {type, command: [cmd, ...args]}}}
|
|
365
|
+
* toml (codex) [mcp_servers.summer-engine]\ncommand = "…"\nargs = ["…", …]
|
|
366
|
+
* Returns null when the file is missing, unparsable, or has no Summer entry.
|
|
367
|
+
*/
|
|
368
|
+
export function readRecordedMcpServer(text, format) {
|
|
369
|
+
if (!text.trim())
|
|
370
|
+
return null;
|
|
371
|
+
if (format === "toml") {
|
|
372
|
+
const table = text.match(new RegExp(`^\\[mcp_servers\\.${SUMMER_MCP_SERVER_NAME.replace(/[-.]/g, "\\$&")}\\]\\s*$([\\s\\S]*?)(?=^\\[|(?![\\s\\S]))`, "m"));
|
|
373
|
+
if (!table)
|
|
374
|
+
return null;
|
|
375
|
+
const command = table[1].match(/^command\s*=\s*"((?:[^"\\]|\\.)*)"/m)?.[1];
|
|
376
|
+
const argsText = table[1].match(/^args\s*=\s*\[([^\]]*)\]/m)?.[1] ?? "";
|
|
377
|
+
if (!command)
|
|
378
|
+
return null;
|
|
379
|
+
const args = [...argsText.matchAll(/"((?:[^"\\]|\\.)*)"/g)].map((m) => m[1].replace(/\\(.)/g, "$1"));
|
|
380
|
+
return { command: command.replace(/\\(.)/g, "$1"), args };
|
|
381
|
+
}
|
|
382
|
+
let parsed;
|
|
383
|
+
try {
|
|
384
|
+
parsed = JSON.parse(text);
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
if (!parsed || typeof parsed !== "object")
|
|
390
|
+
return null;
|
|
391
|
+
const root = parsed;
|
|
392
|
+
for (const container of ["mcpServers", "servers", "mcp"]) {
|
|
393
|
+
const servers = root[container];
|
|
394
|
+
if (!servers || typeof servers !== "object")
|
|
395
|
+
continue;
|
|
396
|
+
const entry = servers[SUMMER_MCP_SERVER_NAME];
|
|
397
|
+
if (!entry || typeof entry !== "object")
|
|
398
|
+
continue;
|
|
399
|
+
const record = entry;
|
|
400
|
+
if (Array.isArray(record.command)) {
|
|
401
|
+
const [command, ...args] = record.command.filter((part) => typeof part === "string");
|
|
402
|
+
return command ? { command, args } : null;
|
|
403
|
+
}
|
|
404
|
+
if (typeof record.command === "string") {
|
|
405
|
+
const args = Array.isArray(record.args)
|
|
406
|
+
? record.args.filter((part) => typeof part === "string")
|
|
407
|
+
: [];
|
|
408
|
+
return { command: record.command, args };
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
/** Is the CLI running this check a source checkout rather than an installed
|
|
414
|
+
* package? npm/npx/global installs all live under a node_modules directory. */
|
|
415
|
+
export function runningCliIsCheckout(packageRoot = PACKAGE_ROOT) {
|
|
416
|
+
return !packageRoot.split(/[\\/]/).includes("node_modules");
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* How `summer setup` recorded the agent's Summer MCP entry. Resolves the
|
|
420
|
+
* agent's user-scope config path through agent-config's own target
|
|
421
|
+
* resolution (print mode: no file is written or read there), then reads the
|
|
422
|
+
* entry. Marker agents without an agent config ("summer") and agents whose
|
|
423
|
+
* config has no readable Summer entry fall back to the nature of the running
|
|
424
|
+
* CLI: a checkout recommends re-linking itself, an installed package the npx form.
|
|
425
|
+
*/
|
|
426
|
+
export async function detectRecordedInstall(agent) {
|
|
427
|
+
const supported = parseAgent(agent);
|
|
428
|
+
if (supported) {
|
|
429
|
+
try {
|
|
430
|
+
const target = await configureAgentMcp({ agent: supported, scope: "user", print: true });
|
|
431
|
+
if (existsSync(target.path)) {
|
|
432
|
+
const recorded = readRecordedMcpServer(readFileSync(target.path, "utf-8"), target.format);
|
|
433
|
+
if (recorded) {
|
|
434
|
+
const localDev = isLocalDevServerConfig(recorded);
|
|
435
|
+
return { localDev, cliPath: localDev ? recorded.args[0] ?? null : null, source: "agent-config" };
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
// Unreadable config: fall through to the running-CLI answer.
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
const checkout = runningCliIsCheckout();
|
|
444
|
+
return {
|
|
445
|
+
localDev: checkout,
|
|
446
|
+
cliPath: checkout ? [PACKAGE_ROOT, "dist", "bin", "summer.js"].join(sep) : null,
|
|
447
|
+
source: "running-cli",
|
|
448
|
+
};
|
|
306
449
|
}
|
|
307
450
|
export function buildBootDriftNotice(installedVersion, registry, agent) {
|
|
308
451
|
if (!registry.ok)
|
|
@@ -324,15 +467,3 @@ export function buildBootDriftNotice(installedVersion, registry, agent) {
|
|
|
324
467
|
text,
|
|
325
468
|
};
|
|
326
469
|
}
|
|
327
|
-
// Re-export for tests / callers that want to know the install marker's mtime.
|
|
328
|
-
export function markerMtime(dir) {
|
|
329
|
-
const path = join(dir, SKILL_VERSION_MARKER_FILENAME);
|
|
330
|
-
if (!existsSync(path))
|
|
331
|
-
return null;
|
|
332
|
-
try {
|
|
333
|
-
return statSync(path).mtimeMs;
|
|
334
|
-
}
|
|
335
|
-
catch {
|
|
336
|
-
return null;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { BootDriftNotice } from "
|
|
1
|
+
import type { BootDriftNotice } from "../installer/version-check.js";
|
|
2
2
|
export declare function getCachedBootDriftNotice(): BootDriftNotice | null;
|
|
3
3
|
export declare function setCachedBootDriftNotice(notice: BootDriftNotice | null): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { configureAgentMcp, parseAgent, parseScope, supportedAgents, } from "../
|
|
3
|
-
import { startMcpServer } from "
|
|
1
|
+
import { Command, Option } from "commander";
|
|
2
|
+
import { configureAgentMcp, parseAgent, parseScope, supportedAgents, } from "../installer/agent-config.js";
|
|
3
|
+
import { startMcpServer } from "./server.js";
|
|
4
4
|
export const mcpCommand = new Command("mcp")
|
|
5
5
|
.description("Start the MCP server for AI tool integration (Cursor, Claude Code, etc.)")
|
|
6
6
|
.option("--project <path>", "Bind local engine tools to the editor running this project")
|
|
@@ -11,13 +11,22 @@ export const mcpCommand = new Command("mcp")
|
|
|
11
11
|
instanceId: opts.instance,
|
|
12
12
|
});
|
|
13
13
|
});
|
|
14
|
+
// Deprecated alias. `summer setup <agent>` (src/cli/commands/setup.ts) is the
|
|
15
|
+
// one setup path: the same configureAgentMcp() write plus skills + doctor.
|
|
16
|
+
// This stays for one release so existing docs/scripts keep working; it cannot
|
|
17
|
+
// delegate to the cli layer (contract §2: mcp never imports cli), so it calls
|
|
18
|
+
// the shared installer directly and says where to go.
|
|
14
19
|
mcpCommand
|
|
15
20
|
.command("setup <agent>")
|
|
16
|
-
.description("
|
|
21
|
+
.description("Deprecated alias of `summer setup <agent>`: write only the MCP config for an agent")
|
|
17
22
|
.option("--scope <scope>", "Configuration scope: user or project", "user")
|
|
18
23
|
.option("--print", "Print the MCP config snippet instead of writing files")
|
|
19
24
|
.option("--dry-run", "Show planned changes without writing files")
|
|
20
|
-
.
|
|
25
|
+
.addOption(
|
|
26
|
+
// Contributor-only: point the config at this checkout's built CLI instead
|
|
27
|
+
// of npx summer-engine. Hidden from the public surface; also honoured
|
|
28
|
+
// when SUMMER_DEV=1 is set.
|
|
29
|
+
new Option("--local-dev", "Use the local built CLI instead of npx summer-engine").hideHelp())
|
|
21
30
|
.option("--json", "Print the setup result as JSON")
|
|
22
31
|
.action(async (agentValue, opts) => {
|
|
23
32
|
const agent = parseAgent(agentValue);
|
|
@@ -33,12 +42,15 @@ mcpCommand
|
|
|
33
42
|
scope,
|
|
34
43
|
print: opts.print,
|
|
35
44
|
dryRun: opts.dryRun,
|
|
36
|
-
localDev: opts.localDev,
|
|
45
|
+
localDev: opts.localDev || process.env.SUMMER_DEV === "1",
|
|
37
46
|
});
|
|
38
47
|
if (opts.json) {
|
|
39
48
|
console.log(JSON.stringify(result, null, 2));
|
|
40
49
|
return;
|
|
41
50
|
}
|
|
51
|
+
if (!opts.print) {
|
|
52
|
+
console.warn(`Note: 'summer mcp setup' is deprecated; use 'summer setup ${agent}' (same MCP config, plus skills and doctor).`);
|
|
53
|
+
}
|
|
42
54
|
if (result.print) {
|
|
43
55
|
console.log(result.snippet.trimEnd());
|
|
44
56
|
}
|