summer-engine 1.2.0 → 1.3.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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -24
  3. package/dist/bin/summer.js +4 -0
  4. package/dist/commands/doctor.d.ts +26 -0
  5. package/dist/commands/doctor.js +248 -0
  6. package/dist/commands/doctor.test.d.ts +1 -0
  7. package/dist/commands/doctor.test.js +29 -0
  8. package/dist/commands/mcp.js +49 -0
  9. package/dist/commands/setup.d.ts +2 -0
  10. package/dist/commands/setup.js +128 -0
  11. package/dist/commands/skills.js +254 -109
  12. package/dist/lib/agent-config.d.ts +39 -0
  13. package/dist/lib/agent-config.js +284 -0
  14. package/dist/lib/agent-config.test.d.ts +1 -0
  15. package/dist/lib/agent-config.test.js +80 -0
  16. package/dist/lib/api-client.d.ts +19 -2
  17. package/dist/lib/api-client.js +129 -14
  18. package/dist/lib/skills-registry.d.ts +75 -0
  19. package/dist/lib/skills-registry.js +143 -0
  20. package/dist/mcp/tools/project-tools.js +100 -23
  21. package/dist/mcp/tools/with-engine.js +3 -53
  22. package/package.json +5 -2
  23. package/skills/README.md +96 -0
  24. package/skills/_meta/skill-create/SKILL.md +143 -0
  25. package/skills/_meta/skill-improve/SKILL.md +89 -0
  26. package/skills/_meta/skill-test/SKILL.md +86 -0
  27. package/skills/_shared/collaborative-protocol.md +50 -0
  28. package/skills/_shared/gd-style.md +121 -0
  29. package/skills/_shared/godot-version.md +32 -0
  30. package/skills/_shared/mcp-tools-reference.md +133 -0
  31. package/skills/_shared/template-registry.md +40 -0
  32. package/skills/_tests/runner.md +90 -0
  33. package/skills/_tests/specs/3d-lighting.md +19 -0
  34. package/skills/_tests/specs/asset-strategy.md +19 -0
  35. package/skills/_tests/specs/fps-controller.md +100 -0
  36. package/skills/_tests/specs/gdscript-patterns.md +19 -0
  37. package/skills/_tests/specs/make-game.md +19 -0
  38. package/skills/_tests/specs/scene-composition.md +19 -0
  39. package/skills/_tests/specs/ui-basics.md +19 -0
  40. package/skills/{asset-strategy → asset-pipeline/asset-strategy}/SKILL.md +4 -5
  41. package/skills/catalog.yaml +636 -0
  42. package/skills/{fps-controller → character-controllers/fps-controller}/SKILL.md +6 -5
  43. package/skills/{3d-lighting → rendering-and-lighting/3d-lighting}/SKILL.md +5 -5
  44. package/skills/{make-game → scene-and-project/make-game}/SKILL.md +8 -8
  45. package/skills/{scene-composition → scene-and-project/scene-composition}/SKILL.md +6 -6
  46. package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/SKILL.md +7 -7
  47. package/skills/{ui-basics → ui-and-ux/ui-basics}/SKILL.md +5 -5
  48. /package/skills/{gdscript-patterns → scripting-patterns/gdscript-patterns}/reference.md +0 -0
