summer-engine 2.8.2 → 3.1.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 (790) hide show
  1. package/.claude-plugin/marketplace.json +27 -7
  2. package/.claude-plugin/plugin.json +99 -83
  3. package/.codex-plugin/plugin.json +112 -82
  4. package/.cursor-plugin/plugin.json +119 -83
  5. package/.factory-plugin/plugin.json +100 -3
  6. package/.mcp.json +6 -1
  7. package/.opencode/INSTALL.md +7 -4
  8. package/.opencode/plugins/summer.js +31 -18
  9. package/AGENTS.md +107 -34
  10. package/CHANGELOG.md +149 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +161 -393
  15. package/assets/api-docs.json.gz +0 -0
  16. package/assets/autopilot/README.md +20 -6
  17. package/assets/autopilot/autopilot.gd +80 -26
  18. package/assets/autopilot/run.sh +132 -7
  19. package/assets/navigation/web-routes.json +719 -0
  20. package/commands/gameskill.md +10 -108
  21. package/commands/summer.md +72 -4
  22. package/dist/bin/summer.js +6 -87
  23. package/dist/cli/banner.d.ts +1 -0
  24. package/dist/cli/banner.js +33 -0
  25. package/dist/{commands → cli/commands}/config.js +1 -1
  26. package/dist/cli/commands/create.d.ts +30 -0
  27. package/dist/cli/commands/create.js +212 -0
  28. package/dist/{commands → cli/commands}/debug.js +2 -2
  29. package/dist/cli/commands/doctor.d.ts +2 -0
  30. package/dist/cli/commands/doctor.js +18 -0
  31. package/dist/cli/commands/events.d.ts +57 -0
  32. package/dist/cli/commands/events.js +158 -0
  33. package/dist/cli/commands/install.d.ts +50 -0
  34. package/dist/cli/commands/install.js +447 -0
  35. package/dist/cli/commands/list.js +72 -0
  36. package/dist/{commands → cli/commands}/login.js +33 -17
  37. package/dist/{commands → cli/commands}/logout.d.ts +1 -0
  38. package/dist/cli/commands/logout.js +19 -0
  39. package/dist/{commands → cli/commands}/memory.d.ts +1 -8
  40. package/dist/{commands → cli/commands}/memory.js +20 -11
  41. package/dist/cli/commands/open.d.ts +45 -0
  42. package/dist/cli/commands/open.js +216 -0
  43. package/dist/{commands → cli/commands}/plan.js +2 -2
  44. package/dist/{commands → cli/commands}/publish.js +1 -1
  45. package/dist/{commands → cli/commands}/releases.js +1 -1
  46. package/dist/cli/commands/run.d.ts +19 -0
  47. package/dist/cli/commands/run.js +255 -0
  48. package/dist/cli/commands/setup.js +158 -0
  49. package/dist/{commands → cli/commands}/skills.js +121 -251
  50. package/dist/{commands → cli/commands}/status.d.ts +1 -0
  51. package/dist/cli/commands/status.js +62 -0
  52. package/dist/cli/commands/tool.d.ts +11 -0
  53. package/dist/cli/commands/tool.js +121 -0
  54. package/dist/cli/index.d.ts +6 -0
  55. package/dist/cli/index.js +89 -0
  56. package/dist/cli/root-action.d.ts +7 -0
  57. package/dist/cli/root-action.js +15 -0
  58. package/dist/{lib → core}/api-client.d.ts +106 -15
  59. package/dist/{lib → core}/api-client.js +267 -75
  60. package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
  61. package/dist/{lib → core}/async-op-lifecycle.js +3 -4
  62. package/dist/{lib → core}/auth.d.ts +14 -6
  63. package/dist/{lib → core}/auth.js +56 -40
  64. package/dist/core/capabilities/agent-playbook.d.ts +20 -0
  65. package/dist/core/capabilities/agent-playbook.js +218 -0
  66. package/dist/core/capabilities/api-docs.d.ts +36 -0
  67. package/dist/core/capabilities/api-docs.js +118 -0
  68. package/dist/core/capabilities/asset-import.d.ts +49 -0
  69. package/dist/core/capabilities/asset-import.js +134 -0
  70. package/dist/core/capabilities/camera-view.d.ts +98 -0
  71. package/dist/core/capabilities/camera-view.js +222 -0
  72. package/dist/core/capabilities/capture.d.ts +63 -0
  73. package/dist/core/capabilities/capture.js +67 -0
  74. package/dist/core/capabilities/console-read.d.ts +17 -0
  75. package/dist/core/capabilities/console-read.js +21 -0
  76. package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
  77. package/dist/{lib → core/capabilities}/creator.js +14 -33
  78. package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
  79. package/dist/{lib → core/capabilities}/debug-report.js +12 -31
  80. package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
  81. package/dist/{commands → core/capabilities}/doctor.js +47 -73
  82. package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
  83. package/dist/core/capabilities/engine-fallbacks.js +36 -0
  84. package/dist/core/capabilities/engine-ops.d.ts +33 -0
  85. package/dist/core/capabilities/engine-ops.js +145 -0
  86. package/dist/core/capabilities/engine-receipt.d.ts +53 -0
  87. package/dist/core/capabilities/engine-receipt.js +134 -0
  88. package/dist/core/capabilities/events.d.ts +200 -0
  89. package/dist/core/capabilities/events.js +383 -0
  90. package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
  91. package/dist/core/capabilities/fabricate-mesh.js +165 -0
  92. package/dist/core/capabilities/frame-quality.d.ts +71 -0
  93. package/dist/core/capabilities/frame-quality.js +449 -0
  94. package/dist/core/capabilities/game-task-plan.d.ts +66 -0
  95. package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
  96. package/dist/core/capabilities/hdri-import.d.ts +90 -0
  97. package/dist/core/capabilities/hdri-import.js +250 -0
  98. package/dist/core/capabilities/image-generation.d.ts +24 -0
  99. package/dist/core/capabilities/image-generation.js +22 -0
  100. package/dist/core/capabilities/navigation/open.d.ts +156 -0
  101. package/dist/core/capabilities/navigation/open.js +567 -0
  102. package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
  103. package/dist/core/capabilities/navigation/render-product-map.js +84 -0
  104. package/dist/core/capabilities/navigation/targets.d.ts +87 -0
  105. package/dist/core/capabilities/navigation/targets.js +250 -0
  106. package/dist/core/capabilities/play-determinism.d.ts +35 -0
  107. package/dist/core/capabilities/play-determinism.js +86 -0
  108. package/dist/core/capabilities/project-context.d.ts +114 -0
  109. package/dist/core/capabilities/project-context.js +249 -0
  110. package/dist/core/capabilities/runtime-control.d.ts +540 -0
  111. package/dist/core/capabilities/runtime-control.js +1011 -0
  112. package/dist/core/capabilities/scene-kind.d.ts +19 -0
  113. package/dist/core/capabilities/scene-kind.js +137 -0
  114. package/dist/core/capabilities/scene-script.d.ts +38 -0
  115. package/dist/core/capabilities/scene-script.js +45 -0
  116. package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
  117. package/dist/core/capabilities/tool-dispatch.js +1490 -0
  118. package/dist/core/capabilities/ui-control.d.ts +179 -0
  119. package/dist/core/capabilities/ui-control.js +423 -0
  120. package/dist/core/capabilities/variant-types.d.ts +22 -0
  121. package/dist/core/capabilities/variant-types.js +101 -0
  122. package/dist/core/capability-skew.d.ts +205 -0
  123. package/dist/core/capability-skew.js +386 -0
  124. package/dist/{lib → core}/config.d.ts +11 -1
  125. package/dist/{lib → core}/config.js +13 -2
  126. package/dist/core/embeddings.d.ts +78 -0
  127. package/dist/core/embeddings.js +166 -0
  128. package/dist/core/engine-install.d.ts +105 -0
  129. package/dist/core/engine-install.js +190 -0
  130. package/dist/core/engine.d.ts +94 -0
  131. package/dist/{lib → core}/engine.js +74 -28
  132. package/dist/core/feedback/client.d.ts +88 -0
  133. package/dist/core/feedback/client.js +182 -0
  134. package/dist/{lib → core}/format.d.ts +0 -1
  135. package/dist/{lib → core}/format.js +1 -1
  136. package/dist/core/headless/connection.d.ts +86 -0
  137. package/dist/core/headless/connection.js +97 -0
  138. package/dist/core/headless/editor-connection.d.ts +26 -0
  139. package/dist/core/headless/editor-connection.js +81 -0
  140. package/dist/core/headless/mcp-routing.d.ts +38 -0
  141. package/dist/core/headless/mcp-routing.js +83 -0
  142. package/dist/core/headless/registry.d.ts +91 -0
  143. package/dist/core/headless/registry.js +226 -0
  144. package/dist/core/headless/resolve.d.ts +46 -0
  145. package/dist/core/headless/resolve.js +75 -0
  146. package/dist/core/headless/spawn.d.ts +46 -0
  147. package/dist/core/headless/spawn.js +205 -0
  148. package/dist/core/headless/worker-connection.d.ts +96 -0
  149. package/dist/core/headless/worker-connection.js +353 -0
  150. package/dist/core/headless/worker-engine-client.d.ts +58 -0
  151. package/dist/core/headless/worker-engine-client.js +246 -0
  152. package/dist/core/launch-posture.d.ts +170 -0
  153. package/dist/core/launch-posture.js +317 -0
  154. package/dist/core/library-read.d.ts +73 -0
  155. package/dist/core/library-read.js +279 -0
  156. package/dist/core/library-search.d.ts +143 -0
  157. package/dist/core/library-search.js +301 -0
  158. package/dist/{lib → core}/log-filters.js +4 -2
  159. package/dist/{lib → core}/mcp-log.js +2 -17
  160. package/dist/core/package-root.d.ts +9 -0
  161. package/dist/core/package-root.js +11 -0
  162. package/dist/core/redact.d.ts +20 -0
  163. package/dist/core/redact.js +64 -0
  164. package/dist/core/registry-search.d.ts +167 -0
  165. package/dist/core/registry-search.js +358 -0
  166. package/dist/core/skills-registry.d.ts +55 -0
  167. package/dist/core/skills-registry.js +106 -0
  168. package/dist/{lib → core}/store.js +11 -7
  169. package/dist/{lib → core}/summer-compatibility.js +3 -3
  170. package/dist/{lib → core}/telemetry.js +5 -2
  171. package/dist/core/templates.d.ts +98 -0
  172. package/dist/core/templates.js +241 -0
  173. package/dist/core/tool-errors.d.ts +30 -0
  174. package/dist/core/tool-errors.js +40 -0
  175. package/dist/core/trajectory.d.ts +80 -0
  176. package/dist/core/trajectory.js +307 -0
  177. package/dist/core/util/http.d.ts +13 -0
  178. package/dist/core/util/http.js +28 -0
  179. package/dist/core/util/json.d.ts +12 -0
  180. package/dist/core/util/json.js +21 -0
  181. package/dist/core/util/process.d.ts +3 -0
  182. package/dist/core/util/process.js +13 -0
  183. package/dist/core/util/sleep.d.ts +1 -0
  184. package/dist/core/util/sleep.js +3 -0
  185. package/dist/core/version.d.ts +3 -0
  186. package/dist/core/version.js +5 -0
  187. package/dist/installer/agent-config.d.ts +63 -0
  188. package/dist/installer/agent-config.js +540 -0
  189. package/dist/installer/agent-table.d.ts +103 -0
  190. package/dist/installer/agent-table.js +584 -0
  191. package/dist/installer/legacy-skills.d.ts +26 -0
  192. package/dist/installer/legacy-skills.js +53 -0
  193. package/dist/installer/setup.d.ts +76 -0
  194. package/dist/installer/setup.js +148 -0
  195. package/dist/installer/skill-locations.d.ts +36 -0
  196. package/dist/installer/skill-locations.js +91 -0
  197. package/dist/installer/version-check.d.ts +178 -0
  198. package/dist/installer/version-check.js +479 -0
  199. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  200. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  201. package/dist/mcp/server.d.ts +23 -3
  202. package/dist/mcp/server.js +122 -28
  203. package/dist/mcp/tools/asset-tools.js +62 -142
  204. package/dist/mcp/tools/creator-tools.js +5 -23
  205. package/dist/mcp/tools/debug-tools.js +61 -18
  206. package/dist/mcp/tools/event-tools.d.ts +14 -0
  207. package/dist/mcp/tools/event-tools.js +41 -0
  208. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  209. package/dist/mcp/tools/fabricate-tools.js +28 -0
  210. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  211. package/dist/mcp/tools/feedback-tools.js +88 -0
  212. package/dist/mcp/tools/file-tools.js +6 -53
  213. package/dist/mcp/tools/generate-tools.js +37 -63
  214. package/dist/mcp/tools/library-tools.d.ts +11 -0
  215. package/dist/mcp/tools/library-tools.js +42 -0
  216. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  217. package/dist/mcp/tools/navigation-tools.js +37 -0
  218. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  219. package/dist/mcp/tools/perception-tools.js +146 -0
  220. package/dist/mcp/tools/project-tools.d.ts +14 -0
  221. package/dist/mcp/tools/project-tools.js +72 -281
  222. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  223. package/dist/mcp/tools/runtime-tools.js +92 -0
  224. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  225. package/dist/mcp/tools/scene-tools.js +68 -119
  226. package/dist/mcp/tools/script-tools.d.ts +3 -0
  227. package/dist/mcp/tools/script-tools.js +118 -0
  228. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  229. package/dist/mcp/tools/spatial-tools.js +485 -0
  230. package/dist/mcp/tools/text-json.d.ts +8 -0
  231. package/dist/mcp/tools/text-json.js +12 -0
  232. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  233. package/dist/mcp/tools/ui-tools.js +82 -0
  234. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  235. package/dist/mcp/tools/visual-tools.js +383 -101
  236. package/dist/mcp/tools/with-engine.d.ts +9 -15
  237. package/dist/mcp/tools/with-engine.js +60 -96
  238. package/dist/project-memory/project-manifest.d.ts +36 -0
  239. package/dist/project-memory/project-manifest.js +50 -0
  240. package/dist/project-memory/project-memory.d.ts +57 -0
  241. package/dist/{lib → project-memory}/project-memory.js +46 -0
  242. package/gemini-extension.json +103 -2
  243. package/hooks/hooks-cursor.json +2 -2
  244. package/hooks/hooks.json +2 -1
  245. package/hooks/pre-commit-doctor.sh +45 -39
  246. package/hooks/run-hook.cmd +30 -23
  247. package/hooks/run-hook.sh +20 -0
  248. package/hooks/session-start.sh +18 -7
  249. package/integrations/README.md +99 -0
  250. package/integrations/amp/README.md +12 -0
  251. package/integrations/amp/manifest-target.json +3 -0
  252. package/integrations/antigravity/README.md +12 -0
  253. package/integrations/antigravity/manifest-target.json +3 -0
  254. package/integrations/claude/README.md +19 -0
  255. package/integrations/claude/manifest-target.json +16 -0
  256. package/integrations/claude-desktop/README.md +12 -0
  257. package/integrations/claude-desktop/manifest-target.json +3 -0
  258. package/integrations/cline/README.md +12 -0
  259. package/integrations/cline/manifest-target.json +3 -0
  260. package/integrations/cline-cli/README.md +12 -0
  261. package/integrations/cline-cli/manifest-target.json +3 -0
  262. package/integrations/codex/README.md +15 -0
  263. package/integrations/codex/manifest-target.json +5 -0
  264. package/integrations/copilot-jetbrains/README.md +12 -0
  265. package/integrations/copilot-jetbrains/manifest-target.json +3 -0
  266. package/integrations/crush/README.md +12 -0
  267. package/integrations/crush/manifest-target.json +3 -0
  268. package/integrations/cursor/README.md +16 -0
  269. package/integrations/cursor/manifest-target.json +5 -0
  270. package/integrations/factory/README.md +26 -0
  271. package/integrations/factory/manifest-target.json +5 -0
  272. package/integrations/gemini/README.md +26 -0
  273. package/integrations/gemini/manifest-target.json +5 -0
  274. package/integrations/github-copilot/README.md +12 -0
  275. package/integrations/github-copilot/manifest-target.json +3 -0
  276. package/integrations/goose/README.md +12 -0
  277. package/integrations/goose/manifest-target.json +3 -0
  278. package/integrations/grok-build/README.md +12 -0
  279. package/integrations/grok-build/manifest-target.json +3 -0
  280. package/integrations/hermes/README.md +12 -0
  281. package/integrations/hermes/manifest-target.json +3 -0
  282. package/integrations/junie/README.md +12 -0
  283. package/integrations/junie/manifest-target.json +3 -0
  284. package/integrations/kilo-code/README.md +12 -0
  285. package/integrations/kilo-code/manifest-target.json +3 -0
  286. package/integrations/kimi-code/README.md +12 -0
  287. package/integrations/kimi-code/manifest-target.json +3 -0
  288. package/integrations/kiro/README.md +12 -0
  289. package/integrations/kiro/manifest-target.json +3 -0
  290. package/integrations/lm-studio/README.md +12 -0
  291. package/integrations/lm-studio/manifest-target.json +3 -0
  292. package/integrations/mistral-vibe/README.md +12 -0
  293. package/integrations/mistral-vibe/manifest-target.json +3 -0
  294. package/integrations/opencode/README.md +12 -0
  295. package/integrations/opencode/manifest-target.json +3 -0
  296. package/integrations/qoder/README.md +12 -0
  297. package/integrations/qoder/manifest-target.json +3 -0
  298. package/integrations/qwen-code/README.md +12 -0
  299. package/integrations/qwen-code/manifest-target.json +3 -0
  300. package/integrations/roo-code/README.md +14 -0
  301. package/integrations/roo-code/manifest-target.json +3 -0
  302. package/integrations/rovo-dev/README.md +12 -0
  303. package/integrations/rovo-dev/manifest-target.json +3 -0
  304. package/integrations/trae/README.md +12 -0
  305. package/integrations/trae/manifest-target.json +3 -0
  306. package/integrations/visual-studio/README.md +12 -0
  307. package/integrations/visual-studio/manifest-target.json +3 -0
  308. package/integrations/vscode-copilot/README.md +12 -0
  309. package/integrations/vscode-copilot/manifest-target.json +3 -0
  310. package/integrations/warp/README.md +12 -0
  311. package/integrations/warp/manifest-target.json +3 -0
  312. package/integrations/windsurf/README.md +12 -0
  313. package/integrations/windsurf/manifest-target.json +3 -0
  314. package/integrations/zed/README.md +12 -0
  315. package/integrations/zed/manifest-target.json +3 -0
  316. package/library/references/collaborative-protocol/resource.yaml +24 -0
  317. package/library/references/gd-style/resource.yaml +24 -0
  318. package/{references → library/references/godot-version}/godot-version.md +6 -6
  319. package/library/references/godot-version/resource.yaml +22 -0
  320. package/library/references/headless-routing/headless-routing.md +46 -0
  321. package/library/references/headless-routing/resource.yaml +24 -0
  322. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  323. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  324. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  325. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  326. package/library/references/product-map/product-map.md +103 -0
  327. package/library/references/product-map/resource.yaml +33 -0
  328. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  329. package/library/references/public-surface-language/resource.yaml +17 -0
  330. package/library/references/summer-folder/resource.yaml +20 -0
  331. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  332. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  333. package/library/skills/3d-lighting/resource.yaml +27 -0
  334. package/library/skills/README.md +242 -0
  335. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  336. package/library/skills/adaptive-music/resource.yaml +28 -0
  337. package/library/skills/agent-playtesting/SKILL.md +148 -0
  338. package/library/skills/agent-playtesting/resource.yaml +52 -0
  339. package/library/skills/ambient-bed/resource.yaml +24 -0
  340. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  341. package/library/skills/animated-loop/resource.yaml +27 -0
  342. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  343. package/library/skills/animation-tree/resource.yaml +33 -0
  344. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  345. package/library/skills/art-direction/resource.yaml +29 -0
  346. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  347. package/library/skills/asset-strategy/resource.yaml +63 -0
  348. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  349. package/library/skills/audio-direction/resource.yaml +32 -0
  350. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  351. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  352. package/library/skills/brainstorm-game/resource.yaml +30 -0
  353. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  354. package/library/skills/brainstorming/resource.yaml +23 -0
  355. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  356. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  357. package/library/skills/browse-templates/resource.yaml +23 -0
  358. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  359. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  360. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  361. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  362. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  363. package/library/skills/character-model/resource.yaml +36 -0
  364. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  365. package/library/skills/character-portrait/resource.yaml +30 -0
  366. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  367. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  368. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  369. package/library/skills/concept-art/resource.yaml +34 -0
  370. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  371. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  372. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  373. package/library/skills/debug/resource.yaml +31 -0
  374. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  375. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  376. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  377. package/library/skills/design-level/resource.yaml +31 -0
  378. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  379. package/library/skills/design-mechanic/resource.yaml +31 -0
  380. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  381. package/library/skills/design-npc/resource.yaml +29 -0
  382. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  383. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  384. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  385. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  386. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  387. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  388. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  389. package/library/skills/environment-kit/resource.yaml +29 -0
  390. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  391. package/library/skills/export-and-ship/resource.yaml +32 -0
  392. package/library/skills/fabricating-assets/SKILL.md +195 -0
  393. package/library/skills/fabricating-assets/resource.yaml +52 -0
  394. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  395. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  396. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  397. package/library/skills/fps-controller/resource.yaml +29 -0
  398. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  399. package/library/skills/game-feel/resource.yaml +27 -0
  400. package/library/skills/gameskill/SKILL.md +64 -0
  401. package/library/skills/gameskill/resource.yaml +22 -0
  402. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  403. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  404. package/library/skills/generate-motion/resource.yaml +34 -0
  405. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  406. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  407. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  408. package/library/skills/headless-scripting/resource.yaml +26 -0
  409. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  410. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  411. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  412. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  413. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  414. package/library/skills/investigating-bugs/resource.yaml +24 -0
  415. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  416. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  417. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  418. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  419. package/library/skills/make-game/resource.yaml +35 -0
  420. package/library/skills/music-track/resource.yaml +28 -0
  421. package/library/skills/navigate-summer/SKILL.md +61 -0
  422. package/library/skills/navigate-summer/resource.yaml +35 -0
  423. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  424. package/library/skills/new-project/resource.yaml +28 -0
  425. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  426. package/library/skills/organic-model/resource.yaml +32 -0
  427. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  428. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  429. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  430. package/library/skills/pixel-art/resource.yaml +31 -0
  431. package/library/skills/play/resource.yaml +26 -0
  432. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  433. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  434. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  435. package/library/skills/procedural-animation/resource.yaml +33 -0
  436. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  437. package/library/skills/prop-model/resource.yaml +33 -0
  438. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  439. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  440. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  441. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  442. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  443. package/library/skills/remote-deploy/resource.yaml +23 -0
  444. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  445. package/library/skills/retarget/resource.yaml +33 -0
  446. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  447. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  448. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  449. package/library/skills/scene-composition/resource.yaml +27 -0
  450. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  451. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  452. package/library/skills/scene-scripting/SKILL.md +764 -0
  453. package/library/skills/scene-scripting/resource.yaml +58 -0
  454. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  455. package/library/skills/scene-to-level/resource.yaml +33 -0
  456. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  457. package/library/skills/skill-create/SKILL.md +138 -0
  458. package/library/skills/skill-create/resource.yaml +25 -0
  459. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  460. package/library/skills/skill-improve/resource.yaml +25 -0
  461. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  462. package/library/skills/skill-test/resource.yaml +26 -0
  463. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  464. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  465. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  466. package/library/skills/skybox-panorama/resource.yaml +28 -0
  467. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  468. package/library/skills/sound-effect/resource.yaml +27 -0
  469. package/library/skills/spatial-placement/SKILL.md +74 -0
  470. package/library/skills/spatial-placement/resource.yaml +42 -0
  471. package/library/skills/spatial-placement/tests/spec.md +65 -0
  472. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  473. package/library/skills/sprite-sheet/resource.yaml +32 -0
  474. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  475. package/library/skills/tileable-texture/resource.yaml +31 -0
  476. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  477. package/library/skills/trailer-shot/resource.yaml +27 -0
  478. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  479. package/library/skills/tune-performance/resource.yaml +31 -0
  480. package/library/skills/ui-basics/resource.yaml +25 -0
  481. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  482. package/library/skills/ui-graphics/resource.yaml +29 -0
  483. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  484. package/library/skills/use-widget-asset/resource.yaml +29 -0
  485. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  486. package/library/skills/using-summer/resource.yaml +41 -0
  487. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  488. package/library/skills/vehicle-model/resource.yaml +34 -0
  489. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  490. package/library/skills/verification-before-completion/resource.yaml +23 -0
  491. package/library/skills/verifying-scenes/SKILL.md +98 -0
  492. package/library/skills/verifying-scenes/resource.yaml +42 -0
  493. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  494. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  495. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  496. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  497. package/library/skills/vfx-fire/resource.yaml +35 -0
  498. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  499. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  500. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  501. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  502. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  503. package/library/skills/vfx-lightning/resource.yaml +33 -0
  504. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  505. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  506. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  507. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  508. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  509. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  510. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  511. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  512. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  513. package/library/skills/vfx-smoke/resource.yaml +32 -0
  514. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  515. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  516. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  517. package/library/skills/voice-line/resource.yaml +27 -0
  518. package/library/skills/world-building-3d/SKILL.md +105 -0
  519. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  520. package/library/skills/world-building-3d/resource.yaml +44 -0
  521. package/library/skills/world-building-3d/tests/spec.md +48 -0
  522. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  523. package/library/skills/writing-plans/resource.yaml +23 -0
  524. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  525. package/library/skills/writing-skills/resource.yaml +29 -0
  526. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  527. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  528. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  529. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  530. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  531. package/library/templates/2d-platformer/resource.yaml +24 -0
  532. package/library/templates/2d-rpg/resource.yaml +21 -0
  533. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  534. package/library/templates/3d-basic/resource.yaml +16 -0
  535. package/library/templates/3d-city-kit/resource.yaml +24 -0
  536. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  537. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  538. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  539. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  540. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  541. package/library/templates/3d-racing-game/resource.yaml +21 -0
  542. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  543. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  544. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  545. package/library/templates/README.md +94 -0
  546. package/library/templates/empty/resource.yaml +16 -0
  547. package/library/tools/add-node/resource.yaml +60 -0
  548. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  549. package/library/tools/api-docs/resource.yaml +57 -0
  550. package/library/tools/batch/resource.yaml +52 -0
  551. package/library/tools/camera-bookmark/resource.yaml +73 -0
  552. package/library/tools/check-job/resource.yaml +45 -0
  553. package/library/tools/clear-console/resource.yaml +40 -0
  554. package/library/tools/connect-signal/resource.yaml +63 -0
  555. package/library/tools/create-debug-report/resource.yaml +67 -0
  556. package/library/tools/create-scene/resource.yaml +59 -0
  557. package/library/tools/creator-config/resource.yaml +63 -0
  558. package/library/tools/creator-publish/resource.yaml +73 -0
  559. package/library/tools/creator-releases/resource.yaml +53 -0
  560. package/library/tools/fabricate-3d/resource.yaml +108 -0
  561. package/library/tools/game-control/resource.yaml +84 -0
  562. package/library/tools/game-input/resource.yaml +159 -0
  563. package/library/tools/game-probe/resource.yaml +90 -0
  564. package/library/tools/generate-3d/resource.yaml +112 -0
  565. package/library/tools/generate-audio/resource.yaml +80 -0
  566. package/library/tools/generate-image/resource.yaml +62 -0
  567. package/library/tools/generate-motion/resource.yaml +66 -0
  568. package/library/tools/generate-video/resource.yaml +66 -0
  569. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  570. package/library/tools/get-asset/resource.yaml +42 -0
  571. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  572. package/library/tools/get-console/resource.yaml +69 -0
  573. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  574. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  575. package/library/tools/get-diagnostics/resource.yaml +42 -0
  576. package/library/tools/get-project-context/resource.yaml +45 -0
  577. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  578. package/library/tools/get-scene-tree/resource.yaml +52 -0
  579. package/library/tools/get-script-errors/resource.yaml +45 -0
  580. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  581. package/library/tools/import-asset/resource.yaml +73 -0
  582. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  583. package/library/tools/import-from-url/resource.yaml +51 -0
  584. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  585. package/library/tools/import-hdri/resource.yaml +69 -0
  586. package/library/tools/input-map-bind/resource.yaml +52 -0
  587. package/library/tools/inspect-node/resource.yaml +46 -0
  588. package/library/tools/inspect-resource/resource.yaml +45 -0
  589. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  590. package/library/tools/instantiate-scene/resource.yaml +62 -0
  591. package/library/tools/is-running/resource.yaml +40 -0
  592. package/library/tools/library-feedback/resource.yaml +89 -0
  593. package/library/tools/list-my-assets/resource.yaml +56 -0
  594. package/library/tools/navigation-probe/resource.yaml +85 -0
  595. package/library/tools/open/resource.yaml +80 -0
  596. package/library/tools/open-main-scene/resource.yaml +40 -0
  597. package/library/tools/open-scene/resource.yaml +46 -0
  598. package/library/tools/play/resource.yaml +91 -0
  599. package/library/tools/project-setting/resource.yaml +53 -0
  600. package/library/tools/read-file/resource.yaml +47 -0
  601. package/library/tools/read-library/resource.yaml +67 -0
  602. package/library/tools/recent-events/resource.yaml +71 -0
  603. package/library/tools/remove-node/resource.yaml +51 -0
  604. package/library/tools/replace-node/resource.yaml +57 -0
  605. package/library/tools/replace-text/resource.yaml +61 -0
  606. package/library/tools/run-editor-script/resource.yaml +61 -0
  607. package/library/tools/run-script/resource.yaml +73 -0
  608. package/library/tools/runtime-animate/resource.yaml +140 -0
  609. package/library/tools/runtime-call/resource.yaml +74 -0
  610. package/library/tools/runtime-set/resource.yaml +80 -0
  611. package/library/tools/runtime-spawn/resource.yaml +95 -0
  612. package/library/tools/save-scene/resource.yaml +50 -0
  613. package/library/tools/screenshot/resource.yaml +112 -0
  614. package/library/tools/search-assets/resource.yaml +67 -0
  615. package/library/tools/search-library/resource.yaml +81 -0
  616. package/library/tools/select-node/resource.yaml +48 -0
  617. package/library/tools/set-prop/resource.yaml +64 -0
  618. package/library/tools/set-resource-property/resource.yaml +66 -0
  619. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  620. package/library/tools/snap-to-surface/resource.yaml +90 -0
  621. package/library/tools/snapshot-diff/resource.yaml +58 -0
  622. package/library/tools/starcast/resource.yaml +120 -0
  623. package/library/tools/start-game-task/resource.yaml +91 -0
  624. package/library/tools/stop/resource.yaml +51 -0
  625. package/library/tools/test-placement/resource.yaml +109 -0
  626. package/library/tools/ui-actions/resource.yaml +77 -0
  627. package/library/tools/ui-activate/resource.yaml +88 -0
  628. package/library/tools/ui-screenshot/resource.yaml +63 -0
  629. package/library/tools/ui-tree/resource.yaml +69 -0
  630. package/library/tools/wait-for-event/resource.yaml +84 -0
  631. package/library/tools/world-snapshot/resource.yaml +60 -0
  632. package/library/tools/write-file/resource.yaml +54 -0
  633. package/package.json +21 -15
  634. package/registry/generated/aliases.json +207 -0
  635. package/registry/generated/counts.json +12 -0
  636. package/registry/generated/gemini-extension.json +122 -0
  637. package/registry/generated/index.json +7709 -0
  638. package/registry/generated/marketplace.claude.json +44 -0
  639. package/registry/generated/mcp.json +13 -0
  640. package/registry/generated/plugin.claude.json +135 -0
  641. package/registry/generated/plugin.codex.json +144 -0
  642. package/registry/generated/plugin.cursor.json +134 -0
  643. package/registry/generated/plugin.factory.json +117 -0
  644. package/registry/generated/skills-index.md +242 -0
  645. package/registry/generated/skills-registry.json +1249 -0
  646. package/registry/generated/templates-registry.json +455 -0
  647. package/registry/schemas/allowed-hosts.json +19 -0
  648. package/registry/schemas/collection.schema.json +68 -0
  649. package/registry/schemas/domains.json +96 -0
  650. package/registry/schemas/example.schema.json +11 -0
  651. package/registry/schemas/reference.schema.json +10 -0
  652. package/registry/schemas/resource.schema.json +154 -0
  653. package/registry/schemas/skill.schema.json +14 -0
  654. package/registry/schemas/template.schema.json +46 -0
  655. package/registry/schemas/tool.schema.json +61 -0
  656. package/_persona/summer/SKILL.md +0 -113
  657. package/dist/bin/postinstall.d.ts +0 -2
  658. package/dist/bin/postinstall.js +0 -3
  659. package/dist/commands/cloud.d.ts +0 -2
  660. package/dist/commands/cloud.js +0 -80
  661. package/dist/commands/create.d.ts +0 -3
  662. package/dist/commands/create.js +0 -171
  663. package/dist/commands/install.d.ts +0 -19
  664. package/dist/commands/install.js +0 -194
  665. package/dist/commands/list.js +0 -67
  666. package/dist/commands/logout.js +0 -13
  667. package/dist/commands/logs.d.ts +0 -2
  668. package/dist/commands/logs.js +0 -19
  669. package/dist/commands/open.d.ts +0 -2
  670. package/dist/commands/open.js +0 -32
  671. package/dist/commands/orchestrator.d.ts +0 -8
  672. package/dist/commands/orchestrator.js +0 -143
  673. package/dist/commands/run.d.ts +0 -2
  674. package/dist/commands/run.js +0 -167
  675. package/dist/commands/setup.js +0 -217
  676. package/dist/commands/status.js +0 -46
  677. package/dist/lib/agent-config.d.ts +0 -39
  678. package/dist/lib/agent-config.js +0 -626
  679. package/dist/lib/banner.d.ts +0 -4
  680. package/dist/lib/banner.js +0 -122
  681. package/dist/lib/cloud/api.d.ts +0 -79
  682. package/dist/lib/cloud/api.js +0 -107
  683. package/dist/lib/cloud/apply.d.ts +0 -32
  684. package/dist/lib/cloud/apply.js +0 -294
  685. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  686. package/dist/lib/cloud/checkpoint.js +0 -142
  687. package/dist/lib/cloud/conflicts.d.ts +0 -55
  688. package/dist/lib/cloud/conflicts.js +0 -131
  689. package/dist/lib/cloud/containment.d.ts +0 -8
  690. package/dist/lib/cloud/containment.js +0 -52
  691. package/dist/lib/cloud/diff.d.ts +0 -39
  692. package/dist/lib/cloud/diff.js +0 -138
  693. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  694. package/dist/lib/cloud/engine-bridge.js +0 -139
  695. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  696. package/dist/lib/cloud/hash-cache.js +0 -44
  697. package/dist/lib/cloud/hash.d.ts +0 -10
  698. package/dist/lib/cloud/hash.js +0 -111
  699. package/dist/lib/cloud/http.d.ts +0 -17
  700. package/dist/lib/cloud/http.js +0 -47
  701. package/dist/lib/cloud/lock-path.d.ts +0 -1
  702. package/dist/lib/cloud/lock-path.js +0 -5
  703. package/dist/lib/cloud/lock.d.ts +0 -14
  704. package/dist/lib/cloud/lock.js +0 -143
  705. package/dist/lib/cloud/manifest.d.ts +0 -6
  706. package/dist/lib/cloud/manifest.js +0 -41
  707. package/dist/lib/cloud/paths.d.ts +0 -20
  708. package/dist/lib/cloud/paths.js +0 -90
  709. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  710. package/dist/lib/cloud/project-godot-merge.js +0 -185
  711. package/dist/lib/cloud/rules.d.ts +0 -39
  712. package/dist/lib/cloud/rules.js +0 -159
  713. package/dist/lib/cloud/sync.d.ts +0 -21
  714. package/dist/lib/cloud/sync.js +0 -518
  715. package/dist/lib/cloud/transfer.d.ts +0 -23
  716. package/dist/lib/cloud/transfer.js +0 -184
  717. package/dist/lib/cloud/types.d.ts +0 -62
  718. package/dist/lib/cloud/types.js +0 -1
  719. package/dist/lib/cloud/validate-path.d.ts +0 -23
  720. package/dist/lib/cloud/validate-path.js +0 -103
  721. package/dist/lib/engine.d.ts +0 -51
  722. package/dist/lib/game-task-plan.d.ts +0 -42
  723. package/dist/lib/project-memory.d.ts +0 -33
  724. package/dist/lib/public-surface-paths.d.ts +0 -13
  725. package/dist/lib/public-surface-paths.js +0 -42
  726. package/dist/lib/remote-templates.d.ts +0 -25
  727. package/dist/lib/remote-templates.js +0 -86
  728. package/dist/lib/skills-registry.d.ts +0 -572
  729. package/dist/lib/skills-registry.js +0 -1061
  730. package/dist/lib/version-check.d.ts +0 -106
  731. package/dist/lib/version-check.js +0 -338
  732. package/dist/mcp/tools/cloud-tools.js +0 -42
  733. package/references/mcp-tools-reference.md +0 -199
  734. package/references/template-registry.md +0 -73
  735. package/skills/README.md +0 -103
  736. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  737. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  738. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  739. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  740. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  741. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  742. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  743. package/skills/workflow/gameskill/SKILL.md +0 -120
  744. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  745. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  746. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  747. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  748. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  749. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  750. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  751. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  752. package/skills/workflow/skill-create/SKILL.md +0 -153
  753. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  754. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  755. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  756. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  757. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  758. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  759. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  760. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  761. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  762. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  763. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  764. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  765. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  766. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  767. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  768. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  769. /package/dist/{lib → core}/store.d.ts +0 -0
  770. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  771. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  772. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  773. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  774. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  775. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  776. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  777. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  778. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  779. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  780. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  781. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  782. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  783. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  784. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  785. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  786. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  787. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  788. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  789. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  790. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -2,28 +2,16 @@ import { createHash } from "node:crypto";
