summer-engine 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.cursor-plugin/plugin.json +1 -1
  5. package/.factory-plugin/plugin.json +1 -1
  6. package/.opencode/INSTALL.md +8 -8
  7. package/.opencode/plugins/summer.js +2 -2
  8. package/AGENTS.md +7 -7
  9. package/CHANGELOG.md +14 -0
  10. package/GEMINI.md +1 -1
  11. package/NOTICE +1 -1
  12. package/README.md +30 -34
  13. package/assets/autopilot/run.sh +2 -2
  14. package/assets/navigation/web-routes.json +1 -1
  15. package/commands/gameskill.md +2 -2
  16. package/commands/summer.md +25 -25
  17. package/dist/cli/commands/open.d.ts +1 -1
  18. package/dist/cli/commands/run.d.ts +1 -1
  19. package/dist/cli/commands/run.js +1 -1
  20. package/dist/cli/commands/skills.js +2 -2
  21. package/dist/core/api-client.d.ts +5 -6
  22. package/dist/core/api-client.js +12 -15
  23. package/dist/core/auth.js +2 -2
  24. package/dist/core/capabilities/asset-import.d.ts +0 -1
  25. package/dist/core/capabilities/camera-view.d.ts +1 -1
  26. package/dist/core/capabilities/camera-view.js +2 -2
  27. package/dist/core/capabilities/connect-signal.d.ts +1 -2
  28. package/dist/core/capabilities/connect-signal.js +1 -2
  29. package/dist/core/capabilities/console-read.d.ts +2 -2
  30. package/dist/core/capabilities/console-read.js +2 -2
  31. package/dist/core/capabilities/engine-receipt.d.ts +5 -7
  32. package/dist/core/capabilities/engine-receipt.js +7 -9
  33. package/dist/core/capabilities/export-game.js +3 -3
  34. package/dist/core/capabilities/export-presets.d.ts +1 -1
  35. package/dist/core/capabilities/export-presets.js +1 -1
  36. package/dist/core/capabilities/fabricate-mesh.d.ts +2 -3
  37. package/dist/core/capabilities/fabricate-mesh.js +2 -3
  38. package/dist/core/capabilities/frame-quality.d.ts +4 -4
  39. package/dist/core/capabilities/frame-quality.js +4 -4
  40. package/dist/core/capabilities/grep.d.ts +1 -1
  41. package/dist/core/capabilities/grep.js +1 -1
  42. package/dist/core/capabilities/navigation/open.d.ts +1 -1
  43. package/dist/core/capabilities/navigation/open.js +1 -1
  44. package/dist/core/capabilities/navigation/render-product-map.js +1 -1
  45. package/dist/core/capabilities/navigation/targets.js +2 -2
  46. package/dist/core/capabilities/placement-batch.d.ts +1 -1
  47. package/dist/core/capabilities/placement-batch.js +2 -2
  48. package/dist/core/capabilities/play-determinism.d.ts +1 -1
  49. package/dist/core/capabilities/play-determinism.js +1 -1
  50. package/dist/core/capabilities/publish-build.d.ts +1 -1
  51. package/dist/core/capabilities/publish-build.js +4 -6
  52. package/dist/core/capabilities/publish-download.d.ts +1 -2
  53. package/dist/core/capabilities/publish-download.js +2 -3
  54. package/dist/core/capabilities/replace-node.d.ts +1 -3
  55. package/dist/core/capabilities/replace-node.js +1 -3
  56. package/dist/core/capabilities/runtime-control.d.ts +5 -7
  57. package/dist/core/capabilities/runtime-control.js +7 -9
  58. package/dist/core/capabilities/scene-batch.d.ts +1 -1
  59. package/dist/core/capabilities/scene-batch.js +1 -1
  60. package/dist/core/capabilities/scene-kind.js +1 -1
  61. package/dist/core/capabilities/scene-readback.d.ts +3 -4
  62. package/dist/core/capabilities/scene-readback.js +3 -4
  63. package/dist/core/capabilities/scene-script.d.ts +2 -2
  64. package/dist/core/capabilities/scene-script.js +2 -2
  65. package/dist/core/capabilities/seeing/shot-store.d.ts +1 -1
  66. package/dist/core/capabilities/seeing/shot-store.js +1 -1
  67. package/dist/core/capabilities/summer-bundle.d.ts +2 -3
  68. package/dist/core/capabilities/summer-bundle.js +2 -3
  69. package/dist/core/capabilities/surface-snap.d.ts +1 -1
  70. package/dist/core/capabilities/surface-snap.js +1 -1
  71. package/dist/core/capabilities/tool-dispatch.js +1 -1
  72. package/dist/core/capabilities/ui-control.d.ts +1 -2
  73. package/dist/core/capabilities/ui-control.js +1 -2
  74. package/dist/core/capabilities/world-snapshot.d.ts +1 -1
  75. package/dist/core/capabilities/world-snapshot.js +1 -1
  76. package/dist/core/capability-skew.d.ts +2 -3
  77. package/dist/core/capability-skew.js +4 -5
  78. package/dist/core/feedback/client.js +1 -1
  79. package/dist/core/launch-posture.d.ts +3 -3
  80. package/dist/core/launch-posture.js +3 -3
  81. package/dist/core/library-read.js +1 -2
  82. package/dist/core/templates.d.ts +1 -2
  83. package/dist/core/templates.js +1 -2
  84. package/dist/mcp/server.d.ts +2 -2
  85. package/dist/mcp/server.js +2 -2
  86. package/dist/mcp/tools/creator-tools.js +1 -1
  87. package/dist/mcp/tools/debug-tools.js +1 -1
  88. package/dist/mcp/tools/generate-tools.js +7 -7
  89. package/dist/mcp/tools/navigation-tools.d.ts +1 -1
  90. package/dist/mcp/tools/navigation-tools.js +1 -1
  91. package/dist/mcp/tools/spatial-tools.js +1 -1
  92. package/dist/mcp/tools/visual-tools.js +2 -2
  93. package/dist/mcp/tools/with-engine.d.ts +1 -2
  94. package/dist/mcp/tools/with-engine.js +1 -2
  95. package/gemini-extension.json +1 -1
  96. package/hooks/session-start.sh +2 -2
  97. package/integrations/README.md +70 -76
  98. package/integrations/claude/README.md +0 -3
  99. package/integrations/codex/README.md +1 -2
  100. package/integrations/copilot-jetbrains/README.md +1 -1
  101. package/integrations/cursor/README.md +1 -2
  102. package/integrations/factory/README.md +15 -11
  103. package/integrations/mistral-vibe/README.md +1 -1
  104. package/integrations/opencode/README.md +1 -1
  105. package/integrations/roo-code/README.md +1 -1
  106. package/integrations/rovo-dev/README.md +1 -1
  107. package/integrations/trae/README.md +1 -1
  108. package/integrations/windsurf/README.md +3 -3
  109. package/library/references/collaborative-protocol/collaborative-protocol.md +5 -5
  110. package/library/references/gd-style/gd-style.md +4 -6
  111. package/library/references/godot-version/godot-version.md +3 -3
  112. package/library/references/headless-routing/headless-routing.md +2 -2
  113. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +2 -2
  114. package/library/references/mcp-tools-reference/mcp-tools-reference.md +15 -14
  115. package/library/references/product-map/product-map.md +1 -1
  116. package/library/references/public-surface-language/public-surface-language.md +1 -1
  117. package/library/references/summer-folder/summer-folder.md +1 -1
  118. package/library/skills/3d-lighting/SKILL.md +4 -4
  119. package/library/skills/README.md +5 -5
  120. package/library/skills/adaptive-music/SKILL.md +7 -7
  121. package/library/skills/ai-characters-in-games/SKILL.md +1 -1
  122. package/library/skills/ambient-bed/SKILL.md +12 -14
  123. package/library/skills/animated-loop/SKILL.md +42 -42
  124. package/library/skills/animation-tree/SKILL.md +6 -6
  125. package/library/skills/art-direction/SKILL.md +8 -11
  126. package/library/skills/asset-strategy/SKILL.md +3 -3
  127. package/library/skills/audio-direction/SKILL.md +8 -10
  128. package/library/skills/auto-fire-targeting/SKILL.md +4 -3
  129. package/library/skills/bounded-engine-runs/SKILL.md +6 -7
  130. package/library/skills/brainstorm-game/SKILL.md +5 -5
  131. package/library/skills/brainstorming/SKILL.md +9 -15
  132. package/library/skills/celeste-momentum-platforming/SKILL.md +8 -13
  133. package/library/skills/celeste-momentum-platforming/resource.yaml +1 -1
  134. package/library/skills/character-animation-wiring/SKILL.md +2 -2
  135. package/library/skills/character-model/SKILL.md +15 -26
  136. package/library/skills/character-movement/SKILL.md +1 -1
  137. package/library/skills/character-movement/references/movement-3d.md +1 -1
  138. package/library/skills/character-portrait/SKILL.md +4 -4
  139. package/library/skills/cinematic-cutscene/SKILL.md +38 -38
  140. package/library/skills/combat-basics/SKILL.md +1 -1
  141. package/library/skills/compatibility-renderer-traps/SKILL.md +2 -2
  142. package/library/skills/concept-art/SKILL.md +3 -3
  143. package/library/skills/create-asset-sheet/SKILL.md +12 -31
  144. package/library/skills/debug/SKILL.md +5 -4
  145. package/library/skills/debugging-game-feel/SKILL.md +1 -4
  146. package/library/skills/debugging-game-feel/resource.yaml +1 -1
  147. package/library/skills/design-level/SKILL.md +5 -5
  148. package/library/skills/design-mechanic/SKILL.md +6 -6
  149. package/library/skills/design-npc/SKILL.md +8 -15
  150. package/library/skills/diagnosing-perf-regressions/SKILL.md +5 -10
  151. package/library/skills/dispatching-parallel-agents/SKILL.md +1 -19
  152. package/library/skills/environment-kit/SKILL.md +5 -5
  153. package/library/skills/export-and-ship/SKILL.md +23 -24
  154. package/library/skills/fabricating-assets/SKILL.md +1 -1
  155. package/library/skills/facial-and-lipsync/SKILL.md +5 -5
  156. package/library/skills/fps-controller/SKILL.md +17 -16
  157. package/library/skills/fps-controller/resource.yaml +0 -2
  158. package/library/skills/game-feel/SKILL.md +6 -7
  159. package/library/skills/gameskill/SKILL.md +3 -3
  160. package/library/skills/gdscript-patterns/SKILL.md +3 -3
  161. package/library/skills/generate-motion/SKILL.md +5 -22
  162. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +72 -90
  163. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +0 -1
  164. package/library/skills/headless-scripting/SKILL.md +8 -8
  165. package/library/skills/instantiate-asset-pack/SKILL.md +7 -3
  166. package/library/skills/investigating-bugs/SKILL.md +3 -11
  167. package/library/skills/investigating-bugs/condition-based-waiting.md +0 -10
  168. package/library/skills/investigating-bugs/root-cause-tracing.md +0 -8
  169. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +15 -15
  170. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +0 -1
  171. package/library/skills/make-game/SKILL.md +3 -5
  172. package/library/skills/make-game/references/2d-platformer.md +1 -1
  173. package/library/skills/multiplayer-project/SKILL.md +1 -1
  174. package/library/skills/multiplayer-testing/SKILL.md +4 -4
  175. package/library/skills/music-track/SKILL.md +40 -38
  176. package/library/skills/new-project/SKILL.md +4 -6
  177. package/library/skills/organic-model/SKILL.md +9 -9
  178. package/library/skills/pixel-art/SKILL.md +6 -6
  179. package/library/skills/play/SKILL.md +3 -4
  180. package/library/skills/playtesting-a-feature/SKILL.md +4 -6
  181. package/library/skills/procedural-animation/SKILL.md +10 -11
  182. package/library/skills/prop-model/SKILL.md +4 -4
  183. package/library/skills/psx-retro-rendering/SKILL.md +20 -20
  184. package/library/skills/psx-retro-rendering/resource.yaml +2 -3
  185. package/library/skills/realtime-wet-surfaces/SKILL.md +15 -15
  186. package/library/skills/realtime-wet-surfaces/resource.yaml +1 -2
  187. package/library/skills/remote-deploy/SKILL.md +20 -21
  188. package/library/skills/retarget/SKILL.md +19 -23
  189. package/library/skills/running-in-the-cloud/SKILL.md +5 -5
  190. package/library/skills/scene-composition/SKILL.md +5 -5
  191. package/library/skills/scene-hierarchy-design/SKILL.md +3 -3
  192. package/library/skills/scene-hierarchy-design/resource.yaml +0 -1
  193. package/library/skills/scene-scripting/SKILL.md +3 -3
  194. package/library/skills/scene-to-level/SKILL.md +28 -31
  195. package/library/skills/skill-create/SKILL.md +1 -1
  196. package/library/skills/skill-improve/SKILL.md +9 -9
  197. package/library/skills/skill-test/SKILL.md +10 -10
  198. package/library/skills/skintokens-auto-rigging/SKILL.md +18 -18
  199. package/library/skills/skintokens-auto-rigging/resource.yaml +3 -3
  200. package/library/skills/skybox-panorama/SKILL.md +8 -9
  201. package/library/skills/sound-effect/SKILL.md +19 -19
  202. package/library/skills/spatial-placement/SKILL.md +2 -2
  203. package/library/skills/spatial-placement/references/kit-placement-tools.md +12 -22
  204. package/library/skills/sprite-sheet/SKILL.md +10 -10
  205. package/library/skills/summer-analytics/SKILL.md +3 -3
  206. package/library/skills/summer-friends/SKILL.md +10 -10
  207. package/library/skills/summer-leaderboards/SKILL.md +6 -6
  208. package/library/skills/summer-match-results/SKILL.md +13 -13
  209. package/library/skills/summer-matchmaking/SKILL.md +11 -11
  210. package/library/skills/summer-parties/SKILL.md +9 -9
  211. package/library/skills/summer-player-data/SKILL.md +12 -12
  212. package/library/skills/summer-store/SKILL.md +6 -6
  213. package/library/skills/summer-world-chat/SKILL.md +9 -9
  214. package/library/skills/summer-world-saves/SKILL.md +7 -7
  215. package/library/skills/text-to-motion/rigging-for-text-motion.md +1 -1
  216. package/library/skills/tileable-texture/SKILL.md +1 -1
  217. package/library/skills/trailer-shot/SKILL.md +36 -36
  218. package/library/skills/tune-performance/SKILL.md +13 -13
  219. package/library/skills/tune-performance/resource.yaml +1 -1
  220. package/library/skills/ui-graphics/SKILL.md +7 -7
  221. package/library/skills/use-widget-asset/SKILL.md +7 -7
  222. package/library/skills/using-summer/SKILL.md +5 -7
  223. package/library/skills/vehicle-model/SKILL.md +6 -7
  224. package/library/skills/vehicle-model/resource.yaml +2 -2
  225. package/library/skills/verification-before-completion/SKILL.md +5 -6
  226. package/library/skills/vfx-dissolve/SKILL.md +4 -4
  227. package/library/skills/vfx-fire/SKILL.md +6 -6
  228. package/library/skills/vfx-fire/_building-blocks/additive-billboard-particles.md +3 -3
  229. package/library/skills/vfx-hit-spark/SKILL.md +4 -4
  230. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +3 -3
  231. package/library/skills/vfx-lightning/SKILL.md +5 -5
  232. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +3 -3
  233. package/library/skills/vfx-lightning/_building-blocks/trauma-shake-snippet.md +9 -3
  234. package/library/skills/vfx-magic-glow/SKILL.md +4 -4
  235. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +3 -3
  236. package/library/skills/vfx-muzzle-flash/SKILL.md +5 -5
  237. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +3 -3
  238. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +9 -3
  239. package/library/skills/vfx-smoke/SKILL.md +5 -5
  240. package/library/skills/vfx-water-ripple/SKILL.md +2 -2
  241. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +3 -3
  242. package/library/skills/voice-line/SKILL.md +9 -9
  243. package/library/skills/world-building-3d/references/spatial-tools.md +2 -2
  244. package/library/skills/writing-plans/SKILL.md +4 -4
  245. package/library/skills/writing-skills/SKILL.md +8 -8
  246. package/library/tools/creator-publish/resource.yaml +4 -4
  247. package/library/tools/creator-releases/resource.yaml +5 -5
  248. package/library/tools/publish-build/resource.yaml +5 -1
  249. package/package.json +1 -1
  250. package/registry/generated/gemini-extension.json +1 -1
  251. package/registry/generated/index.json +130 -130
  252. package/registry/generated/marketplace.claude.json +1 -1
  253. package/registry/generated/plugin.claude.json +1 -1
  254. package/registry/generated/plugin.codex.json +1 -1
  255. package/registry/generated/plugin.cursor.json +1 -1
  256. package/registry/generated/plugin.factory.json +1 -1
  257. package/registry/generated/skills-index.md +5 -5
  258. package/registry/generated/skills-registry.json +5 -5
  259. package/registry/schemas/domains.json +1 -1
