summer-engine 2.8.2 → 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 +131 -44
  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 +138 -24
  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/library/skills/host-authoritative-state/resource.yaml +28 -0
  367. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  368. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  369. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  370. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  371. package/library/skills/investigating-bugs/resource.yaml +24 -0
  372. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  373. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  374. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  375. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  376. package/library/skills/make-game/resource.yaml +35 -0
  377. package/library/skills/music-track/resource.yaml +28 -0
  378. package/library/skills/navigate-summer/SKILL.md +61 -0
  379. package/library/skills/navigate-summer/resource.yaml +35 -0
  380. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  381. package/library/skills/new-project/resource.yaml +28 -0
  382. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  383. package/library/skills/organic-model/resource.yaml +32 -0
  384. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  385. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  386. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  387. package/library/skills/pixel-art/resource.yaml +31 -0
  388. package/library/skills/play/resource.yaml +26 -0
  389. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  390. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  391. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  392. package/library/skills/procedural-animation/resource.yaml +33 -0
  393. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  394. package/library/skills/prop-model/resource.yaml +33 -0
  395. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  396. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  397. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  398. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  399. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  400. package/library/skills/remote-deploy/resource.yaml +23 -0
  401. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  402. package/library/skills/retarget/resource.yaml +33 -0
  403. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  404. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  405. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  406. package/library/skills/scene-composition/resource.yaml +27 -0
  407. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  408. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  409. package/library/skills/scene-scripting/SKILL.md +764 -0
  410. package/library/skills/scene-scripting/resource.yaml +58 -0
  411. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  412. package/library/skills/scene-to-level/resource.yaml +33 -0
  413. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  414. package/library/skills/skill-create/SKILL.md +138 -0
  415. package/library/skills/skill-create/resource.yaml +25 -0
  416. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  417. package/library/skills/skill-improve/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  419. package/library/skills/skill-test/resource.yaml +26 -0
  420. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  421. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  422. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  423. package/library/skills/skybox-panorama/resource.yaml +28 -0
  424. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  425. package/library/skills/sound-effect/resource.yaml +27 -0
  426. package/library/skills/spatial-placement/SKILL.md +74 -0
  427. package/library/skills/spatial-placement/resource.yaml +42 -0
  428. package/library/skills/spatial-placement/tests/spec.md +65 -0
  429. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  430. package/library/skills/sprite-sheet/resource.yaml +32 -0
  431. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  432. package/library/skills/tileable-texture/resource.yaml +31 -0
  433. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  434. package/library/skills/trailer-shot/resource.yaml +27 -0
  435. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  436. package/library/skills/tune-performance/resource.yaml +31 -0
  437. package/library/skills/ui-basics/resource.yaml +25 -0
  438. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  439. package/library/skills/ui-graphics/resource.yaml +29 -0
  440. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  441. package/library/skills/use-widget-asset/resource.yaml +29 -0
  442. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  443. package/library/skills/using-summer/resource.yaml +41 -0
  444. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  445. package/library/skills/vehicle-model/resource.yaml +34 -0
  446. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  447. package/library/skills/verification-before-completion/resource.yaml +23 -0
  448. package/library/skills/verifying-scenes/SKILL.md +98 -0
  449. package/library/skills/verifying-scenes/resource.yaml +42 -0
  450. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  451. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  452. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  453. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  454. package/library/skills/vfx-fire/resource.yaml +35 -0
  455. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  456. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  457. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  458. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  459. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-lightning/resource.yaml +33 -0
  461. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  462. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  464. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  465. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  467. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  468. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  469. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  470. package/library/skills/vfx-smoke/resource.yaml +32 -0
  471. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  472. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  473. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  474. package/library/skills/voice-line/resource.yaml +27 -0
  475. package/library/skills/world-building-3d/SKILL.md +105 -0
  476. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  477. package/library/skills/world-building-3d/resource.yaml +44 -0
  478. package/library/skills/world-building-3d/tests/spec.md +48 -0
  479. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  480. package/library/skills/writing-plans/resource.yaml +23 -0
  481. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  482. package/library/skills/writing-skills/resource.yaml +29 -0
  483. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  484. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  485. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  486. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  487. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  488. package/library/templates/2d-platformer/resource.yaml +24 -0
  489. package/library/templates/2d-rpg/resource.yaml +21 -0
  490. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  491. package/library/templates/3d-basic/resource.yaml +16 -0
  492. package/library/templates/3d-city-kit/resource.yaml +24 -0
  493. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  494. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  495. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  496. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  497. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  498. package/library/templates/3d-racing-game/resource.yaml +21 -0
  499. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  500. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  501. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  502. package/library/templates/README.md +94 -0
  503. package/library/templates/empty/resource.yaml +16 -0
  504. package/library/tools/add-node/resource.yaml +60 -0
  505. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  506. package/library/tools/api-docs/resource.yaml +57 -0
  507. package/library/tools/batch/resource.yaml +52 -0
  508. package/library/tools/camera-bookmark/resource.yaml +73 -0
  509. package/library/tools/check-job/resource.yaml +45 -0
  510. package/library/tools/clear-console/resource.yaml +40 -0
  511. package/library/tools/connect-signal/resource.yaml +63 -0
  512. package/library/tools/create-debug-report/resource.yaml +67 -0
  513. package/library/tools/create-scene/resource.yaml +59 -0
  514. package/library/tools/creator-config/resource.yaml +63 -0
  515. package/library/tools/creator-publish/resource.yaml +73 -0
  516. package/library/tools/creator-releases/resource.yaml +53 -0
  517. package/library/tools/fabricate-3d/resource.yaml +108 -0
  518. package/library/tools/game-control/resource.yaml +84 -0
  519. package/library/tools/game-input/resource.yaml +159 -0
  520. package/library/tools/game-probe/resource.yaml +90 -0
  521. package/library/tools/generate-3d/resource.yaml +112 -0
  522. package/library/tools/generate-audio/resource.yaml +80 -0
  523. package/library/tools/generate-image/resource.yaml +62 -0
  524. package/library/tools/generate-motion/resource.yaml +66 -0
  525. package/library/tools/generate-video/resource.yaml +66 -0
  526. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  527. package/library/tools/get-asset/resource.yaml +42 -0
  528. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  529. package/library/tools/get-console/resource.yaml +69 -0
  530. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  531. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  532. package/library/tools/get-diagnostics/resource.yaml +42 -0
  533. package/library/tools/get-project-context/resource.yaml +45 -0
  534. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  535. package/library/tools/get-scene-tree/resource.yaml +52 -0
  536. package/library/tools/get-script-errors/resource.yaml +45 -0
  537. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  538. package/library/tools/import-asset/resource.yaml +73 -0
  539. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  540. package/library/tools/import-from-url/resource.yaml +51 -0
  541. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  542. package/library/tools/import-hdri/resource.yaml +69 -0
  543. package/library/tools/input-map-bind/resource.yaml +52 -0
  544. package/library/tools/inspect-node/resource.yaml +46 -0
  545. package/library/tools/inspect-resource/resource.yaml +45 -0
  546. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  547. package/library/tools/instantiate-scene/resource.yaml +62 -0
  548. package/library/tools/is-running/resource.yaml +40 -0
  549. package/library/tools/library-feedback/resource.yaml +89 -0
  550. package/library/tools/list-my-assets/resource.yaml +56 -0
  551. package/library/tools/navigation-probe/resource.yaml +85 -0
  552. package/library/tools/open/resource.yaml +80 -0
  553. package/library/tools/open-main-scene/resource.yaml +40 -0
  554. package/library/tools/open-scene/resource.yaml +46 -0
  555. package/library/tools/play/resource.yaml +91 -0
  556. package/library/tools/project-setting/resource.yaml +53 -0
  557. package/library/tools/read-file/resource.yaml +47 -0
  558. package/library/tools/read-library/resource.yaml +67 -0
  559. package/library/tools/recent-events/resource.yaml +71 -0
  560. package/library/tools/remove-node/resource.yaml +51 -0
  561. package/library/tools/replace-node/resource.yaml +57 -0
  562. package/library/tools/replace-text/resource.yaml +61 -0
  563. package/library/tools/run-editor-script/resource.yaml +61 -0
  564. package/library/tools/run-script/resource.yaml +73 -0
  565. package/library/tools/runtime-animate/resource.yaml +140 -0
  566. package/library/tools/runtime-call/resource.yaml +74 -0
  567. package/library/tools/runtime-set/resource.yaml +80 -0
  568. package/library/tools/runtime-spawn/resource.yaml +95 -0
  569. package/library/tools/save-scene/resource.yaml +50 -0
  570. package/library/tools/screenshot/resource.yaml +112 -0
  571. package/library/tools/search-assets/resource.yaml +67 -0
  572. package/library/tools/search-library/resource.yaml +81 -0
  573. package/library/tools/select-node/resource.yaml +48 -0
  574. package/library/tools/set-prop/resource.yaml +64 -0
  575. package/library/tools/set-resource-property/resource.yaml +66 -0
  576. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  577. package/library/tools/snap-to-surface/resource.yaml +90 -0
  578. package/library/tools/snapshot-diff/resource.yaml +58 -0
  579. package/library/tools/starcast/resource.yaml +120 -0
  580. package/library/tools/start-game-task/resource.yaml +91 -0
  581. package/library/tools/stop/resource.yaml +51 -0
  582. package/library/tools/test-placement/resource.yaml +109 -0
  583. package/library/tools/ui-actions/resource.yaml +77 -0
  584. package/library/tools/ui-activate/resource.yaml +88 -0
  585. package/library/tools/ui-screenshot/resource.yaml +63 -0
  586. package/library/tools/ui-tree/resource.yaml +69 -0
  587. package/library/tools/wait-for-event/resource.yaml +84 -0
  588. package/library/tools/world-snapshot/resource.yaml +60 -0
  589. package/library/tools/write-file/resource.yaml +54 -0
  590. package/package.json +22 -16
  591. package/registry/generated/aliases.json +207 -0
  592. package/registry/generated/counts.json +12 -0
  593. package/registry/generated/gemini-extension.json +122 -0
  594. package/registry/generated/index.json +7709 -0
  595. package/registry/generated/marketplace.claude.json +44 -0
  596. package/registry/generated/mcp.json +13 -0
  597. package/registry/generated/plugin.claude.json +135 -0
  598. package/registry/generated/plugin.codex.json +144 -0
  599. package/registry/generated/plugin.cursor.json +134 -0
  600. package/registry/generated/plugin.factory.json +117 -0
  601. package/registry/generated/skills-registry.json +851 -0
  602. package/registry/generated/templates-registry.json +455 -0
  603. package/registry/schemas/allowed-hosts.json +19 -0
  604. package/registry/schemas/collection.schema.json +68 -0
  605. package/registry/schemas/domains.json +96 -0
  606. package/registry/schemas/example.schema.json +11 -0
  607. package/registry/schemas/reference.schema.json +10 -0
  608. package/registry/schemas/resource.schema.json +154 -0
  609. package/registry/schemas/skill.schema.json +14 -0
  610. package/registry/schemas/template.schema.json +46 -0
  611. package/registry/schemas/tool.schema.json +61 -0
  612. package/_persona/summer/SKILL.md +0 -113
  613. package/dist/bin/postinstall.d.ts +0 -2
  614. package/dist/bin/postinstall.js +0 -3
  615. package/dist/commands/cloud.d.ts +0 -2
  616. package/dist/commands/cloud.js +0 -80
  617. package/dist/commands/create.d.ts +0 -3
  618. package/dist/commands/create.js +0 -171
  619. package/dist/commands/install.d.ts +0 -19
  620. package/dist/commands/install.js +0 -194
  621. package/dist/commands/list.js +0 -67
  622. package/dist/commands/logout.js +0 -13
  623. package/dist/commands/logs.d.ts +0 -2
  624. package/dist/commands/logs.js +0 -19
  625. package/dist/commands/open.d.ts +0 -2
  626. package/dist/commands/open.js +0 -32
  627. package/dist/commands/orchestrator.d.ts +0 -8
  628. package/dist/commands/orchestrator.js +0 -143
  629. package/dist/commands/run.d.ts +0 -2
  630. package/dist/commands/run.js +0 -167
  631. package/dist/commands/status.js +0 -46
  632. package/dist/lib/banner.d.ts +0 -4
  633. package/dist/lib/banner.js +0 -122
  634. package/dist/lib/cloud/api.d.ts +0 -79
  635. package/dist/lib/cloud/api.js +0 -107
  636. package/dist/lib/cloud/apply.d.ts +0 -32
  637. package/dist/lib/cloud/apply.js +0 -294
  638. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  639. package/dist/lib/cloud/checkpoint.js +0 -142
  640. package/dist/lib/cloud/conflicts.d.ts +0 -55
  641. package/dist/lib/cloud/conflicts.js +0 -131
  642. package/dist/lib/cloud/containment.d.ts +0 -8
  643. package/dist/lib/cloud/containment.js +0 -52
  644. package/dist/lib/cloud/diff.d.ts +0 -39
  645. package/dist/lib/cloud/diff.js +0 -138
  646. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  647. package/dist/lib/cloud/engine-bridge.js +0 -139
  648. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  649. package/dist/lib/cloud/hash-cache.js +0 -44
  650. package/dist/lib/cloud/hash.d.ts +0 -10
  651. package/dist/lib/cloud/hash.js +0 -111
  652. package/dist/lib/cloud/http.d.ts +0 -17
  653. package/dist/lib/cloud/http.js +0 -47
  654. package/dist/lib/cloud/lock-path.d.ts +0 -1
  655. package/dist/lib/cloud/lock-path.js +0 -5
  656. package/dist/lib/cloud/lock.d.ts +0 -14
  657. package/dist/lib/cloud/lock.js +0 -143
  658. package/dist/lib/cloud/manifest.d.ts +0 -6
  659. package/dist/lib/cloud/manifest.js +0 -41
  660. package/dist/lib/cloud/paths.d.ts +0 -20
  661. package/dist/lib/cloud/paths.js +0 -90
  662. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  663. package/dist/lib/cloud/project-godot-merge.js +0 -185
  664. package/dist/lib/cloud/rules.d.ts +0 -39
  665. package/dist/lib/cloud/rules.js +0 -159
  666. package/dist/lib/cloud/sync.d.ts +0 -21
  667. package/dist/lib/cloud/sync.js +0 -518
  668. package/dist/lib/cloud/transfer.d.ts +0 -23
  669. package/dist/lib/cloud/transfer.js +0 -184
  670. package/dist/lib/cloud/types.d.ts +0 -62
  671. package/dist/lib/cloud/types.js +0 -1
  672. package/dist/lib/cloud/validate-path.d.ts +0 -23
  673. package/dist/lib/cloud/validate-path.js +0 -103
  674. package/dist/lib/engine.d.ts +0 -51
  675. package/dist/lib/game-task-plan.d.ts +0 -42
  676. package/dist/lib/project-memory.d.ts +0 -33
  677. package/dist/lib/public-surface-paths.d.ts +0 -13
  678. package/dist/lib/public-surface-paths.js +0 -42
  679. package/dist/lib/remote-templates.d.ts +0 -25
  680. package/dist/lib/remote-templates.js +0 -86
  681. package/dist/lib/skills-registry.d.ts +0 -572
  682. package/dist/lib/skills-registry.js +0 -1061
  683. package/dist/lib/version-check.d.ts +0 -106
  684. package/dist/mcp/tools/cloud-tools.js +0 -42
  685. package/references/mcp-tools-reference.md +0 -199
  686. package/references/template-registry.md +0 -73
  687. package/skills/README.md +0 -103
  688. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  689. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  690. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  691. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  692. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  693. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  694. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  695. package/skills/workflow/gameskill/SKILL.md +0 -120
  696. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  697. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  698. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  699. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  700. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  701. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  702. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  703. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  704. package/skills/workflow/skill-create/SKILL.md +0 -153
  705. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  706. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  707. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  708. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  709. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  710. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  711. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  712. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  713. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  719. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  720. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  721. /package/dist/{lib → core}/store.d.ts +0 -0
  722. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  723. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  724. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  725. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  726. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  727. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  728. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  729. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  730. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  731. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  732. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  733. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  734. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  735. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  736. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  737. /package/{skills/ui-and-ux → library/skills}/ui-basics/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
