summer-engine 4.3.0 → 4.6.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 (231) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +3 -1
  3. package/.codex-plugin/plugin.json +5 -3
  4. package/.cursor-plugin/plugin.json +4 -2
  5. package/.factory-plugin/plugin.json +4 -2
  6. package/AGENTS.md +2 -2
  7. package/CHANGELOG.md +100 -0
  8. package/README.md +67 -27
  9. package/commands/start.md +19 -15
  10. package/commands/summer.md +1 -0
  11. package/dist/cli/command-usage.d.ts +3 -1
  12. package/dist/cli/command-usage.js +10 -4
  13. package/dist/cli/commands/create.d.ts +1 -25
  14. package/dist/cli/commands/create.js +10 -138
  15. package/dist/cli/commands/dev.d.ts +66 -0
  16. package/dist/cli/commands/dev.js +234 -0
  17. package/dist/cli/commands/install.d.ts +15 -58
  18. package/dist/cli/commands/install.js +31 -481
  19. package/dist/cli/commands/login.js +1 -1
  20. package/dist/cli/commands/ops.d.ts +17 -1
  21. package/dist/cli/commands/ops.js +97 -9
  22. package/dist/cli/commands/preview.d.ts +58 -0
  23. package/dist/cli/commands/preview.js +181 -0
  24. package/dist/cli/commands/run.d.ts +1 -17
  25. package/dist/cli/commands/run.js +17 -206
  26. package/dist/cli/commands/setup.js +175 -32
  27. package/dist/cli/index.js +5 -0
  28. package/dist/core/agent-host.d.ts +3 -0
  29. package/dist/core/agent-host.js +1 -1
  30. package/dist/core/api-client.d.ts +10 -2
  31. package/dist/core/api-client.js +13 -8
  32. package/dist/core/capabilities/agent-playbook.js +1 -0
  33. package/dist/core/capabilities/apps.d.ts +9 -9
  34. package/dist/core/capabilities/asset-import.d.ts +4 -1
  35. package/dist/core/capabilities/asset-import.js +15 -6
  36. package/dist/core/capabilities/capture-gameplay.js +1 -1
  37. package/dist/core/capabilities/connect-signal.d.ts +2 -2
  38. package/dist/core/capabilities/content-make/index.d.ts +81 -0
  39. package/dist/core/capabilities/content-make/index.js +706 -0
  40. package/dist/core/capabilities/content-make/media.d.ts +57 -0
  41. package/dist/core/capabilities/content-make/media.js +172 -0
  42. package/dist/core/capabilities/content-make/plan.d.ts +130 -0
  43. package/dist/core/capabilities/content-make/plan.js +433 -0
  44. package/dist/core/capabilities/content-make/render.d.ts +64 -0
  45. package/dist/core/capabilities/content-make/render.js +370 -0
  46. package/dist/core/capabilities/content-make/study.d.ts +13 -0
  47. package/dist/core/capabilities/content-make/study.js +165 -0
  48. package/dist/core/capabilities/content-make/types.d.ts +173 -0
  49. package/dist/core/capabilities/content-make/types.js +6 -0
  50. package/dist/core/capabilities/content-make/voice.d.ts +7 -0
  51. package/dist/core/capabilities/content-make/voice.js +27 -0
  52. package/dist/core/capabilities/events.d.ts +2 -2
  53. package/dist/core/capabilities/export-game.d.ts +4 -1
  54. package/dist/core/capabilities/export-game.js +4 -3
  55. package/dist/core/capabilities/export-presets.d.ts +2 -1
  56. package/dist/core/capabilities/export-presets.js +2 -1
  57. package/dist/core/capabilities/go-live.d.ts +14 -0
  58. package/dist/core/capabilities/go-live.js +408 -0
  59. package/dist/core/capabilities/image-generation.d.ts +6 -6
  60. package/dist/core/capabilities/item-manifest.d.ts +92 -0
  61. package/dist/core/capabilities/item-manifest.js +247 -0
  62. package/dist/core/capabilities/placement.d.ts +7 -7
  63. package/dist/core/capabilities/projects-local.d.ts +68 -0
  64. package/dist/core/capabilities/projects-local.js +172 -0
  65. package/dist/core/capabilities/publish-build.d.ts +13 -2
  66. package/dist/core/capabilities/publish-build.js +87 -21
  67. package/dist/core/capabilities/publish-download.js +1 -1
  68. package/dist/core/capabilities/runtime-control.d.ts +7 -2
  69. package/dist/core/capabilities/runtime-control.js +27 -1
  70. package/dist/core/capabilities/seeing/args.d.ts +2 -2
  71. package/dist/core/capabilities/store-checks.d.ts +45 -0
  72. package/dist/core/capabilities/store-checks.js +85 -0
  73. package/dist/core/capabilities/store-details.d.ts +37 -0
  74. package/dist/core/capabilities/store-details.js +94 -0
  75. package/dist/core/capabilities/summer-bundle.d.ts +21 -2
  76. package/dist/core/capabilities/summer-bundle.js +54 -7
  77. package/dist/core/capabilities/sync-items.d.ts +89 -0
  78. package/dist/core/capabilities/sync-items.js +352 -0
  79. package/dist/core/capabilities/tool-dispatch.js +66 -6
  80. package/dist/core/capabilities/video-ogv.d.ts +49 -0
  81. package/dist/core/capabilities/video-ogv.js +260 -0
  82. package/dist/core/capability-skew.js +2 -2
  83. package/dist/core/cli-usage-beacon.js +26 -2
  84. package/dist/core/cli-usage.d.ts +5 -2
  85. package/dist/core/cli-usage.js +8 -2
  86. package/dist/core/engine-install.d.ts +53 -0
  87. package/dist/core/engine-install.js +93 -0
  88. package/dist/core/engine-installer.d.ts +134 -0
  89. package/dist/core/engine-installer.js +760 -0
  90. package/dist/core/engine-launch.d.ts +126 -0
  91. package/dist/core/engine-launch.js +398 -0
  92. package/dist/core/engine-self-start.d.ts +63 -0
  93. package/dist/core/engine-self-start.js +282 -0
  94. package/dist/core/engine.d.ts +7 -1
  95. package/dist/core/engine.js +9 -2
  96. package/dist/core/error-codes.d.ts +4 -1
  97. package/dist/core/error-codes.js +7 -3
  98. package/dist/core/library-read.d.ts +2 -2
  99. package/dist/core/library-search.d.ts +2 -2
  100. package/dist/core/local-project.d.ts +50 -0
  101. package/dist/core/local-project.js +234 -0
  102. package/dist/core/ops/areas.js +9 -3
  103. package/dist/core/ops/catalog.d.ts +9 -0
  104. package/dist/core/ops/catalog.js +56 -4
  105. package/dist/core/ops/engine-answer.d.ts +4 -1
  106. package/dist/core/ops/engine-answer.js +16 -3
  107. package/dist/core/ops/engine.js +4 -4
  108. package/dist/core/ops/save-files.d.ts +6 -1
  109. package/dist/core/ops/save-files.js +67 -50
  110. package/dist/core/ops/search.js +9 -2
  111. package/dist/core/preview/input.d.ts +35 -0
  112. package/dist/core/preview/input.js +105 -0
  113. package/dist/core/preview/launch-config.d.ts +52 -0
  114. package/dist/core/preview/launch-config.js +137 -0
  115. package/dist/core/preview/page.d.ts +22 -0
  116. package/dist/core/preview/page.js +232 -0
  117. package/dist/core/preview/preview-source.d.ts +179 -0
  118. package/dist/core/preview/preview-source.js +350 -0
  119. package/dist/core/preview/server.d.ts +26 -0
  120. package/dist/core/preview/server.js +218 -0
  121. package/dist/core/telemetry.d.ts +20 -16
  122. package/dist/core/telemetry.js +92 -16
  123. package/dist/core/templates.d.ts +20 -0
  124. package/dist/core/templates.js +300 -3
  125. package/dist/core/tool-profiles.d.ts +2 -2
  126. package/dist/core/tool-profiles.js +1 -0
  127. package/dist/core/usage-fields.d.ts +41 -0
  128. package/dist/core/usage-fields.js +150 -0
  129. package/dist/core/util/sleep.d.ts +3 -0
  130. package/dist/core/util/sleep.js +12 -0
  131. package/dist/installer/agent-config.d.ts +29 -0
  132. package/dist/installer/agent-config.js +75 -11
  133. package/dist/installer/agent-detect.d.ts +44 -0
  134. package/dist/installer/agent-detect.js +166 -0
  135. package/dist/installer/agent-table.d.ts +19 -0
  136. package/dist/installer/agent-table.js +130 -0
  137. package/dist/installer/setup-error.d.ts +19 -0
  138. package/dist/installer/setup-error.js +34 -0
  139. package/dist/installer/version-check.d.ts +5 -0
  140. package/dist/installer/version-check.js +21 -0
  141. package/dist/mcp/ops-surface.d.ts +7 -0
  142. package/dist/mcp/ops-surface.js +40 -3
  143. package/dist/mcp/server.d.ts +14 -4
  144. package/dist/mcp/server.js +42 -8
  145. package/dist/mcp/tool-surface.d.ts +8 -0
  146. package/dist/mcp/tool-surface.js +19 -2
  147. package/dist/mcp/tools/creator-tools.js +92 -14
  148. package/dist/mcp/tools/debug-tools.js +2 -0
  149. package/dist/mcp/tools/local-project-tools.d.ts +6 -0
  150. package/dist/mcp/tools/local-project-tools.js +33 -0
  151. package/dist/mcp/tools/navigation-tools.js +2 -1
  152. package/dist/mcp/tools/project-tools.js +5 -8
  153. package/dist/mcp/tools/seeing-tools.js +1 -1
  154. package/dist/mcp/tools/visual-tools.js +1 -1
  155. package/dist/mcp/tools/with-engine.js +1 -1
  156. package/dist/project-memory/agent-instructions.js +11 -3
  157. package/gemini-extension.json +3 -1
  158. package/library/references/mcp-tools-reference/mcp-tools-reference.md +18 -5
  159. package/library/skills/README.md +12 -8
  160. package/library/skills/animated-loop/SKILL.md +10 -16
  161. package/library/skills/cinematic-cutscene/SKILL.md +7 -18
  162. package/library/skills/headless-scripting/SKILL.md +7 -4
  163. package/library/skills/in-game-purchases/SKILL.md +25 -8
  164. package/library/skills/in-game-purchases/resource.yaml +2 -1
  165. package/library/skills/launch-ready/SKILL.md +351 -0
  166. package/library/skills/launch-ready/resource.yaml +45 -0
  167. package/library/skills/make-content/SKILL.md +202 -0
  168. package/library/skills/make-content/resource.yaml +32 -0
  169. package/library/skills/make-game/SKILL.md +6 -4
  170. package/library/skills/make-game/resource.yaml +2 -1
  171. package/library/skills/navigate-summer/SKILL.md +4 -2
  172. package/library/skills/new-project/SKILL.md +15 -22
  173. package/library/skills/new-project/resource.yaml +2 -1
  174. package/library/skills/painted-25d-world/SKILL.md +366 -0
  175. package/library/skills/painted-25d-world/_building-blocks/blender-route.md +33 -0
  176. package/library/skills/painted-25d-world/_building-blocks/blockout_builder.gd +149 -0
  177. package/library/skills/painted-25d-world/_building-blocks/capture_paint_view.gd +32 -0
  178. package/library/skills/painted-25d-world/_building-blocks/paint_projection.gdshader +23 -0
  179. package/library/skills/painted-25d-world/_building-blocks/paintcam_check.gd +25 -0
  180. package/library/skills/painted-25d-world/_building-blocks/painted_door.gd +17 -0
  181. package/library/skills/painted-25d-world/_building-blocks/painted_location.gd +56 -0
  182. package/library/skills/painted-25d-world/_building-blocks/painted_player.gd +125 -0
  183. package/library/skills/painted-25d-world/_building-blocks/painted_world.gd +111 -0
  184. package/library/skills/painted-25d-world/_building-blocks/tools/cam.py +57 -0
  185. package/library/skills/painted-25d-world/_building-blocks/tools/detail4k.py +81 -0
  186. package/library/skills/painted-25d-world/_building-blocks/tools/overlay.py +17 -0
  187. package/library/skills/painted-25d-world/_building-blocks/tools/preview.py +60 -0
  188. package/library/skills/painted-25d-world/resource.yaml +39 -0
  189. package/library/skills/publish-your-game/SKILL.md +13 -14
  190. package/library/skills/publish-your-game/resource.yaml +4 -3
  191. package/library/skills/release-checklist/SKILL.md +188 -0
  192. package/library/skills/release-checklist/resource.yaml +40 -0
  193. package/library/skills/release-readiness/SKILL.md +1 -1
  194. package/library/skills/release-readiness/resource.yaml +1 -1
  195. package/library/skills/store-art/SKILL.md +1 -1
  196. package/library/skills/store-art/resource.yaml +1 -1
  197. package/library/skills/store-listing/SKILL.md +1 -1
  198. package/library/skills/store-listing/resource.yaml +1 -1
  199. package/library/skills/summer-cli/SKILL.md +2 -0
  200. package/library/skills/summer-store/SKILL.md +295 -39
  201. package/library/skills/summer-store/resource.yaml +9 -3
  202. package/library/skills/trailer-shot/SKILL.md +3 -3
  203. package/library/templates/README.md +5 -0
  204. package/library/tools/content-make/resource.yaml +132 -0
  205. package/library/tools/frame-shot/GUIDE.md +1 -1
  206. package/library/tools/go-live/resource.yaml +67 -0
  207. package/library/tools/import-from-url/GUIDE.md +1 -0
  208. package/library/tools/import-from-url-batch/GUIDE.md +1 -1
  209. package/library/tools/play/GUIDE.md +2 -0
  210. package/library/tools/projects-create-local/resource.yaml +55 -0
  211. package/library/tools/projects-open-local/resource.yaml +51 -0
  212. package/library/tools/publish-build/resource.yaml +3 -3
  213. package/library/tools/screenshot/GUIDE.md +1 -1
  214. package/library/tools/store-set-details/resource.yaml +114 -0
  215. package/library/tools/sync-items/resource.yaml +72 -0
  216. package/package.json +1 -1
  217. package/registry/generated/aliases.json +6 -0
  218. package/registry/generated/counts.json +3 -3
  219. package/registry/generated/gemini-extension.json +3 -1
  220. package/registry/generated/index.json +463 -37
  221. package/registry/generated/marketplace.claude.json +1 -1
  222. package/registry/generated/plugin.claude-directory.json +4 -2
  223. package/registry/generated/plugin.claude.json +3 -1
  224. package/registry/generated/plugin.codex.json +5 -3
  225. package/registry/generated/plugin.cursor.json +4 -2
  226. package/registry/generated/plugin.factory.json +4 -2
  227. package/registry/generated/server.json +2 -2
  228. package/registry/generated/skills-index.md +12 -8
  229. package/registry/generated/skills-registry.json +62 -5
  230. package/registry/operations/legacy-names.json +40 -0
  231. package/registry/operations/public-catalog.json +10144 -387