@@ -340,7 +340,7 @@ skillsCommand
340
340
  console.log(previewIncludedLine(previewIncluded));
341
341
  if (previewSkipped > 0)
342
342
  console.log(previewSkippedLine(previewSkipped));
343
- // Claude Code: also install slash commands (`tools/summer-cli/commands/*.md`)
343
+ // Claude Code: also install slash commands (`commands/*.md`)
344
344
  // into `~/.claude/commands/`. Other agents don't have an equivalent today.
345
345
  if (agent === "claude-code") {
346
346
  const commandResults = installClaudeCommands(scope, Boolean(opts.force));
@@ -352,7 +352,7 @@ skillsCommand
352
352
  printInstallSummary(skills.length, agent, scope, location);
353
353
  });
354
354
  /**
355
- * Copy every `.md` file in `tools/summer-cli/commands/` to the user's
355
+ * Copy every `.md` file in the package's `commands/` to the user's
356
356
  * `~/.claude/commands/` directory so the slash commands (e.g. `/gameskill`)
357
357
  * are available on every machine that runs `summer skills install`.
358
358
  *
@@ -22,7 +22,7 @@ export type EngineSnapshot = {
22
22
  /** Structured failure classifier the engine returns on a game snapshot over
23
23
  * local HTTP (409 `bridge_required`) — surfaced verbatim so the tool can give
24
24
  * an honest, actionable message instead of a truncated generic 409 string.
25
- * When P4.4 lands (game snapshots answer 200/202 over HTTP) this simply
25
+ * Once game snapshots answer 200/202 over HTTP this simply
26
26
  * never fires and the tool works. */