2
2
  import { createReadStream } from "node:fs";
3
3
  import { lstat, readFile } from "node:fs/promises";
4
4
  import { resolve } from "node:path";
5
- import { getCredentialMetadata, getCreatorToken, } from "./auth.js";
6
- import { getCreatorApiUrl, readSummerConfig, } from "./config.js";
7
- import { appendStoreJsonLine } from "./store.js";
5
+ import { getCredentialMetadata, getCreatorToken, } from "../auth.js";
6
+ import { getCreatorApiUrl, readSummerConfig, } from "../config.js";
7
+ import { appendStoreJsonLine } from "../store.js";
8
+ import { readJsonResponse } from "../util/http.js";
8
9
  export const CREATOR_API_CONTRACT = "summer.creator.v1";
9
10
  const CREATOR_PUBLISH_PATH = "/api/creator/v1/publish";
10
11
  const CREATOR_RELEASES_PATH = "/api/creator/v1/releases";
11
12
  const REQUIRED_SCOPE = "publish";
12
13
  const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
13
14
  const VERSION = /^[A-Za-z0-9][A-Za-z0-9._-]{0,31}$/;
14
- export const CREATOR_API_AUDIT = {
15
- auditedAt: "2026-07-30",
16
- repository: "SummerEngine/summercraft",
17
- contract: CREATOR_API_CONTRACT,
18
- credentialAudience: "summercraft-creator",
19
- requiredServerScope: REQUIRED_SCOPE,
20
- operations: {
21
- publish: { supported: true, route: CREATOR_PUBLISH_PATH },
22
- releases: { supported: true, route: CREATOR_RELEASES_PATH },
23
- logs: { supported: false, route: null },
24
- },
25
- };
26
- const LOGS_RECOVERY = "Recovery: Summercraft must first own a durable runtime-log source with retention, redaction, project/release authorization, and a versioned query route. No placeholder logs were returned.";
27
15
  export class CreatorOperationError extends Error {
28
16
  code;
29
17
  operation;
@@ -55,7 +43,7 @@ async function resolveProjectId(explicit) {
55
43
  async function requireCreatorCredential(operation) {
56
44
  const token = await getCreatorToken();
57
45
  if (!token) {
58
- throw new CreatorOperationError("creator_token_required", operation, "Creator publishing needs a separate Summercraft API token.", 'Recovery: run "summer login --creator", mint a token with the exact "publish" scope in the opened browser page, and paste its one-time sc_ value. Your core Summer login will not be changed.');
46
+ throw new CreatorOperationError("creator_token_required", operation, "Creator publishing needs a separate Summer Platform creator API token.", 'Recovery: run "summer login --creator", mint a token with the exact "publish" scope in the opened browser page, and paste its one-time sc_ value. Your core Summer login will not be changed.');
59
47
  }
60
48
  const metadata = await getCredentialMetadata();
61
49
  if (!metadata.creator?.scopes.includes(REQUIRED_SCOPE)) {
@@ -73,15 +61,12 @@ function recoveryForStatus(operation, status) {
73
61
  if (status === 409 && operation === "publish") {
74
62
  return "Recovery: read the server detail, bump an immutable version when required, then repeat the unconfirmed command to review the new exact target.";
75
63
  }
76
- return `Recovery: retry once; if it repeats, check creator.apiUrl and the Summercraft creator API health.`;
64
+ return `Recovery: retry once; if it repeats, check creator.apiUrl and the Summer Platform creator API health.`;
77
65
  }
78
- async function readJsonResponse(response, operation) {
79
- const text = await response.text();
80
- let payload;
81
- try {
82
- payload = JSON.parse(text);
83
- }
84
- catch {
66
+ async function readCreatorResponse(response, operation) {
67
+ const { json, parsed } = await readJsonResponse(response);
68
+ const payload = json;
69
+ if (!parsed) {
85
70
  throw new CreatorOperationError("creator_invalid_response", operation, `The creator API returned a non-JSON response (${response.status}).`, recoveryForStatus(operation, response.status), response.status);
86
71
  }
87
72
  if (!response.ok) {
@@ -116,7 +101,7 @@ async function creatorRequest(operation, path, token, deps, init = {}) {
116
101
  catch (error) {
117
102
  throw new CreatorOperationError("creator_network_failed", operation, `The creator API request failed: ${error instanceof Error ? error.message : String(error)}.`, "Recovery: check your network and creator.apiUrl, then retry. No successful release is being claimed.");
118
103
  }
119
- return readJsonResponse(response, operation);
104
+ return readCreatorResponse(response, operation);
120
105
  }
121
106
  async function inspectArtifact(path) {
122
107
  const artifactPath = resolve(path);
@@ -152,7 +137,7 @@ async function readManifest(path) {
152
137
  }
153
138
  function assertUploadUrl(value) {
154
139
  if (typeof value !== "string") {
155
- throw new CreatorOperationError("creator_invalid_response", "publish", "The prepare response did not contain an uploadUrl.", "Recovery: retry once; if it repeats, report the Summercraft creator API as unhealthy.");
140
+ throw new CreatorOperationError("creator_invalid_response", "publish", "The prepare response did not contain an uploadUrl.", "Recovery: retry once; if it repeats, report the Summer Platform creator API as unhealthy.");
156
141
  }
157
142
  let url;
158
143
  try {
@@ -173,7 +158,7 @@ function assertUploadUrl(value) {
173
158
  }
174
159
  function assertUploadHeaders(value) {
175
160
  if (!value || typeof value !== "object" || Array.isArray(value)) {
176
- throw new CreatorOperationError("creator_invalid_response", "publish", "The prepare response did not contain signed upload headers.", "Recovery: retry once; if it repeats, report the Summercraft creator API as unhealthy.");
161
+ throw new CreatorOperationError("creator_invalid_response", "publish", "The prepare response did not contain signed upload headers.", "Recovery: retry once; if it repeats, report the Summer Platform creator API as unhealthy.");
177
162
  }
178
163
  const headers = Object.fromEntries(Object.entries(value).filter((entry) => typeof entry[1] === "string"));
179
164
  if (headers["content-type"] !== "application/octet-stream" ||
@@ -212,7 +197,7 @@ export async function publishCreator(input, overrides = {}) {
212
197
  (await readSummerConfig()).creator?.channel ||
213
198
  "production";
214
199
  if (channel !== "production") {
215
- throw new CreatorOperationError("creator_channel_unsupported", "publish", `The Summercraft creator API has no "${channel}" release channel.`, 'Recovery: use --channel production or run "summer config set creator.channel production". No release was created.');
200
+ throw new CreatorOperationError("creator_channel_unsupported", "publish", `The Summer Platform creator API has no "${channel}" release channel.`, 'Recovery: use --channel production or run "summer config set creator.channel production". No release was created.');
216
201
  }
217
202
  const version = input.version?.trim();
218
203
  if (!version || !VERSION.test(version)) {
@@ -387,7 +372,3 @@ export async function listCreatorReleases(input, overrides = {}) {
387
372
  nextCursor: payload.nextCursor,
388
373
  };
389
374
  }
390
- export async function readCreatorLogs(input) {
391
- await resolveProjectId(input.projectId);
392
- throw new CreatorOperationError("creator_backend_unavailable", "logs", "Summercraft does not have a durable creator runtime-log API.", LOGS_RECOVERY);
393
- }
@@ -1,4 +1,4 @@
1
- import { type DoctorResult } from "../commands/doctor.js";
1
+ import { type DoctorResult } from "./doctor.js";
2
2
  export interface DebugReportOptions {
3
3
  issue?: string;
4
4
  outputPath?: string;
@@ -1,17 +1,15 @@
1
1
  import { mkdir, writeFile } from "node:fs/promises";
2
- import { createRequire } from "node:module";
3
2
  import { hostname, platform, release } from "node:os";
4
3
  import { dirname, isAbsolute, join, resolve } from "node:path";
5
- import { EngineApiClient } from "./api-client.js";
6
- import { shapeEngineLogResponse } from "./log-filters.js";
7
- import { tildeify } from "./format.js";
8
- import { getMcpLogPath, readRecentMcpLogLines } from "./mcp-log.js";
9
- import { runDoctor } from "../commands/doctor.js";
10
- const require = createRequire(import.meta.url);
11
- const { version } = require("../../package.json");
12
- function sleep(ms) {
13
- return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
14
- }
4
+ import { EngineApiClient } from "../api-client.js";
5
+ import { shapeEngineLogResponse } from "../log-filters.js";
6
+ import { tildeify } from "../format.js";
7
+ import { getMcpLogPath, readRecentMcpLogLines } from "../mcp-log.js";
8
+ import { redactLogLine, redactSensitive } from "../redact.js";
9
+ import { runDoctor } from "./doctor.js";
10
+ import { asRecord } from "../util/json.js";
11
+ import { sleep } from "../util/sleep.js";
12
+ import { TOOLKIT_VERSION as version } from "../version.js";
15
13
  function errorMessage(error) {
16
14
  return error instanceof Error ? error.message : String(error);
17
15
  }
@@ -21,11 +19,6 @@ function timestampForFile(date) {
21
19
  export function defaultDebugReportFilename(date = new Date()) {
22
20
  return `summer-debug-report-${timestampForFile(date)}.md`;
23
21
  }
24
- function asRecord(value) {
25
- return value && typeof value === "object" && !Array.isArray(value)
26
- ? value
27
- : null;
28
- }
29
22
  function pickString(value, keys) {
30
23
  const record = asRecord(value);
31
24
  if (!record)
@@ -122,21 +115,9 @@ async function collectPlaySession(client, options) {
122
115
  }
123
116
  return session;
124
117
  }
118
+ /** Debug reports also blank hostnames — a support artifact needs none. */
125
119
  function redact(value) {
126
- if (Array.isArray(value))
127
- return value.map((item) => redact(item));
128
- if (!value || typeof value !== "object")
129
- return value;
130
- const out = {};
131
- for (const [key, nested] of Object.entries(value)) {
132
- if (/token|secret|password|authorization|cookie|api[-_]?key|hostname/i.test(key)) {
133
- out[key] = "[REDACTED]";
134
- }
135
- else {
136
- out[key] = redact(nested);
137
- }
138
- }
139
- return out;
120
+ return redactSensitive(value, { extraKeys: /hostname/i, strings: true });
140
121
  }
141
122
  export function redactDebugReport(report) {
142
123
  return redact(report);
@@ -193,7 +174,7 @@ ${report.doctor ? jsonBlock(report.doctor) : "Doctor was skipped."}
193
174
 
194
175
  Log path: ${tildeify(report.mcp.logPath)}
195
176
 
196
- ${report.mcp.recentLog.length > 0 ? `\`\`\`jsonl\n${report.mcp.recentLog.join("\n")}\n\`\`\`` : "No MCP lifecycle log entries found."}
177
+ ${report.mcp.recentLog.length > 0 ? `\`\`\`jsonl\n${report.mcp.recentLog.map(redactLogLine).join("\n")}\n\`\`\`` : "No MCP lifecycle log entries found."}
197
178
 
198
179
  ## Engine Health
199
180
 
@@ -1,4 +1,4 @@
1
- import { Command } from "commander";
1
+ import { type ProjectMemorySummary } from "../../project-memory/project-memory.js";
2
2
  export type DoctorStatus = "ok" | "warning" | "fail";
3
3
  export interface DoctorCheck {
4
4
  id: string;
@@ -20,7 +20,12 @@ interface DoctorOptions {
20
20
  json?: boolean;
21
21
  quiet?: boolean;
22
22
  }
23
- export declare const doctorCommand: Command;
24
23
  export declare function runDoctor(options?: DoctorOptions): Promise<DoctorResult>;
24
+ export declare function checkLogin(): Promise<DoctorCheck>;
25
+ export declare function checkEngineInstall(): DoctorCheck;
26
+ /** The one-line Project Memory verdict: Markdown counts plus the template pin
27
+ * (`.summer/project.json` is memory too — the first fact a fresh agent
28
+ * needs). Exported for tests. */
29
+ export declare function describeProjectMemory(summary: ProjectMemorySummary): string;
25
30
  export declare function printDoctorResult(result: DoctorResult): void;
26
31
  export {};
@@ -1,50 +1,20 @@
1
1
  import { spawn } from "child_process";
2
- import { existsSync } from "fs";
3
- import { createRequire } from "node:module";
4
- import { platform } from "os";
5
- import { Command } from "commander";
6
2
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
7
3
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
8
- import { getAuthToken, getUserInfo } from "../lib/auth.js";
9
- import { isGitAvailable } from "../lib/cloud/checkpoint.js";
10
- import { checkEngineHealth, getApiPort, getApiToken } from "../lib/engine.js";
11
- import { brandLine, c, pad, sym, tildeify } from "../lib/format.js";
12
- import { getMcpLogPath } from "../lib/mcp-log.js";
13
- import { getProjectMemorySummary } from "../lib/project-memory.js";
14
- import { buildCliVersionCheck, buildSkillsVersionCheck, defaultSkillMarkerCandidates, fetchLatestRegistryVersion, } from "../lib/version-check.js";
15
- const require = createRequire(import.meta.url);
16
- const { version } = require("../../package.json");
4
+ import { getAuthToken, getUserInfo } from "../auth.js";
5
+ import { ENGINE_BIN_ENV, ENGINE_BINARY_ENV, findEngineBinary } from "../engine-install.js";
6
+ import { checkEngineHealth, getApiPort, getApiToken } from "../engine.js";
7
+ import { c, pad, sym, tildeify } from "../format.js";
8
+ import { getMcpLogPath } from "../mcp-log.js";
9
+ import { formatProjectPin, getProjectMemorySummary, } from "../../project-memory/project-memory.js";
10
+ import { buildCliVersionCheck, buildSkillsVersionCheck, defaultSkillMarkerCandidates, detectRecordedInstall, fetchLatestRegistryVersion, } from "../../installer/version-check.js";
11
+ import { TOOLKIT_VERSION as version } from "../version.js";
17
12
  const MIN_EXPECTED_MCP_TOOLS = 50;
18
13
  const REQUIRED_MCP_TOOLS = [
19
14
  "summer_get_project_context",
20
15
  "summer_generate_image",
21
16
  "summer_create_debug_report",
22
17
  ];
23
- const MAC_ENGINE_PATHS = [
24
- "/Applications/Summer.app/Contents/MacOS/Summer",
25
- `${process.env.HOME}/Applications/Summer.app/Contents/MacOS/Summer`,
26
- ];
27
- const WIN_ENGINE_PATHS = [
28
- `${process.env.LOCALAPPDATA}\\SummerEngine\\current\\Summer.exe`,
29
- `${process.env.LOCALAPPDATA}\\Programs\\Summer Engine\\Summer.exe`,
30
- `${process.env.PROGRAMFILES}\\Summer Engine\\Summer.exe`,
31
- ];
32
- export const doctorCommand = new Command("doctor")
33
- .description("Diagnose Node, login, engine, project memory, local API, and MCP registration")
34
- .option("--json", "Print diagnostics as JSON")
35
- .action(async (opts) => {
36
- if (!opts.json) {
37
- const { createRequire: req } = await import("node:module");
38
- const ver = req(import.meta.url)("../../package.json").version;
39
- console.log("");
40
- console.log(brandLine(ver));
41
- console.log("");
42
- }
43
- const result = await runDoctor({ json: Boolean(opts.json) });
44
- if (!result.ok) {
45
- process.exit(1);
46
- }
47
- });
48
18
  export async function runDoctor(options = {}) {
49
19
  const checks = [];
50
20
  checks.push(checkNodeVersion());
@@ -55,10 +25,9 @@ export async function runDoctor(options = {}) {
55
25
  message: `v${version}`,
56
26
  });
57
27
  checks.push(await checkCliVersionCurrent());
58
- checks.push(checkSkillsVersion());
28
+ checks.push(await checkSkillsVersion());
59
29
  checks.push(await checkLogin());
60
30
  checks.push(checkEngineInstall());
61
- checks.push(await checkGitForCheckpoints());
62
31
  checks.push(await checkLocalApi());
63
32
  checks.push(await checkProjectMemory());
64
33
  checks.push(await checkMcpBoot());
@@ -105,10 +74,17 @@ async function checkCliVersionCurrent() {
105
74
  details: result.details,
106
75
  };
107
76
  }
108
- function checkSkillsVersion() {
109
- const result = buildSkillsVersionCheck({
77
+ /** Stale skills are a warning, never a failure (TESTING.md §d: only failures
78
+ * exit 1). The recommended refresh follows how the agent's MCP entry was
79
+ * recorded by `summer setup`: a `--local-dev` link gets the local-dev form
80
+ * so the fix does not replace the checkout with the published package. */
81
+ async function checkSkillsVersion() {
82
+ const registry = await fetchLatestRegistryVersion();
83
+ const result = await buildSkillsVersionCheck({
110
84
  installedCliVersion: version,
111
85
  candidates: defaultSkillMarkerCandidates(),
86
+ recordedInstall: detectRecordedInstall,
87
+ ...(registry.ok ? { latestRegistryVersion: registry.version } : {}),
112
88
  });
113
89
  return {
114
90
  id: "skills-version-stale",
@@ -118,7 +94,7 @@ function checkSkillsVersion() {
118
94
  details: result.details,
119
95
  };
120
96
  }
121
- async function checkLogin() {
97
+ export async function checkLogin() {
122
98
  const token = await getAuthToken();
123
99
  const user = await getUserInfo();
124
100
  if (!token) {
@@ -126,7 +102,15 @@ async function checkLogin() {
126
102
  id: "login",
127
103
  label: "Login",
128
104
  status: "warning",
129
- message: "not signed in (run: summer login)",
105
+ message: "not signed in (run: summer login — only gateway features need it; engine tools work without)",
106
+ };
107
+ }
108
+ if (process.env.SUMMER_TOKEN?.trim()) {
109
+ return {
110
+ id: "login",
111
+ label: "Login",
112
+ status: "ok",
113
+ message: "token from SUMMER_TOKEN env",
130
114
  };
131
115
  }
132
116
  return {
@@ -136,7 +120,7 @@ async function checkLogin() {
136
120
  message: user ? user.email : "signed in",
137
121
  };
138
122
  }
139
- function checkEngineInstall() {
123
+ export function checkEngineInstall() {
140
124
  const binary = findEngineBinary();
141
125
  if (binary) {
142
126
  // Shorten /Applications/Summer.app/Contents/MacOS/Summer -> /Applications/Summer.app
@@ -153,24 +137,7 @@ function checkEngineInstall() {
153
137
  id: "engine-install",
154
138
  label: "Engine",
155
139
  status: "warning",
156
- message: "not installed (run: summer install)",
157
- };
158
- }
159
- async function checkGitForCheckpoints() {
160
- const available = await isGitAvailable();
161
- if (available) {
162
- return {
163
- id: "git",
164
- label: "Git (cloud checkpoints)",
165
- status: "ok",
166
- message: "git found on PATH",
167
- };
168
- }
169
- return {
170
- id: "git",
171
- label: "Git (cloud checkpoints)",
172
- status: "warning",
173
- message: "git not found; Summer Cloud sync needs git for pre-sync safety checkpoints",
140
+ message: `not installed (run: summer install, or set ${ENGINE_BIN_ENV} / ${ENGINE_BINARY_ENV} to an existing binary)`,
174
141
  };
175
142
  }
176
143
  async function checkLocalApi() {
@@ -237,15 +204,29 @@ async function checkProjectMemory() {
237
204
  id: "project-memory",
238
205
  label: "Project Memory",
239
206
  status: "ok",
240
- message: `${summary.files.length} files, ${summary.structured.fileCount} memory, ${summary.structured.lockedCount} locked`,
207
+ message: describeProjectMemory(summary),
241
208
  details: {
242
209
  projectPath: health.project_path,
243
210
  files: summary.files.length,
244
211
  memoryFiles: summary.structured.fileCount,
245
212
  locked: summary.structured.lockedCount,
213
+ pin: summary.pin,
214
+ ...(summary.pinError ? { pinError: summary.pinError } : {}),
246
215
  },
247
216
  };
248
217
  }
218
+ /** The one-line Project Memory verdict: Markdown counts plus the template pin
219
+ * (`.summer/project.json` is memory too — the first fact a fresh agent
220
+ * needs). Exported for tests. */
221
+ export function describeProjectMemory(summary) {
222
+ const pin = formatProjectPin(summary.pin);
223
+ const pinPart = summary.pinError
224
+ ? `pin unreadable (${summary.pinError})`
225
+ : pin
226
+ ? `pin ${pin}`
227
+ : "no pin";
228
+ return `${summary.files.length} files, ${summary.structured.fileCount} memory, ${summary.structured.lockedCount} locked, ${pinPart}`;
229
+ }
249
230
  async function checkMcpBoot() {
250
231
  const resolved = resolveCurrentMcpCommand();
251
232
  if (!resolved) {
@@ -429,7 +410,8 @@ function summarizeChecks(checks) {
429
410
  export function printDoctorResult(result) {
430
411
  console.log(c.bold("Doctor"));
431
412
  console.log("");
432
- const labelWidth = 14;
413
+ // Widest label + 2 so long labels ("CLI up to date") keep their gap.
414
+ const labelWidth = result.checks.reduce((w, check) => Math.max(w, check.label.length), 0) + 2;
433
415
  for (const check of result.checks) {
434
416
  const mark = check.status === "ok"
435
417
  ? sym.ok()
@@ -449,14 +431,6 @@ export function printDoctorResult(result) {
449
431
  console.log(c.green("Everything's wired up."));
450
432
  }
451
433
  }
452
- function findEngineBinary() {
453
- const paths = platform() === "darwin" ? MAC_ENGINE_PATHS : WIN_ENGINE_PATHS;
454
- for (const path of paths) {
455
- if (path && existsSync(path))
456
- return path;
457
- }
458
- return null;
459
- }
460
434
  function trimOutput(output) {
461
435
  return {
462
436
  stdout: output.stdout.trim().slice(0, 500),
@@ -0,0 +1,26 @@
1
+ /**
2
+ * engine-fallbacks — the `engine_lacks_op` fallback sentences, ONE copy for
3
+ * every face (src/mcp/tools/spatial-tools.ts, src/mcp/tools/perception-tools.ts,
4
+ * src/core/capabilities/tool-dispatch.ts). Each names what an agent should do
5
+ * on an engine build that lacks the op, whether the capability pre-flight
6
+ * refused before sending (missingEngineOpResult) or the engine answered
7
+ * "unknown op" (withOldEngineHint) — the sentence is identical either way.
8
+ *
9
+ * Rule (E2E 2026-09-03 F-16): a fallback names ONLY tools every shipped engine
10
+ * has — summer_get_scene_tree, summer_inspect_node, summer_inspect_resource,
11
+ * summer_set_prop, summer_screenshot, a RunVerification probe.
12
+ * summer_world_snapshot is itself engine_lacks_op on every shipped build, so a
13
+ * fallback that routes through it sends the agent from one dead end to the
14
+ * next. The scripting fallbacks live with their op builders in ./scene-script.ts.
15
+ */
16
+ export declare const WORLD_SNAPSHOT_FALLBACK = "read structure with summer_get_scene_tree (pass depth) and verify visually with summer_screenshot";
17
+ export declare const SNAPSHOT_DIFF_FALLBACK = "re-read with summer_get_scene_tree (pass depth) and summer_inspect_node and compare against your earlier read yourself";
18
+ export declare const RUNTIME_TREE_FALLBACK = "probe runtime state with a RunVerification probe (dump_tree/report \u2014 see the playbook's rawOpsViaBatch)";
19
+ export declare const RUNTIME_NODE_FALLBACK = "probe the node from a RunVerification probe (report(key, value) \u2014 see the playbook's rawOpsViaBatch)";
20
+ export declare const TEST_PLACEMENT_FALLBACK = "list the subject and its neighbours with summer_get_scene_tree, read their positions and mesh/shape sizes with summer_inspect_node (summer_inspect_resource for mesh/shape extents), judge clearance from those, then verify with summer_screenshot";
21
+ export declare const SNAP_TO_SURFACE_FALLBACK = "read the support's position and mesh/shape size with summer_inspect_node / summer_inspect_resource, set the subject's position with summer_set_prop so its bottom sits on the support's top, and verify with summer_screenshot";
22
+ export declare const ALIGN_DISTRIBUTE_FALLBACK = "compute the shared anchor or spacing from the subjects' positions and sizes (summer_inspect_node / summer_inspect_resource) and set each subject's position with summer_set_prop (or one summer_run_editor_script)";
23
+ export declare const NAVIGATION_PROBE_FALLBACK = "probe reachability from a RunVerification probe (NavigationServer3D.map_get_path \u2014 see the playbook's rawOpsViaBatch)";
24
+ export declare const STARCAST_FALLBACK = "read the subject and its neighbours with summer_get_scene_tree + summer_inspect_node and judge support, contact, and clearance from their positions and sizes, then verify with summer_screenshot";
25
+ /** Every fallback, for the parity test: none may mention summer_world_snapshot. */
26
+ export declare const ENGINE_OP_FALLBACKS: Readonly<Record<string, string>>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * engine-fallbacks — the `engine_lacks_op` fallback sentences, ONE copy for
3
+ * every face (src/mcp/tools/spatial-tools.ts, src/mcp/tools/perception-tools.ts,
4
+ * src/core/capabilities/tool-dispatch.ts). Each names what an agent should do
5
+ * on an engine build that lacks the op, whether the capability pre-flight
6
+ * refused before sending (missingEngineOpResult) or the engine answered
7
+ * "unknown op" (withOldEngineHint) — the sentence is identical either way.
8
+ *
9
+ * Rule (E2E 2026-09-03 F-16): a fallback names ONLY tools every shipped engine
10
+ * has — summer_get_scene_tree, summer_inspect_node, summer_inspect_resource,
11
+ * summer_set_prop, summer_screenshot, a RunVerification probe.
12
+ * summer_world_snapshot is itself engine_lacks_op on every shipped build, so a
13
+ * fallback that routes through it sends the agent from one dead end to the
14
+ * next. The scripting fallbacks live with their op builders in ./scene-script.ts.
15
+ */
16
+ export const WORLD_SNAPSHOT_FALLBACK = "read structure with summer_get_scene_tree (pass depth) and verify visually with summer_screenshot";
17
+ export const SNAPSHOT_DIFF_FALLBACK = "re-read with summer_get_scene_tree (pass depth) and summer_inspect_node and compare against your earlier read yourself";
18
+ export const RUNTIME_TREE_FALLBACK = "probe runtime state with a RunVerification probe (dump_tree/report — see the playbook's rawOpsViaBatch)";
19
+ export const RUNTIME_NODE_FALLBACK = "probe the node from a RunVerification probe (report(key, value) — see the playbook's rawOpsViaBatch)";
20
+ export const TEST_PLACEMENT_FALLBACK = "list the subject and its neighbours with summer_get_scene_tree, read their positions and mesh/shape sizes with summer_inspect_node (summer_inspect_resource for mesh/shape extents), judge clearance from those, then verify with summer_screenshot";
21
+ export const SNAP_TO_SURFACE_FALLBACK = "read the support's position and mesh/shape size with summer_inspect_node / summer_inspect_resource, set the subject's position with summer_set_prop so its bottom sits on the support's top, and verify with summer_screenshot";
22
+ export const ALIGN_DISTRIBUTE_FALLBACK = "compute the shared anchor or spacing from the subjects' positions and sizes (summer_inspect_node / summer_inspect_resource) and set each subject's position with summer_set_prop (or one summer_run_editor_script)";
23
+ export const NAVIGATION_PROBE_FALLBACK = "probe reachability from a RunVerification probe (NavigationServer3D.map_get_path — see the playbook's rawOpsViaBatch)";
24
+ export const STARCAST_FALLBACK = "read the subject and its neighbours with summer_get_scene_tree + summer_inspect_node and judge support, contact, and clearance from their positions and sizes, then verify with summer_screenshot";
25
+ /** Every fallback, for the parity test: none may mention summer_world_snapshot. */
26
+ export const ENGINE_OP_FALLBACKS = {
27
+ GetWorldSnapshot: WORLD_SNAPSHOT_FALLBACK,
28
+ DiffWorldSnapshot: SNAPSHOT_DIFF_FALLBACK,
29
+ GetRuntimeSceneTree: RUNTIME_TREE_FALLBACK,
30
+ GetRuntimeNode: RUNTIME_NODE_FALLBACK,
31
+ TestPlacement3D: TEST_PLACEMENT_FALLBACK,
32
+ SnapToSurface: SNAP_TO_SURFACE_FALLBACK,
33
+ AlignDistribute3D: ALIGN_DISTRIBUTE_FALLBACK,
34
+ NavigationProbe3D: NAVIGATION_PROBE_FALLBACK,
35
+ Starcast3D: STARCAST_FALLBACK,
36
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Engine op helpers shared by both faces — the MCP tools (src/mcp/tools/*) and
3
+ * the CLI dispatch table (src/core/capabilities/tool-dispatch.ts). ONE copy of
4
+ * the scene-mutation single-op contract and of the guarded-file safety checks.
5
+ */
6
+ import type { EngineApiClient } from "../api-client.js";
7
+ import { type JsonRecord } from "../util/json.js";
8
+ export declare function isSingleOnlyOp(kind: string, singleOnly: ReadonlySet<string>): boolean;
9
+ /** Append the transaction-boundary SaveScene (or validate the caller's). */
10
+ export declare function sceneMutationOps(ops: JsonRecord[]): JsonRecord[];
11
+ /** Split an op list into sequential engine requests: consecutive batchable ops
12
+ * stay grouped, each single-only op becomes its own request. Order preserved. */
13
+ export declare function chunkOpsForDispatch(ops: JsonRecord[], singleOnly: ReadonlySet<string>): JsonRecord[][];
14
+ /** Execute an op list as sequential engine requests honoring the single-op
15
+ * dispatch contract. Receipts from every request are preserved and merged, so
16
+ * an op that applied followed by one that failed is reported honestly instead
17
+ * of masked. */
18
+ export declare function executeOpsChunked(send: (chunk: JsonRecord[]) => Promise<unknown>, ops: JsonRecord[], singleOnly: ReadonlySet<string>): Promise<unknown>;
19
+ /** Scene mutation entry point: appends the transaction-boundary SaveScene, then
20
+ * dispatches with the single-op contract (mutations batch together, SaveScene
21
+ * and other single-only ops travel alone). */
22
+ export declare function executeSceneMutation(client: EngineApiClient, scenePath: string, ops: JsonRecord[], options?: JsonRecord): Promise<unknown>;
23
+ /** Normalize a project path; refuses anything that is not a traversal-free res:// path. */
24
+ export declare function safeProjectPath(path: string): string;
25
+ export declare function validSha256(value: unknown): value is string;
26
+ /** Validate a ReadFile receipt for a safe text mutation: text content, not
27
+ * truncated, with a full-file sha256 the follow-up WriteFile can guard on. */
28
+ export declare function readTextPayload(result: unknown): {
29
+ content: string;
30
+ sha256: string;
31
+ size?: number;
32
+ };
33
+ export declare function occurrenceCount(content: string, needle: string): number;
@@ -0,0 +1,145 @@
1
+ import { resolveSingleOnlyOps } from "../capability-skew.js";
2
+ import { ToolInputError } from "../tool-errors.js";
3
+ import { asRecord } from "../util/json.js";
4
+ import { extractOpError } from "./engine-receipt.js";
5
+ // ---------------------------------------------------------------------------
6
+ // Scene-mutation dispatch. The engine rejects multi-op batches containing
7
+ // single-only ops wholesale, and every scene mutation batch ends in exactly one
8
+ // SaveScene. Single-only classification comes from the engine's /api/health
9
+ // advert when present, else core/capability-skew FALLBACK_SINGLE_ONLY_OPS.
10
+ // ---------------------------------------------------------------------------
11
+ export function isSingleOnlyOp(kind, singleOnly) {
12
+ return singleOnly.has(kind) || kind.startsWith("Git");
13
+ }
14
+ /** Append the transaction-boundary SaveScene (or validate the caller's). */
15
+ export function sceneMutationOps(ops) {
16
+ const saveIndexes = ops
17
+ .map((op, index) => (op.op === "SaveScene" ? index : -1))
18
+ .filter((index) => index >= 0);
19
+ if (saveIndexes.length > 1) {
20
+ throw new ToolInputError("A scene mutation batch may contain only one SaveScene");
21
+ }
22
+ if (saveIndexes.length === 1) {
23
+ if (saveIndexes[0] !== ops.length - 1) {
24
+ throw new ToolInputError("SaveScene must be the final operation in a scene mutation batch");
25
+ }
26
+ return ops;
27
+ }
28
+ return [...ops, { op: "SaveScene" }];
29
+ }
30
+ /** Split an op list into sequential engine requests: consecutive batchable ops
31
+ * stay grouped, each single-only op becomes its own request. Order preserved. */
32
+ export function chunkOpsForDispatch(ops, singleOnly) {
33
+ const chunks = [];
34
+ let current = [];
35
+ for (const op of ops) {
36
+ if (isSingleOnlyOp(String(op.op ?? ""), singleOnly)) {
37
+ if (current.length > 0) {
38
+ chunks.push(current);
39
+ current = [];
40
+ }
41
+ chunks.push([op]);
42
+ }
43
+ else {
44
+ current.push(op);
45
+ }
46
+ }
47
+ if (current.length > 0)
48
+ chunks.push(current);
49
+ return chunks;
50
+ }
51
+ /** Execute an op list as sequential engine requests honoring the single-op
52
+ * dispatch contract. Receipts from every request are preserved and merged, so
53
+ * an op that applied followed by one that failed is reported honestly instead
54
+ * of masked. */
55
+ export async function executeOpsChunked(send, ops, singleOnly) {
56
+ const chunks = chunkOpsForDispatch(ops, singleOnly);
57
+ if (chunks.length === 1)
58
+ return send(chunks[0]);
59
+ const receipts = [];
60
+ const combinedResults = [];
61
+ for (let i = 0; i < chunks.length; i++) {
62
+ const receipt = await send(chunks[i]);
63
+ receipts.push(receipt);
64
+ const envelope = (receipt ?? {});
65
+ if (Array.isArray(envelope.results)) {
66
+ combinedResults.push(...envelope.results);
67
+ }
68
+ if (extractOpError(receipt)) {
69
+ const failedKind = String(chunks[i][0]?.op ?? "batch");
70
+ const appliedOps = chunks.slice(0, i).flat().map((op) => String(op.op ?? ""));
71
+ const notSent = chunks.slice(i + 1).flat().map((op) => String(op.op ?? ""));
72
+ const baseError = (typeof envelope.error === "string" && envelope.error) || `Engine request failed (${failedKind}).`;
73
+ const honestError = appliedOps.length > 0
74
+ ? `${baseError} NOTE: ${appliedOps.length} earlier op(s) already applied (${appliedOps.join(", ")})` +
75
+ (failedKind === "SaveScene"
76
+ ? " — the scene is modified in the editor but NOT saved to disk. Fix the problem, then call summer_save_scene."
77
+ : ".") +
78
+ (notSent.length > 0 ? ` Not sent: ${notSent.join(", ")}.` : "")
79
+ : baseError;
80
+ return {
81
+ ...envelope,
82
+ error: honestError,
83
+ results: combinedResults,
84
+ receipts,
85
+ };
86
+ }
87
+ }
88
+ const last = (receipts[receipts.length - 1] ?? {});
89
+ return { ...last, results: combinedResults, requests: chunks.length, receipts };
90
+ }
91
+ /** Scene mutation entry point: appends the transaction-boundary SaveScene, then
92
+ * dispatches with the single-op contract (mutations batch together, SaveScene
93
+ * and other single-only ops travel alone). */
94
+ export function executeSceneMutation(client, scenePath, ops, options) {
95
+ return executeOpsChunked((chunk) => client.executeIdentityBoundOps(chunk, { ...(options ?? {}), scenePath }), sceneMutationOps(ops), resolveSingleOnlyOps(client));
96
+ }
97
+ // ---------------------------------------------------------------------------
98
+ // Guarded file helpers: fail-closed writes, sha256 receipts.
99
+ // ---------------------------------------------------------------------------
100
+ /** Normalize a project path; refuses anything that is not a traversal-free res:// path. */
101
+ export function safeProjectPath(path) {
102
+ const normalized = path.trim().replace(/\\/g, "/");
103
+ if (!normalized.startsWith("res://") || normalized.includes("..")) {
104
+ throw new ToolInputError("File path must be a traversal-free res:// project path.");
105
+ }
106
+ return normalized;
107
+ }
108
+ export function validSha256(value) {
109
+ return typeof value === "string" && /^[0-9a-f]{64}$/i.test(value);
110
+ }
111
+ /** Validate a ReadFile receipt for a safe text mutation: text content, not
112
+ * truncated, with a full-file sha256 the follow-up WriteFile can guard on. */
113
+ export function readTextPayload(result) {
114
+ const root = asRecord(result);
115
+ const data = asRecord(root?.data);
116
+ if (root?.ok === false) {
117
+ throw new Error(String(root.error ?? "Engine could not read the file."));
118
+ }
119
+ if (data?.encoding === "binary" || typeof data?.content !== "string") {
120
+ throw new Error("Safe text mutation refused: the engine did not return text content.");
121
+ }
122
+ if (data.truncated === true) {
123
+ throw new Error("Safe text mutation refused: the file exceeds the 1 MB read limit.");
124
+ }
125
+ const sha256 = typeof data.sha256 === "string" ? data.sha256 : undefined;
126
+ if (!validSha256(sha256)) {
127
+ throw new Error("Safe text mutation refused: the engine did not return a full-file sha256 receipt.");
128
+ }
129
+ return {
130
+ content: data.content,
131
+ sha256,
132
+ size: typeof data.size === "number" ? data.size : undefined,
133
+ };
134
+ }
135
+ export function occurrenceCount(content, needle) {
136
+ let count = 0;
137
+ let offset = 0;
138
+ while (true) {
139
+ const index = content.indexOf(needle, offset);
140
+ if (index < 0)
141
+ return count;
142
+ count++;
143
+ offset = index + needle.length;
144
+ }
145
+ }