summer-engine 4.0.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 -2
- package/.claude-plugin/plugin.json +3 -2
- package/.codex-plugin/plugin.json +15 -11
- package/.cursor-plugin/plugin.json +5 -3
- package/.factory-plugin/plugin.json +3 -2
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +37 -0
- package/README.md +20 -9
- 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/memory.js +6 -2
- package/dist/cli/commands/ops.d.ts +20 -3
- package/dist/cli/commands/ops.js +55 -27
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +219 -16
- package/dist/cli/commands/skills.js +20 -7
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.js +36 -21
- package/dist/core/capabilities/apps.d.ts +10 -10
- package/dist/core/capabilities/audit/args.d.ts +6 -6
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
- package/dist/core/capabilities/game-task-plan.d.ts +2 -2
- package/dist/core/capabilities/hdri-import.d.ts +2 -2
- package/dist/core/capabilities/motion-generation.d.ts +2 -2
- package/dist/core/capabilities/placement.d.ts +23 -23
- package/dist/core/capabilities/runtime-control.d.ts +38 -38
- package/dist/core/capabilities/seeing/args.d.ts +16 -16
- package/dist/core/capabilities/ui-control.d.ts +2 -2
- package/dist/core/capabilities/world-snapshot.d.ts +4 -4
- package/dist/core/library-search.d.ts +2 -2
- package/dist/core/ops/areas.d.ts +11 -0
- package/dist/core/ops/areas.js +24 -0
- package/dist/core/ops/catalog.d.ts +4 -0
- package/dist/core/ops/catalog.js +13 -1
- package/dist/core/ops/cloud.d.ts +10 -2
- package/dist/core/ops/cloud.js +51 -28
- package/dist/core/ops/contract.d.ts +2 -1
- package/dist/core/ops/contract.js +2 -10
- package/dist/core/ops/public-catalog.d.ts +48 -0
- package/dist/core/ops/public-catalog.js +56 -0
- package/dist/core/ops/search.d.ts +0 -1
- package/dist/core/ops/search.js +169 -37
- package/dist/installer/agent-config.js +5 -0
- package/dist/installer/agent-table.d.ts +9 -0
- package/dist/installer/agent-table.js +23 -2
- package/dist/installer/cli-permissions.d.ts +65 -0
- package/dist/installer/cli-permissions.js +182 -0
- package/dist/installer/setup.d.ts +2 -0
- package/dist/installer/setup.js +3 -0
- package/dist/installer/skills-refresh.d.ts +29 -0
- package/dist/installer/skills-refresh.js +261 -0
- package/dist/installer/version-check.d.ts +22 -2
- package/dist/installer/version-check.js +66 -9
- package/dist/mcp/ops-surface.js +16 -6
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.js +32 -3
- package/dist/project-memory/agent-instructions.d.ts +47 -0
- package/dist/project-memory/agent-instructions.js +226 -0
- package/gemini-extension.json +3 -2
- package/integrations/README.md +1 -1
- package/integrations/claude/README.md +6 -0
- package/integrations/claude/manifest-target.json +4 -0
- package/integrations/gemini/README.md +11 -0
- package/integrations/windsurf/README.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +16 -0
- package/library/skills/README.md +5 -4
- package/library/skills/adaptive-music/SKILL.md +21 -0
- package/library/skills/agent-playtesting/SKILL.md +22 -0
- package/library/skills/ai-characters-in-games/SKILL.md +15 -0
- package/library/skills/ambient-bed/SKILL.md +16 -0
- package/library/skills/animated-loop/SKILL.md +19 -0
- package/library/skills/animation-tree/SKILL.md +26 -0
- package/library/skills/art-direction/SKILL.md +14 -0
- package/library/skills/asset-strategy/SKILL.md +30 -0
- package/library/skills/audio-direction/SKILL.md +16 -0
- package/library/skills/auto-fire-targeting/SKILL.md +14 -0
- package/library/skills/brainstorm-game/SKILL.md +13 -0
- package/library/skills/browse-templates/SKILL.md +10 -0
- package/library/skills/camera-rigs/SKILL.md +20 -0
- package/library/skills/character-animation-wiring/SKILL.md +24 -0
- package/library/skills/character-model/SKILL.md +28 -0
- package/library/skills/character-movement/SKILL.md +24 -0
- package/library/skills/character-portrait/SKILL.md +15 -0
- package/library/skills/cinematic-cutscene/SKILL.md +21 -0
- package/library/skills/combat-basics/SKILL.md +19 -0
- package/library/skills/compatibility-renderer-traps/SKILL.md +11 -0
- package/library/skills/concept-art/SKILL.md +13 -0
- package/library/skills/concept-to-level/SKILL.md +20 -1
- package/library/skills/concept-to-level/resource.yaml +2 -2
- package/library/skills/create-asset-sheet/SKILL.md +18 -0
- package/library/skills/debug/SKILL.md +32 -0
- package/library/skills/debugging-game-feel/SKILL.md +12 -0
- package/library/skills/design-level/SKILL.md +17 -0
- package/library/skills/design-mechanic/SKILL.md +17 -0
- package/library/skills/design-npc/SKILL.md +21 -0
- package/library/skills/diagnosing-perf-regressions/SKILL.md +12 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +23 -0
- package/library/skills/environment-kit/SKILL.md +23 -0
- package/library/skills/export-and-ship/SKILL.md +23 -0
- package/library/skills/fabricating-assets/SKILL.md +23 -0
- package/library/skills/facial-and-lipsync/SKILL.md +22 -0
- package/library/skills/fps-controller/SKILL.md +17 -0
- package/library/skills/game-feel/SKILL.md +26 -0
- package/library/skills/gameskill/SKILL.md +11 -0
- package/library/skills/gdscript-patterns/SKILL.md +15 -0
- package/library/skills/generate-motion/SKILL.md +21 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +17 -0
- package/library/skills/grow-analytics/SKILL.md +10 -0
- package/library/skills/headless-scripting/SKILL.md +13 -0
- package/library/skills/in-game-purchases/SKILL.md +11 -0
- package/library/skills/instantiate-asset-pack/SKILL.md +17 -0
- package/library/skills/make-game/SKILL.md +29 -0
- package/library/skills/multiplayer/SKILL.md +12 -0
- package/library/skills/multiplayer-movement/SKILL.md +18 -0
- package/library/skills/multiplayer-project/SKILL.md +17 -0
- package/library/skills/multiplayer-publish/SKILL.md +17 -0
- package/library/skills/multiplayer-state/SKILL.md +16 -0
- package/library/skills/multiplayer-testing/SKILL.md +15 -0
- package/library/skills/music-track/SKILL.md +16 -0
- package/library/skills/navigate-summer/SKILL.md +15 -0
- package/library/skills/new-project/SKILL.md +11 -0
- package/library/skills/organic-model/SKILL.md +24 -0
- package/library/skills/pixel-art/SKILL.md +15 -0
- package/library/skills/play/SKILL.md +18 -0
- package/library/skills/playtesting-a-feature/SKILL.md +23 -0
- package/library/skills/procedural-animation/SKILL.md +18 -0
- package/library/skills/prop-model/SKILL.md +23 -0
- package/library/skills/publish-your-game/SKILL.md +27 -0
- package/library/skills/release-readiness/SKILL.md +12 -0
- package/library/skills/remote-deploy/SKILL.md +14 -0
- package/library/skills/retarget/SKILL.md +20 -0
- package/library/skills/running-in-the-cloud/SKILL.md +10 -0
- package/library/skills/save-load/SKILL.md +15 -0
- package/library/skills/scene-composition/SKILL.md +17 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +24 -0
- package/library/skills/scene-scripting/SKILL.md +30 -0
- package/library/skills/scene-to-level/SKILL.md +22 -0
- package/library/skills/skill-test/SKILL.md +10 -0
- package/library/skills/skybox-panorama/SKILL.md +20 -0
- package/library/skills/sound-effect/SKILL.md +23 -0
- package/library/skills/spatial-placement/SKILL.md +30 -0
- package/library/skills/sprite-sheet/SKILL.md +23 -0
- package/library/skills/store-art/SKILL.md +11 -0
- package/library/skills/store-listing/SKILL.md +10 -0
- package/library/skills/summer-analytics/SKILL.md +15 -0
- package/library/skills/summer-apps/SKILL.md +29 -0
- package/library/skills/summer-assets/SKILL.md +31 -1
- package/library/skills/summer-assets/resource.yaml +2 -2
- 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 +15 -0
- 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 +15 -0
- package/library/skills/tileable-texture/SKILL.md +18 -0
- package/library/skills/trailer-shot/SKILL.md +18 -0
- package/library/skills/tune-performance/SKILL.md +26 -0
- package/library/skills/ui-basics/SKILL.md +14 -0
- package/library/skills/ui-graphics/SKILL.md +17 -0
- package/library/skills/use-widget-asset/SKILL.md +14 -0
- package/library/skills/using-summer/SKILL.md +26 -0
- package/library/skills/using-summer/resource.yaml +2 -1
- package/library/skills/vehicle-model/SKILL.md +27 -0
- package/library/skills/verifying-scenes/SKILL.md +29 -0
- package/library/skills/vfx-dissolve/SKILL.md +19 -0
- package/library/skills/vfx-fire/SKILL.md +26 -0
- package/library/skills/vfx-hit-spark/SKILL.md +23 -0
- package/library/skills/vfx-lightning/SKILL.md +23 -0
- package/library/skills/vfx-magic-glow/SKILL.md +23 -0
- package/library/skills/vfx-muzzle-flash/SKILL.md +23 -0
- package/library/skills/vfx-smoke/SKILL.md +26 -0
- package/library/skills/vfx-water-ripple/SKILL.md +23 -0
- package/library/skills/voice-line/SKILL.md +16 -0
- package/library/skills/web-and-touch-input/SKILL.md +19 -0
- package/library/skills/web-compatibility-look/SKILL.md +20 -0
- package/library/skills/world-building-3d/SKILL.md +28 -0
- package/package.json +3 -2
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +3 -2
- package/registry/generated/index.json +157 -118
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude-directory.json +168 -0
- package/registry/generated/plugin.claude.json +3 -2
- package/registry/generated/plugin.codex.json +15 -11
- package/registry/generated/plugin.cursor.json +5 -3
- package/registry/generated/plugin.factory.json +3 -2
- package/registry/generated/server.json +11 -2
- package/registry/generated/skills-index.md +5 -4
- package/registry/generated/skills-registry.json +16 -2
- package/registry/operations/legacy-names.json +35 -0
- package/registry/operations/public-catalog.json +33160 -0
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "summer",
|
|
12
12
|
"source": "./",
|
|
13
|
-
"version": "4.
|
|
14
|
-
"description": "
|
|
13
|
+
"version": "4.2.0",
|
|
14
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. A first-run guide (/summer:start), game-dev skills, and two MCP servers: the bridge to the Summer Engine desktop app, and Summer's hosted cloud server for people without it.",
|
|
15
15
|
"author": {
|
|
16
16
|
"name": "Summer Engine",
|
|
17
17
|
"email": "founders@summerengine.com"
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "summer",
|
|
4
4
|
"displayName": "Summer Engine",
|
|
5
|
-
"version": "4.
|
|
6
|
-
"description": "
|
|
5
|
+
"version": "4.2.0",
|
|
6
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. A first-run guide (/summer:start), game-dev skills, and two MCP servers: the bridge to the Summer Engine desktop app, and Summer's hosted cloud server for people without it.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Summer Engine",
|
|
9
9
|
"email": "founders@summerengine.com",
|
|
@@ -116,6 +116,7 @@
|
|
|
116
116
|
"./library/skills/summer-apps/",
|
|
117
117
|
"./library/skills/summer-apps-design/",
|
|
118
118
|
"./library/skills/summer-assets/",
|
|
119
|
+
"./library/skills/summer-cli/",
|
|
119
120
|
"./library/skills/summer-friends/",
|
|
120
121
|
"./library/skills/summer-leaderboards/",
|
|
121
122
|
"./library/skills/summer-match-results/",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/codex — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "4.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "4.2.0",
|
|
5
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 119-tool MCP bridge to the Summer Engine desktop app.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Summer Engine",
|
|
8
8
|
"email": "founders@summerengine.com",
|
|
@@ -106,6 +106,7 @@
|
|
|
106
106
|
"./library/skills/summer-apps/",
|
|
107
107
|
"./library/skills/summer-apps-design/",
|
|
108
108
|
"./library/skills/summer-assets/",
|
|
109
|
+
"./library/skills/summer-cli/",
|
|
109
110
|
"./library/skills/summer-friends/",
|
|
110
111
|
"./library/skills/summer-leaderboards/",
|
|
111
112
|
"./library/skills/summer-match-results/",
|
|
@@ -143,25 +144,28 @@
|
|
|
143
144
|
"mcpServers": "./.mcp.json",
|
|
144
145
|
"hooks": "./hooks/hooks.json",
|
|
145
146
|
"interface": {
|
|
146
|
-
"displayName": "Summer",
|
|
147
|
-
"shortDescription": "
|
|
148
|
-
"longDescription": "Summer
|
|
149
|
-
"developerName": "Summer
|
|
150
|
-
"category": "
|
|
147
|
+
"displayName": "Summer Engine",
|
|
148
|
+
"shortDescription": "Make games with AI",
|
|
149
|
+
"longDescription": "Summer Engine is the game engine built for AI. Codex builds a full multiplayer game in it, plays and tests it, and publishes it on summer.games. The plugin adds game-dev skills, lifecycle hooks, and a 119-tool MCP bridge to the Summer Engine desktop app: project files, scenes, asset import, play mode, screenshots, diagnostics, asset generation and the store. Git, shell, and grep stay with Codex. Session-start orients each session. The pre-commit doctor (opt-in) blocks bad commits.",
|
|
150
|
+
"developerName": "Summer Labs, Inc.",
|
|
151
|
+
"category": "Developer Tools",
|
|
151
152
|
"capabilities": [
|
|
152
153
|
"Interactive",
|
|
153
154
|
"Read",
|
|
154
155
|
"Write"
|
|
155
156
|
],
|
|
156
|
-
"websiteURL": "https://summerengine.com",
|
|
157
|
-
"
|
|
158
|
-
"
|
|
157
|
+
"websiteURL": "https://www.summerengine.com",
|
|
158
|
+
"supportURL": "https://summer.games/support",
|
|
159
|
+
"privacyPolicyURL": "https://www.summerengine.com/privacy",
|
|
160
|
+
"termsOfServiceURL": "https://www.summerengine.com/terms",
|
|
159
161
|
"defaultPrompt": [
|
|
160
162
|
"I want to make a game.",
|
|
161
|
-
"
|
|
163
|
+
"Make a small multiplayer game and let me play it.",
|
|
162
164
|
"Open this Summer Engine project and tell me what's broken."
|
|
163
165
|
],
|
|
164
166
|
"brandColor": "#FF8F17",
|
|
167
|
+
"composerIcon": "./assets/icon.png",
|
|
168
|
+
"logo": "./assets/icon.png",
|
|
165
169
|
"screenshots": []
|
|
166
170
|
}
|
|
167
171
|
}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
"$schema": "https://cursor.com/schemas/cursor-plugin/plugin.json",
|
|
3
3
|
"_generated": "GENERATED from integrations/cursor — do not edit; npm run generate:registry",
|
|
4
4
|
"name": "summer",
|
|
5
|
-
"displayName": "Summer",
|
|
6
|
-
"version": "4.
|
|
7
|
-
"description": "
|
|
5
|
+
"displayName": "Summer Engine",
|
|
6
|
+
"version": "4.2.0",
|
|
7
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 119-tool MCP bridge to the Summer Engine desktop app.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Summer Engine",
|
|
10
10
|
"email": "founders@summerengine.com"
|
|
11
11
|
},
|
|
12
12
|
"publisher": "summer-engine",
|
|
13
|
+
"logo": "assets/icon.png",
|
|
13
14
|
"homepage": "https://summerengine.com",
|
|
14
15
|
"repository": "https://github.com/summerengine/summer",
|
|
15
16
|
"license": "MIT",
|
|
@@ -118,6 +119,7 @@
|
|
|
118
119
|
"./library/skills/summer-apps/",
|
|
119
120
|
"./library/skills/summer-apps-design/",
|
|
120
121
|
"./library/skills/summer-assets/",
|
|
122
|
+
"./library/skills/summer-cli/",
|
|
121
123
|
"./library/skills/summer-friends/",
|
|
122
124
|
"./library/skills/summer-leaderboards/",
|
|
123
125
|
"./library/skills/summer-match-results/",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/factory — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"description": "
|
|
5
|
-
"version": "4.
|
|
4
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 119-tool MCP bridge to the Summer Engine desktop app.",
|
|
5
|
+
"version": "4.2.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Summer Engine",
|
|
8
8
|
"email": "founders@summerengine.com",
|
|
@@ -103,6 +103,7 @@
|
|
|
103
103
|
"./library/skills/summer-apps/",
|
|
104
104
|
"./library/skills/summer-apps-design/",
|
|
105
105
|
"./library/skills/summer-assets/",
|
|
106
|
+
"./library/skills/summer-cli/",
|
|
106
107
|
"./library/skills/summer-friends/",
|
|
107
108
|
"./library/skills/summer-leaderboards/",
|
|
108
109
|
"./library/skills/summer-match-results/",
|
package/AGENTS.md
CHANGED
|
@@ -95,7 +95,7 @@ Climb only as high as the change demands; the agent playbook has the full versio
|
|
|
95
95
|
|
|
96
96
|
**Honesty:** never describe an image you did not receive. A failed capture is a result — report it, climb down a rung, or ask the user. Pass structured failures (`failure_reason`, `terminalState`, `identity_mismatch`) through verbatim. Ask the user to play only for what a probe cannot judge: feel, looks, fun.
|
|
97
97
|
|
|
98
|
-
**Same tools from a shell.** Every MCP tool is also `summer tool <slug> --args '<json>'` (same implementation; `summer tool --list` for the slugs), and every operation is `summer <area> <action> --<field> <value>` (`summer ops search <words>` finds it; `--dry-run`, `--wait`, `--json`). Use them when the host has no MCP session or you want a one-off call in a script.
|
|
98
|
+
**Same tools from a shell.** Every MCP tool is also `summer tool <slug> --args '<json>'` (same implementation; `summer tool --list` for the slugs), and every operation is `summer <area> <action> --<field> <value>` (`summer ops search <words>` finds it; `--dry-run`, `--wait`, `--json`). Use them when the host has no MCP session or you want a one-off call in a script. `summer setup <agent> --cli` installs the skills with no MCP server; the `summer-cli` skill teaches the commands, and each skill ends with a "From a shell" table of the command for every tool it names.
|
|
99
99
|
|
|
100
100
|
**Engine capability pre-flight.** `summer_get_project_context` reads the engine's capability list; a tool whose op the running engine build provably lacks returns a structured `engine_lacks_op` result instead of running (for example, the runtime and spatial tools on engines older than 0.5.66). `SUMMER_CAPABILITY_PREFLIGHT=off` sends every call anyway — for engine developers testing unreleased builds, not for normal sessions.
|
|
101
101
|
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to summer-engine will be documented here. Following [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Semantic Versioning](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [4.2.0] - 2026-10-16
|
|
6
|
+
|
|
7
|
+
4.1.0 was not published to npm. 4.2.0 is the first release with everything in it (the [4.1.0] section below), plus these changes.
|
|
8
|
+
|
|
9
|
+
Upgrades keep agents current: the installed Summer skills refresh themselves after an upgrade, every Summer project gets an AGENTS.md, the CLI path can let Claude Code and Codex run read-only commands without asking, and Gemini CLI installs come with the skills.
|
|
10
|
+
|
|
11
|
+
- **The CLI path can ask less.** `summer setup claude-code --cli --allow-rules --yes` lets Claude Code run read-only and dry-run `summer` commands without asking: a reviewed list of reads (`summer ops search`, `summer jobs wait`, `summer engine screenshot`, ...; `jobs wait` and `assets get` also save the files they name) and every spend only as a dry run (`summer assets generate-image --dry-run ...`, the flag right after the action). It is opt-in: the flag is in the command the person approves, setup prints every rule, and without `--yes` it writes nothing. The rules, for both `summer` and `npx -y summer-engine@latest`, go into `permissions.allow` in `~/.claude/settings.json` (`.claude/settings.local.json` with `--scope project`); nothing else in the file changes. `summer setup codex --cli --allow-rules --yes` writes the same as Summer's own Codex rules file, `~/.codex/rules/summer.rules`. `--remove-allow-rules` takes exactly these rules out again. Changes, publishing, prices, deletes, messages and `engine capture-gameplay` (it runs the project's own code) still ask. A call with `--dry-run` is now a dry run whatever its input says (`--no-dry-run` or `"dryRun": false` in `--input` no longer undo it).
|
|
12
|
+
- **Devin Desktop (formerly Windsurf): the MCP config moved** to `~/.config/devin/mcp_config.json` (`$XDG_CONFIG_HOME/devin`, Windows `%APPDATA%\devin`), per Devin's docs. `summer setup windsurf` writes it there and says when an earlier setup's entry is still in `~/.codeium/windsurf/mcp_config.json` (left as it is for older builds).
|
|
13
|
+
- **Gemini CLI extensions get the skills.** `gemini extensions install https://github.com/SummerEngine/summer` and the Gemini CLI gallery install a release's only asset, and each GitHub Release now carries one: `summer-gemini-extension.tar.gz`, the extension with `skills/<slug>/` for every bundled skill (Gemini reads skills only from that folder; the repository keeps them in `library/skills/`). A clone of the repository gave no skills.
|
|
14
|
+
- **A Claude plugin for Anthropic's plugin directory** in `plugins/claude/`: the same plugin from a folder of its own (292 files, under the directory's 512), with the server and every `summer-engine@latest` pinned to this version. `npm run generate:registry` writes it, `--check` fails when it drifts, and `claude plugin validate --strict plugins/claude` passes.
|
|
15
|
+
- **Every Summer project has an AGENTS.md.** `summer create` writes a short AGENTS.md, the one file Codex, Cursor, Copilot, Amp and other agents read in every session: this is a Summer Engine game in GDScript, how to work on it with the MCP tools or the `summer` CLI, where Summer's skills are, the five most useful commands, and that publishing needs the owner's approval. It also writes a CLAUDE.md that only holds `@AGENTS.md`, for Claude Code. `summer setup --yes` run inside a project adds both when they are missing (without `--yes` it says what it would add; `--no-project-files` and `--assets-only` leave the project alone). The project is the nearest folder with `project.godot` at or above the working directory, no higher than the git top level and never the home folder. An existing AGENTS.md or CLAUDE.md is never overwritten: setup adds one marked Summer block once and later updates only that block, in the file's own line endings. A CLAUDE.md that already imports AGENTS.md stays as it is, a CLAUDE.md that is a link to AGENTS.md (or the reverse) gets the AGENTS.md block once, a link to a missing file or out of the project is left alone, and a file setup cannot write is reported with the reason. The five commands come from the `summer-cli` skill, and a test runs every command both teach.
|
|
16
|
+
- **Upgrades refresh the installed skills.** The first `summer mcp` start (v4 surface) after an upgrade brings the Summer skills already installed on the computer to the new version, then says so once: in the session's instructions, so the agent can tell the person, and on stderr. Before, skills from 3.x stayed until someone ran `summer setup --force`. While they stayed, the local server kept the legacy toolset on, and agents kept calling 3.x tools; that undid about half of 4.0's smaller tool list. Now the legacy toolset is off from that first start; 3.x tool names still run through `summer_call`, and `--toolsets legacy` or `SUMMER_LEGACY_TOOLS=on` lists them again.
|
|
17
|
+
- Only Summer's own copies are replaced: real folders (not links) whose `resource.yaml` names that skill, in a skills folder with Summer's version marker. A skill from another pack with the same name, and a Summer skill someone changed after install, stay as they are, at this and every later release until `summer setup --force` (the version marker lists them); the notice names them. A pre-release never takes a release's skills back. Nothing is removed. New library skills are added only to a folder that holds nearly the whole library, so an assets-only install stays one.
|
|
18
|
+
- Each skill is copied beside the old one and swapped in with renames, under a lock per folder, and the version marker is written last. A killed start or a copy error leaves the old skill, and the next start finishes. A refresh error never stops `summer mcp`; it goes to the MCP log.
|
|
19
|
+
- Rule-file installs (Cline, Roo Code, old Cursor rules) are not refreshed; `summer doctor` still prints the command for them.
|
|
20
|
+
- **`summer_call` on the local server takes `name` as well as `op`.** Agents copied the `name` field that `summer_search` answers with and got an input error. When both are given and differ, it answers `invalid_input`.
|
|
21
|
+
|
|
22
|
+
## [4.1.0] - 2026-10-16
|
|
23
|
+
|
|
24
|
+
Not published to npm: these changes ship in 4.2.0.
|
|
25
|
+
|
|
26
|
+
Summer without MCP: any agent runs Summer from its shell with the `summer` CLI and the `summer-cli` skill. Every operation is found without a sign-in, search understands plain English, and Summer installs with Homebrew.
|
|
27
|
+
|
|
28
|
+
- **`--json` on every read command.** `summer ops describe <op> --json` failed with "unknown option '--json'"; it now prints the same answer as the other operation commands (`{ok, status, result: {operation}}`, warnings inside). `summer status`, `summer list templates|projects`, `summer skills list`, `summer skills info`, `summer memory show`, `summer memory path` and `summer config get` take `--json` too. A test lists every CLI command and fails when a read command has no `--json`. `summer tool` keeps printing JSON; its `--json` is still the old alias of `--args`.
|
|
29
|
+
- **`summer setup <agent> --cli`: Summer without MCP.** Installs the skills for the agent and writes no MCP entry and no Summer Games entry. The agent runs Summer as `summer <area> <action>` commands in its shell. `--no-mcp` is the same. With `--assets-only` it installs only the asset skills. Claude Code gets no slash commands (`/summer`, `/gameskill`, `/start` start work through the MCP tools; `summer skills install --no-commands` leaves them out too). An existing `summer-engine` entry from an earlier setup stays, and setup says so: a stdio or URL entry, and Claude Code's per-project ones. `--print`, `--profile`, `--local-dev` and `--channel` shape only the MCP entry, so `--cli` refuses them. It also refuses agents without a skills folder, Gemini CLI (its skills load only through its extension, which runs the MCP server) and Roo Code (its skills are rule files that tell it to use the MCP tools). When an agent's config lists no `summer-engine` and `--cli` can set the agent up, the skills refresh `summer doctor` recommends adds `--cli`, so it adds no MCP server.
|
|
30
|
+
- **New skill `summer-cli`** (preview): sign in, find an operation (`summer ops search`, `summer ops describe`), run it (`--input`, `--dry-run`, `--json`, `--idempotency-key`), long jobs (`--wait`, `summer jobs wait`), approvals, saving files (`--out`), the engine, and the next step for each error code. It checks `summer --version` first and uses `npx -y summer-engine@latest` when `summer` is missing or older than 4.0. A test dry-runs every command it teaches, offline. `using-summer` sends sessions without `summer_*` tools to it.
|
|
31
|
+
- **Each skill shows the command for every tool it names.** A skill that names an MCP tool or an operation ends with a generated "From a shell" table: `summer_play` is `summer engine play`, `assets.generate_image` is `summer assets generate-image`, a split 3.x tool lists each operation, a merged one keeps the input it fixes (`summer_list_my_assets` is `summer assets search --scope mine`), and a merged one that runs here runs as itself (`summer_get_agent_playbook` is `summer tool get-agent-playbook`). `npm run generate:registry` writes it from the operation catalog. `validate:library` fails when it is stale, and when a skill names a 4.0 tool whose operation the catalog does not have. Tests check that every command names an operation this package runs or the catalog knows, and run the rows with a fixed input that run here, offline. `.gitattributes` keeps Markdown LF, so the check also holds on Windows checkouts. MCP tool names do not change.
|
|
32
|
+
- **README: CLI only** (summer-engine 4.1.0 or newer), next to the hosted MCP block.
|
|
33
|
+
- `summer <area> <action> --max-characters <n>` on a local read (`summer docs read`, the engine reads) no longer fails with an unknown key: the CLI prints the whole answer and says so.
|
|
34
|
+
- Shorter descriptions for `summer-cli`, `summer-assets` and `concept-to-level`, so the installed skill descriptions leave room under the 12,000-character budget.
|
|
35
|
+
- **Every operation is found without a sign-in.** `summer ops search`, `summer ops describe` and `summer_search` list every cloud operation (`store.publish`, `pricing.set_base`, ...) signed out, from the hosted server's public catalog shipped in the package (`registry/operations/public-catalog.json`). A cloud operation found signed out says `(needs sign-in)` (`needsSignIn: true` in JSON) and runs after `summer login`. Signed in, the server's live rows replace the shipped ones. `ops describe` of a cloud operation answers from the shipped catalog when the server cannot. `npm run sync:catalog` refreshes the copy; `npm run sync:catalog -- --check` runs before each release, and a test fails when the copy and `legacy-names.json` disagree.
|
|
36
|
+
- **Search understands plain English.** "publish my game" finds `store.publish` first, "how did my game do" `analytics.summary`, "lower my price" `pricing.set_base`, "invite a teammate" `team.invite`, "take a screenshot" `engine.screenshot`, and "add multiplayer" the library search (the CLI prints the `summer docs search` command for it). Rare words weigh more and everyday verbs less, an operation whose title or tag the query says nearly word for word wins, and plain words reach the catalog's words (picture is image, music is audio). Local and cloud operations rank in one list, the same signed in or out. A test holds 35 real phrases.
|
|
37
|
+
- **Install with Homebrew:** `brew install summerengine/tap/summer` (the SummerEngine/homebrew-tap formula follows npm `latest` by itself, checked every hour). The README starts with the three ways to install: the hosted URL for chat apps, Homebrew and npm.
|
|
38
|
+
- `npm publish` no longer fails on a busy machine when it runs the tests again (`prepublishOnly`). Every test has a 20 s limit instead of 5 s, and the slow ones have their own: the first import of the built package (60 s), the template fetch timeout and the trajectory log rotation (30 s each), the `setup --cli` installs (120 s) and the app bundle export (60 s).
|
|
39
|
+
- **`content` is an area.** `summer content <action>` runs the content operations Summer's hosted server serves (`content.list_games`, `content.get_kit`, `content.list_references`, `content.search_library`, `content.save_piece`, `content.add_feedback`, ...). The 4.0.0 `marketing.*` content operations are renamed to them (`marketing.content_feed` is `content.list_references`, `marketing.get_brand_pack` is `content.get_kit`); `registry/operations/legacy-names.json` maps each old name to its new one.
|
|
40
|
+
- **Directory listings lead with "The game engine built for AI."** The MCP Registry entry (`server.json`) gets the Summer sun icon. The Codex plugin is named Summer Engine, with the short description "Make games with AI" (OpenAI allows 30 characters), a logo, a composer icon and a support link. The Cursor plugin is named Summer Engine and gets a logo. The Claude, Cursor, Codex, Factory and Gemini descriptions open with the product line. `glama.json` lets the maintainers claim the Glama listing. The README links support, privacy and terms.
|
|
41
|
+
|
|
5
42
|
## [4.0.0] - 2026-10-15
|
|
6
43
|
|
|
7
44
|
3.9.0 and 3.9.1 were not published to npm. 4.0.0 is the first release with everything in them (the [3.9.1] and [3.9.0] sections below), plus these changes.
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Summer: MCP server, CLI and skills
|
|
1
|
+
# Summer Engine: MCP server, CLI and skills
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
4
|
|
|
@@ -18,6 +18,14 @@
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
- **Chat apps** (Claude, ChatGPT, Cursor...): add `https://mcp.summerengine.com/mcp`. Nothing to install.
|
|
24
|
+
- **Homebrew:** `brew install summerengine/tap/summer`
|
|
25
|
+
- **npm** (Node 20+): `npm install -g summer-engine`
|
|
26
|
+
|
|
27
|
+
**CLI only** (summer-engine 4.2.0 or newer), no MCP server: `summer setup --cli`. `summer ops search "publish my game"` finds any operation, signed in or not.
|
|
28
|
+
|
|
21
29
|
## Connect
|
|
22
30
|
|
|
23
31
|
**Cloud work: `https://mcp.summerengine.com/mcp`.** Nothing to install. Add the URL to your agent and sign in to your Summer account once. Your agent then makes assets (images, 3D models, motion, sound effects, music, voices, video), searches and downloads your Summer asset library, plans games, and runs your projects, the store, publishing, prices, analytics, A/B tests, your team and Studio. It has no engine tools: for those, use the local server below.
|
|
@@ -28,11 +36,13 @@
|
|
|
28
36
|
| Codex | `codex mcp add summer-cloud --url https://mcp.summerengine.com/mcp`, then `codex mcp login summer-cloud` |
|
|
29
37
|
| Cursor | [Add to Cursor](https://cursor.com/install-mcp?name=summer-cloud&config=eyJ1cmwiOiJodHRwczovL21jcC5zdW1tZXJlbmdpbmUuY29tL21jcCJ9), or add `"summer-cloud": {"url": "https://mcp.summerengine.com/mcp"}` under `mcpServers` in `~/.cursor/mcp.json` |
|
|
30
38
|
| VS Code | [Add to VS Code](https://vscode.dev/redirect/mcp/install?name=summer-cloud&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.summerengine.com%2Fmcp%22%7D), or `code --add-mcp '{"name":"summer-cloud","type":"http","url":"https://mcp.summerengine.com/mcp"}'` |
|
|
31
|
-
| Devin Desktop (formerly Windsurf) | add `"summer-cloud": {"serverUrl": "https://mcp.summerengine.com/mcp"}` under `mcpServers` in `~/.
|
|
39
|
+
| Devin Desktop (formerly Windsurf) | add `"summer-cloud": {"serverUrl": "https://mcp.summerengine.com/mcp"}` under `mcpServers` in `~/.config/devin/mcp_config.json` (Windows `%APPDATA%\devin\mcp_config.json`) |
|
|
32
40
|
| Claude Desktop, claude.ai | Settings > Connectors > Add custom connector, then paste the URL |
|
|
33
41
|
|
|
34
42
|
**Engine work: `npx -y summer-engine@latest setup <agent> --yes`** (needs Node 20+). It writes the local server (`summer mcp`) into your agent's config with the skills. The local server drives the Summer Engine app on your machine: build scenes, write scripts, play the game, take screenshots, read errors. After `summer login` it also runs every cloud operation, so your agent needs one server. Or paste the prompt in [Get started](#get-started-one-prompt) and your agent does every step.
|
|
35
43
|
|
|
44
|
+
**CLI only (summer-engine 4.2.0 or newer): `npx -y summer-engine@latest setup <agent> --cli --yes`.** No MCP server: your agent runs Summer as commands in its shell. Setup installs the skills for your agent, with `summer-cli`, the guide to the commands, and writes no MCP entry. Your agent signs you in with `summer login`, finds an operation with `summer ops search "<what you want>"` and runs it as `summer <area> <action> --<field> <value>`, with `--dry-run`, `--wait` and `--json`. Engine commands (`summer engine …`) drive the Summer Engine app on your machine. Each skill ends with a table of the command for every tool it names. Add `--assets-only` for only the asset skills. `--no-mcp` is the same as `--cli`.
|
|
45
|
+
|
|
36
46
|
**ChatGPT and Claude's connector directory** use two reviewed store versions with a fixed tool list: `https://mcp.summerengine.com/chatgpt` (games, assets and generation; no publishing, no billing links) and `https://mcp.summerengine.com/directory` (the store, publishing and Grow reads; no image, 3D, audio or video generation). They keep their 3.x tool names and have no `summer_search` or `summer_call`. For everything else, use `/mcp`.
|
|
37
47
|
|
|
38
48
|
## What this is
|
|
@@ -303,9 +313,9 @@ Every capability is an operation named `<area>.<action>`: `assets.generate_image
|
|
|
303
313
|
- **One answer shape**: `done` with a `result`, `running` with a job (`summer_jobs_wait` waits up to 50 seconds per call), `needs_approval` with a link for you, `dry_run` with a preview, or an error with a `code`, a `message` and exactly one `next` step.
|
|
304
314
|
- **Safe to try**: every change takes `dryRun: true` (it changes nothing and spends nothing; a spend shows your own credit estimate) and an `idempotencyKey`, so a retry never runs twice.
|
|
305
315
|
- **Error codes**: `invalid_input`, `not_signed_in`, `forbidden`, `not_found`, `conflict`, `idempotency_conflict`, `in_progress`, `rate_limited`, `no_credits`, `over_limit`, `engine_not_running`, `engine_lacks_op`, `unsupported`, `not_in_profile`, `moved`, `outcome_unknown`, `unavailable`, `internal`.
|
|
306
|
-
- **3.x names keep working** for all of 4.x: `summer_call` accepts them on every server, `summer mcp --toolsets legacy` lists them on the local server, and the local server lists them by itself while your installed skills are older than 4.0. The map from old names to operations is [`registry/operations/legacy-names.json`](registry/operations/legacy-names.json).
|
|
316
|
+
- **3.x names keep working** for all of 4.x: `summer_call` accepts them on every server, `summer mcp --toolsets legacy` lists them on the local server, and the local server lists them by itself while your installed skills are older than 4.0. Its first start after an upgrade refreshes the Summer skills you installed, so after an upgrade the legacy list stays off unless you ask for it. The map from old names to operations is [`registry/operations/legacy-names.json`](registry/operations/legacy-names.json).
|
|
307
317
|
|
|
308
|
-
The same operations run from a shell: `summer <area> <action> --<field> <value>` (for example `summer assets generate-image --prompt "a cozy pixel-art tavern" --aspect-ratio 16:9`), with `--dry-run`, `--wait` (follows a job or an approval to the end) and `--json` (prints the answer only; exit code 0 for any `ok` answer, 1 for an error). `summer whoami` shows who is signed in. `summer ops search <words>` and `summer ops describe <op>` find an operation and its input.
|
|
318
|
+
The same operations run from a shell: `summer <area> <action> --<field> <value>` (for example `summer assets generate-image --prompt "a cozy pixel-art tavern" --aspect-ratio 16:9`), with `--dry-run`, `--wait` (follows a job or an approval to the end) and `--json` (prints the answer only; exit code 0 for any `ok` answer, 1 for an error). `summer whoami` shows who is signed in. `summer ops search <words>` and `summer ops describe <op>` find an operation and its input. Every command that reads something takes `--json`.
|
|
309
319
|
|
|
310
320
|
## What's in this repo
|
|
311
321
|
|
|
@@ -430,18 +440,18 @@ Publishing to summer.games, multiplayer hosting, matchmaking and Grow are live.
|
|
|
430
440
|
| `summer login --store` | Only the store sign-in (`store.upload_file` and the cloud operations: plans, the store, publishing and Grow). |
|
|
431
441
|
| `summer whoami` | The signed-in account, its plan and credits. |
|
|
432
442
|
| `summer <area> <action> [--<field> <value> …] [--input '<json>'] [--dry-run] [--idempotency-key <k>] [--wait] [--json]` | Run any operation from the shell, for example `summer assets generate-image --prompt "…"` or `summer store status --game-id <id>`. |
|
|
433
|
-
| `summer ops search <words…>` / `summer ops describe <op>` | Find the operation for a job, or print one operation's input, effect and approval. |
|
|
443
|
+
| `summer ops search <words…>` / `summer ops describe <op>` | Find the operation for a job, or print one operation's input, effect and approval. Works signed out: a cloud operation shows `(needs sign-in)`. |
|
|
434
444
|
| `summer logout` | Clear auth tokens. |
|
|
435
445
|
| `summer config [get\|set\|unset]` | Read or update the shared non-secret `~/.summer/config.json`. |
|
|
436
|
-
| `summer status` | Engine state, port, auth. |
|
|
446
|
+
| `summer status [--json]` | Engine state, port, auth. |
|
|
437
447
|
| `summer doctor` | Diagnose Node, login, engine, project memory, MCP. |
|
|
438
448
|
| `summer plan <goal>` | Route a game-building goal into skills, MCP tools, gates, and verification. |
|
|
439
449
|
| `summer memory` | Inspect project memory in `.summer`. |
|
|
440
450
|
| `summer memory show <file>` | Print a project memory Markdown file. |
|
|
441
451
|
| `summer run [path] [--background\|--focus] [--bin <executable>]` | Launch the engine. Agents (no TTY) launch in the background by default so the window never steals focus; `--focus` brings it to the front. `--bin` (env `SUMMER_BIN`) launches a build that is not installed. |
|
|
442
452
|
| `summer open <path \| target> [--print] [--list]` | A project directory opens in the running engine. Anything else is a navigation target — `billing`, `my-games`, `mcp-guide`, `scene`, `inspector`, an intent phrase, a `res://` path — opened in the browser or sent to the editor; `--print` resolves without opening. |
|
|
443
|
-
| `summer create <template> [name]` | Scaffold a project from a pinned template. |
|
|
444
|
-
| `summer list templates` / `projects` | Browse. |
|
|
453
|
+
| `summer create <template> [name]` | Scaffold a project from a pinned template, with an AGENTS.md for your agent (and a CLAUDE.md that imports it). |
|
|
454
|
+
| `summer list templates` / `projects` | Browse. `--json` for scripts. |
|
|
445
455
|
| `summer events [--follow] [--kinds <csv>] [--since <seq>] [--json]` | The engine events channel (engine 0.5.66+): newest events, or stream them live. |
|
|
446
456
|
| `summer debug [issue…]` | Support-ready Markdown debug report. |
|
|
447
457
|
| `summer skills list` | Show all skills (`--by-domain` groups them; the same grouping is in [`library/skills/README.md`](library/skills/README.md)). |
|
|
@@ -450,7 +460,7 @@ Publishing to summer.games, multiplayer hosting, matchmaking and Grow are live.
|
|
|
450
460
|
| `summer tool <name> --args '<json>'` | Run any Summer tool from the shell — the same implementation the MCP tool uses. `summer tool --list` prints them all. |
|
|
451
461
|
| `summer mcp [--project <path> \| --instance <id>] [--profile <p>] [--toolsets <list>] [--surface v4\|v3]` | Start MCP; normally auto-binds from the agent's project directory. `--surface` (env `SUMMER_SURFACE`): `v4` (the default: engine tools, `summer_docs_search`, `summer_docs_read`, `summer_search` and `summer_call`) or `v3` (the 3.x tools). `--profile` (env `SUMMER_PROFILE`): `full` (every tool, the default), `engine` (engine, generation and store tools; fits the per-request tool cap of clients such as VS Code Copilot, which is 128), `assets` (generation and asset tools, no engine tools). `--toolsets` (env `SUMMER_TOOLSETS`) adds toolsets by name: `core`, `assets`, `tools`, `engine`, `ui`, `ship`, `uploads`, `apps`, `board`, `grow`, `studio`, `cloud`, `other`, or `all`. `--toolsets legacy` also lists every 3.x tool name. |
|
|
452
462
|
| `summer mcp setup <agent>` | Deprecated alias of `summer setup <agent>`. |
|
|
453
|
-
| `summer setup <agent> [--yes] [--force] [--recommended] [--stable-only] [--no-games] [--profile <p>] [--assets-only]` | One shot: MCP config + all skills, preview included (`--recommended` for the subset, `--stable-only` to skip preview) + doctor. Idempotent. `--profile` writes a tool profile into the agent's MCP entry (`SUMMER_PROFILE`); `vscode-copilot` gets `engine` unless you pass `--profile full`, every other agent gets every tool. `--assets-only` is the assets path: the `assets` profile, only the asset skills, no Summer Games. For most agents (not Claude Desktop, Visual Studio, Qoder, Rovo Dev, LM Studio or the legacy targets) it also adds `summer-games` (`https://mcp.summer.games/mcp`: friends, parties and messages as you) unless the same URL is already listed; you sign in once through summer.games. `--no-games` skips it. |
|
|
463
|
+
| `summer setup <agent> [--yes] [--force] [--recommended] [--stable-only] [--no-games] [--profile <p>] [--assets-only] [--cli]` | One shot: MCP config + all skills, preview included (`--recommended` for the subset, `--stable-only` to skip preview) + doctor. Idempotent. `--cli` (or `--no-mcp`, 4.2.0 or newer) installs the skills and no MCP server: the agent runs `summer` commands in its shell. Inside a Summer project it also adds the Summer instructions to the project's AGENTS.md and CLAUDE.md; `--no-project-files` skips that. `--profile` writes a tool profile into the agent's MCP entry (`SUMMER_PROFILE`); `vscode-copilot` gets `engine` unless you pass `--profile full`, every other agent gets every tool. `--assets-only` is the assets path: the `assets` profile, only the asset skills, no Summer Games. For most agents (not Claude Desktop, Visual Studio, Qoder, Rovo Dev, LM Studio or the legacy targets) it also adds `summer-games` (`https://mcp.summer.games/mcp`: friends, parties and messages as you) unless the same URL is already listed; you sign in once through summer.games. `--no-games` skips it. |
|
|
454
464
|
|
|
455
465
|
Agents: `claude-code`, `claude-desktop`, `codex`, `cursor`, `windsurf`, `antigravity`, `cline`, `cline-cli`, `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`. Legacy (still accepted, warn on use): `gemini`, `roo-code`. Aliases: `devin`/`devin-desktop` → `windsurf`, `agy` → `antigravity`, `droid` → `factory`, `copilot` → `github-copilot`, `vscode` → `vscode-copilot`, `kilo` → `kilo-code`, `qwen` → `qwen-code`, `kimi` → `kimi-code`. Scopes: `--scope user` (default), `--scope project`.
|
|
456
466
|
|
|
@@ -484,3 +494,4 @@ Some process skills (brainstorming, writing-plans, writing-skills, investigating
|
|
|
484
494
|
- [Download Summer Engine](https://summerengine.com/download)
|
|
485
495
|
- [Documentation](https://docs.summerengine.com)
|
|
486
496
|
- [Issues](https://github.com/summerengine/summer/issues)
|
|
497
|
+
- [Support](https://summer.games/support) · [Privacy policy](https://www.summerengine.com/privacy) · [Terms](https://www.summerengine.com/terms)
|
|
@@ -24,13 +24,14 @@ configCommand
|
|
|
24
24
|
.command("get")
|
|
25
25
|
.description("Read one configuration value")
|
|
26
26
|
.argument("<key>", `One of: ${CONFIG_KEYS.join(", ")}`)
|
|
27
|
-
.
|
|
27
|
+
.option("--json", "Print the key and value as JSON")
|
|
28
|
+
.action(async (rawKey, opts) => {
|
|
28
29
|
const key = requireKey(rawKey);
|
|
29
30
|
const value = getConfigValue(await readSummerConfig(), key);
|
|
30
31
|
if (value === undefined) {
|
|
31
32
|
throw new Error(`${key} is not set. Recovery: run "summer config set ${key} <value>", or rely on the documented default.`);
|
|
32
33
|
}
|
|
33
|
-
console.log(value);
|
|
34
|
+
console.log(opts.json ? JSON.stringify({ key, value }) : value);
|
|
34
35
|
});
|
|
35
36
|
configCommand
|
|
36
37
|
.command("set")
|
|
@@ -6,6 +6,7 @@ import { PACKAGE_ROOT } from "../../core/package-root.js";
|
|
|
6
6
|
import { SUMMER_ENGINE_COMPATIBILITY } from "../../core/summer-compatibility.js";
|
|
7
7
|
import { getTemplateRegistry, materializePinnedTemplate, resolveTemplate, TemplateDigestMismatchError, } from "../../core/templates.js";
|
|
8
8
|
import { PROJECT_MANIFEST_RELPATH, writeProjectManifest } from "../../project-memory/project-manifest.js";
|
|
9
|
+
import { writeAgentInstructions } from "../../project-memory/agent-instructions.js";
|
|
9
10
|
import { TOOLKIT_VERSION as toolkitVersion } from "../../core/version.js";
|
|
10
11
|
/** Summer Engine's version when it is reachable right now, else undefined —
|
|
11
12
|
* the manifest then omits engine_version rather than guessing. */
|
|
@@ -48,9 +49,17 @@ export function scaffoldAutopilot(projectDir) {
|
|
|
48
49
|
/** What the scaffold's first run actually does — the "Next steps" line must not
|
|
49
50
|
* promise a verify when the first thing run.sh does is the one-off asset import. */
|
|
50
51
|
export const AUTOPILOT_NEXT_STEP_HINT = "first run imports assets once, then verifies the game boots; no editor needed";
|
|
51
|
-
function printNextSteps(fullPath, dirName, scaffolded) {
|
|
52
|
+
function printNextSteps(fullPath, dirName, scaffolded, instructions) {
|
|
52
53
|
console.log(`\nProject created at ${fullPath}`);
|
|
53
54
|
console.log(`Recorded template pin in ${join(dirName, PROJECT_MANIFEST_RELPATH)}`);
|
|
55
|
+
// AGENTS.md (read by most agents) and CLAUDE.md (`@AGENTS.md`): each file says what happened to it.
|
|
56
|
+
const changed = instructions.filter((file) => file.action === "created" || file.action === "added" || file.action === "updated").map((file) => file.file);
|
|
57
|
+
if (changed.length)
|
|
58
|
+
console.log(`Wrote the Summer instructions for your agent in ${changed.join(" and ")}`);
|
|
59
|
+
for (const file of instructions) {
|
|
60
|
+
if (file.reason)
|
|
61
|
+
console.log(`${file.file} ${file.action === "skipped" ? "not written" : "left as it is"}: ${file.reason}`);
|
|
62
|
+
}
|
|
54
63
|
console.log("\nNext steps:");
|
|
55
64
|
console.log(` summer run ${dirName}`);
|
|
56
65
|
if (scaffolded) {
|
|
@@ -123,7 +132,7 @@ export const createCommand = new Command("create")
|
|
|
123
132
|
toolkit_version: toolkitVersion,
|
|
124
133
|
engine_version: await detectEngineVersion(),
|
|
125
134
|
});
|
|
126
|
-
printNextSteps(fullPath, dirName, scaffolded);
|
|
135
|
+
printNextSteps(fullPath, dirName, scaffolded, writeAgentInstructions(fullPath));
|
|
127
136
|
return;
|
|
128
137
|
}
|
|
129
138
|
const pin = entry.pin;
|
|
@@ -152,7 +161,7 @@ export const createCommand = new Command("create")
|
|
|
152
161
|
engine_version: await detectEngineVersion(),
|
|
153
162
|
});
|
|
154
163
|
console.log(`Source: ${pin.repo} @ ${materialized.commit.slice(0, 12)} (tree digest verified)`);
|
|
155
|
-
printNextSteps(fullPath, dirName, scaffolded);
|
|
164
|
+
printNextSteps(fullPath, dirName, scaffolded, writeAgentInstructions(fullPath));
|
|
156
165
|
});
|
|
157
166
|
/**
|
|
158
167
|
* project.godot uses C-style double-quoted strings; a project name containing
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { type TemplateEntry } from "../../core/templates.js";
|
|
2
3
|
export declare const listCommand: Command;
|
|
4
|
+
/** `summer list templates --json`: what the text lists, one object per template. */
|
|
5
|
+
export declare function templatesJson(): Array<Pick<TemplateEntry, "id" | "slug" | "version" | "summary" | "status" | "builtin" | "systems" | "do_not_use_when">>;
|
|
6
|
+
/** Subdirectories of `dir` that hold a project.godot. */
|
|
7
|
+
export declare function findProjects(dir: string): string[];
|
|
@@ -5,18 +5,44 @@ import { getTemplateRegistry } from "../../core/templates.js";
|
|
|
5
5
|
export const listCommand = new Command("list")
|
|
6
6
|
.description("List available templates or local projects")
|
|
7
7
|
.argument("<what>", "'templates' or 'projects'")
|
|
8
|
-
.
|
|
8
|
+
.option("--json", "Print the list as JSON")
|
|
9
|
+
.action(async (what, opts) => {
|
|
9
10
|
if (what === "templates") {
|
|
10
|
-
|
|
11
|
+
if (opts.json)
|
|
12
|
+
console.log(JSON.stringify({ templates: templatesJson() }));
|
|
13
|
+
else
|
|
14
|
+
listTemplates();
|
|
11
15
|
}
|
|
12
16
|
else if (what === "projects") {
|
|
13
|
-
|
|
17
|
+
if (opts.json)
|
|
18
|
+
console.log(JSON.stringify({ directory: process.cwd(), projects: findProjects(process.cwd()) }));
|
|
19
|
+
else
|
|
20
|
+
listProjects();
|
|
14
21
|
}
|
|
15
22
|
else {
|
|
16
23
|
console.error(`Unknown: '${what}'. Use 'templates' or 'projects'.`);
|
|
17
24
|
process.exit(1);
|
|
18
25
|
}
|
|
19
26
|
});
|
|
27
|
+
/** `summer list templates --json`: what the text lists, one object per template. */
|
|
28
|
+
export function templatesJson() {
|
|
29
|
+
return getTemplateRegistry().map(({ id, slug, version, summary, status, builtin, systems, do_not_use_when }) => ({
|
|
30
|
+
id,
|
|
31
|
+
slug,
|
|
32
|
+
version,
|
|
33
|
+
summary,
|
|
34
|
+
status,
|
|
35
|
+
builtin,
|
|
36
|
+
systems,
|
|
37
|
+
do_not_use_when,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
/** Subdirectories of `dir` that hold a project.godot. */
|
|
41
|
+
export function findProjects(dir) {
|
|
42
|
+
return readdirSync(dir, { withFileTypes: true })
|
|
43
|
+
.filter((entry) => entry.isDirectory() && existsSync(join(dir, entry.name, "project.godot")))
|
|
44
|
+
.map((entry) => entry.name);
|
|
45
|
+
}
|
|
20
46
|
/**
|
|
21
47
|
* Registry-only listing (CONTRACT.md §7): every template shown here resolves
|
|
22
48
|
* through its library pin manifest. There is no live GitHub-org listing —
|
|
@@ -49,16 +75,7 @@ function listTemplates() {
|
|
|
49
75
|
}
|
|
50
76
|
function listProjects() {
|
|
51
77
|
const cwd = process.cwd();
|
|
52
|
-
const
|
|
53
|
-
const projects = [];
|
|
54
|
-
for (const entry of entries) {
|
|
55
|
-
if (entry.isDirectory()) {
|
|
56
|
-
const projectFile = join(cwd, entry.name, "project.godot");
|
|
57
|
-
if (existsSync(projectFile)) {
|
|
58
|
-
projects.push(entry.name);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
78
|
+
const projects = findProjects(cwd);
|
|
62
79
|
if (projects.length === 0) {
|
|
63
80
|
console.log("No Summer Engine projects found in current directory.");
|
|
64
81
|
console.log("\nCreate one: summer create 3d-basic my-game");
|
|
@@ -36,6 +36,7 @@ memoryCommand
|
|
|
36
36
|
.command("show <file>")
|
|
37
37
|
.description("Print a .summer memory Markdown file")
|
|
38
38
|
.option("--project <path>", "Project directory to inspect")
|
|
39
|
+
.option("--json", "Print the file path and content as JSON")
|
|
39
40
|
.action(async (file, opts) => {
|
|
40
41
|
const resolvedProject = await resolveMemoryProject(opts.project);
|
|
41
42
|
if (!resolvedProject.projectPath) {
|
|
@@ -44,12 +45,14 @@ memoryCommand
|
|
|
44
45
|
process.exit(1);
|
|
45
46
|
}
|
|
46
47
|
const filePath = resolveMemoryFilePath(resolvedProject.projectPath, file);
|
|
47
|
-
|
|
48
|
+
const content = readFileSync(filePath, "utf-8");
|
|
49
|
+
console.log(opts.json ? JSON.stringify({ path: filePath, content }) : content);
|
|
48
50
|
});
|
|
49
51
|
memoryCommand
|
|
50
52
|
.command("path")
|
|
51
53
|
.description("Print the .summer directory path for the current project")
|
|
52
54
|
.option("--project <path>", "Project directory to inspect")
|
|
55
|
+
.option("--json", "Print the path as JSON")
|
|
53
56
|
.action(async (opts) => {
|
|
54
57
|
const resolvedProject = await resolveMemoryProject(opts.project);
|
|
55
58
|
if (!resolvedProject.projectPath) {
|
|
@@ -57,7 +60,8 @@ memoryCommand
|
|
|
57
60
|
console.error("Run from a project directory, pass --project <path>, or start Summer Engine.");
|
|
58
61
|
process.exit(1);
|
|
59
62
|
}
|
|
60
|
-
|
|
63
|
+
const path = join(resolvedProject.projectPath, ".summer");
|
|
64
|
+
console.log(opts.json ? JSON.stringify({ path }) : path);
|
|
61
65
|
});
|
|
62
66
|
async function resolveMemoryProject(projectOption) {
|
|
63
67
|
if (projectOption) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { CLI_AREAS } from "../../core/ops/areas.js";
|
|
2
3
|
import { type HostedCall } from "../../core/ops/cloud.js";
|
|
3
4
|
import { type Answer } from "../../core/ops/contract.js";
|
|
4
5
|
import { FileSaver } from "../../core/ops/save-files.js";
|
|
@@ -14,8 +15,7 @@ import { dispatchTool } from "../../core/capabilities/tool-dispatch.js";
|
|
|
14
15
|
* `summer tool` runs); cloud operations run on the hosted Summer server
|
|
15
16
|
* through its summer_call, with the person's sign-in.
|
|
16
17
|
*/
|
|
17
|
-
|
|
18
|
-
export declare const CLI_AREAS: readonly ["team", "profile", "docs", "assets", "makers", "jobs", "projects", "plans", "games", "store", "jams", "pricing", "analytics", "experiments", "marketing", "players", "economy", "inbox", "apps", "studio", "chats", "stories", "plugins", "engine", "account"];
|
|
18
|
+
export { CLI_AREAS };
|
|
19
19
|
type JsonSchema = {
|
|
20
20
|
type?: string | string[];
|
|
21
21
|
properties?: Record<string, JsonSchema>;
|
|
@@ -43,5 +43,22 @@ export declare const defaultOpsCliDeps: OpsCliDeps;
|
|
|
43
43
|
export declare function formatAnswer(answer: Answer, out?: string): string;
|
|
44
44
|
/** Run one operation from the command line and print its answer; returns the exit code. */
|
|
45
45
|
export declare function runOpFromCli(op: string, argv: readonly string[], deps?: OpsCliDeps): Promise<number>;
|
|
46
|
+
/**
|
|
47
|
+
* `summer ops search <words...>`: every operation, local and cloud, signed in
|
|
48
|
+
* or not; a cloud one that needs a sign-in says so. A how-to (docs.search
|
|
49
|
+
* first) points at the library.
|
|
50
|
+
*/
|
|
51
|
+
export declare function searchFromCli(query: string, options: {
|
|
52
|
+
area?: string;
|
|
53
|
+
limit: number;
|
|
54
|
+
json: boolean;
|
|
55
|
+
}, deps?: OpsCliDeps): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* `summer ops describe <op>`: a local operation from this package; a cloud
|
|
58
|
+
* one from Summer's server, or from the shipped catalog when the server
|
|
59
|
+
* cannot answer (signed out, offline).
|
|
60
|
+
*/
|
|
61
|
+
export declare function describeFromCli(op: string, deps?: OpsCliDeps, options?: {
|
|
62
|
+
json?: boolean;
|
|
63
|
+
}): Promise<number>;
|
|
46
64
|
export declare function opsCliCommands(): Command[];
|
|
47
|
-
export {};
|