27
27
  failureReason?: string;
28
28
  /** Scene-preview confession fields (P4.3). Populated only for target:"scene".
@@ -194,8 +194,8 @@ export declare class EngineApiClient {
194
194
  private _parseSnapshotResponse;
195
195
  /**
196
196
  * Turn a 409 from /api/snapshot/game into a structured failure. The engine's
197
- * structural refusal carries `bridge_required` / `unsupported_transport`
198
- * (tool_net_thread.cpp:495-503); a 409 without that shape is surfaced as a
197
+ * structural refusal carries `bridge_required` / `unsupported_transport`;
198
+ * a 409 without that shape is surfaced as a
199
199
  * plain error rather than silently claiming "bridge required".
200
200
  */
201
201
  private _bridgeRequiredFromResponse;
@@ -246,9 +246,8 @@ export declare class EngineApiClient {
246
246
  getPort(): number;
247
247
  /**
248
248
  * Cheap drift probe for the MCP client cache. The engine mints a fresh
249
- * api-token on every launch (local_api_server.cpp::_generate_api_token) and can
250
- * bind a different port (tool_net_thread.cpp::start increments 6550..6565 when
251
- * the old socket lingers), so a client built before an engine restart holds
249
+ * api-token on every launch and can bind a different port (it increments
250
+ * 6550..6565 when the old socket lingers), so a client built before an engine restart holds
252
251
  * dead credentials. Re-read the on-disk creds and report whether they no longer
253
252
  * match this client's snapshot.
254
253
  *
@@ -492,8 +492,7 @@ export class EngineApiClient {
492
492
  async getSceneState(scenePath, options) {
493
493
  // depth/limit/root only take effect on targeted (scene=) reads: the engine
494
494
  // routes those through the live command queue and forwards every query
495
- // param into StateProvider::scene_state (tool_net_thread.cpp
496
- // _parse_state_args). An UNtargeted read is answered from a pre-published
495
+ // param into the engine's scene-state reader. An UNtargeted read is answered from a pre-published
497
496
  // snapshot built with the defaults (depth 2, limit 200) and its query
498
497
  // params are ignored — callers who need depth/limit must pass scenePath
499
498
  // (summer_get_scene_tree resolves the current scene path for this).
@@ -515,9 +514,8 @@ export class EngineApiClient {
515
514
  async getProjectState(prefix) {
516
515
  // ?prefix= is sent for forward-compatibility, but current engine builds
517
516
  // IGNORE it: /api/state/project is always served from the snapshot, which
518
- // is published with empty args (local_api_server.cpp
519
- // _maybe_publish_snapshot), so StateProvider::project_state never sees the
520
- // query. Callers that need a prefix subset must also filter client-side
517
+ // is published with empty args, so the engine's project-state reader never
518
+ // sees the query. Callers that need a prefix subset must also filter client-side
521
519
  // (summer_get_project_context does).
522
520
  const query = prefix ? `?prefix=${encodeURIComponent(prefix)}` : "";
523
521
  return this.request("GET", `/api/state/project${query}`);
@@ -542,13 +540,13 @@ export class EngineApiClient {
542
540
  if (pins) {
543
541
  // Determinism params (seed / fixed_fps / time_scale) — the /api/play rung
544
542
  // copies ONLY `scene` from options into the PlayGame op
545
- // (local_api_server.cpp play branch), so a pinned launch travels as an
543
+ // (the engine's /api/play handler), so a pinned launch travels as an
546
544
  // explicit PlayGame op through /api/ops. executeOps stamps the bound
547
545
  // identity like every other op. An engine that predates the params
548
546
  // ignores the extra keys and answers the v1 result (no `determinism`).
549
547
  return this.executeOps([{ op: "PlayGame", ...(scene ? { scene } : {}), ...pins }], undefined, 60_000);
550
548
  }
551
- // The engine reads play params from body.options (tool_net_thread.cpp:503),
549
+ // The engine reads play params from body.options,
552
550
  // and the play handler reads options["scene"] — a top-level { scene } is
553
551
  // dropped, so the scene MUST be nested inside options. The bound identity
554
552
  // rides in the same options dict so play is refused on a mismatched project.
@@ -593,10 +591,10 @@ export class EngineApiClient {
593
591
  // with the same payload shape — _requestQueued resolves both.
594
592
  //
595
593
  // Game capture over local HTTP structurally 409s today with a STRUCTURED
596
- // reason (`failure_reason:"unsupported_transport"`, `bridge_required:true`,
597
- // tool_net_thread.cpp:495-503). Detect that specific shape and return it
594
+ // reason (`failure_reason:"unsupported_transport"`, `bridge_required:true`).
595
+ // Detect that specific shape and return it
598
596
  // verbatim so the tool can give an honest message — do NOT hardcode "game
599
- // always fails": once the engine answers 200/202 (P4.4), the same response
597
+ // always fails": once the engine answers 200/202, the same response
600
598
  // flows into the normal queued path. ONE request either way: a probe that
601
599
  // discarded a 200 (or orphaned an accepted 202 requestId) and then asked
602
600
  // again would capture the game twice.
@@ -681,8 +679,8 @@ export class EngineApiClient {
681
679
  }
682
680
  /**
683
681
  * Turn a 409 from /api/snapshot/game into a structured failure. The engine's
684
- * structural refusal carries `bridge_required` / `unsupported_transport`
685
- * (tool_net_thread.cpp:495-503); a 409 without that shape is surfaced as a
682
+ * structural refusal carries `bridge_required` / `unsupported_transport`;
683
+ * a 409 without that shape is surfaced as a
686
684
  * plain error rather than silently claiming "bridge required".
687
685
  */
688
686
  async _bridgeRequiredFromResponse(res) {
@@ -777,9 +775,8 @@ export class EngineApiClient {
777
775
  }
778
776
  /**
779
777
  * Cheap drift probe for the MCP client cache. The engine mints a fresh
780
- * api-token on every launch (local_api_server.cpp::_generate_api_token) and can
781
- * bind a different port (tool_net_thread.cpp::start increments 6550..6565 when
782
- * the old socket lingers), so a client built before an engine restart holds
778
+ * api-token on every launch and can bind a different port (it increments
779
+ * 6550..6565 when the old socket lingers), so a client built before an engine restart holds
783
780
  * dead credentials. Re-read the on-disk creds and report whether they no longer
784
781
  * match this client's snapshot.
785
782
  *
package/dist/core/auth.js CHANGED
@@ -161,8 +161,8 @@ export async function saveLoginSession(session) {
161
161
  // those exact files. credential-metadata.json adds audience/scope information
162
162
  // without changing or duplicating the secret.
163
163
  // Write order: user.json, then auth-token, then the advisory metadata. The
164
- // desktop engine cross-checks token.sub against user.json's id
165
- // (summerengine auth_manager.cpp, inspect_cli_bootstrap_credential), so a
164
+ // desktop engine cross-checks token.sub against user.json's id when it
165
+ // adopts the CLI credential, so a
166
166
  // write interrupted between the first two files fails closed instead of
167
167
  // adopting a mismatched identity. The metadata write is last and is NOT a
168
168
  // gate: the token is already live by then, and its contents are re-derived
@@ -2,7 +2,6 @@
2
2
  * Asset import into the engine-bound project (Kenney texture pairing + path
3
3
  * inference + optional scene placement). ONE copy shared by the MCP asset tools
4
4
  * and the CLI dispatch table.
5
- * See: publicsummerengine/Docs/ASSET_IMPORT_END_TO_END.md
6
5
  */
7
6
  import type { EngineApiClient } from "../api-client.js";
8
7
  /** An asset record as returned by the Summer gateway asset APIs. */
@@ -4,7 +4,7 @@ export type CameraBookmarkAction = (typeof CAMERA_BOOKMARK_ACTIONS)[number];
4
4
  export declare const CAMERA_BOOKMARK_OPS: Record<CameraBookmarkAction, string>;
5
5
  /** What the engine_lacks_op result tells the model to do instead. */
6
6
  export declare const CAMERA_BOOKMARK_FALLBACK = "pass the pose explicitly on every capture with summer_screenshot framing:\"free\" (camera_position + camera_look_at), or render through a Camera3D placed in the scene with framing:\"camera\"";
7
- /** Bookmark name grammar (preview_ops.cpp): 1-64 of [A-Za-z0-9_-]. */
7
+ /** Bookmark name grammar (same as the engine's): 1-64 of [A-Za-z0-9_-]. */
8
8
  export declare const BOOKMARK_NAME_PATTERN: RegExp;
9
9
  export interface CameraBookmarkArgs {
10
10
  action: CameraBookmarkAction;
@@ -4,7 +4,7 @@
4
4
  * and the CLI dispatcher so both faces validate the same way and send the same
5
5
  * op.
6
6
  *
7
- * Engine contract (doc/SUMMER/SCENE_SCRIPTING_CONTRACTS.md, "Wave I"):
7
+ * Engine contract:
8
8
  * SaveCameraBookmark { name, position?, look_at?, fov? } -> pose_source
9
9
  * ListCameraBookmarks {} -> names, bookmarks
10
10
  * DeleteCameraBookmark { name } -> remaining
@@ -25,7 +25,7 @@ export const CAMERA_BOOKMARK_OPS = {
25
25
  };
26
26
  /** What the engine_lacks_op result tells the model to do instead. */
27
27
  export const CAMERA_BOOKMARK_FALLBACK = "pass the pose explicitly on every capture with summer_screenshot framing:\"free\" (camera_position + camera_look_at), or render through a Camera3D placed in the scene with framing:\"camera\"";
28
- /** Bookmark name grammar (preview_ops.cpp): 1-64 of [A-Za-z0-9_-]. */
28
+ /** Bookmark name grammar (same as the engine's): 1-64 of [A-Za-z0-9_-]. */
29
29
  export const BOOKMARK_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
30
30
  function requireBookmarkName(name, action) {
31
31
  const trimmed = name?.trim() ?? "";
@@ -3,8 +3,7 @@
3
3
  * (src/mcp/tools/scene-tools.ts and tool-dispatch.ts) that leaves the
4
4
  * connection in the saved scene, verified from the file.
5
5
  *
6
- * Why not the engine's ConnectSignal op: SceneOps::connect_signal (engine
7
- * modules/1summer_engine/editor/ops/scene_ops.cpp) builds
6
+ * Why not the engine's ConnectSignal op: it builds
8
7
  * `Callable(receiver, method)` and registers
9
8
  * `add_do_method(emitter, "connect", signal, cb)` — no CONNECT_PERSIST, and the
10
9
  * op reads no flags argument. PackedScene::pack writes only persistent
@@ -3,8 +3,7 @@
3
3
  * (src/mcp/tools/scene-tools.ts and tool-dispatch.ts) that leaves the
4
4
  * connection in the saved scene, verified from the file.
5
5
  *
6
- * Why not the engine's ConnectSignal op: SceneOps::connect_signal (engine
7
- * modules/1summer_engine/editor/ops/scene_ops.cpp) builds
6
+ * Why not the engine's ConnectSignal op: it builds
8
7
  * `Callable(receiver, method)` and registers
9
8
  * `add_do_method(emitter, "connect", signal, cb)` — no CONNECT_PERSIST, and the
10
9
  * op reads no flags argument. PackedScene::pack writes only persistent
@@ -6,8 +6,8 @@
6
6
  * Output panel (EditorLog) never received them: a running game's errors are
7
7
  * collected by the debugger (summer_get_debugger_errors / the `debugger`
8
8
  * section of summer_get_diagnostics). The engine types console lines straight
9
- * from EditorLog::MSG_TYPE (error / warning / std / editor — debug_ops.cpp
10
- * GetConsoleOutput), so dropping `std` lines by default hides nothing that
9
+ * from EditorLog::MSG_TYPE (error / warning / std / editor) in
10
+ * GetConsoleOutput, so dropping `std` lines by default hides nothing that
11
11
  * was an error; the trap is treating this tool's count as the post-play
12
12
  * verdict at all. The note travels with the result because tool descriptions
13
13
  * are read once and results are read every time.
@@ -6,8 +6,8 @@
6
6
  * Output panel (EditorLog) never received them: a running game's errors are
7
7
  * collected by the debugger (summer_get_debugger_errors / the `debugger`
8
8
  * section of summer_get_diagnostics). The engine types console lines straight
9
- * from EditorLog::MSG_TYPE (error / warning / std / editor — debug_ops.cpp
10
- * GetConsoleOutput), so dropping `std` lines by default hides nothing that
9
+ * from EditorLog::MSG_TYPE (error / warning / std / editor) in
10
+ * GetConsoleOutput, so dropping `std` lines by default hides nothing that
11
11
  * was an error; the trap is treating this tool's count as the post-play
12
12
  * verdict at all. The note travels with the result because tool descriptions
13
13
  * are read once and results are read every time.
@@ -26,10 +26,9 @@ export declare function getFailureReason(value: {
26
26
  * Decide whether an engine result envelope represents a FAILURE, and if so
27
27
  * return a model-visible message. Returns null only for genuine success.
28
28
  *
29
- * Guards the two web bug classes (publicsummerengine cf17134f + contract.ts
30
- * `isFailureSignal`):
29
+ * Guards the two bug classes the web platform's tool layer once had:
31
30
  * - a failure `terminalState` (anything other than applied/no_op) is a failure
32
- * even when results[] is absent — the cf17134f "no-results envelope looked
31
+ * even when results[] is absent — the "no-results envelope looked
33
32
  * applied" masking. The poll loop surfaces timed_out/etc. here.
34
33
  * - an explicit ok:false / status:"error" / failed op inside results[].
35
34
  *
@@ -37,9 +36,8 @@ export declare function getFailureReason(value: {
37
36
  */
38
37
  export declare function extractOpError(result: unknown): string | null;
39
38
  /**
40
- * The engine stamps `scenePersistence.persisted` on every scene-targeted batch
41
- * (ops_executor.cpp: scene_persistence["persisted"] =
42
- * explicit_scene_save_succeeded). It only means SaveScene returned OK, not
39
+ * The engine stamps `scenePersistence.persisted` on every scene-targeted batch.
40
+ * It only means SaveScene returned OK, not
43
41
  * that the file holds the change: a ReparentNode subtree whose owners the
44
42
  * engine cleared, or a ConnectSignal made without CONNECT_PERSIST, is missing
45
43
  * from a file whose save "persisted". Rename it to
@@ -50,7 +48,7 @@ export declare function extractOpError(result: unknown): string | null;
50
48
  export declare function honestSceneReceipt<T>(result: T): T;
51
49
  /**
52
50
  * An older engine answers an unknown op with a per-op "unknown op: <Kind>"
53
- * (ops_executor.cpp fallthrough). Amend the envelope's error so the model gets
51
+ * Amend the envelope's error so the model gets
54
52
  * the upgrade path instead of retrying, and stamp `failure_reason:
55
53
  * "engine_lacks_op"` (+ `op`) so the result is detectable the same way as the
56
54
  * capability pre-flight's MissingOpResult: programmatic callers read the
@@ -9,7 +9,7 @@ export function getFailureReason(value) {
9
9
  ? value.failure_reason
10
10
  : undefined;
11
11
  }
12
- // 0.5.34 Block E contract (publicsummerengine src/lib/tools/contract.ts §0.1).
12
+ // Engine 0.5.34 receipt contract, shared with the web platform's tool layer.
13
13
  // The async lifecycle (async-op-lifecycle.ts pollOpToTerminal) merges
14
14
  // terminalState/errorClass onto the apply dict it returns. ONLY these two are
15
15
  // "applied something / applied nothing-on-purpose" — every other terminal state
@@ -33,10 +33,9 @@ const TERMINAL_STATE_MESSAGES = {
33
33
  * Decide whether an engine result envelope represents a FAILURE, and if so
34
34
  * return a model-visible message. Returns null only for genuine success.
35
35
  *
36
- * Guards the two web bug classes (publicsummerengine cf17134f + contract.ts
37
- * `isFailureSignal`):
36
+ * Guards the two bug classes the web platform's tool layer once had:
38
37
  * - a failure `terminalState` (anything other than applied/no_op) is a failure
39
- * even when results[] is absent — the cf17134f "no-results envelope looked
38
+ * even when results[] is absent — the "no-results envelope looked
40
39
  * applied" masking. The poll loop surfaces timed_out/etc. here.
41
40
  * - an explicit ok:false / status:"error" / failed op inside results[].
42
41
  *
@@ -97,9 +96,8 @@ export function extractOpError(result) {
97
96
  return null;
98
97
  }
99
98
  /**
100
- * The engine stamps `scenePersistence.persisted` on every scene-targeted batch
101
- * (ops_executor.cpp: scene_persistence["persisted"] =
102
- * explicit_scene_save_succeeded). It only means SaveScene returned OK, not
99
+ * The engine stamps `scenePersistence.persisted` on every scene-targeted batch.
100
+ * It only means SaveScene returned OK, not
103
101
  * that the file holds the change: a ReparentNode subtree whose owners the
104
102
  * engine cleared, or a ConnectSignal made without CONNECT_PERSIST, is missing
105
103
  * from a file whose save "persisted". Rename it to
@@ -123,11 +121,11 @@ export function honestSceneReceipt(result) {
123
121
  return (out ?? result);
124
122
  }
125
123
  /** The per-op text an older engine answers for a Kind its dispatch ladder does
126
- * not know (ops_executor.cpp fallthrough: `unknown op: <Kind>`). */
124
+ * not know (`unknown op: <Kind>`). */
127
125
  const UNKNOWN_OP_PATTERN = /unknown op/i;
128
126
  /**
129
127
  * An older engine answers an unknown op with a per-op "unknown op: <Kind>"
130
- * (ops_executor.cpp fallthrough). Amend the envelope's error so the model gets
128
+ * Amend the envelope's error so the model gets
131
129
  * the upgrade path instead of retrying, and stamp `failure_reason:
132
130
  * "engine_lacks_op"` (+ `op`) so the result is detectable the same way as the
133
131
  * capability pre-flight's MissingOpResult: programmatic callers read the
@@ -36,15 +36,15 @@ export { runEngine, SUMMER_GAMES_PRESET };
36
36
  */
37
37
  export const LAST_EXPORT_FILE = "last-export.json";
38
38
  const DEFAULT_TIMEOUT_MS = 15 * 60_000;
39
- /** Store platform ids of the versions intake (summer-platform creatorstore). */
39
+ /** Store platform ids of the store's versions intake. */
40
40
  const STORE_VERSION_PLATFORM = {
41
41
  web: "web",
42
42
  macos: "macos-universal",
43
43
  windows: "windows-x64",
44
44
  };
45
- /** Web zip limits of the store (summer-platform internal/creatorstore/webzip.go). */
45
+ /** Web zip limits of the store. */
46
46
  const WEB_LIMITS = { zipBytes: 500 * 1024 * 1024, fileBytes: 200 * 1024 * 1024, files: 2000 };
47
- /** Games without a server run on the phone apps only (summer-platform gameplatforms.StandaloneTargets). */
47
+ /** Games without a server run on the phone apps only (the store's standalone targets). */
48
48
  const STANDALONE_TARGETS = ["ios", "android"];
49
49
  /** Engine support per bundle target, for the recovery text when a target is missing. */
50
50
  const TARGET_ENGINE_NOTE = {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Store targets for summer_export_game, and the export presets that make them.
3
3
  *
4
- * The Summer Games store has two intakes (summer-platform):
4
+ * The Summer Games store has two intakes:
5
5
  * - build-publications takes ONE summer.bundle.v1 .zip per Build. Summer runs
6
6
  * its client.pck on its own client templates (the Summer Games iOS and
7
7
  * Android apps, the Summer desktop app on macOS and Windows), so the creator
@@ -5,7 +5,7 @@ import { BuildToolError } from "./summer-bundle.js";
5
5
  /**
6
6
  * Store targets for summer_export_game, and the export presets that make them.
7
7
  *
8
- * The Summer Games store has two intakes (summer-platform):
8
+ * The Summer Games store has two intakes:
9
9
  * - build-publications takes ONE summer.bundle.v1 .zip per Build. Summer runs
10
10
  * its client.pck on its own client templates (the Summer Games iOS and
11
11
  * Android apps, the Summer desktop app on macOS and Windows), so the creator
@@ -4,7 +4,7 @@
4
4
  * (`summer tool fabricate-3d`) so both faces validate the same arguments, send
5
5
  * the same op with the same clamps, and wait the same client poll budget.
6
6
  *
7
- * What the op does on the engine side (fabricate_ops.cpp, mesh fabrication): run one
7
+ * What the op does on the engine side: run one
8
8
  * agent-authored bpy script in a supervised headless child of the USER'S OWN
9
9
  * Blender install, validate the .glb the child exported, move it under res://,
10
10
  * wait for the editor import to settle, and optionally instantiate it into the
@@ -28,8 +28,7 @@ export declare const FABRICATE_DEFAULT_OUT_DIR = "res://assets/fabricated/";
28
28
  /** What the tool tells the model to do when the engine lacks FabricateMesh. */
29
29
  export declare const FABRICATE_FALLBACK = "generate the asset with summer_generate_3d, import one from the free library with summer_search_assets / summer_import_asset, use summer_import_hdri for environment lighting, or build blockout geometry in-scene with summer_add_node / summer_set_prop or a summer_run_editor_script";
30
30
  /**
31
- * Mirror of the engine's out_path pre-validation (fabricate_ops.cpp
32
- * _resolve_out_path) so a bad destination is refused on this side with the
31
+ * Mirror of the engine's out_path pre-validation so a bad destination is refused on this side with the
33
32
  * same words, and nothing is sent. Returns null when the path is acceptable.
34
33
  */
35
34
  export declare function fabricateOutPathProblem(rawPath: string): string | null;
@@ -4,7 +4,7 @@
4
4
  * (`summer tool fabricate-3d`) so both faces validate the same arguments, send
5
5
  * the same op with the same clamps, and wait the same client poll budget.
6
6
  *
7
- * What the op does on the engine side (fabricate_ops.cpp, mesh fabrication): run one
7
+ * What the op does on the engine side: run one
8
8
  * agent-authored bpy script in a supervised headless child of the USER'S OWN
9
9
  * Blender install, validate the .glb the child exported, move it under res://,
10
10
  * wait for the editor import to settle, and optionally instantiate it into the
@@ -30,8 +30,7 @@ export const FABRICATE_DEFAULT_OUT_DIR = "res://assets/fabricated/";
30
30
  export const FABRICATE_FALLBACK = "generate the asset with summer_generate_3d, import one from the free library with summer_search_assets / summer_import_asset, use summer_import_hdri for environment lighting, or build blockout geometry in-scene with summer_add_node / summer_set_prop or a summer_run_editor_script";
31
31
  const VECTOR3_VARIANT_RE = /^Vector3\(\s*[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?\s*,\s*[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?\s*,\s*[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?\s*\)$/;
32
32
  /**
33
- * Mirror of the engine's out_path pre-validation (fabricate_ops.cpp
34
- * _resolve_out_path) so a bad destination is refused on this side with the
33
+ * Mirror of the engine's out_path pre-validation so a bad destination is refused on this side with the
35
34
  * same words, and nothing is sent. Returns null when the path is acceptable.
36
35
  */
37
36
  export function fabricateOutPathProblem(rawPath) {
@@ -1,17 +1,17 @@
1
1
  /**
2
2
  * Frame-quality probe for engine screenshots (tool/screenshot).
3
3
  *
4
- * WHY THIS EXISTS. In the 2026-09-03 end-to-end run (docs/design/archive/E2E-2026-09-03.md,
5
- * F-01) `summer_screenshot target:"viewport"` returned an entirely black
4
+ * WHY THIS EXISTS. In the 2026-09-03 end-to-end run,
5
+ * `summer_screenshot target:"viewport"` returned an entirely black
6
6
  * 1072x1280 JPEG (src/core/capabilities/__fixtures__/frames/01-mcp-viewport-black.jpg)
7
7
  * with a caption
8
8
  * telling the agent to describe what it saw. It was the first viewport capture
9
9
  * after scene mutations had flipped the editor from the 3D to the 2D tab; the
10
10
  * same call 67 s later returned real content. Engine side, the ViewportSnapshot
11
- * op (summerengine modules/1summer_engine/editor/ops/debug_ops.cpp) reads the
11
+ * op reads the
12
12
  * editor SubViewport's texture with get_texture()->get_image() AS-IS — no forced
13
13
  * RenderingServer draw and no blank-frame retry, both of which ScenePreview has
14
- * (preview_ops.cpp "render-readiness hardening") because a not-yet-drawn
14
+ * because a not-yet-drawn
15
15
  * texture reads back black. That is consistent with a 2D subviewport that had
16
16
  * not been redrawn since the tab switch, but it has NOT been proven by
17
17
  * instrumenting the engine, so this module detects the SYMPTOM (a flat frame)
@@ -1,17 +1,17 @@
1
1
  /**
2
2
  * Frame-quality probe for engine screenshots (tool/screenshot).
3
3
  *
4
- * WHY THIS EXISTS. In the 2026-09-03 end-to-end run (docs/design/archive/E2E-2026-09-03.md,
5
- * F-01) `summer_screenshot target:"viewport"` returned an entirely black
4
+ * WHY THIS EXISTS. In the 2026-09-03 end-to-end run,
5
+ * `summer_screenshot target:"viewport"` returned an entirely black
6
6
  * 1072x1280 JPEG (src/core/capabilities/__fixtures__/frames/01-mcp-viewport-black.jpg)
7
7
  * with a caption
8
8
  * telling the agent to describe what it saw. It was the first viewport capture
9
9
  * after scene mutations had flipped the editor from the 3D to the 2D tab; the
10
10
  * same call 67 s later returned real content. Engine side, the ViewportSnapshot
11
- * op (summerengine modules/1summer_engine/editor/ops/debug_ops.cpp) reads the
11
+ * op reads the
12
12
  * editor SubViewport's texture with get_texture()->get_image() AS-IS — no forced
13
13
  * RenderingServer draw and no blank-frame retry, both of which ScenePreview has
14
- * (preview_ops.cpp "render-readiness hardening") because a not-yet-drawn
14
+ * because a not-yet-drawn
15
15
  * texture reads back black. That is consistent with a 2D subviewport that had
16
16
  * not been redrawn since the tab switch, but it has NOT been proven by
17
17
  * instrumenting the engine, so this module detects the SYMPTOM (a flat frame)
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * grep — ONE implementation of `summer_grep` for both faces
3
3
  * (src/mcp/tools/file-tools.ts and tool-dispatch.ts), over the engine's
4
- * ripgrep-backed Grep op (modules/1summer_engine/editor/ops/search_ops.cpp).
4
+ * ripgrep-backed Grep op.
5
5
  *
6
6
  * The engine op returns {file, line, content} per match and parses only
7
7
  * ripgrep's "match" events, so its contextLines flag adds nothing to the
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * grep — ONE implementation of `summer_grep` for both faces
3
3
  * (src/mcp/tools/file-tools.ts and tool-dispatch.ts), over the engine's
4
- * ripgrep-backed Grep op (modules/1summer_engine/editor/ops/search_ops.cpp).
4
+ * ripgrep-backed Grep op.
5
5
  *
6
6
  * The engine op returns {file, line, content} per match and parses only
7
7
  * ripgrep's "match" events, so its contextLines flag adds nothing to the
@@ -12,7 +12,7 @@
12
12
  * advertises `capabilities.navigation` the tool sends the one-table op
13
13
  * `Navigate { target, ...args }`; on an engine that predates it the few ids the
14
14
  * original ops can serve (scene, node, script, file, the three docks) use those
15
- * ops and everything else answers `engine_lacks_op`. See NAVIGATION-PLAN.md.
15
+ * ops and everything else answers `engine_lacks_op`.
16
16
  *
17
17
  * Both faces call runOpen(); the CLI (tool-dispatch + `summer open`) and the
18
18
  * MCP tool (src/mcp/tools/navigation-tools.ts) only differ in how the engine
@@ -12,7 +12,7 @@
12
12
  * advertises `capabilities.navigation` the tool sends the one-table op
13
13
  * `Navigate { target, ...args }`; on an engine that predates it the few ids the
14
14
  * original ops can serve (scene, node, script, file, the three docks) use those
15
- * ops and everything else answers `engine_lacks_op`. See NAVIGATION-PLAN.md.
15
+ * ops and everything else answers `engine_lacks_op`.
16
16
  *
17
17
  * Both faces call runOpen(); the CLI (tool-dispatch + `summer open`) and the
18
18
  * MCP tool (src/mcp/tools/navigation-tools.ts) only differ in how the engine
@@ -49,7 +49,7 @@ export function renderProductMap() {
49
49
  lines.push("## Who owns what");
50
50
  lines.push("");
51
51
  lines.push("- **Web rows** come from summerengine.com's own route catalog (`/agent-routes.json`, published from the web repo's `src/lib/navigation/routes.ts`). The toolkit vendors a snapshot (`assets/navigation/web-routes.json`, refreshed with `npm run sync:web-routes`); it does not invent pages.");
52
- lines.push("- **Editor rows** are ids of Summer Engine's one navigation table (`navigate_ops.cpp`, op `Navigate`). The running engine advertises which ids it can open in `/api/health` `capabilities.navigation`; `summer open --list` shows availability from the connected engine. Engines that predate the `Navigate` op can still serve the rows with a legacy op (last-but-one column); every other row answers `engine_lacks_op` with an update hint.");
52
+ lines.push("- **Editor rows** are ids of Summer Engine's one navigation table (the `Navigate` op). The running engine advertises which ids it can open in `/api/health` `capabilities.navigation`; `summer open --list` shows availability from the connected engine. Engines that predate the `Navigate` op can still serve the rows with a legacy op (last-but-one column); every other row answers `engine_lacks_op` with an update hint.");
53
53
  lines.push("");
54
54
  lines.push("## How to read a row");
55
55
  lines.push("");
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The product map as the toolkit sees it (docs/design/NAVIGATION-PLAN.md).
2
+ * The product map as the toolkit sees it (rendered for agents as library/references/product-map).
3
3
  *
4
4
  * The toolkit does NOT own where things are. Each product does:
5
5
  *
@@ -7,7 +7,7 @@
7
7
  * src/lib/navigation/routes.ts). A vendored snapshot lives at
8
8
  * assets/navigation/web-routes.json (refresh: `npm run sync:web-routes`) and
9
9
  * every web row below is built from it — nothing hand-written.
10
- * - Summer Engine owns one table of editor destinations (navigate_ops.cpp) and
10
+ * - Summer Engine owns one table of editor destinations (the Navigate op) and
11
11
  * advertises the ids it can open in /api/health capabilities.navigation.
12
12
  * The rows below are METADATA for those ids (titles, intents, argument
13
13
  * names) plus, for the few ids an older engine can serve through its
@@ -8,7 +8,7 @@ export type PlacementField = (typeof PLACEMENT_FIELDS)[number];
8
8
  /** Model-visible budget for compact receipts (the 5 KB tool-result contract). */
9
9
  export declare const COMPACT_LIMIT_BYTES: number;
10
10
  /** Held-back transform SetProps sent per request; the engine refuses requests
11
- * over 256 ops (local_api_server.cpp). */
11
+ * over 256 ops. */
12
12
  export declare const TRANSFORM_OPS_PER_REQUEST = 200;
13
13
  export interface PlacementProp {
14
14
  key: PlacementField;
@@ -4,7 +4,7 @@
4
4
  * twins.
5
5
  *
6
6
  * The engine's InstantiateScene accepts only parent / scene / name /
7
- * target_size (scene_ops.cpp instantiate_scene) and must travel as its own
7
+ * target_size and must travel as its own
8
8
  * request (single-only). A placed piece is therefore an InstantiateScene plus
9
9
  * SetProps on the node path its receipt reports (meta.nodePath, which already
10
10
  * carries any collision rename). The caller writes ONE op; this module expands
@@ -35,7 +35,7 @@ export const PLACEMENT_FIELDS = ["position", "rotation_degrees", "scale", "trans
35
35
  /** Model-visible budget for compact receipts (the 5 KB tool-result contract). */
36
36
  export const COMPACT_LIMIT_BYTES = 5 * 1024;
37
37
  /** Held-back transform SetProps sent per request; the engine refuses requests
38
- * over 256 ops (local_api_server.cpp). */
38
+ * over 256 ops. */
39
39
  export const TRANSFORM_OPS_PER_REQUEST = 200;
40
40
  const SUMMARY_TARGET_BYTES = 4600;
41
41
  const ERROR_TEXT_LIMIT = 240;
@@ -5,7 +5,7 @@
5
5
  * summer_play tool and the CLI dispatcher.
6
6
  *
7
7
  * Transport note: the engine's /api/play rung copies only `scene` into the
8
- * PlayGame op (local_api_server.cpp play branch), so a launch that carries a
8
+ * PlayGame op, so a launch that carries a
9
9
  * pin is sent as an explicit PlayGame op through /api/ops instead. A launch
10
10
  * without any pin stays on /api/play, byte-for-byte the v1 call.
11
11
  *
@@ -5,7 +5,7 @@
5
5
  * summer_play tool and the CLI dispatcher.
6
6
  *
7
7
  * Transport note: the engine's /api/play rung copies only `scene` into the
8
- * PlayGame op (local_api_server.cpp play branch), so a launch that carries a
8
+ * PlayGame op, so a launch that carries a
9
9
  * pin is sent as an explicit PlayGame op through /api/ops instead. A launch
10
10
  * without any pin stays on /api/play, byte-for-byte the v1 call.
11
11
  *
@@ -1,5 +1,5 @@
1
1
  import { BuildToolError } from "./summer-bundle.js";
2
- /** summer-platform client versions: vMAJOR.MINOR.PATCH[-rN]. */
2
+ /** Store client versions: vMAJOR.MINOR.PATCH[-rN]. */
3
3
  export declare const CLIENT_VERSION: RegExp;
4
4
  export interface PublishBuildInput {
5
5
  gameId?: string;
@@ -12,8 +12,7 @@ import { BuildToolError, readSummerBundle } from "./summer-bundle.js";
12
12
  /**
13
13
  * summer_publish_build: upload a summer.games export to the creator's game
14
14
  * through the same creator store routes Studio's export upload uses
15
- * (publicsummerengine /api/creator-store/* -> summer-platform
16
- * /v1/management/*, build-publications, ADR 0033):
15
+ * (/api/creator-store/*, build-publications):
17
16
  *
18
17
  * POST games/{g}/build-publications declare the export (idempotent)
19
18
  * POST .../{p}:source-upload open the part plan (64 MiB parts)
@@ -24,8 +23,7 @@ import { BuildToolError, readSummerBundle } from "./summer-bundle.js";
24
23
  * POST games/{g}/builds/{b}/client-packages name the Build's client pack
25
24
  * POST .../{p}:publish only with publish=true
26
25
  *
27
- * Mirrors publicsummerengine src/lib/creator-store/pack-upload.ts
28
- * (uploadExportedGame), including its idempotency keys, so a retry continues
26
+ * Mirrors Studio's export upload, including its idempotency keys, so a retry continues
29
27
  * the same publication instead of creating another one.
30
28
  *
31
29
  * Auth: the Summer store OAuth token from "summer login --store" (audience
@@ -38,11 +36,11 @@ const CONCURRENCY = 3;
38
36
  const PART_RETRIES = 3;
39
37
  const DEFAULT_WAIT_SECONDS = 600;
40
38
  const POLL_MS = 3_000;
41
- /** summer-platform client versions: vMAJOR.MINOR.PATCH[-rN]. */
39
+ /** Store client versions: vMAJOR.MINOR.PATCH[-rN]. */
42
40
  export const CLIENT_VERSION = /^v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-r[1-9]\d*)?$/;
43
41
  const INTAKE_DONE = ["preview_ready", "published", "ready", "succeeded"];
44
42
  const NOT_ACTIONABLE = "deployment_not_actionable";
45
- /** Games without a server run on the Summer Games phone apps only (summer-platform gameplatforms.StandaloneTargets). */
43
+ /** Games without a server run on the Summer Games phone apps only (the store's standalone targets). */
46
44
  const STANDALONE_TARGETS = ["ios", "android"];
47
45
  /** Why the Platform did not take the export, in plain words (same text Studio shows). */
48
46
  const INTAKE_FAILURES = {
@@ -1,7 +1,6 @@
1
1
  import { type PublishBuildDependencies } from "./publish-build.js";
2
2
  /**
3
- * The store's second build path (summer-platform store versions,
4
- * internal/creatorstore): a web build (an HTML5 .zip played on summer.games)
3
+ * The store's second build path (store versions): a web build (an HTML5 .zip played on summer.games)
5
4
  * or a native download (macOS universal, Windows x64, Linux x64) that players
6
5
  * download. summer_export_game format "download" makes these files;
7
6
  * summer_publish_build uploads them here, through the same creator store