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,11 +1,10 @@
1
- import { spawnSync } from "child_process";
2
- import { createRequire } from "node:module";
3
- import { Command } from "commander";
4
- import { configureAgentMcp, parseAgent, parseScope, supportedAgents, } from "../lib/agent-config.js";
5
- import { printDoctorResult, runDoctor } from "./doctor.js";
6
- import { brandLine, c, sym, tildeify } from "../lib/format.js";
7
- const requireFromHere = createRequire(import.meta.url);
8
- const { version: cliVersion } = requireFromHere("../../package.json");
1
+ import { Command, Option } from "commander";
2
+ import { configureAgentMcp, resolveAgentSelection, resolveConfigScope, supportedAgents, } from "../../installer/agent-config.js";
3
+ import { previewNote, setupSkills } from "../../installer/setup.js";
4
+ import { printDoctorResult, runDoctor } from "../../core/capabilities/doctor.js";
5
+ import { brandLine, c, sym, tildeify } from "../../core/format.js";
6
+ import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
7
+ import { resolveDefaultChannel } from "../../installer/version-check.js";
9
8
  const AGENT_LABEL = {
10
9
  "claude-code": "Claude Code",
11
10
  codex: "Codex",
@@ -27,22 +26,37 @@ export const setupCommand = new Command("setup")
27
26
  .option("--scope <scope>", "Configuration scope: user or project", "user")
28
27
  .option("--dry-run", "Show planned changes without writing files")
29
28
  .option("--print", "Print the MCP config snippet instead of writing files")
29
+ .option("--local-dev", "Point the agent at this checkout's built CLI (node <repo>/dist/bin/summer.js mcp) instead of npx summer-engine@latest — for testing unpublished builds. SUMMER_DEV=1 does the same.")
30
+ .option("--channel <dist-tag>", "npm dist-tag the agent's MCP entry runs: npx -y summer-engine@<dist-tag> mcp (default latest; use next while a release soaks on the next tag). SUMMER_CHANNEL does the same.")
30
31
  .option("--yes", "Apply practical setup steps without prompting")
31
32
  .option("--json", "Print setup result as JSON")
32
33
  .option("--force", "Overwrite existing skill content (passes --force through to skills install)")
34
+ .option("--recommended", "Install only the recommended skill subset instead of the whole library")
35
+ .option("--stable-only", "Skip preview skills (installed by default; each is labelled preview in its guidance)")
36
+ // Pre-reversal opt-in, kept one release as a hidden no-op so old scripts still parse.
37
+ .addOption(new Option("--include-preview", "No-op: preview skills install by default").hideHelp())
33
38
  .action(async (agentArg, opts) => {
34
- const agent = resolveAgent(agentArg, opts.agent);
35
- const scope = resolveScope(opts.scope);
39
+ const agent = resolveAgentSelection(agentArg, opts.agent);
40
+ const scope = resolveConfigScope(opts.scope);
41
+ const defaultChannel = await resolveDefaultChannel(cliVersion);
36
42
  const config = await configureAgentMcp({
37
43
  agent,
38
44
  scope,
39
45
  dryRun: opts.dryRun,
40
46
  print: opts.print,
47
+ localDev: Boolean(opts.localDev) || process.env.SUMMER_DEV === "1",
48
+ channel: opts.channel ?? process.env.SUMMER_CHANNEL ?? defaultChannel.channel,
41
49
  });
42
- const skills = setupRecommendedSkills(agent, {
50
+ if (!opts.channel && !process.env.SUMMER_CHANNEL && defaultChannel.note && !opts.print) {
51
+ console.log(` ${c.dim(defaultChannel.note)}`);
52
+ }
53
+ const skills = setupSkills(agent, {
43
54
  dryRun: Boolean(opts.dryRun || opts.print),
44
55
  yes: Boolean(opts.yes),
45
56
  force: Boolean(opts.force),
57
+ scope,
58
+ recommended: Boolean(opts.recommended),
59
+ stableOnly: Boolean(opts.stableOnly),
46
60
  });
47
61
  const doctor = await runDoctor({ quiet: true });
48
62
  if (opts.json) {
@@ -60,80 +74,6 @@ export const setupCommand = new Command("setup")
60
74
  process.exit(1);
61
75
  }
62
76
  });
63
- function resolveAgent(agentArg, agentOpt) {
64
- if (agentArg && agentOpt && parseAgent(agentArg) !== parseAgent(agentOpt)) {
65
- throw new Error("Specify the agent either positionally or with --agent, not both.");
66
- }
67
- const parsed = parseAgent(agentOpt ?? agentArg);
68
- if (!parsed) {
69
- throw new Error(`Specify an agent: ${supportedAgents.join(", ")}`);
70
- }
71
- return parsed;
72
- }
73
- function resolveScope(scopeOpt) {
74
- const parsed = parseScope(scopeOpt);
75
- if (!parsed) {
76
- throw new Error("Invalid --scope. Use user or project.");
77
- }
78
- return parsed;
79
- }
80
- function setupRecommendedSkills(agent, options) {
81
- if (agent === "lm-studio") {
82
- return {
83
- status: "skipped",
84
- 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.",
85
- };
86
- }
87
- const invocation = skillInstallInvocation(agent, { force: options.force });
88
- if (!invocation) {
89
- return {
90
- status: "skipped",
91
- 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.",
92
- };
93
- }
94
- if (options.dryRun || !options.yes) {
95
- return {
96
- status: "planned",
97
- command: invocation.display,
98
- message: `Recommended skills can be installed with: ${invocation.display.join(" ")}`,
99
- };
100
- }
101
- const result = spawnSync(invocation.command, invocation.args, {
102
- env: process.env,
103
- encoding: "utf-8",
104
- });
105
- if (result.status === 0) {
106
- return {
107
- status: "installed",
108
- command: invocation.display,
109
- message: "Recommended Summer skills installed.",
110
- stdout: result.stdout.trim(),
111
- stderr: result.stderr.trim(),
112
- };
113
- }
114
- return {
115
- status: "failed",
116
- command: invocation.display,
117
- message: `Recommended skill install failed with exit code ${result.status ?? "unknown"}.`,
118
- stdout: result.stdout.trim(),
119
- stderr: result.stderr.trim(),
120
- };
121
- }
122
- function skillInstallInvocation(agent, opts = { force: false }) {
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 = ["skills", "install", "--recommended", "--agent", agent];
129
- if (opts.force)
130
- baseArgs.push("--force");
131
- return {
132
- command,
133
- args: [...prefix, ...baseArgs],
134
- display: [cliPath, ...baseArgs],
135
- };
136
- }
137
77
  function printSetupResult(config, skills, doctor) {
138
78
  if (config.print) {
139
79
  console.log(config.snippet.trimEnd());
@@ -152,11 +92,21 @@ function printSetupResult(config, skills, doctor) {
152
92
  else {
153
93
  console.log(` ${sym.ok()} Already linked to ${c.bold(agentLabel)} ${c.dim(tildeify(config.path))}`);
154
94
  }
95
+ if (config.localDev) {
96
+ console.log(` ${c.dim("(local dev)")} MCP server command: ${c.dim(`${config.server.command} ${config.server.args.join(" ")}`)}`);
97
+ }
98
+ else if (config.channel !== "latest") {
99
+ console.log(` ${c.dim(`(channel ${config.channel})`)} MCP server command: ${c.dim(`${config.server.command} ${config.server.args.join(" ")}`)}`);
100
+ }
155
101
  if (skills.status === "installed") {
156
102
  const installed = parseInstalledSkills(skills.stdout);
157
103
  if (installed.length > 0) {
158
104
  const where = parseSkillTargetDir(skills.stdout);
159
- console.log(` ${sym.ok()} Installed ${c.bold(String(installed.length) + " skills")} ${where ? c.dim(tildeify(where)) : ""}`);
105
+ const note = previewNote(skills);
106
+ const tally = skills.installed
107
+ ? c.dim(` (${skills.installed.added} new, ${skills.installed.updated} updated${note ? `; ${note}` : ""})`)
108
+ : "";
109
+ console.log(` ${sym.ok()} Installed ${c.bold(String(installed.length) + " skills")}${tally} ${where ? c.dim(tildeify(where)) : ""}`);
160
110
  const grouped = installed.reduce((rows, name, i) => {
161
111
  const row = Math.floor(i / 3);
162
112
  rows[row] = rows[row] ?? [];
@@ -168,9 +118,13 @@ function printSetupResult(config, skills, doctor) {
168
118
  }
169
119
  }
170
120
  else {
171
- console.log(` ${sym.ok()} Installed recommended skills`);
121
+ console.log(` ${sym.ok()} ${skills.message}`);
172
122
  }
173
123
  }
124
+ else if (skills.status === "planned" && config.dryRun) {
125
+ const note = previewNote(skills);
126
+ console.log(` ${c.dim("(dry run)")} Would install ${c.bold(String(skills.count ?? "?") + " skills")}${note ? c.dim(` (${note})`) : ""} ${c.dim(skills.destination ?? "")}`);
127
+ }
174
128
  else if (skills.status === "planned" || skills.status === "skipped") {
175
129
  console.log(` ${sym.warn()} Skills: ${c.dim(skills.message)}`);
176
130
  }
@@ -195,7 +149,7 @@ function parseInstalledSkills(stdout) {
195
149
  // Lines look like: " Installed fps-controller -> /path/.../fps-controller"
196
150
  const names = [];
197
151
  for (const line of stdout.split("\n")) {
198
- const m = line.match(/^\s*Installed\s+([a-z0-9-]+)\s+->/i);
152
+ const m = line.match(/^\s*(?:Installed|Updated|Generated)\s+([a-z0-9-]+)\s+->/i);
199
153
  if (m)
200
154
  names.push(m[1]);
201
155
  }
@@ -205,7 +159,7 @@ function parseSkillTargetDir(stdout) {
205
159
  if (!stdout)
206
160
  return null;
207
161
  for (const line of stdout.split("\n")) {
208
- const m = line.match(/^\s*Installed\s+[a-z0-9-]+\s+->\s+(.+)$/i);
162
+ const m = line.match(/^\s*(?:Installed|Updated|Generated)\s+[a-z0-9-]+\s+->\s+(.+)$/i);
209
163
  if (m) {
210
164
  const path = m[1].trim();
211
165
  // Strip trailing /<skill-name> to get the parent dir
@@ -1,123 +1,55 @@
1
- import { Command } from "commander";
1
+ import { Command, Option } from "commander";
2
2
  import { existsSync, mkdirSync, readFileSync, cpSync, rmSync, writeFileSync, readdirSync, copyFileSync, } from "fs";
3
3
  import { join, dirname } from "path";
4
- import { fileURLToPath } from "url";
5
- import { homedir, platform } from "os";
6
- import { createRequire } from "node:module";
7
- import { AGENT_CLIENTS, SKILL_REGISTRY, } from "../lib/skills-registry.js";
8
- import { tildeify } from "../lib/format.js";
9
- import { writeSkillMarker } from "../lib/version-check.js";
10
- const requireFromHere = createRequire(import.meta.url);
11
- const { version: cliVersion } = requireFromHere("../../package.json");
12
- const __dirname = dirname(fileURLToPath(import.meta.url));
13
- // Resolve skills dir: from dist/commands/skills.js -> ../../skills
14
- const skillsDir = join(__dirname, "..", "..", "skills");
15
- // Resolve commands dir: same parent. Used by Claude Code installs to also copy
4
+ import { homedir } from "os";
5
+ import { AGENT_CLIENTS, getSkillRegistry, resolveSkillDir, selectSkillsForBulkInstall, } from "../../core/skills-registry.js";
6
+ import { tildeify } from "../../core/format.js";
7
+ import { writeSkillMarker } from "../../installer/version-check.js";
8
+ import { pruneRetiredSkills } from "../../installer/legacy-skills.js";
9
+ import { resolveInstallLocation, resolveSkillAgent, resolveSkillScope, } from "../../installer/skill-locations.js";
10
+ import { PACKAGE_ROOT } from "../../core/package-root.js";
11
+ import { TOOLKIT_VERSION as cliVersion } from "../../core/version.js";
12
+ // Skill files live in library/skills/<slug>/ and are resolved through the
13
+ // generated registry (registry/generated/skills-registry.json).
14
+ // Resolve commands dir: from dist/cli/commands/skills.js -> ../../../commands.
15
+ // Used by Claude Code installs to also copy
16
16
  // slash commands (e.g. /gameskill) to ~/.claude/commands/. Other agents don't
17
17
  // have an equivalent today, so the copy is gated to claude-code.
18
- const commandsDir = join(__dirname, "..", "..", "commands");
19
- const SKILL_SCOPES = ["user", "project"];
18
+ const commandsDir = join(PACKAGE_ROOT, "commands");
20
19
  function getBuiltinSkills() {
21
- const skills = [];
22
- for (const entry of SKILL_REGISTRY) {
23
- if (!entry.public)
24
- continue;
25
- const skillPath = join(skillsDir, entry.category, entry.name, "SKILL.md");
26
- if (!existsSync(skillPath))
27
- continue;
28
- const frontmatter = parseSkillFrontmatter(skillPath);
29
- if (!frontmatter)
30
- continue;
31
- skills.push({
32
- ...entry,
33
- name: entry.name,
34
- description: frontmatter.description,
35
- });
36
- }
37
- return skills;
38
- }
39
- function parseSkillFrontmatter(skillPath) {
40
- try {
41
- const content = readFileSync(skillPath, "utf-8");
42
- const match = content.match(/^---\s*\n([\s\S]*?)\n---/);
43
- if (!match)
44
- return null;
45
- const front = match[1];
46
- const name = front.match(/^name:\s*(.+)$/m)?.[1]?.trim();
47
- const description = front.match(/^description:\s*(.+)$/m)?.[1]?.trim();
48
- if (!name || !description)
49
- return null;
50
- return { name, description };
51
- }
52
- catch {
53
- return null;
54
- }
20
+ return getSkillRegistry().filter((entry) => existsSync(join(resolveSkillDir(entry), "SKILL.md")));
55
21
  }
56
22
  function getSkillMeta(name) {
57
23
  return getBuiltinSkills().find((skill) => skill.name === name) ?? null;
58
24
  }
59
25
  function getSkillPath(name) {
60
- const entry = SKILL_REGISTRY.find((s) => s.name === name);
26
+ const entry = getSkillRegistry().find((s) => s.name === name);
61
27
  if (!entry)
62
28
  return null;
63
- const path = join(skillsDir, entry.category, entry.name);
29
+ const path = resolveSkillDir(entry);
64
30
  if (!existsSync(path) || !existsSync(join(path, "SKILL.md")))
65
31
  return null;
66
32
  return path;
67
33
  }
68
34
  function getSkillBody(name) {
69
- const entry = SKILL_REGISTRY.find((s) => s.name === name);
70
- if (!entry)
35
+ const path = getSkillPath(name);
36
+ if (!path)
71
37
  throw new Error(`Unknown skill: ${name}`);
72
- const skillPath = join(skillsDir, entry.category, entry.name, "SKILL.md");
73
- const content = readFileSync(skillPath, "utf-8");
38
+ const content = readFileSync(join(path, "SKILL.md"), "utf-8");
74
39
  return content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, "").trim();
75
40
  }
76
41
  function die(message) {
77
42
  console.error(message);
78
43
  process.exit(1);
79
44
  }
80
- function isAgentClient(value) {
81
- return AGENT_CLIENTS.includes(value);
82
- }
83
- function isSkillScope(value) {
84
- return SKILL_SCOPES.includes(value);
85
- }
86
- function parseAgent(value) {
87
- if (isAgentClient(value))
88
- return value;
89
- die(`Unknown agent: ${value}. Use one of: ${AGENT_CLIENTS.join(", ")}.`);
90
- }
91
- function parseScope(value) {
92
- if (isSkillScope(value))
93
- return value;
94
- die(`Unknown scope: ${value}. Use user or project.`);
95
- }
96
- function resolveAgent(opts) {
97
- if (opts.asClaudeSkill && opts.asCursorSkill) {
98
- die("Use only one legacy alias: --as-claude-skill or --as-cursor-skill.");
99
- }
100
- const legacyAgent = opts.asClaudeSkill
101
- ? "claude-code"
102
- : opts.asCursorSkill
103
- ? "cursor"
104
- : undefined;
105
- if (opts.agent && legacyAgent && opts.agent !== legacyAgent) {
106
- die(`Conflicting agent options: --agent ${opts.agent} with legacy alias for ${legacyAgent}.`);
45
+ /** Run an installer-layer option parser; its Error message becomes the CLI's exit line. */
46
+ function orDie(parse) {
47
+ try {
48
+ return parse();
107
49
  }
108
- return parseAgent(opts.agent ?? legacyAgent ?? "summer");
109
- }
110
- function resolveScope(agent, opts) {
111
- if (opts.scope)
112
- return parseScope(opts.scope);
113
- if (agent === "cursor" ||
114
- agent === "windsurf" ||
115
- agent === "cline" ||
116
- agent === "roo-code" ||
117
- agent === "kilo-code") {
118
- return "project";
50
+ catch (error) {
51
+ die(error instanceof Error ? error.message : String(error));
119
52
  }
120
- return "user";
121
53
  }
122
54
  function agentLabel(agent) {
123
55
  switch (agent) {
@@ -147,98 +79,11 @@ function agentLabel(agent) {
147
79
  return "Summer";
148
80
  }
149
81
  }
150
- function resolveInstallLocation(agent, scope) {
151
- const overrideDir = process.env.SUMMER_SKILLS_DIR;
152
- if (overrideDir) {
153
- if (agent === "cursor")
154
- return { kind: "cursor-rule-dir", path: overrideDir };
155
- if (agent === "windsurf") {
156
- return { kind: "windsurf-rule-file", path: join(overrideDir, ".windsurfrules") };
157
- }
158
- if (agent === "cline" || agent === "roo-code" || agent === "kilo-code") {
159
- return { kind: "cline-rule-dir", path: overrideDir };
160
- }
161
- if (agent === "gemini") {
162
- return { kind: "gemini-skill-dir", path: overrideDir };
163
- }
164
- if (agent === "opencode") {
165
- return { kind: "opencode-skill-dir", path: overrideDir };
166
- }
167
- return { kind: "skill-dir", path: overrideDir };
168
- }
169
- const root = scope === "user" ? homedir() : process.cwd();
170
- switch (agent) {
171
- case "codex":
172
- return { kind: "skill-dir", path: join(root, ".agents", "skills") };
173
- case "claude-code":
174
- return { kind: "skill-dir", path: join(root, ".claude", "skills") };
175
- case "cursor":
176
- return { kind: "cursor-rule-dir", path: join(root, ".cursor", "rules") };
177
- case "windsurf":
178
- return { kind: "windsurf-rule-file", path: join(root, ".windsurfrules") };
179
- case "cline":
180
- return {
181
- kind: "cline-rule-dir",
182
- path: scope === "user"
183
- ? clineUserRulesDir()
184
- : join(process.cwd(), ".clinerules"),
185
- };
186
- case "roo-code":
187
- return {
188
- kind: "cline-rule-dir",
189
- path: scope === "user"
190
- ? rooCodeUserRulesDir()
191
- : join(process.cwd(), ".clinerules"),
192
- };
193
- case "kilo-code":
194
- return {
195
- kind: "cline-rule-dir",
196
- path: scope === "user"
197
- ? join(homedir(), ".kilocode", "rules")
198
- : join(process.cwd(), ".kilocode", "rules"),
199
- };
200
- case "gemini":
201
- return {
202
- kind: "gemini-skill-dir",
203
- path: join(homedir(), ".gemini", "extensions", "summer-engine", "skills"),
204
- };
205
- case "github-copilot":
206
- case "vscode-copilot":
207
- return {
208
- kind: "skill-dir",
209
- path: scope === "user"
210
- ? join(homedir(), ".copilot", "skills")
211
- : join(process.cwd(), ".github", "skills"),
212
- };
213
- case "opencode":
214
- return {
215
- kind: "opencode-skill-dir",
216
- path: scope === "user"
217
- ? opencodeUserAgentsDir()
218
- : join(process.cwd(), ".opencode", "agents", "summer"),
219
- };
220
- case "summer":
221
- return { kind: "skill-dir", path: join(root, ".summer", "skills") };
222
- }
223
- }
224
- function clineUserRulesDir() {
225
- // Cline reads global rules from the user's Documents/Cline/Rules folder.
226
- return join(homedir(), "Documents", "Cline", "Rules");
82
+ function previewSkippedLine(count) {
83
+ return ` Skipped ${count} preview skill${count === 1 ? "" : "s"} (--stable-only).`;
227
84
  }
228
- function rooCodeUserRulesDir() {
229
- // Roo Code reads global rules from the user's Documents/Roo/Rules folder.
230
- return join(homedir(), "Documents", "Roo", "Rules");
231
- }
232
- function opencodeUserAgentsDir() {
233
- // OpenCode's user-scope agent definition directory varies by OS.
234
- // On Windows, OpenCode reads from %APPDATA%/opencode/agents/summer.
235
- // On Linux/macOS, it reads from $XDG_CONFIG_HOME or ~/.config/opencode/agents/summer.
236
- if (platform() === "win32") {
237
- const appData = process.env.APPDATA ?? join(homedir(), "AppData", "Roaming");
238
- return join(appData, "opencode", "agents", "summer");
239
- }
240
- const xdg = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
241
- return join(xdg, "opencode", "agents", "summer");
85
+ function previewIncludedLine(count) {
86
+ return ` ${count} preview skill${count === 1 ? "" : "s"} included — labelled in ${count === 1 ? "its" : "each skill's"} guidance; add --stable-only to skip.`;
242
87
  }
243
88
  function selectSkills(name, opts) {
244
89
  if (opts.all && opts.recommended) {
@@ -248,10 +93,16 @@ function selectSkills(name, opts) {
248
93
  die("Specify either a skill name or a bulk option, not both.");
249
94
  }
250
95
  const skills = getBuiltinSkills();
251
- if (opts.all)
252
- return skills;
253
- if (opts.recommended)
254
- return skills.filter((skill) => skill.recommended);
96
+ if (opts.all || opts.recommended) {
97
+ // Bulk installs take stable and preview skills (preview is a label, not a
98
+ // gate); --stable-only skips preview. An explicit name below installs
99
+ // regardless of status.
100
+ const { selected, previewIncluded, previewSkipped } = selectSkillsForBulkInstall(skills, {
101
+ recommended: Boolean(opts.recommended),
102
+ stableOnly: Boolean(opts.stableOnly),
103
+ });
104
+ return { skills: selected, previewIncluded, previewSkipped };
105
+ }
255
106
  if (!name) {
256
107
  console.error("Specify a skill name, --recommended, or --all.");
257
108
  printAvailableSkillNames();
@@ -263,7 +114,7 @@ function selectSkills(name, opts) {
263
114
  printAvailableSkillNames();
264
115
  process.exit(1);
265
116
  }
266
- return [skill];
117
+ return { skills: [skill], previewIncluded: 0, previewSkipped: 0 };
267
118
  }
268
119
  function printAvailableSkillNames() {
269
120
  const skills = getBuiltinSkills();
@@ -275,9 +126,7 @@ function printAvailableSkillNames() {
275
126
  }
276
127
  }
277
128
  function installSkill(skill, agent, location, options) {
278
- if (!skill.clients.includes(agent)) {
279
- die(`${skill.name} does not support ${agentLabel(agent)}.`);
280
- }
129
+ // Every library skill supports every agent client (registry clients: "all").
281
130
  switch (location.kind) {
282
131
  case "skill-dir":
283
132
  return copySkillDirectory(skill, location.path, options);
@@ -287,8 +136,6 @@ function installSkill(skill, agent, location, options) {
287
136
  return upsertWindsurfRule(skill, location.path);
288
137
  case "cline-rule-dir":
289
138
  return writeClineRule(skill, location.path);
290
- case "gemini-skill-dir":
291
- return writeGeminiSkill(skill, location.path);
292
139
  case "opencode-skill-dir":
293
140
  return writeOpencodeSkill(skill, location.path);
294
141
  }
@@ -299,13 +146,14 @@ function copySkillDirectory(skill, targetDir, options) {
299
146
  die(`Skill files missing: ${skill.name}`);
300
147
  mkdirSync(targetDir, { recursive: true });
301
148
  const dest = join(targetDir, skill.name);
302
- if (options.force && existsSync(dest)) {
149
+ const existed = existsSync(dest);
150
+ if (options.force && existed) {
303
151
  // Wipe stale skill content so re-installs overwrite cleanly even if files
304
152
  // were renamed or removed upstream.
305
153
  rmSync(dest, { recursive: true, force: true });
306
154
  }
307
155
  cpSync(src, dest, { recursive: true, force: true });
308
- return { action: "Installed", path: dest };
156
+ return { action: existed ? "Updated" : "Installed", path: dest };
309
157
  }
310
158
  function writeCursorRule(skill, rulesDir) {
311
159
  mkdirSync(rulesDir, { recursive: true });
@@ -335,16 +183,6 @@ function writeClineRule(skill, rulesDir) {
335
183
  writeFileSync(rulePath, renderRuleBody(skill) + "\n", "utf-8");
336
184
  return { action: "Generated", path: rulePath };
337
185
  }
338
- function writeGeminiSkill(skill, skillsDir) {
339
- // Gemini extensions support a contextFileName, but skill discovery for
340
- // arbitrary markdown is not standardized. We drop each SKILL.md alongside
341
- // the extension so the agent can reference them by path; the install
342
- // summary surfaces this so the user knows where to point Gemini.
343
- mkdirSync(skillsDir, { recursive: true });
344
- const rulePath = join(skillsDir, `${skill.name}.md`);
345
- writeFileSync(rulePath, renderRuleBody(skill) + "\n", "utf-8");
346
- return { action: "Generated", path: rulePath };
347
- }
348
186
  function writeOpencodeSkill(skill, skillsDir) {
349
187
  // OpenCode supports agent markdown definitions; the exact discovery
350
188
  // convention for ad-hoc skills isn't fully documented. We write each skill
@@ -383,6 +221,9 @@ function printInstallSummary(count, agent, scope, location) {
383
221
  console.log(`\n${count} skill${count === 1 ? "" : "s"} ready for ${label} (${scope} scope).`);
384
222
  if (location.kind === "skill-dir") {
385
223
  console.log(`${label} can read skills from ${tildeified}/<skill>/SKILL.md`);
224
+ if (agent === "gemini") {
225
+ console.log("Gemini loads them as extension skills; run `summer setup gemini` once so the extension manifest exists, then restart Gemini CLI.");
226
+ }
386
227
  }
387
228
  else if (location.kind === "cursor-rule-dir") {
388
229
  console.log(`Cursor rules are in ${tildeified}/summer-<skill>.mdc`);
@@ -391,10 +232,6 @@ function printInstallSummary(count, agent, scope, location) {
391
232
  console.log(`${label} rules are in ${tildeified}/summer-<skill>.md`);
392
233
  console.log("Restart VS Code to pick up new rules.");
393
234
  }
394
- else if (location.kind === "gemini-skill-dir") {
395
- console.log(`Skill files are in ${tildeified}/<skill>.md`);
396
- console.log("Reference them from Gemini by path, or run `gemini extensions enable summer-engine` to load the bundled context.");
397
- }
398
235
  else if (location.kind === "opencode-skill-dir") {
399
236
  console.log(`Skill files are in ${tildeified}/<skill>.md`);
400
237
  console.log("Restart OpenCode so it picks up the new agent definitions.");
@@ -420,7 +257,12 @@ skillsCommand
420
257
  console.log("Available public skills:\n");
421
258
  for (const s of skills) {
422
259
  const badge = s.recommended ? "recommended" : "optional";
423
- console.log(` ${s.name.padEnd(20)} ${s.category.padEnd(10)} ${badge.padEnd(11)} ${s.description}`);
260
+ const tag = s.status === "preview" ? "[preview] " : "";
261
+ console.log(` ${s.name.padEnd(24)} ${badge.padEnd(11)} ${tag}${s.description}`);
262
+ }
263
+ const previewCount = skills.filter((s) => s.status === "preview").length;
264
+ if (previewCount > 0) {
265
+ console.log(`\n[preview] = not yet exercised in-engine by the Summer team (${previewCount}); labelled in the skill's guidance. --all / --recommended and summer setup install these like any other skill — add --stable-only to skip them.`);
424
266
  }
425
267
  console.log("\nInstall recommended: summer skills install --recommended");
426
268
  console.log("Install one: summer skills install <name>");
@@ -430,27 +272,49 @@ skillsCommand
430
272
  .command("install [name]")
431
273
  .description("Install Summer skills for a target agent")
432
274
  .option("--all", "Install all available skills")
433
- .option("--recommended", "Install recommended public skills (excludes make-game)")
275
+ .option("--recommended", "Install only the recommended skill subset (summer setup installs all by default)")
276
+ .option("--stable-only", "With --all / --recommended, skip preview skills (installed by default; labelled preview in their guidance)")
434
277
  .option("--agent <agent>", `Target agent: ${AGENT_CLIENTS.join("|")}`)
435
278
  .option("--scope <scope>", "Install scope: user or project")
436
- .option("--as-claude-skill", "Legacy alias for --agent claude-code")
437
- .option("--as-cursor-skill", "Legacy alias for --agent cursor")
279
+ // Legacy aliases: still accepted for old scripts, hidden from --help.
280
+ .addOption(new Option("--as-claude-skill", "Legacy alias for --agent claude-code").hideHelp())
281
+ .addOption(new Option("--as-cursor-skill", "Legacy alias for --agent cursor").hideHelp())
282
+ // Pre-reversal opt-in, kept one release as a hidden no-op so old scripts still parse.
283
+ .addOption(new Option("--include-preview", "No-op: preview skills install by default").hideHelp())
438
284
  .option("--force", "Overwrite existing skill files (wipe stale skill dirs before copying)")
439
285
  .action((name, opts) => {
440
- const agent = resolveAgent(opts);
441
- const scope = resolveScope(agent, opts);
286
+ const agent = orDie(() => resolveSkillAgent(opts));
287
+ const scope = orDie(() => resolveSkillScope(agent, opts));
442
288
  const location = resolveInstallLocation(agent, scope);
443
- const skills = selectSkills(name, opts);
289
+ const { skills, previewIncluded, previewSkipped } = selectSkills(name, opts);
444
290
  if (skills.length === 0) {
445
291
  console.log("No skills found.");
292
+ if (previewSkipped > 0)
293
+ console.log(previewSkippedLine(previewSkipped));
446
294
  return;
447
295
  }
448
296
  for (const skill of skills) {
449
297
  const result = installSkill(skill, agent, location, {
450
298
  force: Boolean(opts.force),
451
299
  });
300
+ // Keep this line's shape: setup tallies it (Installed|Updated|Generated <name> -> <path>).
452
301
  console.log(` ${result.action} ${skill.name} -> ${result.path}`);
453
302
  }
303
+ // Upgrades: with --force, remove the skills Summer installed in 2.8.x that
304
+ // v3 retired or renamed (summer-cloud, the un-prefixed vfx recipes, ...),
305
+ // so no host keeps a skill that points at removed tools.
306
+ if (opts.force && !name && (location.kind === "skill-dir" || location.kind === "opencode-skill-dir")) {
307
+ for (const pruned of pruneRetiredSkills(location.path, getSkillRegistry().map((entry) => entry.name))) {
308
+ console.log(` Removed ${pruned.name} -> ${pruned.path} (retired in 3.0.0)`);
309
+ }
310
+ }
311
+ if (name && skills[0]?.status === "preview") {
312
+ console.log(` Note: ${name} is a preview skill — not yet exercised in-engine by the Summer team; its guidance says so.`);
313
+ }
314
+ if (previewIncluded > 0)
315
+ console.log(previewIncludedLine(previewIncluded));
316
+ if (previewSkipped > 0)
317
+ console.log(previewSkippedLine(previewSkipped));
454
318
  // Claude Code: also install slash commands (`tools/summer-cli/commands/*.md`)
455
319
  // into `~/.claude/commands/`. Other agents don't have an equivalent today.
456
320
  if (agent === "claude-code") {
@@ -526,11 +390,10 @@ skillsCommand
526
390
  console.log(`\n${meta.name}`);
527
391
  console.log("-".repeat(40));
528
392
  console.log(meta.description);
529
- console.log(`Category: ${meta.category}`);
393
+ console.log(`Id: ${meta.id}`);
530
394
  console.log(`Recommended: ${meta.recommended ? "yes" : "no"}`);
531
- console.log(`Agents: ${meta.clients.join(", ")}`);
532
- console.log(`MCP tools: ${meta.requiresMcpTools.length > 0 ? meta.requiresMcpTools.join(", ") : "none"}`);
533
- console.log(`Test scenario: ${meta.testScenario}`);
395
+ console.log(`Status: ${meta.status}`);
396
+ console.log(`Agents: ${AGENT_CLIENTS.join(", ")}`);
534
397
  console.log("\n" + "-".repeat(40));
535
398
  const body = content.replace(/^---\s*\n[\s\S]*?\n---\s*\n/, "");
536
399
  const preview = body.split("\n").slice(0, 30).join("\n");
@@ -1,2 +1,3 @@
1
1
  import { Command } from "commander";
2
2
  export declare const statusCommand: Command;
3
+ export declare function runStatus(log: (message: string) => void): Promise<void>;