summer-engine 1.5.0 → 2.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/{marketplace.json → .claude-plugin/marketplace.json} +3 -3
- package/.claude-plugin/plugin.json +52 -11
- package/.codex-plugin/plugin.json +69 -8
- package/.cursor-plugin/plugin.json +53 -12
- package/.factory-plugin/plugin.json +20 -0
- package/.opencode/INSTALL.md +75 -0
- package/.opencode/plugins/summer.js +9 -6
- package/AGENTS.md +51 -0
- package/CHANGELOG.md +31 -1
- package/CLAUDE.md +5 -0
- package/GEMINI.md +56 -0
- package/README.md +409 -80
- package/_persona/summer/SKILL.md +113 -0
- package/dist/bin/summer.js +0 -0
- package/dist/commands/assets.d.ts +2 -0
- package/dist/commands/assets.js +189 -0
- package/dist/commands/create.js +55 -17
- package/dist/commands/debug.d.ts +2 -0
- package/dist/commands/debug.js +127 -0
- package/dist/commands/install.js +2 -2
- package/dist/commands/list.js +24 -5
- package/dist/commands/project.d.ts +2 -0
- package/dist/commands/project.js +170 -0
- package/dist/commands/scene.d.ts +2 -0
- package/dist/commands/scene.js +290 -0
- package/dist/lib/banner.js +2 -2
- package/dist/lib/log-filters.d.ts +53 -0
- package/dist/lib/log-filters.js +130 -0
- package/dist/lib/plugin-manifests.test.d.ts +1 -0
- package/dist/lib/plugin-manifests.test.js +134 -0
- package/dist/lib/remote-templates.d.ts +25 -0
- package/dist/lib/remote-templates.js +86 -0
- package/dist/lib/skills-registry.d.ts +283 -3
- package/dist/lib/skills-registry.js +522 -2
- package/dist/lib/telemetry.d.ts +13 -0
- package/dist/lib/telemetry.js +63 -0
- package/dist/lib/with-engine.d.ts +14 -0
- package/dist/lib/with-engine.js +109 -0
- package/dist/mcp/tools/asset-tools.js +12 -13
- package/dist/mcp/tools/debug-tools.js +32 -9
- package/dist/mcp/tools/generate-tools.js +101 -0
- package/dist/mcp/tools/with-engine.js +4 -0
- package/gemini-extension.json +2 -2
- package/hooks/pre-commit-doctor.sh +0 -0
- package/hooks/run-hook.cmd +0 -0
- package/hooks/session-start.sh +0 -0
- package/package.json +11 -5
- package/skills/2d-assets/character-portrait/SKILL.md +196 -0
- package/skills/2d-assets/concept-art/SKILL.md +152 -0
- package/skills/2d-assets/pixel-art/SKILL.md +180 -0
- package/skills/2d-assets/skybox-panorama/SKILL.md +207 -0
- package/skills/2d-assets/sprite-sheet/SKILL.md +239 -0
- package/skills/2d-assets/tileable-texture/SKILL.md +205 -0
- package/skills/2d-assets/ui-graphics/SKILL.md +210 -0
- package/skills/3d-assets/character-model/SKILL.md +225 -0
- package/skills/3d-assets/environment-kit/SKILL.md +164 -0
- package/skills/3d-assets/organic-model/SKILL.md +192 -0
- package/skills/3d-assets/prop-model/SKILL.md +133 -0
- package/skills/3d-assets/vehicle-model/SKILL.md +202 -0
- package/skills/README.md +1 -1
- package/skills/_meta/skill-create/SKILL.md +1 -1
- package/skills/_meta/skill-improve/SKILL.md +1 -1
- package/skills/_meta/skill-test/SKILL.md +1 -1
- package/skills/_meta/using-summer/SKILL.md +130 -0
- package/skills/ai-and-npcs/design-npc/SKILL.md +3 -1
- package/skills/animation/animation-tree/SKILL.md +260 -0
- package/skills/animation/facial-and-lipsync/SKILL.md +282 -0
- package/skills/animation/generate-motion/SKILL.md +129 -0
- package/skills/animation/procedural-animation/SKILL.md +234 -0
- package/skills/animation/retarget/SKILL.md +172 -0
- package/skills/asset-pipeline/asset-strategy/SKILL.md +102 -212
- package/skills/audio/adaptive-music/SKILL.md +326 -0
- package/skills/audio/ambient-bed/SKILL.md +278 -0
- package/skills/audio/music-track/SKILL.md +268 -0
- package/skills/audio/sound-effect/SKILL.md +237 -0
- package/skills/audio/voice-line/SKILL.md +253 -0
- package/skills/catalog.yaml +266 -5
- package/skills/character-controllers/fps-controller/SKILL.md +1 -1
- package/skills/debugging/debug/SKILL.md +102 -82
- package/skills/rendering-and-lighting/3d-lighting/SKILL.md +1 -1
- package/skills/scene-and-project/browse-templates/SKILL.md +105 -0
- package/skills/scene-and-project/make-game/SKILL.md +159 -346
- package/skills/scene-and-project/new-project/SKILL.md +106 -0
- package/skills/scene-and-project/scene-composition/SKILL.md +1 -1
- package/skills/scripting-patterns/gdscript-patterns/SKILL.md +1 -1
- package/skills/ui-and-ux/ui-basics/SKILL.md +1 -1
- package/skills/video/animated-loop/SKILL.md +200 -0
- package/skills/video/cinematic-cutscene/SKILL.md +204 -0
- package/skills/video/trailer-shot/SKILL.md +203 -0
- package/skills/visual-effects/_building-blocks/additive-billboard-particles.md +28 -0
- package/skills/visual-effects/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/skills/visual-effects/_building-blocks/trauma-shake-snippet.md +51 -0
- package/skills/visual-effects/{vfx → game-feel}/SKILL.md +1 -1
- package/skills/visual-effects/recipes/dissolve/SKILL.md +349 -0
- package/skills/visual-effects/recipes/fire/SKILL.md +387 -0
- package/skills/visual-effects/recipes/hit-spark/SKILL.md +330 -0
- package/skills/visual-effects/recipes/lightning/SKILL.md +372 -0
- package/skills/visual-effects/recipes/magic-glow/SKILL.md +377 -0
- package/skills/visual-effects/recipes/muzzle-flash/SKILL.md +326 -0
- package/skills/visual-effects/recipes/smoke/SKILL.md +381 -0
- package/skills/visual-effects/recipes/water-ripple/SKILL.md +340 -0
|
@@ -1,137 +1,157 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: debug
|
|
3
|
-
description: Use when the user reports
|
|
3
|
+
description: Use when the user reports a bug, crash, error, or unexpected behavior in a Godot/Summer project, before making any code or scene changes — runs a disciplined script-errors → console → debugger → hypothesis → fix → verify loop. Trigger on "debug", "crash", "error", "broken", "not working", "freezes", "wrong".
|
|
4
4
|
license: MIT
|
|
5
|
-
compatibility: [Cursor, Claude Code, Windsurf,
|
|
5
|
+
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
6
|
category: debugging
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read
|
|
9
|
-
paths: ["**/*.gd", "**/*.tscn", "**/*.
|
|
8
|
+
allowed-tools: Read Edit Grep summer_get_diagnostics summer_get_script_errors summer_get_console summer_clear_console summer_get_debugger_errors summer_play summer_stop summer_is_running summer_inspect_node summer_inspect_resource summer_get_scene_tree
|
|
9
|
+
paths: ["**/*.gd", "**/*.cs", "**/*.tscn", "**/*.tres", "project.godot"]
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# /debug — Triage and Fix a Bug
|
|
12
|
+
# /debug — Triage and Fix a Bug End-to-End
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
The disciplined debugging loop for Godot/Summer projects. Read the error before guessing. Form a hypothesis before editing. Verify the fix before declaring victory. Never grep the codebase before reading the actual error.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**Core principle:** The debugger already knows what's wrong. Your job is to listen to it before doing anything else.
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
## When to use this skill
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
- The user says "it crashes", "it broke", "throws an error", "doesn't work", "freezes", "wrong behavior".
|
|
21
|
+
- The user pastes a stack trace.
|
|
22
|
+
- A previous build or test step failed and the user wants to fix it.
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
## When NOT to use this skill
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
- The user is asking how to *prevent* a class of bug — that's a design question. Use the relevant discipline skill (`gdscript-patterns`, `scene-composition`).
|
|
27
|
+
- The user is asking for a feature with a known unfinished spec — that's `make-game` territory.
|
|
28
|
+
- The bug is in a non-Godot file the host agent can debug natively (CI config, npm scripts) — use the host's debugger.
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
## The Loop
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
```
|
|
33
|
+
Listen → Diagnose → Hypothesize → Propose → Fix → Verify
|
|
34
|
+
```
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
Do not skip steps. Do not loop back to "Hypothesize" without re-running the cheap diagnostic.
|
|
31
37
|
|
|
32
|
-
|
|
38
|
+
### 1. Listen
|
|
33
39
|
|
|
34
|
-
**
|
|
40
|
+
Ask the user **one** focused question and wait for the answer:
|
|
35
41
|
|
|
36
|
-
|
|
37
|
-
summer_get_script_errors # Compile errors? (cheapest, do first)
|
|
38
|
-
summer_get_console # Print() output, warnings, info
|
|
39
|
-
summer_get_debugger_errors # Runtime errors with stack traces
|
|
40
|
-
summer_get_diagnostics # Aggregated count + summary
|
|
41
|
-
```
|
|
42
|
+
> What's happening, and when does it happen?
|
|
42
43
|
|
|
43
|
-
If
|
|
44
|
+
If they already gave a clear symptom in the request, skip the question.
|
|
45
|
+
If they say "something's broken", that one question is your only call until they reply. Don't run tools yet.
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
summer_clear_console # Clean slate
|
|
47
|
-
summer_play # Run it
|
|
48
|
-
# (let the user reproduce the bug)
|
|
49
|
-
summer_get_debugger_errors # Now read what blew up
|
|
50
|
-
summer_stop # When done
|
|
51
|
-
```
|
|
47
|
+
### 2. Diagnose — cheapest tool first
|
|
52
48
|
|
|
53
|
-
|
|
49
|
+
In strict order. Stop at the first one that returns useful signal.
|
|
54
50
|
|
|
55
|
-
|
|
51
|
+
| Order | Tool | When |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| 1 | `summer_get_script_errors` | Always start here. Catches GDScript parse errors, missing identifiers, signature mismatches. Cheapest, no side effects. |
|
|
54
|
+
| 2 | `summer_get_diagnostics` | Aggregate console + debugger error counts. One call, broad picture. |
|
|
55
|
+
| 3 | `summer_get_console` | Read the editor Output panel — print statements, warnings, errors that didn't crash. |
|
|
56
|
+
| 4 | `summer_get_debugger_errors` | Runtime errors caught by the debugger. Use AFTER `summer_play` for runtime-only bugs. |
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
**If `summer_get_script_errors` is clean and the user says it crashes only when running:** it's a runtime bug. Go to step 2b.
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
### 2b. Runtime-only bugs
|
|
60
61
|
|
|
61
62
|
```
|
|
62
|
-
|
|
63
|
+
summer_clear_console
|
|
64
|
+
summer_play
|
|
65
|
+
─▶ ASK USER: "Reproduce the bug now."
|
|
66
|
+
(wait for confirmation)
|
|
67
|
+
summer_get_debugger_errors
|
|
68
|
+
summer_stop
|
|
63
69
|
```
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
Do not skip the "reproduce now" prompt. Auto-running and grabbing whatever's in the buffer leads you to chase ghosts from previous sessions.
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
### 2c. MCP unavailable (engine not running, or no Summer install)
|
|
68
74
|
|
|
69
|
-
|
|
70
|
-
summer_inspect_node "./World/Player/Camera"
|
|
71
|
-
```
|
|
75
|
+
If `summer_get_script_errors` returns "Summer Engine is not running" or the tool isn't available:
|
|
72
76
|
|
|
73
|
-
|
|
77
|
+
1. Ask the user to copy-paste the Output panel and the Debugger panel from the Godot editor.
|
|
78
|
+
2. Reason over the pasted text exactly as you would over MCP output.
|
|
79
|
+
3. Continue with the rest of the loop unchanged.
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
Do NOT loop on MCP retry. Do NOT pretend the engine will come back. Use the fallback the moment it fails once.
|
|
76
82
|
|
|
77
|
-
|
|
83
|
+
### 3. Hypothesize — one specific theory
|
|
78
84
|
|
|
79
|
-
|
|
85
|
+
State exactly one hypothesis, in one sentence, naming the file and line.
|
|
80
86
|
|
|
81
|
-
>
|
|
87
|
+
> **Good:** "Typo at `scripts/player.gd:14` — `GRAVTY` should be `GRAVITY`."
|
|
88
|
+
> **Bad:** "Could be a typo, missing import, or wrong scope."
|
|
82
89
|
|
|
83
|
-
|
|
90
|
+
If you have multiple plausible theories, pick the highest-prior-probability one. The user can correct you if you're wrong; chasing all three at once wastes their time.
|
|
84
91
|
|
|
85
|
-
|
|
92
|
+
**Verify the hypothesis without editing.** If the error mentions a missing node, call `summer_inspect_node` to confirm. If it's a missing resource, `summer_inspect_resource`. If it's a scene-graph issue, `summer_get_scene_tree`. **Confirm the world state matches the error before proposing a fix.**
|
|
86
93
|
|
|
87
|
-
|
|
94
|
+
### 4. Propose — ask before writing
|
|
88
95
|
|
|
89
|
-
|
|
96
|
+
Surface the proposed fix in plain language and ask permission. Two patterns:
|
|
90
97
|
|
|
91
|
-
|
|
98
|
+
**Code fix:**
|
|
99
|
+
> May I edit `scripts/player.gd` to rename `GRAVTY` → `GRAVITY` on line 14?
|
|
92
100
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
**Scene fix vs code fix:**
|
|
102
|
+
> The script calls `audio.play()` but the `AudioStreamPlayer` child is gone. Two options:
|
|
103
|
+
> 1. Re-add the `AudioStreamPlayer` to `./Coin` (preserves the original behavior).
|
|
104
|
+
> 2. Null-check in `coin.gd` (defensive, but the audio is silent).
|
|
105
|
+
>
|
|
106
|
+
> Which one do you want?
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
**Never** unilaterally pick when there are two equally valid fixes (scene vs code, defensive vs strict, fast vs correct). Ask.
|
|
99
109
|
|
|
100
|
-
|
|
110
|
+
### 5. Fix — minimal, focused
|
|
101
111
|
|
|
102
|
-
|
|
112
|
+
- For GDScript edits: `Read` the 20–40 lines around the error, `Edit` the exact change. Don't read the whole file. Don't reformat. Don't rename other things.
|
|
113
|
+
- For scene edits: use the appropriate `summer_*` tool (`summer_add_node`, `summer_set_prop`, `summer_replace_node`). Group multi-step changes in `summer_batch` for one undo step.
|
|
114
|
+
- **Trap to avoid:** never call `summer_set_resource_property` against an inline `sub_resource` — the value is silently dropped. If the property is on a nested resource, first call `summer_set_prop` with the resource class name to instantiate a standalone resource, then drill in. See `_shared/mcp-tools-reference.md`.
|
|
103
115
|
|
|
104
|
-
|
|
116
|
+
### 6. Verify — re-run the diagnostic that found it
|
|
105
117
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
| Signal handler never fires | Connection not made, or connected to wrong instance | `summer_inspect_node` of emitter, check connections |
|
|
112
|
-
| Player falls through floor | CollisionShape3D has no shape, or shape is inline sub_resource | `summer_inspect_resource` on the CollisionShape |
|
|
113
|
-
| Mouse capture stuck | `Input.set_mouse_mode` not paired with release on focus loss | `summer_get_console` for warnings |
|
|
114
|
-
| Game hangs on start | Infinite loop in `_ready()` or `_process()` | `summer_get_debugger_errors` after a forced stop |
|
|
118
|
+
The fix is not done until the same diagnostic that found the bug returns clean.
|
|
119
|
+
|
|
120
|
+
- Script error → re-run `summer_get_script_errors`.
|
|
121
|
+
- Runtime error → re-run the play/reproduce/check-debugger loop.
|
|
122
|
+
- Console warning → `summer_clear_console`, then `summer_play` and confirm clean output.
|
|
115
123
|
|
|
116
|
-
|
|
124
|
+
If the diagnostic is still red after the fix, you formed the wrong hypothesis. Go back to step 3 — do **not** make a second edit on top of the first. Revert if the first edit didn't help, then re-hypothesize.
|
|
117
125
|
|
|
118
|
-
-
|
|
119
|
-
- **Don't** propose a sweeping refactor for a single bug. One file, one change, verify.
|
|
120
|
-
- **Don't** call `summer_set_resource_property` on an inline `sub_resource` — it silently fails. See `_shared/mcp-tools-reference.md` § "Trap".
|
|
121
|
-
- **Don't** call `summer_play` without `summer_clear_console` first if you want clean output to read.
|
|
122
|
-
- **Don't** skip the user's description in step 1. "What were you trying to do" beats "what does the code do" 9/10 times.
|
|
126
|
+
## Anti-Patterns
|
|
123
127
|
|
|
124
|
-
|
|
128
|
+
| Don't | Why |
|
|
129
|
+
|---|---|
|
|
130
|
+
| Grep the whole project before reading the error | The error already names the file and line. Save the user's tokens. |
|
|
131
|
+
| Read whole files | 20–40 lines around the error is enough 90% of the time. |
|
|
132
|
+
| Run multiple diagnostics in parallel | They mask each other's signal. Cheapest first, escalate. |
|
|
133
|
+
| Edit before asking | The user owns the fix decision, you own the diagnosis. |
|
|
134
|
+
| "Try this, see if it works" | That's not a hypothesis, that's gambling. State the theory or ask another question. |
|
|
135
|
+
| Reformat the file while you're in it | Out-of-scope edits make the diff hostile to review. |
|
|
136
|
+
| Auto-fix linter warnings unrelated to the bug | Same reason. |
|
|
137
|
+
| Declare victory after editing | Re-run the diagnostic. Always. |
|
|
125
138
|
|
|
126
|
-
|
|
139
|
+
## Quick reference — common Godot bug families
|
|
127
140
|
|
|
128
|
-
|
|
141
|
+
| Symptom | First tool | Common cause |
|
|
142
|
+
|---|---|---|
|
|
143
|
+
| "Identifier X not declared" | `summer_get_script_errors` | Typo, missing import, wrong scope |
|
|
144
|
+
| "Invalid call. Nonexistent function 'X' in base 'Nil'" | `summer_get_debugger_errors` after `summer_play` | Node was deleted in editor, code still references it |
|
|
145
|
+
| "Cannot find type 'X'" | `summer_get_script_errors` | Class name mismatch, missing autoload, missing `class_name` |
|
|
146
|
+
| Game runs but visuals wrong | `summer_get_console` + `summer_inspect_node` | Material/light/camera misconfigured |
|
|
147
|
+
| Game freezes (no crash) | `summer_get_console` after `summer_play` for ~3s | Infinite loop in `_process` or `_ready` |
|
|
148
|
+
| `summer_set_resource_property` "succeeded" but nothing changed | n/a | Inline sub-resource silent-fail. Use `summer_set_prop` with class name first. |
|
|
129
149
|
|
|
130
|
-
|
|
150
|
+
## Closing
|
|
131
151
|
|
|
132
|
-
|
|
152
|
+
A debug session is done when:
|
|
153
|
+
1. The user-reported symptom no longer reproduces.
|
|
154
|
+
2. The diagnostic that originally flagged the bug returns clean.
|
|
155
|
+
3. No new errors or warnings have been introduced.
|
|
133
156
|
|
|
134
|
-
|
|
135
|
-
- `_shared/godot-version.md` — engine version + LLM cutoff risks
|
|
136
|
-
- `scripting-patterns/gdscript-patterns/SKILL.md` — what good GDScript looks like
|
|
137
|
-
- `scene-and-project/play/SKILL.md` — running the game
|
|
157
|
+
Tell the user one short sentence: "Fixed `<file>:<line>` — `<change>`. Diagnostic clean." Then stop.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: 3d-lighting
|
|
3
|
-
description:
|
|
3
|
+
description: Use when setting up lighting in a 3D scene — adding lights, configuring WorldEnvironment, sky, or shadows. Covers DirectionalLight3D vs Omni vs Spot, shadow tuning, ambient/sky-driven lighting, and Godot 4.5-era conventions. Trigger on "lighting", "shadows", "WorldEnvironment", "sun", "ambient", "sky", "light".
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: [Cursor, Claude Code, Windsurf, Codex]
|
|
6
6
|
category: rendering-and-lighting
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browse-templates
|
|
3
|
+
description: Use when the user wants to see available Summer Engine project templates, start from an existing template, or asks "what templates exist?" — fetches the live list from github.com/SummerEngine, presents the choices, and creates a project from the chosen template via `summer create <slug> <project-name>`. Trigger on "templates", "starter", "boilerplate", "from a template", "what's available", "show me templates", "third-person", "platformer", "multiplayer starter".
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: [Cursor, Claude Code, Codex, Windsurf, Gemini, OpenCode]
|
|
6
|
+
category: scene-and-project
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Bash Read summer_get_project_context
|
|
9
|
+
paths: ["**/project.godot"]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# /browse-templates — Pick a community template and clone it
|
|
13
|
+
|
|
14
|
+
Summer's community templates live in [github.com/SummerEngine](https://github.com/orgs/SummerEngine/repositories) under `template-*` repos: `template-3d-third-person-controller`, `template-3d-lan-multiplayer-starter`, `template-2d-platformer`, and so on. They're working starter projects — open in Summer Engine and play immediately.
|
|
15
|
+
|
|
16
|
+
## When to use this skill
|
|
17
|
+
|
|
18
|
+
- User asks "what templates do you have?" / "what starter projects exist?"
|
|
19
|
+
- User says "start from a template" / "use the X template" / "is there a Y starter?"
|
|
20
|
+
- User describes a game shape that maps to a known template (third-person 3D, multiplayer, 2D platformer)
|
|
21
|
+
- User asks for a specific known template by name
|
|
22
|
+
|
|
23
|
+
## When NOT to use this skill
|
|
24
|
+
|
|
25
|
+
- User says "blank project" / "empty project" / "from scratch" → use `summer:new-project`.
|
|
26
|
+
- User wants to *make* a new template (contribute one) → that's not this skill; point them at the README's contributing section.
|
|
27
|
+
|
|
28
|
+
## Steps
|
|
29
|
+
|
|
30
|
+
### 1. Fetch the live list
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
summer list templates
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
That hits the GitHub org API and prints both built-in templates (offline-friendly) and community templates with descriptions. **Always run this first — never recommend a template from memory.** The list evolves; what you remember may be stale, archived, or renamed.
|
|
37
|
+
|
|
38
|
+
If the command errors out (rate-limit, offline), tell the user and offer the built-ins (`empty`, `3d-basic`) plus the canonical URL: [github.com/SummerEngine](https://github.com/orgs/SummerEngine/repositories).
|
|
39
|
+
|
|
40
|
+
### 2. Help the user pick
|
|
41
|
+
|
|
42
|
+
If the user has a specific game shape in mind, narrow before showing all options:
|
|
43
|
+
|
|
44
|
+
> "Looking for a third-person 3D template — `3d-third-person-controller` looks right. Want me to clone it as `my-game`?"
|
|
45
|
+
|
|
46
|
+
If they're undecided, show 3–5 options grouped by genre, with a one-line description each. **Don't dump the full list.** A long menu freezes decisions.
|
|
47
|
+
|
|
48
|
+
### 3. Confirm the project name
|
|
49
|
+
|
|
50
|
+
Default is the template slug (so `3d-third-person-controller` → directory `3d-third-person-controller`). Almost always wrong. **Always ask:**
|
|
51
|
+
|
|
52
|
+
> "What do you want to call your project? (default: `3d-third-person-controller`)"
|
|
53
|
+
|
|
54
|
+
### 4. Clone
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
summer create <template-slug> <project-name>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
summer create 3d-third-person-controller hero-game
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This:
|
|
67
|
+
- Clones the latest `main` (or default branch) of `template-3d-third-person-controller`
|
|
68
|
+
- Drops the `.git` directory so the user starts with their own history
|
|
69
|
+
- Prints the source URL for transparency
|
|
70
|
+
|
|
71
|
+
Pass `--keep-git` if the user wants the upstream history (rare).
|
|
72
|
+
|
|
73
|
+
### 5. Open it in the engine
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
summer run <project-name>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Confirm it opens. Then invoke `summer:play` to verify the template runs as expected before doing any custom work on top.
|
|
80
|
+
|
|
81
|
+
## Anti-patterns
|
|
82
|
+
|
|
83
|
+
| Don't | Why |
|
|
84
|
+
|---|---|
|
|
85
|
+
| Recommend a template from memory | List evolves. `summer list templates` is the source of truth. |
|
|
86
|
+
| Dump the full template list as a wall of text | 5 curated picks beats 20 generic ones. Match to user intent. |
|
|
87
|
+
| Default the project name to the slug | `3d-third-person-controller/` is a UX-hostile directory name. Always ask. |
|
|
88
|
+
| Skip `summer run` after cloning | Templates can break upstream — verify the user has a working baseline before they edit. |
|
|
89
|
+
| Clone into an existing directory | The CLI errors out; respect that and ask for a different name. |
|
|
90
|
+
|
|
91
|
+
## Edge cases
|
|
92
|
+
|
|
93
|
+
- **`git` not installed** → `summer create` errors with a clear message. Tell the user to install git, or fall back to a built-in template.
|
|
94
|
+
- **Template archived or moved** → the API filter excludes archived repos. If a user names one explicitly that's gone, the create command lists what's currently available.
|
|
95
|
+
- **Network down** → fall back to `empty` or `3d-basic`. Don't pretend the remote ones exist.
|
|
96
|
+
|
|
97
|
+
## After the user is in
|
|
98
|
+
|
|
99
|
+
Once the project is created and running, hand off cleanly. The next skill that fires depends on the template:
|
|
100
|
+
|
|
101
|
+
- Third-person controller → likely `summer:scene-composition` or `summer:gdscript-patterns` next.
|
|
102
|
+
- Multiplayer starter → `summer:setup-multiplayer` or `summer:host-authoritative-state`.
|
|
103
|
+
- 2D platformer → `summer:design-mechanic` for the platforming feel, then `summer:design-level`.
|
|
104
|
+
|
|
105
|
+
Don't auto-fire the next skill — wait for the user to say what they want to change first.
|