@@ -0,0 +1,100 @@
1
+ # Skill Spec: /fps-controller
2
+
3
+ ## Fixture
4
+
5
+ - Empty Godot 4.5 / Summer Engine project, main scene open with a single `World` (Node3D) root.
6
+ - Summer MCP tools available (engine running on localhost:6550).
7
+ - No existing input actions in InputMap beyond Godot defaults.
8
+ - No script files attached.
9
+
10
+ ## Case 1: Happy Path — fresh FPS in an empty scene
11
+
12
+ **Input:** "Add a first-person controller to my scene."
13
+
14
+ **Expected MCP tool sequence (in order):**
15
+
16
+ 1. `summer_get_scene_tree` — verify empty World exists.
17
+ 2. `summer_add_node(parent="./World", type="CharacterBody3D", name="Player")`
18
+ 3. `summer_add_node(parent="./World/Player", type="CollisionShape3D", name="Collision")`
19
+ 4. `summer_add_node(parent="./World/Player", type="Camera3D", name="Camera")`
20
+ 5. `summer_set_prop("./World/Player/Collision", "shape", "CapsuleShape3D")` (creates standalone, NOT inline sub-resource)
21
+ 6. `summer_set_resource_property("./World/Player/Collision", "shape.height", "1.8")` (only after the shape is standalone)
22
+ 7. `summer_set_prop("./World/Player/Camera", "position", "Vector3(0, 1.6, 0)")`
23
+ 8. `summer_input_map_bind("move_forward", "key:W")`
24
+ 9. `summer_input_map_bind("move_back", "key:S")`
25
+ 10. `summer_input_map_bind("move_left", "key:A")`
26
+ 11. `summer_input_map_bind("move_right", "key:D")`
27
+ 12. `summer_input_map_bind("jump", "key:Space")`
28
+ 13. (User-side write) `Write` script file `scripts/player_controller.gd` after the agent asks "May I attach the controller script to ./World/Player?"
29
+ 14. `summer_save_scene`
30
+ 15. `summer_get_script_errors`
31
+
32
+ **Assertions:**
33
+
34
+ - [ ] CharacterBody3D node exists at `./World/Player`.
35
+ - [ ] CollisionShape3D is a child of Player with a CapsuleShape3D (NOT BoxShape, NOT SphereShape).
36
+ - [ ] Camera3D positioned at `y ≈ 1.6` (head height).
37
+ - [ ] All 5 input actions bound: `move_forward`, `move_back`, `move_left`, `move_right`, `jump`.
38
+ - [ ] Skill asks "May I create / attach …" before the script write.
39
+ - [ ] Skill never calls `summer_set_resource_property` on an inline `sub_resource` (the silent-fail trap from `_shared/mcp-tools-reference.md`).
40
+ - [ ] Final step is `summer_save_scene` followed by `summer_get_script_errors`.
41
+ - [ ] Script uses typed GDScript per `_shared/gd-style.md` (`@export`, `:=`, `class_name`).
42
+
43
+ ## Case 2: Failure Path — existing PlayerOld in scene
44
+
45
+ **Fixture:** Same as Case 1, but `World/PlayerOld` exists with a CharacterBody3D + collision (manually authored).
46
+
47
+ **Input:** "Add a first-person controller to my scene."
48
+
49
+ **Expected behavior:**
50
+
51
+ - Skill detects the name collision via `summer_get_scene_tree`.
52
+ - Skill asks: "I see `World/PlayerOld` already exists. Should I replace it, add a second player as `Player2`, or something else?"
53
+ - Does NOT silently overwrite.
54
+
55
+ **Assertions:**
56
+
57
+ - [ ] Skill calls `summer_get_scene_tree` before any mutation.
58
+ - [ ] Skill asks the user how to handle the collision before adding any node.
59
+ - [ ] No `summer_add_node` calls happen until the user answers.
60
+
61
+ ## Case 3: Edge Case — user says "third-person"
62
+
63
+ **Fixture:** Empty Godot project, main scene with `World` only.
64
+
65
+ **Input:** "Build a third-person FPS controller."
66
+
67
+ **Expected behavior:**
68
+
69
+ - Skill clarifies the contradiction: FPS = first-person; third-person ≠ FPS.
70
+ - Either asks the user which they meant, OR hands off to `/tps-controller` (when that skill ships) and explains the difference.
71
+
72
+ **Assertions:**
73
+
74
+ - [ ] Skill does NOT silently start building a third-person controller using FPS scaffolding.
75
+ - [ ] Skill explicitly names the ambiguity ("FPS means first-person; third-person is a separate skill").
76
+ - [ ] Skill offers a clear next step: clarify or use the right skill.
77
+
78
+ ## Case 4: No Summer MCP — file-edit fallback path
79
+
80
+ **Fixture:** Same as Case 1 except Summer MCP is NOT available (running in plain Cursor on a project where the engine is not connected).
81
+
82
+ **Input:** "Add a first-person controller to my scene."
83
+
84
+ **Expected behavior:**
85
+
86
+ - Skill detects no MCP and falls back to direct file edits on `level.tscn`.
87
+ - Writes a `.tscn` snippet with CharacterBody3D + CollisionShape3D + Camera3D following the format in the skill's "Fallback (no MCP)" sections.
88
+ - Writes `scripts/player_controller.gd` directly via host file-write tools.
89
+ - Edits `project.godot` to add the InputMap actions.
90
+
91
+ **Assertions:**
92
+
93
+ - [ ] Skill identifies that MCP is unavailable (does not blindly call `summer_*` tools and fail).
94
+ - [ ] Generated `.tscn` is syntactically valid Godot 4 scene format (parseable by Godot).
95
+ - [ ] Generated `project.godot` patch follows Godot's input action format (`input/move_forward = { ... }`).
96
+ - [ ] Skill still asks "May I write …" before each file write.
97
+
98
+ ---
99
+
100
+ This spec runs via `/skill-test fps-controller spec` (see `_meta/skill-test/SKILL.md`).
@@ -0,0 +1,19 @@
1
+ # Skill Spec: /gdscript-patterns
2
+
3
+ > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
+
5
+ ## Fixture
6
+
7
+ - TBD
8
+
9
+ ## Case 1: Happy Path
10
+
11
+ **Input:** "<typical user prompt>"
12
+
13
+ **Expected MCP tool sequence (in order):**
14
+
15
+ 1. TBD
16
+
17
+ **Assertions:**
18
+
19
+ - [ ] TBD
@@ -0,0 +1,19 @@
1
+ # Skill Spec: /make-game
2
+
3
+ > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
+
5
+ ## Fixture
6
+
7
+ - TBD
8
+
9
+ ## Case 1: Happy Path
10
+
11
+ **Input:** "<typical user prompt>"
12
+
13
+ **Expected MCP tool sequence (in order):**
14
+
15
+ 1. TBD
16
+
17
+ **Assertions:**
18
+
19
+ - [ ] TBD
@@ -0,0 +1,19 @@
1
+ # Skill Spec: /scene-composition
2
+
3
+ > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
+
5
+ ## Fixture
6
+
7
+ - TBD
8
+
9
+ ## Case 1: Happy Path
10
+
11
+ **Input:** "<typical user prompt>"
12
+
13
+ **Expected MCP tool sequence (in order):**
14
+
15
+ 1. TBD
16
+
17
+ **Assertions:**
18
+
19
+ - [ ] TBD
@@ -0,0 +1,19 @@
1
+ # Skill Spec: /ui-basics
2
+
3
+ > Stub spec. Expand with Happy / Failure / Edge cases. See `fps-controller.md` for the canonical format.
4
+
5
+ ## Fixture
6
+
7
+ - TBD
8
+
9
+ ## Case 1: Happy Path
10
+
11
+ **Input:** "<typical user prompt>"
12
+
13
+ **Expected MCP tool sequence (in order):**
14
+
15
+ 1. TBD
16
+
17
+ **Assertions:**
18
+
19
+ - [ ] TBD
@@ -1,11 +1,10 @@
1
1
  ---
2
2
  name: asset-strategy
3
- description: Decision guide for how to create different game asset types. Use when deciding whether to generate 3D models, textures, or use primitives. Includes prompt templates for AI image-to-3D pipeline.
3
+ description: Decision guide for how to create different game asset types — generated 3D, library search, AI textures, or primitives. Use when planning asset creation, picking an asset pipeline, or writing image-to-3D prompts. Trigger on "assets", "3D models", "textures", "art pipeline".
4
4
  license: MIT
5
- compatibility:
6
- - Cursor
7
- - Claude Code
8
- - Windsurf
5
+ compatibility: [Cursor, Claude Code, Windsurf, Codex]
6
+ category: asset-pipeline
7
+ allowed-tools: Read Grep summer_search_assets summer_import_asset summer_generate_image summer_generate_3d summer_generate_audio summer_import_from_url
9
8
  ---
10
9
 
11
10
  # Asset Strategy for Summer Engine