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
@@ -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,20 +121,46 @@ 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) {
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) {
145
+ // node is a real executable on every platform; spawn("node") resolves fine.
108
146
  return {
109
147
  command: "node",
110
148
  args: [resolveLocalCliPath(), "mcp"],
111
149
  };
112
150
  }
151
+ // On Windows, npx is a .cmd/.ps1 shim, and Node's spawn() does not do PATHEXT
152
+ // resolution — hosts that spawn("npx") directly (Claude Code, Kimi Code,
153
+ // Cursor, ...) fail with ENOENT even though npx works in a terminal. Route
154
+ // through cmd.exe so the shim resolves. (User-reported: Imitater967, 2026-09-01.)
155
+ if (platform === "win32") {
156
+ return {
157
+ command: "cmd.exe",
158
+ args: ["/c", "npx", "-y", spec, "mcp"],
159
+ };
160
+ }
113
161
  return {
114
162
  command: "npx",
115
- args: ["-y", "summer-engine@latest", "mcp"],
163
+ args: ["-y", spec, "mcp"],
116
164
  };
117
165
  }
118
166
  export function renderConfigSnippet(agent, server) {
@@ -142,7 +190,7 @@ export function renderConfigSnippet(agent, server) {
142
190
  }, null, 2) + "\n");
143
191
  }
144
192
  if (agent === "gemini") {
145
- return (JSON.stringify(geminiExtensionManifest(server), null, 2) + "\n");
193
+ return renderJsonFile(geminiExtensionManifest(server, readBundledGeminiManifestSync()));
146
194
  }
147
195
  return (JSON.stringify({
148
196
  mcpServers: {
@@ -154,6 +202,14 @@ function resolveLocalCliPath() {
154
202
  const thisFile = fileURLToPath(import.meta.url);
155
203
  return resolve(dirname(thisFile), "..", "bin", "summer.js");
156
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"];
157
213
  function resolveConfigTarget(agent, scope, cwd, env) {
158
214
  const override = getConfigPathOverride(agent, env);
159
215
  const warnings = [];
@@ -448,15 +504,98 @@ async function upsertVsCodeMcpConfig(path, server, write) {
448
504
  }
449
505
  async function upsertGeminiExtension(path, server, write) {
450
506
  const current = await readJsonConfig(path);
451
- const next = geminiExtensionManifest(server, current);
507
+ const bundled = await readBundledGeminiManifest();
508
+ const next = geminiExtensionManifest(server, bundled, current);
452
509
  const currentRendered = renderJsonFile(current);
453
510
  const nextRendered = renderJsonFile(next);
454
- const changed = currentRendered !== nextRendered;
511
+ let changed = currentRendered !== nextRendered;
455
512
  if (write && changed) {
456
513
  await writeTextFile(path, nextRendered);
457
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
+ }
458
534
  return { changed };
459
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
+ }
460
599
  function opencodeServerEntry(server) {
461
600
  const entry = {
462
601
  type: "local",
@@ -490,20 +629,6 @@ function vsCodeServerEntry(server) {
490
629
  }
491
630
  return entry;
492
631
  }
493
- function geminiExtensionManifest(server, base = {}) {
494
- const manifest = { ...base };
495
- manifest.name = "summer";
496
- manifest.description =
497
- "Superpowers for AI game dev. MCP bridge to the local Summer Engine plus a context primer that teaches Gemini the Summer skills.";
498
- manifest.contextFileName = "GEMINI.md";
499
- manifest.mcpServers = {
500
- [SUMMER_MCP_SERVER_NAME]: {
501
- command: server.command,
502
- args: server.args,
503
- },
504
- };
505
- return manifest;
506
- }
507
632
  async function readTextFileIfExists(path) {
508
633
  if (!existsSync(path))
509
634
  return "";
@@ -597,7 +722,7 @@ function createNextSteps(agent, scope, path) {
597
722
  : agent === "lm-studio"
598
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."
599
724
  : agent === "gemini"
600
- ? "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)."
601
726
  : agent === "github-copilot"
602
727
  ? "Restart Copilot CLI, or run /mcp reload and /skills reload in the active session."
603
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;