summer-engine 3.8.0 → 4.2.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 +24 -22
- package/.codex-plugin/plugin.json +18 -22
- package/.cursor-plugin/plugin.json +8 -14
- package/.factory-plugin/plugin.json +6 -13
- package/AGENTS.md +19 -12
- package/CHANGELOG.md +133 -0
- package/GEMINI.md +3 -3
- package/README.md +118 -37
- package/assets/icon.png +0 -0
- package/commands/start.md +71 -0
- package/commands/summer.md +3 -2
- package/dist/cli/banner.js +3 -0
- package/dist/cli/commands/config.js +3 -2
- package/dist/cli/commands/create.js +12 -3
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +30 -13
- package/dist/cli/commands/login.d.ts +27 -0
- package/dist/cli/commands/login.js +58 -12
- package/dist/cli/commands/memory.js +6 -2
- package/dist/cli/commands/ops.d.ts +64 -0
- package/dist/cli/commands/ops.js +329 -0
- package/dist/cli/commands/setup.d.ts +4 -0
- package/dist/cli/commands/setup.js +254 -26
- package/dist/cli/commands/skills.js +28 -11
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.js +36 -21
- 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 +33 -10
- package/dist/core/capabilities/apps.js +25 -12
- package/dist/core/capabilities/audit/args.d.ts +6 -6
- package/dist/core/capabilities/doctor.d.ts +3 -0
- package/dist/core/capabilities/doctor.js +20 -15
- package/dist/core/capabilities/fabricate-mesh.d.ts +4 -4
- 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/hdri-import.d.ts +2 -2
- package/dist/core/capabilities/motion-generation.d.ts +2 -2
- 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/placement.d.ts +23 -23
- package/dist/core/capabilities/publish-build.js +2 -0
- package/dist/core/capabilities/runtime-control.d.ts +42 -42
- 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/seeing/args.d.ts +16 -16
- 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 +81 -46
- package/dist/core/capabilities/ui-control.d.ts +2 -2
- package/dist/core/capabilities/world-snapshot.d.ts +4 -4
- 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.d.ts +2 -2
- package/dist/core/library-search.js +2 -1
- package/dist/core/oauth.js +4 -0
- package/dist/core/ops/areas.d.ts +11 -0
- package/dist/core/ops/areas.js +24 -0
- package/dist/core/ops/catalog.d.ts +45 -0
- package/dist/core/ops/catalog.js +157 -0
- package/dist/core/ops/cloud.d.ts +64 -0
- package/dist/core/ops/cloud.js +198 -0
- package/dist/core/ops/contract.d.ts +120 -0
- package/dist/core/ops/contract.js +134 -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/public-catalog.d.ts +48 -0
- package/dist/core/ops/public-catalog.js +56 -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 +8 -0
- package/dist/core/ops/search.js +187 -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 +27 -6
- package/dist/installer/agent-table.d.ts +12 -0
- package/dist/installer/agent-table.js +33 -9
- package/dist/installer/cli-permissions.d.ts +65 -0
- package/dist/installer/cli-permissions.js +182 -0
- package/dist/installer/setup.d.ts +4 -0
- package/dist/installer/setup.js +12 -4
- package/dist/installer/skills-refresh.d.ts +29 -0
- package/dist/installer/skills-refresh.js +261 -0
- package/dist/installer/version-check.d.ts +51 -11
- package/dist/installer/version-check.js +147 -37
- package/dist/mcp/command.js +7 -0
- package/dist/mcp/hosted-mount.d.ts +27 -2
- package/dist/mcp/hosted-mount.js +53 -23
- 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 +453 -0
- package/dist/mcp/server.d.ts +45 -11
- package/dist/mcp/server.js +263 -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.js +9 -2
- 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/dist/project-memory/agent-instructions.d.ts +47 -0
- package/dist/project-memory/agent-instructions.js +226 -0
- package/gemini-extension.json +6 -13
- package/hooks/pre-commit-doctor.sh +5 -4
- package/hooks/session-start.sh +24 -28
- package/integrations/README.md +1 -1
- package/integrations/claude/README.md +6 -0
- package/integrations/claude/manifest-target.json +4 -0
- package/integrations/claude-desktop/README.md +1 -1
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/gemini/README.md +11 -0
- 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/integrations/windsurf/README.md +1 -1
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +79 -51
- 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 +69 -28
- package/library/skills/3d-lighting/resource.yaml +1 -1
- package/library/skills/README.md +121 -118
- package/library/skills/adaptive-music/SKILL.md +40 -23
- package/library/skills/adaptive-music/resource.yaml +1 -1
- package/library/skills/agent-playtesting/SKILL.md +23 -1
- package/library/skills/agent-playtesting/resource.yaml +1 -1
- package/library/skills/ai-characters-in-games/SKILL.md +16 -1
- package/library/skills/ai-characters-in-games/resource.yaml +1 -1
- package/library/skills/ambient-bed/SKILL.md +38 -13
- package/library/skills/ambient-bed/resource.yaml +1 -1
- package/library/skills/animated-loop/SKILL.md +60 -32
- package/library/skills/animated-loop/resource.yaml +1 -1
- package/library/skills/animation-tree/SKILL.md +27 -1
- package/library/skills/animation-tree/resource.yaml +1 -1
- package/library/skills/art-direction/SKILL.md +17 -3
- package/library/skills/art-direction/resource.yaml +1 -1
- package/library/skills/asset-strategy/SKILL.md +51 -4
- package/library/skills/asset-strategy/resource.yaml +2 -1
- package/library/skills/audio-direction/SKILL.md +26 -10
- package/library/skills/audio-direction/resource.yaml +1 -1
- package/library/skills/auto-fire-targeting/SKILL.md +15 -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 +14 -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 +11 -1
- package/library/skills/browse-templates/resource.yaml +1 -1
- package/library/skills/camera-rigs/SKILL.md +22 -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 +28 -4
- package/library/skills/character-animation-wiring/resource.yaml +1 -1
- package/library/skills/character-model/SKILL.md +83 -47
- package/library/skills/character-model/resource.yaml +1 -1
- package/library/skills/character-movement/SKILL.md +27 -3
- package/library/skills/character-movement/resource.yaml +1 -1
- package/library/skills/character-portrait/SKILL.md +39 -19
- package/library/skills/character-portrait/resource.yaml +1 -1
- package/library/skills/cinematic-cutscene/SKILL.md +79 -46
- package/library/skills/cinematic-cutscene/resource.yaml +1 -1
- package/library/skills/combat-basics/SKILL.md +20 -1
- package/library/skills/combat-basics/resource.yaml +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +12 -1
- package/library/skills/compatibility-renderer-traps/resource.yaml +1 -1
- package/library/skills/concept-art/SKILL.md +29 -12
- package/library/skills/concept-art/resource.yaml +1 -1
- package/library/skills/concept-to-level/SKILL.md +258 -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 +37 -13
- package/library/skills/create-asset-sheet/resource.yaml +1 -1
- package/library/skills/debug/SKILL.md +34 -2
- package/library/skills/debug/resource.yaml +1 -1
- package/library/skills/debugging-game-feel/SKILL.md +13 -1
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +40 -35
- package/library/skills/design-level/resource.yaml +1 -1
- package/library/skills/design-mechanic/SKILL.md +18 -1
- package/library/skills/design-mechanic/resource.yaml +1 -1
- package/library/skills/design-npc/SKILL.md +43 -24
- package/library/skills/design-npc/resource.yaml +1 -1
- package/library/skills/diagnosing-perf-regressions/SKILL.md +13 -1
- package/library/skills/diagnosing-perf-regressions/resource.yaml +1 -1
- package/library/skills/driving-the-editor-ui/SKILL.md +24 -1
- package/library/skills/driving-the-editor-ui/resource.yaml +1 -1
- package/library/skills/environment-kit/SKILL.md +43 -16
- package/library/skills/environment-kit/resource.yaml +1 -1
- package/library/skills/export-and-ship/SKILL.md +29 -6
- package/library/skills/export-and-ship/resource.yaml +1 -1
- package/library/skills/fabricating-assets/SKILL.md +30 -7
- package/library/skills/fabricating-assets/resource.yaml +3 -3
- package/library/skills/facial-and-lipsync/SKILL.md +36 -15
- package/library/skills/facial-and-lipsync/resource.yaml +1 -1
- package/library/skills/fps-controller/SKILL.md +50 -41
- package/library/skills/fps-controller/resource.yaml +1 -1
- package/library/skills/game-feel/SKILL.md +34 -8
- package/library/skills/game-feel/resource.yaml +1 -1
- package/library/skills/gameskill/SKILL.md +15 -4
- package/library/skills/gameskill/resource.yaml +1 -1
- package/library/skills/gdscript-patterns/SKILL.md +16 -1
- package/library/skills/gdscript-patterns/resource.yaml +1 -1
- package/library/skills/generate-motion/SKILL.md +51 -21
- package/library/skills/generate-motion/resource.yaml +1 -1
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +18 -1
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +1 -0
- package/library/skills/grow-analytics/SKILL.md +13 -3
- package/library/skills/grow-analytics/resource.yaml +1 -1
- package/library/skills/headless-scripting/SKILL.md +14 -1
- package/library/skills/headless-scripting/resource.yaml +1 -1
- package/library/skills/in-game-purchases/SKILL.md +12 -1
- package/library/skills/in-game-purchases/resource.yaml +1 -1
- package/library/skills/instantiate-asset-pack/SKILL.md +19 -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 +33 -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 +13 -1
- package/library/skills/multiplayer/resource.yaml +1 -1
- package/library/skills/multiplayer-movement/SKILL.md +19 -1
- package/library/skills/multiplayer-movement/resource.yaml +1 -1
- package/library/skills/multiplayer-project/SKILL.md +18 -1
- package/library/skills/multiplayer-project/resource.yaml +1 -1
- package/library/skills/multiplayer-publish/SKILL.md +25 -7
- package/library/skills/multiplayer-publish/resource.yaml +3 -3
- package/library/skills/multiplayer-state/SKILL.md +17 -1
- package/library/skills/multiplayer-state/resource.yaml +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +16 -1
- package/library/skills/multiplayer-testing/resource.yaml +1 -1
- package/library/skills/music-track/SKILL.md +38 -13
- package/library/skills/music-track/resource.yaml +1 -1
- package/library/skills/navigate-summer/SKILL.md +26 -9
- package/library/skills/navigate-summer/resource.yaml +1 -1
- package/library/skills/new-project/SKILL.md +12 -1
- package/library/skills/new-project/resource.yaml +1 -1
- package/library/skills/organic-model/SKILL.md +48 -18
- package/library/skills/organic-model/resource.yaml +1 -1
- package/library/skills/pixel-art/SKILL.md +42 -23
- package/library/skills/pixel-art/resource.yaml +1 -1
- package/library/skills/play/SKILL.md +19 -1
- package/library/skills/play/resource.yaml +1 -1
- package/library/skills/playtesting-a-feature/SKILL.md +24 -1
- package/library/skills/playtesting-a-feature/resource.yaml +1 -1
- package/library/skills/procedural-animation/SKILL.md +38 -16
- package/library/skills/procedural-animation/resource.yaml +1 -1
- package/library/skills/prop-model/SKILL.md +48 -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 +43 -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 +13 -1
- package/library/skills/release-readiness/resource.yaml +1 -1
- package/library/skills/remote-deploy/SKILL.md +15 -1
- package/library/skills/remote-deploy/resource.yaml +1 -1
- package/library/skills/retarget/SKILL.md +43 -20
- package/library/skills/retarget/resource.yaml +1 -1
- package/library/skills/running-in-the-cloud/SKILL.md +11 -1
- package/library/skills/running-in-the-cloud/resource.yaml +1 -1
- package/library/skills/save-load/SKILL.md +16 -1
- package/library/skills/save-load/resource.yaml +1 -1
- package/library/skills/scene-composition/SKILL.md +18 -1
- package/library/skills/scene-composition/resource.yaml +1 -1
- package/library/skills/scene-hierarchy-design/SKILL.md +26 -2
- package/library/skills/scene-hierarchy-design/resource.yaml +1 -1
- package/library/skills/scene-scripting/SKILL.md +96 -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 +24 -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 +12 -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 +47 -21
- package/library/skills/skybox-panorama/resource.yaml +1 -1
- package/library/skills/sound-effect/SKILL.md +52 -20
- package/library/skills/sound-effect/resource.yaml +1 -1
- package/library/skills/spatial-placement/SKILL.md +44 -9
- package/library/skills/spatial-placement/resource.yaml +1 -1
- package/library/skills/sprite-sheet/SKILL.md +55 -27
- package/library/skills/sprite-sheet/resource.yaml +1 -1
- package/library/skills/store-art/SKILL.md +14 -3
- package/library/skills/store-art/resource.yaml +2 -2
- package/library/skills/store-listing/SKILL.md +13 -3
- package/library/skills/store-listing/resource.yaml +2 -2
- package/library/skills/summer-analytics/SKILL.md +22 -5
- package/library/skills/summer-analytics/resource.yaml +2 -2
- package/library/skills/summer-apps/SKILL.md +77 -32
- package/library/skills/summer-apps/manifest.md +1 -1
- package/library/skills/summer-apps/minimal-app.md +7 -7
- package/library/skills/summer-apps/resource.yaml +1 -1
- package/library/skills/summer-apps/sdk-reference.md +5 -5
- package/library/skills/summer-apps-design/SKILL.md +1 -1
- package/library/skills/summer-apps-design/resource.yaml +1 -1
- package/library/skills/summer-assets/SKILL.md +86 -0
- package/library/skills/summer-assets/resource.yaml +34 -0
- package/library/skills/summer-cli/SKILL.md +133 -0
- package/library/skills/summer-cli/resource.yaml +31 -0
- package/library/skills/summer-friends/SKILL.md +14 -0
- package/library/skills/summer-leaderboards/SKILL.md +16 -0
- package/library/skills/summer-match-results/SKILL.md +17 -0
- package/library/skills/summer-matchmaking/SKILL.md +17 -0
- package/library/skills/summer-parties/SKILL.md +14 -0
- package/library/skills/summer-player-data/SKILL.md +14 -0
- package/library/skills/summer-store/SKILL.md +16 -1
- package/library/skills/summer-world-chat/SKILL.md +14 -0
- package/library/skills/summer-world-saves/SKILL.md +14 -0
- package/library/skills/text-to-motion/SKILL.md +45 -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 +37 -15
- package/library/skills/tileable-texture/resource.yaml +1 -1
- package/library/skills/trailer-shot/SKILL.md +46 -24
- package/library/skills/trailer-shot/resource.yaml +1 -1
- package/library/skills/tune-performance/SKILL.md +32 -6
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-basics/SKILL.md +55 -36
- package/library/skills/ui-basics/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +64 -38
- package/library/skills/ui-graphics/resource.yaml +1 -1
- package/library/skills/use-widget-asset/SKILL.md +15 -1
- package/library/skills/use-widget-asset/resource.yaml +1 -1
- package/library/skills/using-summer/SKILL.md +32 -5
- package/library/skills/using-summer/resource.yaml +3 -2
- package/library/skills/vehicle-model/SKILL.md +92 -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 +31 -2
- package/library/skills/verifying-scenes/resource.yaml +1 -1
- package/library/skills/vfx-dissolve/SKILL.md +21 -2
- package/library/skills/vfx-dissolve/resource.yaml +1 -1
- package/library/skills/vfx-fire/SKILL.md +41 -41
- package/library/skills/vfx-fire/resource.yaml +1 -1
- package/library/skills/vfx-hit-spark/SKILL.md +24 -1
- package/library/skills/vfx-hit-spark/resource.yaml +1 -1
- package/library/skills/vfx-lightning/SKILL.md +30 -16
- package/library/skills/vfx-lightning/resource.yaml +1 -1
- package/library/skills/vfx-magic-glow/SKILL.md +46 -32
- package/library/skills/vfx-magic-glow/resource.yaml +1 -1
- package/library/skills/vfx-muzzle-flash/SKILL.md +43 -35
- package/library/skills/vfx-muzzle-flash/resource.yaml +1 -1
- package/library/skills/vfx-smoke/SKILL.md +39 -31
- package/library/skills/vfx-smoke/resource.yaml +1 -1
- package/library/skills/vfx-water-ripple/SKILL.md +35 -31
- package/library/skills/vfx-water-ripple/resource.yaml +1 -1
- package/library/skills/voice-line/SKILL.md +87 -40
- package/library/skills/voice-line/resource.yaml +1 -1
- package/library/skills/web-and-touch-input/SKILL.md +20 -1
- package/library/skills/web-and-touch-input/resource.yaml +1 -1
- package/library/skills/web-compatibility-look/SKILL.md +21 -1
- package/library/skills/web-compatibility-look/resource.yaml +1 -1
- package/library/skills/world-building-3d/SKILL.md +29 -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 +1 -1
- package/library/tools/app-guide/resource.yaml +2 -2
- package/library/tools/app-page/resource.yaml +1 -1
- package/library/tools/app-screenshot/resource.yaml +19 -1
- package/library/tools/app-tools/resource.yaml +1 -1
- 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/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 +8 -5
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +6 -13
- package/registry/generated/index.json +482 -349
- package/registry/generated/marketplace.claude.json +2 -13
- package/registry/generated/plugin.claude-directory.json +168 -0
- package/registry/generated/plugin.claude.json +24 -22
- package/registry/generated/plugin.codex.json +18 -22
- package/registry/generated/plugin.cursor.json +8 -14
- package/registry/generated/plugin.factory.json +6 -13
- package/registry/generated/server.json +43 -0
- package/registry/generated/skills-index.md +121 -118
- package/registry/generated/skills-registry.json +167 -115
- 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 +1241 -0
- package/registry/operations/public-catalog.json +33160 -0
- package/registry/schemas/operation.schema.json +318 -0
- package/registry/schemas/skill.schema.json +4 -0
- package/CLAUDE.md +0 -7
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { withEngine, missingEngineOpResult, withOldEngineHint } from "./with-engine.js";
|
|
3
3
|
import { lookupApiDocs } from "../../core/capabilities/api-docs.js";
|
|
4
|
-
import { RUN_EDITOR_SCRIPT_FALLBACK, RUN_SCRIPT_FALLBACK, buildRunEditorScriptOp,
|
|
4
|
+
import { RUN_EDITOR_SCRIPT_FALLBACK, RUN_SCRIPT_FALLBACK, buildRunEditorScriptOp, } from "../../core/capabilities/scene-script.js";
|
|
5
|
+
import { runSceneScriptOn } from "../../core/capabilities/scene-script-target.js";
|
|
5
6
|
// Re-exported so existing tests keep importing the lookup from the tool module.
|
|
6
7
|
export { API_DOCS_NOT_INSTALLED, isApiDocsBundleInstalled, lookupApiDocs, resetApiDocsForTests, } from "../../core/capabilities/api-docs.js";
|
|
7
8
|
export function registerScriptTools(server) {
|
|
8
|
-
server.tool("summer_run_script", `Run a GDScript snippet INSIDE the live editor, against the currently OPEN scene. This is the scene-scripting workhorse: one script replaces long chains of add-node/set-prop calls, and it can compute (loops, randomness, math, procedural meshes) what individual CRUD ops cannot.
|
|
9
|
+
server.tool("summer_run_script", `Run a GDScript snippet INSIDE the live editor, against the scene named by scenePath (opened first when it is not the edited one; the person's tab comes back after the run). Without scenePath it runs against the currently OPEN scene. This is the scene-scripting workhorse: one script replaces long chains of add-node/set-prop calls, and it can compute (loops, randomness, math, procedural meshes) what individual CRUD ops cannot.
|
|
9
10
|
|
|
10
11
|
SCRIPT CONTRACT — write ONLY the body below; do not add extends/@tool lines (missing ones are prepended and reported in 'normalizations'):
|
|
11
12
|
|
|
@@ -33,6 +34,10 @@ WHEN TO USE: 3+ related ops, anything with computed placement (scatter, grids, r
|
|
|
33
34
|
THE LOOP: summer_world_snapshot (keep snapshot_id) -> summer_run_script -> summer_snapshot_diff + summer_screenshot -> inspect -> iterate. Never claim visual success without the screenshot.
|
|
34
35
|
|
|
35
36
|
Returns {ok, ran, result, reports, output, errors, duration_ms, checkpoint} — newer engines add rolled_back (a runtime error rolled the whole undo action back; the scene is untouched) and budget_enforced (max_seconds was a HARD deadline; when the budget hits, the script errors with "Summer script budget exceeded" — split the work into smaller scripts, never resubmit the same oversized one). Read 'errors' even when ok — with undo:'none', a partially-failed script may have mutated the scene. If this engine build predates RunSceneScript, the result is a structured engine_lacks_op failure (nothing is sent): use summer_run_editor_script or update Summer Engine.`, {
|
|
37
|
+
scenePath: z
|
|
38
|
+
.string()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("The scene to run against, e.g. 'res://main.tscn'. Opened first when it is not the edited scene, then the person's tab is restored. Omit only to run against whatever scene is open."),
|
|
36
41
|
source: z.string().describe("GDScript source containing `func run(ctx):`. No extends/@tool line — just the function (plus any helpers)."),
|
|
37
42
|
max_seconds: z
|
|
38
43
|
.number()
|
|
@@ -46,12 +51,11 @@ Returns {ok, ran, result, reports, output, errors, duration_ms, checkpoint} —
|
|
|
46
51
|
.enum(["action", "none"])
|
|
47
52
|
.optional()
|
|
48
53
|
.describe("Transaction mode (newer engines). 'action' (engine default): the whole run is ONE named undo action, and a mid-script runtime error rolls it back before returning (result rolled_back:true) — no half-mutated scene. 'none': v1 behavior, checkpoint only. Older engines ignore this."),
|
|
49
|
-
}, async ({ source, max_seconds, checkpoint, undo }) => withEngine(async (client) => {
|
|
54
|
+
}, async ({ scenePath, source, max_seconds, checkpoint, undo }) => withEngine(async (client) => {
|
|
50
55
|
const missing = missingEngineOpResult(client, "RunSceneScript", RUN_SCRIPT_FALLBACK);
|
|
51
56
|
if (missing)
|
|
52
57
|
return missing;
|
|
53
|
-
const
|
|
54
|
-
const result = await client.executeIdentityBoundOps([op], undefined, timeoutMs);
|
|
58
|
+
const result = await runSceneScriptOn(client, { scenePath, source, max_seconds, checkpoint, undo });
|
|
55
59
|
return withOldEngineHint(result, "RunSceneScript", "use summer_run_editor_script instead");
|
|
56
60
|
}));
|
|
57
61
|
server.tool("summer_run_editor_script", `Run a GDScript EditorScript in a FRESH HEADLESS editor spawned against the ON-DISK project. Cold path: a whole child editor boots, runs your script once, and exits — seconds to tens of seconds depending on the project and the script (about 2 s end to end on a small template project; large projects can spend 30 s+ just booting).
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getClient } from "../server.js";
|
|
2
|
+
import { EngineNotRunningError } from "../../core/error-codes.js";
|
|
2
3
|
import { extractOpError, withOldEngineHint } from "../../core/capabilities/engine-receipt.js";
|
|
3
4
|
export { extractOpError, withOldEngineHint };
|
|
4
5
|
export { missingEngineOpResult, type CapabilityAdvertisingClient, } from "../../core/capability-skew.js";
|
|
@@ -57,6 +58,11 @@ export interface WithEngineOptions<T> {
|
|
|
57
58
|
*/
|
|
58
59
|
export declare function isAuthError(err: unknown): boolean;
|
|
59
60
|
export declare function withEngine<T>(fn: (client: Awaited<ReturnType<typeof getClient>>) => Promise<T>, opts?: WithEngineOptions<T>): Promise<ToolResult>;
|
|
61
|
+
/** No editor reachable: `{ok:false, code:"engine_not_running", error,
|
|
62
|
+
* recovery, hint}` as JSON, so agents branch on the code instead of
|
|
63
|
+
* scraping the sentence. Exported for the tools that call getClient()
|
|
64
|
+
* outside withEngine. */
|
|
65
|
+
export declare function engineNotRunningResult(error: EngineNotRunningError): ToolResult;
|
|
60
66
|
/** Every transport-level failure must TEACH recovery, not just name the error.
|
|
61
67
|
* getClient()'s connect failure already carries its own instructions; anything
|
|
62
68
|
* else (fetch failed / abort / HTTP status thrown mid-call) gets the generic
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getClient, resetClient } from "../server.js";
|
|
2
2
|
import { recordMcpSession } from "../../core/telemetry.js";
|
|
3
3
|
import { thrownErrorClass } from "../../core/tool-errors.js";
|
|
4
|
+
import { codedFailure, ENGINE_FREE_NOTE, EngineNotRunningError } from "../../core/error-codes.js";
|
|
4
5
|
import { extractOpError, getFailureReason, withOldEngineHint, } from "../../core/capabilities/engine-receipt.js";
|
|
5
6
|
export { extractOpError, withOldEngineHint };
|
|
6
7
|
export { missingEngineOpResult, } from "../../core/capability-skew.js";
|
|
@@ -143,9 +144,27 @@ export async function withEngine(fn, opts) {
|
|
|
143
144
|
break;
|
|
144
145
|
}
|
|
145
146
|
}
|
|
147
|
+
if (lastError instanceof EngineNotRunningError) {
|
|
148
|
+
return attachMeta(engineNotRunningResult(lastError), {
|
|
149
|
+
errorClass: "transport",
|
|
150
|
+
failureReason: "engine_not_running",
|
|
151
|
+
retried,
|
|
152
|
+
boundProjectIdHash,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
146
155
|
const msg = lastError instanceof Error ? lastError.message : String(lastError);
|
|
147
156
|
return attachMeta({ content: [{ type: "text", text: withTransportRecovery(msg) }], isError: true }, { errorClass: "transport", retried, boundProjectIdHash });
|
|
148
157
|
}
|
|
158
|
+
/** No editor reachable: `{ok:false, code:"engine_not_running", error,
|
|
159
|
+
* recovery, hint}` as JSON, so agents branch on the code instead of
|
|
160
|
+
* scraping the sentence. Exported for the tools that call getClient()
|
|
161
|
+
* outside withEngine. */
|
|
162
|
+
export function engineNotRunningResult(error) {
|
|
163
|
+
return {
|
|
164
|
+
isError: true,
|
|
165
|
+
content: [{ type: "text", text: JSON.stringify(codedFailure(error.code, error.message, { hint: ENGINE_FREE_NOTE }), null, 2) }],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
149
168
|
const PRE_APPLY_FAILURE_REASON = {
|
|
150
169
|
input: "invalid_input",
|
|
151
170
|
unsupported: "unsupported_operation",
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AGENTS.md and CLAUDE.md in a Summer project. AGENTS.md is the one file
|
|
3
|
+
* Codex, Cursor, Copilot, Amp and other agents read in every session;
|
|
4
|
+
* Claude Code reads CLAUDE.md, which here only imports AGENTS.md.
|
|
5
|
+
* `summer create` writes both; `summer setup --yes` inside a project adds
|
|
6
|
+
* them when missing.
|
|
7
|
+
*
|
|
8
|
+
* An existing file is never overwritten: Summer adds one marked block once,
|
|
9
|
+
* and later runs replace only that block. A link is followed only to a file
|
|
10
|
+
* inside the project, and a CLAUDE.md that is the same file as AGENTS.md
|
|
11
|
+
* gets the AGENTS.md block only. The five commands are the list in the
|
|
12
|
+
* summer-cli skill (between its project-commands markers), so the two
|
|
13
|
+
* cannot drift; the skill's test runs every command both of them teach.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SUMMER_BLOCK_START = "<!-- summer-engine:start. summer setup updates only this block; write your own notes outside it. -->";
|
|
16
|
+
export declare const SUMMER_BLOCK_END = "<!-- summer-engine:end -->";
|
|
17
|
+
/** The numbered command list from the summer-cli skill. */
|
|
18
|
+
export declare function projectCommands(skill?: string): string;
|
|
19
|
+
/** The Summer block of AGENTS.md, markers included. */
|
|
20
|
+
export declare function renderAgentsBlock(commands?: string): string;
|
|
21
|
+
export type InstructionAction = "created" | "added" | "updated" | "unchanged" | "skipped";
|
|
22
|
+
export interface InstructionFileResult {
|
|
23
|
+
file: "AGENTS.md" | "CLAUDE.md";
|
|
24
|
+
path: string;
|
|
25
|
+
action: InstructionAction;
|
|
26
|
+
/** Why a file was skipped or left as it is. */
|
|
27
|
+
reason?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Write or update AGENTS.md and CLAUDE.md in the project root. A new
|
|
31
|
+
* AGENTS.md is the Summer block; a new CLAUDE.md is `@AGENTS.md` only. An
|
|
32
|
+
* existing CLAUDE.md that already imports AGENTS.md is left as it is. Each
|
|
33
|
+
* file is its own step: a file that cannot be read or written is skipped
|
|
34
|
+
* with the reason, and the other is still done.
|
|
35
|
+
*/
|
|
36
|
+
export declare function writeAgentInstructions(projectDir: string, options?: {
|
|
37
|
+
dryRun?: boolean;
|
|
38
|
+
block?: string;
|
|
39
|
+
}): InstructionFileResult[];
|
|
40
|
+
/**
|
|
41
|
+
* The Summer project the working directory is in, for `summer setup`: the
|
|
42
|
+
* nearest folder with project.godot, looking up no further than the git
|
|
43
|
+
* top level, and never the home folder or the filesystem root (a stray
|
|
44
|
+
* project.godot there must not put an AGENTS.md or CLAUDE.md in every
|
|
45
|
+
* session). Null when there is none.
|
|
46
|
+
*/
|
|
47
|
+
export declare function findSetupProjectRoot(cwd?: string): string | null;
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, writeFileSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { basename, dirname, join, parse, relative, resolve, isAbsolute } from "path";
|
|
4
|
+
import { PACKAGE_ROOT } from "../core/package-root.js";
|
|
5
|
+
/**
|
|
6
|
+
* AGENTS.md and CLAUDE.md in a Summer project. AGENTS.md is the one file
|
|
7
|
+
* Codex, Cursor, Copilot, Amp and other agents read in every session;
|
|
8
|
+
* Claude Code reads CLAUDE.md, which here only imports AGENTS.md.
|
|
9
|
+
* `summer create` writes both; `summer setup --yes` inside a project adds
|
|
10
|
+
* them when missing.
|
|
11
|
+
*
|
|
12
|
+
* An existing file is never overwritten: Summer adds one marked block once,
|
|
13
|
+
* and later runs replace only that block. A link is followed only to a file
|
|
14
|
+
* inside the project, and a CLAUDE.md that is the same file as AGENTS.md
|
|
15
|
+
* gets the AGENTS.md block only. The five commands are the list in the
|
|
16
|
+
* summer-cli skill (between its project-commands markers), so the two
|
|
17
|
+
* cannot drift; the skill's test runs every command both of them teach.
|
|
18
|
+
*/
|
|
19
|
+
export const SUMMER_BLOCK_START = "<!-- summer-engine:start. summer setup updates only this block; write your own notes outside it. -->";
|
|
20
|
+
export const SUMMER_BLOCK_END = "<!-- summer-engine:end -->";
|
|
21
|
+
const CLAUDE_IMPORTS = new Set(["@AGENTS.md", "@./AGENTS.md"]);
|
|
22
|
+
const SKILL_PATH = ["library", "skills", "summer-cli", "SKILL.md"];
|
|
23
|
+
const COMMANDS = /<!-- project-commands[^>]*-->\n([\s\S]*?)\n<!-- \/project-commands -->/;
|
|
24
|
+
/** The numbered command list from the summer-cli skill. */
|
|
25
|
+
export function projectCommands(skill = readFileSync(join(PACKAGE_ROOT, ...SKILL_PATH), "utf-8")) {
|
|
26
|
+
const match = COMMANDS.exec(skill);
|
|
27
|
+
if (!match)
|
|
28
|
+
throw new Error("The summer-cli skill has no project-commands list.");
|
|
29
|
+
return match[1].trim();
|
|
30
|
+
}
|
|
31
|
+
/** The Summer block of AGENTS.md, markers included. */
|
|
32
|
+
export function renderAgentsBlock(commands = projectCommands()) {
|
|
33
|
+
return [
|
|
34
|
+
SUMMER_BLOCK_START,
|
|
35
|
+
"# Summer Engine game",
|
|
36
|
+
"",
|
|
37
|
+
"This is a game made with Summer Engine, the game engine built for AI. Game code is GDScript (`.gd`), scenes are `.tscn`, resources are `.tres`, and `project.godot` is the project file.",
|
|
38
|
+
"",
|
|
39
|
+
"## How to work on it",
|
|
40
|
+
"",
|
|
41
|
+
"- Change scenes through Summer while Summer Engine has the project open. The editor rewrites `.tscn` files when it saves, so hand edits get lost.",
|
|
42
|
+
"- With Summer's MCP server, call the `summer_*` tools and start with `summer_get_project_context`. Without it, run the same operations as `summer` commands in the shell (the `summer-cli` skill). If `summer` is missing or older than 4.0, use `npx -y summer-engine@latest` in its place.",
|
|
43
|
+
"- Summer's skills teach each part of a game. `npx -y summer-engine@latest setup <agent> --yes` installs them for your agent (add `--cli` for no MCP server). Start with `using-summer`, and find the right one with `summer docs search --query \"<the task>\"`.",
|
|
44
|
+
"- `.summer/` is the project's memory: `GameSoul.md` says what the game is, `memory/` holds the decisions to keep. Read them before you change the game's look, sound or story.",
|
|
45
|
+
"- Check your own work: script errors, a screenshot, a play run. Ask the person to play only for feel and fun.",
|
|
46
|
+
"",
|
|
47
|
+
"## The five commands",
|
|
48
|
+
"",
|
|
49
|
+
commands,
|
|
50
|
+
"",
|
|
51
|
+
"## Publishing",
|
|
52
|
+
"",
|
|
53
|
+
"The `publish-your-game` skill has the steps; `summer ops search \"publish my game\"` finds each operation. `summer store publish` sends the game to Summer's store review, and the game's owner approves it: give them the link it prints. Nothing goes live until they approve.",
|
|
54
|
+
SUMMER_BLOCK_END,
|
|
55
|
+
].join("\n");
|
|
56
|
+
}
|
|
57
|
+
/** The text with `block` as its Summer block: replaced where it is, else appended. Keeps the file's line endings. */
|
|
58
|
+
function withBlock(text, block) {
|
|
59
|
+
const eol = text.includes("\r\n") ? "\r\n" : "\n";
|
|
60
|
+
const ours = block.replace(/\r?\n/g, eol);
|
|
61
|
+
const start = text.indexOf(SUMMER_BLOCK_START);
|
|
62
|
+
if (start === -1) {
|
|
63
|
+
// Only trailing line breaks change outside the block; an empty file is the block alone.
|
|
64
|
+
return { text: text.trim() ? `${text.replace(/(\r?\n)*$/, eol)}${eol}${ours}${eol}` : `${ours}${eol}`, action: "added" };
|
|
65
|
+
}
|
|
66
|
+
const end = text.indexOf(SUMMER_BLOCK_END, start);
|
|
67
|
+
if (end === -1)
|
|
68
|
+
return { text, action: "skipped", reason: "its Summer block has no end marker" };
|
|
69
|
+
// Two blocks (a merge, or the markers quoted in the person's text): which
|
|
70
|
+
// one is Summer's is not knowable, so the person picks; nothing is deleted.
|
|
71
|
+
if (text.indexOf(SUMMER_BLOCK_START, end) !== -1)
|
|
72
|
+
return { text, action: "skipped", reason: "it has two Summer blocks; delete one and run setup again" };
|
|
73
|
+
const next = `${text.slice(0, start)}${ours}${text.slice(end + SUMMER_BLOCK_END.length)}`;
|
|
74
|
+
return { text: next, action: next === text ? "unchanged" : "updated" };
|
|
75
|
+
}
|
|
76
|
+
/** Does the text import AGENTS.md on a line of its own, outside code fences? */
|
|
77
|
+
function importsAgents(text) {
|
|
78
|
+
let fence = false;
|
|
79
|
+
for (const line of text.split(/\r?\n/)) {
|
|
80
|
+
const trimmed = line.trim();
|
|
81
|
+
if (/^(```|~~~)/.test(trimmed))
|
|
82
|
+
fence = !fence;
|
|
83
|
+
else if (!fence && CLAUDE_IMPORTS.has(trimmed))
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
function inside(root, path) {
|
|
89
|
+
const rel = relative(root, path);
|
|
90
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Where a file may be written, and `real`, the file a write lands in:
|
|
94
|
+
* "missing" (create it: here, or the missing target of a link inside the
|
|
95
|
+
* project), "file" (a file, or a link to one inside the project), or a
|
|
96
|
+
* reason to leave it alone (a link that points nowhere or out of the
|
|
97
|
+
* project). `real` is known before anything is written, so a link from one
|
|
98
|
+
* name to the other counts as one file even when its target is missing.
|
|
99
|
+
*/
|
|
100
|
+
function locate(path, realRoot) {
|
|
101
|
+
let isLink = false;
|
|
102
|
+
try {
|
|
103
|
+
isLink = lstatSync(path).isSymbolicLink();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return { kind: "missing", real: join(realRoot, basename(path)) };
|
|
107
|
+
}
|
|
108
|
+
let real;
|
|
109
|
+
try {
|
|
110
|
+
real = realpathSync(path);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
const target = resolve(realRoot, readlinkSync(path));
|
|
114
|
+
return inside(realRoot, target) ? { kind: "missing", real: target } : { kind: "skip", reason: "it is a link to a file that does not exist" };
|
|
115
|
+
}
|
|
116
|
+
if (isLink && !inside(realRoot, real))
|
|
117
|
+
return { kind: "skip", reason: "it is a link to a file outside the project" };
|
|
118
|
+
return { kind: "file", real };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Write or update AGENTS.md and CLAUDE.md in the project root. A new
|
|
122
|
+
* AGENTS.md is the Summer block; a new CLAUDE.md is `@AGENTS.md` only. An
|
|
123
|
+
* existing CLAUDE.md that already imports AGENTS.md is left as it is. Each
|
|
124
|
+
* file is its own step: a file that cannot be read or written is skipped
|
|
125
|
+
* with the reason, and the other is still done.
|
|
126
|
+
*/
|
|
127
|
+
export function writeAgentInstructions(projectDir, options = {}) {
|
|
128
|
+
const agents = join(projectDir, "AGENTS.md");
|
|
129
|
+
const claude = join(projectDir, "CLAUDE.md");
|
|
130
|
+
let block;
|
|
131
|
+
let realRoot;
|
|
132
|
+
try {
|
|
133
|
+
block = options.block ?? renderAgentsBlock();
|
|
134
|
+
realRoot = realpathSync(projectDir);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
const reason = messageOf(error);
|
|
138
|
+
return [
|
|
139
|
+
{ file: "AGENTS.md", path: agents, action: "skipped", reason },
|
|
140
|
+
{ file: "CLAUDE.md", path: claude, action: "skipped", reason },
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
const write = (path, text) => {
|
|
144
|
+
if (!options.dryRun)
|
|
145
|
+
writeFileSync(path, text, "utf-8");
|
|
146
|
+
};
|
|
147
|
+
const step = (file, path, run) => {
|
|
148
|
+
try {
|
|
149
|
+
return { file, path, ...run() };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return { file, path, action: "skipped", reason: messageOf(error) };
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const agentsAt = locate(agents, realRoot);
|
|
156
|
+
const agentsResult = step("AGENTS.md", agents, () => {
|
|
157
|
+
if (agentsAt.kind === "skip")
|
|
158
|
+
return { action: "skipped", reason: agentsAt.reason };
|
|
159
|
+
if (agentsAt.kind === "missing") {
|
|
160
|
+
write(agents, `${block}\n`);
|
|
161
|
+
return { action: "created" };
|
|
162
|
+
}
|
|
163
|
+
const next = withBlock(readFileSync(agents, "utf-8"), block);
|
|
164
|
+
if (next.action === "added" || next.action === "updated")
|
|
165
|
+
write(agents, next.text);
|
|
166
|
+
return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
|
|
167
|
+
});
|
|
168
|
+
const claudeAt = locate(claude, realRoot);
|
|
169
|
+
const claudeResult = step("CLAUDE.md", claude, () => {
|
|
170
|
+
if (claudeAt.kind === "skip")
|
|
171
|
+
return { action: "skipped", reason: claudeAt.reason };
|
|
172
|
+
// CLAUDE.md -> AGENTS.md (or the reverse): one file, which already has the AGENTS.md block.
|
|
173
|
+
if (agentsAt.kind !== "skip" && claudeAt.real === agentsAt.real) {
|
|
174
|
+
return { action: "unchanged", reason: "it is the same file as AGENTS.md" };
|
|
175
|
+
}
|
|
176
|
+
if (claudeAt.kind === "missing") {
|
|
177
|
+
write(claude, "@AGENTS.md\n");
|
|
178
|
+
return { action: "created" };
|
|
179
|
+
}
|
|
180
|
+
const text = readFileSync(claude, "utf-8");
|
|
181
|
+
if (importsAgents(text) && !text.includes(SUMMER_BLOCK_START))
|
|
182
|
+
return { action: "unchanged" };
|
|
183
|
+
const next = withBlock(text, `${SUMMER_BLOCK_START}\n@AGENTS.md\n${SUMMER_BLOCK_END}`);
|
|
184
|
+
if (next.action === "added" || next.action === "updated")
|
|
185
|
+
write(claude, next.text);
|
|
186
|
+
return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
|
|
187
|
+
});
|
|
188
|
+
return [agentsResult, claudeResult];
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The Summer project the working directory is in, for `summer setup`: the
|
|
192
|
+
* nearest folder with project.godot, looking up no further than the git
|
|
193
|
+
* top level, and never the home folder or the filesystem root (a stray
|
|
194
|
+
* project.godot there must not put an AGENTS.md or CLAUDE.md in every
|
|
195
|
+
* session). Null when there is none.
|
|
196
|
+
*/
|
|
197
|
+
export function findSetupProjectRoot(cwd = process.cwd()) {
|
|
198
|
+
let current;
|
|
199
|
+
try {
|
|
200
|
+
current = realpathSync(resolve(cwd));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
let home;
|
|
206
|
+
try {
|
|
207
|
+
home = realpathSync(homedir());
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
home = homedir();
|
|
211
|
+
}
|
|
212
|
+
while (current !== home && current !== parse(current).root) {
|
|
213
|
+
if (existsSync(join(current, "project.godot")))
|
|
214
|
+
return current;
|
|
215
|
+
if (existsSync(join(current, ".git")))
|
|
216
|
+
return null;
|
|
217
|
+
const parent = dirname(current);
|
|
218
|
+
if (parent === current)
|
|
219
|
+
return null;
|
|
220
|
+
current = parent;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
function messageOf(error) {
|
|
225
|
+
return error instanceof Error ? error.message : String(error);
|
|
226
|
+
}
|
package/gemini-extension.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "4.2.0",
|
|
5
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. The Summer Engine MCP server, context primer and game-dev skills.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
8
8
|
"summer-engine": {
|
|
@@ -40,7 +40,6 @@
|
|
|
40
40
|
"./library/skills/brainstorming/",
|
|
41
41
|
"./library/skills/browse-templates/",
|
|
42
42
|
"./library/skills/camera-rigs/",
|
|
43
|
-
"./library/skills/celeste-momentum-platforming/",
|
|
44
43
|
"./library/skills/character-animation-wiring/",
|
|
45
44
|
"./library/skills/character-model/",
|
|
46
45
|
"./library/skills/character-movement/",
|
|
@@ -49,6 +48,7 @@
|
|
|
49
48
|
"./library/skills/combat-basics/",
|
|
50
49
|
"./library/skills/compatibility-renderer-traps/",
|
|
51
50
|
"./library/skills/concept-art/",
|
|
51
|
+
"./library/skills/concept-to-level/",
|
|
52
52
|
"./library/skills/create-asset-sheet/",
|
|
53
53
|
"./library/skills/debug/",
|
|
54
54
|
"./library/skills/debugging-game-feel/",
|
|
@@ -67,13 +67,11 @@
|
|
|
67
67
|
"./library/skills/gameskill/",
|
|
68
68
|
"./library/skills/gdscript-patterns/",
|
|
69
69
|
"./library/skills/generate-motion/",
|
|
70
|
-
"./library/skills/godogen-visual-proof-game-generation/",
|
|
71
70
|
"./library/skills/grow-analytics/",
|
|
72
71
|
"./library/skills/headless-scripting/",
|
|
73
72
|
"./library/skills/in-game-purchases/",
|
|
74
73
|
"./library/skills/instantiate-asset-pack/",
|
|
75
74
|
"./library/skills/investigating-bugs/",
|
|
76
|
-
"./library/skills/lumera-single-image-scene-reconstruction/",
|
|
77
75
|
"./library/skills/make-game/",
|
|
78
76
|
"./library/skills/multiplayer/",
|
|
79
77
|
"./library/skills/multiplayer-movement/",
|
|
@@ -90,9 +88,7 @@
|
|
|
90
88
|
"./library/skills/playtesting-a-feature/",
|
|
91
89
|
"./library/skills/procedural-animation/",
|
|
92
90
|
"./library/skills/prop-model/",
|
|
93
|
-
"./library/skills/psx-retro-rendering/",
|
|
94
91
|
"./library/skills/publish-your-game/",
|
|
95
|
-
"./library/skills/realtime-wet-surfaces/",
|
|
96
92
|
"./library/skills/release-readiness/",
|
|
97
93
|
"./library/skills/remote-deploy/",
|
|
98
94
|
"./library/skills/retarget/",
|
|
@@ -102,10 +98,6 @@
|
|
|
102
98
|
"./library/skills/scene-hierarchy-design/",
|
|
103
99
|
"./library/skills/scene-scripting/",
|
|
104
100
|
"./library/skills/scene-to-level/",
|
|
105
|
-
"./library/skills/skill-create/",
|
|
106
|
-
"./library/skills/skill-improve/",
|
|
107
|
-
"./library/skills/skill-test/",
|
|
108
|
-
"./library/skills/skintokens-auto-rigging/",
|
|
109
101
|
"./library/skills/skybox-panorama/",
|
|
110
102
|
"./library/skills/sound-effect/",
|
|
111
103
|
"./library/skills/spatial-placement/",
|
|
@@ -115,6 +107,8 @@
|
|
|
115
107
|
"./library/skills/summer-analytics/",
|
|
116
108
|
"./library/skills/summer-apps/",
|
|
117
109
|
"./library/skills/summer-apps-design/",
|
|
110
|
+
"./library/skills/summer-assets/",
|
|
111
|
+
"./library/skills/summer-cli/",
|
|
118
112
|
"./library/skills/summer-friends/",
|
|
119
113
|
"./library/skills/summer-leaderboards/",
|
|
120
114
|
"./library/skills/summer-match-results/",
|
|
@@ -147,7 +141,6 @@
|
|
|
147
141
|
"./library/skills/web-and-touch-input/",
|
|
148
142
|
"./library/skills/web-compatibility-look/",
|
|
149
143
|
"./library/skills/world-building-3d/",
|
|
150
|
-
"./library/skills/writing-plans/"
|
|
151
|
-
"./library/skills/writing-skills/"
|
|
144
|
+
"./library/skills/writing-plans/"
|
|
152
145
|
]
|
|
153
146
|
}
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
# Status: OPT-IN. The hook is always registered but exits 0 immediately
|
|
10
10
|
# unless one of these is set:
|
|
11
11
|
# CLAUDE_PLUGIN_OPTION_ENABLE_PRE_COMMIT_DOCTOR=true
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
12
|
+
# The `enable_pre_commit_doctor` plugin option of older
|
|
13
|
+
# plugin versions (Claude Code exports userConfig values to
|
|
14
|
+
# hooks as CLAUDE_PLUGIN_OPTION_<KEY>). The plugin no longer
|
|
15
|
+
# declares it: every option opens a dialog on enable.
|
|
15
16
|
# SUMMER_PRE_COMMIT_DOCTOR=1
|
|
16
17
|
# Manual / other-host opt-in (also the envVar Gemini's
|
|
17
18
|
# gemini-extension.json `settings` entry maps to).
|
|
@@ -111,7 +112,7 @@ if [ "$HAS_FAIL" -eq 1 ]; then
|
|
|
111
112
|
echo "$FAIL_MSGS"
|
|
112
113
|
echo ""
|
|
113
114
|
echo "Fix the failures above, or run: summer doctor"
|
|
114
|
-
echo "To bypass: turn off the
|
|
115
|
+
echo "To bypass: unset SUMMER_PRE_COMMIT_DOCTOR (or turn off the enable_pre_commit_doctor option where your host has it)."
|
|
115
116
|
echo "============================================"
|
|
116
117
|
} >&2
|
|
117
118
|
exit 2
|
package/hooks/session-start.sh
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Event: SessionStart (matcher: startup|clear|compact)
|
|
5
5
|
# Purpose: Orient Claude on every fresh Summer-enabled session.
|
|
6
|
-
# Detect Summer project + GameSoul +
|
|
7
|
-
# greeting as additional context.
|
|
6
|
+
# Detect Summer project + GameSoul + first-run state and surface a
|
|
7
|
+
# short greeting as additional context.
|
|
8
8
|
#
|
|
9
9
|
# Input: JSON on stdin with { session_id, source, model, cwd, ... }
|
|
10
10
|
# Common Claude Code env vars: $CLAUDE_PROJECT_DIR, $CLAUDE_PLUGIN_ROOT
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
# Exit: Always 0 — never block session start.
|
|
14
14
|
#
|
|
15
15
|
# Portability: bash 3.2+ (macOS default), POSIX-friendly, works on Git Bash.
|
|
16
|
-
# Uses `grep -E` not `grep -P`.
|
|
17
|
-
#
|
|
16
|
+
# Uses `grep -E` not `grep -P`. File checks only: no network,
|
|
17
|
+
# no child processes beyond grep/awk/find, so it returns at once.
|
|
18
18
|
|
|
19
19
|
set +e # Hooks must never kill the session.
|
|
20
20
|
|
|
@@ -64,30 +64,26 @@ if [ -f "${PROJECT_DIR}/project.godot" ]; then
|
|
|
64
64
|
fi
|
|
65
65
|
fi
|
|
66
66
|
|
|
67
|
-
# Line 3:
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if [ -n "$FAIL_REASON" ]; then
|
|
88
|
-
LINES+=("Summer setup needs attention: ${FAIL_REASON}. Run: summer doctor")
|
|
89
|
-
fi
|
|
90
|
-
fi
|
|
67
|
+
# Line 3: first-run / sign-in hint, from local files only. No network and no
|
|
68
|
+
# `summer doctor` here: SessionStart blocks the session until it returns, and a
|
|
69
|
+
# doctor run (npm registry, engine probe, MCP boot) can take seconds. The full
|
|
70
|
+
# check is one call away (`summer doctor`, or /summer:start on a first run).
|
|
71
|
+
SUMMER_HOME="${HOME}/.summer"
|
|
72
|
+
ENGINE_FOUND=""
|
|
73
|
+
for candidate in "/Applications/Summer.app" "${HOME}/Applications/Summer.app" \
|
|
74
|
+
"${LOCALAPPDATA:-}/Programs/Summer" "${LOCALAPPDATA:-}/SummerEngine" "${HOME}/.local/share/summer-engine"; do
|
|
75
|
+
if [ -e "$candidate" ]; then ENGINE_FOUND=1; break; fi
|
|
76
|
+
done
|
|
77
|
+
if [ -n "${SUMMER_BIN:-}${SUMMER_ENGINE_BINARY:-}" ]; then ENGINE_FOUND=1; fi
|
|
78
|
+
# /summer:start is the Claude Code plugin command; other hosts get the CLI.
|
|
79
|
+
START_HINT="run: npx -y summer-engine@latest setup"
|
|
80
|
+
if [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -z "${CURSOR_PLUGIN_ROOT:-}" ]; then
|
|
81
|
+
START_HINT="suggest /summer:start (sets up Summer and makes a first playable game in about five minutes)"
|
|
82
|
+
fi
|
|
83
|
+
if [ ! -d "$SUMMER_HOME" ] && [ -z "$ENGINE_FOUND" ] && [ -z "${SUMMER_TOKEN:-}" ]; then
|
|
84
|
+
LINES+=("Summer is not set up on this machine yet. When the user wants to make a game, ${START_HINT}.")
|
|
85
|
+
elif [ ! -f "${SUMMER_HOME}/auth-token" ] && [ -z "${SUMMER_TOKEN:-}" ]; then
|
|
86
|
+
LINES+=("Summer CLI is not signed in: asset and publishing tools need \`summer login\` (or sign in to the summer-cloud server in /mcp).")
|
|
91
87
|
fi
|
|
92
88
|
|
|
93
89
|
# ---------- Compose context ----------
|
package/integrations/README.md
CHANGED
|
@@ -58,7 +58,7 @@ are listed where they differ.
|
|
|
58
58
|
| claude-desktop | — | MCP: `~/Library/Application Support/Claude/claude_desktop_config.json`; Linux `~/.config/Claude/claude_desktop_config.json`; Windows `%APPDATA%/Claude/claude_desktop_config.json`; no skills folder (MCP only) |
|
|
59
59
|
| codex | `.codex-plugin/plugin.json` | MCP: `~/.codex/config.toml`; project `.codex/config.toml`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
60
60
|
| cursor | `.cursor-plugin/plugin.json` | MCP: `~/.cursor/mcp.json`; project `.cursor/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
61
|
-
| windsurf | — | MCP: `~/.
|
|
61
|
+
| windsurf | — | MCP: `~/.config/devin/mcp_config.json`; Windows `%APPDATA%/devin/mcp_config.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
62
62
|
| antigravity | — | MCP: `~/.gemini/config/mcp_config.json`; project `.agents/mcp_config.json`; skills: `~/.gemini/config/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
63
63
|
| gemini (legacy) | `gemini-extension.json` | MCP: `~/.gemini/extensions/summer-engine/gemini-extension.json`; skills: `~/.gemini/extensions/summer-engine/skills` (`<skill>/SKILL.md`) |
|
|
64
64
|
| cline | — | MCP: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; skills: `~/.cline/skills`; project `.cline/skills` (`<skill>/SKILL.md`) |
|
|
@@ -8,6 +8,12 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
8
8
|
- `registry/generated/marketplace.claude.json` -> `.claude-plugin/marketplace.json`
|
|
9
9
|
(marketplace listing wrapper).
|
|
10
10
|
|
|
11
|
+
- `registry/generated/plugin.claude-directory.json` -> `plugins/claude/.claude-plugin/plugin.json`,
|
|
12
|
+
plus the rest of `plugins/claude/` (`scripts/generate-registry/mirrors.ts`): the same
|
|
13
|
+
plugin for Anthropic's plugin directory, from a folder of its own (under 512 files,
|
|
14
|
+
no symlinks), with the server and every `summer-engine@latest` pinned to this
|
|
15
|
+
version. Submit `plugins/claude` as the plugin path.
|
|
16
|
+
|
|
11
17
|
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
12
18
|
well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
|
|
13
19
|
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/Library/Application Support/Claude/claude_desktop_config.json`; Linux `~/.config/Claude/claude_desktop_config.json`; Windows `%APPDATA%/Claude/claude_desktop_config.json` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: `mcpServers.summer-engine = { command, args }`.
|
|
9
|
-
- Skills: none. Claude Desktop has no skills folder. The MCP server ships
|
|
9
|
+
- Skills: none. 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.
|
|
10
10
|
- After: Quit and reopen Claude Desktop; the summer-engine tools appear under the tools menu in a new chat.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -6,7 +6,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.config/github-copilot/intellij/mcp.json`; Windows `%APPDATA%/github-copilot/intellij/mcp.json` (user); user scope only (project requests fall back with a warning).
|
|
8
8
|
Shape: `servers.summer-engine = { command, args }`.
|
|
9
|
-
- Skills: none. Copilot in JetBrains documents no skills folder; the MCP server ships
|
|
9
|
+
- Skills: none. Copilot in JetBrains documents no skills folder; the MCP server ships summer_docs_search and summer_docs_read for in-chat guidance.
|
|
10
10
|
- After: Restart the JetBrains IDE and open Copilot Chat in Agent mode; summer-engine shows in the tools list.
|
|
11
11
|
|
|
12
12
|
Source of truth: `src/installer/agent-table.ts` (one row per agent).
|
|
@@ -21,6 +21,17 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
21
21
|
`skills install --all --agent gemini`); Gemini extensions are user-scoped, so
|
|
22
22
|
`--scope project` falls back to user with a warning.
|
|
23
23
|
|
|
24
|
+
`gemini extensions install https://github.com/SummerEngine/summer` (and the
|
|
25
|
+
Gemini CLI gallery) installs a GitHub Release's only asset when it has one.
|
|
26
|
+
`.github/workflows/gemini-extension.yml` attaches `summer-gemini-extension.tar.gz`
|
|
27
|
+
to every release (`scripts/build-gemini-extension.ts`): the manifest without `settings` (no hooks ship) and without
|
|
28
|
+
`skills`, `GEMINI.md`, `AGENTS.md` and `skills/<slug>/` for every bundled skill.
|
|
29
|
+
Keep it the release's only asset, or Gemini falls back to the source tarball,
|
|
30
|
+
which has no `skills/` folder: the workflow leaves a release that already has it
|
|
31
|
+
alone and stops with an error on one that has other assets. Every packaged file
|
|
32
|
+
comes from the tag itself (only the script comes from the workflow's commit), so
|
|
33
|
+
dispatching it for an older tag packages that release as it was.
|
|
34
|
+
|
|
24
35
|
Never edit the destination file by hand — edit `library/` resources or
|
|
25
36
|
`scripts/generate-registry/manifests.ts`, then run
|
|
26
37
|
`npm run generate:registry`. CI `--check` fails on any drift.
|