From 79013caa49eb9ac11bdd3ab7c918c5a824d7d194 Mon Sep 17 00:00:00 2001 From: frozaken Date: Wed, 28 Oct 2026 15:58:15 +0100 Subject: [PATCH] Release 4.9.1: export and upload games without a server for every Summer app summer.bundle.v2 exports without a server may omit config/summer.build.json (summer-platform #3385); readSummerBundle no longer refuses them, and a hosted bundle without it is still refused. summer_publish_build declares a hostless bundle's platforms that Summer has an app for (android, ios, macos, web, windows; gameplatforms.ClientTargets) instead of refusing macOS and Windows, and summer_export_game drops its phones-only warning. The export tool description, skills and MCP tools reference say the same. Bumps package.json, package-lock.json and the generated manifests to 4.9.1. Co-Authored-By: Claude Opus 5.5 (1M context) --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- .cursor-plugin/plugin.json | 2 +- .factory-plugin/plugin.json | 2 +- CHANGELOG.md | 8 +++ gemini-extension.json | 2 +- .../mcp-tools-reference.md | 2 +- library/skills/export-and-ship/SKILL.md | 2 +- library/skills/launch-ready/SKILL.md | 7 +-- library/skills/release-checklist/SKILL.md | 4 +- library/skills/release-readiness/SKILL.md | 2 +- library/tools/export-game/GUIDE.md | 2 +- package-lock.json | 4 +- package.json | 2 +- plugins/claude/.claude-plugin/plugin.json | 4 +- plugins/claude/commands/start.md | 14 ++--- plugins/claude/skills/3d-lighting/SKILL.md | 2 +- plugins/claude/skills/adaptive-music/SKILL.md | 2 +- .../claude/skills/agent-playtesting/SKILL.md | 2 +- plugins/claude/skills/ambient-bed/SKILL.md | 2 +- plugins/claude/skills/animated-loop/SKILL.md | 2 +- plugins/claude/skills/animation-tree/SKILL.md | 2 +- plugins/claude/skills/art-direction/SKILL.md | 2 +- plugins/claude/skills/asset-strategy/SKILL.md | 2 +- .../claude/skills/audio-direction/SKILL.md | 2 +- .../skills/auto-fire-targeting/SKILL.md | 2 +- .../claude/skills/brainstorm-game/SKILL.md | 2 +- .../claude/skills/browse-templates/SKILL.md | 2 +- plugins/claude/skills/camera-rigs/SKILL.md | 2 +- .../character-animation-wiring/SKILL.md | 2 +- .../claude/skills/character-model/SKILL.md | 2 +- .../claude/skills/character-movement/SKILL.md | 2 +- .../claude/skills/character-portrait/SKILL.md | 2 +- .../claude/skills/cinematic-cutscene/SKILL.md | 2 +- plugins/claude/skills/combat-basics/SKILL.md | 2 +- .../compatibility-renderer-traps/SKILL.md | 2 +- plugins/claude/skills/concept-art/SKILL.md | 2 +- .../claude/skills/concept-to-level/SKILL.md | 2 +- .../claude/skills/create-asset-sheet/SKILL.md | 2 +- plugins/claude/skills/debug/SKILL.md | 2 +- .../skills/debugging-game-feel/SKILL.md | 2 +- plugins/claude/skills/design-level/SKILL.md | 2 +- .../claude/skills/design-mechanic/SKILL.md | 2 +- plugins/claude/skills/design-npc/SKILL.md | 2 +- .../diagnosing-perf-regressions/SKILL.md | 2 +- .../skills/driving-the-editor-ui/SKILL.md | 2 +- .../claude/skills/environment-kit/SKILL.md | 2 +- .../claude/skills/export-and-ship/SKILL.md | 4 +- .../claude/skills/fabricating-assets/SKILL.md | 2 +- .../claude/skills/facial-and-lipsync/SKILL.md | 2 +- plugins/claude/skills/fps-controller/SKILL.md | 2 +- plugins/claude/skills/game-feel/SKILL.md | 2 +- plugins/claude/skills/gameskill/SKILL.md | 2 +- .../claude/skills/gdscript-patterns/SKILL.md | 2 +- .../claude/skills/generate-motion/SKILL.md | 2 +- plugins/claude/skills/grow-analytics/SKILL.md | 2 +- .../claude/skills/headless-scripting/SKILL.md | 2 +- .../claude/skills/in-game-purchases/SKILL.md | 2 +- .../skills/instantiate-asset-pack/SKILL.md | 2 +- plugins/claude/skills/make-content/SKILL.md | 2 +- plugins/claude/skills/make-game/SKILL.md | 2 +- .../skills/multiplayer-movement/SKILL.md | 2 +- .../skills/multiplayer-project/SKILL.md | 2 +- .../skills/multiplayer-publish/SKILL.md | 2 +- .../claude/skills/multiplayer-state/SKILL.md | 2 +- .../skills/multiplayer-testing/SKILL.md | 2 +- plugins/claude/skills/multiplayer/SKILL.md | 2 +- plugins/claude/skills/music-track/SKILL.md | 2 +- .../claude/skills/navigate-summer/SKILL.md | 2 +- plugins/claude/skills/new-project/SKILL.md | 2 +- plugins/claude/skills/organic-model/SKILL.md | 2 +- plugins/claude/skills/pixel-art/SKILL.md | 2 +- plugins/claude/skills/play/SKILL.md | 2 +- .../skills/playtesting-a-feature/SKILL.md | 2 +- .../skills/procedural-animation/SKILL.md | 2 +- plugins/claude/skills/prop-model/SKILL.md | 2 +- .../claude/skills/publish-your-game/SKILL.md | 2 +- .../claude/skills/release-checklist/SKILL.md | 6 +-- .../claude/skills/release-readiness/SKILL.md | 4 +- plugins/claude/skills/remote-deploy/SKILL.md | 2 +- plugins/claude/skills/retarget/SKILL.md | 2 +- .../skills/running-in-the-cloud/SKILL.md | 2 +- plugins/claude/skills/save-load/SKILL.md | 2 +- .../claude/skills/scene-composition/SKILL.md | 2 +- .../skills/scene-hierarchy-design/SKILL.md | 2 +- .../claude/skills/scene-scripting/SKILL.md | 2 +- plugins/claude/skills/scene-to-level/SKILL.md | 2 +- .../claude/skills/skybox-panorama/SKILL.md | 2 +- plugins/claude/skills/sound-effect/SKILL.md | 2 +- .../claude/skills/spatial-placement/SKILL.md | 2 +- plugins/claude/skills/sprite-sheet/SKILL.md | 2 +- plugins/claude/skills/store-art/SKILL.md | 2 +- plugins/claude/skills/store-listing/SKILL.md | 2 +- .../claude/skills/summer-analytics/SKILL.md | 2 +- plugins/claude/skills/summer-api/SKILL.md | 2 +- plugins/claude/skills/summer-apps/SKILL.md | 2 +- plugins/claude/skills/summer-assets/SKILL.md | 4 +- plugins/claude/skills/summer-board/SKILL.md | 2 +- plugins/claude/skills/summer-cli/SKILL.md | 2 +- plugins/claude/skills/summer-friends/SKILL.md | 2 +- .../skills/summer-leaderboards/SKILL.md | 2 +- .../skills/summer-match-results/SKILL.md | 2 +- .../claude/skills/summer-matchmaking/SKILL.md | 2 +- plugins/claude/skills/summer-parties/SKILL.md | 2 +- .../claude/skills/summer-player-data/SKILL.md | 2 +- plugins/claude/skills/summer-router/SKILL.md | 2 +- plugins/claude/skills/summer-store/SKILL.md | 2 +- .../claude/skills/summer-world-chat/SKILL.md | 2 +- .../claude/skills/summer-world-saves/SKILL.md | 2 +- plugins/claude/skills/text-to-motion/SKILL.md | 2 +- .../claude/skills/tileable-texture/SKILL.md | 2 +- plugins/claude/skills/trailer-shot/SKILL.md | 2 +- .../claude/skills/tune-performance/SKILL.md | 2 +- plugins/claude/skills/ui-basics/SKILL.md | 2 +- plugins/claude/skills/ui-graphics/SKILL.md | 2 +- .../claude/skills/use-widget-asset/SKILL.md | 2 +- plugins/claude/skills/using-summer/SKILL.md | 6 +-- plugins/claude/skills/vehicle-model/SKILL.md | 2 +- .../claude/skills/verifying-scenes/SKILL.md | 2 +- plugins/claude/skills/vfx-dissolve/SKILL.md | 2 +- plugins/claude/skills/vfx-fire/SKILL.md | 2 +- plugins/claude/skills/vfx-hit-spark/SKILL.md | 2 +- plugins/claude/skills/vfx-lightning/SKILL.md | 2 +- plugins/claude/skills/vfx-magic-glow/SKILL.md | 2 +- .../claude/skills/vfx-muzzle-flash/SKILL.md | 2 +- plugins/claude/skills/vfx-smoke/SKILL.md | 2 +- .../claude/skills/vfx-water-ripple/SKILL.md | 2 +- plugins/claude/skills/voice-line/SKILL.md | 2 +- .../skills/web-and-touch-input/SKILL.md | 2 +- .../skills/web-compatibility-look/SKILL.md | 2 +- .../claude/skills/world-building-3d/SKILL.md | 2 +- registry/generated/gemini-extension.json | 2 +- registry/generated/index.json | 12 ++--- registry/generated/marketplace.claude.json | 2 +- .../generated/plugin.claude-directory.json | 4 +- registry/generated/plugin.claude.json | 2 +- registry/generated/plugin.codex.json | 2 +- registry/generated/plugin.cursor.json | 2 +- registry/generated/plugin.factory.json | 2 +- registry/generated/server.json | 4 +- server.json | 4 +- .../capabilities/export-game-targets.test.ts | 9 ++-- src/core/capabilities/export-game.ts | 10 ---- src/core/capabilities/publish-build.test.ts | 52 +++++++++++++++++-- src/core/capabilities/publish-build.ts | 21 +++++--- src/core/capabilities/summer-bundle.test.ts | 23 ++++---- src/core/capabilities/summer-bundle.ts | 6 +-- src/mcp/tools/creator-tools.ts | 2 +- src/test-helpers/summer-bundle-fixture.ts | 9 ++-- 150 files changed, 262 insertions(+), 213 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index d21da46f..2179e074 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ { "name": "summer", "source": "./", - "version": "4.9.0", + "version": "4.9.1", "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.", "author": { "name": "Summer Engine", diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index a30834f0..4873e8a6 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "summer", "displayName": "Summer Engine", - "version": "4.9.0", + "version": "4.9.1", "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.", "author": { "name": "Summer Engine", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index e05b9986..ea5eaec1 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,7 +1,7 @@ { "_generated": "GENERATED from integrations/codex — do not edit; npm run generate:registry", "name": "summer", - "version": "4.9.0", + "version": "4.9.1", "description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 131-tool MCP bridge to the Summer Engine desktop app.", "author": { "name": "Summer Engine", diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index c1b80893..b458ddcc 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -3,7 +3,7 @@ "_generated": "GENERATED from integrations/cursor — do not edit; npm run generate:registry", "name": "summer", "displayName": "Summer Engine", - "version": "4.9.0", + "version": "4.9.1", "description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 131-tool MCP bridge to the Summer Engine desktop app.", "author": { "name": "Summer Engine", diff --git a/.factory-plugin/plugin.json b/.factory-plugin/plugin.json index d7dc2e81..134e4266 100644 --- a/.factory-plugin/plugin.json +++ b/.factory-plugin/plugin.json @@ -2,7 +2,7 @@ "_generated": "GENERATED from integrations/factory — do not edit; npm run generate:registry", "name": "summer", "description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. Game-dev skills, lifecycle hooks, and a 131-tool MCP bridge to the Summer Engine desktop app.", - "version": "4.9.0", + "version": "4.9.1", "author": { "name": "Summer Engine", "email": "founders@summerengine.com", diff --git a/CHANGELOG.md b/CHANGELOG.md index f7c07fd7..cc9305dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to summer-engine will be documented here. Following [Keep a ## [Unreleased] +## [4.9.1] - 2026-10-28 + +Games without a server export and upload for every Summer app again: the CLI refused exports the store already takes. + +- **A `summer.bundle.v2` export without a server may leave out `config/summer.build.json`.** `summer_export_game` wrote a valid `.zip` and then answered `bundle_invalid` ("always holds config/summer.build.json"), and `summer_publish_build` (`store.upload_file`) refused the same file. Only a game with a server needs it, as before (summer-platform `docs/build-publications.md`, "summer.games bundle layout"). +- **A game without a server uploads for macOS and Windows**, not only iPhone and Android. `summer_publish_build` declares every platform in the bundle that Summer has an app for (`ios`, `android`, `macos`, `windows`, `web`); it answers `platforms_unsupported` only for an export with none of them (Linux only). `summer_export_game` no longer warns that desktop targets will be refused. +- **Copy:** the `summer_export_game` description, the `export-and-ship`, `release-checklist`, `launch-ready` and `release-readiness` skills and the MCP tools reference no longer say a game without a server is for phones only, or that a `summer.bundle.v2` export always holds `config/summer.build.json`. + ## [4.9.0] - 2026-10-24 Games go live on Summer's automatic checks, with Summer's review afterwards: `summer_go_live` and `summer_publish_build` read that review, and name the platforms a hosted release left out. diff --git a/gemini-extension.json b/gemini-extension.json index d45d0ea6..a0bb0d3e 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,7 +1,7 @@ { "_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry", "name": "summer", - "version": "4.9.0", + "version": "4.9.1", "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.", "contextFileName": "GEMINI.md", "mcpServers": { diff --git a/library/references/mcp-tools-reference/mcp-tools-reference.md b/library/references/mcp-tools-reference/mcp-tools-reference.md index b9f6ad0b..d0095887 100644 --- a/library/references/mcp-tools-reference/mcp-tools-reference.md +++ b/library/references/mcp-tools-reference/mcp-tools-reference.md @@ -267,7 +267,7 @@ Each spends the person's credits. `dryRun: true` returns `preview.estimate` (`cr | Tool | Use | |---|---| -| `summer_export_game` | Export the game in the file the Summer Games store takes, headless (no window), no running editor needed. `format:"bundle"` (default): the `summer.games` `.zip` the Summer apps run; `targets` picks `ios`, `android`, `macos`, `windows` (a game without a server: phones only) through a named `summer.games ` preset in `export_presets.cfg`. `format:"download"` with one target: `web` (HTML5 `.zip` on Summer's WebGPU Forward+ template; refuses Compatibility projects), `macos` (ad hoc signed `.app` zip, `macos-universal`) or `windows` (`.exe` with embedded pack, zipped, `windows-x64`). Returns path, sha256, size, bundle manifest or store platform, warnings. | +| `summer_export_game` | Export the game in the file the Summer Games store takes, headless (no window), no running editor needed. `format:"bundle"` (default): the `summer.games` `.zip` the Summer apps run; `targets` picks `ios`, `android`, `macos`, `windows` (with or without a server) through a named `summer.games ` preset in `export_presets.cfg`. `format:"download"` with one target: `web` (HTML5 `.zip` on Summer's WebGPU Forward+ template; refuses Compatibility projects), `macos` (ad hoc signed `.app` zip, `macos-universal`) or `windows` (`.exe` with embedded pack, zipped, `windows-x64`). Returns path, sha256, size, bundle manifest or store platform, warnings. | | `summer_export_templates` | `list` or `install` export templates from Summer's CDN (`downloads.summer.games/engine-templates//manifest.json`) into the engine's user template folder (`/Godot/export_templates//`), sha256-checked. Only download exports need them; store bundles need none. `summerVersion` is read on macOS, passed elsewhere. | | `store.upload_file` (3.x `summer_publish_build`; through `summer_call`) | Upload that `.zip` to the creator's game through Studio's store upload: confirm-gated preview first, then declare, part upload from disk, seal, wait for the Build and for Summer's automated checks on each platform (`checks`: passed, or failed with `code`, `owner` and `fix`); `publish:true` also makes the Build available to players. Needs `summer login --store`; a retry with the same file and version continues the same upload. Without a shell, `store.upload_begin`, `store.upload_sign_parts` and `store.upload_complete` take the bytes in parts. | | `store.go_live` (`summer_go_live`; through `summer_call`) | Take the store game live: release the uploaded bundle Build to the platforms that passed their checks and publish the store page, through the same store routes Studio uses, then watch until players get it. Confirm-gated: the plan first (or `live`, `blocked` with each failure's fix, `needs_changes` with Summer's feedback). It needs no owner approval link while the person's Agent permissions allow Publish (the default; otherwise `needs_permission`). `waiting` names what it waits on (`automated_checks`, `activation`, or `summer`: a hold on Summer's side that needs nothing from the creator). Call again to keep watching; nothing is asked twice. Run the `release-checklist` skill first. | diff --git a/library/skills/export-and-ship/SKILL.md b/library/skills/export-and-ship/SKILL.md index 99c2499b..29ede1e5 100644 --- a/library/skills/export-and-ship/SKILL.md +++ b/library/skills/export-and-ship/SKILL.md @@ -296,7 +296,7 @@ For each build: Per platform, point the user at the correct upload path: - **summer.games:** `summer_export_game` writes the summer.games `.zip`; `store.upload_file` uploads it to the game's store listing after the user confirms the exact game, file and version (needs `summer login --store`; through `summer_call` when your client does not list it). If the store refuses this machine's sign-in, the user uploads the `.zip` in Studio instead. The `publish-your-game` skill takes it from there to `store.publish`. - - Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (`summer_export_game` `targets`, format `bundle`; no template, no signing; a game without a server targets `ios`/`android` only). Web = an HTML5 `.zip` on Summer's WebGPU Forward+ template (`targets:["web"]`; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = `targets:["macos"]` or `["windows"]` with format `download`. Download exports need the template: `summer_export_templates` `install` fetches it from Summer's CDN. + - Per platform, the store takes: iPhone, Android, macOS and Windows in the Summer apps = one summer.games bundle (`summer_export_game` `targets`, format `bundle`; no template, no signing; with or without a server). Web = an HTML5 `.zip` on Summer's WebGPU Forward+ template (`targets:["web"]`; the project must render with Forward+ or Mobile). A macOS or Windows download for the store page = `targets:["macos"]` or `["windows"]` with format `download`. Download exports need the template: `summer_export_templates` `install` fetches it from Summer's CDN. - Hosted games: if `summer_export_game` fails with "… is in the source graph's authority_engine domain, which the client pack leaves out", an authority root in `source-domains.json` holds a file the client loads (often the composition `.tres`). Narrow that root to the server-only files, or move the shared file under a `shared` path, then export again. Every exporter message is in the `multiplayer-publish` skill's export-errors.md; the folder rules are in `multiplayer-project`. - Every summer.games bundle: export with the released Summer editor from the download page, never a development build, and export again after updating Summer. Otherwise its scripts can fail to compile on players' devices and the game opens to an empty window, though every upload check passes. `release-readiness` check 7 proves it. - Every file the game reads by path at run time (`FileAccess`, `DirAccess`, `load_from_file`) that Summer doesn't import, such as a `.bin` or `.json`, must match the **summer.games** preset's own `include_filter` (Resources > Filters to export non-resource files/folders); a filter on another preset doesn't carry over. A left-out file is no export error, it is just missing on players' devices. Never use `SystemFont` for phone text: on iPhone it draws every glyph as a box. `release-readiness` check 8 lists the pack. diff --git a/library/skills/launch-ready/SKILL.md b/library/skills/launch-ready/SKILL.md index e41b6e2e..c2f8a579 100644 --- a/library/skills/launch-ready/SKILL.md +++ b/library/skills/launch-ready/SKILL.md @@ -123,9 +123,10 @@ Wait for the answers. ### Build (rules 1.1 to 2.5) -What to upload (rule 1.5): a game with a server, or one for iPhone or -Android, needs a store bundle (format `bundle`). A game without a server -ships web and desktop as downloads (format `download`), one per platform. +What to upload (rule 1.5): the Summer apps on iPhone, Android, macOS and +Windows run a store bundle (format `bundle`), with or without a server. A +web build or a desktop download for the store page is format `download`, +one per platform. An upload is missing when `store.status` has none for a target, and stale when the newest one is older than the project's last change (`git log -1 diff --git a/library/skills/release-checklist/SKILL.md b/library/skills/release-checklist/SKILL.md index ccd83196..bd0391f1 100644 --- a/library/skills/release-checklist/SKILL.md +++ b/library/skills/release-checklist/SKILL.md @@ -73,9 +73,9 @@ answer. | --- | --- | --- | --- | --- | | 1.1 The summer.games preset made it | `preset`, `format`, `debug` | `format` is `bundle`, `preset` is `summer.games` (or the `summer.games` preset the targets made), `debug` is false | Export again with `summer_export_game` and no `debug` | Engine `modules/1summer_engine/editor` (the summer.games export platform); platform `docs/build-publications.md` | | 1.2 A released Summer version | `bundle.summerVersion` | A Summer release (`X.Y.Z`); for `ios` or `android`, the same MAJOR.MINOR as the current Summer release | Update Summer Engine to the current release, export again | Platform `internal/clientartifacts/template.go` (same MAJOR.MINOR, a template patch at least the pack's); refusal `engine_build_unreleased`; `release-readiness` check 9 | -| 1.3 The fixed export layout | `bundle.schema`, `bundle.paths` | `summer.bundle.v2` holds only these 6 paths: `summer-bundle.json`, `client.pck`, `config/summer.build.json` (always), `server.pck` (a game with a server only), `config/world-definitions.json` (only when the build declares queues), `config/world-support.json` (only when a World definition names a file). An older engine writes `summer.bundle.v1`, which the store still takes | Never add or rename a file in the `.zip`: upload it as Summer Engine wrote it. An extra path means the export is not from the summer.games preset; export again | Platform `docs/build-publications.md` "summer.games bundle layout", enforced by `internal/clientartifacts/bundle_layout.go` | +| 1.3 The fixed export layout | `bundle.schema`, `bundle.paths` | `summer.bundle.v2` holds only these 6 paths: `summer-bundle.json`, `client.pck`, `config/summer.build.json` (always for a game with a server; a game without one may leave it out), `server.pck` (a game with a server only), `config/world-definitions.json` (only when the build declares queues), `config/world-support.json` (only when a World definition names a file). An older engine writes `summer.bundle.v1`, which the store still takes | Never add or rename a file in the `.zip`: upload it as Summer Engine wrote it. An extra path means the export is not from the summer.games preset; export again | Platform `docs/build-publications.md` "summer.games bundle layout", enforced by `internal/clientartifacts/bundle_layout.go` | | 1.4 A server pack when the game has a server | `bundle.hosted`, `bundle.paths` | A game with a server (multiplayer on Summer's servers) has `hosted: true` and `server.pck`; a game without one has neither | Set up the server export (the `multiplayer-publish` skill), export again | Platform `internal/clientartifacts/exported_game.go` (manifest `server` and `compositionPath` together) | -| 1.5 The right platforms | `bundle.targetPlatforms`, `warnings` | No warning; a game without a server lists only `ios` and `android` (desktop and web ship as downloads, format `download`); a game with a server declares the same platforms in `summer.build.json` | `summer_export_game` with `targets` and, for a server game, `alignDeclaration: true` | Platform refusals `declaration_mismatch`, `template_execution_unsupported` (`api/management/openapi.yaml`, build-publications) | +| 1.5 The right platforms | `bundle.targetPlatforms`, `warnings` | No warning; the bundle lists the Summer apps it is for (`ios`, `android`, `macos`, `windows`), with or without a server; a game with a server declares the same platforms in `summer.build.json` | `summer_export_game` with `targets` and, for a server game, `alignDeclaration: true` | Platform refusals `declaration_mismatch`, `template_execution_unsupported` (`api/management/openapi.yaml`, build-publications) | For web and desktop downloads (`format: "download"`), check instead that the `.zip` is under 500 MiB with `index.html` at its top (web), or the `.app` or diff --git a/library/skills/release-readiness/SKILL.md b/library/skills/release-readiness/SKILL.md index ec265d95..0de0c51a 100644 --- a/library/skills/release-readiness/SKILL.md +++ b/library/skills/release-readiness/SKILL.md @@ -77,7 +77,7 @@ Expand-Archive build\.summer.zip -DestinationPath build\bundle -Force Each check below gives a `sh` form and a PowerShell form for Windows, which runs the engine through `Run-Summer` and searches its log with `Select-String`. -A game without a server has no `server.pck` or `config/`; `unzip` then +A game without a server has no `server.pck` and may have no `config/`; `unzip` then warns about the missing names and extracts the rest. `` is the Summer Engine executable. Two look-alikes hide real diff --git a/library/tools/export-game/GUIDE.md b/library/tools/export-game/GUIDE.md index 5f9936ea..041321c3 100644 --- a/library/tools/export-game/GUIDE.md +++ b/library/tools/export-game/GUIDE.md @@ -1,3 +1,3 @@ # summer_export_game -Export the game in the exact file the Summer Games store takes, with the installed Summer Engine headless (no window). format "bundle" (default): the summer.games .zip the Summer apps run on iPhone, Android, macOS and Windows; targets picks the platforms (a game without a server: ios and android only); upload it with summer_publish_build. format "download" with one target: web (an HTML5 .zip on Summer's WebGPU Forward+ web template, played on summer.games), macos (.app zip, macos-universal) or windows (.exe zip, windows-x64); these need the export template from summer_export_templates and are uploaded as store versions. Needs Summer Engine 0.7.0 or newer: an older engine is refused before anything is written (code engine_too_old). A target the installed engine cannot build (android needs 0.7.1) is left out: the other targets export, and skippedTargets plus a warning name it. A game with a server declares its platforms in summer.build.json; when they differ from the exported targets a warning says so (summer_publish_build would be refused), and alignDeclaration:true aligns them. Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings. +Export the game in the exact file the Summer Games store takes, with the installed Summer Engine headless (no window). format "bundle" (default): the summer.games .zip the Summer apps run on iPhone, Android, macOS and Windows; targets picks the platforms, with or without a server; upload it with summer_publish_build. format "download" with one target: web (an HTML5 .zip on Summer's WebGPU Forward+ web template, played on summer.games), macos (.app zip, macos-universal) or windows (.exe zip, windows-x64); these need the export template from summer_export_templates and are uploaded as store versions. Needs Summer Engine 0.7.0 or newer: an older engine is refused before anything is written (code engine_too_old). A target the installed engine cannot build (android needs 0.7.1) is left out: the other targets export, and skippedTargets plus a warning name it. A game with a server declares its platforms in summer.build.json; when they differ from the exported targets a warning says so (summer_publish_build would be refused), and alignDeclaration:true aligns them. Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings. diff --git a/package-lock.json b/package-lock.json index d3a4bb23..c84afaef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "summer-engine", - "version": "4.9.0", + "version": "4.9.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "summer-engine", - "version": "4.9.0", + "version": "4.9.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.30.0", diff --git a/package.json b/package.json index c6dbc384..7b0f9800 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "summer-engine", - "version": "4.9.0", + "version": "4.9.1", "description": "MCP server, CLI and skills for Summer Engine, the game engine built for AI. Connect Claude Code, Cursor, Codex and other agents to build, test and publish full games to summer.games.", "mcpName": "io.github.SummerEngine/summer", "keywords": [ diff --git a/plugins/claude/.claude-plugin/plugin.json b/plugins/claude/.claude-plugin/plugin.json index eafbfa48..e97f172e 100644 --- a/plugins/claude/.claude-plugin/plugin.json +++ b/plugins/claude/.claude-plugin/plugin.json @@ -2,7 +2,7 @@ "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "summer", "displayName": "Summer Engine", - "version": "4.9.0", + "version": "4.9.1", "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.", "author": { "name": "Summer Engine", @@ -160,7 +160,7 @@ "command": "npx", "args": [ "-y", - "summer-engine@4.9.0", + "summer-engine@4.9.1", "mcp" ] }, diff --git a/plugins/claude/commands/start.md b/plugins/claude/commands/start.md index a1a29863..4e0e71db 100644 --- a/plugins/claude/commands/start.md +++ b/plugins/claude/commands/start.md @@ -17,7 +17,7 @@ $ARGUMENTS ## 1. Look before you ask (read-only, a few seconds) - Tools you already have: the `summer-engine` server (local, drives the Summer Engine desktop app; its tools include `summer_get_project_context`) and the `summer-cloud` server (hosted, Summer's cloud; its tools include `summer_whoami`, `summer_search` and `summer_call` once the user is signed in). A server that needs sign-in shows no tools yet. -- `npx -y summer-engine@4.9.0 status` tells you whether the engine is running. If `npx` is missing, there is no Node: plan it first (3a) and have them install Node 22 or later (nodejs.org) for the build. +- `npx -y summer-engine@4.9.1 status` tells you whether the engine is running. If `npx` is missing, there is no Node: plan it first (3a) and have them install Node 22 or later (nodejs.org) for the build. Do not run `summer setup claude-code` here: this plugin already brings the MCP servers and the skills, and a second copy of the skills only crowds the list. @@ -29,7 +29,7 @@ For 3b, pick the template from the idea (list in 3b) and a folder: a new folder > I'll install Summer Engine (about 660 MB, free) if needed and open a starter project in ``, in a window behind your work. OK? -Drop the install part when the `engine-install` check of `npx -y summer-engine@4.9.0 doctor --json` is `ok`. That one yes covers the install, the folder and the window; ask nothing else before the game plays. +Drop the install part when the `engine-install` check of `npx -y summer-engine@4.9.1 doctor --json` is `ok`. That one yes covers the install, the folder and the window; ask nothing else before the game plays. ## 3a. Plan it first @@ -38,11 +38,11 @@ A call written `area.action({...})` is the tool `summer_area_action` when your c 1. **Sign in.** If `summer_call` is not available, the `summer-cloud` server needs the user's Summer account. Tell them: type `/mcp`, pick `summer-cloud`, choose **Authenticate**, and sign in in the browser (a free account works). You cannot do this step for them. When they say done, call `whoami()` (the `summer_whoami` tool) to confirm. 2. **Start the game.** As soon as there is an idea (one sentence is enough; ask for one if `$ARGUMENTS` is empty), call `projects.create({ idea })`. Summer starts drawing the plan at once; give them the game's link (`url`) to watch it fill in. Keep its `projectId`. 3. **Shape it, briefly.** Ask at most two short questions, each with two or three concrete options (how it should feel, what the player does). Send each answer with `plans.message({ projectId, text })`. Use `plans.show({ projectId })` to see the cards and their `itemId`s, `plans.edit_card({ projectId, itemId, change })` to change one picture and `plans.choose_look({ projectId, itemId })` when they pick an art style. -4. **Hand it to the engine.** When the user is happy, call `projects.open_in_engine({ projectId })`. It returns the Summer Engine download, the setup steps and the saved direction. Then follow 3b, using the saved direction instead of a template: create and open an empty project (`npx -y summer-engine@4.9.0 dev empty `), save the direction as `res://.summer/GameSoul.md`, and build its first playable milestone with the `make-game` skill. Never describe a game that is not built yet. +4. **Hand it to the engine.** When the user is happy, call `projects.open_in_engine({ projectId })`. It returns the Summer Engine download, the setup steps and the saved direction. Then follow 3b, using the saved direction instead of a template: create and open an empty project (`npx -y summer-engine@4.9.1 dev empty `), save the direction as `res://.summer/GameSoul.md`, and build its first playable milestone with the `make-game` skill. Never describe a game that is not built yet. ## 3b. Build in Summer Engine -No sign-in: engine tools work signed out. Sign in only when a cloud operation (assets, plans, publishing) answers `not_signed_in`: then `npx -y summer-engine@4.9.0 login`. +No sign-in: engine tools work signed out. Sign in only when a cloud operation (assets, plans, publishing) answers `not_signed_in`: then `npx -y summer-engine@4.9.1 login`. 1. **Template** that matches the idea, so the first version already plays: - platformer: `2d-brario-platformer` @@ -55,9 +55,9 @@ No sign-in: engine tools work signed out. Sign in only when a cloud operation (a - third-person or exploring: `3d-third-person-controller` - anything else: `3d-basic` - Run `npx -y summer-engine@4.9.0 list templates` if none fits. If `summer dev` is an unknown command (an older summer-engine on npm), run these instead: `npx -y summer-engine@4.9.0 install`, then `create