summer-engine 3.3.0 → 3.4.1
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 +4 -2
- package/.codex-plugin/plugin.json +5 -3
- package/.cursor-plugin/plugin.json +4 -2
- package/.factory-plugin/plugin.json +4 -2
- package/.opencode/INSTALL.md +8 -8
- package/.opencode/plugins/summer.js +2 -2
- package/AGENTS.md +7 -7
- package/CHANGELOG.md +50 -0
- package/GEMINI.md +1 -1
- package/NOTICE +1 -1
- package/README.md +32 -35
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/run.sh +2 -2
- package/assets/navigation/web-routes.json +1 -1
- package/commands/gameskill.md +2 -2
- package/commands/summer.md +25 -25
- package/dist/cli/commands/install.d.ts +10 -0
- package/dist/cli/commands/install.js +55 -10
- package/dist/cli/commands/open.d.ts +1 -1
- package/dist/cli/commands/run.d.ts +1 -1
- package/dist/cli/commands/run.js +1 -1
- package/dist/cli/commands/skills.js +2 -2
- package/dist/cli/commands/tool.d.ts +7 -0
- package/dist/cli/commands/tool.js +36 -1
- package/dist/core/api-client.d.ts +5 -6
- package/dist/core/api-client.js +12 -15
- package/dist/core/auth.js +2 -2
- package/dist/core/capabilities/asset-import.d.ts +0 -1
- package/dist/core/capabilities/camera-view.d.ts +1 -1
- package/dist/core/capabilities/camera-view.js +2 -2
- package/dist/core/capabilities/capture-gameplay.d.ts +69 -0
- package/dist/core/capabilities/capture-gameplay.js +283 -0
- package/dist/core/capabilities/connect-signal.d.ts +1 -2
- package/dist/core/capabilities/connect-signal.js +1 -2
- package/dist/core/capabilities/console-read.d.ts +2 -2
- package/dist/core/capabilities/console-read.js +2 -2
- package/dist/core/capabilities/creator.js +1 -1
- package/dist/core/capabilities/doctor.d.ts +9 -1
- package/dist/core/capabilities/doctor.js +47 -4
- package/dist/core/capabilities/engine-receipt.d.ts +5 -7
- package/dist/core/capabilities/engine-receipt.js +7 -9
- package/dist/core/capabilities/engine-run.d.ts +4 -0
- package/dist/core/capabilities/engine-run.js +33 -5
- package/dist/core/capabilities/export-engine-version.d.ts +15 -0
- package/dist/core/capabilities/export-engine-version.js +24 -0
- package/dist/core/capabilities/export-game.d.ts +9 -1
- package/dist/core/capabilities/export-game.js +115 -39
- package/dist/core/capabilities/export-presets.d.ts +1 -1
- package/dist/core/capabilities/export-presets.js +1 -1
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
- package/dist/core/capabilities/fabricate-mesh.js +2 -3
- package/dist/core/capabilities/frame-quality.d.ts +4 -4
- package/dist/core/capabilities/frame-quality.js +4 -4
- package/dist/core/capabilities/grep.d.ts +1 -1
- package/dist/core/capabilities/grep.js +1 -1
- package/dist/core/capabilities/image-generation.d.ts +9 -0
- package/dist/core/capabilities/image-generation.js +19 -1
- package/dist/core/capabilities/navigation/open.d.ts +1 -1
- package/dist/core/capabilities/navigation/open.js +1 -1
- package/dist/core/capabilities/navigation/render-product-map.js +1 -1
- package/dist/core/capabilities/navigation/targets.js +2 -2
- package/dist/core/capabilities/placement-batch.d.ts +1 -1
- package/dist/core/capabilities/placement-batch.js +2 -2
- package/dist/core/capabilities/play-determinism.d.ts +1 -1
- package/dist/core/capabilities/play-determinism.js +1 -1
- package/dist/core/capabilities/publish-build.d.ts +15 -2
- package/dist/core/capabilities/publish-build.js +78 -28
- package/dist/core/capabilities/publish-download.d.ts +1 -2
- package/dist/core/capabilities/publish-download.js +2 -3
- package/dist/core/capabilities/replace-node.d.ts +1 -3
- package/dist/core/capabilities/replace-node.js +1 -3
- package/dist/core/capabilities/runtime-control.d.ts +5 -7
- package/dist/core/capabilities/runtime-control.js +7 -9
- package/dist/core/capabilities/scene-batch.d.ts +1 -1
- package/dist/core/capabilities/scene-batch.js +1 -1
- package/dist/core/capabilities/scene-kind.js +1 -1
- package/dist/core/capabilities/scene-readback.d.ts +3 -4
- package/dist/core/capabilities/scene-readback.js +3 -4
- package/dist/core/capabilities/scene-script.d.ts +2 -2
- package/dist/core/capabilities/scene-script.js +2 -2
- package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
- package/dist/core/capabilities/seeing/shot-store.js +1 -1
- package/dist/core/capabilities/summer-bundle.d.ts +2 -3
- package/dist/core/capabilities/summer-bundle.js +2 -3
- package/dist/core/capabilities/surface-snap.d.ts +1 -1
- package/dist/core/capabilities/surface-snap.js +1 -1
- package/dist/core/capabilities/tool-dispatch.js +11 -1
- package/dist/core/capabilities/ui-control.d.ts +1 -2
- package/dist/core/capabilities/ui-control.js +1 -2
- package/dist/core/capabilities/world-snapshot.d.ts +1 -1
- package/dist/core/capabilities/world-snapshot.js +1 -1
- package/dist/core/capability-skew.d.ts +2 -3
- package/dist/core/capability-skew.js +4 -5
- package/dist/core/config.js +2 -2
- package/dist/core/engine-install.d.ts +16 -0
- package/dist/core/engine-install.js +32 -2
- package/dist/core/feedback/client.js +1 -1
- package/dist/core/hosted-mcp.d.ts +115 -0
- package/dist/core/hosted-mcp.js +164 -0
- package/dist/core/launch-posture.d.ts +6 -3
- package/dist/core/launch-posture.js +18 -5
- package/dist/core/library-read.js +1 -2
- package/dist/core/templates.d.ts +1 -2
- package/dist/core/templates.js +1 -2
- package/dist/mcp/hosted-mount.d.ts +13 -59
- package/dist/mcp/hosted-mount.js +24 -30
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +5 -4
- package/dist/mcp/tools/creator-tools.js +14 -4
- package/dist/mcp/tools/debug-tools.js +1 -1
- package/dist/mcp/tools/generate-tools.js +19 -9
- package/dist/mcp/tools/navigation-tools.d.ts +1 -1
- package/dist/mcp/tools/navigation-tools.js +1 -1
- package/dist/mcp/tools/spatial-tools.js +1 -1
- package/dist/mcp/tools/visual-tools.js +2 -2
- package/dist/mcp/tools/with-engine.d.ts +1 -2
- package/dist/mcp/tools/with-engine.js +1 -2
- package/gemini-extension.json +3 -1
- package/hooks/session-start.sh +2 -2
- package/integrations/README.md +70 -76
- package/integrations/claude/README.md +0 -3
- package/integrations/codex/README.md +1 -2
- package/integrations/copilot-jetbrains/README.md +1 -1
- package/integrations/cursor/README.md +1 -2
- package/integrations/factory/README.md +15 -11
- package/integrations/mistral-vibe/README.md +1 -1
- package/integrations/opencode/README.md +1 -1
- package/integrations/roo-code/README.md +1 -1
- package/integrations/rovo-dev/README.md +1 -1
- package/integrations/trae/README.md +1 -1
- package/integrations/windsurf/README.md +3 -3
- package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
- package/library/references/gd-style/gd-style.md +4 -6
- package/library/references/godot-version/godot-version.md +3 -3
- package/library/references/headless-routing/headless-routing.md +2 -2
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +18 -16
- package/library/references/product-map/product-map.md +1 -1
- package/library/references/public-surface-language/public-surface-language.md +1 -1
- package/library/references/summer-folder/summer-folder.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +4 -4
- package/library/skills/README.md +11 -9
- package/library/skills/adaptive-music/SKILL.md +7 -7
- package/library/skills/ai-characters-in-games/SKILL.md +1 -1
- package/library/skills/ambient-bed/SKILL.md +12 -14
- package/library/skills/animated-loop/SKILL.md +42 -42
- package/library/skills/animation-tree/SKILL.md +6 -6
- package/library/skills/art-direction/SKILL.md +8 -11
- package/library/skills/asset-strategy/SKILL.md +3 -3
- package/library/skills/audio-direction/SKILL.md +8 -10
- package/library/skills/auto-fire-targeting/SKILL.md +4 -3
- package/library/skills/bounded-engine-runs/SKILL.md +95 -0
- package/library/skills/bounded-engine-runs/resource.yaml +29 -0
- package/library/skills/brainstorm-game/SKILL.md +5 -5
- package/library/skills/brainstorming/SKILL.md +9 -15
- package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
- package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
- package/library/skills/character-animation-wiring/SKILL.md +2 -2
- package/library/skills/character-model/SKILL.md +15 -26
- package/library/skills/character-movement/SKILL.md +1 -1
- package/library/skills/character-movement/references/movement-3d.md +1 -1
- package/library/skills/character-portrait/SKILL.md +4 -4
- package/library/skills/cinematic-cutscene/SKILL.md +38 -38
- package/library/skills/combat-basics/SKILL.md +1 -1
- package/library/skills/compatibility-renderer-traps/SKILL.md +78 -0
- package/library/skills/compatibility-renderer-traps/resource.yaml +28 -0
- package/library/skills/concept-art/SKILL.md +4 -4
- package/library/skills/create-asset-sheet/SKILL.md +12 -31
- package/library/skills/debug/SKILL.md +5 -4
- package/library/skills/debugging-game-feel/SKILL.md +1 -4
- package/library/skills/debugging-game-feel/resource.yaml +1 -1
- package/library/skills/design-level/SKILL.md +5 -5
- package/library/skills/design-mechanic/SKILL.md +6 -6
- package/library/skills/design-npc/SKILL.md +8 -15
- package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
- package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
- package/library/skills/environment-kit/SKILL.md +5 -5
- package/library/skills/export-and-ship/SKILL.md +25 -24
- package/library/skills/fabricating-assets/SKILL.md +1 -1
- package/library/skills/facial-and-lipsync/SKILL.md +5 -5
- package/library/skills/fps-controller/SKILL.md +17 -16
- package/library/skills/fps-controller/resource.yaml +0 -2
- package/library/skills/game-feel/SKILL.md +6 -7
- package/library/skills/gameskill/SKILL.md +3 -3
- package/library/skills/gdscript-patterns/SKILL.md +3 -3
- package/library/skills/generate-motion/SKILL.md +5 -22
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
- package/library/skills/headless-scripting/SKILL.md +8 -8
- package/library/skills/headless-scripting/resource.yaml +1 -0
- package/library/skills/in-game-purchases/SKILL.md +123 -118
- package/library/skills/in-game-purchases/resource.yaml +2 -2
- package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
- package/library/skills/investigating-bugs/SKILL.md +3 -11
- package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
- package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
- package/library/skills/make-game/SKILL.md +3 -5
- package/library/skills/make-game/references/2d-platformer.md +1 -1
- package/library/skills/multiplayer-project/SKILL.md +1 -1
- package/library/skills/multiplayer-testing/SKILL.md +4 -4
- package/library/skills/music-track/SKILL.md +40 -38
- package/library/skills/new-project/SKILL.md +4 -6
- package/library/skills/organic-model/SKILL.md +9 -9
- package/library/skills/pixel-art/SKILL.md +6 -6
- package/library/skills/play/SKILL.md +3 -4
- package/library/skills/playtesting-a-feature/SKILL.md +4 -6
- package/library/skills/procedural-animation/SKILL.md +10 -11
- package/library/skills/prop-model/SKILL.md +4 -4
- package/library/skills/psx-retro-rendering/SKILL.md +20 -20
- package/library/skills/psx-retro-rendering/resource.yaml +2 -3
- package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
- package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
- package/library/skills/remote-deploy/SKILL.md +20 -21
- package/library/skills/retarget/SKILL.md +19 -23
- package/library/skills/running-in-the-cloud/SKILL.md +5 -5
- package/library/skills/scene-composition/SKILL.md +5 -5
- package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
- package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
- package/library/skills/scene-scripting/SKILL.md +3 -3
- package/library/skills/scene-to-level/SKILL.md +28 -31
- package/library/skills/skill-create/SKILL.md +1 -1
- package/library/skills/skill-improve/SKILL.md +9 -9
- package/library/skills/skill-test/SKILL.md +10 -10
- package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
- package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
- package/library/skills/skybox-panorama/SKILL.md +8 -9
- package/library/skills/sound-effect/SKILL.md +19 -19
- package/library/skills/spatial-placement/SKILL.md +2 -2
- package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
- package/library/skills/sprite-sheet/SKILL.md +10 -10
- package/library/skills/summer-analytics/SKILL.md +3 -3
- package/library/skills/summer-friends/SKILL.md +10 -10
- package/library/skills/summer-leaderboards/SKILL.md +6 -6
- package/library/skills/summer-match-results/SKILL.md +13 -13
- package/library/skills/summer-matchmaking/SKILL.md +11 -11
- package/library/skills/summer-parties/SKILL.md +9 -9
- package/library/skills/summer-player-data/SKILL.md +12 -12
- package/library/skills/summer-store/SKILL.md +6 -6
- package/library/skills/summer-world-chat/SKILL.md +9 -9
- package/library/skills/summer-world-saves/SKILL.md +7 -7
- package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
- package/library/skills/tileable-texture/SKILL.md +1 -1
- package/library/skills/trailer-shot/SKILL.md +36 -36
- package/library/skills/tune-performance/SKILL.md +13 -13
- package/library/skills/tune-performance/resource.yaml +1 -1
- package/library/skills/ui-graphics/SKILL.md +7 -7
- package/library/skills/use-widget-asset/SKILL.md +7 -7
- package/library/skills/using-summer/SKILL.md +5 -7
- package/library/skills/vehicle-model/SKILL.md +6 -7
- package/library/skills/vehicle-model/resource.yaml +2 -2
- package/library/skills/verification-before-completion/SKILL.md +5 -6
- package/library/skills/vfx-dissolve/SKILL.md +4 -4
- package/library/skills/vfx-fire/SKILL.md +6 -6
- package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-hit-spark/SKILL.md +4 -4
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/SKILL.md +5 -5
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-magic-glow/SKILL.md +4 -4
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
- package/library/skills/vfx-smoke/SKILL.md +5 -5
- package/library/skills/vfx-water-ripple/SKILL.md +2 -2
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
- package/library/skills/voice-line/SKILL.md +9 -9
- package/library/skills/web-compatibility-look/resource.yaml +1 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
- package/library/skills/writing-plans/SKILL.md +4 -4
- package/library/skills/writing-skills/SKILL.md +8 -8
- package/library/tools/capture-gameplay/resource.yaml +73 -0
- package/library/tools/creator-publish/resource.yaml +4 -4
- package/library/tools/creator-releases/resource.yaml +5 -5
- package/library/tools/generate-image/resource.yaml +15 -1
- package/library/tools/publish-build/resource.yaml +6 -2
- package/package.json +1 -1
- package/registry/generated/aliases.json +1 -0
- package/registry/generated/counts.json +3 -3
- package/registry/generated/gemini-extension.json +3 -1
- package/registry/generated/index.json +248 -135
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude.json +4 -2
- package/registry/generated/plugin.codex.json +5 -3
- package/registry/generated/plugin.cursor.json +4 -2
- package/registry/generated/plugin.factory.json +4 -2
- package/registry/generated/skills-index.md +11 -9
- package/registry/generated/skills-registry.json +33 -6
- package/registry/schemas/domains.json +1 -1
package/dist/mcp/hosted-mount.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
-
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
3
1
|
import { ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
4
2
|
import { z } from "zod";
|
|
3
|
+
import { connectHostedMcp } from "../core/hosted-mcp.js";
|
|
5
4
|
import { getStoreAccessToken, OAuthError, resolveMcpResourceUrl } from "../core/oauth.js";
|
|
6
5
|
import { appendMcpLogEvent } from "../core/mcp-log.js";
|
|
7
|
-
import { TOOLKIT_VERSION } from "../core/version.js";
|
|
8
6
|
/**
|
|
9
7
|
* One Summer Engine MCP. The cloud tools a creator's agent needs to publish
|
|
10
8
|
* (projects, store page, build upload, submit for the owner's approval, the
|
|
@@ -16,38 +14,20 @@ import { TOOLKIT_VERSION } from "../core/version.js";
|
|
|
16
14
|
* that server). A name the local MCP already has stays local (the engine and
|
|
17
15
|
* generation tools keep their CLI-token path).
|
|
18
16
|
*
|
|
19
|
-
* Mounting
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* Mounting runs after connect. The first tools/list waits for a mount in
|
|
18
|
+
* progress (up to FIRST_LIST_WAIT_MS), so a host that lists tools once still
|
|
19
|
+
* sees the store tools; a slower mount adds them later (tools/list_changed).
|
|
20
|
+
* Without a store sign-in the mount fails at once, and one tool,
|
|
21
|
+
* summer_store_tools, says how to sign in and mounts on the next call.
|
|
23
22
|
*/
|
|
24
23
|
export const STORE_TOOLS_STATUS = "summer_store_tools";
|
|
25
|
-
|
|
24
|
+
/** How long the first tools/list waits for a mount in progress, so hosts that list once see the store tools. */
|
|
25
|
+
export const FIRST_LIST_WAIT_MS = 5_000;
|
|
26
26
|
const passthroughArgs = z.object({}).passthrough();
|
|
27
27
|
export const defaultHostedMountDependencies = {
|
|
28
28
|
url: () => resolveMcpResourceUrl(),
|
|
29
29
|
token: () => getStoreAccessToken(),
|
|
30
|
-
connect:
|
|
31
|
-
const transport = new StreamableHTTPClientTransport(new URL(url), {
|
|
32
|
-
// A fresh (refreshed when near expiry) token on every request.
|
|
33
|
-
fetch: async (input, init) => {
|
|
34
|
-
const headers = new Headers(init?.headers);
|
|
35
|
-
headers.set("authorization", `Bearer ${await token()}`);
|
|
36
|
-
return fetch(input, { ...init, headers });
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
const client = new Client({ name: "summer-engine-local", version: TOOLKIT_VERSION });
|
|
40
|
-
await client.connect(transport);
|
|
41
|
-
const timeout = { timeout: CALL_TIMEOUT_MS };
|
|
42
|
-
return {
|
|
43
|
-
listTools: (params) => client.listTools(params),
|
|
44
|
-
callTool: (params) => client.callTool(params, undefined, timeout),
|
|
45
|
-
listPrompts: (params) => client.listPrompts(params),
|
|
46
|
-
getPrompt: (params) => client.getPrompt(params),
|
|
47
|
-
listResources: (params) => client.listResources(params),
|
|
48
|
-
readResource: (params) => client.readResource(params),
|
|
49
|
-
};
|
|
50
|
-
},
|
|
30
|
+
connect: connectHostedMcp,
|
|
51
31
|
};
|
|
52
32
|
async function listAll(page, key) {
|
|
53
33
|
const out = [];
|
|
@@ -70,7 +50,9 @@ function errorText(error) {
|
|
|
70
50
|
* reports each mounted tool's own JSON Schema rather than the passthrough one.
|
|
71
51
|
* Returns mount(), which callers run after connect without awaiting it.
|
|
72
52
|
*/
|
|
73
|
-
export function prepareHostedMount(server, deps = defaultHostedMountDependencies) {
|
|
53
|
+
export function prepareHostedMount(server, deps = defaultHostedMountDependencies, options = {}) {
|
|
54
|
+
const firstListWaitMs = options.firstListWaitMs ?? FIRST_LIST_WAIT_MS;
|
|
55
|
+
let listed = false;
|
|
74
56
|
const state = { status: "idle", tools: [], prompts: [], resources: [], collisions: [] };
|
|
75
57
|
const schemas = new Map();
|
|
76
58
|
const registries = server;
|
|
@@ -82,6 +64,10 @@ export function prepareHostedMount(server, deps = defaultHostedMountDependencies
|
|
|
82
64
|
const listTools = handlers.get("tools/list");
|
|
83
65
|
if (listTools) {
|
|
84
66
|
server.server.setRequestHandler(ListToolsRequestSchema, async (request, extra) => {
|
|
67
|
+
if (!listed) {
|
|
68
|
+
listed = true;
|
|
69
|
+
await waitForMount(firstListWaitMs);
|
|
70
|
+
}
|
|
85
71
|
const result = await listTools(request, extra);
|
|
86
72
|
return {
|
|
87
73
|
...result,
|
|
@@ -94,6 +80,14 @@ export function prepareHostedMount(server, deps = defaultHostedMountDependencies
|
|
|
94
80
|
}
|
|
95
81
|
let statusTool = null;
|
|
96
82
|
let running = null;
|
|
83
|
+
/** Wait for a mount in progress, at most ms; returns at once when none runs. */
|
|
84
|
+
async function waitForMount(ms) {
|
|
85
|
+
if (!running || ms <= 0)
|
|
86
|
+
return;
|
|
87
|
+
let timer;
|
|
88
|
+
await Promise.race([running, new Promise((done) => (timer = setTimeout(done, ms)))]);
|
|
89
|
+
clearTimeout(timer);
|
|
90
|
+
}
|
|
97
91
|
const showStatusTool = () => {
|
|
98
92
|
if (statusTool || STORE_TOOLS_STATUS in registries._registeredTools)
|
|
99
93
|
return;
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -6,8 +6,8 @@ export declare const getCachedBootDriftNotice: typeof getCachedNotice;
|
|
|
6
6
|
/**
|
|
7
7
|
* Server `instructions` in the MCP initialize response (SDK ServerOptions,
|
|
8
8
|
* @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
|
|
9
|
-
* session, before any tool call — the place for the five habits
|
|
10
|
-
*
|
|
9
|
+
* session, before any tool call — the place for the five habits an end-to-end run
|
|
10
|
+
* showed an agent needs on the first
|
|
11
11
|
* turn and would otherwise learn the hard way. Kept under 600 characters so
|
|
12
12
|
* it costs a few hundred tokens once; the full operating guide stays in the
|
|
13
13
|
* summer_agent_playbook prompt / summer_get_agent_playbook tool. The last
|
package/dist/mcp/server.js
CHANGED
|
@@ -34,8 +34,8 @@ export const getCachedBootDriftNotice = getCachedNotice;
|
|
|
34
34
|
/**
|
|
35
35
|
* Server `instructions` in the MCP initialize response (SDK ServerOptions,
|
|
36
36
|
* @modelcontextprotocol/sdk >= 1.x). Hosts hand this to the model once per
|
|
37
|
-
* session, before any tool call — the place for the five habits
|
|
38
|
-
*
|
|
37
|
+
* session, before any tool call — the place for the five habits an end-to-end run
|
|
38
|
+
* showed an agent needs on the first
|
|
39
39
|
* turn and would otherwise learn the hard way. Kept under 600 characters so
|
|
40
40
|
* it costs a few hundred tokens once; the full operating guide stays in the
|
|
41
41
|
* summer_agent_playbook prompt / summer_get_agent_playbook tool. The last
|
|
@@ -356,8 +356,9 @@ export async function startMcpServer(options = {}) {
|
|
|
356
356
|
appendMcpLogEvent("mcp:boot_drift_probe_failed", errorDetails(error));
|
|
357
357
|
});
|
|
358
358
|
// Hosted Summer Engine MCP tools (store, publishing, board, Grow): ready
|
|
359
|
-
// before connect, mounted after it
|
|
360
|
-
|
|
359
|
+
// before connect, mounted after it. The first tools/list waits a few
|
|
360
|
+
// seconds for the mount (not under summer doctor, which times the list).
|
|
361
|
+
const hosted = prepareHostedMount(server, undefined, process.env.SUMMER_MCP_DOCTOR === "1" ? { firstListWaitMs: 0 } : {});
|
|
361
362
|
const transport = new StdioServerTransport();
|
|
362
363
|
await server.connect(transport);
|
|
363
364
|
void hosted.mount();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CreatorOperationError, listCreatorReleases, publishCreator, } from "../../core/capabilities/creator.js";
|
|
3
|
+
import { captureGameplay } from "../../core/capabilities/capture-gameplay.js";
|
|
3
4
|
import { exportGame } from "../../core/capabilities/export-game.js";
|
|
4
5
|
import { STORE_TARGETS } from "../../core/capabilities/export-presets.js";
|
|
5
6
|
import { exportTemplates, TEMPLATE_PLATFORMS } from "../../core/capabilities/export-templates.js";
|
|
@@ -39,7 +40,7 @@ async function creatorResult(operation) {
|
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
export function registerCreatorTools(server) {
|
|
42
|
-
server.tool("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. Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings.", {
|
|
43
|
+
server.tool("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). Works without the editor running. Returns path, sha256, size, the manifest or store platform, and warnings.", {
|
|
43
44
|
project: z.string().optional().describe("Project folder with project.godot. Defaults to the MCP's bound project, then the working directory."),
|
|
44
45
|
out: z.string().optional().describe("Output .zip path. Defaults to <project>/.summer/exports/."),
|
|
45
46
|
targets: z
|
|
@@ -65,8 +66,17 @@ export function registerCreatorTools(server) {
|
|
|
65
66
|
.optional()
|
|
66
67
|
.describe("The installed Summer Engine version (Help > About, e.g. 0.7.1). Read automatically on macOS; needed on Windows and Linux."),
|
|
67
68
|
}, async ({ action, platforms, includeDebug, summerVersion }) => creatorResult(() => exportTemplates({ action, platforms, includeDebug, summerVersion })));
|
|
68
|
-
server.tool("
|
|
69
|
-
|
|
69
|
+
server.tool("summer_capture_gameplay", "Capture real gameplay frames without a running editor: starts the game in Summer Engine's offscreen verify instance (a real renderer, a window parked offscreen with no focus, never on screen), lets it run waitSeconds, and saves PNG frames of what the game draws, HUD included. Use for store screenshots (1920x1080 landscape or 1080x1920 portrait). With an editor open, summer_screenshot target game also works. Returns each frame's path, width and height; look at them before using them.", {
|
|
70
|
+
project: z.string().optional().describe("Project folder with project.godot. Defaults to the MCP's bound project, then the working directory."),
|
|
71
|
+
scene: z.string().optional().describe("Scene to start (res://... or uid://...). Default: the project's main scene, which is often a title menu; pass the gameplay scene for gameplay frames."),
|
|
72
|
+
resolution: z.string().optional().describe("Window size WIDTHxHEIGHT (default 1920x1080; 1080x1920 for portrait)."),
|
|
73
|
+
frames: z.number().int().min(1).max(10).optional().describe("Frames to save (default 1)."),
|
|
74
|
+
waitSeconds: z.number().min(0).max(120).optional().describe("Seconds the game runs before the first frame (default 3)."),
|
|
75
|
+
intervalSeconds: z.number().min(0.1).max(60).optional().describe("Seconds between frames (default 1)."),
|
|
76
|
+
out: z.string().optional().describe("Output folder. Defaults to <project>/.summer/captures/<time>/ (ignored by git)."),
|
|
77
|
+
}, async (args) => creatorResult(() => captureGameplay(args)));
|
|
78
|
+
server.tool("summer_publish_build", "Upload an export from summer_export_game to the creator's game on summer.games, through the same store upload Studio uses, straight from disk. A store bundle (format bundle): declare, upload parts, seal, wait until Summer makes the Build, name its client pack, and with publish=true approve it. A web build or native download (format download): upload it as the game's store version for its platform (web, macos-universal, windows-x64, linux-x64; read from the last export) and wait until Summer has checked it. First call with confirm=false: it checks that the game exists for this account and warns when its store page does not list the export's platforms, then returns the target (game name and id, file, digest, size, version) to show the user; set confirm only after they approve. Needs \"summer login --store\". A retry with the same file and clientVersion continues the same upload. Nothing here makes a game live: the owner approves publishing (summer_store_submit).", {
|
|
79
|
+
gameId: z.string().optional().describe("The store game id (from summer_store_list_games, or the Studio store page URL). Without it the call fails with game_required and lists your store games, or says why the store did not list them."),
|
|
70
80
|
file: z.string().optional().describe("Exported .zip. Defaults to the last summer_export_game result."),
|
|
71
81
|
clientVersion: z.string().describe("Build version, vMAJOR.MINOR.PATCH (e.g. v1.0.0); a new upload needs a new version."),
|
|
72
82
|
publish: z.boolean().default(false).describe("Bundles only: also approve the Build for players. A game that has not passed review keeps it as a preview; an agent needs the owner's approval."),
|
|
@@ -90,7 +100,7 @@ export function registerCreatorTools(server) {
|
|
|
90
100
|
...args,
|
|
91
101
|
face: "mcp",
|
|
92
102
|
})));
|
|
93
|
-
server.tool("summer_creator_releases", "
|
|
103
|
+
server.tool("summer_creator_releases", "Deprecated: lists releases on the legacy Summercraft creator API (separate sc_ token), not summer.games. For what players get on summer.games, and which upload can be released, use summer_store_releases.", {
|
|
94
104
|
projectId: z.string().optional().describe("Creator project ID. Defaults to ~/.summer/config.json."),
|
|
95
105
|
limit: z.number().int().min(1).max(100).default(20),
|
|
96
106
|
cursor: z.string().optional().describe("Opaque nextCursor from the previous page."),
|
|
@@ -178,7 +178,7 @@ Use this when summer_get_diagnostics shows a non-zero \`debugger.warnings\` coun
|
|
|
178
178
|
}, async ({ max_warnings, include_stack, raw }) => withEngine(async (client) => {
|
|
179
179
|
// Reuses the existing GetDebuggerErrors op with type: "warning" filter.
|
|
180
180
|
// Engine-side change: ScriptEditorDebugger::get_errors_data() supports
|
|
181
|
-
// include_warnings;
|
|
181
|
+
// include_warnings; the engine's GetDebuggerErrors honours `type` to
|
|
182
182
|
// return warnings only. Diagnostics also exposes `warnings_data`.
|
|
183
183
|
const op = {
|
|
184
184
|
op: "GetDebuggerErrors",
|
|
@@ -297,19 +297,29 @@ Style presets: "realistic" (default), "cartoon", "anime", "none"
|
|
|
297
297
|
For an alpha PNG, set removeBackground: true. Prompt wording alone does not
|
|
298
298
|
guarantee transparency; background removal runs server-side after generation.
|
|
299
299
|
|
|
300
|
-
|
|
300
|
+
Size: aspectRatio (1:1, 16:9, 9:16, 4:3, 3:4, ...) or width + height (the
|
|
301
|
+
smallest size you need). For store art ask width 1920 height 1080 (key art)
|
|
302
|
+
or width 1080 height 1920 (tall cover): the server picks a model that reaches
|
|
303
|
+
that size, or refuses a named model that cannot, before anything is spent.
|
|
304
|
+
Each result reports the real width and height and the model that ran.
|
|
305
|
+
|
|
306
|
+
'options' carries extra model params (seed, negative_prompt, ...); the result
|
|
307
|
+
lists any the server did not use in ignoredOptions.
|
|
301
308
|
|
|
302
309
|
Returns the asset with fileUrl (hosted) and localPath (temp file on disk).
|
|
303
310
|
Use the Read tool on localPath to show the image to the user for approval.
|
|
304
311
|
|
|
305
312
|
Cloud tool — runs on Summer's servers and works WITHOUT the Summer Engine app open.
|
|
306
|
-
Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageGenerationArgsSchema.shape, async ({ prompt, model, style, referenceImageUrl, removeBackground, options }) => {
|
|
313
|
+
Requires authentication: run 'npx -y summer-engine@latest login' first.`, imageGenerationArgsSchema.shape, async ({ prompt, model, style, referenceImageUrl, removeBackground, aspectRatio, width, height, options }) => {
|
|
307
314
|
const result = await mcpGenerate("/api/mcp/generate/image", {
|
|
308
315
|
prompt,
|
|
309
316
|
model,
|
|
310
317
|
style,
|
|
311
318
|
referenceImageUrl,
|
|
312
319
|
removeBackground,
|
|
320
|
+
aspectRatio,
|
|
321
|
+
width,
|
|
322
|
+
height,
|
|
313
323
|
options,
|
|
314
324
|
});
|
|
315
325
|
if (result.error) {
|
|
@@ -457,7 +467,7 @@ Optional rig pass (image-to-3d only):
|
|
|
457
467
|
Set options.rig = true to add an auto-rig pass via Meshy v6. The result
|
|
458
468
|
job (poll via summer_check_job) will include rigAssetId — the asset ID
|
|
459
469
|
of the rigged glb. Use that rigAssetId with summer_generate_motion to
|
|
460
|
-
add animation clips. Adds
|
|
470
|
+
add animation clips. Adds ~60s to the job.
|
|
461
471
|
|
|
462
472
|
Example:
|
|
463
473
|
summer_generate_3d({
|
|
@@ -583,11 +593,11 @@ Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
|
583
593
|
server.tool("summer_generate_video", `Generate a video using AI models via Summer Engine Studio.
|
|
584
594
|
|
|
585
595
|
Known models (text-to-video):
|
|
586
|
-
- "ltx" (default) — LTX Video, fast
|
|
587
|
-
- "kling" — Kling 2 Master, high quality
|
|
588
|
-
- "kling-turbo" — Kling 2.5 Turbo Pro
|
|
589
|
-
- "minimax" — MiniMax
|
|
590
|
-
- "veo3" — Google Veo 3, premium
|
|
596
|
+
- "ltx" (default) — LTX Video, fast
|
|
597
|
+
- "kling" — Kling 2 Master, high quality
|
|
598
|
+
- "kling-turbo" — Kling 2.5 Turbo Pro
|
|
599
|
+
- "minimax" — MiniMax
|
|
600
|
+
- "veo3" — Google Veo 3, premium
|
|
591
601
|
|
|
592
602
|
Known models (image-to-video, when imageUrl provided):
|
|
593
603
|
- "ltx" (default), "kling", "minimax"
|
|
@@ -688,7 +698,7 @@ Requires authentication: run 'npx -y summer-engine@latest login' first.`, {
|
|
|
688
698
|
Backends (pick one):
|
|
689
699
|
- "meshy-library" (default) — a curated mocap clip by motionName on a
|
|
690
700
|
Summer-rigged humanoid (rigAssetId from summer_generate_3d with
|
|
691
|
-
options.rig=true). Fast (~30s),
|
|
701
|
+
options.rig=true). Fast (~30s), real mocap quality.
|
|
692
702
|
Names that always work: idle, walk, run, jump, attack; anything else must
|
|
693
703
|
be an exact library name.
|
|
694
704
|
- "text-to-motion" — custom 2-second clips (60 frames) from text prompts on
|
|
@@ -2,6 +2,6 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
/**
|
|
3
3
|
* summer_open — the MCP face of `summer open`. Same behavior as the CLI
|
|
4
4
|
* (src/core/capabilities/navigation/open.ts runOpen); this file only supplies
|
|
5
|
-
* the engine client and the browser launcher.
|
|
5
|
+
* the engine client and the browser launcher.
|
|
6
6
|
*/
|
|
7
7
|
export declare function registerNavigationTools(server: McpServer): void;
|
|
@@ -6,7 +6,7 @@ import { openArgsShape, runOpen } from "../../core/capabilities/navigation/open.
|
|
|
6
6
|
/**
|
|
7
7
|
* summer_open — the MCP face of `summer open`. Same behavior as the CLI
|
|
8
8
|
* (src/core/capabilities/navigation/open.ts runOpen); this file only supplies
|
|
9
|
-
* the engine client and the browser launcher.
|
|
9
|
+
* the engine client and the browser launcher.
|
|
10
10
|
*/
|
|
11
11
|
export function registerNavigationTools(server) {
|
|
12
12
|
server.tool("summer_open", `Open the exact summerengine.com page or Summer Engine editor surface the user wants to LOOK at, by intent name — or, with open:false, return the URL / engine op without opening anything. The result ALWAYS carries the resolved url or op, also after opening, so you can tell the user where they landed.
|
|
@@ -16,7 +16,7 @@ const NODE_PATH_LIMIT_BYTES = 256;
|
|
|
16
16
|
const MIN_PLACEMENT_FLOOR_DISTANCE = 0.001;
|
|
17
17
|
/** Mirrors the engine's SnapToSurface direction guard (length² > 1e-5). */
|
|
18
18
|
const MIN_SNAP_DIRECTION_LENGTH_SQUARED = 0.00001;
|
|
19
|
-
/** Starcast's own ceilings
|
|
19
|
+
/** Starcast's own ceilings in the engine: the engine
|
|
20
20
|
* measures the compact receipt as UTF-8 JSON, downgrades full -> summary
|
|
21
21
|
* above 12 KiB, and strips secondary paths above 5 KiB, so a receipt past the
|
|
22
22
|
* ceiling for its returnedDetail is one this CLI does not understand. Unlike
|
|
@@ -353,8 +353,8 @@ Static frame only — one moment, not motion. For a SEQUENCE of frames over time
|
|
|
353
353
|
if (snap.sceneHadLight === false) {
|
|
354
354
|
warnings.push("WARNING: this scene has no light — lit materials may appear black when played.");
|
|
355
355
|
}
|
|
356
|
-
// The engine ALWAYS synthesizes the preview camera (
|
|
357
|
-
//
|
|
356
|
+
// The engine ALWAYS synthesizes the preview camera (it sets
|
|
357
|
+
// used_synthetic_camera unconditionally) — the flag says nothing
|
|
358
358
|
// about the scene's own cameras. sceneHasCamera above is the
|
|
359
359
|
// authoritative "does this scene have a camera" answer.
|
|
360
360
|
if (snap.usedSyntheticCamera) {
|
|
@@ -41,8 +41,7 @@ export interface WithEngineOptions<T> {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* An auth failure is the ONE class of thrown error that is provably pre-apply:
|
|
44
|
-
* the engine rejects on the Bearer-token check
|
|
45
|
-
* BEFORE the op is queued or applied, so reconnecting with the fresh api-token and
|
|
44
|
+
* the engine rejects on the Bearer-token check BEFORE the op is queued or applied, so reconnecting with the fresh api-token and
|
|
46
45
|
* retrying cannot double-apply a mutation. This is exactly the stale-token case
|
|
47
46
|
* after the engine rotates its api-token on relaunch.
|
|
48
47
|
*
|
|
@@ -30,8 +30,7 @@ function readClassifiers(result) {
|
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
32
|
* An auth failure is the ONE class of thrown error that is provably pre-apply:
|
|
33
|
-
* the engine rejects on the Bearer-token check
|
|
34
|
-
* BEFORE the op is queued or applied, so reconnecting with the fresh api-token and
|
|
33
|
+
* the engine rejects on the Bearer-token check BEFORE the op is queued or applied, so reconnecting with the fresh api-token and
|
|
35
34
|
* retrying cannot double-apply a mutation. This is exactly the stale-token case
|
|
36
35
|
* after the engine rotates its api-token on relaunch.
|
|
37
36
|
*
|
package/gemini-extension.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.4.1",
|
|
5
5
|
"description": "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills. Use with the npm CLI for skill files on disk.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"./library/skills/asset-strategy/",
|
|
36
36
|
"./library/skills/audio-direction/",
|
|
37
37
|
"./library/skills/auto-fire-targeting/",
|
|
38
|
+
"./library/skills/bounded-engine-runs/",
|
|
38
39
|
"./library/skills/brainstorm-game/",
|
|
39
40
|
"./library/skills/brainstorming/",
|
|
40
41
|
"./library/skills/browse-templates/",
|
|
@@ -46,6 +47,7 @@
|
|
|
46
47
|
"./library/skills/character-portrait/",
|
|
47
48
|
"./library/skills/cinematic-cutscene/",
|
|
48
49
|
"./library/skills/combat-basics/",
|
|
50
|
+
"./library/skills/compatibility-renderer-traps/",
|
|
49
51
|
"./library/skills/concept-art/",
|
|
50
52
|
"./library/skills/create-asset-sheet/",
|
|
51
53
|
"./library/skills/debug/",
|
package/hooks/session-start.sh
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Event: SessionStart (matcher: startup|clear|compact)
|
|
5
5
|
# Purpose: Orient Claude on every fresh Summer-enabled session.
|
|
6
|
-
# Detect Summer project + GameSoul + doctor health
|
|
7
|
-
#
|
|
6
|
+
# Detect Summer project + GameSoul + doctor health and surface a short
|
|
7
|
+
# greeting as additional context.
|
|
8
8
|
#
|
|
9
9
|
# Input: JSON on stdin with { session_id, source, model, cwd, ... }
|
|
10
10
|
# Common Claude Code env vars: $CLAUDE_PROJECT_DIR, $CLAUDE_PLUGIN_ROOT
|
package/integrations/README.md
CHANGED
|
@@ -1,94 +1,88 @@
|
|
|
1
|
-
# integrations
|
|
1
|
+
# integrations/: which agents Summer supports
|
|
2
2
|
|
|
3
|
-
One folder per supported client.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`
|
|
9
|
-
|
|
3
|
+
One folder per supported client. Each folder says how that client consumes
|
|
4
|
+
the library.
|
|
5
|
+
|
|
6
|
+
Adding an agent: one row in `src/installer/agent-table.ts`, one folder here,
|
|
7
|
+
an empty entry in `scripts/generate-registry/targets.ts` (plus a builder in
|
|
8
|
+
`scripts/generate-registry/manifests.ts` if the client has a manifest file),
|
|
9
|
+
then `npm run generate:registry`. Never hand-edit root files. Tests fail when
|
|
10
|
+
the table, this directory and `targets.ts` disagree.
|
|
10
11
|
|
|
11
12
|
Each folder contains:
|
|
12
13
|
|
|
13
|
-
- `README.md
|
|
14
|
-
file in this repo)
|
|
15
|
-
|
|
14
|
+
- `README.md`: what gets generated where, or (for clients with no manifest
|
|
15
|
+
file in this repo) what `summer setup <client>` writes at install time.
|
|
16
|
+
- `manifest-target.json`: generated file -> repo-root destination (empty when
|
|
17
|
+
nothing is generated). Mirrors `scripts/generate-registry/targets.ts`; a test
|
|
18
|
+
fails if they drift.
|
|
16
19
|
|
|
17
|
-
`summer setup <client>` (default `--scope user`) writes the MCP config
|
|
18
|
-
installs every skill (`skills install --all`, preview included;
|
|
19
|
-
skips preview) in the
|
|
20
|
-
|
|
21
|
-
`--
|
|
22
|
-
|
|
23
|
-
scope with a warning. `.mcp.json` at the repo root
|
|
24
|
-
(the MCP pointer the claude / codex / cursor / factory manifests share) is
|
|
25
|
-
generated too — `registry/generated/mcp.json -> .mcp.json`.
|
|
26
|
-
- `manifest-target.json` — mapping of generated file -> repo-root destination
|
|
27
|
-
(empty when nothing is generated). Mirrors
|
|
28
|
-
`scripts/generate-registry/targets.ts`; a test fails if they drift.
|
|
20
|
+
`summer setup <client>` (default `--scope user`) writes the MCP config and
|
|
21
|
+
installs every skill (`skills install --all`, preview included;
|
|
22
|
+
`--stable-only` skips preview) in the same scope, so a user-scope MCP config
|
|
23
|
+
never sits beside project-scope skills. `--scope project` moves both;
|
|
24
|
+
`--recommended` installs only the recommended subset. Clients whose MCP config
|
|
25
|
+
is user-only fall back to user scope with a warning.
|
|
29
26
|
|
|
30
|
-
Generated root
|
|
31
|
-
…) are build artifacts of `integrations/<agent>` + `library
|
|
32
|
-
`_generated` banner says so
|
|
33
|
-
|
|
34
|
-
`library/`, `registry/generated/`, and the applied root files.
|
|
27
|
+
Generated root files (`.claude-plugin/plugin.json`, `gemini-extension.json`,
|
|
28
|
+
`.mcp.json`, …) are build artifacts of `integrations/<agent>` + `library/`.
|
|
29
|
+
Their `_generated` banner says so. CI `--check` fails on any drift between
|
|
30
|
+
`library/`, `registry/generated/` and the applied root files.
|
|
35
31
|
|
|
36
32
|
How the plugin manifests reference skills, and what is verified:
|
|
37
33
|
|
|
38
|
-
- **Claude Code
|
|
39
|
-
array of `./`-relative directory paths and
|
|
40
|
-
scan
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
manifest's `skills` array is not read (open gap, see the table).
|
|
34
|
+
- **Claude Code**: the plugin-manifest `skills` field accepts a string or an
|
|
35
|
+
array of `./`-relative directory paths and extends the default `skills/`
|
|
36
|
+
scan. The generated `.claude-plugin/plugin.json` lists one entry per skill
|
|
37
|
+
(`./library/skills/<slug>/`). The docs do not say whether a listed directory
|
|
38
|
+
loads as one skill or is scanned for skill subfolders, and the smoke tests
|
|
39
|
+
cover the `summer setup` path, not the marketplace one. Treat the
|
|
40
|
+
marketplace install as unverified.
|
|
41
|
+
- **Codex**: `.codex-plugin/plugin.json` carries the same `skills` array.
|
|
42
|
+
Whether Codex reads that field is **unverified**.
|
|
43
|
+
- **Factory**: a plugin install reads skills only from a root `skills/`
|
|
44
|
+
directory, so it exposes no skills. `summer setup factory` installs them.
|
|
45
|
+
|
|
46
|
+
Paths below are for macOS; `~` is `%USERPROFILE%` on Windows. Other OS paths
|
|
47
|
+
are listed where they differ.
|
|
53
48
|
|
|
54
49
|
| Client | Manifest generated in this repo | `summer setup` writes |
|
|
55
50
|
|---|---|---|
|
|
56
|
-
| claude | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `.mcp.json` | MCP: `~/.claude.json`;
|
|
51
|
+
| claude | `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `.mcp.json` | MCP: `~/.claude.json`; project `.mcp.json`; skills: `~/.claude/skills`; project `.claude/skills` (`<skill>/SKILL.md`) |
|
|
57
52
|
| claude-desktop | — | MCP: `~/Library/Application Support/Claude/claude_desktop_config.json`; Linux `~/.config/Claude/claude_desktop_config.json`; Windows `%APPDATA%/Claude/claude_desktop_config.json`; no skills folder (MCP only) |
|
|
58
|
-
| codex | `.codex-plugin/plugin.json` | MCP: `~/.codex/config.toml`;
|
|
59
|
-
| cursor | `.cursor-plugin/plugin.json` | MCP: `~/.cursor/mcp.json`;
|
|
60
|
-
| windsurf | — | MCP: `~/.codeium/windsurf/mcp_config.json`;
|
|
61
|
-
| antigravity | — | MCP: `~/.gemini/config/mcp_config.json`;
|
|
62
|
-
| gemini (legacy) | `gemini-extension.json` | MCP: `~/.gemini/extensions/summer-engine/gemini-extension.json`;
|
|
63
|
-
| cline | — | MCP: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; skills: `~/.cline/skills
|
|
64
|
-
| cline-cli | — | MCP: `~/.cline/data/settings/cline_mcp_settings.json`;
|
|
65
|
-
| roo-code (legacy) | — | MCP: `~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; skills: `~/Documents/Roo/Rules
|
|
66
|
-
| kilo-code | — | MCP: `~/.config/kilo/kilo.json`; Windows `%APPDATA%/kilo/kilo.json
|
|
67
|
-
| github-copilot | — | MCP: `~/.copilot/mcp-config.json`;
|
|
68
|
-
| vscode-copilot | — | MCP: `~/Library/Application Support/Code/User/mcp.json`; Linux `~/.config/Code/User/mcp.json`; Windows `%APPDATA%/Code/User/mcp.json
|
|
69
|
-
| visual-studio | — | MCP: `~/.mcp.json`;
|
|
53
|
+
| codex | `.codex-plugin/plugin.json` | MCP: `~/.codex/config.toml`; project `.codex/config.toml`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
54
|
+
| cursor | `.cursor-plugin/plugin.json` | MCP: `~/.cursor/mcp.json`; project `.cursor/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
55
|
+
| windsurf | — | MCP: `~/.codeium/windsurf/mcp_config.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
56
|
+
| antigravity | — | MCP: `~/.gemini/config/mcp_config.json`; project `.agents/mcp_config.json`; skills: `~/.gemini/config/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
57
|
+
| gemini (legacy) | `gemini-extension.json` | MCP: `~/.gemini/extensions/summer-engine/gemini-extension.json`; skills: `~/.gemini/extensions/summer-engine/skills` (`<skill>/SKILL.md`) |
|
|
58
|
+
| cline | — | MCP: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; skills: `~/.cline/skills`; project `.cline/skills` (`<skill>/SKILL.md`) |
|
|
59
|
+
| cline-cli | — | MCP: `~/.cline/data/settings/cline_mcp_settings.json`; skills: `~/.cline/skills`; project `.cline/skills` (`<skill>/SKILL.md`) |
|
|
60
|
+
| roo-code (legacy) | — | MCP: `~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json`; skills: `~/Documents/Roo/Rules`; project `.clinerules` (rule files `summer-<skill>.md`) |
|
|
61
|
+
| kilo-code | — | MCP: `~/.config/kilo/kilo.json`; Windows `%APPDATA%/kilo/kilo.json`; project `kilo.json`; skills: `~/.kilo/skills`; project `.kilo/skills` (`<skill>/SKILL.md`) |
|
|
62
|
+
| github-copilot | — | MCP: `~/.copilot/mcp-config.json`; project `.mcp.json`; skills: `~/.copilot/skills`; project `.github/skills` (`<skill>/SKILL.md`) |
|
|
63
|
+
| vscode-copilot | — | MCP: `~/Library/Application Support/Code/User/mcp.json`; Linux `~/.config/Code/User/mcp.json`; Windows `%APPDATA%/Code/User/mcp.json`; project `.vscode/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
64
|
+
| visual-studio | — | MCP: `~/.mcp.json`; project `.mcp.json`; no skills folder (MCP only) |
|
|
70
65
|
| copilot-jetbrains | — | MCP: `~/.config/github-copilot/intellij/mcp.json`; Windows `%APPDATA%/github-copilot/intellij/mcp.json`; no skills folder (MCP only) |
|
|
71
|
-
| opencode | — | MCP: `~/.config/opencode/opencode.json`; Windows `%APPDATA%/opencode/opencode.json
|
|
72
|
-
| zed | — | MCP: `~/.config/zed/settings.json`; Windows `%APPDATA%/zed/settings.json`; skills: `~/.agents/skills
|
|
73
|
-
| kiro | — | MCP: `~/.kiro/settings/mcp.json`;
|
|
74
|
-
| goose | — | MCP: `~/.config/goose/config.yaml`; Windows `%APPDATA%/Block/goose/config/config.yaml`; skills: `~/.config/agents/skills
|
|
75
|
-
| hermes | — | MCP: `~/.hermes/config.yaml`;
|
|
76
|
-
| trae | — | MCP: `.trae/mcp.json`
|
|
77
|
-
| qwen-code | — | MCP: `~/.qwen/settings.json`;
|
|
78
|
-
| kimi-code | — | MCP: `~/.kimi-code/mcp.json`;
|
|
79
|
-
| crush | — | MCP: `~/.config/crush/crushrc`;
|
|
80
|
-
| amp | — | MCP: `~/.config/amp/settings.json`; Windows `%APPDATA%/amp/settings.json`; skills: `~/.
|
|
81
|
-
| factory | `.factory-plugin/plugin.json` | MCP: `~/.factory/mcp.json`;
|
|
82
|
-
| junie | — | MCP: `~/.junie/mcp/mcp.json`;
|
|
83
|
-
| warp | — | MCP: `~/.warp/.mcp.json`;
|
|
84
|
-
| rovo-dev | — | MCP: `~/.rovodev/mcp.json`;
|
|
85
|
-
| qoder | — | MCP: `~/.qoder/settings.json`;
|
|
86
|
-
| grok-build | — | MCP: `~/.grok/config.toml`;
|
|
87
|
-
| mistral-vibe | — | MCP: `~/.vibe/config.toml`;
|
|
88
|
-
| lm-studio | — | MCP: `~/.lmstudio/mcp.json`;
|
|
66
|
+
| opencode | — | MCP: `~/.config/opencode/opencode.json`; Windows `%APPDATA%/opencode/opencode.json`; project `opencode.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
67
|
+
| zed | — | MCP: `~/.config/zed/settings.json`; Windows `%APPDATA%/zed/settings.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
68
|
+
| kiro | — | MCP: `~/.kiro/settings/mcp.json`; project `.kiro/settings/mcp.json`; skills: `~/.kiro/skills`; project `.kiro/skills` (`<skill>/SKILL.md`) |
|
|
69
|
+
| goose | — | MCP: `~/.config/goose/config.yaml`; Windows `%APPDATA%/Block/goose/config/config.yaml`; skills: `~/.config/agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
70
|
+
| hermes | — | MCP: `~/.hermes/config.yaml`; skills: `~/.hermes/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
71
|
+
| trae | — | MCP: `.trae/mcp.json` (project only); no skills folder (MCP only) |
|
|
72
|
+
| qwen-code | — | MCP: `~/.qwen/settings.json`; project `.qwen/settings.json`; skills: `~/.qwen/skills`; project `.qwen/skills` (`<skill>/SKILL.md`) |
|
|
73
|
+
| kimi-code | — | MCP: `~/.kimi-code/mcp.json`; project `.kimi-code/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
74
|
+
| crush | — | MCP: `~/.config/crush/crushrc`; project `.crushrc`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
75
|
+
| amp | — | MCP: `~/.config/amp/settings.json`; Windows `%APPDATA%/amp/settings.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
76
|
+
| factory | `.factory-plugin/plugin.json` | MCP: `~/.factory/mcp.json`; project `.factory/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
77
|
+
| junie | — | MCP: `~/.junie/mcp/mcp.json`; project `.junie/mcp/mcp.json`; no skills folder (MCP only) |
|
|
78
|
+
| warp | — | MCP: `~/.warp/.mcp.json`; project `.warp/.mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
79
|
+
| rovo-dev | — | MCP: `~/.rovodev/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
80
|
+
| qoder | — | MCP: `~/.qoder/settings.json`; project `.mcp.json`; skills: `~/.qoder/skills`; project `.qoder/skills` (`<skill>/SKILL.md`) |
|
|
81
|
+
| grok-build | — | MCP: `~/.grok/config.toml`; project `.grok/config.toml`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
82
|
+
| mistral-vibe | — | MCP: `~/.vibe/config.toml`; project `.vibe/config.toml`; skills: `~/.vibe/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
83
|
+
| lm-studio | — | MCP: `~/.lmstudio/mcp.json`; no skills folder (MCP only) |
|
|
89
84
|
|
|
90
|
-
Source of truth for the setup paths: `src/installer/agent-
|
|
91
|
-
`src/cli/commands/skills.ts`.
|
|
85
|
+
Source of truth for the setup paths: `src/installer/agent-table.ts`.
|
|
92
86
|
|
|
93
87
|
Not supported on purpose (checked 2026-09-11): OpenHands CLI (its `[mcp] stdio_servers`
|
|
94
88
|
inline-table array has a known upstream write bug), Xcode's agent folders (Apple
|
|
@@ -11,9 +11,6 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
11
11
|
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
12
12
|
well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
|
|
13
13
|
|
|
14
|
-
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
15
|
-
well (`registry/generated/mcp.json -> .mcp.json`).
|
|
16
|
-
|
|
17
14
|
Never edit the destination files by hand — edit `library/` resources or the
|
|
18
15
|
manifest builders in `scripts/generate-registry/manifests.ts`, then run
|
|
19
16
|
`npm run generate:registry`. CI `--check` fails on any drift.
|
|
@@ -4,8 +4,7 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
4
4
|
|
|
5
5
|
- `registry/generated/plugin.codex.json` -> `.codex-plugin/plugin.json`
|
|
6
6
|
(plugin manifest with the Codex app-store `interface` block; full skill
|
|
7
|
-
list at `./library/skills/<slug
|
|
8
|
-
is fixed by generation; version stamped from `package.json`).
|
|
7
|
+
list at `./library/skills/<slug>/`; version stamped from `package.json`).
|
|
9
8
|
|
|
10
9
|
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
11
10
|
well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
|
|
@@ -5,7 +5,7 @@ is intentionally empty. Support is delivered at install time by
|
|
|
5
5
|
`summer setup copilot-jetbrains` (aliases: `jetbrains-copilot`, `intellij-copilot`, `copilot-intellij`), which writes:
|
|
6
6
|
|
|
7
7
|
- MCP config: `~/.config/github-copilot/intellij/mcp.json`; Windows `%APPDATA%/github-copilot/intellij/mcp.json` (user); user scope only (project requests fall back with a warning).
|
|
8
|
-
Shape:
|
|
8
|
+
Shape: `servers.summer-engine = { command, args }`.
|
|
9
9
|
- Skills: none. Copilot in JetBrains documents no skills folder; the MCP server ships summer_get_agent_playbook for in-chat guidance.
|
|
10
10
|
- After: Restart the JetBrains IDE and open Copilot Chat in Agent mode; summer-engine shows in the tools list.
|
|
11
11
|
|
|
@@ -5,8 +5,7 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
5
5
|
- `registry/generated/plugin.cursor.json` -> `.cursor-plugin/plugin.json`
|
|
6
6
|
(Cursor plugin manifest: displayName/publisher/category, cursor-specific
|
|
7
7
|
hooks file `./hooks/hooks-cursor.json`, full skill list at
|
|
8
|
-
`./library/skills/<slug
|
|
9
|
-
by generation; version stamped from `package.json`).
|
|
8
|
+
`./library/skills/<slug>/`; version stamped from `package.json`).
|
|
10
9
|
|
|
11
10
|
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
12
11
|
well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
|