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
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Library-feedback client (CONTRACT.md §10, v1 = mailbox).
3
+ *
4
+ * Fire-and-forget POST of batched library-entry outcome reports to the
5
+ * Summer gateway. Structurally leak-proof by schema (enums + hard caps —
6
+ * no field can carry project files, chat content, or code), 1s timeout,
7
+ * silent failure, never throws, never retries, never blocks the agent
8
+ * for more than the timeout.
9
+ *
10
+ * Consent (SELF_IMPROVING_LIBRARY.md §3.4):
11
+ * - SUMMER_NO_TELEMETRY=1 or DO_NOT_TRACK=1 → nothing is ever sent.
12
+ * - First-run notice BEFORE the first event (CONTRACT §10): the first call
13
+ * ever made on a machine sends NOTHING and returns a one-paragraph notice
14
+ * of what a report contains + the opt-out env vars; sending starts on the
15
+ * next call.
16
+ * - Authenticated installs attribute via the auth bearer; anonymous
17
+ * installs use a random persisted install id (a uuid — no hardware,
18
+ * user, or project identity).
19
+ *
20
+ * No stdout writes anywhere in this module (stdio MCP protocol);
21
+ * nothing is logged on failure — silence is the contract.
22
+ */
23
+ import { randomUUID } from "node:crypto";
24
+ import { getAuthToken } from "../auth.js";
25
+ import { resolveGatewayUrl } from "../config.js";
26
+ import { readStoreText, writeStoreText } from "../store.js";
27
+ import { TOOLKIT_VERSION } from "../version.js";
28
+ const FEEDBACK_PATH = "/api/mcp/library-feedback";
29
+ const TIMEOUT_MS = 1000;
30
+ const INSTALL_ID_FILE = "feedback-install-id";
31
+ const FIRST_RUN_MARKER_FILE = "feedback-first-run";
32
+ /** Random per-MCP-server-process session id. Never persisted. */
33
+ let sessionId = null;
34
+ export function getFeedbackSessionId() {
35
+ if (!sessionId)
36
+ sessionId = randomUUID();
37
+ return sessionId;
38
+ }
39
+ /** Test-only seam. */
40
+ export function _resetFeedbackSessionForTests() {
41
+ sessionId = null;
42
+ }
43
+ async function feedbackUrl() {
44
+ return `${await resolveGatewayUrl()}${FEEDBACK_PATH}`;
45
+ }
46
+ /** Kill switches: send NOTHING when either is set to "1". */
47
+ export function isFeedbackDisabled() {
48
+ return (process.env.SUMMER_NO_TELEMETRY === "1" || process.env.DO_NOT_TRACK === "1");
49
+ }
50
+ /**
51
+ * Anonymous install id: a random uuid persisted once in ~/.summer/.
52
+ * Falls back to an ephemeral uuid if the store is unreadable/unwritable —
53
+ * feedback must never fail because the store does.
54
+ */
55
+ export async function getInstallId() {
56
+ try {
57
+ const existing = await readStoreText(INSTALL_ID_FILE);
58
+ if (existing?.trim())
59
+ return existing.trim();
60
+ const created = randomUUID();
61
+ await writeStoreText(INSTALL_ID_FILE, created);
62
+ return created;
63
+ }
64
+ catch {
65
+ return randomUUID();
66
+ }
67
+ }
68
+ /**
69
+ * First-run notice gate: returns true exactly once per machine — the first
70
+ * time the feedback tool is ever called — and writes the marker so every
71
+ * later call returns false. That first call sends nothing (the notice must
72
+ * precede the first event). Errors → false (no notice beats a crash, and
73
+ * the disclosure also lives in the tool description).
74
+ */
75
+ export async function consumeFirstRunNotice() {
76
+ try {
77
+ const marker = await readStoreText(FIRST_RUN_MARKER_FILE);
78
+ if (marker !== null)
79
+ return false;
80
+ await writeStoreText(FIRST_RUN_MARKER_FILE, new Date().toISOString());
81
+ return true;
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ /** Every field a report POST carries, in one place so the tool description,
88
+ * the first-run notice and the tests cannot disagree about what is sent. */
89
+ export const FEEDBACK_FIELDS_SENT = "the library entry ids you used (entry_id), one outcome word per entry, your optional note and deviation " +
90
+ "(280 characters max each, about the entry itself), engine_version, agent_model (your self-reported model id), " +
91
+ "toolkit_version (this CLI's version), client (the host app name/version from the MCP handshake), " +
92
+ "session_id (a random id per MCP server process, never persisted), and — only when not logged in — " +
93
+ "install_id (a random uuid stored in ~/.summer/; no hardware, user, or project identity). When logged in, " +
94
+ "the Summer account bearer token is sent instead of install_id.";
95
+ export const FIRST_RUN_NOTICE = "First use of summer_library_feedback on this machine — NOTHING has been sent yet, including this batch. " +
96
+ "Call the tool again with the same reports to send them; this notice appears only once. " +
97
+ `What every report sends to Summer (POST ${FEEDBACK_PATH}): ${FEEDBACK_FIELDS_SENT} ` +
98
+ "The report schema has no field for project files, chat content, or code. Reports are used to fix and " +
99
+ "re-rank library entries, so this user's own future sessions load better ones. Opt out any time by setting " +
100
+ "SUMMER_NO_TELEMETRY=1 or DO_NOT_TRACK=1 — then nothing is ever sent.";
101
+ /** Classify a non-2xx response. Exported for tests. */
102
+ export function dropReasonForStatus(status) {
103
+ if (status === 404)
104
+ return "endpoint_missing";
105
+ if (status >= 500)
106
+ return "server_error";
107
+ return "rejected";
108
+ }
109
+ /**
110
+ * Send one batched feedback report. Never throws. Blocks at most TIMEOUT_MS.
111
+ *
112
+ * Result matrix:
113
+ * - env kill switch → { recorded: false, disabled: true } (nothing sent)
114
+ * - first call on machine → { recorded: false, first_run: true, notice } (nothing sent)
115
+ * - gateway accepted (2xx) → { recorded: true }
116
+ * - non-2xx → { recorded: false, dropped: true, status, reason } (no retry exists)
117
+ * - fetch threw / timed out → { recorded: false, dropped: true, reason: "network" }
118
+ */
119
+ export async function sendLibraryFeedback(input) {
120
+ if (isFeedbackDisabled()) {
121
+ return { recorded: false, disabled: true };
122
+ }
123
+ // The notice must precede the first event: the first call on a machine
124
+ // returns the disclosure and sends nothing at all.
125
+ if (await consumeFirstRunNotice()) {
126
+ return { recorded: false, first_run: true, notice: FIRST_RUN_NOTICE };
127
+ }
128
+ try {
129
+ let token = null;
130
+ try {
131
+ token = await getAuthToken();
132
+ }
133
+ catch {
134
+ token = null;
135
+ }
136
+ const body = {
137
+ reports: input.reports,
138
+ engine_version: input.engine_version,
139
+ agent_model: input.agent_model,
140
+ session_id: getFeedbackSessionId(),
141
+ toolkit_version: TOOLKIT_VERSION,
142
+ };
143
+ if (input.client)
144
+ body.client = input.client;
145
+ const headers = {
146
+ "Content-Type": "application/json",
147
+ };
148
+ if (token) {
149
+ headers.Authorization = `Bearer ${token}`;
150
+ }
151
+ else {
152
+ body.install_id = await getInstallId();
153
+ }
154
+ const ctrl = new AbortController();
155
+ const timer = setTimeout(() => ctrl.abort(), TIMEOUT_MS);
156
+ try {
157
+ const res = await fetch(await feedbackUrl(), {
158
+ method: "POST",
159
+ signal: ctrl.signal,
160
+ headers,
161
+ body: JSON.stringify(body),
162
+ });
163
+ if (!res.ok) {
164
+ return {
165
+ recorded: false,
166
+ dropped: true,
167
+ status: res.status,
168
+ reason: dropReasonForStatus(res.status),
169
+ };
170
+ }
171
+ }
172
+ finally {
173
+ clearTimeout(timer);
174
+ }
175
+ }
176
+ catch {
177
+ // Silent failure is the contract: no retry, no log, no throw. The reason
178
+ // is for the caller's result only — nothing is sent about it.
179
+ return { recorded: false, dropped: true, reason: "network" };
180
+ }
181
+ return { recorded: true };
182
+ }
@@ -1,4 +1,3 @@
1
- export declare function useColor(): boolean;
2
1
  export declare const c: {
3
2
  bold: (s: string) => string;
4
3
  dim: (s: string) => string;
@@ -10,7 +10,7 @@ const ANSI = {
10
10
  // Summer brand orange (matches banner.ts mid gradient)
11
11
  brand: "\x1b[38;2;255;143;23m",
12
12
  };
13
- export function useColor() {
13
+ function useColor() {
14
14
  if (process.env.NO_COLOR)
15
15
  return false;
16
16
  if (process.env.FORCE_COLOR)
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Per-project routing layer — shared contract types.
3
+ *
4
+ * A ProjectConnection is a uniform handle to "whatever process currently
5
+ * serves this project": either the live editor (today's HTTP transport,
6
+ * unchanged) or a headless worker (TCP newline-delimited JSON).
7
+ *
8
+ * This module is deliberately self-contained: nothing under src/core/headless/ is
9
+ * imported by the existing MCP/CLI code paths except behind the opt-in env
10
+ * flag SUMMER_HEADLESS_ROUTING=1 (see src/mcp/server.ts getClient and
11
+ * ./mcp-routing.ts). See docs/HEADLESS_ROUTING.md for the full
12
+ * contract this implements.
13
+ */
14
+ export type ProjectConnectionKind = "editor" | "worker";
15
+ /** Stage that failed, for structured timeout/transport errors. */
16
+ export type HeadlessStage = "connect" | "auth" | "op" | "spawn";
17
+ /**
18
+ * Timeout (and stage-tagged failure) error for the headless layer. `stage`
19
+ * names exactly which step gave up, so callers and logs can distinguish
20
+ * "could not reach the worker" from "the worker went quiet mid-import".
21
+ * NEVER put tokens in these messages — they surface verbatim in tool results.
22
+ */
23
+ export declare class HeadlessTimeoutError extends Error {
24
+ readonly stage: HeadlessStage;
25
+ constructor(stage: HeadlessStage, message: string);
26
+ }
27
+ /** Read a positive-integer env override with a sane default. */
28
+ export declare function envMs(name: string, fallback: number, env?: NodeJS.ProcessEnv): number;
29
+ /** Ops that may legitimately run for minutes (first import, game boot). */
30
+ export declare const LONG_RUNNING_OPS: ReadonlySet<string>;
31
+ /** Ops that MUTATE project or process state. When one of these times out the
32
+ * connection is QUARANTINED (destroyed + evicted via credentialsChanged)
33
+ * because the mutation's outcome is UNKNOWN and a blind retry could
34
+ * double-apply. Read-only ops that time out leave the connection usable. */
35
+ export declare const MUTATING_OPS: ReadonlySet<string>;
36
+ /**
37
+ * Remove secret material from any string that can reach an error message or
38
+ * log line. Applied to worker-supplied error text and spawn stderr tails —
39
+ * defense in depth on top of "the raw token never crosses the wire" (v1.1
40
+ * mutual auth) and "this module never interpolates tokens itself".
41
+ */
42
+ export declare function scrubSecrets(text: string, secrets: ReadonlyArray<string | undefined>): string;
43
+ /**
44
+ * Error for an op the WORKER answered with ok:false. `code` is the leading
45
+ * snake_case classifier when the worker sent a structured error (e.g.
46
+ * "sha256_mismatch: content changed since read", "already_exists",
47
+ * "needs_display"), so guard failures are distinguishable from generic
48
+ * transport throws.
49
+ */
50
+ export declare class WorkerOpError extends Error {
51
+ readonly code?: string;
52
+ constructor(message: string);
53
+ }
54
+ export interface CallOptions {
55
+ /** Client-side INACTIVITY budget for this op: the timer restarts on every
56
+ * progress line, so a chatty long import stays alive while a silent hang
57
+ * still fails. Defaults: SUMMER_WORKER_OP_TIMEOUT_MS (30s) for normal ops,
58
+ * SUMMER_WORKER_LONG_OP_TIMEOUT_MS (300s) for LONG_RUNNING_OPS. */
59
+ timeoutMs?: number;
60
+ /** Interim progress lines ({"id","event":"progress","progress"}) for this
61
+ * request are surfaced here. Editor connections never emit progress. */
62
+ onProgress?: (progress: unknown) => void;
63
+ }
64
+ /**
65
+ * Uniform per-project backend handle.
66
+ *
67
+ * `call(op, params)` uses the WORKER op vocabulary as the canonical surface:
68
+ * ping, status, import, fs.list, fs.read, fs.write, uid.resolve,
69
+ * scene.read, game.run, game.stop, game.logs, game.screenshot
70
+ * EditorConnection adapts that vocabulary onto the existing EngineApiClient;
71
+ * WorkerConnection speaks it natively over TCP.
72
+ */
73
+ export interface ProjectConnection {
74
+ readonly kind: ProjectConnectionKind;
75
+ /** Canonical absolute project path this connection serves. */
76
+ readonly projectPath: string;
77
+ call(op: string, params?: Record<string, unknown>, options?: CallOptions): Promise<unknown>;
78
+ /** True while the underlying transport is usable. A dropped worker socket
79
+ * flips this to false permanently — reconnect-on-drop is NOT attempted;
80
+ * callers re-resolve via resolveProjectConnection instead. */
81
+ isAlive(): boolean;
82
+ close(): void;
83
+ }
84
+ /** Ops the headless worker implements (mirror of the worker agent's brief). */
85
+ export declare const WORKER_OPS: readonly ["ping", "status", "import", "fs.list", "fs.read", "fs.write", "uid.resolve", "scene.read", "game.run", "game.stop", "game.logs", "game.screenshot"];
86
+ export type WorkerOp = (typeof WORKER_OPS)[number];
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Per-project routing layer — shared contract types.
3
+ *
4
+ * A ProjectConnection is a uniform handle to "whatever process currently
5
+ * serves this project": either the live editor (today's HTTP transport,
6
+ * unchanged) or a headless worker (TCP newline-delimited JSON).
7
+ *
8
+ * This module is deliberately self-contained: nothing under src/core/headless/ is
9
+ * imported by the existing MCP/CLI code paths except behind the opt-in env
10
+ * flag SUMMER_HEADLESS_ROUTING=1 (see src/mcp/server.ts getClient and
11
+ * ./mcp-routing.ts). See docs/HEADLESS_ROUTING.md for the full
12
+ * contract this implements.
13
+ */
14
+ /**
15
+ * Timeout (and stage-tagged failure) error for the headless layer. `stage`
16
+ * names exactly which step gave up, so callers and logs can distinguish
17
+ * "could not reach the worker" from "the worker went quiet mid-import".
18
+ * NEVER put tokens in these messages — they surface verbatim in tool results.
19
+ */
20
+ export class HeadlessTimeoutError extends Error {
21
+ stage;
22
+ constructor(stage, message) {
23
+ super(`[headless:${stage}] ${message}`);
24
+ this.name = "HeadlessTimeoutError";
25
+ this.stage = stage;
26
+ }
27
+ }
28
+ /** Read a positive-integer env override with a sane default. */
29
+ export function envMs(name, fallback, env = process.env) {
30
+ const raw = env[name]?.trim();
31
+ if (!raw)
32
+ return fallback;
33
+ const value = Number(raw);
34
+ return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
35
+ }
36
+ /** Ops that may legitimately run for minutes (first import, game boot). */
37
+ export const LONG_RUNNING_OPS = new Set([
38
+ "import",
39
+ "game.run",
40
+ ]);
41
+ /** Ops that MUTATE project or process state. When one of these times out the
42
+ * connection is QUARANTINED (destroyed + evicted via credentialsChanged)
43
+ * because the mutation's outcome is UNKNOWN and a blind retry could
44
+ * double-apply. Read-only ops that time out leave the connection usable. */
45
+ export const MUTATING_OPS = new Set([
46
+ "import",
47
+ "fs.write",
48
+ "game.run",
49
+ "game.stop",
50
+ ]);
51
+ /**
52
+ * Remove secret material from any string that can reach an error message or
53
+ * log line. Applied to worker-supplied error text and spawn stderr tails —
54
+ * defense in depth on top of "the raw token never crosses the wire" (v1.1
55
+ * mutual auth) and "this module never interpolates tokens itself".
56
+ */
57
+ export function scrubSecrets(text, secrets) {
58
+ let scrubbed = text;
59
+ for (const secret of secrets) {
60
+ if (secret && secret.length > 0) {
61
+ scrubbed = scrubbed.split(secret).join("[redacted]");
62
+ }
63
+ }
64
+ return scrubbed;
65
+ }
66
+ /**
67
+ * Error for an op the WORKER answered with ok:false. `code` is the leading
68
+ * snake_case classifier when the worker sent a structured error (e.g.
69
+ * "sha256_mismatch: content changed since read", "already_exists",
70
+ * "needs_display"), so guard failures are distinguishable from generic
71
+ * transport throws.
72
+ */
73
+ export class WorkerOpError extends Error {
74
+ code;
75
+ constructor(message) {
76
+ super(message);
77
+ this.name = "WorkerOpError";
78
+ const match = /^([a-z][a-z0-9_]*)(?::|$)/.exec(message);
79
+ if (match)
80
+ this.code = match[1];
81
+ }
82
+ }
83
+ /** Ops the headless worker implements (mirror of the worker agent's brief). */
84
+ export const WORKER_OPS = [
85
+ "ping",
86
+ "status",
87
+ "import",
88
+ "fs.list",
89
+ "fs.read",
90
+ "fs.write",
91
+ "uid.resolve",
92
+ "scene.read",
93
+ "game.run",
94
+ "game.stop",
95
+ "game.logs",
96
+ "game.screenshot",
97
+ ];
@@ -0,0 +1,26 @@
1
+ import type { EngineApiClient } from "../api-client.js";
2
+ import type { CallOptions, ProjectConnection } from "./connection.js";
3
+ /**
4
+ * Adapter that presents the EXISTING editor transport (EngineApiClient over
5
+ * local HTTP — untouched) through the uniform ProjectConnection surface.
6
+ *
7
+ * The canonical `call()` vocabulary is the WORKER op set; this adapter maps
8
+ * each worker op onto the editor method that answers the same question. Ops
9
+ * with no editor equivalent throw a clean, actionable error — they are never
10
+ * silently faked.
11
+ *
12
+ * The raw client stays reachable via `client` so callers that need the full
13
+ * editor surface (all ~22 EngineApiClient methods, identity binding, the
14
+ * async op lifecycle) can keep using it directly. The MCP flag-wiring does
15
+ * exactly that: when resolution picks the editor, the existing code path is
16
+ * used unchanged and this adapter is not even in the loop.
17
+ */
18
+ export declare class EditorConnection implements ProjectConnection {
19
+ readonly kind: "editor";
20
+ readonly projectPath: string;
21
+ readonly client: EngineApiClient;
22
+ constructor(client: EngineApiClient, projectPath: string);
23
+ isAlive(): boolean;
24
+ close(): void;
25
+ call(op: string, params?: Record<string, unknown>, _options?: CallOptions): Promise<unknown>;
26
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Adapter that presents the EXISTING editor transport (EngineApiClient over
3
+ * local HTTP — untouched) through the uniform ProjectConnection surface.
4
+ *
5
+ * The canonical `call()` vocabulary is the WORKER op set; this adapter maps
6
+ * each worker op onto the editor method that answers the same question. Ops
7
+ * with no editor equivalent throw a clean, actionable error — they are never
8
+ * silently faked.
9
+ *
10
+ * The raw client stays reachable via `client` so callers that need the full
11
+ * editor surface (all ~22 EngineApiClient methods, identity binding, the
12
+ * async op lifecycle) can keep using it directly. The MCP flag-wiring does
13
+ * exactly that: when resolution picks the editor, the existing code path is
14
+ * used unchanged and this adapter is not even in the loop.
15
+ */
16
+ export class EditorConnection {
17
+ kind = "editor";
18
+ projectPath;
19
+ client;
20
+ constructor(client, projectPath) {
21
+ this.client = client;
22
+ this.projectPath = projectPath;
23
+ }
24
+ isAlive() {
25
+ // The HTTP transport is connectionless; liveness is checked per-request
26
+ // by the existing credential-drift logic in the client/getClient layer.
27
+ return true;
28
+ }
29
+ close() {
30
+ // Nothing to tear down — the HTTP client holds no socket.
31
+ }
32
+ async call(op, params = {}, _options = {}) {
33
+ switch (op) {
34
+ case "ping":
35
+ case "status":
36
+ return this.client.health();
37
+ case "import":
38
+ // The editor imports continuously via its filesystem scanner; there is
39
+ // nothing to trigger. Honest no-op with provenance.
40
+ return { ok: true, mode: "editor", note: "The editor imports assets continuously; no explicit import step exists on this transport." };
41
+ case "fs.list":
42
+ return this.client.getFsTree(typeof params.root === "string" ? params.root : undefined, typeof params.limit === "number" ? params.limit : undefined);
43
+ case "fs.read":
44
+ return this.client.readFile(String(params.path ?? ""), typeof params.maxBytes === "number" ? params.maxBytes : undefined);
45
+ case "fs.write":
46
+ return this.client.executeIdentityBoundOps([
47
+ {
48
+ op: "WriteFile",
49
+ path: String(params.path ?? ""),
50
+ content: String(params.content ?? ""),
51
+ ...(typeof params.expectedSha256 === "string"
52
+ ? { expectedSha256: params.expectedSha256 }
53
+ : {}),
54
+ ...(params.mustNotExist === true ? { mustNotExist: true } : {}),
55
+ },
56
+ ]);
57
+ case "scene.read":
58
+ return this.client.getSceneState(typeof params.scenePath === "string" ? params.scenePath : undefined, {
59
+ depth: typeof params.depth === "number" ? params.depth : undefined,
60
+ limit: typeof params.limit === "number" ? params.limit : undefined,
61
+ });
62
+ case "game.run":
63
+ return this.client.play(typeof params.scene === "string" ? params.scene : undefined);
64
+ case "game.stop":
65
+ return this.client.stop();
66
+ case "game.logs": {
67
+ const opInput = { op: "GetConsoleOutput" };
68
+ if (typeof params.maxLines === "number")
69
+ opInput.max_lines = params.maxLines;
70
+ if (typeof params.filter === "string")
71
+ opInput.filter = params.filter;
72
+ return this.client.executeOps([opInput]);
73
+ }
74
+ case "game.screenshot":
75
+ return this.client.gameSnapshot();
76
+ case "uid.resolve":
77
+ default:
78
+ throw new Error(`Op "${op}" has no editor-transport mapping. Use the EngineApiClient directly (EditorConnection.client) or route to a headless worker.`);
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,38 @@
1
+ import { EngineApiClient } from "../api-client.js";
2
+ import { type EngineSelection } from "../engine.js";
3
+ import { resolveProjectConnection } from "./resolve.js";
4
+ /**
5
+ * The ONLY hook the existing MCP server calls into this module — and only
6
+ * when SUMMER_HEADLESS_ROUTING=1 (see src/mcp/server.ts getClient, which
7
+ * dynamic-imports this file so the flag-off path never even loads it).
8
+ *
9
+ * Behavior contract:
10
+ * - returns null whenever the existing code path should handle the call:
11
+ * * no project context on the session (no projectPath, cwd not inside
12
+ * a project) — legacy single-editor discovery stays in charge
13
+ * * a live EDITOR has the project open — the existing EngineApiClient
14
+ * path (caching, credential-drift, identity binding) serves it
15
+ * EXACTLY as with the flag off
16
+ * - returns a WorkerEngineClient (cast to EngineApiClient — it implements
17
+ * the full public method surface) only when no editor has the project,
18
+ * connecting to a live registered worker or spawning one on demand.
19
+ * - editor-resolution errors that do NOT positively mean "no editor has
20
+ * this project" (ambiguity, identity change, unresponsive editor) are
21
+ * RETHROWN — a worker must never write while an editor's presence is
22
+ * uncertain.
23
+ * - SINGLE-FLIGHT per project: concurrent tool calls share one in-flight
24
+ * resolution, so a burst of first calls can never spawn more than one
25
+ * worker or open more than one connection. A superseded cached
26
+ * connection is always closed, never orphaned.
27
+ */
28
+ interface RoutingDeps {
29
+ /** Full resolution (editor -> worker -> spawn). Test seam. */
30
+ resolve: typeof resolveProjectConnection;
31
+ /** Cheap "does a live editor have this project?" probe used to hand a
32
+ * cached worker back to the editor path. Test seam. */
33
+ editorProbe: (projectPath: string) => Promise<boolean>;
34
+ }
35
+ export declare function getHeadlessRoutedClient(selection?: EngineSelection, deps?: Partial<RoutingDeps>): Promise<EngineApiClient | null>;
36
+ /** Test-only: drop the cached worker client and any in-flight routes. */
37
+ export declare function resetHeadlessRouting(): void;
38
+ export {};
@@ -0,0 +1,83 @@
1
+ import { EngineApiClient } from "../api-client.js";
2
+ import { findProjectRoot } from "../engine.js";
3
+ import { isNoEditorForProjectError, resolveProjectConnection } from "./resolve.js";
4
+ import { normalizeProjectPath } from "./registry.js";
5
+ import { WorkerEngineClient } from "./worker-engine-client.js";
6
+ async function defaultEditorProbe(projectPath) {
7
+ try {
8
+ await EngineApiClient.connect({ projectPath });
9
+ return true;
10
+ }
11
+ catch (error) {
12
+ if (isNoEditorForProjectError(error))
13
+ return false;
14
+ // Ambiguity / identity / unresponsive-editor: presence uncertain — the
15
+ // caller must NOT keep serving from a worker. Propagate.
16
+ throw error;
17
+ }
18
+ }
19
+ const defaultDeps = {
20
+ resolve: resolveProjectConnection,
21
+ editorProbe: defaultEditorProbe,
22
+ };
23
+ let cachedWorker = null;
24
+ // Single-flight: normalized project path -> in-flight routing decision.
25
+ const inFlightRoutes = new Map();
26
+ async function projectPathFromSelection(selection) {
27
+ if (selection?.projectPath) {
28
+ return (await findProjectRoot(selection.projectPath)) ?? null;
29
+ }
30
+ if (selection?.cwd) {
31
+ return findProjectRoot(selection.cwd);
32
+ }
33
+ return null;
34
+ }
35
+ function dropCachedWorker() {
36
+ cachedWorker?.client.close();
37
+ cachedWorker = null;
38
+ }
39
+ export async function getHeadlessRoutedClient(selection, deps = {}) {
40
+ const { resolve, editorProbe } = { ...defaultDeps, ...deps };
41
+ const projectPath = await projectPathFromSelection(selection);
42
+ if (!projectPath)
43
+ return null;
44
+ const key = normalizeProjectPath(projectPath);
45
+ const inFlight = inFlightRoutes.get(key);
46
+ if (inFlight)
47
+ return inFlight;
48
+ const route = (async () => {
49
+ // Editor beats worker on EVERY call, not just at first resolution: if an
50
+ // editor opened the project after a worker started serving it, hand the
51
+ // session back to the untouched editor path (and close the worker
52
+ // client — never orphan it). The probe is cheap (instance registry read
53
+ // + one short-timeout health GET).
54
+ if (cachedWorker && cachedWorker.key === key && cachedWorker.client.isAlive()) {
55
+ if (await editorProbe(projectPath)) {
56
+ dropCachedWorker();
57
+ return null;
58
+ }
59
+ return cachedWorker.client;
60
+ }
61
+ // Cached client is for another project or dead — close before replacing.
62
+ dropCachedWorker();
63
+ const connection = await resolve(projectPath);
64
+ if (connection.kind === "editor") {
65
+ // Discard the probe connection (HTTP, nothing to tear down) and let
66
+ // the untouched existing path do what it does today.
67
+ connection.close();
68
+ return null;
69
+ }
70
+ const client = new WorkerEngineClient(connection);
71
+ cachedWorker = { key, client };
72
+ return client;
73
+ })().finally(() => {
74
+ inFlightRoutes.delete(key);
75
+ });
76
+ inFlightRoutes.set(key, route);
77
+ return route;
78
+ }
79
+ /** Test-only: drop the cached worker client and any in-flight routes. */
80
+ export function resetHeadlessRouting() {
81
+ dropCachedWorker();
82
+ inFlightRoutes.clear();
83
+ }