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,91 @@
1
+ /**
2
+ * Reader for the headless process registry the engine maintains at
3
+ * <editor cache dir>/summer_processes.cfg (engine ConfigFile / INI-ish format).
4
+ *
5
+ * Shape (contract — mirror of the worker agent's brief):
6
+ * [<absolute project path>] ; section name = project path
7
+ * role="worker"
8
+ * pid=12345
9
+ * port=6600
10
+ * token="hex..."
11
+ * started_ts=1756700000
12
+ *
13
+ * This module only READS the registry. Dead-pid "pruning" is in-memory
14
+ * filtering — the CLI never rewrites the file, because the engine/worker owns
15
+ * it and a concurrent rewrite from the CLI could race a worker registering
16
+ * itself.
17
+ */
18
+ export declare const REGISTRY_FILENAME = "summer_processes.cfg";
19
+ /** A registry file larger than this is treated as corrupt (empty registry). */
20
+ export declare const MAX_REGISTRY_BYTES: number;
21
+ export interface WorkerRegistryEntry {
22
+ /** Canonical absolute project path (the section name, resolved). */
23
+ projectPath: string;
24
+ role: string;
25
+ pid: number;
26
+ port: number;
27
+ token: string;
28
+ startedTs?: number;
29
+ }
30
+ export interface ReadRegistryOptions {
31
+ /** Full path to summer_processes.cfg. Overrides cacheDir. */
32
+ registryPath?: string;
33
+ /** Editor cache dir containing the registry file. */
34
+ cacheDir?: string;
35
+ /** Liveness probe, injectable for tests. Defaults to kill(pid, 0). */
36
+ isAlive?: (pid: number) => boolean;
37
+ }
38
+ /**
39
+ * Canonicalize a project path for registry-section matching:
40
+ * - resolve to absolute, then REALPATH it — the engine canonicalizes the
41
+ * section paths it writes (macOS: /var is a symlink to /private/var), so
42
+ * a resolve()-only lookup of a symlinked path would never match the
43
+ * engine-written section and spawn would time out with the worker alive.
44
+ * Non-existent paths fall back to the resolved form.
45
+ * - strip trailing separators
46
+ * - on Windows: normalize backslashes to forward slashes and lowercase
47
+ * (NTFS is case-insensitive; the engine may write either casing)
48
+ * `platformName` is injectable so the Windows rules are unit-testable
49
+ * anywhere. Used consistently for registry lookups AND single-flight keys.
50
+ */
51
+ export declare function normalizeProjectPath(path: string, platformName?: NodeJS.Platform): string;
52
+ import { processIsAlive } from "../util/process.js";
53
+ export { processIsAlive };
54
+ /**
55
+ * Resolve the editor cache dir that holds summer_processes.cfg.
56
+ *
57
+ * The engine derives it from OS::get_cache_path() + get_godot_dir_name():
58
+ * macOS ~/Library/Caches/<Name> (platform/macos/os_macos.mm:503,561)
59
+ * Windows %LOCALAPPDATA%/<Name> (platform/windows/os_windows.cpp:2688)
60
+ * Linux $XDG_CACHE_HOME|~/.cache/<name> (platform/linuxbsd/os_linuxbsd.cpp:957)
61
+ * <Name> is version.py short_name — "Summer" in shipped Summer builds
62
+ * (verified: ~/Library/Caches/Summer holds editor_doc_cache/resthumb files),
63
+ * the upstream name in unrebranded dev builds. We probe the Summer name first
64
+ * and fall back to the upstream name only when the registry file actually
65
+ * exists there.
66
+ *
67
+ * SUMMER_CACHE_DIR overrides everything (useful for tests and nonstandard
68
+ * installs).
69
+ */
70
+ export declare function resolveEditorCacheDir(env?: NodeJS.ProcessEnv): string;
71
+ export declare function registryPathFor(options?: ReadRegistryOptions): string;
72
+ /**
73
+ * Parse the registry's ConfigFile text into raw sections. Exported for tests.
74
+ * Tolerant: comments (; or #), blank lines, quoted or bare section names,
75
+ * `key=value` with or without spaces. Malformed lines are skipped — one bad
76
+ * section must not hide live workers.
77
+ */
78
+ export declare function parseRegistryText(text: string): Array<{
79
+ section: string;
80
+ values: Record<string, string>;
81
+ }>;
82
+ /**
83
+ * Read the registry and return LIVE entries only (dead-pid sections are
84
+ * pruned from the result; the file itself is never rewritten). A missing or
85
+ * unreadable registry yields [] — same meaning as "no workers".
86
+ */
87
+ export declare function readProcessRegistry(options?: ReadRegistryOptions): Promise<WorkerRegistryEntry[]>;
88
+ /** Find the live worker entry for a project (normalized path match — see
89
+ * normalizeProjectPath: trailing slashes stripped; on Windows additionally
90
+ * case-insensitive with separators normalized). */
91
+ export declare function findWorkerEntry(projectPath: string, options?: ReadRegistryOptions): Promise<WorkerRegistryEntry | null>;
@@ -0,0 +1,226 @@
1
+ import { lstat, readFile } from "fs/promises";
2
+ import { existsSync, realpathSync } from "fs";
3
+ import { homedir } from "os";
4
+ import { join, resolve } from "path";
5
+ /**
6
+ * Reader for the headless process registry the engine maintains at
7
+ * <editor cache dir>/summer_processes.cfg (engine ConfigFile / INI-ish format).
8
+ *
9
+ * Shape (contract — mirror of the worker agent's brief):
10
+ * [<absolute project path>] ; section name = project path
11
+ * role="worker"
12
+ * pid=12345
13
+ * port=6600
14
+ * token="hex..."
15
+ * started_ts=1756700000
16
+ *
17
+ * This module only READS the registry. Dead-pid "pruning" is in-memory
18
+ * filtering — the CLI never rewrites the file, because the engine/worker owns
19
+ * it and a concurrent rewrite from the CLI could race a worker registering
20
+ * itself.
21
+ */
22
+ export const REGISTRY_FILENAME = "summer_processes.cfg";
23
+ /** A registry file larger than this is treated as corrupt (empty registry). */
24
+ export const MAX_REGISTRY_BYTES = 512 * 1024;
25
+ /**
26
+ * Canonicalize a project path for registry-section matching:
27
+ * - resolve to absolute, then REALPATH it — the engine canonicalizes the
28
+ * section paths it writes (macOS: /var is a symlink to /private/var), so
29
+ * a resolve()-only lookup of a symlinked path would never match the
30
+ * engine-written section and spawn would time out with the worker alive.
31
+ * Non-existent paths fall back to the resolved form.
32
+ * - strip trailing separators
33
+ * - on Windows: normalize backslashes to forward slashes and lowercase
34
+ * (NTFS is case-insensitive; the engine may write either casing)
35
+ * `platformName` is injectable so the Windows rules are unit-testable
36
+ * anywhere. Used consistently for registry lookups AND single-flight keys.
37
+ */
38
+ export function normalizeProjectPath(path, platformName = process.platform) {
39
+ let normalized = resolve(path.trim());
40
+ try {
41
+ normalized = realpathSync(normalized);
42
+ }
43
+ catch {
44
+ // Path does not exist (yet) — keep the resolved form.
45
+ }
46
+ if (platformName === "win32") {
47
+ normalized = normalized.replace(/\\/g, "/").toLowerCase();
48
+ }
49
+ while (normalized.length > 1 && normalized.endsWith("/")) {
50
+ normalized = normalized.slice(0, -1);
51
+ }
52
+ return normalized;
53
+ }
54
+ import { processIsAlive } from "../util/process.js";
55
+ export { processIsAlive };
56
+ /**
57
+ * Resolve the editor cache dir that holds summer_processes.cfg.
58
+ *
59
+ * The engine derives it from OS::get_cache_path() + get_godot_dir_name():
60
+ * macOS ~/Library/Caches/<Name> (platform/macos/os_macos.mm:503,561)
61
+ * Windows %LOCALAPPDATA%/<Name> (platform/windows/os_windows.cpp:2688)
62
+ * Linux $XDG_CACHE_HOME|~/.cache/<name> (platform/linuxbsd/os_linuxbsd.cpp:957)
63
+ * <Name> is version.py short_name — "Summer" in shipped Summer builds
64
+ * (verified: ~/Library/Caches/Summer holds editor_doc_cache/resthumb files),
65
+ * the upstream name in unrebranded dev builds. We probe the Summer name first
66
+ * and fall back to the upstream name only when the registry file actually
67
+ * exists there.
68
+ *
69
+ * SUMMER_CACHE_DIR overrides everything (useful for tests and nonstandard
70
+ * installs).
71
+ */
72
+ export function resolveEditorCacheDir(env = process.env) {
73
+ const override = env.SUMMER_CACHE_DIR?.trim();
74
+ if (override)
75
+ return override;
76
+ const home = homedir();
77
+ let base;
78
+ let names;
79
+ switch (process.platform) {
80
+ case "darwin":
81
+ base = join(home, "Library", "Caches");
82
+ names = ["Summer", "Godot"];
83
+ break;
84
+ case "win32":
85
+ base = env.LOCALAPPDATA?.trim() || join(home, "AppData", "Local");
86
+ names = ["Summer", "Godot"];
87
+ break;
88
+ default: {
89
+ const xdg = env.XDG_CACHE_HOME?.trim();
90
+ base = xdg && xdg.startsWith("/") ? xdg : join(home, ".cache");
91
+ names = ["summer", "godot"];
92
+ break;
93
+ }
94
+ }
95
+ for (const name of names) {
96
+ if (existsSync(join(base, name, REGISTRY_FILENAME)))
97
+ return join(base, name);
98
+ }
99
+ // Default to the Summer-branded dir even when the registry does not exist
100
+ // yet — a spawned worker will create the file there.
101
+ return join(base, names[0]);
102
+ }
103
+ export function registryPathFor(options = {}) {
104
+ if (options.registryPath)
105
+ return options.registryPath;
106
+ return join(options.cacheDir ?? resolveEditorCacheDir(), REGISTRY_FILENAME);
107
+ }
108
+ function unquote(raw) {
109
+ const trimmed = raw.trim();
110
+ if (trimmed.length >= 2 && trimmed.startsWith('"') && trimmed.endsWith('"')) {
111
+ // The registry's string escapes are a JSON subset for the values we
112
+ // care about (paths, roles, hex tokens). Fall back to a bare strip when
113
+ // JSON.parse rejects an exotic escape.
114
+ try {
115
+ const parsed = JSON.parse(trimmed);
116
+ if (typeof parsed === "string")
117
+ return parsed;
118
+ }
119
+ catch {
120
+ /* fall through */
121
+ }
122
+ return trimmed.slice(1, -1);
123
+ }
124
+ return trimmed;
125
+ }
126
+ function numberValue(raw) {
127
+ const value = Number(unquote(raw));
128
+ return Number.isFinite(value) ? value : undefined;
129
+ }
130
+ /**
131
+ * Parse the registry's ConfigFile text into raw sections. Exported for tests.
132
+ * Tolerant: comments (; or #), blank lines, quoted or bare section names,
133
+ * `key=value` with or without spaces. Malformed lines are skipped — one bad
134
+ * section must not hide live workers.
135
+ */
136
+ export function parseRegistryText(text) {
137
+ const sections = [];
138
+ let current = null;
139
+ for (const rawLine of text.split(/\r?\n/)) {
140
+ const line = rawLine.trim();
141
+ if (!line || line.startsWith(";") || line.startsWith("#"))
142
+ continue;
143
+ if (line.startsWith("[") && line.endsWith("]")) {
144
+ // Godot's ConfigFile writes a section name as "[" + name.replace("]",
145
+ // "\\]") + "]", so a project path containing "]" arrives escaped and
146
+ // would otherwise never match the caller's normalized path.
147
+ const name = unquote(line.slice(1, -1).replace(/\\\]/g, "]"));
148
+ current = { section: name, values: {} };
149
+ sections.push(current);
150
+ continue;
151
+ }
152
+ if (!current)
153
+ continue;
154
+ const eq = line.indexOf("=");
155
+ if (eq <= 0)
156
+ continue;
157
+ const key = line.slice(0, eq).trim();
158
+ const value = line.slice(eq + 1).trim();
159
+ if (key)
160
+ current.values[key] = value;
161
+ }
162
+ return sections;
163
+ }
164
+ /**
165
+ * Read the registry and return LIVE entries only (dead-pid sections are
166
+ * pruned from the result; the file itself is never rewritten). A missing or
167
+ * unreadable registry yields [] — same meaning as "no workers".
168
+ */
169
+ export async function readProcessRegistry(options = {}) {
170
+ const path = registryPathFor(options);
171
+ const isAlive = options.isAlive ?? processIsAlive;
172
+ let text;
173
+ try {
174
+ // Trust boundary: only a REGULAR file is accepted — a symlink planted at
175
+ // the registry path (pointing at attacker-chosen content) is refused, as
176
+ // is an implausibly large file. lstat does not follow symlinks.
177
+ const info = await lstat(path);
178
+ if (!info.isFile() ||
179
+ info.isSymbolicLink() ||
180
+ info.size > MAX_REGISTRY_BYTES) {
181
+ return [];
182
+ }
183
+ text = await readFile(path, "utf-8");
184
+ }
185
+ catch {
186
+ return [];
187
+ }
188
+ const entries = [];
189
+ for (const { section, values } of parseRegistryText(text)) {
190
+ const pid = numberValue(values.pid ?? "");
191
+ const port = numberValue(values.port ?? "");
192
+ const token = values.token !== undefined ? unquote(values.token) : "";
193
+ const role = values.role !== undefined ? unquote(values.role) : "";
194
+ if (!section ||
195
+ !pid ||
196
+ !Number.isInteger(pid) ||
197
+ pid <= 0 ||
198
+ !port ||
199
+ !Number.isInteger(port) ||
200
+ port < 1 ||
201
+ port > 65535 ||
202
+ !token) {
203
+ continue;
204
+ }
205
+ if (!isAlive(pid))
206
+ continue;
207
+ entries.push({
208
+ projectPath: resolve(section),
209
+ role,
210
+ pid,
211
+ port,
212
+ token,
213
+ startedTs: numberValue(values.started_ts ?? ""),
214
+ });
215
+ }
216
+ return entries;
217
+ }
218
+ /** Find the live worker entry for a project (normalized path match — see
219
+ * normalizeProjectPath: trailing slashes stripped; on Windows additionally
220
+ * case-insensitive with separators normalized). */
221
+ export async function findWorkerEntry(projectPath, options = {}) {
222
+ const target = normalizeProjectPath(projectPath);
223
+ const entries = await readProcessRegistry(options);
224
+ return (entries.find((entry) => normalizeProjectPath(entry.projectPath) === target &&
225
+ entry.role === "worker") ?? null);
226
+ }
@@ -0,0 +1,46 @@
1
+ import type { ProjectConnection } from "./connection.js";
2
+ import { EditorConnection } from "./editor-connection.js";
3
+ import { type ReadRegistryOptions, type WorkerRegistryEntry } from "./registry.js";
4
+ import { type SpawnWorkerOptions } from "./spawn.js";
5
+ import { WorkerConnection } from "./worker-connection.js";
6
+ /**
7
+ * resolveProjectConnection — the routing decision, in fixed priority order:
8
+ *
9
+ * 1. EDITOR a live editor that has the project open (today's transport,
10
+ * via the existing instance registry in ~/.summer/instances)
11
+ * 2. WORKER a live headless worker registered for the project in
12
+ * <editor cache dir>/summer_processes.cfg
13
+ * 3. SPAWN launch `<engine> --summer-worker --path <project>`, wait for
14
+ * its registry entry (up to ~120s), connect to it
15
+ *
16
+ * Every step is injectable for tests; the defaults wire the real editor
17
+ * discovery (core/engine.ts resolveEngineConnection via EngineApiClient),
18
+ * the real registry reader, and the real spawner.
19
+ */
20
+ export interface ResolveProjectConnectionOptions {
21
+ registry?: ReadRegistryOptions;
22
+ spawn?: Omit<SpawnWorkerOptions, "registry">;
23
+ onProgress?: (progress: {
24
+ phase: string;
25
+ elapsedMs?: number;
26
+ }) => void;
27
+ /** Test seams. Defaults are the real implementations. */
28
+ deps?: {
29
+ tryEditor?: (projectPath: string) => Promise<EditorConnection>;
30
+ findWorker?: (projectPath: string, registry?: ReadRegistryOptions) => Promise<WorkerRegistryEntry | null>;
31
+ spawnWorker?: (projectPath: string, options?: SpawnWorkerOptions) => Promise<WorkerRegistryEntry>;
32
+ connectWorker?: (entry: WorkerRegistryEntry, projectPath: string) => Promise<WorkerConnection>;
33
+ };
34
+ }
35
+ /**
36
+ * Classify an editor-resolution failure. Routing may fall through to a
37
+ * worker ONLY when the failure positively means "no live editor has this
38
+ * project" (core/engine.ts: no registry match, or legacy no-api-token).
39
+ * Everything else — ambiguity ("more than one editor matches"), identity
40
+ * changes, an editor that exists but is not responding, auth failures, a
41
+ * path that is not a project — means the editor's presence is UNCERTAIN, and
42
+ * a worker must never write while that is true. Those errors RETHROW.
43
+ * Exported for tests and for mcp-routing.
44
+ */
45
+ export declare function isNoEditorForProjectError(error: unknown): boolean;
46
+ export declare function resolveProjectConnection(projectPath: string, options?: ResolveProjectConnectionOptions): Promise<ProjectConnection>;
@@ -0,0 +1,75 @@
1
+ import { resolve as resolvePath } from "path";
2
+ import { EngineApiClient } from "../api-client.js";
3
+ import { EditorConnection } from "./editor-connection.js";
4
+ import { findWorkerEntry, } from "./registry.js";
5
+ import { spawnWorker } from "./spawn.js";
6
+ import { WorkerConnection } from "./worker-connection.js";
7
+ async function defaultTryEditor(projectPath) {
8
+ // resolveEngineConnection (inside connect) throws when no live editor
9
+ // matches this exact project — ONLY that failure class is the signal to
10
+ // fall through to the worker path (see isNoEditorForProjectError).
11
+ const client = await EngineApiClient.connect({ projectPath });
12
+ return new EditorConnection(client, projectPath);
13
+ }
14
+ /**
15
+ * Classify an editor-resolution failure. Routing may fall through to a
16
+ * worker ONLY when the failure positively means "no live editor has this
17
+ * project" (core/engine.ts: no registry match, or legacy no-api-token).
18
+ * Everything else — ambiguity ("more than one editor matches"), identity
19
+ * changes, an editor that exists but is not responding, auth failures, a
20
+ * path that is not a project — means the editor's presence is UNCERTAIN, and
21
+ * a worker must never write while that is true. Those errors RETHROW.
22
+ * Exported for tests and for mcp-routing.
23
+ */
24
+ export function isNoEditorForProjectError(error) {
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ return (message.includes("No running Summer editor matches") ||
27
+ message.includes("no api-token found"));
28
+ }
29
+ function defaultConnectWorker(entry, projectPath) {
30
+ return WorkerConnection.connect({
31
+ port: entry.port,
32
+ token: entry.token,
33
+ pid: entry.pid,
34
+ projectPath,
35
+ });
36
+ }
37
+ export async function resolveProjectConnection(projectPath, options = {}) {
38
+ const target = resolvePath(projectPath);
39
+ const tryEditor = options.deps?.tryEditor ?? defaultTryEditor;
40
+ const findWorker = options.deps?.findWorker ?? findWorkerEntry;
41
+ const doSpawn = options.deps?.spawnWorker ?? spawnWorker;
42
+ const connectWorker = options.deps?.connectWorker ?? defaultConnectWorker;
43
+ // 1. Editor beats worker. ONLY a positive "no editor has this project"
44
+ // falls through — ambiguity/identity/auth/unresponsive-editor errors
45
+ // rethrow, because a worker must never write while an editor's presence is
46
+ // uncertain.
47
+ try {
48
+ return await tryEditor(target);
49
+ }
50
+ catch (error) {
51
+ if (!isNoEditorForProjectError(error))
52
+ throw error;
53
+ }
54
+ // 2. Live worker from the registry. A stale entry whose process answers the
55
+ // pid probe but whose socket/handshake is gone falls through to spawn —
56
+ // and spawnWorker snapshots it as a baseline so the stale entry can never
57
+ // satisfy the post-spawn poll.
58
+ const existing = await findWorker(target, options.registry);
59
+ if (existing) {
60
+ try {
61
+ return await connectWorker(existing, target);
62
+ }
63
+ catch {
64
+ options.onProgress?.({ phase: "registry_worker_unreachable" });
65
+ }
66
+ }
67
+ // 3. Spawn on demand, then connect.
68
+ options.onProgress?.({ phase: "spawning_worker" });
69
+ const entry = await doSpawn(target, {
70
+ ...options.spawn,
71
+ registry: options.registry,
72
+ onProgress: options.onProgress,
73
+ });
74
+ return connectWorker(entry, target);
75
+ }
@@ -0,0 +1,46 @@
1
+ import { type ReadRegistryOptions, type WorkerRegistryEntry } from "./registry.js";
2
+ export declare function findEngineBinary(env?: NodeJS.ProcessEnv): string | null;
3
+ /** What a launcher must report back so the poll loop can fail fast when the
4
+ * worker dies before registering. The default launcher wires a real child
5
+ * process; tests inject fakes. */
6
+ export interface LaunchHandle {
7
+ /** Non-null once the child has exited. */
8
+ exit(): {
9
+ code: number | null;
10
+ signal: NodeJS.Signals | null;
11
+ } | null;
12
+ /** Last bytes of the child's stderr (best-effort, may be ""). MUST never
13
+ * contain the registry token — workers own their own log hygiene, but
14
+ * this layer additionally never logs tokens itself. */
15
+ stderrTail(): string;
16
+ /** Terminate the child (SIGTERM, escalating to SIGKILL after a grace
17
+ * period). Called whenever the spawn attempt is ABANDONED without
18
+ * adopting a registry entry — an unadopted worker must never be leaked.
19
+ * Optional so test fakes without a real process can omit it. */
20
+ kill?(): void;
21
+ }
22
+ export type Launcher = (binary: string, args: string[]) => LaunchHandle;
23
+ export interface SpawnWorkerOptions {
24
+ /** Explicit engine binary; defaults to findEngineBinary(). */
25
+ binary?: string;
26
+ /** Registry read options (test injection: registryPath / isAlive). */
27
+ registry?: ReadRegistryOptions;
28
+ /** Registration budget. Default SUMMER_WORKER_SPAWN_TIMEOUT_MS or 120s
29
+ * (first imports of large projects are slow). */
30
+ timeoutMs?: number;
31
+ pollIntervalMs?: number;
32
+ /** Elapsed-time progress while waiting for the worker to register. */
33
+ onProgress?: (progress: {
34
+ phase: string;
35
+ elapsedMs: number;
36
+ }) => void;
37
+ /** Process launcher, injectable for tests. */
38
+ launch?: Launcher;
39
+ }
40
+ /**
41
+ * Spawn a headless worker for `projectPath` and wait for its registry entry.
42
+ * Resolves with the live entry; rejects on missing binary, early exit
43
+ * (surfacing the exit code and a stderr tail), or registration timeout.
44
+ * Concurrent calls for the same project share ONE spawn.
45
+ */
46
+ export declare function spawnWorker(projectPath: string, options?: SpawnWorkerOptions): Promise<WorkerRegistryEntry>;