summer-engine 3.7.0 → 4.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 +2 -13
- package/.claude-plugin/plugin.json +25 -22
- package/.codex-plugin/plugin.json +8 -14
- package/.cursor-plugin/plugin.json +7 -13
- package/.factory-plugin/plugin.json +7 -13
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +112 -0
- package/GEMINI.md +3 -3
- package/README.md +111 -31
- package/assets/icon.png +0 -0
- package/commands/start.md +71 -0
- package/commands/summer.md +5 -3
- package/dist/cli/banner.js +3 -0
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/ops.d.ts +47 -0
- package/dist/cli/commands/ops.js +301 -0
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +37 -12
- package/dist/cli/commands/skills.js +11 -7
- package/dist/cli/index.js +7 -0
- package/dist/core/agent-host.d.ts +65 -0
- package/dist/core/agent-host.js +193 -0
- package/dist/core/capabilities/agent-playbook.d.ts +3 -0
- package/dist/core/capabilities/agent-playbook.js +54 -2
- package/dist/core/capabilities/apps.d.ts +341 -0
- package/dist/core/capabilities/apps.js +353 -0
- package/dist/core/capabilities/doctor.d.ts +3 -0
- package/dist/core/capabilities/doctor.js +20 -15
- package/dist/core/capabilities/enable-plugin.d.ts +27 -0
- package/dist/core/capabilities/enable-plugin.js +75 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
- package/dist/core/capabilities/game-task-plan.d.ts +12 -6
- package/dist/core/capabilities/game-task-plan.js +80 -5
- package/dist/core/capabilities/motion-generation.js +2 -2
- package/dist/core/capabilities/navigation/open.d.ts +6 -2
- package/dist/core/capabilities/navigation/open.js +3 -0
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +4 -4
- package/dist/core/capabilities/scene-script-target.d.ts +17 -0
- package/dist/core/capabilities/scene-script-target.js +70 -0
- package/dist/core/capabilities/sfx-choices.d.ts +4 -0
- package/dist/core/capabilities/sfx-choices.js +13 -6
- package/dist/core/capabilities/tool-dispatch.d.ts +12 -3
- package/dist/core/capabilities/tool-dispatch.js +130 -46
- package/dist/core/capability-skew.js +4 -0
- package/dist/core/embeddings.d.ts +2 -0
- package/dist/core/embeddings.js +1 -1
- package/dist/core/error-codes.d.ts +62 -0
- package/dist/core/error-codes.js +97 -0
- package/dist/core/format.d.ts +2 -0
- package/dist/core/format.js +2 -1
- package/dist/core/hosted-mcp.d.ts +22 -0
- package/dist/core/hosted-mcp.js +56 -1
- package/dist/core/library-read.js +5 -0
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/catalog.d.ts +41 -0
- package/dist/core/ops/catalog.js +145 -0
- package/dist/core/ops/cloud.d.ts +56 -0
- package/dist/core/ops/cloud.js +175 -0
- package/dist/core/ops/contract.d.ts +119 -0
- package/dist/core/ops/contract.js +142 -0
- package/dist/core/ops/engine-answer.d.ts +25 -0
- package/dist/core/ops/engine-answer.js +117 -0
- package/dist/core/ops/engine.d.ts +55 -0
- package/dist/core/ops/engine.js +649 -0
- package/dist/core/ops/save-files.d.ts +78 -0
- package/dist/core/ops/save-files.js +419 -0
- package/dist/core/ops/search.d.ts +9 -0
- package/dist/core/ops/search.js +55 -0
- package/dist/core/skills-registry.d.ts +16 -1
- package/dist/core/skills-registry.js +35 -2
- package/dist/core/telemetry.d.ts +32 -0
- package/dist/core/telemetry.js +38 -10
- package/dist/core/tool-profiles.d.ts +25 -0
- package/dist/core/tool-profiles.js +41 -0
- package/dist/installer/agent-config.d.ts +17 -4
- package/dist/installer/agent-config.js +22 -6
- package/dist/installer/agent-table.d.ts +3 -0
- package/dist/installer/agent-table.js +10 -7
- package/dist/installer/setup.d.ts +2 -0
- package/dist/installer/setup.js +9 -4
- package/dist/installer/version-check.d.ts +29 -9
- package/dist/installer/version-check.js +81 -28
- package/dist/mcp/command.js +7 -0
- package/dist/mcp/hosted-mount.d.ts +27 -2
- package/dist/mcp/hosted-mount.js +66 -24
- package/dist/mcp/legacy-toolset.d.ts +27 -0
- package/dist/mcp/legacy-toolset.js +43 -0
- package/dist/mcp/ops-surface.d.ts +59 -0
- package/dist/mcp/ops-surface.js +443 -0
- package/dist/mcp/server.d.ts +35 -11
- package/dist/mcp/server.js +236 -89
- package/dist/mcp/tool-results.d.ts +26 -0
- package/dist/mcp/tool-results.js +81 -0
- package/dist/mcp/tool-surface.d.ts +65 -0
- package/dist/mcp/tool-surface.js +317 -0
- package/dist/mcp/tools/app-tools.d.ts +2 -0
- package/dist/mcp/tools/app-tools.js +71 -0
- package/dist/mcp/tools/asset-tools.js +55 -53
- package/dist/mcp/tools/audit-tools.js +21 -21
- package/dist/mcp/tools/debug-tools.js +6 -6
- package/dist/mcp/tools/fabricate-tools.js +6 -6
- package/dist/mcp/tools/generate-tools.js +76 -70
- package/dist/mcp/tools/project-tools.d.ts +9 -4
- package/dist/mcp/tools/project-tools.js +16 -10
- package/dist/mcp/tools/scene-tools.js +12 -23
- package/dist/mcp/tools/script-tools.js +9 -5
- package/dist/mcp/tools/with-engine.d.ts +6 -0
- package/dist/mcp/tools/with-engine.js +19 -0
- package/gemini-extension.json +6 -12
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/junie/README.md +1 -1
- package/integrations/lm-studio/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/visual-studio/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +85 -35
- package/library/references/mcp-tools-reference/resource.yaml +1 -1
- package/library/references/product-map/resource.yaml +2 -2
- package/library/skills/3d-lighting/SKILL.md +53 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +126 -116
- package/library/skills/adaptive-music/SKILL.md +19 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +1 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +22 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +41 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +1 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +21 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +10 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +1 -1
- package/library/skills/auto-fire-targeting/resource.yaml +1 -1
- package/library/skills/bounded-engine-runs/SKILL.md +1 -1
- package/library/skills/bounded-engine-runs/resource.yaml +1 -1
- package/library/skills/brainstorm-game/SKILL.md +1 -1
- package/library/skills/brainstorm-game/resource.yaml +1 -1
- package/library/skills/brainstorming/SKILL.md +1 -1
- package/library/skills/brainstorming/resource.yaml +1 -1
- package/library/skills/browse-templates/SKILL.md +1 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +2 -2
- package/library/skills/camera-rigs/resource.yaml +1 -1
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -0
- package/library/skills/character-animation-wiring/SKILL.md +4 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +55 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +3 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +24 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +58 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +16 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +239 -0
- package/library/skills/concept-to-level/references/technical-rules.md +150 -0
- package/library/skills/concept-to-level/resource.yaml +44 -0
- package/library/skills/create-asset-sheet/SKILL.md +19 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +2 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +1 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +23 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +1 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +22 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +1 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +1 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +20 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +6 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +7 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +14 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +33 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +8 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +4 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +1 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +30 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +1 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +3 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +1 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +1 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +2 -2
- package/library/skills/instantiate-asset-pack/resource.yaml +1 -1
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +1 -0
- package/library/skills/make-game/SKILL.md +4 -4
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/make-game/references/3d-fps.md +1 -1
- package/library/skills/make-game/references/3d-horror.md +1 -1
- package/library/skills/make-game/references/3d-third-person.md +2 -2
- package/library/skills/make-game/resource.yaml +1 -1
- package/library/skills/multiplayer/SKILL.md +1 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +1 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +8 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +1 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +22 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +11 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +1 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +24 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +27 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +1 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +1 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +20 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +25 -19
- package/library/skills/prop-model/resource.yaml +1 -1
- package/library/skills/psx-retro-rendering/resource.yaml +1 -0
- package/library/skills/publish-your-game/SKILL.md +16 -6
- package/library/skills/publish-your-game/resource.yaml +3 -3
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -0
- package/library/skills/release-readiness/SKILL.md +1 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +1 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +23 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +1 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +1 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +1 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +2 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +66 -636
- package/library/skills/scene-scripting/references/ctx-api.md +184 -0
- package/library/skills/scene-scripting/references/recipes-2d-ui.md +193 -0
- package/library/skills/scene-scripting/references/recipes-3d.md +280 -0
- package/library/skills/scene-scripting/resource.yaml +4 -4
- package/library/skills/scene-to-level/SKILL.md +2 -2
- package/library/skills/scene-to-level/resource.yaml +1 -1
- package/library/skills/skill-create/resource.yaml +1 -0
- package/library/skills/skill-improve/resource.yaml +1 -0
- package/library/skills/skill-test/SKILL.md +2 -2
- package/library/skills/skill-test/resource.yaml +1 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +1 -0
- package/library/skills/skybox-panorama/SKILL.md +27 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +31 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +14 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +32 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +3 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +3 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +7 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +168 -0
- package/library/skills/summer-apps/manifest.md +57 -0
- package/library/skills/summer-apps/minimal-app.md +183 -0
- package/library/skills/summer-apps/resource.yaml +36 -0
- package/library/skills/summer-apps/sdk-reference.md +135 -0
- package/library/skills/summer-apps-design/SKILL.md +197 -0
- package/library/skills/summer-apps-design/resource.yaml +23 -0
- package/library/skills/summer-assets/SKILL.md +56 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-store/SKILL.md +1 -1
- package/library/skills/text-to-motion/SKILL.md +30 -23
- package/library/skills/text-to-motion/prompts-and-controls.md +5 -5
- package/library/skills/text-to-motion/resource.yaml +1 -1
- package/library/skills/text-to-motion/rigging-for-text-motion.md +2 -2
- package/library/skills/tileable-texture/SKILL.md +19 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +28 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +41 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +47 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +1 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +7 -5
- package/library/skills/using-summer/resource.yaml +1 -1
- package/library/skills/vehicle-model/SKILL.md +65 -57
- package/library/skills/vehicle-model/resource.yaml +1 -1
- package/library/skills/verification-before-completion/SKILL.md +1 -1
- package/library/skills/verification-before-completion/resource.yaml +1 -1
- package/library/skills/verifying-scenes/SKILL.md +2 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +2 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +15 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +1 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +7 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +23 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +20 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +13 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +12 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +71 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +1 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +1 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +1 -1
- package/library/skills/world-building-3d/resource.yaml +1 -1
- package/library/skills/writing-skills/resource.yaml +1 -0
- package/library/tools/add-node/GUIDE.md +14 -0
- package/library/tools/align-distribute-3d/GUIDE.md +7 -0
- package/library/tools/app-call/resource.yaml +59 -0
- package/library/tools/app-create/resource.yaml +67 -0
- package/library/tools/app-data/resource.yaml +74 -0
- package/library/tools/app-dock/resource.yaml +59 -0
- package/library/tools/app-events/resource.yaml +68 -0
- package/library/tools/app-get/resource.yaml +46 -0
- package/library/tools/app-guide/resource.yaml +55 -0
- package/library/tools/app-list/resource.yaml +48 -0
- package/library/tools/app-page/resource.yaml +74 -0
- package/library/tools/app-publish/resource.yaml +90 -0
- package/library/tools/app-report-gap/resource.yaml +58 -0
- package/library/tools/app-screenshot/resource.yaml +103 -0
- package/library/tools/app-tools/resource.yaml +46 -0
- package/library/tools/app-update/resource.yaml +68 -0
- package/library/tools/attach-to-surface/GUIDE.md +15 -0
- package/library/tools/batch/GUIDE.md +27 -0
- package/library/tools/camera-bookmark/GUIDE.md +12 -0
- package/library/tools/capture-gameplay/GUIDE.md +3 -0
- package/library/tools/capture-gameplay/resource.yaml +3 -3
- package/library/tools/check-job/resource.yaml +1 -1
- package/library/tools/clear-console/GUIDE.md +3 -0
- package/library/tools/connect-ports/GUIDE.md +9 -0
- package/library/tools/connect-signal/GUIDE.md +14 -0
- package/library/tools/create-debug-report/GUIDE.md +10 -0
- package/library/tools/create-scene/GUIDE.md +10 -0
- package/library/tools/debug-views/GUIDE.md +7 -0
- package/library/tools/enable-plugin/GUIDE.md +3 -0
- package/library/tools/enable-plugin/resource.yaml +53 -0
- package/library/tools/export-game/GUIDE.md +3 -0
- package/library/tools/export-game/resource.yaml +3 -3
- package/library/tools/export-templates/GUIDE.md +3 -0
- package/library/tools/fabricate-3d/GUIDE.md +19 -0
- package/library/tools/frame-nodes/GUIDE.md +9 -0
- package/library/tools/frame-shot/GUIDE.md +9 -0
- package/library/tools/game-control/GUIDE.md +9 -0
- package/library/tools/game-input/GUIDE.md +9 -0
- package/library/tools/game-probe/GUIDE.md +9 -0
- package/library/tools/generate-3d/resource.yaml +3 -3
- package/library/tools/generate-motion/resource.yaml +2 -2
- package/library/tools/get-console/GUIDE.md +9 -0
- package/library/tools/get-console/resource.yaml +5 -0
- package/library/tools/get-debugger-errors/GUIDE.md +7 -0
- package/library/tools/get-debugger-errors/resource.yaml +5 -0
- package/library/tools/get-debugger-warnings/GUIDE.md +7 -0
- package/library/tools/get-debugger-warnings/resource.yaml +5 -0
- package/library/tools/get-diagnostics/GUIDE.md +13 -0
- package/library/tools/get-project-context/GUIDE.md +25 -0
- package/library/tools/get-runtime-tree/GUIDE.md +7 -0
- package/library/tools/get-runtime-tree/resource.yaml +5 -0
- package/library/tools/get-scene-tree/GUIDE.md +11 -0
- package/library/tools/get-scene-tree/resource.yaml +5 -0
- package/library/tools/get-script-errors/GUIDE.md +5 -0
- package/library/tools/grep/GUIDE.md +11 -0
- package/library/tools/import-asset/GUIDE.md +8 -0
- package/library/tools/import-asset-by-id/GUIDE.md +12 -0
- package/library/tools/import-from-url/GUIDE.md +10 -0
- package/library/tools/import-from-url-batch/GUIDE.md +3 -0
- package/library/tools/import-hdri/GUIDE.md +16 -0
- package/library/tools/input-map-bind/GUIDE.md +11 -0
- package/library/tools/inspect-asset/GUIDE.md +14 -0
- package/library/tools/inspect-asset/resource.yaml +5 -0
- package/library/tools/inspect-node/GUIDE.md +11 -0
- package/library/tools/inspect-node/resource.yaml +5 -0
- package/library/tools/inspect-resource/GUIDE.md +7 -0
- package/library/tools/inspect-resource/resource.yaml +5 -0
- package/library/tools/inspect-runtime-node/GUIDE.md +7 -0
- package/library/tools/inspect-runtime-node/resource.yaml +5 -0
- package/library/tools/instantiate-scene/GUIDE.md +12 -0
- package/library/tools/is-running/GUIDE.md +3 -0
- package/library/tools/measure/GUIDE.md +8 -0
- package/library/tools/navigation-probe/GUIDE.md +9 -0
- package/library/tools/open/resource.yaml +2 -2
- package/library/tools/open-main-scene/GUIDE.md +6 -0
- package/library/tools/open-scene/GUIDE.md +8 -0
- package/library/tools/place-adjacent/GUIDE.md +7 -0
- package/library/tools/play/GUIDE.md +13 -0
- package/library/tools/project-setting/GUIDE.md +9 -0
- package/library/tools/publish-build/resource.yaml +6 -6
- package/library/tools/raycast/GUIDE.md +7 -0
- package/library/tools/read-file/GUIDE.md +10 -0
- package/library/tools/read-library/resource.yaml +5 -0
- package/library/tools/recent-events/GUIDE.md +7 -0
- package/library/tools/remove-node/GUIDE.md +3 -0
- package/library/tools/repeat-along/GUIDE.md +5 -0
- package/library/tools/replace-node/GUIDE.md +9 -0
- package/library/tools/replace-text/GUIDE.md +5 -0
- package/library/tools/run-editor-script/GUIDE.md +16 -0
- package/library/tools/run-script/GUIDE.md +30 -0
- package/library/tools/run-script/resource.yaml +6 -3
- package/library/tools/runtime-animate/GUIDE.md +7 -0
- package/library/tools/runtime-call/GUIDE.md +7 -0
- package/library/tools/runtime-set/GUIDE.md +9 -0
- package/library/tools/runtime-spawn/GUIDE.md +9 -0
- package/library/tools/save-scene/GUIDE.md +3 -0
- package/library/tools/scene-audit/GUIDE.md +29 -0
- package/library/tools/screenshot/GUIDE.md +17 -0
- package/library/tools/select-node/GUIDE.md +3 -0
- package/library/tools/set-prop/GUIDE.md +23 -0
- package/library/tools/set-resource-property/GUIDE.md +8 -0
- package/library/tools/shot-sheet/GUIDE.md +7 -0
- package/library/tools/snap-to-surface/GUIDE.md +17 -0
- package/library/tools/snapshot-diff/GUIDE.md +7 -0
- package/library/tools/starcast/GUIDE.md +12 -0
- package/library/tools/stop/GUIDE.md +3 -0
- package/library/tools/test-placement/GUIDE.md +7 -0
- package/library/tools/ui-actions/GUIDE.md +12 -0
- package/library/tools/ui-activate/GUIDE.md +11 -0
- package/library/tools/ui-screenshot/GUIDE.md +9 -0
- package/library/tools/ui-tree/GUIDE.md +10 -0
- package/library/tools/wait-for-event/GUIDE.md +11 -0
- package/library/tools/world-snapshot/GUIDE.md +9 -0
- package/library/tools/write-file/GUIDE.md +5 -0
- package/library/tools/zoom/GUIDE.md +5 -0
- package/package.json +6 -4
- package/registry/generated/aliases.json +15 -0
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +6 -12
- package/registry/generated/index.json +1155 -408
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude.json +25 -22
- package/registry/generated/plugin.codex.json +8 -14
- package/registry/generated/plugin.cursor.json +7 -13
- package/registry/generated/plugin.factory.json +7 -13
- package/registry/generated/server.json +34 -0
- package/registry/generated/skills-index.md +126 -116
- package/registry/generated/skills-registry.json +178 -113
- package/registry/operations/fixtures/invalid-deprecated-without-replacement.json +60 -0
- package/registry/operations/fixtures/invalid-name.json +60 -0
- package/registry/operations/fixtures/invalid-publish-without-owner.json +82 -0
- package/registry/operations/fixtures/invalid-spend-without-estimate.json +42 -0
- package/registry/operations/fixtures/invalid-unknown-field.json +61 -0
- package/registry/operations/fixtures/valid-player-facing.json +82 -0
- package/registry/operations/fixtures/valid-read.json +60 -0
- package/registry/operations/fixtures/valid-spend.json +43 -0
- package/registry/operations/legacy-names.json +1206 -0
- package/registry/schemas/allowed-hosts.json +4 -2
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
package/dist/core/telemetry.d.ts
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage beacons for the local MCP server. Fire-and-forget, never blocks, never throws.
|
|
3
|
+
*
|
|
4
|
+
* - One session ping per MCP server lifetime (mcp_session_start), on the
|
|
5
|
+
* first tool call, with the host app's name from the MCP handshake.
|
|
6
|
+
* - One line per local tool call (mcp_tool_call): the tool name, the
|
|
7
|
+
* Summer operation it ran, success, duration, the host app's name from the
|
|
8
|
+
* MCP handshake, and the tool surface and profile. Nothing else: no
|
|
9
|
+
* arguments, no results, no project or file names.
|
|
10
|
+
*
|
|
11
|
+
* Both go to /api/mcp/log-local-call, only when signed in (the account token
|
|
12
|
+
* attributes them), and never when SUMMER_NO_TELEMETRY=1 or DO_NOT_TRACK=1.
|
|
13
|
+
* The endpoint always returns allowed:true and never gates; the response is
|
|
14
|
+
* ignored.
|
|
15
|
+
*/
|
|
16
|
+
import { isTelemetryDisabled } from "./agent-host.js";
|
|
17
|
+
export { isTelemetryDisabled };
|
|
1
18
|
/**
|
|
2
19
|
* Ping the telemetry endpoint once per MCP server lifetime.
|
|
3
20
|
*
|
|
@@ -7,6 +24,21 @@
|
|
|
7
24
|
* - Skips entirely if no auth token is on disk (anonymous users still work).
|
|
8
25
|
*/
|
|
9
26
|
export declare function recordMcpSession(): void;
|
|
27
|
+
export interface LocalToolCall {
|
|
28
|
+
tool: string;
|
|
29
|
+
ok: boolean;
|
|
30
|
+
durationMs: number;
|
|
31
|
+
/** The host app's name from the MCP handshake (clientInfo.name). */
|
|
32
|
+
mcpClient?: string;
|
|
33
|
+
/** The Summer operation the call ran (core/ops/contract.ts opForToolCall). */
|
|
34
|
+
op?: string | null;
|
|
35
|
+
/** The tool surface: v3 (3.x names) or v4 (the operation catalog). */
|
|
36
|
+
surfaceVersion?: "v3" | "v4";
|
|
37
|
+
/** The MCP profile: full, engine, assets or custom. */
|
|
38
|
+
profile?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Report one local tool call: tool name, success, duration, host app name. */
|
|
41
|
+
export declare function recordLocalToolCall(call: LocalToolCall): void;
|
|
10
42
|
/**
|
|
11
43
|
* Reset the once-per-session guard. Test-only.
|
|
12
44
|
*/
|
package/dist/core/telemetry.js
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* One ping per MCP server lifetime — counts daily-active users, not per-tool calls.
|
|
2
|
+
* Usage beacons for the local MCP server. Fire-and-forget, never blocks, never throws.
|
|
4
3
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* - One session ping per MCP server lifetime (mcp_session_start), on the
|
|
5
|
+
* first tool call, with the host app's name from the MCP handshake.
|
|
6
|
+
* - One line per local tool call (mcp_tool_call): the tool name, the
|
|
7
|
+
* Summer operation it ran, success, duration, the host app's name from the
|
|
8
|
+
* MCP handshake, and the tool surface and profile. Nothing else: no
|
|
9
|
+
* arguments, no results, no project or file names.
|
|
10
|
+
*
|
|
11
|
+
* Both go to /api/mcp/log-local-call, only when signed in (the account token
|
|
12
|
+
* attributes them), and never when SUMMER_NO_TELEMETRY=1 or DO_NOT_TRACK=1.
|
|
13
|
+
* The endpoint always returns allowed:true and never gates; the response is
|
|
14
|
+
* ignored.
|
|
8
15
|
*/
|
|
16
|
+
import { currentMcpClient, isTelemetryDisabled, summerRequestHeaders } from "./agent-host.js";
|
|
9
17
|
import { getAuthToken } from "./auth.js";
|
|
10
18
|
import { resolveGatewayUrl } from "./config.js";
|
|
19
|
+
export { isTelemetryDisabled };
|
|
11
20
|
const TELEMETRY_PATH = "/api/mcp/log-local-call";
|
|
12
21
|
const TIMEOUT_MS = 5000;
|
|
22
|
+
const TOOL_NAME = /^summer_[a-z0-9_]{1,64}$/;
|
|
13
23
|
let pinged = false;
|
|
14
24
|
/**
|
|
15
25
|
* Ping the telemetry endpoint once per MCP server lifetime.
|
|
@@ -20,9 +30,29 @@ let pinged = false;
|
|
|
20
30
|
* - Skips entirely if no auth token is on disk (anonymous users still work).
|
|
21
31
|
*/
|
|
22
32
|
export function recordMcpSession() {
|
|
23
|
-
if (pinged)
|
|
33
|
+
if (pinged || isTelemetryDisabled())
|
|
24
34
|
return;
|
|
25
35
|
pinged = true;
|
|
36
|
+
const mcpClient = currentMcpClient()?.name;
|
|
37
|
+
send({ client: "summer-cli", event: "mcp_session_start", ...(mcpClient ? { mcpClient: mcpClient.slice(0, 64) } : {}) });
|
|
38
|
+
}
|
|
39
|
+
/** Report one local tool call: tool name, success, duration, host app name. */
|
|
40
|
+
export function recordLocalToolCall(call) {
|
|
41
|
+
if (isTelemetryDisabled() || !TOOL_NAME.test(call.tool))
|
|
42
|
+
return;
|
|
43
|
+
send({
|
|
44
|
+
client: "summer-cli",
|
|
45
|
+
event: "mcp_tool_call",
|
|
46
|
+
...(call.mcpClient ? { mcpClient: call.mcpClient.slice(0, 64) } : {}),
|
|
47
|
+
tool: call.tool,
|
|
48
|
+
...(call.op ? { op: call.op } : {}),
|
|
49
|
+
...(call.surfaceVersion ? { surfaceVersion: call.surfaceVersion } : {}),
|
|
50
|
+
...(call.profile ? { profile: call.profile } : {}),
|
|
51
|
+
ok: call.ok,
|
|
52
|
+
durationMs: Math.max(0, Math.round(call.durationMs)),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function send(body) {
|
|
26
56
|
// Wrap the entire async pipeline in a void-discarded promise so the caller
|
|
27
57
|
// never accidentally awaits us.
|
|
28
58
|
void (async () => {
|
|
@@ -40,13 +70,11 @@ export function recordMcpSession() {
|
|
|
40
70
|
method: "POST",
|
|
41
71
|
signal: ctrl.signal,
|
|
42
72
|
headers: {
|
|
73
|
+
...summerRequestHeaders(),
|
|
43
74
|
Authorization: `Bearer ${token}`,
|
|
44
75
|
"Content-Type": "application/json",
|
|
45
76
|
},
|
|
46
|
-
body: JSON.stringify(
|
|
47
|
-
client: "summer-cli",
|
|
48
|
-
event: "mcp_session_start",
|
|
49
|
-
}),
|
|
77
|
+
body: JSON.stringify(body),
|
|
50
78
|
});
|
|
51
79
|
}
|
|
52
80
|
finally {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool profiles (`summer mcp --profile`, SUMMER_PROFILE) and the toolsets
|
|
3
|
+
* they pick. Shared by the MCP server (src/mcp/tool-surface.ts) and setup,
|
|
4
|
+
* which writes a profile into an agent's MCP entry. `full` is today's
|
|
5
|
+
* surface exactly and the default, so existing configs keep it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const TOOLSETS: readonly ["core", "assets", "tools", "engine", "ui", "ship", "uploads", "apps", "board", "grow", "studio", "cloud", "other"];
|
|
8
|
+
export type Toolset = (typeof TOOLSETS)[number];
|
|
9
|
+
export declare const PROFILES: {
|
|
10
|
+
/** Every tool, local and hosted (today's surface). */
|
|
11
|
+
readonly full: readonly ["core", "assets", "tools", "engine", "ui", "ship", "uploads", "apps", "board", "grow", "studio", "cloud", "other"];
|
|
12
|
+
/** Summer Engine creators: engine, generation and the store. Fits clients with a 128-tool limit. */
|
|
13
|
+
readonly engine: readonly ["core", "assets", "engine", "ship"];
|
|
14
|
+
/** Any engine or none: generation, the asset library, account and library search. No engine tools. */
|
|
15
|
+
readonly assets: readonly ["core", "assets", "tools"];
|
|
16
|
+
};
|
|
17
|
+
export type Profile = keyof typeof PROFILES;
|
|
18
|
+
/** Non-full profiles never register more tools than this (VS Code Copilot's per-request limit). */
|
|
19
|
+
export declare const PROFILE_TOOL_LIMIT = 128;
|
|
20
|
+
/** A profile name, or null when the value names none. */
|
|
21
|
+
export declare function parseProfile(value: string | undefined): Profile | null;
|
|
22
|
+
/** v4: the operation catalog (summer_search, summer_call, `summer <area> <action>`); v3: the 3.x tools. */
|
|
23
|
+
export type SurfaceVersion = "v3" | "v4";
|
|
24
|
+
/** `--surface` / SUMMER_SURFACE: v4 is the default since 4.0; v3 keeps the 3.x tools. */
|
|
25
|
+
export declare function resolveSurface(value: string | undefined, env?: NodeJS.ProcessEnv): SurfaceVersion;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool profiles (`summer mcp --profile`, SUMMER_PROFILE) and the toolsets
|
|
3
|
+
* they pick. Shared by the MCP server (src/mcp/tool-surface.ts) and setup,
|
|
4
|
+
* which writes a profile into an agent's MCP entry. `full` is today's
|
|
5
|
+
* surface exactly and the default, so existing configs keep it.
|
|
6
|
+
*/
|
|
7
|
+
export const TOOLSETS = [
|
|
8
|
+
"core",
|
|
9
|
+
"assets",
|
|
10
|
+
"tools",
|
|
11
|
+
"engine",
|
|
12
|
+
"ui",
|
|
13
|
+
"ship",
|
|
14
|
+
"uploads",
|
|
15
|
+
"apps",
|
|
16
|
+
"board",
|
|
17
|
+
"grow",
|
|
18
|
+
"studio",
|
|
19
|
+
"cloud",
|
|
20
|
+
"other",
|
|
21
|
+
];
|
|
22
|
+
export const PROFILES = {
|
|
23
|
+
/** Every tool, local and hosted (today's surface). */
|
|
24
|
+
full: TOOLSETS,
|
|
25
|
+
/** Summer Engine creators: engine, generation and the store. Fits clients with a 128-tool limit. */
|
|
26
|
+
engine: ["core", "assets", "engine", "ship"],
|
|
27
|
+
/** Any engine or none: generation, the asset library, account and library search. No engine tools. */
|
|
28
|
+
assets: ["core", "assets", "tools"],
|
|
29
|
+
};
|
|
30
|
+
/** Non-full profiles never register more tools than this (VS Code Copilot's per-request limit). */
|
|
31
|
+
export const PROFILE_TOOL_LIMIT = 128;
|
|
32
|
+
/** A profile name, or null when the value names none. */
|
|
33
|
+
export function parseProfile(value) {
|
|
34
|
+
const name = (value ?? "").trim().toLowerCase();
|
|
35
|
+
return Object.hasOwn(PROFILES, name) ? name : null;
|
|
36
|
+
}
|
|
37
|
+
/** `--surface` / SUMMER_SURFACE: v4 is the default since 4.0; v3 keeps the 3.x tools. */
|
|
38
|
+
export function resolveSurface(value, env = process.env) {
|
|
39
|
+
const asked = (value ?? env.SUMMER_SURFACE ?? "").trim().toLowerCase();
|
|
40
|
+
return asked === "v3" || asked === "3" ? "v3" : "v4";
|
|
41
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Profile } from "../core/tool-profiles.js";
|
|
1
2
|
import { type ConfigScope, type McpFormat, type SupportedAgent } from "./agent-table.js";
|
|
2
3
|
export { supportedAgents, type ConfigScope, type SupportedAgent } from "./agent-table.js";
|
|
3
4
|
export declare const SUMMER_MCP_SERVER_NAME = "summer-engine";
|
|
@@ -12,9 +13,11 @@ export interface AgentConfigOptions {
|
|
|
12
13
|
dryRun?: boolean;
|
|
13
14
|
print?: boolean;
|
|
14
15
|
localDev?: boolean;
|
|
15
|
-
/** npm dist-tag the generated MCP entry runs (`npx -y summer-engine@<channel> mcp`).
|
|
16
|
+
/** npm dist-tag or exact version the generated MCP entry runs (`npx -y summer-engine@<channel> mcp`).
|
|
16
17
|
* Default "latest"; "next" while a release soaks on the next tag. Ignored with localDev. */
|
|
17
18
|
channel?: string;
|
|
19
|
+
/** MCP tool profile written as SUMMER_PROFILE; default the agent's own (full for most). */
|
|
20
|
+
profile?: Profile;
|
|
18
21
|
cwd?: string;
|
|
19
22
|
env?: NodeJS.ProcessEnv;
|
|
20
23
|
}
|
|
@@ -31,8 +34,11 @@ export interface AgentConfigResult {
|
|
|
31
34
|
dryRun: boolean;
|
|
32
35
|
print: boolean;
|
|
33
36
|
localDev: boolean;
|
|
34
|
-
/** The dist-tag the written entry runs ("latest" unless --channel /
|
|
37
|
+
/** The dist-tag or exact version the written entry runs ("latest" unless --channel /
|
|
38
|
+
* SUMMER_CHANNEL, or a CLI ahead of npm latest: see resolveDefaultChannel). */
|
|
35
39
|
channel: string;
|
|
40
|
+
/** The MCP tool profile the entry runs (full = every tool, no SUMMER_PROFILE written). */
|
|
41
|
+
profile: Profile;
|
|
36
42
|
warnings: string[];
|
|
37
43
|
nextSteps: string[];
|
|
38
44
|
}
|
|
@@ -72,9 +78,16 @@ export interface RemoteMcpResult {
|
|
|
72
78
|
export declare function configureSummerGamesMcp(options: Pick<AgentConfigOptions, "agent" | "scope" | "dryRun" | "cwd" | "env">): Promise<RemoteMcpResult | null>;
|
|
73
79
|
export declare const DEFAULT_CHANNEL = "latest";
|
|
74
80
|
/** npm dist-tags are lowercase words like `latest`, `next`, `beta`, `v3-preview`;
|
|
75
|
-
*
|
|
76
|
-
*
|
|
81
|
+
* an exact version (`3.9.1`, `3.9.1-rc.1`) pins the entry to that release, which
|
|
82
|
+
* setup does for a CLI that is ahead of npm latest. Anything else, partial
|
|
83
|
+
* versions and paths included, is refused. */
|
|
77
84
|
export declare function normalizeChannel(channel: string | undefined): string;
|
|
85
|
+
/**
|
|
86
|
+
* The profile rides in the entry's env, not its args: an older summer-engine
|
|
87
|
+
* that an agent still runs ignores the variable and serves every tool, where
|
|
88
|
+
* an unknown --profile flag would stop it from starting.
|
|
89
|
+
*/
|
|
90
|
+
export declare function withProfile(server: StdioMcpServerConfig, profile: Profile): StdioMcpServerConfig;
|
|
78
91
|
export declare function createSummerMcpServerConfig(localDev: boolean, platform?: NodeJS.Platform, channel?: string): StdioMcpServerConfig;
|
|
79
92
|
export declare function renderConfigSnippet(agent: SupportedAgent, server: StdioMcpServerConfig): string;
|
|
80
93
|
/** The key under which the file lists MCP servers (see McpFormat in agent-table.ts). */
|
|
@@ -27,9 +27,12 @@ export function resolveAgentSelection(agentArg, agentOpt) {
|
|
|
27
27
|
if (agentArg && agentOpt && parseAgent(agentArg) !== parseAgent(agentOpt)) {
|
|
28
28
|
throw new Error("Specify the agent either positionally or with --agent, not both.");
|
|
29
29
|
}
|
|
30
|
-
const
|
|
30
|
+
const name = agentOpt ?? agentArg;
|
|
31
|
+
const parsed = parseAgent(name);
|
|
31
32
|
if (!parsed) {
|
|
32
|
-
throw new Error(
|
|
33
|
+
throw new Error(name
|
|
34
|
+
? `Unknown agent "${name}". Supported: ${supportedAgents.join(", ")}`
|
|
35
|
+
: `Specify an agent: ${supportedAgents.join(", ")}`);
|
|
33
36
|
}
|
|
34
37
|
return parsed;
|
|
35
38
|
}
|
|
@@ -45,8 +48,9 @@ export async function configureAgentMcp(options) {
|
|
|
45
48
|
const env = options.env ?? process.env;
|
|
46
49
|
const cwd = resolve(options.cwd ?? process.cwd());
|
|
47
50
|
const channel = normalizeChannel(options.channel);
|
|
48
|
-
const server = createSummerMcpServerConfig(Boolean(options.localDev), process.platform, channel);
|
|
49
51
|
const spec = agentSpec(options.agent);
|
|
52
|
+
const profile = options.profile ?? spec.mcpProfile ?? "full";
|
|
53
|
+
const server = withProfile(createSummerMcpServerConfig(Boolean(options.localDev), process.platform, channel), profile);
|
|
50
54
|
const target = resolveConfigTarget(spec, options.scope, cwd, env);
|
|
51
55
|
const snippet = renderConfigSnippet(options.agent, server);
|
|
52
56
|
const dryRun = Boolean(options.dryRun);
|
|
@@ -69,6 +73,7 @@ export async function configureAgentMcp(options) {
|
|
|
69
73
|
print,
|
|
70
74
|
localDev: Boolean(options.localDev),
|
|
71
75
|
channel,
|
|
76
|
+
profile,
|
|
72
77
|
warnings: target.warnings,
|
|
73
78
|
nextSteps: [`Updated ${target.path}.`, spec.restart],
|
|
74
79
|
};
|
|
@@ -264,17 +269,28 @@ async function upsertConfig(format, path, server, write) {
|
|
|
264
269
|
}
|
|
265
270
|
export const DEFAULT_CHANNEL = "latest";
|
|
266
271
|
/** npm dist-tags are lowercase words like `latest`, `next`, `beta`, `v3-preview`;
|
|
267
|
-
*
|
|
268
|
-
*
|
|
272
|
+
* an exact version (`3.9.1`, `3.9.1-rc.1`) pins the entry to that release, which
|
|
273
|
+
* setup does for a CLI that is ahead of npm latest. Anything else, partial
|
|
274
|
+
* versions and paths included, is refused. */
|
|
269
275
|
export function normalizeChannel(channel) {
|
|
270
276
|
const value = (channel ?? "").trim();
|
|
271
277
|
if (value === "")
|
|
272
278
|
return DEFAULT_CHANNEL;
|
|
279
|
+
if (/^\d+\.\d+\.\d+(?:-[0-9a-z][0-9a-z.-]*)?$/.test(value))
|
|
280
|
+
return value;
|
|
273
281
|
if (!/^[a-z][a-z0-9-]*$/.test(value) || /^v?\d/.test(value)) {
|
|
274
|
-
throw new Error(`Invalid channel "${channel}": use an npm dist-tag such as latest or next (lowercase letters, digits, hyphens).`);
|
|
282
|
+
throw new Error(`Invalid channel "${channel}": use an npm dist-tag such as latest or next (lowercase letters, digits, hyphens), or an exact version such as 4.0.0.`);
|
|
275
283
|
}
|
|
276
284
|
return value;
|
|
277
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* The profile rides in the entry's env, not its args: an older summer-engine
|
|
288
|
+
* that an agent still runs ignores the variable and serves every tool, where
|
|
289
|
+
* an unknown --profile flag would stop it from starting.
|
|
290
|
+
*/
|
|
291
|
+
export function withProfile(server, profile) {
|
|
292
|
+
return profile === "full" ? server : { ...server, env: { ...server.env, SUMMER_PROFILE: profile } };
|
|
293
|
+
}
|
|
278
294
|
export function createSummerMcpServerConfig(localDev, platform = process.platform, channel = DEFAULT_CHANNEL) {
|
|
279
295
|
const spec = `summer-engine@${normalizeChannel(channel)}`;
|
|
280
296
|
if (localDev) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Profile } from "../core/tool-profiles.js";
|
|
1
2
|
/** Ids `summer setup <agent>` accepts. Legacy ids stay so old commands and
|
|
2
3
|
* configs keep resolving, but they are hidden from help and warn on use. */
|
|
3
4
|
export declare const AGENT_IDS: readonly ["claude-code", "claude-desktop", "codex", "cursor", "windsurf", "antigravity", "gemini", "cline", "cline-cli", "roo-code", "kilo-code", "github-copilot", "vscode-copilot", "visual-studio", "copilot-jetbrains", "opencode", "zed", "kiro", "goose", "hermes", "trae", "qwen-code", "kimi-code", "crush", "amp", "factory", "junie", "warp", "rovo-dev", "qoder", "grok-build", "mistral-vibe", "lm-studio"];
|
|
@@ -70,6 +71,8 @@ export interface AgentSpec {
|
|
|
70
71
|
/** Env var that overrides the MCP config path (tests, unusual installs). */
|
|
71
72
|
envOverride: string;
|
|
72
73
|
format: McpFormat;
|
|
74
|
+
/** MCP tool profile setup writes without --profile (default full: every tool). */
|
|
75
|
+
mcpProfile?: Profile;
|
|
73
76
|
/**
|
|
74
77
|
* The Summer Games player MCP (a remote server that signs in with OAuth on
|
|
75
78
|
* its own) in this agent's file, under the same key as summer-engine.
|
|
@@ -130,7 +130,7 @@ const SPECS = [
|
|
|
130
130
|
},
|
|
131
131
|
restart: "Quit and reopen Claude Desktop; the summer-engine tools appear under the tools menu in a new chat.",
|
|
132
132
|
skills: null,
|
|
133
|
-
noSkillsNote: "Claude Desktop has no skills folder. The MCP server ships
|
|
133
|
+
noSkillsNote: "Claude Desktop has no skills folder. The MCP server ships summer_docs_search and summer_docs_read, so the model can pull Summer guidance in-chat.",
|
|
134
134
|
},
|
|
135
135
|
{
|
|
136
136
|
id: "codex",
|
|
@@ -144,7 +144,8 @@ const SPECS = [
|
|
|
144
144
|
signIn: (name) => `In Codex, run /mcp login ${name} (or \`codex mcp login ${name}\` in a terminal) and sign in.`,
|
|
145
145
|
},
|
|
146
146
|
mcp: {
|
|
147
|
-
|
|
147
|
+
// Codex reads its config from $CODEX_HOME (default ~/.codex).
|
|
148
|
+
user: (ctx) => join(ctx.env.CODEX_HOME || join(ctx.home, ".codex"), "config.toml"),
|
|
148
149
|
project: project(".codex", "config.toml"),
|
|
149
150
|
projectNote: "Codex only loads project .codex/config.toml from trusted projects.",
|
|
150
151
|
},
|
|
@@ -316,6 +317,8 @@ const SPECS = [
|
|
|
316
317
|
status: "active",
|
|
317
318
|
envOverride: "SUMMER_VSCODE_COPILOT_CONFIG_FILE",
|
|
318
319
|
format: "json-vscode",
|
|
320
|
+
// VS Code Copilot sends at most 128 tools per request; the full surface is over that.
|
|
321
|
+
mcpProfile: "engine",
|
|
319
322
|
remoteMcp: {
|
|
320
323
|
entry: (url) => ({ type: "http", url }),
|
|
321
324
|
signIn: (name) => `In VS Code, click Allow when ${name} asks to authenticate, then sign in on summer.games.`,
|
|
@@ -335,7 +338,7 @@ const SPECS = [
|
|
|
335
338
|
mcp: { user: home(".mcp.json"), project: project(".mcp.json") },
|
|
336
339
|
restart: "Restart Visual Studio, open Copilot Chat in Agent mode, and enable summer-engine in the tools picker.",
|
|
337
340
|
skills: null,
|
|
338
|
-
noSkillsNote: "Visual Studio's Copilot has no skills folder yet; the MCP server ships
|
|
341
|
+
noSkillsNote: "Visual Studio's Copilot has no skills folder yet; the MCP server ships summer_docs_search and summer_docs_read for in-chat guidance.",
|
|
339
342
|
},
|
|
340
343
|
{
|
|
341
344
|
id: "copilot-jetbrains",
|
|
@@ -354,7 +357,7 @@ const SPECS = [
|
|
|
354
357
|
},
|
|
355
358
|
restart: "Restart the JetBrains IDE and open Copilot Chat in Agent mode; summer-engine shows in the tools list.",
|
|
356
359
|
skills: null,
|
|
357
|
-
noSkillsNote: "Copilot in JetBrains documents no skills folder; the MCP server ships
|
|
360
|
+
noSkillsNote: "Copilot in JetBrains documents no skills folder; the MCP server ships summer_docs_search and summer_docs_read for in-chat guidance.",
|
|
358
361
|
},
|
|
359
362
|
{
|
|
360
363
|
id: "opencode",
|
|
@@ -476,7 +479,7 @@ const SPECS = [
|
|
|
476
479
|
},
|
|
477
480
|
restart: "Restart Trae and open the MCP settings; summer-engine should show as connected.",
|
|
478
481
|
skills: null,
|
|
479
|
-
noSkillsNote: "Trae documents no skills folder; the MCP server ships
|
|
482
|
+
noSkillsNote: "Trae documents no skills folder; the MCP server ships summer_docs_search and summer_docs_read for in-chat guidance.",
|
|
480
483
|
},
|
|
481
484
|
{
|
|
482
485
|
id: "qwen-code",
|
|
@@ -570,7 +573,7 @@ const SPECS = [
|
|
|
570
573
|
mcp: { user: home(".junie", "mcp", "mcp.json"), project: project(".junie", "mcp", "mcp.json") },
|
|
571
574
|
restart: "Restart the JetBrains IDE so Junie reloads its MCP config.",
|
|
572
575
|
skills: null,
|
|
573
|
-
noSkillsNote: "Junie has no skills folder; put project guidance in .junie/guidelines.md. The MCP server ships
|
|
576
|
+
noSkillsNote: "Junie has no skills folder; put project guidance in .junie/guidelines.md. The MCP server ships summer_docs_search and summer_docs_read for in-chat guidance.",
|
|
574
577
|
},
|
|
575
578
|
{
|
|
576
579
|
id: "warp",
|
|
@@ -652,7 +655,7 @@ const SPECS = [
|
|
|
652
655
|
mcp: { user: home(".lmstudio", "mcp.json"), project: null },
|
|
653
656
|
restart: "Open LM Studio, toggle on the summer-engine MCP server in the Program tab, and raise the loaded model's context length to 32k or higher.",
|
|
654
657
|
skills: null,
|
|
655
|
-
noSkillsNote: "LM Studio has no rules or skills folder. The MCP server ships
|
|
658
|
+
noSkillsNote: "LM Studio has no rules or skills folder. The MCP server ships summer_docs_search and summer_docs_read, so the model can pull Summer guidance in-chat.",
|
|
656
659
|
},
|
|
657
660
|
];
|
|
658
661
|
const BY_ID = new Map(SPECS.map((spec) => [spec.id, spec]));
|
|
@@ -36,6 +36,8 @@ export interface SkillSetupOptions {
|
|
|
36
36
|
/** Skip `status: preview` skills. By default they install like any other
|
|
37
37
|
* skill — preview is a label carried in the skill's guidance, not a gate. */
|
|
38
38
|
stableOnly?: boolean;
|
|
39
|
+
/** Install only the asset skills (`setup --assets-only`). */
|
|
40
|
+
assetsOnly?: boolean;
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
43
|
* The preview clause of the setup summary — one wording for the result message
|
package/dist/installer/setup.js
CHANGED
|
@@ -37,11 +37,13 @@ export function setupSkills(agent, options) {
|
|
|
37
37
|
const scope = options.scope ?? "user";
|
|
38
38
|
const recommended = Boolean(options.recommended);
|
|
39
39
|
const stableOnly = Boolean(options.stableOnly);
|
|
40
|
+
const assetsOnly = Boolean(options.assetsOnly);
|
|
40
41
|
const invocation = skillInstallInvocation(agent, {
|
|
41
42
|
force: options.force,
|
|
42
43
|
scope,
|
|
43
44
|
recommended,
|
|
44
45
|
stableOnly,
|
|
46
|
+
assetsOnly,
|
|
45
47
|
});
|
|
46
48
|
if (!invocation) {
|
|
47
49
|
return {
|
|
@@ -49,14 +51,15 @@ export function setupSkills(agent, options) {
|
|
|
49
51
|
message: "No automatic skill installer is available for this agent yet. Run `summer skills install --all` and point the agent at the installed SKILL.md files.",
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
|
-
const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(getSkillRegistry(), { recommended, stableOnly });
|
|
54
|
+
const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(getSkillRegistry(), { recommended, stableOnly, assetsOnly });
|
|
53
55
|
const count = selected.length;
|
|
54
56
|
const note = previewNote({ previewIncluded, previewSkipped });
|
|
55
57
|
const destination = isAgentClient(agent)
|
|
56
58
|
? describeInstallLocation(resolveInstallLocation(agent, scope))
|
|
57
59
|
: undefined;
|
|
58
|
-
const subset = recommended ? "recommended " : "";
|
|
60
|
+
const subset = assetsOnly ? "asset " : recommended ? "recommended " : "";
|
|
59
61
|
if (options.dryRun || !options.yes) {
|
|
62
|
+
const where = destination ?? "the agent's skills directory";
|
|
60
63
|
return {
|
|
61
64
|
status: "planned",
|
|
62
65
|
command: invocation.display,
|
|
@@ -64,7 +67,9 @@ export function setupSkills(agent, options) {
|
|
|
64
67
|
previewIncluded,
|
|
65
68
|
previewSkipped,
|
|
66
69
|
destination,
|
|
67
|
-
message:
|
|
70
|
+
message: options.dryRun
|
|
71
|
+
? `Would install ${count} ${subset}skills${note ? ` (${note})` : ""} to ${where} with: ${invocation.display.join(" ")}`
|
|
72
|
+
: `Not installed. Run the same setup command again with --yes to install ${count} ${subset}skills${note ? ` (${note})` : ""} to ${where}.`,
|
|
68
73
|
};
|
|
69
74
|
}
|
|
70
75
|
const result = spawnSync(invocation.command, invocation.args, {
|
|
@@ -130,7 +135,7 @@ function skillInstallInvocation(agent, opts) {
|
|
|
130
135
|
const baseArgs = [
|
|
131
136
|
"skills",
|
|
132
137
|
"install",
|
|
133
|
-
opts.recommended ? "--recommended" : "--all",
|
|
138
|
+
opts.assetsOnly ? "--assets" : opts.recommended ? "--recommended" : "--all",
|
|
134
139
|
"--agent",
|
|
135
140
|
agent,
|
|
136
141
|
"--scope",
|
|
@@ -52,6 +52,15 @@ export interface RegistryFetchFailure {
|
|
|
52
52
|
message?: string;
|
|
53
53
|
}
|
|
54
54
|
export declare function fetchLatestRegistryVersion(options?: RegistryFetchOptions): Promise<RegistryFetchResult | RegistryFetchFailure>;
|
|
55
|
+
export interface RegistryDistTagsResult {
|
|
56
|
+
ok: true;
|
|
57
|
+
/** dist-tag -> version, e.g. { latest: "3.8.0", next: "3.1.0" }. */
|
|
58
|
+
tags: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
export declare function fetchRegistryDistTags(options?: RegistryFetchOptions): Promise<RegistryDistTagsResult | RegistryFetchFailure>;
|
|
61
|
+
/** Whether npm has this exact version: true, false (registry says 404), or
|
|
62
|
+
* null when the registry could not be asked. */
|
|
63
|
+
export declare function isRegistryVersionPublished(version: string, options?: RegistryFetchOptions): Promise<boolean | null>;
|
|
55
64
|
/**
|
|
56
65
|
* Build the `cli-version-current` doctor check. Pure helper so tests can drive
|
|
57
66
|
* registry responses through `fetchImpl` rather than touching the network.
|
|
@@ -100,16 +109,25 @@ export interface RecordedInstall {
|
|
|
100
109
|
* no readable Summer entry — the nature of the CLI running this check. */
|
|
101
110
|
source: "agent-config" | "running-cli";
|
|
102
111
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
|
|
112
|
+
/** An npm dist-tag (`latest`, `next`) or an exact version (`3.9.1`). */
|
|
113
|
+
export type RefreshChannel = string;
|
|
114
|
+
/** The npm spec a refresh command or a new MCP entry should name, so the agent
|
|
115
|
+
* never runs an older release than this CLI (release review P1-3). `latest`
|
|
116
|
+
* unless this CLI is AHEAD of npm latest; then `next` only when the next
|
|
117
|
+
* dist-tag is this exact version, else this exact version. A CLI that is ahead
|
|
118
|
+
* is not always on `next`: `next` stayed on 3.1.0 while latest moved to 3.8.0,
|
|
119
|
+
* and pinning it dropped every option newer than 3.1.0 (SUMMER_PROFILE). */
|
|
120
|
+
export declare function refreshChannel(installedVersion: string, latestVersion: string | undefined, nextVersion?: string): RefreshChannel;
|
|
121
|
+
export interface DefaultChannelDeps {
|
|
122
|
+
fetchDistTags?: typeof fetchRegistryDistTags;
|
|
123
|
+
isPublished?: typeof isRegistryVersionPublished;
|
|
124
|
+
}
|
|
109
125
|
/** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
|
|
110
|
-
* given: `
|
|
111
|
-
*
|
|
112
|
-
|
|
126
|
+
* given: `latest`, unless this CLI is ahead of npm latest. Then `next` when
|
|
127
|
+
* next is this exact version, this exact version when npm has it, and
|
|
128
|
+
* otherwise (a checkout that was never published) `latest` with a note that
|
|
129
|
+
* points at --local-dev. Network failure means `latest` (never blocks setup). */
|
|
130
|
+
export declare function resolveDefaultChannel(installedVersion: string, deps?: DefaultChannelDeps): Promise<{
|
|
113
131
|
channel: RefreshChannel;
|
|
114
132
|
note?: string;
|
|
115
133
|
}>;
|
|
@@ -118,6 +136,8 @@ export interface SkillsVersionCheckInput {
|
|
|
118
136
|
candidates: SkillMarkerCandidate[];
|
|
119
137
|
/** npm latest, when known, so the refresh command names the right dist-tag. */
|
|
120
138
|
latestRegistryVersion?: string;
|
|
139
|
+
/** npm next, when known: the refresh names `next` only when it is this CLI. */
|
|
140
|
+
nextRegistryVersion?: string;
|
|
121
141
|
/** Resolves how the stale agent's MCP entry was recorded; defaults to
|
|
122
142
|
* detectRecordedInstall. Seam for tests. */
|
|
123
143
|
recordedInstall?: (agent: string) => Promise<RecordedInstall | null> | RecordedInstall | null;
|