summer-engine 2.8.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +149 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +161 -393
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/cli/commands/setup.js +158 -0
- package/dist/{commands → cli/commands}/skills.js +121 -251
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +55 -0
- package/dist/core/skills-registry.js +106 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/installer/agent-config.d.ts +63 -0
- package/dist/installer/agent-config.js +540 -0
- package/dist/installer/agent-table.d.ts +103 -0
- package/dist/installer/agent-table.js +584 -0
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +148 -0
- package/dist/installer/skill-locations.d.ts +36 -0
- package/dist/installer/skill-locations.js +91 -0
- package/dist/installer/version-check.d.ts +178 -0
- package/dist/installer/version-check.js +479 -0
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +99 -0
- package/integrations/amp/README.md +12 -0
- package/integrations/amp/manifest-target.json +3 -0
- package/integrations/antigravity/README.md +12 -0
- package/integrations/antigravity/manifest-target.json +3 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/claude-desktop/README.md +12 -0
- package/integrations/claude-desktop/manifest-target.json +3 -0
- package/integrations/cline/README.md +12 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/cline-cli/README.md +12 -0
- package/integrations/cline-cli/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/copilot-jetbrains/README.md +12 -0
- package/integrations/copilot-jetbrains/manifest-target.json +3 -0
- package/integrations/crush/README.md +12 -0
- package/integrations/crush/manifest-target.json +3 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/goose/README.md +12 -0
- package/integrations/goose/manifest-target.json +3 -0
- package/integrations/grok-build/README.md +12 -0
- package/integrations/grok-build/manifest-target.json +3 -0
- package/integrations/hermes/README.md +12 -0
- package/integrations/hermes/manifest-target.json +3 -0
- package/integrations/junie/README.md +12 -0
- package/integrations/junie/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +12 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/kimi-code/README.md +12 -0
- package/integrations/kimi-code/manifest-target.json +3 -0
- package/integrations/kiro/README.md +12 -0
- package/integrations/kiro/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/mistral-vibe/README.md +12 -0
- package/integrations/mistral-vibe/manifest-target.json +3 -0
- package/integrations/opencode/README.md +12 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/qoder/README.md +12 -0
- package/integrations/qoder/manifest-target.json +3 -0
- package/integrations/qwen-code/README.md +12 -0
- package/integrations/qwen-code/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +14 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/rovo-dev/README.md +12 -0
- package/integrations/rovo-dev/manifest-target.json +3 -0
- package/integrations/trae/README.md +12 -0
- package/integrations/trae/manifest-target.json +3 -0
- package/integrations/visual-studio/README.md +12 -0
- package/integrations/visual-studio/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/warp/README.md +12 -0
- package/integrations/warp/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +12 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/integrations/zed/README.md +12 -0
- package/integrations/zed/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/library/skills/README.md +242 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +21 -15
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-index.md +242 -0
- package/registry/generated/skills-registry.json +1249 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/setup.js +0 -217
- package/dist/commands/status.js +0 -46
- package/dist/lib/agent-config.d.ts +0 -39
- package/dist/lib/agent-config.js +0 -626
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/lib/version-check.js +0 -338
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
- /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -0,0 +1,479 @@
|
|
|
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 { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
15
|
+
import { parse as parseYaml } from "yaml";
|
|
16
|
+
import { allAgentSpecs, defaultPathContext, resolveSkillPath } from "./agent-table.js";
|
|
17
|
+
import { join, sep } from "node:path";
|
|
18
|
+
import { PACKAGE_ROOT } from "../core/package-root.js";
|
|
19
|
+
import { configureAgentMcp, parseAgent, SUMMER_MCP_SERVER_NAME, topLevelKey, } from "./agent-config.js";
|
|
20
|
+
const NPM_REGISTRY_LATEST_URL = "https://registry.npmjs.org/summer-engine/latest";
|
|
21
|
+
const REGISTRY_FETCH_TIMEOUT_MS = 3000;
|
|
22
|
+
export function parseSemver(version) {
|
|
23
|
+
if (!version)
|
|
24
|
+
return null;
|
|
25
|
+
// Strip any leading "v" and trim build / pre-release tags after the first hyphen.
|
|
26
|
+
const cleaned = version.trim().replace(/^v/, "").split(/[-+]/)[0];
|
|
27
|
+
const match = cleaned.match(/^(\d+)\.(\d+)\.(\d+)$/);
|
|
28
|
+
if (!match)
|
|
29
|
+
return null;
|
|
30
|
+
const [, maj, min, pat] = match;
|
|
31
|
+
return {
|
|
32
|
+
major: Number(maj),
|
|
33
|
+
minor: Number(min),
|
|
34
|
+
patch: Number(pat),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function compareSemver(a, b) {
|
|
38
|
+
if (a.major !== b.major)
|
|
39
|
+
return a.major - b.major;
|
|
40
|
+
if (a.minor !== b.minor)
|
|
41
|
+
return a.minor - b.minor;
|
|
42
|
+
return a.patch - b.patch;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Classify drift between an installed and a target version.
|
|
46
|
+
*
|
|
47
|
+
* ok installed >= target, OR installed is behind only on patch
|
|
48
|
+
* OR installed differs only in pre-release/build metadata.
|
|
49
|
+
* warning one minor version behind on the same major.
|
|
50
|
+
* fail two or more minors behind, or any major-version drift behind.
|
|
51
|
+
*/
|
|
52
|
+
export function classifyDrift(installed, target) {
|
|
53
|
+
const cmp = compareSemver(installed, target);
|
|
54
|
+
if (cmp === 0)
|
|
55
|
+
return { severity: "ok", reason: "current" };
|
|
56
|
+
if (cmp > 0)
|
|
57
|
+
return { severity: "ok", reason: "ahead" };
|
|
58
|
+
// installed < target
|
|
59
|
+
if (installed.major < target.major) {
|
|
60
|
+
return { severity: "fail", reason: "major-drift" };
|
|
61
|
+
}
|
|
62
|
+
if (installed.minor === target.minor) {
|
|
63
|
+
// Same major + minor, target patch is higher → patch-only drift.
|
|
64
|
+
return { severity: "ok", reason: "patch-only" };
|
|
65
|
+
}
|
|
66
|
+
const minorDelta = target.minor - installed.minor;
|
|
67
|
+
if (minorDelta >= 2) {
|
|
68
|
+
return { severity: "fail", reason: "minor-drift" };
|
|
69
|
+
}
|
|
70
|
+
return { severity: "warning", reason: "minor-drift" };
|
|
71
|
+
}
|
|
72
|
+
export async function fetchLatestRegistryVersion(options = {}) {
|
|
73
|
+
const url = options.url ?? NPM_REGISTRY_LATEST_URL;
|
|
74
|
+
const timeoutMs = options.timeoutMs ?? REGISTRY_FETCH_TIMEOUT_MS;
|
|
75
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
76
|
+
if (!fetchImpl) {
|
|
77
|
+
return { ok: false, reason: "registry-unreachable", message: "fetch unavailable" };
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const response = await fetchImpl(url, {
|
|
81
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
82
|
+
headers: { accept: "application/json" },
|
|
83
|
+
});
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
reason: "registry-unreachable",
|
|
88
|
+
message: `registry responded ${response.status}`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const body = (await response.json());
|
|
92
|
+
if (typeof body.version !== "string") {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
reason: "registry-unreachable",
|
|
96
|
+
message: "registry payload missing version",
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { ok: true, version: body.version };
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return {
|
|
103
|
+
ok: false,
|
|
104
|
+
reason: "registry-unreachable",
|
|
105
|
+
message: error instanceof Error ? error.message : String(error),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const RECOMMENDED_REFRESH_COMMAND = "npx clear-npx-cache && npx -y summer-engine@latest setup <agent> --yes --force";
|
|
110
|
+
export function buildCliVersionCheck(input) {
|
|
111
|
+
if (!input.registry.ok) {
|
|
112
|
+
return {
|
|
113
|
+
status: "ok",
|
|
114
|
+
message: "registry unreachable, skipping check",
|
|
115
|
+
details: {
|
|
116
|
+
installedVersion: input.installedVersion,
|
|
117
|
+
reason: input.registry.reason,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const installed = parseSemver(input.installedVersion);
|
|
122
|
+
const latest = parseSemver(input.registry.version);
|
|
123
|
+
if (!installed || !latest) {
|
|
124
|
+
// If we can't parse either side, don't false-alarm.
|
|
125
|
+
return {
|
|
126
|
+
status: "ok",
|
|
127
|
+
message: "could not compare versions",
|
|
128
|
+
details: {
|
|
129
|
+
installedVersion: input.installedVersion,
|
|
130
|
+
latestVersion: input.registry.version,
|
|
131
|
+
reason: "unparseable-version",
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const drift = classifyDrift(installed, latest);
|
|
136
|
+
const baseDetails = {
|
|
137
|
+
installedVersion: input.installedVersion,
|
|
138
|
+
latestVersion: input.registry.version,
|
|
139
|
+
};
|
|
140
|
+
switch (drift.severity) {
|
|
141
|
+
case "ok":
|
|
142
|
+
return {
|
|
143
|
+
status: "ok",
|
|
144
|
+
message: drift.reason === "patch-only"
|
|
145
|
+
? `v${input.installedVersion} (latest ${input.registry.version}, patch-only)`
|
|
146
|
+
: drift.reason === "ahead"
|
|
147
|
+
? `v${input.installedVersion} (ahead of latest ${input.registry.version})`
|
|
148
|
+
: `v${input.installedVersion}`,
|
|
149
|
+
details: { ...baseDetails, reason: drift.reason },
|
|
150
|
+
};
|
|
151
|
+
case "warning":
|
|
152
|
+
return {
|
|
153
|
+
status: "warning",
|
|
154
|
+
message: `v${input.installedVersion} → v${input.registry.version} available`,
|
|
155
|
+
details: {
|
|
156
|
+
...baseDetails,
|
|
157
|
+
recommendedAction: RECOMMENDED_REFRESH_COMMAND,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
case "fail":
|
|
161
|
+
return {
|
|
162
|
+
status: "fail",
|
|
163
|
+
message: `v${input.installedVersion} is significantly behind v${input.registry.version}`,
|
|
164
|
+
details: {
|
|
165
|
+
...baseDetails,
|
|
166
|
+
recommendedAction: RECOMMENDED_REFRESH_COMMAND,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Skill marker (.summer-version) helpers
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
export const SKILL_VERSION_MARKER_FILENAME = ".summer-version";
|
|
175
|
+
export function readSkillMarker(dir) {
|
|
176
|
+
const path = join(dir, SKILL_VERSION_MARKER_FILENAME);
|
|
177
|
+
if (!existsSync(path))
|
|
178
|
+
return null;
|
|
179
|
+
try {
|
|
180
|
+
const raw = readFileSync(path, "utf-8");
|
|
181
|
+
const parsed = JSON.parse(raw);
|
|
182
|
+
if (typeof parsed.version !== "string" || typeof parsed.installedAt !== "string") {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
return { version: parsed.version, installedAt: parsed.installedAt };
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export function writeSkillMarker(dir, version, now = new Date()) {
|
|
192
|
+
const path = join(dir, SKILL_VERSION_MARKER_FILENAME);
|
|
193
|
+
const payload = {
|
|
194
|
+
version,
|
|
195
|
+
installedAt: now.toISOString(),
|
|
196
|
+
};
|
|
197
|
+
writeFileSync(path, JSON.stringify(payload, null, 2) + "\n", "utf-8");
|
|
198
|
+
return path;
|
|
199
|
+
}
|
|
200
|
+
export function defaultSkillMarkerCandidates() {
|
|
201
|
+
const ctx = defaultPathContext();
|
|
202
|
+
const candidates = [
|
|
203
|
+
{ agent: "summer", dir: join(ctx.home, ".summer", "skills") },
|
|
204
|
+
];
|
|
205
|
+
// Every agent with a user-scope skills home, from the one agent table.
|
|
206
|
+
// Devin Desktop's single rules file has no dir to mark; skip that kind.
|
|
207
|
+
for (const spec of allAgentSpecs()) {
|
|
208
|
+
const home = resolveSkillPath(spec, "user", ctx);
|
|
209
|
+
if (!home || home.kind === "windsurf-rule-file")
|
|
210
|
+
continue;
|
|
211
|
+
candidates.push({ agent: spec.id, dir: home.path });
|
|
212
|
+
}
|
|
213
|
+
return candidates;
|
|
214
|
+
}
|
|
215
|
+
/** The npm dist-tag a refresh command should name. A CLI that is AHEAD of
|
|
216
|
+
* npm `latest` was installed from `next` (a soaking release); telling that
|
|
217
|
+
* user to run `summer-engine@latest` would silently downgrade the MCP server
|
|
218
|
+
* while leaving the newer skills in place (release review P1-3). */
|
|
219
|
+
export function refreshChannel(installedVersion, latestVersion) {
|
|
220
|
+
const installed = parseSemver(installedVersion);
|
|
221
|
+
const latest = latestVersion ? parseSemver(latestVersion) : null;
|
|
222
|
+
if (!installed || !latest)
|
|
223
|
+
return "latest";
|
|
224
|
+
return classifyDrift(installed, latest).reason === "ahead" ? "next" : "latest";
|
|
225
|
+
}
|
|
226
|
+
/** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
|
|
227
|
+
* given: `next` while this CLI is ahead of npm latest, else `latest`. Network
|
|
228
|
+
* failure means `latest` (never blocks setup). */
|
|
229
|
+
export async function resolveDefaultChannel(installedVersion) {
|
|
230
|
+
const registry = await fetchLatestRegistryVersion();
|
|
231
|
+
if (!registry.ok)
|
|
232
|
+
return { channel: "latest" };
|
|
233
|
+
const channel = refreshChannel(installedVersion, registry.version);
|
|
234
|
+
return channel === "next"
|
|
235
|
+
? { 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.` }
|
|
236
|
+
: { channel };
|
|
237
|
+
}
|
|
238
|
+
export async function buildSkillsVersionCheck(input) {
|
|
239
|
+
const cliParsed = parseSemver(input.installedCliVersion);
|
|
240
|
+
if (!cliParsed) {
|
|
241
|
+
return {
|
|
242
|
+
status: "ok",
|
|
243
|
+
message: "could not parse CLI version",
|
|
244
|
+
details: { reason: "unparseable-cli-version" },
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
const resolutions = [];
|
|
248
|
+
for (const candidate of input.candidates) {
|
|
249
|
+
const marker = readSkillMarker(candidate.dir);
|
|
250
|
+
if (!marker)
|
|
251
|
+
continue;
|
|
252
|
+
const markerSemver = parseSemver(marker.version);
|
|
253
|
+
if (!markerSemver)
|
|
254
|
+
continue;
|
|
255
|
+
const drift = classifyDrift(markerSemver, cliParsed);
|
|
256
|
+
const installedAtMs = Date.parse(marker.installedAt);
|
|
257
|
+
resolutions.push({
|
|
258
|
+
agent: candidate.agent,
|
|
259
|
+
dir: candidate.dir,
|
|
260
|
+
marker,
|
|
261
|
+
drift,
|
|
262
|
+
installedAtMs: Number.isFinite(installedAtMs) ? installedAtMs : 0,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
if (resolutions.length === 0) {
|
|
266
|
+
return {
|
|
267
|
+
status: "ok",
|
|
268
|
+
message: "no skill marker yet (treated as fresh install)",
|
|
269
|
+
details: { reason: "no-marker" },
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
// Pick the worst (most-stale) marker. Severity rank fail > warning > ok;
|
|
273
|
+
// tiebreak by oldest installedAt.
|
|
274
|
+
const severityRank = { fail: 2, warning: 1, ok: 0 };
|
|
275
|
+
const worst = [...resolutions].sort((a, b) => {
|
|
276
|
+
const sevDiff = severityRank[b.drift.severity] - severityRank[a.drift.severity];
|
|
277
|
+
if (sevDiff !== 0)
|
|
278
|
+
return sevDiff;
|
|
279
|
+
return a.installedAtMs - b.installedAtMs;
|
|
280
|
+
})[0];
|
|
281
|
+
const baseDetails = {
|
|
282
|
+
agent: worst.agent,
|
|
283
|
+
skillsDir: worst.dir,
|
|
284
|
+
markerVersion: worst.marker.version,
|
|
285
|
+
installedAt: worst.marker.installedAt,
|
|
286
|
+
cliVersion: input.installedCliVersion,
|
|
287
|
+
};
|
|
288
|
+
if (worst.drift.severity === "ok") {
|
|
289
|
+
return {
|
|
290
|
+
status: "ok",
|
|
291
|
+
message: `skills v${worst.marker.version} match CLI`,
|
|
292
|
+
details: baseDetails,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
// Skills that lag the CLI still work — the toolkit is not broken, the
|
|
296
|
+
// library it installed is older than the one it ships. That is a warning
|
|
297
|
+
// with a refresh command, never an exit-1 failure; a "fail"-grade drift
|
|
298
|
+
// (two minors or a major behind) only changes the wording.
|
|
299
|
+
const install = await resolveRecordedInstall(input.recordedInstall, worst.agent);
|
|
300
|
+
return {
|
|
301
|
+
status: "warning",
|
|
302
|
+
message: worst.drift.severity === "fail"
|
|
303
|
+
? `skills v${worst.marker.version} are significantly behind v${input.installedCliVersion}`
|
|
304
|
+
: `skills v${worst.marker.version} are one minor version behind v${input.installedCliVersion}`,
|
|
305
|
+
details: {
|
|
306
|
+
...baseDetails,
|
|
307
|
+
drift: worst.drift.reason,
|
|
308
|
+
...(install ? { install } : {}),
|
|
309
|
+
recommendedAction: skillsRefreshCommand(worst.agent, install, refreshChannel(input.installedCliVersion, input.latestRegistryVersion)),
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
async function resolveRecordedInstall(resolver, agent) {
|
|
314
|
+
try {
|
|
315
|
+
return (await (resolver ?? detectRecordedInstall)(agent)) ?? null;
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// A detection failure must not break doctor; the npx form is the
|
|
319
|
+
// conservative default only when nothing says local-dev.
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* The command that refreshes an agent's skills without changing how its MCP
|
|
325
|
+
* entry was recorded: the local-dev form re-links the same checkout
|
|
326
|
+
* (`setup --local-dev --force` re-copies the checkout's skills); the npx form
|
|
327
|
+
* is for installs that already run the published package.
|
|
328
|
+
*/
|
|
329
|
+
export function skillsRefreshCommand(agent, install, channel = "latest") {
|
|
330
|
+
if (install?.localDev && install.cliPath) {
|
|
331
|
+
return `node ${install.cliPath} setup ${agent} --local-dev --yes --force`;
|
|
332
|
+
}
|
|
333
|
+
const tag = channel === "next" ? "next" : "latest";
|
|
334
|
+
return `npx clear-npx-cache && npx -y summer-engine@${tag} setup ${agent} --yes --force${channel === "next" ? " --channel next" : ""}`;
|
|
335
|
+
}
|
|
336
|
+
/** The shape `summer setup --local-dev` writes: `node <…>/dist/bin/summer.js mcp`
|
|
337
|
+
* (createSummerMcpServerConfig(true)). */
|
|
338
|
+
export function isLocalDevServerConfig(server) {
|
|
339
|
+
const entry = server.args[0] ?? "";
|
|
340
|
+
return (server.command === "node" &&
|
|
341
|
+
/(^|[\\/])bin[\\/]summer\.js$/.test(entry) &&
|
|
342
|
+
server.args[1] === "mcp");
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Read the Summer MCP entry an agent's config records, shape-tolerantly
|
|
346
|
+
* (this is the read side of agent-config.ts's per-format writers):
|
|
347
|
+
* json {"mcpServers": {"summer-engine": {command, args}}} Claude Code, Cursor, …
|
|
348
|
+
* json-copilot {"mcpServers": {"summer-engine": {type, command, args}}}
|
|
349
|
+
* json-vscode {"servers": {"summer-engine": {type, command, args}}}
|
|
350
|
+
* json-opencode {"mcp": {"summer-engine": {type, command: [cmd, ...args]}}}
|
|
351
|
+
* json-zed {"context_servers": {"summer-engine": {source, command, args}}}
|
|
352
|
+
* yaml-goose extensions: summer-engine: {cmd, args}
|
|
353
|
+
* yaml-hermes mcp_servers: summer-engine: {command, args}
|
|
354
|
+
* toml (codex) [mcp_servers.summer-engine]\ncommand = "…"\nargs = ["…", …]
|
|
355
|
+
* Returns null when the file is missing, unparsable, or has no Summer entry.
|
|
356
|
+
*/
|
|
357
|
+
export function readRecordedMcpServer(text, format) {
|
|
358
|
+
if (!text.trim())
|
|
359
|
+
return null;
|
|
360
|
+
if (format === "toml-array") {
|
|
361
|
+
const block = text.match(new RegExp(`^\\[\\[mcp_servers\\]\\]\\s*$([\\s\\S]*?)(?=^\\[|(?![\\s\\S]))`, "gm"));
|
|
362
|
+
for (const candidate of block ?? []) {
|
|
363
|
+
if (!new RegExp(`^name\\s*=\\s*"${SUMMER_MCP_SERVER_NAME}"`, "m").test(candidate))
|
|
364
|
+
continue;
|
|
365
|
+
const command = candidate.match(/^command\s*=\s*"((?:[^"\\]|\\.)*)"/m)?.[1];
|
|
366
|
+
const argsText = candidate.match(/^args\s*=\s*\[([^\]]*)\]/m)?.[1] ?? "";
|
|
367
|
+
if (!command)
|
|
368
|
+
return null;
|
|
369
|
+
const args = [...argsText.matchAll(/"((?:[^"\\]|\\.)*)"/g)].map((m) => m[1].replace(/\\(.)/g, "$1"));
|
|
370
|
+
return { command: command.replace(/\\(.)/g, "$1"), args };
|
|
371
|
+
}
|
|
372
|
+
return null;
|
|
373
|
+
}
|
|
374
|
+
if (format === "toml") {
|
|
375
|
+
const table = text.match(new RegExp(`^\\[mcp_servers\\.${SUMMER_MCP_SERVER_NAME.replace(/[-.]/g, "\\$&")}\\]\\s*$([\\s\\S]*?)(?=^\\[|(?![\\s\\S]))`, "m"));
|
|
376
|
+
if (!table)
|
|
377
|
+
return null;
|
|
378
|
+
const command = table[1].match(/^command\s*=\s*"((?:[^"\\]|\\.)*)"/m)?.[1];
|
|
379
|
+
const argsText = table[1].match(/^args\s*=\s*\[([^\]]*)\]/m)?.[1] ?? "";
|
|
380
|
+
if (!command)
|
|
381
|
+
return null;
|
|
382
|
+
const args = [...argsText.matchAll(/"((?:[^"\\]|\\.)*)"/g)].map((m) => m[1].replace(/\\(.)/g, "$1"));
|
|
383
|
+
return { command: command.replace(/\\(.)/g, "$1"), args };
|
|
384
|
+
}
|
|
385
|
+
let parsed;
|
|
386
|
+
try {
|
|
387
|
+
parsed = format === "yaml-goose" || format === "yaml-hermes" ? parseYaml(text) : JSON.parse(text);
|
|
388
|
+
}
|
|
389
|
+
catch {
|
|
390
|
+
return null;
|
|
391
|
+
}
|
|
392
|
+
if (!parsed || typeof parsed !== "object")
|
|
393
|
+
return null;
|
|
394
|
+
const root = parsed;
|
|
395
|
+
// The format's own key first, then the other shapes (a user may have moved to a newer file layout).
|
|
396
|
+
const containers = [topLevelKey(format), "mcpServers", "servers", "mcp", "context_servers", "extensions", "mcp_servers", "amp.mcpServers"];
|
|
397
|
+
for (const container of [...new Set(containers)]) {
|
|
398
|
+
const servers = root[container];
|
|
399
|
+
if (!servers || typeof servers !== "object")
|
|
400
|
+
continue;
|
|
401
|
+
const entry = servers[SUMMER_MCP_SERVER_NAME];
|
|
402
|
+
if (!entry || typeof entry !== "object")
|
|
403
|
+
continue;
|
|
404
|
+
const record = entry;
|
|
405
|
+
if (typeof record.cmd === "string") {
|
|
406
|
+
// Goose: { cmd, args }
|
|
407
|
+
const args = Array.isArray(record.args) ? record.args.filter((part) => typeof part === "string") : [];
|
|
408
|
+
return { command: record.cmd, args };
|
|
409
|
+
}
|
|
410
|
+
if (Array.isArray(record.command)) {
|
|
411
|
+
const [command, ...args] = record.command.filter((part) => typeof part === "string");
|
|
412
|
+
return command ? { command, args } : null;
|
|
413
|
+
}
|
|
414
|
+
if (typeof record.command === "string") {
|
|
415
|
+
const args = Array.isArray(record.args)
|
|
416
|
+
? record.args.filter((part) => typeof part === "string")
|
|
417
|
+
: [];
|
|
418
|
+
return { command: record.command, args };
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
/** Is the CLI running this check a source checkout rather than an installed
|
|
424
|
+
* package? npm/npx/global installs all live under a node_modules directory. */
|
|
425
|
+
export function runningCliIsCheckout(packageRoot = PACKAGE_ROOT) {
|
|
426
|
+
return !packageRoot.split(/[\\/]/).includes("node_modules");
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* How `summer setup` recorded the agent's Summer MCP entry. Resolves the
|
|
430
|
+
* agent's user-scope config path through agent-config's own target
|
|
431
|
+
* resolution (print mode: no file is written or read there), then reads the
|
|
432
|
+
* entry. Marker agents without an agent config ("summer") and agents whose
|
|
433
|
+
* config has no readable Summer entry fall back to the nature of the running
|
|
434
|
+
* CLI: a checkout recommends re-linking itself, an installed package the npx form.
|
|
435
|
+
*/
|
|
436
|
+
export async function detectRecordedInstall(agent) {
|
|
437
|
+
const supported = parseAgent(agent);
|
|
438
|
+
if (supported) {
|
|
439
|
+
try {
|
|
440
|
+
const target = await configureAgentMcp({ agent: supported, scope: "user", print: true });
|
|
441
|
+
if (existsSync(target.path)) {
|
|
442
|
+
const recorded = readRecordedMcpServer(readFileSync(target.path, "utf-8"), target.format);
|
|
443
|
+
if (recorded) {
|
|
444
|
+
const localDev = isLocalDevServerConfig(recorded);
|
|
445
|
+
return { localDev, cliPath: localDev ? recorded.args[0] ?? null : null, source: "agent-config" };
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
// Unreadable config: fall through to the running-CLI answer.
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
const checkout = runningCliIsCheckout();
|
|
454
|
+
return {
|
|
455
|
+
localDev: checkout,
|
|
456
|
+
cliPath: checkout ? [PACKAGE_ROOT, "dist", "bin", "summer.js"].join(sep) : null,
|
|
457
|
+
source: "running-cli",
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
export function buildBootDriftNotice(installedVersion, registry, agent) {
|
|
461
|
+
if (!registry.ok)
|
|
462
|
+
return null;
|
|
463
|
+
const installed = parseSemver(installedVersion);
|
|
464
|
+
const latest = parseSemver(registry.version);
|
|
465
|
+
if (!installed || !latest)
|
|
466
|
+
return null;
|
|
467
|
+
const drift = classifyDrift(installed, latest);
|
|
468
|
+
if (drift.severity === "ok")
|
|
469
|
+
return null;
|
|
470
|
+
const agentSlug = agent ?? "<agent>";
|
|
471
|
+
const text = `[summer] CLI ${installedVersion} — latest ${registry.version}; ` +
|
|
472
|
+
`run \`npx clear-npx-cache && npx -y summer-engine@latest setup ${agentSlug} --yes --force\` to update.`;
|
|
473
|
+
return {
|
|
474
|
+
installedVersion,
|
|
475
|
+
latestVersion: registry.version,
|
|
476
|
+
agent,
|
|
477
|
+
text,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
@@ -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
|
}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { EngineApiClient } from "../core/api-client.js";
|
|
3
|
+
import type { EngineSelection } from "../core/engine.js";
|
|
4
|
+
import { getCachedBootDriftNotice as getCachedNotice } from "./boot-notice.js";
|
|
4
5
|
export declare const getCachedBootDriftNotice: typeof getCachedNotice;
|
|
6
|
+
/**
|
|
7
|
+
* Server `instructions` in the MCP initialize response (SDK ServerOptions,
|
|
8
|
+
* @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
|
|
9
|
+
* session, before any tool call — the place for the five habits the E2E run
|
|
10
|
+
* (docs/design/archive/E2E-2026-09-03.md, F-17) showed an agent needs on the first
|
|
11
|
+
* turn and would otherwise learn the hard way. Kept under 600 characters so
|
|
12
|
+
* it costs a few hundred tokens once; the full operating guide stays in the
|
|
13
|
+
* summer_agent_playbook prompt / summer_get_agent_playbook tool.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SUMMER_MCP_INSTRUCTIONS: string;
|
|
5
16
|
export declare function configureMcpEngineSelection(selection?: EngineSelection): void;
|
|
6
17
|
export declare function getClient(): Promise<EngineApiClient>;
|
|
7
18
|
export declare function resetClient(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Build the MCP server with every Summer tool registered, without connecting
|
|
21
|
+
* a transport. startMcpServer() uses this; tests use it to count the live
|
|
22
|
+
* tool surface against registry/generated/counts.json.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createMcpServer(): {
|
|
25
|
+
server: McpServer;
|
|
26
|
+
getRegisteredToolCount: () => number;
|
|
27
|
+
};
|
|
8
28
|
export interface StartMcpServerOptions {
|
|
9
29
|
projectPath?: string;
|
|
10
30
|
instanceId?: string;
|