@@ -0,0 +1,173 @@
1
+ /**
2
+ * The records content.make keeps in a piece's work folder. Each stage
3
+ * writes one; a run that finds a stage's record (and its inputs unchanged)
4
+ * skips that stage, so a stopped run picks up where it stopped.
5
+ */
6
+ /** One beat of a reference, as Summer's reference library describes it. */
7
+ export interface RefBeat {
8
+ t: [number, number];
9
+ shot: string;
10
+ vo: string;
11
+ caption: string;
12
+ }
13
+ /** A reference from content.list_references (the fields the engine reads). */
14
+ export interface Reference {
15
+ referenceId: string;
16
+ title: string;
17
+ url?: string;
18
+ platform?: string;
19
+ formatType?: string | null;
20
+ format?: string;
21
+ locked?: boolean;
22
+ whyItPerforms?: string;
23
+ howGamesCanUseIt?: string;
24
+ hook?: string;
25
+ captionStyle?: string;
26
+ voPattern?: string;
27
+ idea?: string | null;
28
+ ideas?: Array<{
29
+ genre: string;
30
+ idea: string;
31
+ }>;
32
+ genres?: string[];
33
+ stats?: {
34
+ views?: number;
35
+ likes?: number;
36
+ postedAt?: string;
37
+ };
38
+ breakoutRatio?: number;
39
+ expiresAt?: string;
40
+ beats?: RefBeat[];
41
+ }
42
+ export interface CaptionStyle {
43
+ /** held: one line stays for its beats; words: the voice's words a few at a time; beats: each beat's own line. */
44
+ mode: "held" | "words" | "beats";
45
+ /** Most words on screen at once in words mode. */
46
+ chunk: number;
47
+ case: "lower" | "upper" | "sentence";
48
+ /** Centre of the text block, as a share of the height. */
49
+ y: number;
50
+ color: string;
51
+ /** The longest word of a chunk in this colour (words mode), or none. */
52
+ highlight: string | null;
53
+ font: "sans" | "rounded" | "serif";
54
+ size: number;
55
+ outline: boolean;
56
+ /** Wrap the text in quote marks. */
57
+ quoted: boolean;
58
+ }
59
+ export interface Study {
60
+ referenceId: string;
61
+ file: string;
62
+ duration: number;
63
+ width: number;
64
+ height: number;
65
+ /** Hard cuts, seconds. */
66
+ cuts: number[];
67
+ /** Shot index -> black (a black beat to copy). */
68
+ black: boolean[];
69
+ hasVoice: boolean;
70
+ /** Seconds to the first hard cut. */
71
+ firstCut: number;
72
+ caption: CaptionStyle;
73
+ music: boolean;
74
+ }
75
+ export interface FootageClip {
76
+ path: string;
77
+ kind: "video" | "image";
78
+ duration: number;
79
+ width: number;
80
+ height: number;
81
+ hasAudio: boolean;
82
+ /** Mean motion (YDIF) per half second. */
83
+ motion: number[];
84
+ /** Mean brightness (0-255) per half second. */
85
+ luma: number[];
86
+ /** Search words: file and folder names, sidecar notes. */
87
+ tags: string[];
88
+ /** What happens in it, from a sidecar (shots.json or <clip>.json), when there is one. */
89
+ about?: string;
90
+ }
91
+ export interface FootageIndex {
92
+ clips: FootageClip[];
93
+ music: string[];
94
+ }
95
+ /** One shot of the cut: a window of a clip, a still, or a colour (a black beat). */
96
+ export interface ShotSpec {
97
+ src?: string;
98
+ t?: number;
99
+ speed?: number;
100
+ cx?: number;
101
+ cy?: number;
102
+ z0?: number;
103
+ z1?: number;
104
+ color?: string;
105
+ mute?: boolean;
106
+ /** Why this shot (the reference shot it copies). */
107
+ beat?: string;
108
+ }
109
+ export interface CaptionItem {
110
+ text: string;
111
+ from: number;
112
+ to: number;
113
+ }
114
+ export interface Plan {
115
+ version: 1;
116
+ referenceId: string;
117
+ contentGameId: string;
118
+ title: string;
119
+ format: string;
120
+ /** Our words, one per reference beat ("" for none). Lines still marked TODO block the render. */
121
+ lines: string[];
122
+ /** The reference's own words per beat, for whoever writes ours (never rendered). */
123
+ refLines: string[];
124
+ /** Cut times, seconds, from 0 to the end. */
125
+ cuts: number[];
126
+ shots: ShotSpec[];
127
+ caption: CaptionStyle;
128
+ /** Held or beat captions; words mode builds its own from the voice. */
129
+ captions: CaptionItem[];
130
+ voice: {
131
+ file: string | null;
132
+ needed: boolean;
133
+ };
134
+ /** The game's own song (never the reference's audio), from musicStart seconds in, and how loud the game's sound sits under it. */
135
+ audio: {
136
+ music: string | null;
137
+ musicStart?: number;
138
+ bedDb: number;
139
+ };
140
+ /** Post caption per platform. */
141
+ post: {
142
+ caption: string;
143
+ hashtags: string[];
144
+ title?: string;
145
+ };
146
+ /** Shown under the player on Today (content.save_piece why). */
147
+ why: {
148
+ referenceId: string;
149
+ fitReason: string;
150
+ refStats: {
151
+ views?: number;
152
+ likes?: number;
153
+ postedAt?: string;
154
+ };
155
+ commit?: {
156
+ sha: string;
157
+ title: string;
158
+ };
159
+ };
160
+ /** Pictures over the cut: a PNG (1080x1920, transparent) from one time to another. */
161
+ overlays: Array<{
162
+ file: string;
163
+ from: number;
164
+ to: number;
165
+ }>;
166
+ }
167
+ export interface Check {
168
+ /** The names Studio labels (content.save_piece checks). */
169
+ name: "hook_time" | "lowest_motion" | "safe_zones" | "loudness" | "length" | "gameplay_seconds";
170
+ value: string;
171
+ pass: boolean;
172
+ note?: string;
173
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The records content.make keeps in a piece's work folder. Each stage
3
+ * writes one; a run that finds a stage's record (and its inputs unchanged)
4
+ * skips that stage, so a stopped run picks up where it stopped.
5
+ */
6
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { Word } from "./plan.js";
2
+ /**
3
+ * Word times of a voice-over, from a Whisper on this computer: mlx_whisper
4
+ * (Apple silicon) or the openai-whisper command. The words are cut to and
5
+ * captioned from these times.
6
+ */
7
+ export declare function transcribeWords(audio: string, workDir: string): Promise<Word[]>;
@@ -0,0 +1,27 @@
1
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
2
+ import { basename, extname, join } from "node:path";
3
+ import { BuildToolError } from "../summer-bundle.js";
4
+ import { run, which } from "./media.js";
5
+ /**
6
+ * Word times of a voice-over, from a Whisper on this computer: mlx_whisper
7
+ * (Apple silicon) or the openai-whisper command. The words are cut to and
8
+ * captioned from these times.
9
+ */
10
+ export async function transcribeWords(audio, workDir) {
11
+ const out = join(workDir, "whisper");
12
+ mkdirSync(out, { recursive: true });
13
+ const json = join(out, `${basename(audio, extname(audio))}.json`);
14
+ if (!existsSync(json)) {
15
+ if (which("mlx_whisper")) {
16
+ await run("mlx_whisper", [audio, "--model", "mlx-community/whisper-small.en-mlx", "--word-timestamps", "True", "--output-format", "json", "--output-dir", out]);
17
+ }
18
+ else if (which("whisper")) {
19
+ await run("whisper", [audio, "--model", "small.en", "--word_timestamps", "True", "--output_format", "json", "--output_dir", out]);
20
+ }
21
+ else {
22
+ throw new BuildToolError("content_tool_missing", "A voice-over needs Whisper on this computer for its word times.", "Install one (Apple silicon: pipx install mlx-whisper; else pipx install openai-whisper), then run it again.", undefined, { missing: "Whisper on this computer (pipx install mlx-whisper)" });
23
+ }
24
+ }
25
+ const parsed = JSON.parse(readFileSync(json, "utf8"));
26
+ return (parsed.segments ?? []).flatMap((segment) => (segment.words ?? []).map((word) => ({ w: word.word.trim(), s: Math.round(word.start * 100) / 100, e: Math.round(word.end * 100) / 100 }))).filter((word) => word.w);
27
+ }
@@ -94,12 +94,12 @@ export declare const recentEventsArgsSchema: z.ZodObject<{
94
94
  limit: z.ZodOptional<z.ZodNumber>;
95
95
  }, "strip", z.ZodTypeAny, {
96
96
  kinds?: string[] | undefined;
97
- since?: number | undefined;
98
97
  limit?: number | undefined;
98
+ since?: number | undefined;
99
99
  }, {
100
100
  kinds?: string[] | undefined;
101
- since?: number | undefined;
102
101
  limit?: number | undefined;
102
+ since?: number | undefined;
103
103
  }>;
104
104
  export type RecentEventsArgs = z.infer<typeof recentEventsArgsSchema>;
105
105
  export interface WaitForEventResult {
@@ -9,7 +9,8 @@ export { runEngine, SUMMER_GAMES_PRESET, type EngineRun };
9
9
  *
10
10
  * <engine> --headless --summer-no-api --path <project> --export-release "<preset>" <out>
11
11
  *
12
- * format "bundle" (default): the summer.bundle.v1 .zip for build-publications
12
+ * format "bundle" (default): the summer.bundle.v2 .zip (summer.bundle.v1 from
13
+ * engines before 0.7.4) for build-publications
13
14
  * (summer_publish_build). Summer runs its client.pck on its own templates in
14
15
  * the Summer Games apps, so no template and no signing. Without targets the
15
16
  * engine's in-memory "summer.games" preset is used as is (every platform
@@ -62,8 +63,10 @@ export interface ExportGameResult {
62
63
  engine: string;
63
64
  durationMs: number;
64
65
  /** Bundle format: the bundle manifest. */
66
+ /** paths: every entry of the .zip, summer-bundle.json included (the fixed layout a release checklist compares). */
65
67
  bundle?: Omit<SummerBundle, "hostedBuild" | "files"> & {
66
68
  fileCount: number;
69
+ paths: string[];
67
70
  };
68
71
  /** Download format: the store versions platform id (web, macos-universal, windows-x64). */
69
72
  storePlatform?: string;
@@ -10,7 +10,7 @@ import { engineErrorLines, runEngine } from "./engine-run.js";
10
10
  import { assertExportEngine, ENGINE_UPDATE_HOW, installedEngineVersion, targetsNeedingNewerEngine } from "./export-engine-version.js";
11
11
  import { BUNDLE_TARGETS, DOWNLOAD_TARGETS, SUMMER_GAMES_PRESET, bundlePresetSpec, ensurePreset, normalizeTargets, variantString, } from "./export-presets.js";
12
12
  import { engineTemplateInfo, findInstalledTemplate, templateFileFor } from "./export-templates.js";
13
- import { BuildToolError, declarationMismatch, hashFile, readSummerBundle, samePlatforms } from "./summer-bundle.js";
13
+ import { BUNDLE_MANIFEST, BuildToolError, declarationMismatch, hashFile, readSummerBundle, samePlatforms } from "./summer-bundle.js";
14
14
  export { runEngine, SUMMER_GAMES_PRESET };
15
15
  /**
16
16
  * summer_export_game: run the installed Summer Engine headless and return the
@@ -18,7 +18,8 @@ export { runEngine, SUMMER_GAMES_PRESET };
18
18
  *
19
19
  * <engine> --headless --summer-no-api --path <project> --export-release "<preset>" <out>
20
20
  *
21
- * format "bundle" (default): the summer.bundle.v1 .zip for build-publications
21
+ * format "bundle" (default): the summer.bundle.v2 .zip (summer.bundle.v1 from
22
+ * engines before 0.7.4) for build-publications
22
23
  * (summer_publish_build). Summer runs its client.pck on its own templates in
23
24
  * the Summer Games apps, so no template and no signing. Without targets the
24
25
  * engine's in-memory "summer.games" preset is used as is (every platform
@@ -378,7 +379,7 @@ export async function exportGame(input, overrides = {}) {
378
379
  debug,
379
380
  engine: binary,
380
381
  durationMs: deps.now().getTime() - started.getTime(),
381
- bundle: { ...summary, fileCount: files.length },
382
+ bundle: { ...summary, fileCount: files.length, paths: [BUNDLE_MANIFEST, ...files.map((file) => file.path)].sort() },
382
383
  ...(projectChanges.length ? { projectChanges } : {}),
383
384
  ...(warnings.length ? { warnings } : {}),
384
385
  next: "Upload it to the game's store listing with summer_publish_build (gameId, clientVersion).",
@@ -2,7 +2,8 @@
2
2
  * Store targets for summer_export_game, and the export presets that make them.
3
3
  *
4
4
  * The Summer Games store has two intakes:
5
- * - build-publications takes ONE summer.bundle.v1 .zip per Build. Summer runs
5
+ * - build-publications takes ONE summer.bundle .zip (v2, or v1 from older
6
+ * engines) per Build. Summer runs
6
7
  * its client.pck on its own client templates (the Summer Games iOS and
7
8
  * Android apps, the Summer desktop app on macOS and Windows), so the creator
8
9
  * needs no export template and signs nothing. A target only picks the
@@ -6,7 +6,8 @@ import { BuildToolError } from "./summer-bundle.js";
6
6
  * Store targets for summer_export_game, and the export presets that make them.
7
7
  *
8
8
  * The Summer Games store has two intakes:
9
- * - build-publications takes ONE summer.bundle.v1 .zip per Build. Summer runs
9
+ * - build-publications takes ONE summer.bundle .zip (v2, or v1 from older
10
+ * engines) per Build. Summer runs
10
11
  * its client.pck on its own client templates (the Summer Games iOS and
11
12
  * Android apps, the Summer desktop app on macOS and Windows), so the creator
12
13
  * needs no export template and signs nothing. A target only picks the
@@ -0,0 +1,14 @@
1
+ import { type PublishBuildDependencies } from "./publish-build.js";
2
+ export interface GoLiveInput {
3
+ gameId?: string;
4
+ /** The bundle Build to release (build-publications id). Default: the newest export that passed its checks. */
5
+ publicationId?: string;
6
+ confirm?: boolean;
7
+ waitSeconds?: number;
8
+ face: "cli" | "mcp";
9
+ }
10
+ export type GoLiveResult = Record<string, unknown> & {
11
+ ok: true;
12
+ status: string;
13
+ };
14
+ export declare function goLive(input: GoLiveInput, overrides?: Partial<PublishBuildDependencies>): Promise<GoLiveResult>;