summer-engine 2.8.1 → 3.0.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 (742) 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 +134 -41
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +159 -391
  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/{commands → cli/commands}/setup.js +43 -89
  49. package/dist/{commands → cli/commands}/skills.js +85 -222
  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 +47 -0
  167. package/dist/core/skills-registry.js +83 -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/{lib → installer}/agent-config.d.ts +20 -1
  188. package/dist/{lib → installer}/agent-config.js +148 -23
  189. package/dist/installer/legacy-skills.d.ts +26 -0
  190. package/dist/installer/legacy-skills.js +53 -0
  191. package/dist/installer/setup.d.ts +76 -0
  192. package/dist/installer/setup.js +146 -0
  193. package/dist/installer/skill-locations.d.ts +45 -0
  194. package/dist/installer/skill-locations.js +170 -0
  195. package/dist/installer/version-check.d.ts +174 -0
  196. package/dist/{lib → installer}/version-check.js +173 -42
  197. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  198. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  199. package/dist/mcp/server.d.ts +23 -3
  200. package/dist/mcp/server.js +122 -28
  201. package/dist/mcp/tools/asset-tools.js +62 -142
  202. package/dist/mcp/tools/creator-tools.js +5 -23
  203. package/dist/mcp/tools/debug-tools.js +61 -18
  204. package/dist/mcp/tools/event-tools.d.ts +14 -0
  205. package/dist/mcp/tools/event-tools.js +41 -0
  206. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  207. package/dist/mcp/tools/fabricate-tools.js +28 -0
  208. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  209. package/dist/mcp/tools/feedback-tools.js +88 -0
  210. package/dist/mcp/tools/file-tools.js +6 -53
  211. package/dist/mcp/tools/generate-tools.js +37 -63
  212. package/dist/mcp/tools/library-tools.d.ts +11 -0
  213. package/dist/mcp/tools/library-tools.js +42 -0
  214. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  215. package/dist/mcp/tools/navigation-tools.js +37 -0
  216. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  217. package/dist/mcp/tools/perception-tools.js +146 -0
  218. package/dist/mcp/tools/project-tools.d.ts +14 -0
  219. package/dist/mcp/tools/project-tools.js +72 -281
  220. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  221. package/dist/mcp/tools/runtime-tools.js +92 -0
  222. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  223. package/dist/mcp/tools/scene-tools.js +68 -119
  224. package/dist/mcp/tools/script-tools.d.ts +3 -0
  225. package/dist/mcp/tools/script-tools.js +118 -0
  226. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  227. package/dist/mcp/tools/spatial-tools.js +485 -0
  228. package/dist/mcp/tools/text-json.d.ts +8 -0
  229. package/dist/mcp/tools/text-json.js +12 -0
  230. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  231. package/dist/mcp/tools/ui-tools.js +82 -0
  232. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  233. package/dist/mcp/tools/visual-tools.js +383 -101
  234. package/dist/mcp/tools/with-engine.d.ts +9 -15
  235. package/dist/mcp/tools/with-engine.js +60 -96
  236. package/dist/project-memory/project-manifest.d.ts +36 -0
  237. package/dist/project-memory/project-manifest.js +50 -0
  238. package/dist/project-memory/project-memory.d.ts +57 -0
  239. package/dist/{lib → project-memory}/project-memory.js +46 -0
  240. package/gemini-extension.json +103 -2
  241. package/hooks/hooks-cursor.json +2 -2
  242. package/hooks/hooks.json +2 -1
  243. package/hooks/pre-commit-doctor.sh +45 -39
  244. package/hooks/run-hook.cmd +30 -23
  245. package/hooks/run-hook.sh +20 -0
  246. package/hooks/session-start.sh +18 -7
  247. package/integrations/README.md +70 -0
  248. package/integrations/claude/README.md +19 -0
  249. package/integrations/claude/manifest-target.json +16 -0
  250. package/integrations/cline/README.md +13 -0
  251. package/integrations/cline/manifest-target.json +3 -0
  252. package/integrations/codex/README.md +15 -0
  253. package/integrations/codex/manifest-target.json +5 -0
  254. package/integrations/cursor/README.md +16 -0
  255. package/integrations/cursor/manifest-target.json +5 -0
  256. package/integrations/factory/README.md +26 -0
  257. package/integrations/factory/manifest-target.json +5 -0
  258. package/integrations/gemini/README.md +26 -0
  259. package/integrations/gemini/manifest-target.json +5 -0
  260. package/integrations/github-copilot/README.md +12 -0
  261. package/integrations/github-copilot/manifest-target.json +3 -0
  262. package/integrations/kilo-code/README.md +16 -0
  263. package/integrations/kilo-code/manifest-target.json +3 -0
  264. package/integrations/lm-studio/README.md +12 -0
  265. package/integrations/lm-studio/manifest-target.json +3 -0
  266. package/integrations/opencode/README.md +15 -0
  267. package/integrations/opencode/manifest-target.json +3 -0
  268. package/integrations/roo-code/README.md +13 -0
  269. package/integrations/roo-code/manifest-target.json +3 -0
  270. package/integrations/vscode-copilot/README.md +12 -0
  271. package/integrations/vscode-copilot/manifest-target.json +3 -0
  272. package/integrations/windsurf/README.md +13 -0
  273. package/integrations/windsurf/manifest-target.json +3 -0
  274. package/library/references/collaborative-protocol/resource.yaml +24 -0
  275. package/library/references/gd-style/resource.yaml +24 -0
  276. package/{references → library/references/godot-version}/godot-version.md +6 -6
  277. package/library/references/godot-version/resource.yaml +22 -0
  278. package/library/references/headless-routing/headless-routing.md +46 -0
  279. package/library/references/headless-routing/resource.yaml +24 -0
  280. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  281. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  282. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  283. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  284. package/library/references/product-map/product-map.md +103 -0
  285. package/library/references/product-map/resource.yaml +33 -0
  286. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  287. package/library/references/public-surface-language/resource.yaml +17 -0
  288. package/library/references/summer-folder/resource.yaml +20 -0
  289. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  290. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  291. package/library/skills/3d-lighting/resource.yaml +27 -0
  292. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  293. package/library/skills/adaptive-music/resource.yaml +28 -0
  294. package/library/skills/agent-playtesting/SKILL.md +148 -0
  295. package/library/skills/agent-playtesting/resource.yaml +52 -0
  296. package/library/skills/ambient-bed/resource.yaml +24 -0
  297. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  298. package/library/skills/animated-loop/resource.yaml +27 -0
  299. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  300. package/library/skills/animation-tree/resource.yaml +33 -0
  301. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  302. package/library/skills/art-direction/resource.yaml +29 -0
  303. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  304. package/library/skills/asset-strategy/resource.yaml +63 -0
  305. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  306. package/library/skills/audio-direction/resource.yaml +32 -0
  307. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  308. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  309. package/library/skills/brainstorm-game/resource.yaml +30 -0
  310. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  311. package/library/skills/brainstorming/resource.yaml +23 -0
  312. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  313. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  314. package/library/skills/browse-templates/resource.yaml +23 -0
  315. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  316. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  317. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  318. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  319. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  320. package/library/skills/character-model/resource.yaml +36 -0
  321. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  322. package/library/skills/character-portrait/resource.yaml +30 -0
  323. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  324. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  325. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  326. package/library/skills/concept-art/resource.yaml +34 -0
  327. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  328. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  329. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  330. package/library/skills/debug/resource.yaml +31 -0
  331. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  332. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  333. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  334. package/library/skills/design-level/resource.yaml +31 -0
  335. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  336. package/library/skills/design-mechanic/resource.yaml +31 -0
  337. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  338. package/library/skills/design-npc/resource.yaml +29 -0
  339. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  340. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  341. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  342. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  343. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  344. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  345. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  346. package/library/skills/environment-kit/resource.yaml +29 -0
  347. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  348. package/library/skills/export-and-ship/resource.yaml +32 -0
  349. package/library/skills/fabricating-assets/SKILL.md +195 -0
  350. package/library/skills/fabricating-assets/resource.yaml +52 -0
  351. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  352. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  353. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  354. package/library/skills/fps-controller/resource.yaml +29 -0
  355. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  356. package/library/skills/game-feel/resource.yaml +27 -0
  357. package/library/skills/gameskill/SKILL.md +64 -0
  358. package/library/skills/gameskill/resource.yaml +22 -0
  359. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  360. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  361. package/library/skills/generate-motion/resource.yaml +34 -0
  362. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  363. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  364. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  365. package/library/skills/headless-scripting/resource.yaml +26 -0
  366. package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
  367. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  368. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  369. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  370. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  371. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  372. package/library/skills/investigating-bugs/resource.yaml +24 -0
  373. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  374. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  375. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  376. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +23 -23
  377. package/library/skills/make-game/resource.yaml +35 -0
  378. package/library/skills/music-track/resource.yaml +28 -0
  379. package/library/skills/navigate-summer/SKILL.md +61 -0
  380. package/library/skills/navigate-summer/resource.yaml +35 -0
  381. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  382. package/library/skills/new-project/resource.yaml +28 -0
  383. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  384. package/library/skills/organic-model/resource.yaml +32 -0
  385. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  386. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  387. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  388. package/library/skills/pixel-art/resource.yaml +31 -0
  389. package/library/skills/play/resource.yaml +26 -0
  390. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  391. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  392. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  393. package/library/skills/procedural-animation/resource.yaml +33 -0
  394. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  395. package/library/skills/prop-model/resource.yaml +33 -0
  396. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  397. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  398. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  399. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  400. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  401. package/library/skills/remote-deploy/resource.yaml +23 -0
  402. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  403. package/library/skills/retarget/resource.yaml +33 -0
  404. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  405. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  406. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +9 -1
  407. package/library/skills/scene-composition/resource.yaml +27 -0
  408. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  409. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  410. package/library/skills/scene-scripting/SKILL.md +764 -0
  411. package/library/skills/scene-scripting/resource.yaml +58 -0
  412. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  413. package/library/skills/scene-to-level/resource.yaml +33 -0
  414. package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
  415. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  416. package/library/skills/skill-create/SKILL.md +138 -0
  417. package/library/skills/skill-create/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  419. package/library/skills/skill-improve/resource.yaml +25 -0
  420. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  421. package/library/skills/skill-test/resource.yaml +26 -0
  422. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  423. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  424. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  425. package/library/skills/skybox-panorama/resource.yaml +28 -0
  426. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  427. package/library/skills/sound-effect/resource.yaml +27 -0
  428. package/library/skills/spatial-placement/SKILL.md +74 -0
  429. package/library/skills/spatial-placement/resource.yaml +42 -0
  430. package/library/skills/spatial-placement/tests/spec.md +65 -0
  431. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  432. package/library/skills/sprite-sheet/resource.yaml +32 -0
  433. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  434. package/library/skills/tileable-texture/resource.yaml +31 -0
  435. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  436. package/library/skills/trailer-shot/resource.yaml +27 -0
  437. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  438. package/library/skills/tune-performance/resource.yaml +31 -0
  439. package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
  440. package/library/skills/ui-basics/resource.yaml +25 -0
  441. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  442. package/library/skills/ui-graphics/resource.yaml +29 -0
  443. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  444. package/library/skills/use-widget-asset/resource.yaml +29 -0
  445. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  446. package/library/skills/using-summer/resource.yaml +41 -0
  447. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  448. package/library/skills/vehicle-model/resource.yaml +34 -0
  449. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  450. package/library/skills/verification-before-completion/resource.yaml +23 -0
  451. package/library/skills/verifying-scenes/SKILL.md +98 -0
  452. package/library/skills/verifying-scenes/resource.yaml +42 -0
  453. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  454. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  455. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  456. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  457. package/library/skills/vfx-fire/resource.yaml +35 -0
  458. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  459. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  461. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  462. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-lightning/resource.yaml +33 -0
  464. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  465. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  467. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  468. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  469. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  470. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  471. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  472. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  473. package/library/skills/vfx-smoke/resource.yaml +32 -0
  474. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  475. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  476. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  477. package/library/skills/voice-line/resource.yaml +27 -0
  478. package/library/skills/world-building-3d/SKILL.md +105 -0
  479. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  480. package/library/skills/world-building-3d/resource.yaml +44 -0
  481. package/library/skills/world-building-3d/tests/spec.md +48 -0
  482. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  483. package/library/skills/writing-plans/resource.yaml +23 -0
  484. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  485. package/library/skills/writing-skills/resource.yaml +29 -0
  486. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  487. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  488. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  489. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  490. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  491. package/library/templates/2d-platformer/resource.yaml +24 -0
  492. package/library/templates/2d-rpg/resource.yaml +21 -0
  493. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  494. package/library/templates/3d-basic/resource.yaml +16 -0
  495. package/library/templates/3d-city-kit/resource.yaml +24 -0
  496. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  497. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  498. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  499. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  500. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  501. package/library/templates/3d-racing-game/resource.yaml +21 -0
  502. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  503. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  504. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  505. package/library/templates/README.md +94 -0
  506. package/library/templates/empty/resource.yaml +16 -0
  507. package/library/tools/add-node/resource.yaml +60 -0
  508. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  509. package/library/tools/api-docs/resource.yaml +57 -0
  510. package/library/tools/batch/resource.yaml +52 -0
  511. package/library/tools/camera-bookmark/resource.yaml +73 -0
  512. package/library/tools/check-job/resource.yaml +45 -0
  513. package/library/tools/clear-console/resource.yaml +40 -0
  514. package/library/tools/connect-signal/resource.yaml +63 -0
  515. package/library/tools/create-debug-report/resource.yaml +67 -0
  516. package/library/tools/create-scene/resource.yaml +59 -0
  517. package/library/tools/creator-config/resource.yaml +63 -0
  518. package/library/tools/creator-publish/resource.yaml +73 -0
  519. package/library/tools/creator-releases/resource.yaml +53 -0
  520. package/library/tools/fabricate-3d/resource.yaml +108 -0
  521. package/library/tools/game-control/resource.yaml +84 -0
  522. package/library/tools/game-input/resource.yaml +159 -0
  523. package/library/tools/game-probe/resource.yaml +90 -0
  524. package/library/tools/generate-3d/resource.yaml +112 -0
  525. package/library/tools/generate-audio/resource.yaml +80 -0
  526. package/library/tools/generate-image/resource.yaml +62 -0
  527. package/library/tools/generate-motion/resource.yaml +66 -0
  528. package/library/tools/generate-video/resource.yaml +66 -0
  529. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  530. package/library/tools/get-asset/resource.yaml +42 -0
  531. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  532. package/library/tools/get-console/resource.yaml +69 -0
  533. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  534. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  535. package/library/tools/get-diagnostics/resource.yaml +42 -0
  536. package/library/tools/get-project-context/resource.yaml +45 -0
  537. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  538. package/library/tools/get-scene-tree/resource.yaml +52 -0
  539. package/library/tools/get-script-errors/resource.yaml +45 -0
  540. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  541. package/library/tools/import-asset/resource.yaml +73 -0
  542. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  543. package/library/tools/import-from-url/resource.yaml +51 -0
  544. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  545. package/library/tools/import-hdri/resource.yaml +69 -0
  546. package/library/tools/input-map-bind/resource.yaml +52 -0
  547. package/library/tools/inspect-node/resource.yaml +46 -0
  548. package/library/tools/inspect-resource/resource.yaml +45 -0
  549. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  550. package/library/tools/instantiate-scene/resource.yaml +62 -0
  551. package/library/tools/is-running/resource.yaml +40 -0
  552. package/library/tools/library-feedback/resource.yaml +89 -0
  553. package/library/tools/list-my-assets/resource.yaml +56 -0
  554. package/library/tools/navigation-probe/resource.yaml +85 -0
  555. package/library/tools/open/resource.yaml +80 -0
  556. package/library/tools/open-main-scene/resource.yaml +40 -0
  557. package/library/tools/open-scene/resource.yaml +46 -0
  558. package/library/tools/play/resource.yaml +91 -0
  559. package/library/tools/project-setting/resource.yaml +53 -0
  560. package/library/tools/read-file/resource.yaml +47 -0
  561. package/library/tools/read-library/resource.yaml +67 -0
  562. package/library/tools/recent-events/resource.yaml +71 -0
  563. package/library/tools/remove-node/resource.yaml +51 -0
  564. package/library/tools/replace-node/resource.yaml +57 -0
  565. package/library/tools/replace-text/resource.yaml +61 -0
  566. package/library/tools/run-editor-script/resource.yaml +61 -0
  567. package/library/tools/run-script/resource.yaml +73 -0
  568. package/library/tools/runtime-animate/resource.yaml +140 -0
  569. package/library/tools/runtime-call/resource.yaml +74 -0
  570. package/library/tools/runtime-set/resource.yaml +80 -0
  571. package/library/tools/runtime-spawn/resource.yaml +95 -0
  572. package/library/tools/save-scene/resource.yaml +50 -0
  573. package/library/tools/screenshot/resource.yaml +112 -0
  574. package/library/tools/search-assets/resource.yaml +67 -0
  575. package/library/tools/search-library/resource.yaml +81 -0
  576. package/library/tools/select-node/resource.yaml +48 -0
  577. package/library/tools/set-prop/resource.yaml +64 -0
  578. package/library/tools/set-resource-property/resource.yaml +66 -0
  579. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  580. package/library/tools/snap-to-surface/resource.yaml +90 -0
  581. package/library/tools/snapshot-diff/resource.yaml +58 -0
  582. package/library/tools/starcast/resource.yaml +120 -0
  583. package/library/tools/start-game-task/resource.yaml +91 -0
  584. package/library/tools/stop/resource.yaml +51 -0
  585. package/library/tools/test-placement/resource.yaml +109 -0
  586. package/library/tools/ui-actions/resource.yaml +77 -0
  587. package/library/tools/ui-activate/resource.yaml +88 -0
  588. package/library/tools/ui-screenshot/resource.yaml +63 -0
  589. package/library/tools/ui-tree/resource.yaml +69 -0
  590. package/library/tools/wait-for-event/resource.yaml +84 -0
  591. package/library/tools/world-snapshot/resource.yaml +60 -0
  592. package/library/tools/write-file/resource.yaml +54 -0
  593. package/package.json +22 -16
  594. package/registry/generated/aliases.json +207 -0
  595. package/registry/generated/counts.json +12 -0
  596. package/registry/generated/gemini-extension.json +122 -0
  597. package/registry/generated/index.json +7709 -0
  598. package/registry/generated/marketplace.claude.json +44 -0
  599. package/registry/generated/mcp.json +13 -0
  600. package/registry/generated/plugin.claude.json +135 -0
  601. package/registry/generated/plugin.codex.json +144 -0
  602. package/registry/generated/plugin.cursor.json +134 -0
  603. package/registry/generated/plugin.factory.json +117 -0
  604. package/registry/generated/skills-registry.json +851 -0
  605. package/registry/generated/templates-registry.json +455 -0
  606. package/registry/schemas/allowed-hosts.json +19 -0
  607. package/registry/schemas/collection.schema.json +68 -0
  608. package/registry/schemas/domains.json +96 -0
  609. package/registry/schemas/example.schema.json +11 -0
  610. package/registry/schemas/reference.schema.json +10 -0
  611. package/registry/schemas/resource.schema.json +154 -0
  612. package/registry/schemas/skill.schema.json +14 -0
  613. package/registry/schemas/template.schema.json +46 -0
  614. package/registry/schemas/tool.schema.json +61 -0
  615. package/_persona/summer/SKILL.md +0 -113
  616. package/dist/bin/postinstall.d.ts +0 -2
  617. package/dist/bin/postinstall.js +0 -3
  618. package/dist/commands/cloud.d.ts +0 -2
  619. package/dist/commands/cloud.js +0 -80
  620. package/dist/commands/create.d.ts +0 -3
  621. package/dist/commands/create.js +0 -171
  622. package/dist/commands/install.d.ts +0 -19
  623. package/dist/commands/install.js +0 -194
  624. package/dist/commands/list.js +0 -67
  625. package/dist/commands/logout.js +0 -13
  626. package/dist/commands/logs.d.ts +0 -2
  627. package/dist/commands/logs.js +0 -19
  628. package/dist/commands/open.d.ts +0 -2
  629. package/dist/commands/open.js +0 -32
  630. package/dist/commands/orchestrator.d.ts +0 -8
  631. package/dist/commands/orchestrator.js +0 -143
  632. package/dist/commands/run.d.ts +0 -2
  633. package/dist/commands/run.js +0 -167
  634. package/dist/commands/status.js +0 -46
  635. package/dist/lib/banner.d.ts +0 -4
  636. package/dist/lib/banner.js +0 -122
  637. package/dist/lib/cloud/api.d.ts +0 -79
  638. package/dist/lib/cloud/api.js +0 -107
  639. package/dist/lib/cloud/apply.d.ts +0 -32
  640. package/dist/lib/cloud/apply.js +0 -294
  641. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  642. package/dist/lib/cloud/checkpoint.js +0 -142
  643. package/dist/lib/cloud/conflicts.d.ts +0 -55
  644. package/dist/lib/cloud/conflicts.js +0 -131
  645. package/dist/lib/cloud/containment.d.ts +0 -8
  646. package/dist/lib/cloud/containment.js +0 -52
  647. package/dist/lib/cloud/diff.d.ts +0 -39
  648. package/dist/lib/cloud/diff.js +0 -138
  649. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  650. package/dist/lib/cloud/engine-bridge.js +0 -139
  651. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  652. package/dist/lib/cloud/hash-cache.js +0 -44
  653. package/dist/lib/cloud/hash.d.ts +0 -10
  654. package/dist/lib/cloud/hash.js +0 -111
  655. package/dist/lib/cloud/http.d.ts +0 -17
  656. package/dist/lib/cloud/http.js +0 -47
  657. package/dist/lib/cloud/lock-path.d.ts +0 -1
  658. package/dist/lib/cloud/lock-path.js +0 -5
  659. package/dist/lib/cloud/lock.d.ts +0 -14
  660. package/dist/lib/cloud/lock.js +0 -143
  661. package/dist/lib/cloud/manifest.d.ts +0 -6
  662. package/dist/lib/cloud/manifest.js +0 -41
  663. package/dist/lib/cloud/paths.d.ts +0 -20
  664. package/dist/lib/cloud/paths.js +0 -90
  665. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  666. package/dist/lib/cloud/project-godot-merge.js +0 -185
  667. package/dist/lib/cloud/rules.d.ts +0 -39
  668. package/dist/lib/cloud/rules.js +0 -159
  669. package/dist/lib/cloud/sync.d.ts +0 -21
  670. package/dist/lib/cloud/sync.js +0 -518
  671. package/dist/lib/cloud/transfer.d.ts +0 -23
  672. package/dist/lib/cloud/transfer.js +0 -184
  673. package/dist/lib/cloud/types.d.ts +0 -62
  674. package/dist/lib/cloud/types.js +0 -1
  675. package/dist/lib/cloud/validate-path.d.ts +0 -23
  676. package/dist/lib/cloud/validate-path.js +0 -103
  677. package/dist/lib/engine.d.ts +0 -51
  678. package/dist/lib/game-task-plan.d.ts +0 -42
  679. package/dist/lib/project-memory.d.ts +0 -33
  680. package/dist/lib/public-surface-paths.d.ts +0 -13
  681. package/dist/lib/public-surface-paths.js +0 -42
  682. package/dist/lib/remote-templates.d.ts +0 -25
  683. package/dist/lib/remote-templates.js +0 -86
  684. package/dist/lib/skills-registry.d.ts +0 -572
  685. package/dist/lib/skills-registry.js +0 -1061
  686. package/dist/lib/version-check.d.ts +0 -106
  687. package/dist/mcp/tools/cloud-tools.js +0 -42
  688. package/references/mcp-tools-reference.md +0 -199
  689. package/references/template-registry.md +0 -73
  690. package/skills/README.md +0 -103
  691. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  692. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  693. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  694. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  695. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  696. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  697. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  698. package/skills/workflow/gameskill/SKILL.md +0 -120
  699. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  700. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  701. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  702. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  703. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  704. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  705. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  706. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  707. package/skills/workflow/skill-create/SKILL.md +0 -153
  708. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  709. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  710. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  711. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  712. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  713. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  719. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  720. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  721. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  722. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  723. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  724. /package/dist/{lib → core}/store.d.ts +0 -0
  725. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  726. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  727. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  728. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  729. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  730. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  731. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  732. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  733. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  734. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  735. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  736. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  737. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  738. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  739. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  740. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  741. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  742. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,386 @@
