summer-engine 4.0.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +3 -2
- package/.codex-plugin/plugin.json +15 -11
- package/.cursor-plugin/plugin.json +5 -3
- package/.factory-plugin/plugin.json +3 -2
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +37 -0
- package/README.md +20 -9
- package/dist/cli/commands/config.js +3 -2
- package/dist/cli/commands/create.js +12 -3
- package/dist/cli/commands/list.d.ts +5 -0
- package/dist/cli/commands/list.js +30 -13
- package/dist/cli/commands/memory.js +6 -2
- package/dist/cli/commands/ops.d.ts +20 -3
- package/dist/cli/commands/ops.js +55 -27
- package/dist/cli/commands/setup.d.ts +2 -0
- package/dist/cli/commands/setup.js +219 -16
- package/dist/cli/commands/skills.js +20 -7
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.js +36 -21
- package/dist/core/capabilities/apps.d.ts +10 -10
- package/dist/core/capabilities/audit/args.d.ts +6 -6
- package/dist/core/capabilities/fabricate-mesh.d.ts +2 -2
- package/dist/core/capabilities/game-task-plan.d.ts +2 -2
- package/dist/core/capabilities/hdri-import.d.ts +2 -2
- package/dist/core/capabilities/motion-generation.d.ts +2 -2
- package/dist/core/capabilities/placement.d.ts +23 -23
- package/dist/core/capabilities/runtime-control.d.ts +38 -38
- package/dist/core/capabilities/seeing/args.d.ts +16 -16
- package/dist/core/capabilities/ui-control.d.ts +2 -2
- package/dist/core/capabilities/world-snapshot.d.ts +4 -4
- package/dist/core/library-search.d.ts +2 -2
- package/dist/core/ops/areas.d.ts +11 -0
- package/dist/core/ops/areas.js +24 -0
- package/dist/core/ops/catalog.d.ts +4 -0
- package/dist/core/ops/catalog.js +13 -1
- package/dist/core/ops/cloud.d.ts +10 -2
- package/dist/core/ops/cloud.js +51 -28
- package/dist/core/ops/contract.d.ts +2 -1
- package/dist/core/ops/contract.js +2 -10
- package/dist/core/ops/public-catalog.d.ts +48 -0
- package/dist/core/ops/public-catalog.js +56 -0
- package/dist/core/ops/search.d.ts +0 -1
- package/dist/core/ops/search.js +169 -37
- package/dist/installer/agent-config.js +5 -0
- package/dist/installer/agent-table.d.ts +9 -0
- package/dist/installer/agent-table.js +23 -2
- package/dist/installer/cli-permissions.d.ts +65 -0
- package/dist/installer/cli-permissions.js +182 -0
- package/dist/installer/setup.d.ts +2 -0
- package/dist/installer/setup.js +3 -0
- package/dist/installer/skills-refresh.d.ts +29 -0
- package/dist/installer/skills-refresh.js +261 -0
- package/dist/installer/version-check.d.ts +22 -2
- package/dist/installer/version-check.js +66 -9
- package/dist/mcp/ops-surface.js +16 -6
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.js +32 -3
- package/dist/project-memory/agent-instructions.d.ts +47 -0
- package/dist/project-memory/agent-instructions.js +226 -0
- package/gemini-extension.json +3 -2
- package/integrations/README.md +1 -1
- package/integrations/claude/README.md +6 -0
- package/integrations/claude/manifest-target.json +4 -0
- package/integrations/gemini/README.md +11 -0
- package/integrations/windsurf/README.md +1 -1
- package/library/skills/3d-lighting/SKILL.md +16 -0
- package/library/skills/README.md +5 -4
- package/library/skills/adaptive-music/SKILL.md +21 -0
- package/library/skills/agent-playtesting/SKILL.md +22 -0
- package/library/skills/ai-characters-in-games/SKILL.md +15 -0
- package/library/skills/ambient-bed/SKILL.md +16 -0
- package/library/skills/animated-loop/SKILL.md +19 -0
- package/library/skills/animation-tree/SKILL.md +26 -0
- package/library/skills/art-direction/SKILL.md +14 -0
- package/library/skills/asset-strategy/SKILL.md +30 -0
- package/library/skills/audio-direction/SKILL.md +16 -0
- package/library/skills/auto-fire-targeting/SKILL.md +14 -0
- package/library/skills/brainstorm-game/SKILL.md +13 -0
- package/library/skills/browse-templates/SKILL.md +10 -0
- package/library/skills/camera-rigs/SKILL.md +20 -0
- package/library/skills/character-animation-wiring/SKILL.md +24 -0
- package/library/skills/character-model/SKILL.md +28 -0
- package/library/skills/character-movement/SKILL.md +24 -0
- package/library/skills/character-portrait/SKILL.md +15 -0
- package/library/skills/cinematic-cutscene/SKILL.md +21 -0
- package/library/skills/combat-basics/SKILL.md +19 -0
- package/library/skills/compatibility-renderer-traps/SKILL.md +11 -0
- package/library/skills/concept-art/SKILL.md +13 -0
- package/library/skills/concept-to-level/SKILL.md +20 -1
- package/library/skills/concept-to-level/resource.yaml +2 -2
- package/library/skills/create-asset-sheet/SKILL.md +18 -0
- package/library/skills/debug/SKILL.md +32 -0
- package/library/skills/debugging-game-feel/SKILL.md +12 -0
- package/library/skills/design-level/SKILL.md +17 -0
- package/library/skills/design-mechanic/SKILL.md +17 -0
- package/library/skills/design-npc/SKILL.md +21 -0
- package/library/skills/diagnosing-perf-regressions/SKILL.md +12 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +23 -0
- package/library/skills/environment-kit/SKILL.md +23 -0
- package/library/skills/export-and-ship/SKILL.md +23 -0
- package/library/skills/fabricating-assets/SKILL.md +23 -0
- package/library/skills/facial-and-lipsync/SKILL.md +22 -0
- package/library/skills/fps-controller/SKILL.md +17 -0
- package/library/skills/game-feel/SKILL.md +26 -0
- package/library/skills/gameskill/SKILL.md +11 -0
- package/library/skills/gdscript-patterns/SKILL.md +15 -0
- package/library/skills/generate-motion/SKILL.md +21 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +17 -0
- package/library/skills/grow-analytics/SKILL.md +10 -0
- package/library/skills/headless-scripting/SKILL.md +13 -0
- package/library/skills/in-game-purchases/SKILL.md +11 -0
- package/library/skills/instantiate-asset-pack/SKILL.md +17 -0
- package/library/skills/make-game/SKILL.md +29 -0
- package/library/skills/multiplayer/SKILL.md +12 -0
- package/library/skills/multiplayer-movement/SKILL.md +18 -0
- package/library/skills/multiplayer-project/SKILL.md +17 -0
- package/library/skills/multiplayer-publish/SKILL.md +17 -0
- package/library/skills/multiplayer-state/SKILL.md +16 -0
- package/library/skills/multiplayer-testing/SKILL.md +15 -0
- package/library/skills/music-track/SKILL.md +16 -0
- package/library/skills/navigate-summer/SKILL.md +15 -0
- package/library/skills/new-project/SKILL.md +11 -0
- package/library/skills/organic-model/SKILL.md +24 -0
- package/library/skills/pixel-art/SKILL.md +15 -0
- package/library/skills/play/SKILL.md +18 -0
- package/library/skills/playtesting-a-feature/SKILL.md +23 -0
- package/library/skills/procedural-animation/SKILL.md +18 -0
- package/library/skills/prop-model/SKILL.md +23 -0
- package/library/skills/publish-your-game/SKILL.md +27 -0
- package/library/skills/release-readiness/SKILL.md +12 -0
- package/library/skills/remote-deploy/SKILL.md +14 -0
- package/library/skills/retarget/SKILL.md +20 -0
- package/library/skills/running-in-the-cloud/SKILL.md +10 -0
- package/library/skills/save-load/SKILL.md +15 -0
- package/library/skills/scene-composition/SKILL.md +17 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +24 -0
- package/library/skills/scene-scripting/SKILL.md +30 -0
- package/library/skills/scene-to-level/SKILL.md +22 -0
- package/library/skills/skill-test/SKILL.md +10 -0
- package/library/skills/skybox-panorama/SKILL.md +20 -0
- package/library/skills/sound-effect/SKILL.md +23 -0
- package/library/skills/spatial-placement/SKILL.md +30 -0
- package/library/skills/sprite-sheet/SKILL.md +23 -0
- package/library/skills/store-art/SKILL.md +11 -0
- package/library/skills/store-listing/SKILL.md +10 -0
- package/library/skills/summer-analytics/SKILL.md +15 -0
- package/library/skills/summer-apps/SKILL.md +29 -0
- package/library/skills/summer-assets/SKILL.md +31 -1
- package/library/skills/summer-assets/resource.yaml +2 -2
- package/library/skills/summer-cli/SKILL.md +133 -0
- package/library/skills/summer-cli/resource.yaml +31 -0
- package/library/skills/summer-friends/SKILL.md +14 -0
- package/library/skills/summer-leaderboards/SKILL.md +16 -0
- package/library/skills/summer-match-results/SKILL.md +17 -0
- package/library/skills/summer-matchmaking/SKILL.md +17 -0
- package/library/skills/summer-parties/SKILL.md +14 -0
- package/library/skills/summer-player-data/SKILL.md +14 -0
- package/library/skills/summer-store/SKILL.md +15 -0
- package/library/skills/summer-world-chat/SKILL.md +14 -0
- package/library/skills/summer-world-saves/SKILL.md +14 -0
- package/library/skills/text-to-motion/SKILL.md +15 -0
- package/library/skills/tileable-texture/SKILL.md +18 -0
- package/library/skills/trailer-shot/SKILL.md +18 -0
- package/library/skills/tune-performance/SKILL.md +26 -0
- package/library/skills/ui-basics/SKILL.md +14 -0
- package/library/skills/ui-graphics/SKILL.md +17 -0
- package/library/skills/use-widget-asset/SKILL.md +14 -0
- package/library/skills/using-summer/SKILL.md +26 -0
- package/library/skills/using-summer/resource.yaml +2 -1
- package/library/skills/vehicle-model/SKILL.md +27 -0
- package/library/skills/verifying-scenes/SKILL.md +29 -0
- package/library/skills/vfx-dissolve/SKILL.md +19 -0
- package/library/skills/vfx-fire/SKILL.md +26 -0
- package/library/skills/vfx-hit-spark/SKILL.md +23 -0
- package/library/skills/vfx-lightning/SKILL.md +23 -0
- package/library/skills/vfx-magic-glow/SKILL.md +23 -0
- package/library/skills/vfx-muzzle-flash/SKILL.md +23 -0
- package/library/skills/vfx-smoke/SKILL.md +26 -0
- package/library/skills/vfx-water-ripple/SKILL.md +23 -0
- package/library/skills/voice-line/SKILL.md +16 -0
- package/library/skills/web-and-touch-input/SKILL.md +19 -0
- package/library/skills/web-compatibility-look/SKILL.md +20 -0
- package/library/skills/world-building-3d/SKILL.md +28 -0
- package/package.json +3 -2
- package/registry/generated/counts.json +2 -2
- package/registry/generated/gemini-extension.json +3 -2
- package/registry/generated/index.json +157 -118
- package/registry/generated/marketplace.claude.json +2 -2
- package/registry/generated/plugin.claude-directory.json +168 -0
- package/registry/generated/plugin.claude.json +3 -2
- package/registry/generated/plugin.codex.json +15 -11
- package/registry/generated/plugin.cursor.json +5 -3
- package/registry/generated/plugin.factory.json +3 -2
- package/registry/generated/server.json +11 -2
- package/registry/generated/skills-index.md +5 -4
- package/registry/generated/skills-registry.json +16 -2
- package/registry/operations/legacy-names.json +35 -0
- package/registry/operations/public-catalog.json +33160 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { existsSync, lstatSync, readFileSync, readlinkSync, realpathSync, writeFileSync } from "fs";
|
|
2
|
+
import { homedir } from "os";
|
|
3
|
+
import { basename, dirname, join, parse, relative, resolve, isAbsolute } from "path";
|
|
4
|
+
import { PACKAGE_ROOT } from "../core/package-root.js";
|
|
5
|
+
/**
|
|
6
|
+
* AGENTS.md and CLAUDE.md in a Summer project. AGENTS.md is the one file
|
|
7
|
+
* Codex, Cursor, Copilot, Amp and other agents read in every session;
|
|
8
|
+
* Claude Code reads CLAUDE.md, which here only imports AGENTS.md.
|
|
9
|
+
* `summer create` writes both; `summer setup --yes` inside a project adds
|
|
10
|
+
* them when missing.
|
|
11
|
+
*
|
|
12
|
+
* An existing file is never overwritten: Summer adds one marked block once,
|
|
13
|
+
* and later runs replace only that block. A link is followed only to a file
|
|
14
|
+
* inside the project, and a CLAUDE.md that is the same file as AGENTS.md
|
|
15
|
+
* gets the AGENTS.md block only. The five commands are the list in the
|
|
16
|
+
* summer-cli skill (between its project-commands markers), so the two
|
|
17
|
+
* cannot drift; the skill's test runs every command both of them teach.
|
|
18
|
+
*/
|
|
19
|
+
export const SUMMER_BLOCK_START = "<!-- summer-engine:start. summer setup updates only this block; write your own notes outside it. -->";
|
|
20
|
+
export const SUMMER_BLOCK_END = "<!-- summer-engine:end -->";
|
|
21
|
+
const CLAUDE_IMPORTS = new Set(["@AGENTS.md", "@./AGENTS.md"]);
|
|
22
|
+
const SKILL_PATH = ["library", "skills", "summer-cli", "SKILL.md"];
|
|
23
|
+
const COMMANDS = /<!-- project-commands[^>]*-->\n([\s\S]*?)\n<!-- \/project-commands -->/;
|
|
24
|
+
/** The numbered command list from the summer-cli skill. */
|
|
25
|
+
export function projectCommands(skill = readFileSync(join(PACKAGE_ROOT, ...SKILL_PATH), "utf-8")) {
|
|
26
|
+
const match = COMMANDS.exec(skill);
|
|
27
|
+
if (!match)
|
|
28
|
+
throw new Error("The summer-cli skill has no project-commands list.");
|
|
29
|
+
return match[1].trim();
|
|
30
|
+
}
|
|
31
|
+
/** The Summer block of AGENTS.md, markers included. */
|
|
32
|
+
export function renderAgentsBlock(commands = projectCommands()) {
|
|
33
|
+
return [
|
|
34
|
+
SUMMER_BLOCK_START,
|
|
35
|
+
"# Summer Engine game",
|
|
36
|
+
"",
|
|
37
|
+
"This is a game made with Summer Engine, the game engine built for AI. Game code is GDScript (`.gd`), scenes are `.tscn`, resources are `.tres`, and `project.godot` is the project file.",
|
|
38
|
+
"",
|
|
39
|
+
"## How to work on it",
|
|
40
|
+
"",
|
|
41
|
+
"- Change scenes through Summer while Summer Engine has the project open. The editor rewrites `.tscn` files when it saves, so hand edits get lost.",
|
|
42
|
+
"- With Summer's MCP server, call the `summer_*` tools and start with `summer_get_project_context`. Without it, run the same operations as `summer` commands in the shell (the `summer-cli` skill). If `summer` is missing or older than 4.0, use `npx -y summer-engine@latest` in its place.",
|
|
43
|
+
"- Summer's skills teach each part of a game. `npx -y summer-engine@latest setup <agent> --yes` installs them for your agent (add `--cli` for no MCP server). Start with `using-summer`, and find the right one with `summer docs search --query \"<the task>\"`.",
|
|
44
|
+
"- `.summer/` is the project's memory: `GameSoul.md` says what the game is, `memory/` holds the decisions to keep. Read them before you change the game's look, sound or story.",
|
|
45
|
+
"- Check your own work: script errors, a screenshot, a play run. Ask the person to play only for feel and fun.",
|
|
46
|
+
"",
|
|
47
|
+
"## The five commands",
|
|
48
|
+
"",
|
|
49
|
+
commands,
|
|
50
|
+
"",
|
|
51
|
+
"## Publishing",
|
|
52
|
+
"",
|
|
53
|
+
"The `publish-your-game` skill has the steps; `summer ops search \"publish my game\"` finds each operation. `summer store publish` sends the game to Summer's store review, and the game's owner approves it: give them the link it prints. Nothing goes live until they approve.",
|
|
54
|
+
SUMMER_BLOCK_END,
|
|
55
|
+
].join("\n");
|
|
56
|
+
}
|
|
57
|
+
/** The text with `block` as its Summer block: replaced where it is, else appended. Keeps the file's line endings. */
|
|
58
|
+
function withBlock(text, block) {
|
|
59
|
+
const eol = text.includes("\r\n") ? "\r\n" : "\n";
|
|
60
|
+
const ours = block.replace(/\r?\n/g, eol);
|
|
61
|
+
const start = text.indexOf(SUMMER_BLOCK_START);
|
|
62
|
+
if (start === -1) {
|
|
63
|
+
// Only trailing line breaks change outside the block; an empty file is the block alone.
|
|
64
|
+
return { text: text.trim() ? `${text.replace(/(\r?\n)*$/, eol)}${eol}${ours}${eol}` : `${ours}${eol}`, action: "added" };
|
|
65
|
+
}
|
|
66
|
+
const end = text.indexOf(SUMMER_BLOCK_END, start);
|
|
67
|
+
if (end === -1)
|
|
68
|
+
return { text, action: "skipped", reason: "its Summer block has no end marker" };
|
|
69
|
+
// Two blocks (a merge, or the markers quoted in the person's text): which
|
|
70
|
+
// one is Summer's is not knowable, so the person picks; nothing is deleted.
|
|
71
|
+
if (text.indexOf(SUMMER_BLOCK_START, end) !== -1)
|
|
72
|
+
return { text, action: "skipped", reason: "it has two Summer blocks; delete one and run setup again" };
|
|
73
|
+
const next = `${text.slice(0, start)}${ours}${text.slice(end + SUMMER_BLOCK_END.length)}`;
|
|
74
|
+
return { text: next, action: next === text ? "unchanged" : "updated" };
|
|
75
|
+
}
|
|
76
|
+
/** Does the text import AGENTS.md on a line of its own, outside code fences? */
|
|
77
|
+
function importsAgents(text) {
|
|
78
|
+
let fence = false;
|
|
79
|
+
for (const line of text.split(/\r?\n/)) {
|
|
80
|
+
const trimmed = line.trim();
|
|
81
|
+
if (/^(```|~~~)/.test(trimmed))
|
|
82
|
+
fence = !fence;
|
|
83
|
+
else if (!fence && CLAUDE_IMPORTS.has(trimmed))
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
function inside(root, path) {
|
|
89
|
+
const rel = relative(root, path);
|
|
90
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Where a file may be written, and `real`, the file a write lands in:
|
|
94
|
+
* "missing" (create it: here, or the missing target of a link inside the
|
|
95
|
+
* project), "file" (a file, or a link to one inside the project), or a
|
|
96
|
+
* reason to leave it alone (a link that points nowhere or out of the
|
|
97
|
+
* project). `real` is known before anything is written, so a link from one
|
|
98
|
+
* name to the other counts as one file even when its target is missing.
|
|
99
|
+
*/
|
|
100
|
+
function locate(path, realRoot) {
|
|
101
|
+
let isLink = false;
|
|
102
|
+
try {
|
|
103
|
+
isLink = lstatSync(path).isSymbolicLink();
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return { kind: "missing", real: join(realRoot, basename(path)) };
|
|
107
|
+
}
|
|
108
|
+
let real;
|
|
109
|
+
try {
|
|
110
|
+
real = realpathSync(path);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
const target = resolve(realRoot, readlinkSync(path));
|
|
114
|
+
return inside(realRoot, target) ? { kind: "missing", real: target } : { kind: "skip", reason: "it is a link to a file that does not exist" };
|
|
115
|
+
}
|
|
116
|
+
if (isLink && !inside(realRoot, real))
|
|
117
|
+
return { kind: "skip", reason: "it is a link to a file outside the project" };
|
|
118
|
+
return { kind: "file", real };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Write or update AGENTS.md and CLAUDE.md in the project root. A new
|
|
122
|
+
* AGENTS.md is the Summer block; a new CLAUDE.md is `@AGENTS.md` only. An
|
|
123
|
+
* existing CLAUDE.md that already imports AGENTS.md is left as it is. Each
|
|
124
|
+
* file is its own step: a file that cannot be read or written is skipped
|
|
125
|
+
* with the reason, and the other is still done.
|
|
126
|
+
*/
|
|
127
|
+
export function writeAgentInstructions(projectDir, options = {}) {
|
|
128
|
+
const agents = join(projectDir, "AGENTS.md");
|
|
129
|
+
const claude = join(projectDir, "CLAUDE.md");
|
|
130
|
+
let block;
|
|
131
|
+
let realRoot;
|
|
132
|
+
try {
|
|
133
|
+
block = options.block ?? renderAgentsBlock();
|
|
134
|
+
realRoot = realpathSync(projectDir);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
const reason = messageOf(error);
|
|
138
|
+
return [
|
|
139
|
+
{ file: "AGENTS.md", path: agents, action: "skipped", reason },
|
|
140
|
+
{ file: "CLAUDE.md", path: claude, action: "skipped", reason },
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
const write = (path, text) => {
|
|
144
|
+
if (!options.dryRun)
|
|
145
|
+
writeFileSync(path, text, "utf-8");
|
|
146
|
+
};
|
|
147
|
+
const step = (file, path, run) => {
|
|
148
|
+
try {
|
|
149
|
+
return { file, path, ...run() };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return { file, path, action: "skipped", reason: messageOf(error) };
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const agentsAt = locate(agents, realRoot);
|
|
156
|
+
const agentsResult = step("AGENTS.md", agents, () => {
|
|
157
|
+
if (agentsAt.kind === "skip")
|
|
158
|
+
return { action: "skipped", reason: agentsAt.reason };
|
|
159
|
+
if (agentsAt.kind === "missing") {
|
|
160
|
+
write(agents, `${block}\n`);
|
|
161
|
+
return { action: "created" };
|
|
162
|
+
}
|
|
163
|
+
const next = withBlock(readFileSync(agents, "utf-8"), block);
|
|
164
|
+
if (next.action === "added" || next.action === "updated")
|
|
165
|
+
write(agents, next.text);
|
|
166
|
+
return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
|
|
167
|
+
});
|
|
168
|
+
const claudeAt = locate(claude, realRoot);
|
|
169
|
+
const claudeResult = step("CLAUDE.md", claude, () => {
|
|
170
|
+
if (claudeAt.kind === "skip")
|
|
171
|
+
return { action: "skipped", reason: claudeAt.reason };
|
|
172
|
+
// CLAUDE.md -> AGENTS.md (or the reverse): one file, which already has the AGENTS.md block.
|
|
173
|
+
if (agentsAt.kind !== "skip" && claudeAt.real === agentsAt.real) {
|
|
174
|
+
return { action: "unchanged", reason: "it is the same file as AGENTS.md" };
|
|
175
|
+
}
|
|
176
|
+
if (claudeAt.kind === "missing") {
|
|
177
|
+
write(claude, "@AGENTS.md\n");
|
|
178
|
+
return { action: "created" };
|
|
179
|
+
}
|
|
180
|
+
const text = readFileSync(claude, "utf-8");
|
|
181
|
+
if (importsAgents(text) && !text.includes(SUMMER_BLOCK_START))
|
|
182
|
+
return { action: "unchanged" };
|
|
183
|
+
const next = withBlock(text, `${SUMMER_BLOCK_START}\n@AGENTS.md\n${SUMMER_BLOCK_END}`);
|
|
184
|
+
if (next.action === "added" || next.action === "updated")
|
|
185
|
+
write(claude, next.text);
|
|
186
|
+
return { action: next.action, ...(next.reason ? { reason: next.reason } : {}) };
|
|
187
|
+
});
|
|
188
|
+
return [agentsResult, claudeResult];
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* The Summer project the working directory is in, for `summer setup`: the
|
|
192
|
+
* nearest folder with project.godot, looking up no further than the git
|
|
193
|
+
* top level, and never the home folder or the filesystem root (a stray
|
|
194
|
+
* project.godot there must not put an AGENTS.md or CLAUDE.md in every
|
|
195
|
+
* session). Null when there is none.
|
|
196
|
+
*/
|
|
197
|
+
export function findSetupProjectRoot(cwd = process.cwd()) {
|
|
198
|
+
let current;
|
|
199
|
+
try {
|
|
200
|
+
current = realpathSync(resolve(cwd));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
let home;
|
|
206
|
+
try {
|
|
207
|
+
home = realpathSync(homedir());
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
home = homedir();
|
|
211
|
+
}
|
|
212
|
+
while (current !== home && current !== parse(current).root) {
|
|
213
|
+
if (existsSync(join(current, "project.godot")))
|
|
214
|
+
return current;
|
|
215
|
+
if (existsSync(join(current, ".git")))
|
|
216
|
+
return null;
|
|
217
|
+
const parent = dirname(current);
|
|
218
|
+
if (parent === current)
|
|
219
|
+
return null;
|
|
220
|
+
current = parent;
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
function messageOf(error) {
|
|
225
|
+
return error instanceof Error ? error.message : String(error);
|
|
226
|
+
}
|
package/gemini-extension.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_generated": "GENERATED from integrations/gemini — do not edit; npm run generate:registry",
|
|
3
3
|
"name": "summer",
|
|
4
|
-
"version": "4.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "4.2.0",
|
|
5
|
+
"description": "The game engine built for AI. Any agent makes a multiplayer game and publishes it. The Summer Engine MCP server, context primer and game-dev skills.",
|
|
6
6
|
"contextFileName": "GEMINI.md",
|
|
7
7
|
"mcpServers": {
|
|
8
8
|
"summer-engine": {
|
|
@@ -108,6 +108,7 @@
|
|
|
108
108
|
"./library/skills/summer-apps/",
|
|
109
109
|
"./library/skills/summer-apps-design/",
|
|
110
110
|
"./library/skills/summer-assets/",
|
|
111
|
+
"./library/skills/summer-cli/",
|
|
111
112
|
"./library/skills/summer-friends/",
|
|
112
113
|
"./library/skills/summer-leaderboards/",
|
|
113
114
|
"./library/skills/summer-match-results/",
|
package/integrations/README.md
CHANGED
|
@@ -58,7 +58,7 @@ are listed where they differ.
|
|
|
58
58
|
| claude-desktop | — | MCP: `~/Library/Application Support/Claude/claude_desktop_config.json`; Linux `~/.config/Claude/claude_desktop_config.json`; Windows `%APPDATA%/Claude/claude_desktop_config.json`; no skills folder (MCP only) |
|
|
59
59
|
| codex | `.codex-plugin/plugin.json` | MCP: `~/.codex/config.toml`; project `.codex/config.toml`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
60
60
|
| cursor | `.cursor-plugin/plugin.json` | MCP: `~/.cursor/mcp.json`; project `.cursor/mcp.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
61
|
-
| windsurf | — | MCP: `~/.
|
|
61
|
+
| windsurf | — | MCP: `~/.config/devin/mcp_config.json`; Windows `%APPDATA%/devin/mcp_config.json`; skills: `~/.agents/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
62
62
|
| antigravity | — | MCP: `~/.gemini/config/mcp_config.json`; project `.agents/mcp_config.json`; skills: `~/.gemini/config/skills`; project `.agents/skills` (`<skill>/SKILL.md`) |
|
|
63
63
|
| gemini (legacy) | `gemini-extension.json` | MCP: `~/.gemini/extensions/summer-engine/gemini-extension.json`; skills: `~/.gemini/extensions/summer-engine/skills` (`<skill>/SKILL.md`) |
|
|
64
64
|
| cline | — | MCP: `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Linux `~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; Windows `%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`; skills: `~/.cline/skills`; project `.cline/skills` (`<skill>/SKILL.md`) |
|
|
@@ -8,6 +8,12 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
8
8
|
- `registry/generated/marketplace.claude.json` -> `.claude-plugin/marketplace.json`
|
|
9
9
|
(marketplace listing wrapper).
|
|
10
10
|
|
|
11
|
+
- `registry/generated/plugin.claude-directory.json` -> `plugins/claude/.claude-plugin/plugin.json`,
|
|
12
|
+
plus the rest of `plugins/claude/` (`scripts/generate-registry/mirrors.ts`): the same
|
|
13
|
+
plugin for Anthropic's plugin directory, from a folder of its own (under 512 files,
|
|
14
|
+
no symlinks), with the server and every `summer-engine@latest` pinned to this
|
|
15
|
+
version. Submit `plugins/claude` as the plugin path.
|
|
16
|
+
|
|
11
17
|
The MCP pointer `./.mcp.json` these manifests reference is generated as
|
|
12
18
|
well (`registry/generated/mcp.json -> .mcp.json`, owned by the claude target).
|
|
13
19
|
|
|
@@ -21,6 +21,17 @@ Generated by `scripts/generate-registry` from `library/**/resource.yaml`:
|
|
|
21
21
|
`skills install --all --agent gemini`); Gemini extensions are user-scoped, so
|
|
22
22
|
`--scope project` falls back to user with a warning.
|
|
23
23
|
|
|
24
|
+
`gemini extensions install https://github.com/SummerEngine/summer` (and the
|
|
25
|
+
Gemini CLI gallery) installs a GitHub Release's only asset when it has one.
|
|
26
|
+
`.github/workflows/gemini-extension.yml` attaches `summer-gemini-extension.tar.gz`
|
|
27
|
+
to every release (`scripts/build-gemini-extension.ts`): the manifest without `settings` (no hooks ship) and without
|
|
28
|
+
`skills`, `GEMINI.md`, `AGENTS.md` and `skills/<slug>/` for every bundled skill.
|
|
29
|
+
Keep it the release's only asset, or Gemini falls back to the source tarball,
|
|
30
|
+
which has no `skills/` folder: the workflow leaves a release that already has it
|
|
31
|
+
alone and stops with an error on one that has other assets. Every packaged file
|
|
32
|
+
comes from the tag itself (only the script comes from the workflow's commit), so
|
|
33
|
+
dispatching it for an older tag packages that release as it was.
|
|
34
|
+
|
|
24
35
|
Never edit the destination file by hand — edit `library/` resources or
|
|
25
36
|
`scripts/generate-registry/manifests.ts`, then run
|
|
26
37
|
`npm run generate:registry`. CI `--check` fails on any drift.
|
|
@@ -4,7 +4,7 @@ No manifest file is generated in this repo for Devin Desktop — `manifest-targe
|
|
|
4
4
|
is intentionally empty. Support is delivered at install time by
|
|
5
5
|
`summer setup windsurf` (aliases: `devin`, `devin-desktop`, `devindesktop`), which writes:
|
|
6
6
|
|
|
7
|
-
- MCP config: `~/.
|
|
7
|
+
- MCP config: `~/.config/devin/mcp_config.json` (`$XDG_CONFIG_HOME/devin` when set); Windows `%APPDATA%\devin\mcp_config.json` (user); user scope only (project requests fall back with a warning). Summer 4.1.0 and earlier wrote `~/.codeium/windsurf/mcp_config.json`; setup says when an entry is still there.
|
|
8
8
|
Shape: `mcpServers.summer-engine = { command, args }`.
|
|
9
9
|
- Skills: `~/.agents/skills` (user) or `.agents/skills` (project) as `<skill>/SKILL.md`.
|
|
10
10
|
- After: Restart Devin Desktop and refresh MCP servers from the agent settings. Devin's docs say mcp_config.json configures the Cascade agent; for the Devin agent add the server in the app's MCP settings with the same command.
|
|
@@ -180,3 +180,19 @@ Then create `Environment` and `Sky` resources via the inspector or load from `.t
|
|
|
180
180
|
## Collaborative protocol
|
|
181
181
|
|
|
182
182
|
This skill mutates the scene (adds lights + WorldEnvironment + tunes Environment sub-properties). Always ask before applying: "May I add a DirectionalLight3D Sun with shadows + a WorldEnvironment with a procedural sky?".
|
|
183
|
+
|
|
184
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
185
|
+
## From a shell
|
|
186
|
+
|
|
187
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
188
|
+
|
|
189
|
+
| In this skill | Command |
|
|
190
|
+
|---|---|
|
|
191
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
192
|
+
| `summer_get_project_context` | `summer engine get-project-context` |
|
|
193
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
194
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
195
|
+
| `summer_screenshot` | `summer engine screenshot` |
|
|
196
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
197
|
+
| `summer_set_resource_property` | `summer engine set-resource-property` |
|
|
198
|
+
<!-- /shell-commands -->
|
package/library/skills/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Summer skills
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 128 skills, grouped by their primary domain. **Generated** by `npm run generate:registry` from each skill's `resource.yaml`; `--check` fails when this file and the library disagree. Do not edit by hand.
|
|
4
4
|
|
|
5
5
|
The folder is flat on purpose (`docs/design/DECISIONS.md`, D3): a skill usually belongs to several domains, so categories live in each skill's `facets.domains` and this index is rendered from them. The first domain listed is the primary one. `summer skills list --by-domain` prints the same grouping; `summer skills info <slug>` shows one skill.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
10
10
|
|
|
11
11
|
- [2d](#2d) (10)
|
|
12
12
|
- [3d](#3d) (6)
|
|
13
|
-
- [agent-workflow](#agent-workflow) (
|
|
13
|
+
- [agent-workflow](#agent-workflow) (19)
|
|
14
14
|
- [ai](#ai) (2)
|
|
15
15
|
- [animation](#animation) (7)
|
|
16
16
|
- [assets](#assets) (4)
|
|
@@ -78,6 +78,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
78
78
|
| [skill-create](./skill-create/SKILL.md) (library only) | Bootstrap a new Summer library skill (library/skills/<slug>/ with resource.yaml and SKILL.md), frontmatter, and stub sections. | meta |
|
|
79
79
|
| [skill-improve](./skill-improve/SKILL.md) (library only) | Upgrade an underperforming Summer skill — run it against a behavioral spec with and without changes via a parallel-eval harness; ship the winner. | meta |
|
|
80
80
|
| [skill-test](./skill-test/SKILL.md) (library only) | Lint a Summer skill before commit, audit the whole library, or check a behavioral spec assertion — static structural rules plus behavioral specs. | meta |
|
|
81
|
+
| [*summer-cli*](./summer-cli/SKILL.md) ★ (preview) | Summer as shell commands, no MCP: sign in, find and run operations, follow jobs, save files, drive the engine. | assets, tools |
|
|
81
82
|
| [using-summer](./using-summer/SKILL.md) | Session bootstrap: how to find and use Summer skills and the summer-engine MCP before any response. | meta |
|
|
82
83
|
| [verification-before-completion](./verification-before-completion/SKILL.md) ★ | Run verification and read its output before claiming work done, fixed or passing: evidence first. | verification |
|
|
83
84
|
| [writing-plans](./writing-plans/SKILL.md) | Turn a spec or requirements for a multi-step task into a written implementation plan before touching code. | meta |
|
|
@@ -109,7 +110,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
109
110
|
| [asset-strategy](./asset-strategy/SKILL.md) ★ | Route any 'I need a [thing]' asset request to the right skill: 2D, 3D, audio, video, VFX or animation. | pipeline |
|
|
110
111
|
| [*lumera-single-image-scene-reconstruction*](./lumera-single-image-scene-reconstruction/SKILL.md) (preview) (library only) | Lumera-style single image to editable 3D scene — VLM-parsed object boxes and parametric lights, per-object meshes, HDR probe, .tscn assembly, refinement loop. | pipeline, 3d, scenes |
|
|
111
112
|
| [*skintokens-auto-rigging*](./skintokens-auto-rigging/SKILL.md) (preview) (library only) | Offline auto-rigging with skin-tokens.cpp (GGML SkinTokens/TokenRig port) — skeleton and skin weights from a static GLB mesh on CPU/Vulkan, into Summer Engine. | pipeline, 3d, animation |
|
|
112
|
-
| [summer-assets](./summer-assets/SKILL.md) | Make game assets with Summer
|
|
113
|
+
| [summer-assets](./summer-assets/SKILL.md) | Make game assets with Summer, no Summer Engine: find, generate and download 3D models, images, audio and video for any engine or app. | agent-workflow |
|
|
113
114
|
|
|
114
115
|
## audio
|
|
115
116
|
|
|
@@ -173,7 +174,7 @@ Status: **stable** unless marked; *preview* = not yet exercised in-engine by the
|
|
|
173
174
|
|
|
174
175
|
| skill | when to use | also |
|
|
175
176
|
|---|---|---|
|
|
176
|
-
| [*concept-to-level*](./concept-to-level/SKILL.md) (preview) | Take a 3D map from concept art to a
|
|
177
|
+
| [*concept-to-level*](./concept-to-level/SKILL.md) (preview) | Take a 3D map from concept art to a shippable level: questions for the user, owned lanes, render checks, collision kept in step. | 3d, world-building, agent-workflow |
|
|
177
178
|
| [design-level](./design-level/SKILL.md) ★ | Design one level (layout, pacing, encounters, secrets) as a design doc plus a node-tree skeleton. | game-design |
|
|
178
179
|
| [scene-to-level](./scene-to-level/SKILL.md) | Turn a reference image or concept art into a playable scene: concept, asset pack, terrain, assembly. | game-design |
|
|
179
180
|
|
|
@@ -324,3 +324,24 @@ in Summer Engine.
|
|
|
324
324
|
- `voice-line` — the voice bus that triggers ducking
|
|
325
325
|
- `summer_docs_read` id `reference/godot-version` — Summer compatibility for AudioServer
|
|
326
326
|
and Tween APIs
|
|
327
|
+
|
|
328
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
329
|
+
## From a shell
|
|
330
|
+
|
|
331
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
332
|
+
|
|
333
|
+
| In this skill | Command |
|
|
334
|
+
|---|---|
|
|
335
|
+
| `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
336
|
+
| `summer_assets_search` | `summer assets search` |
|
|
337
|
+
| `summer_docs_read` | `summer docs read` |
|
|
338
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
339
|
+
| `summer_connect_signal` | `summer engine connect-signal` |
|
|
340
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
341
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
342
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
343
|
+
| `summer_play` | `summer engine play` |
|
|
344
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
345
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
346
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
347
|
+
<!-- /shell-commands -->
|
|
@@ -146,3 +146,25 @@ Read `determinism.seed_scope` on the play result and believe it. Pinned: the glo
|
|
|
146
146
|
- `verification-before-completion` — the code layer that must be green before any of this.
|
|
147
147
|
- `debugging-game-feel` — when the feature works but feels wrong.
|
|
148
148
|
- `investigating-bugs` — root-causing a reproducible bug once a recording reproduces it.
|
|
149
|
+
|
|
150
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
151
|
+
## From a shell
|
|
152
|
+
|
|
153
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
154
|
+
|
|
155
|
+
| In this skill | Command |
|
|
156
|
+
|---|---|
|
|
157
|
+
| `summer_game_control` | `summer engine game-control` |
|
|
158
|
+
| `summer_game_input` | `summer engine game-input` |
|
|
159
|
+
| `summer_game_probe` | `summer engine game-probe` |
|
|
160
|
+
| `summer_get_console` | `summer engine get-console` |
|
|
161
|
+
| `summer_get_debugger_errors` | `summer engine get-debugger-errors` |
|
|
162
|
+
| `summer_input_map_bind` | `summer engine input-map-bind` |
|
|
163
|
+
| `summer_is_running` | `summer engine is-running` |
|
|
164
|
+
| `summer_play` | `summer engine play` |
|
|
165
|
+
| `summer_runtime_animate` | `summer engine runtime-animate` |
|
|
166
|
+
| `summer_runtime_call` | `summer engine runtime-call` |
|
|
167
|
+
| `summer_runtime_set` | `summer engine runtime-set` |
|
|
168
|
+
| `summer_runtime_spawn` | `summer engine runtime-spawn` |
|
|
169
|
+
| `summer_stop` | `summer engine stop` |
|
|
170
|
+
<!-- /shell-commands -->
|
|
@@ -218,3 +218,18 @@ func _gateway() -> Object:
|
|
|
218
218
|
- Retrying on `limit_exceeded` or `credits_exhausted`. The limit is the product working.
|
|
219
219
|
- Putting a provider key in the project "until Summer is live". There is no bring-your-own-key path; keys in builds leak.
|
|
220
220
|
- Letting the model decide rewards because "it only suggests". It will be talked into suggesting everything.
|
|
221
|
+
|
|
222
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
223
|
+
## From a shell
|
|
224
|
+
|
|
225
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
226
|
+
|
|
227
|
+
| In this skill | Command |
|
|
228
|
+
|---|---|
|
|
229
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
230
|
+
| `summer_connect_signal` | `summer engine connect-signal` |
|
|
231
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
232
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
233
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
234
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
235
|
+
<!-- /shell-commands -->
|
|
@@ -291,3 +291,19 @@ Print the SFX prompt and the import dock settings. User runs via the Summer dash
|
|
|
291
291
|
- `sound-effect` — short event SFX layered over the bed
|
|
292
292
|
- `music-track` — melodic music layered over the bed
|
|
293
293
|
- `adaptive-music` — state-driven crossfades use the same pattern
|
|
294
|
+
|
|
295
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
296
|
+
## From a shell
|
|
297
|
+
|
|
298
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
299
|
+
|
|
300
|
+
| In this skill | Command |
|
|
301
|
+
|---|---|
|
|
302
|
+
| `assets.generate_audio`, `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
303
|
+
| `summer_assets_search` | `summer assets search` |
|
|
304
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
305
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
306
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
307
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
308
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
309
|
+
<!-- /shell-commands -->
|
|
@@ -231,3 +231,22 @@ Once the loop is wired:
|
|
|
231
231
|
- `ui-graphics` — logo, menu buttons, HUD that sits over the loop.
|
|
232
232
|
- `concept-art` — produce the reference still that anchors the loop.
|
|
233
233
|
- `summer_docs_read` id `reference/mcp-tools-reference` — how to call `assets.generate_video`; `summer_search` returns its exact input.
|
|
234
|
+
|
|
235
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
236
|
+
## From a shell
|
|
237
|
+
|
|
238
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
239
|
+
|
|
240
|
+
| In this skill | Command |
|
|
241
|
+
|---|---|
|
|
242
|
+
| `summer_assets_generate_image` | `summer assets generate-image` |
|
|
243
|
+
| `assets.generate_video`, `summer_assets_generate_video` | `summer assets generate-video` |
|
|
244
|
+
| `summer_assets_search` | `summer assets search` |
|
|
245
|
+
| `summer_docs_read` | `summer docs read` |
|
|
246
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
247
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
248
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
249
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
250
|
+
| `jobs.wait`, `summer_jobs_wait` | `summer jobs wait` |
|
|
251
|
+
| `summer_search` | `summer ops search "<what you want>"` |
|
|
252
|
+
<!-- /shell-commands -->
|
|
@@ -299,3 +299,29 @@ the same `.tres`; it is slower but discoverable.
|
|
|
299
299
|
- `character-animation-wiring` — the end-to-end rigged-GLB path: inspect real clip/bone names, `ctx.anim_state_machine`, method tracks, root motion, playtest verification.
|
|
300
300
|
- `generate-motion` — produce the clips this tree references.
|
|
301
301
|
- `retarget` — share one tree across many characters.
|
|
302
|
+
|
|
303
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
304
|
+
## From a shell
|
|
305
|
+
|
|
306
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
307
|
+
|
|
308
|
+
| In this skill | Command |
|
|
309
|
+
|---|---|
|
|
310
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
311
|
+
| `summer_connect_signal` | `summer engine connect-signal` |
|
|
312
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
313
|
+
| `summer_get_project_context` | `summer engine get-project-context` |
|
|
314
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
315
|
+
| `summer_get_script_errors` | `summer engine get-script-errors` |
|
|
316
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
317
|
+
| `summer_inspect_resource` | `summer engine inspect-resource` |
|
|
318
|
+
| `summer_instantiate_scene` | `summer engine instantiate-scene` |
|
|
319
|
+
| `summer_play` | `summer engine play` |
|
|
320
|
+
| `summer_remove_node` | `summer engine remove-node` |
|
|
321
|
+
| `summer_replace_node` | `summer engine replace-node` |
|
|
322
|
+
| `summer_run_script` | `summer engine run-script` |
|
|
323
|
+
| `summer_save_scene` | `summer engine save-scene` |
|
|
324
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
325
|
+
| `summer_set_resource_property` | `summer engine set-resource-property` |
|
|
326
|
+
| `summer_stop` | `summer engine stop` |
|
|
327
|
+
<!-- /shell-commands -->
|
|
@@ -277,3 +277,17 @@ No template — this is a workflow that produces the bible the rest of the proje
|
|
|
277
277
|
- `brainstorm-game` — produces the brief that anchors the bible
|
|
278
278
|
- `audio-direction` — the sonic counterpart
|
|
279
279
|
- `3d-lighting` — implements the lighting plan and the environment's glow, tonemap and SSAO settings
|
|
280
|
+
|
|
281
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
282
|
+
## From a shell
|
|
283
|
+
|
|
284
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
285
|
+
|
|
286
|
+
| In this skill | Command |
|
|
287
|
+
|---|---|
|
|
288
|
+
| `assets.generate_image` | `summer assets generate-image` |
|
|
289
|
+
| `summer_get_project_context` | `summer engine get-project-context` |
|
|
290
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
291
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
292
|
+
| `summer_set_prop` | `summer engine set-prop` |
|
|
293
|
+
<!-- /shell-commands -->
|
|
@@ -150,3 +150,33 @@ In a session without Summer Engine tools (the assets profile; the `summer-assets
|
|
|
150
150
|
## Fallback (no MCP)
|
|
151
151
|
|
|
152
152
|
The router still works without MCP — classification is text-only. It hands off to the specialist, which surfaces its own no-MCP fallback (typically: run the same generation in the Summer dashboard, then `summer_import_from_url` once MCP is back).
|
|
153
|
+
|
|
154
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
155
|
+
## From a shell
|
|
156
|
+
|
|
157
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
158
|
+
|
|
159
|
+
| In this skill | Command |
|
|
160
|
+
|---|---|
|
|
161
|
+
| `assets.choices` | `summer assets choices` |
|
|
162
|
+
| `assets.delete` | `summer assets delete` |
|
|
163
|
+
| `assets.generate_3d` | `summer assets generate-3d` |
|
|
164
|
+
| `assets.generate_audio` | `summer assets generate-audio` |
|
|
165
|
+
| `assets.generate_image` | `summer assets generate-image` |
|
|
166
|
+
| `assets.generate_motion` | `summer assets generate-motion` |
|
|
167
|
+
| `assets.generate_sfx_choices` | `summer assets generate-sfx-choices` |
|
|
168
|
+
| `assets.generate_video` | `summer assets generate-video` |
|
|
169
|
+
| `assets.get`, `summer_assets_get` | `summer assets get` |
|
|
170
|
+
| `assets.remove_background` | `summer assets remove-background` |
|
|
171
|
+
| `assets.search`, `summer_assets_search` | `summer assets search` |
|
|
172
|
+
| `assets.slice_sheet` | `summer assets slice-sheet` |
|
|
173
|
+
| `assets.update` | `summer assets update` |
|
|
174
|
+
| `assets.upload_begin` | `summer assets upload-begin` |
|
|
175
|
+
| `assets.upload_complete` | `summer assets upload-complete` |
|
|
176
|
+
| `summer_import_asset_by_id` | `summer engine import-asset-by-id` |
|
|
177
|
+
| `summer_import_from_url` | `summer engine import-from-url` |
|
|
178
|
+
| `jobs.wait` | `summer jobs wait` |
|
|
179
|
+
| `makers.npc_voice` | `summer makers npc-voice` |
|
|
180
|
+
| `makers.trailer_forge` | `summer makers trailer-forge` |
|
|
181
|
+
| `summer_search` | `summer ops search "<what you want>"` |
|
|
182
|
+
<!-- /shell-commands -->
|
|
@@ -259,3 +259,19 @@ No template — this is a workflow that produces the bible the rest of the proje
|
|
|
259
259
|
- `art-direction` — the visual counterpart; audio must rhyme with it
|
|
260
260
|
- `adaptive-music` — implements the dynamic music plan
|
|
261
261
|
- `sound-effect`, `music-track`, `ambient-bed`, `voice-line` — generate the audio the bible describes
|
|
262
|
+
|
|
263
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
264
|
+
## From a shell
|
|
265
|
+
|
|
266
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
267
|
+
|
|
268
|
+
| In this skill | Command |
|
|
269
|
+
|---|---|
|
|
270
|
+
| `summer_assets_generate_audio` | `summer assets generate-audio` |
|
|
271
|
+
| `summer_docs_read` | `summer docs read` |
|
|
272
|
+
| `summer_add_node` | `summer engine add-node` |
|
|
273
|
+
| `summer_get_project_context` | `summer engine get-project-context` |
|
|
274
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
275
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
276
|
+
| `summer_project_setting` | `summer engine project-setting` |
|
|
277
|
+
<!-- /shell-commands -->
|
|
@@ -194,3 +194,17 @@ Do **not** reach for `SimulateInput` here. It is only reachable from the
|
|
|
194
194
|
in-editor chat bridge; an MCP or CLI caller gets
|
|
195
195
|
`{ok: false, failure_reason: "unsupported_transport"}` back. Drive input from
|
|
196
196
|
inside the probe with `press()` / `key()` instead.
|
|
197
|
+
|
|
198
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
199
|
+
## From a shell
|
|
200
|
+
|
|
201
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
202
|
+
|
|
203
|
+
| In this skill | Command |
|
|
204
|
+
|---|---|
|
|
205
|
+
| `summer_batch` | `summer engine batch` |
|
|
206
|
+
| `summer_game_probe` | `summer engine game-probe` |
|
|
207
|
+
| `summer_get_diagnostics` | `summer engine get-diagnostics` |
|
|
208
|
+
| `summer_inspect_node` | `summer engine inspect-node` |
|
|
209
|
+
| `summer_inspect_runtime_node` | `summer engine inspect-runtime-node` |
|
|
210
|
+
<!-- /shell-commands -->
|
|
@@ -206,3 +206,16 @@ No template — this is a workflow that produces the brief that drives template
|
|
|
206
206
|
- `art-direction` — turn the one-phrase look into a full bible
|
|
207
207
|
- `audio-direction` — sonic identity
|
|
208
208
|
- `make-game` — scaffold the project once the brief is locked
|
|
209
|
+
|
|
210
|
+
<!-- shell-commands: generated from the operation catalog by npm run generate:registry; do not edit by hand -->
|
|
211
|
+
## From a shell
|
|
212
|
+
|
|
213
|
+
No Summer MCP tools in this session? Run each one as a command; when `summer --version` is missing or below 4.0, use `npx -y summer-engine@latest` in place of `summer`. Fields are flags in kebab-case (`--scene-path res://main.tscn`) or one `--input '<json>'`, and `summer ops describe <op>` prints the exact input. The `summer-cli` skill has the rest.
|
|
214
|
+
|
|
215
|
+
| In this skill | Command |
|
|
216
|
+
|---|---|
|
|
217
|
+
| `summer_get_project_context` | `summer engine get-project-context` |
|
|
218
|
+
| `summer_get_scene_tree` | `summer engine get-scene-tree` |
|
|
219
|
+
| `summer_read_file` | `summer engine read-file` |
|
|
220
|
+
| `summer_write_file` | `summer engine write-file` |
|
|
221
|
+
<!-- /shell-commands -->
|