@@ -1,7 +1,8 @@
1
- import { existsSync } from "fs";
2
- import { mkdir, readFile, writeFile } from "fs/promises";
1
+ import { existsSync, readFileSync } from "fs";
2
+ import { copyFile, mkdir, readFile, writeFile } from "fs/promises";
3
3
  import { dirname, join, resolve } from "path";
4
4
  import { fileURLToPath } from "url";
5
+ import { PACKAGE_ROOT } from "../core/package-root.js";
5
6
  import { homedir, platform } from "os";
6
7
  export const SUMMER_MCP_SERVER_NAME = "summer-engine";
7
8
  export const supportedAgents = [
@@ -64,10 +65,31 @@ export function parseScope(value) {
64
65
  return normalized;
65
66
  return null;
66
67
  }
68
+ /** `summer setup [agent] --agent <agent>`: positional and option must agree;
69
+ * throws with a user-facing message when neither names a supported agent. */
70
+ export function resolveAgentSelection(agentArg, agentOpt) {
71
+ if (agentArg && agentOpt && parseAgent(agentArg) !== parseAgent(agentOpt)) {
72
+ throw new Error("Specify the agent either positionally or with --agent, not both.");
73
+ }
74
+ const parsed = parseAgent(agentOpt ?? agentArg);
75
+ if (!parsed) {
76
+ throw new Error(`Specify an agent: ${supportedAgents.join(", ")}`);
77
+ }
78
+ return parsed;
79
+ }
80
+ /** `--scope` with a user-facing error; absent means "user". */
81
+ export function resolveConfigScope(scopeOpt) {
82
+ const parsed = parseScope(scopeOpt);
83
+ if (!parsed) {
84
+ throw new Error("Invalid --scope. Use user or project.");
85
+ }
86
+ return parsed;
87
+ }
67
88
  export async function configureAgentMcp(options) {
68
89
  const env = options.env ?? process.env;
69
90
  const cwd = resolve(options.cwd ?? process.cwd());
70
- const server = createSummerMcpServerConfig(Boolean(options.localDev));
91
+ const channel = normalizeChannel(options.channel);
92
+ const server = createSummerMcpServerConfig(Boolean(options.localDev), process.platform, channel);
71
93
  const target = resolveConfigTarget(options.agent, options.scope, cwd, env);
72
94
  const snippet = renderConfigSnippet(options.agent, server);
73
95
  const dryRun = Boolean(options.dryRun);
@@ -99,11 +121,26 @@ export async function configureAgentMcp(options) {
99
121
  dryRun,
100
122
  print,
101
123
  localDev: Boolean(options.localDev),
124
+ channel,
102
125
  warnings: target.warnings,
103
126
  nextSteps: createNextSteps(options.agent, options.scope, target.path),
104
127
  };
105
128
  }
106
- export function createSummerMcpServerConfig(localDev, platform = process.platform) {
129
+ export const DEFAULT_CHANNEL = "latest";
130
+ /** npm dist-tags are lowercase words like `latest`, `next`, `beta`, `v3-preview`;
131
+ * anything that could be read as a version or a path is refused (a bare
132
+ * version belongs in a version bump, not a channel). */
133
+ export function normalizeChannel(channel) {
134
+ const value = (channel ?? "").trim();
135
+ if (value === "")
136
+ return DEFAULT_CHANNEL;
137
+ if (!/^[a-z][a-z0-9-]*$/.test(value) || /^v?\d/.test(value)) {
138
+ throw new Error(`Invalid channel "${channel}": use an npm dist-tag such as latest or next (lowercase letters, digits, hyphens).`);
139
+ }
140
+ return value;
141
+ }
142
+ export function createSummerMcpServerConfig(localDev, platform = process.platform, channel = DEFAULT_CHANNEL) {
143
+ const spec = `summer-engine@${normalizeChannel(channel)}`;
107
144
  if (localDev) {
108
145
  // node is a real executable on every platform; spawn("node") resolves fine.
109
146
  return {
@@ -118,12 +155,12 @@ export function createSummerMcpServerConfig(localDev, platform = process.platfor
118
155
  if (platform === "win32") {
119
156
  return {
120
157
  command: "cmd.exe",
121
- args: ["/c", "npx", "-y", "summer-engine@latest", "mcp"],
158
+ args: ["/c", "npx", "-y", spec, "mcp"],
122
159
  };
123
160
  }
124
161
  return {
125
162
  command: "npx",
126
- args: ["-y", "summer-engine@latest", "mcp"],
163
+ args: ["-y", spec, "mcp"],
127
164
  };
128
165
  }
129
166
  export function renderConfigSnippet(agent, server) {
@@ -153,7 +190,7 @@ export function renderConfigSnippet(agent, server) {
153
190
  }, null, 2) + "\n");
154
191
  }
155
192
  if (agent === "gemini") {
156
- return (JSON.stringify(geminiExtensionManifest(server), null, 2) + "\n");
193
+ return renderJsonFile(geminiExtensionManifest(server, readBundledGeminiManifestSync()));
157
194
  }
158
195
  return (JSON.stringify({
159
196
  mcpServers: {
@@ -165,6 +202,14 @@ function resolveLocalCliPath() {
165
202
  const thisFile = fileURLToPath(import.meta.url);
166
203
  return resolve(dirname(thisFile), "..", "bin", "summer.js");
167
204
  }
205
+ /** Installed package root (dist/ and src/ alike). */
206
+ export function resolvePackageRoot() {
207
+ return PACKAGE_ROOT;
208
+ }
209
+ /** Directory name Gemini expects the extension under; the manifest `name` must match it. */
210
+ export const GEMINI_EXTENSION_DIR_NAME = "summer-engine";
211
+ /** Files copied next to the extension manifest so `contextFileName` (GEMINI.md, which imports AGENTS.md) resolves. */
212
+ const GEMINI_CONTEXT_FILES = ["GEMINI.md", "AGENTS.md"];
168
213
  function resolveConfigTarget(agent, scope, cwd, env) {
169
214
  const override = getConfigPathOverride(agent, env);
170
215
  const warnings = [];
@@ -459,15 +504,98 @@ async function upsertVsCodeMcpConfig(path, server, write) {
459
504
  }
460
505
  async function upsertGeminiExtension(path, server, write) {
461
506
  const current = await readJsonConfig(path);
462
- const next = geminiExtensionManifest(server, current);
507
+ const bundled = await readBundledGeminiManifest();
508
+ const next = geminiExtensionManifest(server, bundled, current);
463
509
  const currentRendered = renderJsonFile(current);
464
510
  const nextRendered = renderJsonFile(next);
465
- const changed = currentRendered !== nextRendered;
511
+ let changed = currentRendered !== nextRendered;
466
512
  if (write && changed) {
467
513
  await writeTextFile(path, nextRendered);
468
514
  }
515
+ // GEMINI.md (the declared contextFileName) and AGENTS.md (which it imports)
516
+ // must sit next to the manifest or Gemini has no context file to load.
517
+ const extensionDir = dirname(path);
518
+ const packageRoot = resolvePackageRoot();
519
+ for (const name of GEMINI_CONTEXT_FILES) {
520
+ const src = join(packageRoot, name);
521
+ if (!existsSync(src))
522
+ continue;
523
+ const dest = join(extensionDir, name);
524
+ const srcText = await readFile(src, "utf-8");
525
+ const destText = existsSync(dest) ? await readFile(dest, "utf-8") : null;
526
+ if (destText === srcText)
527
+ continue;
528
+ changed = true;
529
+ if (write) {
530
+ await mkdir(extensionDir, { recursive: true, mode: 0o700 });
531
+ await copyFile(src, dest);
532
+ }
533
+ }
469
534
  return { changed };
470
535
  }
536
+ /**
537
+ * The GENERATED gemini-extension.json shipped at the package root
538
+ * (registry/generated/gemini-extension.json -> gemini-extension.json). Absent
539
+ * only in broken installs; the installer then falls back to a minimal manifest.
540
+ */
541
+ async function readBundledGeminiManifest() {
542
+ const path = join(resolvePackageRoot(), "gemini-extension.json");
543
+ if (!existsSync(path))
544
+ return {};
545
+ try {
546
+ return await readJsonConfig(path);
547
+ }
548
+ catch {
549
+ return {};
550
+ }
551
+ }
552
+ function readBundledGeminiManifestSync() {
553
+ const path = join(resolvePackageRoot(), "gemini-extension.json");
554
+ if (!existsSync(path))
555
+ return {};
556
+ try {
557
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
558
+ return isJsonObject(parsed) ? parsed : {};
559
+ }
560
+ catch {
561
+ return {};
562
+ }
563
+ }
564
+ /**
565
+ * Manifest written to ~/.gemini/extensions/summer-engine/gemini-extension.json.
566
+ *
567
+ * Starts from the generated package manifest (version, description, settings,
568
+ * contextFileName, ...) so the installed copy never drifts from the registry,
569
+ * then overrides what only makes sense at install time:
570
+ * - `name` = the extension directory name (Gemini requires them to match;
571
+ * geminicli.com/docs/extensions/reference), which is "summer-engine".
572
+ * - `mcpServers` = the same launcher every other host gets (npx -y ...@latest,
573
+ * cmd.exe-wrapped on Windows). The bundled entry runs from `${extensionPath}`
574
+ * where no package is installed, and that only works inside the npm layout.
575
+ * - `skills` is dropped: Gemini has no such manifest field; it discovers
576
+ * <extension>/skills/<name>/SKILL.md, which `summer skills install --agent
577
+ * gemini` writes.
578
+ * - the `_generated` banner is dropped: this file is written by the installer.
579
+ * Unknown keys already present in the user's file (`base`) are preserved.
580
+ */
581
+ function geminiExtensionManifest(server, bundled, base = {}) {
582
+ const { _generated: _banner, skills: _skills, ...fromPackage } = bundled;
583
+ const manifest = { ...base, ...fromPackage };
584
+ manifest.name = GEMINI_EXTENSION_DIR_NAME;
585
+ if (typeof manifest.description !== "string") {
586
+ manifest.description =
587
+ "Agent tooling for Summer Engine: MCP bridge, context primer, and game-dev skills.";
588
+ }
589
+ manifest.contextFileName = "GEMINI.md";
590
+ manifest.mcpServers = {
591
+ [SUMMER_MCP_SERVER_NAME]: {
592
+ command: server.command,
593
+ args: server.args,
594
+ ...(server.env && Object.keys(server.env).length > 0 ? { env: { ...server.env } } : {}),
595
+ },
596
+ };
597
+ return manifest;
598
+ }
471
599
  function opencodeServerEntry(server) {
472
600
  const entry = {
473
601
  type: "local",
@@ -501,20 +629,6 @@ function vsCodeServerEntry(server) {
501
629
  }
502
630
  return entry;
503
631
  }
504
- function geminiExtensionManifest(server, base = {}) {
505
- const manifest = { ...base };
506
- manifest.name = "summer";
507
- manifest.description =
508
- "Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the Summer skills.";
509
- manifest.contextFileName = "GEMINI.md";
510
- manifest.mcpServers = {
511
- [SUMMER_MCP_SERVER_NAME]: {
512
- command: server.command,
513
- args: server.args,
514
- },
515
- };
516
- return manifest;
517
- }
518
632
  async function readTextFileIfExists(path) {
519
633
  if (!existsSync(path))
520
634
  return "";
@@ -608,7 +722,7 @@ function createNextSteps(agent, scope, path) {
608
722
  : agent === "lm-studio"
609
723
  ? "Open LM Studio, toggle on the summer-engine MCP server in the Program tab, and raise the loaded model's context length to 32k or higher."
610
724
  : agent === "gemini"
611
- ? "Run `gemini extensions enable summer-engine` (if not already enabled), then restart Gemini CLI."
725
+ ? "Run `summer skills install --all --agent gemini` if skills were not installed, then restart Gemini CLI (or `gemini extensions enable summer-engine` if it is disabled)."
612
726
  : agent === "github-copilot"
613
727
  ? "Restart Copilot CLI, or run /mcp reload and /skills reload in the active session."
614
728
  : agent === "vscode-copilot"
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Skill directory names the 2.8.x package installed into hosts' skill folders
3
+ * (`~/.claude/skills/<name>` and the equivalents). v3 flattened and renamed
4
+ * the library, so a `summer setup --force` on an upgraded machine must remove
5
+ * the entries Summer itself installed that no longer exist — otherwise a
6
+ * retired skill such as `summer-cloud` stays behind and keeps telling agents
7
+ * to call tools that were removed (release review P1-2, 2026-09-11).
8
+ *
9
+ * The list is exactly the SKILL.md basenames shipped in summer-engine@2.8.2.
10
+ * Pruning removes a name ONLY when it is absent from the current registry, so
11
+ * a slug that returns to the library is never touched, and never removes a
12
+ * directory that has no SKILL.md (not a skill Summer wrote).
13
+ */
14
+ export declare const LEGACY_SKILL_SLUGS_2_8_2: readonly string[];
15
+ export interface PrunedSkill {
16
+ name: string;
17
+ path: string;
18
+ }
19
+ /** Names Summer installed in 2.8.x that the current registry no longer ships. */
20
+ export declare function retiredSkillNames(currentSkillNames: Iterable<string>): string[];
21
+ /**
22
+ * Remove retired Summer skill directories from one host skill folder. Only
23
+ * directories that still contain a SKILL.md are removed (that is what Summer
24
+ * wrote); anything else with a colliding name is left alone.
25
+ */
26
+ export declare function pruneRetiredSkills(skillsDir: string, currentSkillNames: Iterable<string>): PrunedSkill[];
@@ -0,0 +1,53 @@
1
+ import { existsSync, rmSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * Skill directory names the 2.8.x package installed into hosts' skill folders
5
+ * (`~/.claude/skills/<name>` and the equivalents). v3 flattened and renamed
6
+ * the library, so a `summer setup --force` on an upgraded machine must remove
7
+ * the entries Summer itself installed that no longer exist — otherwise a
8
+ * retired skill such as `summer-cloud` stays behind and keeps telling agents
9
+ * to call tools that were removed (release review P1-2, 2026-09-11).
10
+ *
11
+ * The list is exactly the SKILL.md basenames shipped in summer-engine@2.8.2.
12
+ * Pruning removes a name ONLY when it is absent from the current registry, so
13
+ * a slug that returns to the library is never touched, and never removes a
14
+ * directory that has no SKILL.md (not a skill Summer wrote).
15
+ */
16
+ export const LEGACY_SKILL_SLUGS_2_8_2 = [
17
+ "character-portrait", "concept-art", "create-asset-sheet", "instantiate-asset-pack", "pixel-art",
18
+ "skybox-panorama", "sprite-sheet", "tileable-texture", "ui-graphics", "use-widget-asset",
19
+ "character-model", "environment-kit", "organic-model", "prop-model", "vehicle-model",
20
+ "design-npc", "animation-tree", "facial-and-lipsync", "generate-motion", "procedural-animation",
21
+ "retarget", "asset-strategy", "adaptive-music", "ambient-bed", "audio-direction", "music-track",
22
+ "sound-effect", "voice-line", "fps-controller", "debug", "export-and-ship", "remote-deploy",
23
+ "auto-fire-targeting", "design-mechanic", "design-level", "scene-to-level",
24
+ "host-authoritative-state", "peer-to-peer-multiplayer", "setup-multiplayer", "tune-performance",
25
+ "3d-lighting", "art-direction", "brainstorm-game", "browse-templates", "make-game", "new-project",
26
+ "play", "scene-composition", "summer-cloud", "gdscript-patterns", "ui-basics", "animated-loop",
27
+ "cinematic-cutscene", "trailer-shot", "game-feel", "dissolve", "fire", "hit-spark", "lightning",
28
+ "magic-glow", "muzzle-flash", "smoke", "water-ripple", "brainstorming", "debugging-game-feel",
29
+ "diagnosing-perf-regressions", "dispatching-parallel-agents", "gameskill", "headless-scripting",
30
+ "investigating-bugs", "mcpupdate", "playtesting-a-feature", "skill-create", "skill-improve",
31
+ "skill-test", "using-summer", "verification-before-completion", "writing-plans", "writing-skills",
32
+ ];
33
+ /** Names Summer installed in 2.8.x that the current registry no longer ships. */
34
+ export function retiredSkillNames(currentSkillNames) {
35
+ const current = new Set(currentSkillNames);
36
+ return LEGACY_SKILL_SLUGS_2_8_2.filter((name) => !current.has(name));
37
+ }
38
+ /**
39
+ * Remove retired Summer skill directories from one host skill folder. Only
40
+ * directories that still contain a SKILL.md are removed (that is what Summer
41
+ * wrote); anything else with a colliding name is left alone.
42
+ */
43
+ export function pruneRetiredSkills(skillsDir, currentSkillNames) {
44
+ const pruned = [];
45
+ for (const name of retiredSkillNames(currentSkillNames)) {
46
+ const dir = join(skillsDir, name);
47
+ if (!existsSync(join(dir, "SKILL.md")))
48
+ continue;
49
+ rmSync(dir, { recursive: true, force: true });
50
+ pruned.push({ name, path: dir });
51
+ }
52
+ return pruned;
53
+ }
@@ -0,0 +1,76 @@
1
+ import { SupportedAgent } from "./agent-config.js";
2
+ export interface SkillSetupResult {
3
+ status: "installed" | "planned" | "skipped" | "failed";
4
+ message: string;
5
+ command?: string[];
6
+ stdout?: string;
7
+ stderr?: string;
8
+ /** Number of skills selected for install (all, or the recommended subset). */
9
+ count?: number;
10
+ /** Preview skills installed alongside the stable ones (the default). */
11
+ previewIncluded?: number;
12
+ /** Preview skills left out because --stable-only was given. */
13
+ previewSkipped?: number;
14
+ /** Where the skills land, e.g. "~/.claude/skills/<skill>/SKILL.md". */
15
+ destination?: string;
16
+ /** Post-install tallies parsed from `skills install` output. */
17
+ installed?: {
18
+ total: number;
19
+ added: number;
20
+ updated: number;
21
+ };
22
+ }
23
+ export interface SkillInstallInvocation {
24
+ command: string;
25
+ args: string[];
26
+ display: string[];
27
+ }
28
+ export interface SkillSetupOptions {
29
+ dryRun: boolean;
30
+ yes: boolean;
31
+ force: boolean;
32
+ /** Skills scope; defaults to the MCP scope so both land in the same place. */
33
+ scope?: "user" | "project";
34
+ /** Install only `recommended: true` skills instead of the whole library. */
35
+ recommended?: boolean;
36
+ /** Skip `status: preview` skills. By default they install like any other
37
+ * skill — preview is a label carried in the skill's guidance, not a gate. */
38
+ stableOnly?: boolean;
39
+ }
40
+ /**
41
+ * The preview clause of the setup summary — one wording for the result message
42
+ * and the CLI line, e.g. "10 preview — labelled in each skill's guidance; use
43
+ * --stable-only to skip". Empty when there is nothing to say.
44
+ */
45
+ export declare function previewNote(result: {
46
+ previewIncluded?: number;
47
+ previewSkipped?: number;
48
+ }): string;
49
+ /**
50
+ * Install the Summer skill library for an agent as part of `summer setup`.
51
+ *
52
+ * Installs EVERY library skill by default: skills are progressive-disclosure
53
+ * (name + description in context, body on activation), and the session entry
54
+ * skill `using-summer` is not in the recommended subset, so a
55
+ * recommended-only default left the documented starting point uninstalled.
56
+ * `--recommended` keeps the smaller subset as an opt-in; `--stable-only` drops
57
+ * the preview skills (installed by default, labelled in their guidance).
58
+ */
59
+ export declare function setupSkills(agent: SupportedAgent, options: SkillSetupOptions): SkillSetupResult;
60
+ /** @deprecated use setupSkills; kept for older callers. */
61
+ export declare const setupRecommendedSkills: (agent: SupportedAgent, options: {
62
+ dryRun: boolean;
63
+ yes: boolean;
64
+ force: boolean;
65
+ }) => SkillSetupResult;
66
+ /**
67
+ * Count `skills install` result lines. Directory installs print
68
+ * "Installed <skill> -> <path>" for new copies and "Updated <skill> -> <path>"
69
+ * for re-installs; rule-file agents (Cursor, Cline, ...) always print
70
+ * "Generated <skill> -> <path>" and are counted as updated-or-new (added).
71
+ */
72
+ export declare function tallyInstallOutput(stdout: string): {
73
+ total: number;
74
+ added: number;
75
+ updated: number;
76
+ };
@@ -0,0 +1,146 @@
1
+ import { spawnSync } from "child_process";
2
+ import { AGENT_CLIENTS, getSkillRegistry, selectSkillsForBulkInstall, } from "../core/skills-registry.js";
3
+ import { describeInstallLocation, resolveInstallLocation } from "./skill-locations.js";
4
+ /**
5
+ * The preview clause of the setup summary — one wording for the result message
6
+ * and the CLI line, e.g. "10 preview — labelled in each skill's guidance; use
7
+ * --stable-only to skip". Empty when there is nothing to say.
8
+ */
9
+ export function previewNote(result) {
10
+ if (result.previewIncluded) {
11
+ return `${result.previewIncluded} preview — labelled in each skill's guidance; use --stable-only to skip`;
12
+ }
13
+ if (result.previewSkipped) {
14
+ return `${result.previewSkipped} preview skipped by --stable-only`;
15
+ }
16
+ return "";
17
+ }
18
+ /**
19
+ * Install the Summer skill library for an agent as part of `summer setup`.
20
+ *
21
+ * Installs EVERY library skill by default: skills are progressive-disclosure
22
+ * (name + description in context, body on activation), and the session entry
23
+ * skill `using-summer` is not in the recommended subset, so a
24
+ * recommended-only default left the documented starting point uninstalled.
25
+ * `--recommended` keeps the smaller subset as an opt-in; `--stable-only` drops
26
+ * the preview skills (installed by default, labelled in their guidance).
27
+ */
28
+ export function setupSkills(agent, options) {
29
+ if (agent === "lm-studio") {
30
+ return {
31
+ status: "skipped",
32
+ message: "LM Studio has no rules or skills folder. The MCP server ships summer_get_agent_playbook, so the model can pull Summer guidance in-chat.",
33
+ };
34
+ }
35
+ const scope = options.scope ?? "user";
36
+ const recommended = Boolean(options.recommended);
37
+ const stableOnly = Boolean(options.stableOnly);
38
+ const invocation = skillInstallInvocation(agent, {
39
+ force: options.force,
40
+ scope,
41
+ recommended,
42
+ stableOnly,
43
+ });
44
+ if (!invocation) {
45
+ return {
46
+ status: "skipped",
47
+ message: "No automatic skill installer is available for this agent yet. Run `summer skills install --all` and point the agent at the installed SKILL.md files.",
48
+ };
49
+ }
50
+ const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(getSkillRegistry(), { recommended, stableOnly });
51
+ const count = selected.length;
52
+ const note = previewNote({ previewIncluded, previewSkipped });
53
+ const destination = isAgentClient(agent)
54
+ ? describeInstallLocation(resolveInstallLocation(agent, scope))
55
+ : undefined;
56
+ const subset = recommended ? "recommended " : "";
57
+ if (options.dryRun || !options.yes) {
58
+ return {
59
+ status: "planned",
60
+ command: invocation.display,
61
+ count,
62
+ previewIncluded,
63
+ previewSkipped,
64
+ destination,
65
+ message: `Would install ${count} ${subset}skills${note ? ` (${note})` : ""} to ${destination ?? "the agent's skills directory"} with: ${invocation.display.join(" ")}`,
66
+ };
67
+ }
68
+ const result = spawnSync(invocation.command, invocation.args, {
69
+ env: process.env,
70
+ encoding: "utf-8",
71
+ });
72
+ if (result.status === 0) {
73
+ const installed = tallyInstallOutput(result.stdout);
74
+ return {
75
+ status: "installed",
76
+ command: invocation.display,
77
+ count,
78
+ previewIncluded,
79
+ previewSkipped,
80
+ destination,
81
+ installed,
82
+ message: `Installed ${installed.total} ${subset}skills (${installed.added} new, ${installed.updated} updated${note ? `; ${note}` : ""}).`,
83
+ stdout: result.stdout.trim(),
84
+ stderr: result.stderr.trim(),
85
+ };
86
+ }
87
+ return {
88
+ status: "failed",
89
+ command: invocation.display,
90
+ count,
91
+ destination,
92
+ message: `Skill install failed with exit code ${result.status ?? "unknown"}.`,
93
+ stdout: result.stdout.trim(),
94
+ stderr: result.stderr.trim(),
95
+ };
96
+ }
97
+ /** @deprecated use setupSkills; kept for older callers. */
98
+ export const setupRecommendedSkills = (agent, options) => setupSkills(agent, { ...options, recommended: true });
99
+ function isAgentClient(agent) {
100
+ return AGENT_CLIENTS.includes(agent);
101
+ }
102
+ /**
103
+ * Count `skills install` result lines. Directory installs print
104
+ * "Installed <skill> -> <path>" for new copies and "Updated <skill> -> <path>"
105
+ * for re-installs; rule-file agents (Cursor, Cline, ...) always print
106
+ * "Generated <skill> -> <path>" and are counted as updated-or-new (added).
107
+ */
108
+ export function tallyInstallOutput(stdout) {
109
+ let added = 0;
110
+ let updated = 0;
111
+ for (const line of stdout.split("\n")) {
112
+ const m = line.match(/^\s*(Installed|Updated|Generated)\s+([a-z0-9-]+)\s+->/i);
113
+ if (!m)
114
+ continue;
115
+ if (m[1].toLowerCase() === "updated")
116
+ updated += 1;
117
+ else
118
+ added += 1;
119
+ }
120
+ return { total: added + updated, added, updated };
121
+ }
122
+ function skillInstallInvocation(agent, opts) {
123
+ const cliPath = process.argv[1];
124
+ if (!cliPath)
125
+ return null;
126
+ const command = cliPath.endsWith(".js") ? process.execPath : cliPath;
127
+ const prefix = cliPath.endsWith(".js") ? [cliPath] : [];
128
+ const baseArgs = [
129
+ "skills",
130
+ "install",
131
+ opts.recommended ? "--recommended" : "--all",
132
+ "--agent",
133
+ agent,
134
+ "--scope",
135
+ opts.scope,
136
+ ];
137
+ if (opts.force)
138
+ baseArgs.push("--force");
139
+ if (opts.stableOnly)
140
+ baseArgs.push("--stable-only");
141
+ return {
142
+ command,
143
+ args: [...prefix, ...baseArgs],
144
+ display: [cliPath, ...baseArgs],
145
+ };
146
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Where `summer skills install` puts skills for each agent client.
3
+ *
4
+ * Lives in the installer layer (not cli/) so `summer setup` can report the
5
+ * destination and count without importing the CLI (import-direction contract
6
+ * §2: shared layers never import cli or mcp).
7
+ */
8
+ import { type AgentClient } from "../core/skills-registry.js";
9
+ export declare const SKILL_SCOPES: readonly ["user", "project"];
10
+ export type SkillScope = (typeof SKILL_SCOPES)[number];
11
+ /** The agent/scope flags `summer skills install` accepts (legacy aliases included). */
12
+ export interface SkillInstallSelection {
13
+ agent?: string;
14
+ scope?: string;
15
+ asClaudeSkill?: boolean;
16
+ asCursorSkill?: boolean;
17
+ }
18
+ /** Throws with a user-facing message on an unknown agent. */
19
+ export declare function parseSkillAgent(value: string): AgentClient;
20
+ /** Throws with a user-facing message on an unknown scope. */
21
+ export declare function parseSkillScope(value: string): SkillScope;
22
+ /** Pick the agent from --agent / legacy --as-claude-skill / --as-cursor-skill
23
+ * (default "summer"); throws on conflicting flags. */
24
+ export declare function resolveSkillAgent(opts: SkillInstallSelection): AgentClient;
25
+ /** Explicit --scope wins; otherwise project-rooted agents default to "project". */
26
+ export declare function resolveSkillScope(agent: AgentClient, opts: SkillInstallSelection): SkillScope;
27
+ export type InstallLocation = {
28
+ kind: "skill-dir";
29
+ path: string;
30
+ } | {
31
+ kind: "cursor-rule-dir";
32
+ path: string;
33
+ } | {
34
+ kind: "windsurf-rule-file";
35
+ path: string;
36
+ } | {
37
+ kind: "cline-rule-dir";
38
+ path: string;
39
+ } | {
40
+ kind: "opencode-skill-dir";
41
+ path: string;
42
+ };
43
+ export declare function resolveInstallLocation(agent: AgentClient, scope: SkillScope): InstallLocation;
44
+ /** One-line, human path pattern for where an install location puts skills. */
45
+ export declare function describeInstallLocation(location: InstallLocation): string;