1
+ /**
2
+ * Engine/CLI capability handshake.
3
+ *
4
+ * The MCP server and the engine build ship separately, so the tool surface can
5
+ * outrun the engine in the field. Newer engines advertise their dispatchable
6
+ * op kinds (and a protocol version) in /api/health `capabilities`. Two uses:
7
+ *
8
+ * 1. summer_get_project_context compares the advertised `opKinds` against
9
+ * the ops this CLI's tools send and surfaces a ONE-LINE, NON-FATAL
10
+ * warning (plus one mcp.log line per process).
11
+ * 2. Tools whose op the engine does not advertise return a STRUCTURED
12
+ * "engine lacks op X (engine version Y); update the engine" result
13
+ * BEFORE sending anything, instead of a raw "unknown op" error.
14
+ *
15
+ * Engines that predate `capabilities.opKinds` stay silent on both paths — an
16
+ * absent list proves nothing, and the per-tool "unknown op" hints still cover
17
+ * the failure at call time.
18
+ */
19
+ /** Protocol generation this CLI speaks. Bump only alongside a real wire
20
+ * change; used purely for the skew warning, never to refuse a connection. */
21
+ export const CLI_PROTOCOL_VERSION = 1;
22
+ /**
23
+ * Every engine op kind this package's tools CONSTRUCT themselves (every
24
+ * `op: "<Kind>"` literal under src/, MCP tools and the CLI dispatcher alike).
25
+ * capability-skew.test.ts scans the sources and fails when a literal is
26
+ * missing here; src/core/op-registry-drift.test.ts guards the other direction
27
+ * inside the engine monorepo (never send an op the engine has no branch for).
28
+ *
29
+ * Deliberately NOT listed: ops an agent may compose by hand through
30
+ * summer_batch / `summer tool batch` (MoveNode, ReparentNode, DisconnectSignal,
31
+ * Undo, Git*, RunCommand, ExtractZipFromUrl, CustomBake, ...). The CLI only
32
+ * classifies those for dispatch (single-only / scene-mutation sets) and never
33
+ * sends them on its own, so listing them would warn about skew the CLI cannot
34
+ * cause; the engine's per-op "unknown op" error still covers them at call time.
35
+ */
36
+ export const CLI_KNOWN_OP_NEEDS = [
37
+ // Scene graph + properties
38
+ "AddNode", "RemoveNode", "ReplaceNode", "SetProp", "SetResourceProperty",
39
+ "ConnectSignal", "SelectNode", "OpenScene", "SaveScene", "InstantiateScene",
40
+ // Navigation (summer_open: core/capabilities/navigation/) — Navigate is the
41
+ // one-table op (engine navigate_ops.cpp); the other three are the legacy
42
+ // fallbacks on engines that predate it.
43
+ "Navigate", "OpenResource", "FocusDock", "RevealInFileSystem",
44
+ // Project + input
45
+ "ProjectSetting", "InputMapAddAction", "InputMapBind",
46
+ // Files (summer_write_file / summer_replace_text / summer_create_scene)
47
+ "WriteFile",
48
+ // Import
49
+ "ImportFromUrl", "ImportFromUrlBatch",
50
+ // Diagnostics + runtime control
51
+ "GetConsoleOutput", "ClearConsoleOutput", "GetDebuggerErrors", "IsGameRunning",
52
+ // summer_play / summer_stop send these as ops for the instance-aware and
53
+ // determinism variants (seed / fixed_fps / time_scale, instance / mode) —
54
+ // the legacy /api/play route forwards only `scene`, so the plain launch
55
+ // stays there.
56
+ "PlayGame", "StopGame",
57
+ // runtime control & playtest ops (summer_runtime_* / summer_game_*)
58
+ "SetRuntimeProp", "CallRuntimeMethod", "SpawnRuntimeScene", "FreeRuntimeNode",
59
+ "RuntimeAnimation", "RuntimeAnimationTree", "GetRuntimeBones",
60
+ "GamePause", "GameStep", "GameSpeed",
61
+ "SimulateInputScript", "InputRecordStart", "InputRecordStop", "InputReplay",
62
+ "GameProbe", "ListGameInstances",
63
+ // Capture (+ camera bookmarks: summer_camera_bookmark, perception)
64
+ "ViewportSnapshot", "GameSnapshot", "ScenePreview",
65
+ "SaveCameraBookmark", "ListCameraBookmarks", "DeleteCameraBookmark",
66
+ // Scripting + verification
67
+ "RunSceneScript", "RunEditorScript", "RunVerification", "SimulateInput",
68
+ // Perception
69
+ "GetWorldSnapshot", "DiffWorldSnapshot", "GetRuntimeSceneTree", "GetRuntimeNode",
70
+ // Spatial / world building
71
+ "TestPlacement3D", "SnapToSurface", "AlignDistribute3D", "NavigationProbe3D",
72
+ "Starcast3D",
73
+ // Mesh fabrication (summer_fabricate_3d — the user's own Blender, engine-supervised)
74
+ "FabricateMesh",
75
+ // Editor UI control (editor UI control: summer_ui_actions / summer_ui_tree /
76
+ // summer_ui_activate / summer_ui_screenshot). All synchronous and
77
+ // batchable — none joins the single-only set.
78
+ "UiListActions", "UiInvoke", "UiTree", "UiActivate", "UiScreenshot",
79
+ "UiDialogs", "UiDismissDialog",
80
+ ];
81
+ /** The `capabilities` block of /api/health, shape-checked. Every field is
82
+ * optional: an older engine advertises none of them. */
83
+ /**
84
+ * Escape hatch for the capability pre-flight. The op advert and the ops
85
+ * themselves ship on different engine branches, so an engine can IMPLEMENT an
86
+ * op it does not yet ADVERTISE; with the pre-flight on, such a tool would be
87
+ * refused before sending. `SUMMER_CAPABILITY_PREFLIGHT=off` sends every call
88
+ * and lets the engine's own "unknown op" error decide. The skew warning still
89
+ * prints (it is informational) but notes that the pre-flight is off.
90
+ */
91
+ export const CAPABILITY_PREFLIGHT_ENV = "SUMMER_CAPABILITY_PREFLIGHT";
92
+ export function isCapabilityPreflightDisabled(env = process.env) {
93
+ const raw = env[CAPABILITY_PREFLIGHT_ENV]?.trim().toLowerCase();
94
+ return raw === "off" || raw === "0" || raw === "false";
95
+ }
96
+ const PREFLIGHT_OFF_HINT = `If your engine build implements this op but does not advertise it yet, set ${CAPABILITY_PREFLIGHT_ENV}=off in the MCP server's environment to skip this pre-flight and let the engine answer.`;
97
+ function stringList(value) {
98
+ if (!Array.isArray(value))
99
+ return undefined;
100
+ return value.filter((entry) => typeof entry === "string");
101
+ }
102
+ function finiteNumber(value) {
103
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
104
+ }
105
+ /** Parse a raw `capabilities.events` value. Any plain object counts as an
106
+ * advert (an engine may advertise `events: {}`); anything else is "absent". */
107
+ function parseEventsCapability(raw) {
108
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
109
+ return undefined;
110
+ const record = raw;
111
+ const out = {};
112
+ const kinds = stringList(record.kinds);
113
+ if (kinds)
114
+ out.kinds = kinds;
115
+ for (const key of ["ring", "retainMs", "maxPayloadBytes", "maxStreams", "heartbeatMs"]) {
116
+ const value = finiteNumber(record[key]);
117
+ if (value !== undefined)
118
+ out[key] = value;
119
+ }
120
+ for (const key of ["sse", "poll"]) {
121
+ if (typeof record[key] === "boolean")
122
+ out[key] = record[key];
123
+ }
124
+ return out;
125
+ }
126
+ function parseRuntimeControl(raw) {
127
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
128
+ return undefined;
129
+ const record = raw;
130
+ const out = {};
131
+ const ops = stringList(record.ops);
132
+ if (ops)
133
+ out.ops = ops;
134
+ if (typeof record.summerCapture === "boolean")
135
+ out.summerCapture = record.summerCapture;
136
+ if (typeof record.maxOffscreenInstances === "number" && Number.isFinite(record.maxOffscreenInstances)) {
137
+ out.maxOffscreenInstances = record.maxOffscreenInstances;
138
+ }
139
+ return Object.keys(out).length > 0 ? out : undefined;
140
+ }
141
+ /** Every op kind the engine advertises: `opKinds` plus the
142
+ * `runtimeControl.ops` block (an engine may list the runtime kinds only
143
+ * there). Undefined when the engine advertises no op list at all. */
144
+ export function advertisedOpKinds(capabilities) {
145
+ if (!capabilities?.opKinds)
146
+ return undefined;
147
+ return new Set([...capabilities.opKinds, ...(capabilities.runtimeControl?.ops ?? [])]);
148
+ }
149
+ /** Parse a raw /api/health `capabilities` value. Tolerates any shape; returns
150
+ * undefined when nothing usable is advertised. Never throws. */
151
+ export function parseEngineCapabilities(raw) {
152
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
153
+ return undefined;
154
+ const record = raw;
155
+ const out = {};
156
+ const rawProtocol = record.protocolVersion;
157
+ const protocolVersion = typeof rawProtocol === "number"
158
+ ? rawProtocol
159
+ : typeof rawProtocol === "string" && /^\d+$/.test(rawProtocol)
160
+ ? Number.parseInt(rawProtocol, 10)
161
+ : undefined;
162
+ if (protocolVersion !== undefined)
163
+ out.protocolVersion = protocolVersion;
164
+ const opKinds = stringList(record.opKinds);
165
+ if (opKinds)
166
+ out.opKinds = opKinds;
167
+ const singleOnlyOps = stringList(record.singleOnlyOps);
168
+ if (singleOnlyOps)
169
+ out.singleOnlyOps = singleOnlyOps;
170
+ const events = parseEventsCapability(record.events);
171
+ if (events)
172
+ out.events = events;
173
+ const runtimeControl = parseRuntimeControl(record.runtimeControl);
174
+ if (runtimeControl)
175
+ out.runtimeControl = runtimeControl;
176
+ const navigation = parseNavigation(record.navigation);
177
+ if (navigation)
178
+ out.navigation = navigation;
179
+ const launchPostures = stringList(record.launchPostures) ?? stringList(record.launch_postures);
180
+ if (launchPostures)
181
+ out.launchPostures = launchPostures;
182
+ return Object.keys(out).length > 0 ? out : undefined;
183
+ }
184
+ function parseNavigation(raw) {
185
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
186
+ return undefined;
187
+ const record = raw;
188
+ if (!Array.isArray(record.targets))
189
+ return undefined;
190
+ const targets = [];
191
+ for (const entry of record.targets) {
192
+ if (!entry || typeof entry !== "object")
193
+ continue;
194
+ const item = entry;
195
+ if (typeof item.id !== "string" || item.id.length === 0)
196
+ continue;
197
+ const args = stringList(item.args);
198
+ targets.push({
199
+ id: item.id,
200
+ ...(typeof item.title === "string" ? { title: item.title } : {}),
201
+ ...(args ? { args } : {}),
202
+ });
203
+ }
204
+ const version = typeof record.version === "number" ? record.version : undefined;
205
+ return { ...(version !== undefined ? { version } : {}), targets };
206
+ }
207
+ /**
208
+ * True ONLY when the engine advertises an op list and `op` is not on it. An
209
+ * engine without an advert returns false — we cannot prove absence, so the
210
+ * call goes through and the per-tool "unknown op" hint handles the failure.
211
+ */
212
+ export function engineLacksOp(capabilities, op) {
213
+ const advertised = advertisedOpKinds(capabilities);
214
+ if (!advertised)
215
+ return false;
216
+ return !advertised.has(op);
217
+ }
218
+ /**
219
+ * The structured result a tool returns when the engine provably lacks its op.
220
+ * Shaped like an engine op failure ({ok:false, op, error, failure_reason}) so
221
+ * withEngine/extractOpError classify it the same way, and the model reads the
222
+ * upgrade path instead of retrying.
223
+ */
224
+ export function buildMissingOpResult(op, engineVersion, fallback) {
225
+ const version = engineVersion ?? null;
226
+ return {
227
+ ok: false,
228
+ op,
229
+ failure_reason: "engine_lacks_op",
230
+ engine_version: version,
231
+ error: `This Summer Engine build${version ? ` (engine version ${version})` : ""} does not support the ${op} op — ` +
232
+ "nothing was sent. Update Summer Engine (restart it after updating). " +
233
+ `Until then: ${fallback}. ${PREFLIGHT_OFF_HINT}`,
234
+ hint: `${fallback}. ${PREFLIGHT_OFF_HINT}`,
235
+ };
236
+ }
237
+ // ---------------------------------------------------------------------------
238
+ // Events channel pre-flight (a capability, not an op — deliberately NOT folded
239
+ // into CLI_KNOWN_OP_NEEDS / engineLacksOp)
240
+ // ---------------------------------------------------------------------------
241
+ /**
242
+ * True when the engine does NOT advertise the events channel. Unlike ops,
243
+ * where an absent `opKinds` list proves nothing (ops predate the advert), the
244
+ * events channel and its `capabilities.events` advert ship together: a build
245
+ * with the channel always advertises it, so absence — including an engine that
246
+ * advertises no capabilities at all — is proof.
247
+ */
248
+ export function engineLacksEvents(capabilities) {
249
+ return !capabilities?.events;
250
+ }
251
+ /** What the events tools tell the model to do when the channel is missing. */
252
+ export const EVENTS_FALLBACK = "poll the state you are waiting for instead (summer_is_running after summer_play; summer_get_debugger_errors / summer_get_console for script errors; summer_get_scene_tree after a long op)";
253
+ const EVENTS_PREFLIGHT_OFF_HINT = `If your engine build serves GET /api/events/poll but does not advertise capabilities.events yet, set ${CAPABILITY_PREFLIGHT_ENV}=off in the MCP server's environment to skip this pre-flight and let the engine answer.`;
254
+ /**
255
+ * The structured result an events tool returns when the engine provably lacks
256
+ * the channel. Shaped like buildMissingOpResult ({ok:false, failure_reason,
257
+ * engine_version, error, hint}) so withEngine/extractOpError classify it the
258
+ * same way and `summer tool` prints it whole — but under its own
259
+ * failure_reason, because no op was ever involved.
260
+ */
261
+ export function buildMissingEventsResult(engineVersion, fallback = EVENTS_FALLBACK) {
262
+ const version = engineVersion ?? null;
263
+ return {
264
+ ok: false,
265
+ failure_reason: "engine_lacks_events",
266
+ engine_version: version,
267
+ error: `This Summer Engine build${version ? ` (engine version ${version})` : ""} does not expose the events channel ` +
268
+ "(no capabilities.events in /api/health) — nothing was sent. Update Summer Engine to a build with the events channel " +
269
+ `(restart it after updating). Until then: ${fallback}. ${EVENTS_PREFLIGHT_OFF_HINT}`,
270
+ hint: `${fallback}. ${EVENTS_PREFLIGHT_OFF_HINT}`,
271
+ };
272
+ }
273
+ /**
274
+ * Capability pre-flight for the events tools (summer_wait_for_event,
275
+ * summer_recent_events, `summer events`). Returns a structured
276
+ * engine_lacks_events result (nothing is sent) when the engine's /api/health
277
+ * advert lacks `capabilities.events`; null when the channel is advertised or
278
+ * the SUMMER_CAPABILITY_PREFLIGHT=off escape hatch is set. Sibling of
279
+ * missingEngineOpResult — kept separate because events are a capability, not
280
+ * an op kind.
281
+ */
282
+ export function missingEngineEventsResult(client, fallback = EVENTS_FALLBACK) {
283
+ if (isCapabilityPreflightDisabled())
284
+ return null;
285
+ const capabilities = typeof client.getEngineCapabilities === "function"
286
+ ? client.getEngineCapabilities()
287
+ : undefined;
288
+ if (!engineLacksEvents(capabilities))
289
+ return null;
290
+ const version = typeof client.getEngineVersion === "function" ? client.getEngineVersion() : undefined;
291
+ return buildMissingEventsResult(version ?? null, fallback);
292
+ }
293
+ /**
294
+ * Build the one-line skew warning from a raw /api/health payload, or null when
295
+ * there is nothing trustworthy to say (no capabilities advertised, or no skew).
296
+ * Shape-tolerant: never throws on odd payloads.
297
+ */
298
+ export function buildCapabilitySkewWarning(health) {
299
+ if (!health || typeof health !== "object")
300
+ return null;
301
+ const capabilities = parseEngineCapabilities(health.capabilities);
302
+ if (!capabilities)
303
+ return null;
304
+ const parts = [];
305
+ if (capabilities.protocolVersion !== undefined &&
306
+ capabilities.protocolVersion !== CLI_PROTOCOL_VERSION) {
307
+ parts.push(`engine protocolVersion ${capabilities.protocolVersion} != CLI protocolVersion ${CLI_PROTOCOL_VERSION}`);
308
+ }
309
+ const advertised = advertisedOpKinds(capabilities);
310
+ if (advertised) {
311
+ const missing = CLI_KNOWN_OP_NEEDS.filter((op) => !advertised.has(op));
312
+ if (missing.length > 0) {
313
+ parts.push(`engine does not advertise ${missing.length} op(s) this CLI can send (${missing.join(", ")})`);
314
+ }
315
+ }
316
+ if (parts.length === 0)
317
+ return null;
318
+ const preflight = isCapabilityPreflightDisabled()
319
+ ? `Non-fatal — ${CAPABILITY_PREFLIGHT_ENV}=off is set, so affected tools are sent anyway and the engine's own unknown-op error decides.`
320
+ : `Non-fatal — affected tools return a structured engine_lacks_op result instead of running (set ${CAPABILITY_PREFLIGHT_ENV}=off to send them anyway if your engine implements an op it does not advertise).`;
321
+ return (`Engine/CLI version skew detected: ${parts.join("; ")}. ` +
322
+ `${preflight} Update Summer Engine (or the summer-engine CLI) so both sides match.`);
323
+ }
324
+ // ---------------------------------------------------------------------------
325
+ // Single-only dispatch classification
326
+ // ---------------------------------------------------------------------------
327
+ /**
328
+ * Engine ops that MUST be dispatched as their own single-op request. Mirrors
329
+ * _summer_requires_single_async_dispatch (local_api_server.cpp, engine
330
+ * 0.5.60+): the engine rejects any multi-op batch containing one of these
331
+ * WHOLESALE — nothing in the batch executes, and the batch fails with per-op
332
+ * failure_reason "unsupported_transport"/"skipped". Git ops are covered by a
333
+ * prefix check in the dispatchers.
334
+ *
335
+ * This hardcoded list is the FALLBACK for engines that predate the
336
+ * /api/health `capabilities.singleOnlyOps` advert; when the engine advertises
337
+ * its own list, that list is authoritative (resolveSingleOnlyOps).
338
+ */
339
+ export const FALLBACK_SINGLE_ONLY_OPS = new Set([
340
+ "SaveScene", "InstantiateScene", "ReplaceNode",
341
+ "SimulateInput", "ViewportSnapshot", "GameSnapshot",
342
+ // Runtime debugger reads share GameSnapshot's async single-only dispatch
343
+ // classification.
344
+ "GetRuntimeSceneTree", "GetRuntimeNode",
345
+ "RunCommand", "RunVerification", "RunEditorScript", "RunSceneScript",
346
+ "ImportFromUrl", "ImportFromUrlBatch", "ExtractZipFromUrl",
347
+ // Mesh fabrication: a headless Blender child on the same async single-op lane as
348
+ // RunEditorScript (local_api_server.cpp SUMMER_SINGLE_ASYNC_OPS).
349
+ "FabricateMesh",
350
+ // runtime control (RuntimeOps::async_op_kinds): every op below rides
351
+ // the `summer` debugger capture, so like GameSnapshot each needs the async
352
+ // single-op reply channel. ListGameInstances is deliberately NOT here — it
353
+ // is a cheap synchronous editor read that batches fine (runtime_ops.h).
354
+ "SetRuntimeProp", "CallRuntimeMethod", "SpawnRuntimeScene", "FreeRuntimeNode",
355
+ "RuntimeAnimation", "RuntimeAnimationTree", "GetRuntimeBones",
356
+ "GamePause", "GameSpeed", "GameStep",
357
+ "SimulateInputScript", "InputRecordStart", "InputRecordStop", "InputReplay",
358
+ "GameProbe",
359
+ ]);
360
+ /** The single-only op set for THIS engine: its advertised
361
+ * `capabilities.singleOnlyOps` when present, else the hardcoded fallback. An
362
+ * empty advertised list counts as no advert — never as "everything batches". */
363
+ export function resolveSingleOnlyOps(client) {
364
+ const advertised = typeof client.getEngineCapabilities === "function"
365
+ ? client.getEngineCapabilities()?.singleOnlyOps
366
+ : undefined;
367
+ return advertised && advertised.length > 0 ? new Set(advertised) : FALLBACK_SINGLE_ONLY_OPS;
368
+ }
369
+ /**
370
+ * Capability pre-flight for tools that depend on an op an older engine may
371
+ * lack. Returns a structured engine_lacks_op result (nothing is sent) when
372
+ * the engine's /api/health advert PROVES the op is missing; null otherwise —
373
+ * including for engines that advertise nothing, where the per-tool
374
+ * "unknown op" hint still covers the failure at call time.
375
+ */
376
+ export function missingEngineOpResult(client, op, fallback) {
377
+ if (isCapabilityPreflightDisabled())
378
+ return null;
379
+ const capabilities = typeof client.getEngineCapabilities === "function"
380
+ ? client.getEngineCapabilities()
381
+ : undefined;
382
+ if (!engineLacksOp(capabilities, op))
383
+ return null;
384
+ const version = typeof client.getEngineVersion === "function" ? client.getEngineVersion() : undefined;
385
+ return buildMissingOpResult(op, version ?? null, fallback);
386
+ }
@@ -16,5 +16,15 @@ export declare function getConfigValue(config: SummerConfig, key: ConfigKey): st
16
16
  export declare function setConfigValue(key: ConfigKey, rawValue: string): Promise<SummerConfig>;
17
17
  export declare function unsetConfigValue(key: ConfigKey): Promise<SummerConfig>;
18
18
  export declare function isConfigKey(value: string): value is ConfigKey;
19
- export declare function getGatewayUrl(): Promise<string>;
19
+ /**
20
+ * The ONE gateway base URL for every Summer gateway call: login, generation,
21
+ * asset search/get, job polling, telemetry, and library feedback all resolve
22
+ * through here so a token minted against one gateway is never posted to
23
+ * another. Precedence: SUMMER_GATEWAY_URL env > ~/.summer/config.json
24
+ * gateway.url > production. Resolved at CALL time (never at import) so a
25
+ * config change is seen by every caller in the same process, and validated on
26
+ * every read: HTTPS only, except plain HTTP to loopback for local development.
27
+ * Returns an origin-like base without a trailing slash.
28
+ */
29
+ export declare function resolveGatewayUrl(): Promise<string>;
20
30
  export declare function getCreatorApiUrl(): Promise<string>;
@@ -129,12 +129,23 @@ export async function unsetConfigValue(key) {
129
129
  export function isConfigKey(value) {
130
130
  return CONFIG_KEYS.includes(value);
131
131
  }
132
- export async function getGatewayUrl() {
132
+ /**
133
+ * The ONE gateway base URL for every Summer gateway call: login, generation,
134
+ * asset search/get, job polling, telemetry, and library feedback all resolve
135
+ * through here so a token minted against one gateway is never posted to
136
+ * another. Precedence: SUMMER_GATEWAY_URL env > ~/.summer/config.json
137
+ * gateway.url > production. Resolved at CALL time (never at import) so a
138
+ * config change is seen by every caller in the same process, and validated on
139
+ * every read: HTTPS only, except plain HTTP to loopback for local development.
140
+ * Returns an origin-like base without a trailing slash.
141
+ */
142
+ export async function resolveGatewayUrl() {
133
143
  const environment = process.env.SUMMER_GATEWAY_URL?.trim();
134
144
  if (environment)
135
145
  return validateGatewayUrl(environment);
136
146
  const config = await readSummerConfig();
137
- return config.gateway?.url ?? DEFAULT_GATEWAY_URL;
147
+ const configured = config.gateway?.url?.trim();
148
+ return configured ? validateGatewayUrl(configured) : DEFAULT_GATEWAY_URL;
138
149
  }
139
150
  export async function getCreatorApiUrl() {
140
151
  const config = await readSummerConfig();
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Embeddings — the one implementation of the wire protocol, the vector
3
+ * encoding, and the vector math behind semantic library search.
4
+ *
5
+ * Shared by the runtime (src/core/library-search.ts: embed the QUERY) and the
6
+ * registry compiler (scripts/generate-registry/embed.ts: embed every ENTRY
7
+ * into registry/generated/embeddings.json). Deliberately free of relative
8
+ * imports so the compiler script can load it as plain TypeScript the way
9
+ * evals/routing/runner.ts loads registry-search.ts.
10
+ *
11
+ * Provider protocol (SUMMER_EMBED_URL, or <gateway>/api/mcp/embed):
12
+ * POST { text } -> 2xx JSON { vector: number[], model?: string }
13
+ * Anything else — non-2xx, timeout, malformed body, wrong dims — is a
14
+ * provider failure. Callers decide what that means (the runtime degrades to
15
+ * lexical search; the compiler aborts the embed step).
16
+ *
17
+ * File format (registry/generated/embeddings.json), a sidecar of index.json:
18
+ * { _generated, model, dims, encoding: "base64-float32",
19
+ * entries: { "<id>": { content_hash, vector: "<base64 float32 LE>" } } }
20
+ * base64 float32 is ~2x smaller than rounded JSON number arrays and ~5x
21
+ * smaller than full-precision ones (measured on 384-dim vectors), and
22
+ * lossless for float32 providers.
23
+ */
24
+ export declare const EMBEDDINGS_FILE = "embeddings.json";
25
+ export declare const EMBEDDINGS_ENCODING = "base64-float32";
26
+ export declare const EMBED_PATH = "/api/mcp/embed";
27
+ export interface EmbeddingsEntry {
28
+ content_hash: string;
29
+ /** base64-encoded little-endian float32 array (EMBEDDINGS_ENCODING). */
30
+ vector: string;
31
+ }
32
+ export interface EmbeddingsFile {
33
+ _generated?: string;
34
+ model: string;
35
+ dims: number;
36
+ encoding: typeof EMBEDDINGS_ENCODING;
37
+ entries: Record<string, EmbeddingsEntry>;
38
+ }
39
+ export interface EmbedResponse {
40
+ vector: number[];
41
+ model?: string;
42
+ }
43
+ export type EmbedProvider = (text: string) => Promise<EmbedResponse>;
44
+ export interface EmbedProviderOptions {
45
+ url: string;
46
+ /** Summer account token; sent as an Authorization header when present. */
47
+ token?: string | null;
48
+ timeoutMs: number;
49
+ fetchImpl?: typeof fetch;
50
+ }
51
+ export declare function encodeVector(vector: readonly number[]): string;
52
+ export declare function decodeVector(encoded: string): Float32Array;
53
+ export declare function cosineSimilarity(a: ArrayLike<number>, b: ArrayLike<number>): number;
54
+ /** Reciprocal rank fusion (Cormack et al. 2009): score(d) = sum over lists of
55
+ * 1 / (k + rank), rank starting at 1. Ties break on id for determinism. */
56
+ export declare const RRF_K = 60;
57
+ export declare function reciprocalRankFusion(rankedLists: ReadonlyArray<readonly string[]>, k?: number): Array<{
58
+ id: string;
59
+ score: number;
60
+ }>;
61
+ export interface EmbeddableEntry {
62
+ summary?: unknown;
63
+ use_when?: unknown;
64
+ facets?: unknown;
65
+ }
66
+ /** The text an entry is embedded from: summary + use_when + facets. Same
67
+ * function at compile time and (for tests/tools) at runtime so the two can
68
+ * never drift. */
69
+ export declare function buildEmbeddingText(entry: EmbeddableEntry): string;
70
+ /** Shape-tolerant parse; returns null for anything unusable so callers can
71
+ * fall back to lexical search instead of throwing. */
72
+ export declare function parseEmbeddingsFile(json: unknown): EmbeddingsFile | null;
73
+ /**
74
+ * Build a provider: POST { text } to `url`, expect { vector, model? }.
75
+ * Throws on every failure mode (network, timeout, non-2xx, malformed body).
76
+ * Never logs: the runtime caller runs inside a stdio MCP server.
77
+ */
78
+ export declare function createEmbedProvider(options: EmbedProviderOptions): EmbedProvider;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Embeddings — the one implementation of the wire protocol, the vector
3
+ * encoding, and the vector math behind semantic library search.
4
+ *
5
+ * Shared by the runtime (src/core/library-search.ts: embed the QUERY) and the
6
+ * registry compiler (scripts/generate-registry/embed.ts: embed every ENTRY
7
+ * into registry/generated/embeddings.json). Deliberately free of relative
8
+ * imports so the compiler script can load it as plain TypeScript the way
9
+ * evals/routing/runner.ts loads registry-search.ts.
10
+ *
11
+ * Provider protocol (SUMMER_EMBED_URL, or <gateway>/api/mcp/embed):
12
+ * POST { text } -> 2xx JSON { vector: number[], model?: string }
13
+ * Anything else — non-2xx, timeout, malformed body, wrong dims — is a
14
+ * provider failure. Callers decide what that means (the runtime degrades to
15
+ * lexical search; the compiler aborts the embed step).
16
+ *
17
+ * File format (registry/generated/embeddings.json), a sidecar of index.json:
18
+ * { _generated, model, dims, encoding: "base64-float32",
19
+ * entries: { "<id>": { content_hash, vector: "<base64 float32 LE>" } } }
20
+ * base64 float32 is ~2x smaller than rounded JSON number arrays and ~5x
21
+ * smaller than full-precision ones (measured on 384-dim vectors), and
22
+ * lossless for float32 providers.
23
+ */
24
+ export const EMBEDDINGS_FILE = "embeddings.json";
25
+ export const EMBEDDINGS_ENCODING = "base64-float32";
26
+ export const EMBED_PATH = "/api/mcp/embed";
27
+ // ── Vector encoding ────────────────────────────────────────────────────────
28
+ export function encodeVector(vector) {
29
+ const floats = new Float32Array(vector.length);
30
+ for (let i = 0; i < vector.length; i++)
31
+ floats[i] = vector[i];
32
+ return Buffer.from(floats.buffer, floats.byteOffset, floats.byteLength).toString("base64");
33
+ }
34
+ export function decodeVector(encoded) {
35
+ const bytes = Buffer.from(encoded, "base64");
36
+ if (bytes.byteLength % 4 !== 0)
37
+ throw new Error("embedding vector: byte length is not a multiple of 4");
38
+ // Copy into an aligned buffer: Buffer slices from the pool are not 4-aligned.
39
+ const aligned = new ArrayBuffer(bytes.byteLength);
40
+ new Uint8Array(aligned).set(bytes);
41
+ return new Float32Array(aligned);
42
+ }
43
+ // ── Vector math ────────────────────────────────────────────────────────────
44
+ export function cosineSimilarity(a, b) {
45
+ if (a.length !== b.length || a.length === 0)
46
+ return 0;
47
+ let dot = 0;
48
+ let na = 0;
49
+ let nb = 0;
50
+ for (let i = 0; i < a.length; i++) {
51
+ dot += a[i] * b[i];
52
+ na += a[i] * a[i];
53
+ nb += b[i] * b[i];
54
+ }
55
+ if (na === 0 || nb === 0)
56
+ return 0;
57
+ return dot / (Math.sqrt(na) * Math.sqrt(nb));
58
+ }
59
+ /** Reciprocal rank fusion (Cormack et al. 2009): score(d) = sum over lists of
60
+ * 1 / (k + rank), rank starting at 1. Ties break on id for determinism. */
61
+ export const RRF_K = 60;
62
+ export function reciprocalRankFusion(rankedLists, k = RRF_K) {
63
+ const scores = new Map();
64
+ for (const list of rankedLists) {
65
+ list.forEach((id, index) => {
66
+ scores.set(id, (scores.get(id) ?? 0) + 1 / (k + index + 1));
67
+ });
68
+ }
69
+ return [...scores.entries()]
70
+ .map(([id, score]) => ({ id, score }))
71
+ .sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
72
+ }
73
+ /** The text an entry is embedded from: summary + use_when + facets. Same
74
+ * function at compile time and (for tests/tools) at runtime so the two can
75
+ * never drift. */
76
+ export function buildEmbeddingText(entry) {
77
+ const parts = [];
78
+ if (typeof entry.summary === "string")
79
+ parts.push(entry.summary.trim());
80
+ if (Array.isArray(entry.use_when)) {
81
+ for (const line of entry.use_when)
82
+ if (typeof line === "string")
83
+ parts.push(line.trim());
84
+ }
85
+ if (entry.facets && typeof entry.facets === "object" && !Array.isArray(entry.facets)) {
86
+ const facetWords = [];
87
+ for (const value of Object.values(entry.facets)) {
88
+ if (Array.isArray(value))
89
+ for (const v of value)
90
+ if (typeof v === "string")
91
+ facetWords.push(v);
92
+ }
93
+ if (facetWords.length > 0)
94
+ parts.push(facetWords.join(" "));
95
+ }
96
+ return parts.filter((p) => p.length > 0).join("\n");
97
+ }
98
+ // ── File parsing ───────────────────────────────────────────────────────────
99
+ /** Shape-tolerant parse; returns null for anything unusable so callers can
100
+ * fall back to lexical search instead of throwing. */
101
+ export function parseEmbeddingsFile(json) {
102
+ if (!json || typeof json !== "object" || Array.isArray(json))
103
+ return null;
104
+ const raw = json;
105
+ if (raw.encoding !== EMBEDDINGS_ENCODING)
106
+ return null;
107
+ if (typeof raw.dims !== "number" || !Number.isInteger(raw.dims) || raw.dims <= 0)
108
+ return null;
109
+ if (!raw.entries || typeof raw.entries !== "object" || Array.isArray(raw.entries))
110
+ return null;
111
+ const entries = {};
112
+ for (const [id, value] of Object.entries(raw.entries)) {
113
+ if (!value || typeof value !== "object")
114
+ continue;
115
+ const entry = value;
116
+ if (typeof entry.content_hash !== "string" || typeof entry.vector !== "string")
117
+ continue;
118
+ entries[id] = { content_hash: entry.content_hash, vector: entry.vector };
119
+ }
120
+ return {
121
+ _generated: typeof raw._generated === "string" ? raw._generated : undefined,
122
+ model: typeof raw.model === "string" ? raw.model : "unknown",
123
+ dims: raw.dims,
124
+ encoding: EMBEDDINGS_ENCODING,
125
+ entries,
126
+ };
127
+ }
128
+ // ── Provider client ────────────────────────────────────────────────────────
129
+ function isFiniteNumberArray(value) {
130
+ return Array.isArray(value) && value.length > 0 && value.every((n) => typeof n === "number" && Number.isFinite(n));
131
+ }
132
+ /**
133
+ * Build a provider: POST { text } to `url`, expect { vector, model? }.
134
+ * Throws on every failure mode (network, timeout, non-2xx, malformed body).
135
+ * Never logs: the runtime caller runs inside a stdio MCP server.
136
+ */
137
+ export function createEmbedProvider(options) {
138
+ const fetchImpl = options.fetchImpl ?? fetch;
139
+ return async (text) => {
140
+ const controller = new AbortController();
141
+ const timer = setTimeout(() => controller.abort(), options.timeoutMs);
142
+ try {
143
+ const headers = { "Content-Type": "application/json" };
144
+ if (options.token)
145
+ headers.Authorization = `Bearer ${options.token}`;
146
+ const response = await fetchImpl(options.url, {
147
+ method: "POST",
148
+ headers,
149
+ body: JSON.stringify({ text }),
150
+ signal: controller.signal,
151
+ });
152
+ if (!response.ok)
153
+ throw new Error(`embedding provider responded ${response.status}`);
154
+ const body = (await response.json());
155
+ if (!isFiniteNumberArray(body.vector))
156
+ throw new Error("embedding provider returned no numeric vector");
157
+ return {
158
+ vector: body.vector,
159
+ ...(typeof body.model === "string" && body.model ? { model: body.model } : {}),
160
+ };
161
+ }
162
+ finally {
163
+ clearTimeout(timer);
164
+ }
165
+ };
166
+ }