summer-engine 2.8.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.claude-plugin/marketplace.json +27 -7
  2. package/.claude-plugin/plugin.json +99 -83
  3. package/.codex-plugin/plugin.json +112 -82
  4. package/.cursor-plugin/plugin.json +119 -83
  5. package/.factory-plugin/plugin.json +100 -3
  6. package/.mcp.json +6 -1
  7. package/.opencode/INSTALL.md +7 -4
  8. package/.opencode/plugins/summer.js +31 -18
  9. package/AGENTS.md +107 -34
  10. package/CHANGELOG.md +131 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +159 -391
  15. package/assets/api-docs.json.gz +0 -0
  16. package/assets/autopilot/README.md +20 -6
  17. package/assets/autopilot/autopilot.gd +80 -26
  18. package/assets/autopilot/run.sh +132 -7
  19. package/assets/navigation/web-routes.json +719 -0
  20. package/commands/gameskill.md +10 -108
  21. package/commands/summer.md +72 -4
  22. package/dist/bin/summer.js +6 -87
  23. package/dist/cli/banner.d.ts +1 -0
  24. package/dist/cli/banner.js +33 -0
  25. package/dist/{commands → cli/commands}/config.js +1 -1
  26. package/dist/cli/commands/create.d.ts +30 -0
  27. package/dist/cli/commands/create.js +212 -0
  28. package/dist/{commands → cli/commands}/debug.js +2 -2
  29. package/dist/cli/commands/doctor.d.ts +2 -0
  30. package/dist/cli/commands/doctor.js +18 -0
  31. package/dist/cli/commands/events.d.ts +57 -0
  32. package/dist/cli/commands/events.js +158 -0
  33. package/dist/cli/commands/install.d.ts +50 -0
  34. package/dist/cli/commands/install.js +447 -0
  35. package/dist/cli/commands/list.js +72 -0
  36. package/dist/{commands → cli/commands}/login.js +33 -17
  37. package/dist/{commands → cli/commands}/logout.d.ts +1 -0
  38. package/dist/cli/commands/logout.js +19 -0
  39. package/dist/{commands → cli/commands}/memory.d.ts +1 -8
  40. package/dist/{commands → cli/commands}/memory.js +20 -11
  41. package/dist/cli/commands/open.d.ts +45 -0
  42. package/dist/cli/commands/open.js +216 -0
  43. package/dist/{commands → cli/commands}/plan.js +2 -2
  44. package/dist/{commands → cli/commands}/publish.js +1 -1
  45. package/dist/{commands → cli/commands}/releases.js +1 -1
  46. package/dist/cli/commands/run.d.ts +19 -0
  47. package/dist/cli/commands/run.js +255 -0
  48. package/dist/{commands → cli/commands}/setup.js +43 -89
  49. package/dist/{commands → cli/commands}/skills.js +85 -222
  50. package/dist/{commands → cli/commands}/status.d.ts +1 -0
  51. package/dist/cli/commands/status.js +62 -0
  52. package/dist/cli/commands/tool.d.ts +11 -0
  53. package/dist/cli/commands/tool.js +121 -0
  54. package/dist/cli/index.d.ts +6 -0
  55. package/dist/cli/index.js +89 -0
  56. package/dist/cli/root-action.d.ts +7 -0
  57. package/dist/cli/root-action.js +15 -0
  58. package/dist/{lib → core}/api-client.d.ts +106 -15
  59. package/dist/{lib → core}/api-client.js +267 -75
  60. package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
  61. package/dist/{lib → core}/async-op-lifecycle.js +3 -4
  62. package/dist/{lib → core}/auth.d.ts +14 -6
  63. package/dist/{lib → core}/auth.js +56 -40
  64. package/dist/core/capabilities/agent-playbook.d.ts +20 -0
  65. package/dist/core/capabilities/agent-playbook.js +218 -0
  66. package/dist/core/capabilities/api-docs.d.ts +36 -0
  67. package/dist/core/capabilities/api-docs.js +118 -0
  68. package/dist/core/capabilities/asset-import.d.ts +49 -0
  69. package/dist/core/capabilities/asset-import.js +134 -0
  70. package/dist/core/capabilities/camera-view.d.ts +98 -0
  71. package/dist/core/capabilities/camera-view.js +222 -0
  72. package/dist/core/capabilities/capture.d.ts +63 -0
  73. package/dist/core/capabilities/capture.js +67 -0
  74. package/dist/core/capabilities/console-read.d.ts +17 -0
  75. package/dist/core/capabilities/console-read.js +21 -0
  76. package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
  77. package/dist/{lib → core/capabilities}/creator.js +14 -33
  78. package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
  79. package/dist/{lib → core/capabilities}/debug-report.js +12 -31
  80. package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
  81. package/dist/{commands → core/capabilities}/doctor.js +47 -73
  82. package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
  83. package/dist/core/capabilities/engine-fallbacks.js +36 -0
  84. package/dist/core/capabilities/engine-ops.d.ts +33 -0
  85. package/dist/core/capabilities/engine-ops.js +145 -0
  86. package/dist/core/capabilities/engine-receipt.d.ts +53 -0
  87. package/dist/core/capabilities/engine-receipt.js +134 -0
  88. package/dist/core/capabilities/events.d.ts +200 -0
  89. package/dist/core/capabilities/events.js +383 -0
  90. package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
  91. package/dist/core/capabilities/fabricate-mesh.js +165 -0
  92. package/dist/core/capabilities/frame-quality.d.ts +71 -0
  93. package/dist/core/capabilities/frame-quality.js +449 -0
  94. package/dist/core/capabilities/game-task-plan.d.ts +66 -0
  95. package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
  96. package/dist/core/capabilities/hdri-import.d.ts +90 -0
  97. package/dist/core/capabilities/hdri-import.js +250 -0
  98. package/dist/core/capabilities/image-generation.d.ts +24 -0
  99. package/dist/core/capabilities/image-generation.js +22 -0
  100. package/dist/core/capabilities/navigation/open.d.ts +156 -0
  101. package/dist/core/capabilities/navigation/open.js +567 -0
  102. package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
  103. package/dist/core/capabilities/navigation/render-product-map.js +84 -0
  104. package/dist/core/capabilities/navigation/targets.d.ts +87 -0
  105. package/dist/core/capabilities/navigation/targets.js +250 -0
  106. package/dist/core/capabilities/play-determinism.d.ts +35 -0
  107. package/dist/core/capabilities/play-determinism.js +86 -0
  108. package/dist/core/capabilities/project-context.d.ts +114 -0
  109. package/dist/core/capabilities/project-context.js +249 -0
  110. package/dist/core/capabilities/runtime-control.d.ts +540 -0
  111. package/dist/core/capabilities/runtime-control.js +1011 -0
  112. package/dist/core/capabilities/scene-kind.d.ts +19 -0
  113. package/dist/core/capabilities/scene-kind.js +137 -0
  114. package/dist/core/capabilities/scene-script.d.ts +38 -0
  115. package/dist/core/capabilities/scene-script.js +45 -0
  116. package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
  117. package/dist/core/capabilities/tool-dispatch.js +1490 -0
  118. package/dist/core/capabilities/ui-control.d.ts +179 -0
  119. package/dist/core/capabilities/ui-control.js +423 -0
  120. package/dist/core/capabilities/variant-types.d.ts +22 -0
  121. package/dist/core/capabilities/variant-types.js +101 -0
  122. package/dist/core/capability-skew.d.ts +205 -0
  123. package/dist/core/capability-skew.js +386 -0
  124. package/dist/{lib → core}/config.d.ts +11 -1
  125. package/dist/{lib → core}/config.js +13 -2
  126. package/dist/core/embeddings.d.ts +78 -0
  127. package/dist/core/embeddings.js +166 -0
  128. package/dist/core/engine-install.d.ts +105 -0
  129. package/dist/core/engine-install.js +190 -0
  130. package/dist/core/engine.d.ts +94 -0
  131. package/dist/{lib → core}/engine.js +74 -28
  132. package/dist/core/feedback/client.d.ts +88 -0
  133. package/dist/core/feedback/client.js +182 -0
  134. package/dist/{lib → core}/format.d.ts +0 -1
  135. package/dist/{lib → core}/format.js +1 -1
  136. package/dist/core/headless/connection.d.ts +86 -0
  137. package/dist/core/headless/connection.js +97 -0
  138. package/dist/core/headless/editor-connection.d.ts +26 -0
  139. package/dist/core/headless/editor-connection.js +81 -0
  140. package/dist/core/headless/mcp-routing.d.ts +38 -0
  141. package/dist/core/headless/mcp-routing.js +83 -0
  142. package/dist/core/headless/registry.d.ts +91 -0
  143. package/dist/core/headless/registry.js +226 -0
  144. package/dist/core/headless/resolve.d.ts +46 -0
  145. package/dist/core/headless/resolve.js +75 -0
  146. package/dist/core/headless/spawn.d.ts +46 -0
  147. package/dist/core/headless/spawn.js +205 -0
  148. package/dist/core/headless/worker-connection.d.ts +96 -0
  149. package/dist/core/headless/worker-connection.js +353 -0
  150. package/dist/core/headless/worker-engine-client.d.ts +58 -0
  151. package/dist/core/headless/worker-engine-client.js +246 -0
  152. package/dist/core/launch-posture.d.ts +170 -0
  153. package/dist/core/launch-posture.js +317 -0
  154. package/dist/core/library-read.d.ts +73 -0
  155. package/dist/core/library-read.js +279 -0
  156. package/dist/core/library-search.d.ts +143 -0
  157. package/dist/core/library-search.js +301 -0
  158. package/dist/{lib → core}/log-filters.js +4 -2
  159. package/dist/{lib → core}/mcp-log.js +2 -17
  160. package/dist/core/package-root.d.ts +9 -0
  161. package/dist/core/package-root.js +11 -0
  162. package/dist/core/redact.d.ts +20 -0
  163. package/dist/core/redact.js +64 -0
  164. package/dist/core/registry-search.d.ts +167 -0
  165. package/dist/core/registry-search.js +358 -0
  166. package/dist/core/skills-registry.d.ts +47 -0
  167. package/dist/core/skills-registry.js +83 -0
  168. package/dist/{lib → core}/store.js +11 -7
  169. package/dist/{lib → core}/summer-compatibility.js +3 -3
  170. package/dist/{lib → core}/telemetry.js +5 -2
  171. package/dist/core/templates.d.ts +98 -0
  172. package/dist/core/templates.js +241 -0
  173. package/dist/core/tool-errors.d.ts +30 -0
  174. package/dist/core/tool-errors.js +40 -0
  175. package/dist/core/trajectory.d.ts +80 -0
  176. package/dist/core/trajectory.js +307 -0
  177. package/dist/core/util/http.d.ts +13 -0
  178. package/dist/core/util/http.js +28 -0
  179. package/dist/core/util/json.d.ts +12 -0
  180. package/dist/core/util/json.js +21 -0
  181. package/dist/core/util/process.d.ts +3 -0
  182. package/dist/core/util/process.js +13 -0
  183. package/dist/core/util/sleep.d.ts +1 -0
  184. package/dist/core/util/sleep.js +3 -0
  185. package/dist/core/version.d.ts +3 -0
  186. package/dist/core/version.js +5 -0
  187. package/dist/{lib → installer}/agent-config.d.ts +20 -1
  188. package/dist/{lib → installer}/agent-config.js +138 -24
  189. package/dist/installer/legacy-skills.d.ts +26 -0
  190. package/dist/installer/legacy-skills.js +53 -0
  191. package/dist/installer/setup.d.ts +76 -0
  192. package/dist/installer/setup.js +146 -0
  193. package/dist/installer/skill-locations.d.ts +45 -0
  194. package/dist/installer/skill-locations.js +170 -0
  195. package/dist/installer/version-check.d.ts +174 -0
  196. package/dist/{lib → installer}/version-check.js +173 -42
  197. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  198. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  199. package/dist/mcp/server.d.ts +23 -3
  200. package/dist/mcp/server.js +122 -28
  201. package/dist/mcp/tools/asset-tools.js +62 -142
  202. package/dist/mcp/tools/creator-tools.js +5 -23
  203. package/dist/mcp/tools/debug-tools.js +61 -18
  204. package/dist/mcp/tools/event-tools.d.ts +14 -0
  205. package/dist/mcp/tools/event-tools.js +41 -0
  206. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  207. package/dist/mcp/tools/fabricate-tools.js +28 -0
  208. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  209. package/dist/mcp/tools/feedback-tools.js +88 -0
  210. package/dist/mcp/tools/file-tools.js +6 -53
  211. package/dist/mcp/tools/generate-tools.js +37 -63
  212. package/dist/mcp/tools/library-tools.d.ts +11 -0
  213. package/dist/mcp/tools/library-tools.js +42 -0
  214. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  215. package/dist/mcp/tools/navigation-tools.js +37 -0
  216. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  217. package/dist/mcp/tools/perception-tools.js +146 -0
  218. package/dist/mcp/tools/project-tools.d.ts +14 -0
  219. package/dist/mcp/tools/project-tools.js +72 -281
  220. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  221. package/dist/mcp/tools/runtime-tools.js +92 -0
  222. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  223. package/dist/mcp/tools/scene-tools.js +68 -119
  224. package/dist/mcp/tools/script-tools.d.ts +3 -0
  225. package/dist/mcp/tools/script-tools.js +118 -0
  226. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  227. package/dist/mcp/tools/spatial-tools.js +485 -0
  228. package/dist/mcp/tools/text-json.d.ts +8 -0
  229. package/dist/mcp/tools/text-json.js +12 -0
  230. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  231. package/dist/mcp/tools/ui-tools.js +82 -0
  232. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  233. package/dist/mcp/tools/visual-tools.js +383 -101
  234. package/dist/mcp/tools/with-engine.d.ts +9 -15
  235. package/dist/mcp/tools/with-engine.js +60 -96
  236. package/dist/project-memory/project-manifest.d.ts +36 -0
  237. package/dist/project-memory/project-manifest.js +50 -0
  238. package/dist/project-memory/project-memory.d.ts +57 -0
  239. package/dist/{lib → project-memory}/project-memory.js +46 -0
  240. package/gemini-extension.json +103 -2
  241. package/hooks/hooks-cursor.json +2 -2
  242. package/hooks/hooks.json +2 -1
  243. package/hooks/pre-commit-doctor.sh +45 -39
  244. package/hooks/run-hook.cmd +30 -23
  245. package/hooks/run-hook.sh +20 -0
  246. package/hooks/session-start.sh +18 -7
  247. package/integrations/README.md +70 -0
  248. package/integrations/claude/README.md +19 -0
  249. package/integrations/claude/manifest-target.json +16 -0
  250. package/integrations/cline/README.md +13 -0
  251. package/integrations/cline/manifest-target.json +3 -0
  252. package/integrations/codex/README.md +15 -0
  253. package/integrations/codex/manifest-target.json +5 -0
  254. package/integrations/cursor/README.md +16 -0
  255. package/integrations/cursor/manifest-target.json +5 -0
  256. package/integrations/factory/README.md +26 -0
  257. package/integrations/factory/manifest-target.json +5 -0
  258. package/integrations/gemini/README.md +26 -0
  259. package/integrations/gemini/manifest-target.json +5 -0
  260. package/integrations/github-copilot/README.md +12 -0
  261. package/integrations/github-copilot/manifest-target.json +3 -0
  262. package/integrations/kilo-code/README.md +16 -0
  263. package/integrations/kilo-code/manifest-target.json +3 -0
  264. package/integrations/lm-studio/README.md +12 -0
  265. package/integrations/lm-studio/manifest-target.json +3 -0
  266. package/integrations/opencode/README.md +15 -0
  267. package/integrations/opencode/manifest-target.json +3 -0
  268. package/integrations/roo-code/README.md +13 -0
  269. package/integrations/roo-code/manifest-target.json +3 -0
  270. package/integrations/vscode-copilot/README.md +12 -0
  271. package/integrations/vscode-copilot/manifest-target.json +3 -0
  272. package/integrations/windsurf/README.md +13 -0
  273. package/integrations/windsurf/manifest-target.json +3 -0
  274. package/library/references/collaborative-protocol/resource.yaml +24 -0
  275. package/library/references/gd-style/resource.yaml +24 -0
  276. package/{references → library/references/godot-version}/godot-version.md +6 -6
  277. package/library/references/godot-version/resource.yaml +22 -0
  278. package/library/references/headless-routing/headless-routing.md +46 -0
  279. package/library/references/headless-routing/resource.yaml +24 -0
  280. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  281. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  282. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  283. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  284. package/library/references/product-map/product-map.md +103 -0
  285. package/library/references/product-map/resource.yaml +33 -0
  286. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  287. package/library/references/public-surface-language/resource.yaml +17 -0
  288. package/library/references/summer-folder/resource.yaml +20 -0
  289. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  290. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  291. package/library/skills/3d-lighting/resource.yaml +27 -0
  292. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  293. package/library/skills/adaptive-music/resource.yaml +28 -0
  294. package/library/skills/agent-playtesting/SKILL.md +148 -0
  295. package/library/skills/agent-playtesting/resource.yaml +52 -0
  296. package/library/skills/ambient-bed/resource.yaml +24 -0
  297. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  298. package/library/skills/animated-loop/resource.yaml +27 -0
  299. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  300. package/library/skills/animation-tree/resource.yaml +33 -0
  301. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  302. package/library/skills/art-direction/resource.yaml +29 -0
  303. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  304. package/library/skills/asset-strategy/resource.yaml +63 -0
  305. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  306. package/library/skills/audio-direction/resource.yaml +32 -0
  307. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  308. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  309. package/library/skills/brainstorm-game/resource.yaml +30 -0
  310. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  311. package/library/skills/brainstorming/resource.yaml +23 -0
  312. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  313. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  314. package/library/skills/browse-templates/resource.yaml +23 -0
  315. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  316. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  317. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  318. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  319. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  320. package/library/skills/character-model/resource.yaml +36 -0
  321. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  322. package/library/skills/character-portrait/resource.yaml +30 -0
  323. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  324. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  325. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  326. package/library/skills/concept-art/resource.yaml +34 -0
  327. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  328. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  329. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  330. package/library/skills/debug/resource.yaml +31 -0
  331. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  332. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  333. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  334. package/library/skills/design-level/resource.yaml +31 -0
  335. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  336. package/library/skills/design-mechanic/resource.yaml +31 -0
  337. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  338. package/library/skills/design-npc/resource.yaml +29 -0
  339. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  340. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  341. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  342. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  343. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  344. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  345. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  346. package/library/skills/environment-kit/resource.yaml +29 -0
  347. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  348. package/library/skills/export-and-ship/resource.yaml +32 -0
  349. package/library/skills/fabricating-assets/SKILL.md +195 -0
  350. package/library/skills/fabricating-assets/resource.yaml +52 -0
  351. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  352. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  353. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  354. package/library/skills/fps-controller/resource.yaml +29 -0
  355. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  356. package/library/skills/game-feel/resource.yaml +27 -0
  357. package/library/skills/gameskill/SKILL.md +64 -0
  358. package/library/skills/gameskill/resource.yaml +22 -0
  359. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  360. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  361. package/library/skills/generate-motion/resource.yaml +34 -0
  362. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  363. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  364. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  365. package/library/skills/headless-scripting/resource.yaml +26 -0
  366. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  367. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  368. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  369. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  370. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  371. package/library/skills/investigating-bugs/resource.yaml +24 -0
  372. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  373. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  374. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  375. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  376. package/library/skills/make-game/resource.yaml +35 -0
  377. package/library/skills/music-track/resource.yaml +28 -0
  378. package/library/skills/navigate-summer/SKILL.md +61 -0
  379. package/library/skills/navigate-summer/resource.yaml +35 -0
  380. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  381. package/library/skills/new-project/resource.yaml +28 -0
  382. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  383. package/library/skills/organic-model/resource.yaml +32 -0
  384. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  385. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  386. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  387. package/library/skills/pixel-art/resource.yaml +31 -0
  388. package/library/skills/play/resource.yaml +26 -0
  389. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  390. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  391. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  392. package/library/skills/procedural-animation/resource.yaml +33 -0
  393. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  394. package/library/skills/prop-model/resource.yaml +33 -0
  395. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  396. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  397. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  398. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  399. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  400. package/library/skills/remote-deploy/resource.yaml +23 -0
  401. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  402. package/library/skills/retarget/resource.yaml +33 -0
  403. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  404. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  405. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  406. package/library/skills/scene-composition/resource.yaml +27 -0
  407. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  408. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  409. package/library/skills/scene-scripting/SKILL.md +764 -0
  410. package/library/skills/scene-scripting/resource.yaml +58 -0
  411. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  412. package/library/skills/scene-to-level/resource.yaml +33 -0
  413. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  414. package/library/skills/skill-create/SKILL.md +138 -0
  415. package/library/skills/skill-create/resource.yaml +25 -0
  416. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  417. package/library/skills/skill-improve/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  419. package/library/skills/skill-test/resource.yaml +26 -0
  420. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  421. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  422. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  423. package/library/skills/skybox-panorama/resource.yaml +28 -0
  424. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  425. package/library/skills/sound-effect/resource.yaml +27 -0
  426. package/library/skills/spatial-placement/SKILL.md +74 -0
  427. package/library/skills/spatial-placement/resource.yaml +42 -0
  428. package/library/skills/spatial-placement/tests/spec.md +65 -0
  429. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  430. package/library/skills/sprite-sheet/resource.yaml +32 -0
  431. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  432. package/library/skills/tileable-texture/resource.yaml +31 -0
  433. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  434. package/library/skills/trailer-shot/resource.yaml +27 -0
  435. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  436. package/library/skills/tune-performance/resource.yaml +31 -0
  437. package/library/skills/ui-basics/resource.yaml +25 -0
  438. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  439. package/library/skills/ui-graphics/resource.yaml +29 -0
  440. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  441. package/library/skills/use-widget-asset/resource.yaml +29 -0
  442. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  443. package/library/skills/using-summer/resource.yaml +41 -0
  444. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  445. package/library/skills/vehicle-model/resource.yaml +34 -0
  446. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  447. package/library/skills/verification-before-completion/resource.yaml +23 -0
  448. package/library/skills/verifying-scenes/SKILL.md +98 -0
  449. package/library/skills/verifying-scenes/resource.yaml +42 -0
  450. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  451. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  452. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  453. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  454. package/library/skills/vfx-fire/resource.yaml +35 -0
  455. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  456. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  457. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  458. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  459. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-lightning/resource.yaml +33 -0
  461. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  462. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  464. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  465. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  467. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  468. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  469. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  470. package/library/skills/vfx-smoke/resource.yaml +32 -0
  471. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  472. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  473. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  474. package/library/skills/voice-line/resource.yaml +27 -0
  475. package/library/skills/world-building-3d/SKILL.md +105 -0
  476. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  477. package/library/skills/world-building-3d/resource.yaml +44 -0
  478. package/library/skills/world-building-3d/tests/spec.md +48 -0
  479. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  480. package/library/skills/writing-plans/resource.yaml +23 -0
  481. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  482. package/library/skills/writing-skills/resource.yaml +29 -0
  483. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  484. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  485. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  486. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  487. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  488. package/library/templates/2d-platformer/resource.yaml +24 -0
  489. package/library/templates/2d-rpg/resource.yaml +21 -0
  490. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  491. package/library/templates/3d-basic/resource.yaml +16 -0
  492. package/library/templates/3d-city-kit/resource.yaml +24 -0
  493. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  494. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  495. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  496. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  497. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  498. package/library/templates/3d-racing-game/resource.yaml +21 -0
  499. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  500. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  501. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  502. package/library/templates/README.md +94 -0
  503. package/library/templates/empty/resource.yaml +16 -0
  504. package/library/tools/add-node/resource.yaml +60 -0
  505. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  506. package/library/tools/api-docs/resource.yaml +57 -0
  507. package/library/tools/batch/resource.yaml +52 -0
  508. package/library/tools/camera-bookmark/resource.yaml +73 -0
  509. package/library/tools/check-job/resource.yaml +45 -0
  510. package/library/tools/clear-console/resource.yaml +40 -0
  511. package/library/tools/connect-signal/resource.yaml +63 -0
  512. package/library/tools/create-debug-report/resource.yaml +67 -0
  513. package/library/tools/create-scene/resource.yaml +59 -0
  514. package/library/tools/creator-config/resource.yaml +63 -0
  515. package/library/tools/creator-publish/resource.yaml +73 -0
  516. package/library/tools/creator-releases/resource.yaml +53 -0
  517. package/library/tools/fabricate-3d/resource.yaml +108 -0
  518. package/library/tools/game-control/resource.yaml +84 -0
  519. package/library/tools/game-input/resource.yaml +159 -0
  520. package/library/tools/game-probe/resource.yaml +90 -0
  521. package/library/tools/generate-3d/resource.yaml +112 -0
  522. package/library/tools/generate-audio/resource.yaml +80 -0
  523. package/library/tools/generate-image/resource.yaml +62 -0
  524. package/library/tools/generate-motion/resource.yaml +66 -0
  525. package/library/tools/generate-video/resource.yaml +66 -0
  526. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  527. package/library/tools/get-asset/resource.yaml +42 -0
  528. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  529. package/library/tools/get-console/resource.yaml +69 -0
  530. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  531. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  532. package/library/tools/get-diagnostics/resource.yaml +42 -0
  533. package/library/tools/get-project-context/resource.yaml +45 -0
  534. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  535. package/library/tools/get-scene-tree/resource.yaml +52 -0
  536. package/library/tools/get-script-errors/resource.yaml +45 -0
  537. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  538. package/library/tools/import-asset/resource.yaml +73 -0
  539. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  540. package/library/tools/import-from-url/resource.yaml +51 -0
  541. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  542. package/library/tools/import-hdri/resource.yaml +69 -0
  543. package/library/tools/input-map-bind/resource.yaml +52 -0
  544. package/library/tools/inspect-node/resource.yaml +46 -0
  545. package/library/tools/inspect-resource/resource.yaml +45 -0
  546. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  547. package/library/tools/instantiate-scene/resource.yaml +62 -0
  548. package/library/tools/is-running/resource.yaml +40 -0
  549. package/library/tools/library-feedback/resource.yaml +89 -0
  550. package/library/tools/list-my-assets/resource.yaml +56 -0
  551. package/library/tools/navigation-probe/resource.yaml +85 -0
  552. package/library/tools/open/resource.yaml +80 -0
  553. package/library/tools/open-main-scene/resource.yaml +40 -0
  554. package/library/tools/open-scene/resource.yaml +46 -0
  555. package/library/tools/play/resource.yaml +91 -0
  556. package/library/tools/project-setting/resource.yaml +53 -0
  557. package/library/tools/read-file/resource.yaml +47 -0
  558. package/library/tools/read-library/resource.yaml +67 -0
  559. package/library/tools/recent-events/resource.yaml +71 -0
  560. package/library/tools/remove-node/resource.yaml +51 -0
  561. package/library/tools/replace-node/resource.yaml +57 -0
  562. package/library/tools/replace-text/resource.yaml +61 -0
  563. package/library/tools/run-editor-script/resource.yaml +61 -0
  564. package/library/tools/run-script/resource.yaml +73 -0
  565. package/library/tools/runtime-animate/resource.yaml +140 -0
  566. package/library/tools/runtime-call/resource.yaml +74 -0
  567. package/library/tools/runtime-set/resource.yaml +80 -0
  568. package/library/tools/runtime-spawn/resource.yaml +95 -0
  569. package/library/tools/save-scene/resource.yaml +50 -0
  570. package/library/tools/screenshot/resource.yaml +112 -0
  571. package/library/tools/search-assets/resource.yaml +67 -0
  572. package/library/tools/search-library/resource.yaml +81 -0
  573. package/library/tools/select-node/resource.yaml +48 -0
  574. package/library/tools/set-prop/resource.yaml +64 -0
  575. package/library/tools/set-resource-property/resource.yaml +66 -0
  576. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  577. package/library/tools/snap-to-surface/resource.yaml +90 -0
  578. package/library/tools/snapshot-diff/resource.yaml +58 -0
  579. package/library/tools/starcast/resource.yaml +120 -0
  580. package/library/tools/start-game-task/resource.yaml +91 -0
  581. package/library/tools/stop/resource.yaml +51 -0
  582. package/library/tools/test-placement/resource.yaml +109 -0
  583. package/library/tools/ui-actions/resource.yaml +77 -0
  584. package/library/tools/ui-activate/resource.yaml +88 -0
  585. package/library/tools/ui-screenshot/resource.yaml +63 -0
  586. package/library/tools/ui-tree/resource.yaml +69 -0
  587. package/library/tools/wait-for-event/resource.yaml +84 -0
  588. package/library/tools/world-snapshot/resource.yaml +60 -0
  589. package/library/tools/write-file/resource.yaml +54 -0
  590. package/package.json +22 -16
  591. package/registry/generated/aliases.json +207 -0
  592. package/registry/generated/counts.json +12 -0
  593. package/registry/generated/gemini-extension.json +122 -0
  594. package/registry/generated/index.json +7709 -0
  595. package/registry/generated/marketplace.claude.json +44 -0
  596. package/registry/generated/mcp.json +13 -0
  597. package/registry/generated/plugin.claude.json +135 -0
  598. package/registry/generated/plugin.codex.json +144 -0
  599. package/registry/generated/plugin.cursor.json +134 -0
  600. package/registry/generated/plugin.factory.json +117 -0
  601. package/registry/generated/skills-registry.json +851 -0
  602. package/registry/generated/templates-registry.json +455 -0
  603. package/registry/schemas/allowed-hosts.json +19 -0
  604. package/registry/schemas/collection.schema.json +68 -0
  605. package/registry/schemas/domains.json +96 -0
  606. package/registry/schemas/example.schema.json +11 -0
  607. package/registry/schemas/reference.schema.json +10 -0
  608. package/registry/schemas/resource.schema.json +154 -0
  609. package/registry/schemas/skill.schema.json +14 -0
  610. package/registry/schemas/template.schema.json +46 -0
  611. package/registry/schemas/tool.schema.json +61 -0
  612. package/_persona/summer/SKILL.md +0 -113
  613. package/dist/bin/postinstall.d.ts +0 -2
  614. package/dist/bin/postinstall.js +0 -3
  615. package/dist/commands/cloud.d.ts +0 -2
  616. package/dist/commands/cloud.js +0 -80
  617. package/dist/commands/create.d.ts +0 -3
  618. package/dist/commands/create.js +0 -171
  619. package/dist/commands/install.d.ts +0 -19
  620. package/dist/commands/install.js +0 -194
  621. package/dist/commands/list.js +0 -67
  622. package/dist/commands/logout.js +0 -13
  623. package/dist/commands/logs.d.ts +0 -2
  624. package/dist/commands/logs.js +0 -19
  625. package/dist/commands/open.d.ts +0 -2
  626. package/dist/commands/open.js +0 -32
  627. package/dist/commands/orchestrator.d.ts +0 -8
  628. package/dist/commands/orchestrator.js +0 -143
  629. package/dist/commands/run.d.ts +0 -2
  630. package/dist/commands/run.js +0 -167
  631. package/dist/commands/status.js +0 -46
  632. package/dist/lib/banner.d.ts +0 -4
  633. package/dist/lib/banner.js +0 -122
  634. package/dist/lib/cloud/api.d.ts +0 -79
  635. package/dist/lib/cloud/api.js +0 -107
  636. package/dist/lib/cloud/apply.d.ts +0 -32
  637. package/dist/lib/cloud/apply.js +0 -294
  638. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  639. package/dist/lib/cloud/checkpoint.js +0 -142
  640. package/dist/lib/cloud/conflicts.d.ts +0 -55
  641. package/dist/lib/cloud/conflicts.js +0 -131
  642. package/dist/lib/cloud/containment.d.ts +0 -8
  643. package/dist/lib/cloud/containment.js +0 -52
  644. package/dist/lib/cloud/diff.d.ts +0 -39
  645. package/dist/lib/cloud/diff.js +0 -138
  646. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  647. package/dist/lib/cloud/engine-bridge.js +0 -139
  648. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  649. package/dist/lib/cloud/hash-cache.js +0 -44
  650. package/dist/lib/cloud/hash.d.ts +0 -10
  651. package/dist/lib/cloud/hash.js +0 -111
  652. package/dist/lib/cloud/http.d.ts +0 -17
  653. package/dist/lib/cloud/http.js +0 -47
  654. package/dist/lib/cloud/lock-path.d.ts +0 -1
  655. package/dist/lib/cloud/lock-path.js +0 -5
  656. package/dist/lib/cloud/lock.d.ts +0 -14
  657. package/dist/lib/cloud/lock.js +0 -143
  658. package/dist/lib/cloud/manifest.d.ts +0 -6
  659. package/dist/lib/cloud/manifest.js +0 -41
  660. package/dist/lib/cloud/paths.d.ts +0 -20
  661. package/dist/lib/cloud/paths.js +0 -90
  662. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  663. package/dist/lib/cloud/project-godot-merge.js +0 -185
  664. package/dist/lib/cloud/rules.d.ts +0 -39
  665. package/dist/lib/cloud/rules.js +0 -159
  666. package/dist/lib/cloud/sync.d.ts +0 -21
  667. package/dist/lib/cloud/sync.js +0 -518
  668. package/dist/lib/cloud/transfer.d.ts +0 -23
  669. package/dist/lib/cloud/transfer.js +0 -184
  670. package/dist/lib/cloud/types.d.ts +0 -62
  671. package/dist/lib/cloud/types.js +0 -1
  672. package/dist/lib/cloud/validate-path.d.ts +0 -23
  673. package/dist/lib/cloud/validate-path.js +0 -103
  674. package/dist/lib/engine.d.ts +0 -51
  675. package/dist/lib/game-task-plan.d.ts +0 -42
  676. package/dist/lib/project-memory.d.ts +0 -33
  677. package/dist/lib/public-surface-paths.d.ts +0 -13
  678. package/dist/lib/public-surface-paths.js +0 -42
  679. package/dist/lib/remote-templates.d.ts +0 -25
  680. package/dist/lib/remote-templates.js +0 -86
  681. package/dist/lib/skills-registry.d.ts +0 -572
  682. package/dist/lib/skills-registry.js +0 -1061
  683. package/dist/lib/version-check.d.ts +0 -106
  684. package/dist/mcp/tools/cloud-tools.js +0 -42
  685. package/references/mcp-tools-reference.md +0 -199
  686. package/references/template-registry.md +0 -73
  687. package/skills/README.md +0 -103
  688. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  689. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  690. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  691. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  692. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  693. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  694. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  695. package/skills/workflow/gameskill/SKILL.md +0 -120
  696. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  697. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  698. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  699. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  700. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  701. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  702. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  703. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  704. package/skills/workflow/skill-create/SKILL.md +0 -153
  705. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  706. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  707. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  708. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  709. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  710. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  711. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  712. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  713. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  719. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  720. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  721. /package/dist/{lib → core}/store.d.ts +0 -0
  722. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  723. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  724. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  725. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  726. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  727. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  728. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  729. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  730. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  731. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  732. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  733. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  734. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  735. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  736. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  737. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  738. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  739. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  740. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  741. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  742. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,170 @@
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 { join } from "path";
9
+ import { homedir, platform } from "os";
10
+ import { AGENT_CLIENTS } from "../core/skills-registry.js";
11
+ import { tildeify } from "../core/format.js";
12
+ export const SKILL_SCOPES = ["user", "project"];
13
+ function isAgentClient(value) {
14
+ return AGENT_CLIENTS.includes(value);
15
+ }
16
+ function isSkillScope(value) {
17
+ return SKILL_SCOPES.includes(value);
18
+ }
19
+ /** Throws with a user-facing message on an unknown agent. */
20
+ export function parseSkillAgent(value) {
21
+ if (isAgentClient(value))
22
+ return value;
23
+ throw new Error(`Unknown agent: ${value}. Use one of: ${AGENT_CLIENTS.join(", ")}.`);
24
+ }
25
+ /** Throws with a user-facing message on an unknown scope. */
26
+ export function parseSkillScope(value) {
27
+ if (isSkillScope(value))
28
+ return value;
29
+ throw new Error(`Unknown scope: ${value}. Use user or project.`);
30
+ }
31
+ /** Pick the agent from --agent / legacy --as-claude-skill / --as-cursor-skill
32
+ * (default "summer"); throws on conflicting flags. */
33
+ export function resolveSkillAgent(opts) {
34
+ if (opts.asClaudeSkill && opts.asCursorSkill) {
35
+ throw new Error("Use only one legacy alias: --as-claude-skill or --as-cursor-skill.");
36
+ }
37
+ const legacyAgent = opts.asClaudeSkill
38
+ ? "claude-code"
39
+ : opts.asCursorSkill
40
+ ? "cursor"
41
+ : undefined;
42
+ if (opts.agent && legacyAgent && opts.agent !== legacyAgent) {
43
+ throw new Error(`Conflicting agent options: --agent ${opts.agent} with legacy alias for ${legacyAgent}.`);
44
+ }
45
+ return parseSkillAgent(opts.agent ?? legacyAgent ?? "summer");
46
+ }
47
+ /** Explicit --scope wins; otherwise project-rooted agents default to "project". */
48
+ export function resolveSkillScope(agent, opts) {
49
+ if (opts.scope)
50
+ return parseSkillScope(opts.scope);
51
+ if (agent === "cursor" ||
52
+ agent === "windsurf" ||
53
+ agent === "cline" ||
54
+ agent === "roo-code" ||
55
+ agent === "kilo-code") {
56
+ return "project";
57
+ }
58
+ return "user";
59
+ }
60
+ export function resolveInstallLocation(agent, scope) {
61
+ const overrideDir = process.env.SUMMER_SKILLS_DIR;
62
+ if (overrideDir) {
63
+ if (agent === "cursor")
64
+ return { kind: "cursor-rule-dir", path: overrideDir };
65
+ if (agent === "windsurf") {
66
+ return { kind: "windsurf-rule-file", path: join(overrideDir, ".windsurfrules") };
67
+ }
68
+ if (agent === "cline" || agent === "roo-code" || agent === "kilo-code") {
69
+ return { kind: "cline-rule-dir", path: overrideDir };
70
+ }
71
+ if (agent === "gemini") {
72
+ return { kind: "skill-dir", path: overrideDir };
73
+ }
74
+ if (agent === "opencode") {
75
+ return { kind: "opencode-skill-dir", path: overrideDir };
76
+ }
77
+ return { kind: "skill-dir", path: overrideDir };
78
+ }
79
+ const root = scope === "user" ? homedir() : process.cwd();
80
+ switch (agent) {
81
+ case "codex":
82
+ return { kind: "skill-dir", path: join(root, ".agents", "skills") };
83
+ case "claude-code":
84
+ return { kind: "skill-dir", path: join(root, ".claude", "skills") };
85
+ case "cursor":
86
+ return { kind: "cursor-rule-dir", path: join(root, ".cursor", "rules") };
87
+ case "windsurf":
88
+ return { kind: "windsurf-rule-file", path: join(root, ".windsurfrules") };
89
+ case "cline":
90
+ return {
91
+ kind: "cline-rule-dir",
92
+ path: scope === "user"
93
+ ? clineUserRulesDir()
94
+ : join(process.cwd(), ".clinerules"),
95
+ };
96
+ case "roo-code":
97
+ return {
98
+ kind: "cline-rule-dir",
99
+ path: scope === "user"
100
+ ? rooCodeUserRulesDir()
101
+ : join(process.cwd(), ".clinerules"),
102
+ };
103
+ case "kilo-code":
104
+ return {
105
+ kind: "cline-rule-dir",
106
+ path: scope === "user"
107
+ ? join(homedir(), ".kilocode", "rules")
108
+ : join(process.cwd(), ".kilocode", "rules"),
109
+ };
110
+ case "gemini":
111
+ // Gemini discovers extension skills from <extension>/skills/<name>/SKILL.md
112
+ // (geminicli.com/docs/extensions/reference), so copy the skill directories
113
+ // as-is. The extension dir itself is written by `summer setup gemini`.
114
+ return {
115
+ kind: "skill-dir",
116
+ path: join(homedir(), ".gemini", "extensions", "summer-engine", "skills"),
117
+ };
118
+ case "github-copilot":
119
+ case "vscode-copilot":
120
+ return {
121
+ kind: "skill-dir",
122
+ path: scope === "user"
123
+ ? join(homedir(), ".copilot", "skills")
124
+ : join(process.cwd(), ".github", "skills"),
125
+ };
126
+ case "opencode":
127
+ return {
128
+ kind: "opencode-skill-dir",
129
+ path: scope === "user"
130
+ ? opencodeUserAgentsDir()
131
+ : join(process.cwd(), ".opencode", "agents", "summer"),
132
+ };
133
+ case "summer":
134
+ return { kind: "skill-dir", path: join(root, ".summer", "skills") };
135
+ }
136
+ }
137
+ function clineUserRulesDir() {
138
+ // Cline reads global rules from the user's Documents/Cline/Rules folder.
139
+ return join(homedir(), "Documents", "Cline", "Rules");
140
+ }
141
+ function rooCodeUserRulesDir() {
142
+ // Roo Code reads global rules from the user's Documents/Roo/Rules folder.
143
+ return join(homedir(), "Documents", "Roo", "Rules");
144
+ }
145
+ function opencodeUserAgentsDir() {
146
+ // OpenCode's user-scope agent definition directory varies by OS.
147
+ // On Windows, OpenCode reads from %APPDATA%/opencode/agents/summer.
148
+ // On Linux/macOS, it reads from $XDG_CONFIG_HOME or ~/.config/opencode/agents/summer.
149
+ if (platform() === "win32") {
150
+ const appData = process.env.APPDATA ?? join(homedir(), "AppData", "Roaming");
151
+ return join(appData, "opencode", "agents", "summer");
152
+ }
153
+ const xdg = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
154
+ return join(xdg, "opencode", "agents", "summer");
155
+ }
156
+ /** One-line, human path pattern for where an install location puts skills. */
157
+ export function describeInstallLocation(location) {
158
+ const p = tildeify(location.path);
159
+ switch (location.kind) {
160
+ case "skill-dir":
161
+ return `${p}/<skill>/SKILL.md`;
162
+ case "cursor-rule-dir":
163
+ return `${p}/summer-<skill>.mdc`;
164
+ case "cline-rule-dir":
165
+ case "opencode-skill-dir":
166
+ return `${p}/summer-<skill>.md`;
167
+ case "windsurf-rule-file":
168
+ return p;
169
+ }
170
+ }
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Version drift detection helpers used by `summer doctor` and the MCP server
3
+ * boot path.
4
+ *
5
+ * Two checks are exposed:
6
+ * - cli-version-current: compares installed package.json version against the
7
+ * latest published `summer-engine` on the npm registry.
8
+ * - skills-version-stale: reads a `.summer-version` marker written into the
9
+ * skill install dir (per-agent) and compares against the current CLI.
10
+ *
11
+ * Both are designed to be silent on offline / network errors — we never want
12
+ * to false-alarm a user just because their wifi is flaky.
13
+ */
14
+ import { type StdioMcpServerConfig } from "./agent-config.js";
15
+ export interface SemverParts {
16
+ major: number;
17
+ minor: number;
18
+ patch: number;
19
+ }
20
+ export type DriftSeverity = "ok" | "warning" | "fail";
21
+ export interface DriftClassification {
22
+ severity: DriftSeverity;
23
+ reason: "current" | "ahead" | "patch-only" | "minor-drift" | "major-drift" | "behind";
24
+ }
25
+ export declare function parseSemver(version: string): SemverParts | null;
26
+ export declare function compareSemver(a: SemverParts, b: SemverParts): number;
27
+ /**
28
+ * Classify drift between an installed and a target version.
29
+ *
30
+ * ok installed >= target, OR installed is behind only on patch
31
+ * OR installed differs only in pre-release/build metadata.
32
+ * warning one minor version behind on the same major.
33
+ * fail two or more minors behind, or any major-version drift behind.
34
+ */
35
+ export declare function classifyDrift(installed: SemverParts, target: SemverParts): DriftClassification;
36
+ export interface RegistryFetchOptions {
37
+ /** Override the default fetch (used in tests). Must implement the global fetch shape. */
38
+ fetchImpl?: typeof fetch;
39
+ /** Override the timeout. */
40
+ timeoutMs?: number;
41
+ /** Override the URL (used in tests). */
42
+ url?: string;
43
+ }
44
+ export interface RegistryFetchResult {
45
+ ok: true;
46
+ version: string;
47
+ }
48
+ export interface RegistryFetchFailure {
49
+ ok: false;
50
+ reason: "registry-unreachable";
51
+ message?: string;
52
+ }
53
+ export declare function fetchLatestRegistryVersion(options?: RegistryFetchOptions): Promise<RegistryFetchResult | RegistryFetchFailure>;
54
+ /**
55
+ * Build the `cli-version-current` doctor check. Pure helper so tests can drive
56
+ * registry responses through `fetchImpl` rather than touching the network.
57
+ */
58
+ export interface CliVersionCheckInput {
59
+ installedVersion: string;
60
+ registry: RegistryFetchResult | RegistryFetchFailure;
61
+ }
62
+ export interface CliVersionCheckOutput {
63
+ status: DriftSeverity;
64
+ message: string;
65
+ details: Record<string, unknown>;
66
+ }
67
+ export declare function buildCliVersionCheck(input: CliVersionCheckInput): CliVersionCheckOutput;
68
+ export declare const SKILL_VERSION_MARKER_FILENAME = ".summer-version";
69
+ export interface SkillVersionMarker {
70
+ version: string;
71
+ installedAt: string;
72
+ }
73
+ export declare function readSkillMarker(dir: string): SkillVersionMarker | null;
74
+ export declare function writeSkillMarker(dir: string, version: string, now?: Date): string;
75
+ /**
76
+ * Candidate locations for skill-version markers. Listed roughly in order of
77
+ * how likely a Summer user is to have them populated. We probe every candidate,
78
+ * not just the first one — if multiple agents have markers, the most-stale one
79
+ * wins so we surface the worst case to the user.
80
+ */
81
+ export interface SkillMarkerCandidate {
82
+ agent: string;
83
+ dir: string;
84
+ }
85
+ export declare function defaultSkillMarkerCandidates(): SkillMarkerCandidate[];
86
+ /**
87
+ * How the agent's Summer MCP entry was recorded by `summer setup`
88
+ * (agent-config.ts createSummerMcpServerConfig): a `--local-dev` link runs
89
+ * `node <checkout>/dist/bin/summer.js mcp`; a normal install runs
90
+ * `npx -y summer-engine@latest mcp`. The refresh command doctor recommends
91
+ * must keep that shape — the npx form on a local-dev machine would replace
92
+ * the checkout link with the published package (E2E 2026-09-03 F-09).
93
+ */
94
+ export interface RecordedInstall {
95
+ localDev: boolean;
96
+ /** The CLI entry point the agent runs, when local-dev. */
97
+ cliPath: string | null;
98
+ /** Where the answer came from: the agent's config file, or — when it has
99
+ * no readable Summer entry — the nature of the CLI running this check. */
100
+ source: "agent-config" | "running-cli";
101
+ }
102
+ export type RefreshChannel = "latest" | "next";
103
+ /** The npm dist-tag a refresh command should name. A CLI that is AHEAD of
104
+ * npm `latest` was installed from `next` (a soaking release); telling that
105
+ * user to run `summer-engine@latest` would silently downgrade the MCP server
106
+ * while leaving the newer skills in place (release review P1-3). */
107
+ export declare function refreshChannel(installedVersion: string, latestVersion: string | undefined): RefreshChannel;
108
+ /** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
109
+ * given: `next` while this CLI is ahead of npm latest, else `latest`. Network
110
+ * failure means `latest` (never blocks setup). */
111
+ export declare function resolveDefaultChannel(installedVersion: string): Promise<{
112
+ channel: RefreshChannel;
113
+ note?: string;
114
+ }>;
115
+ export interface SkillsVersionCheckInput {
116
+ installedCliVersion: string;
117
+ candidates: SkillMarkerCandidate[];
118
+ /** npm latest, when known, so the refresh command names the right dist-tag. */
119
+ latestRegistryVersion?: string;
120
+ /** Resolves how the stale agent's MCP entry was recorded; defaults to
121
+ * detectRecordedInstall. Seam for tests. */
122
+ recordedInstall?: (agent: string) => Promise<RecordedInstall | null> | RecordedInstall | null;
123
+ }
124
+ export interface SkillsVersionCheckOutput {
125
+ /** "ok" or "warning" — stale skills never fail doctor (TESTING.md §d). */
126
+ status: DriftSeverity;
127
+ message: string;
128
+ details: Record<string, unknown>;
129
+ }
130
+ export declare function buildSkillsVersionCheck(input: SkillsVersionCheckInput): Promise<SkillsVersionCheckOutput>;
131
+ /**
132
+ * The command that refreshes an agent's skills without changing how its MCP
133
+ * entry was recorded: the local-dev form re-links the same checkout
134
+ * (`setup --local-dev --force` re-copies the checkout's skills); the npx form
135
+ * is for installs that already run the published package.
136
+ */
137
+ export declare function skillsRefreshCommand(agent: string, install: RecordedInstall | null, channel?: RefreshChannel): string;
138
+ /** The shape `summer setup --local-dev` writes: `node <…>/dist/bin/summer.js mcp`
139
+ * (createSummerMcpServerConfig(true)). */
140
+ export declare function isLocalDevServerConfig(server: StdioMcpServerConfig): boolean;
141
+ /**
142
+ * Read the Summer MCP entry an agent's config records, shape-tolerantly
143
+ * (this is the read side of agent-config.ts's per-format writers):
144
+ * json {"mcpServers": {"summer-engine": {command, args}}} Claude Code, Cursor, …
145
+ * json-copilot {"mcpServers": {"summer-engine": {type, command, args}}}
146
+ * json-vscode {"servers": {"summer-engine": {type, command, args}}}
147
+ * json-opencode {"mcp": {"summer-engine": {type, command: [cmd, ...args]}}}
148
+ * toml (codex) [mcp_servers.summer-engine]\ncommand = "…"\nargs = ["…", …]
149
+ * Returns null when the file is missing, unparsable, or has no Summer entry.
150
+ */
151
+ export declare function readRecordedMcpServer(text: string, format: "json" | "toml" | "json-opencode" | "json-copilot" | "json-vscode"): StdioMcpServerConfig | null;
152
+ /** Is the CLI running this check a source checkout rather than an installed
153
+ * package? npm/npx/global installs all live under a node_modules directory. */
154
+ export declare function runningCliIsCheckout(packageRoot?: string): boolean;
155
+ /**
156
+ * How `summer setup` recorded the agent's Summer MCP entry. Resolves the
157
+ * agent's user-scope config path through agent-config's own target
158
+ * resolution (print mode: no file is written or read there), then reads the
159
+ * entry. Marker agents without an agent config ("summer") and agents whose
160
+ * config has no readable Summer entry fall back to the nature of the running
161
+ * CLI: a checkout recommends re-linking itself, an installed package the npx form.
162
+ */
163
+ export declare function detectRecordedInstall(agent: string): Promise<RecordedInstall | null>;
164
+ /**
165
+ * Helper used by the MCP server boot path to render a one-line drift notice.
166
+ * Returns null when no notice is needed (fresh, ahead, patch-only, offline).
167
+ */
168
+ export interface BootDriftNotice {
169
+ installedVersion: string;
170
+ latestVersion: string;
171
+ agent?: string;
172
+ text: string;
173
+ }
174
+ export declare function buildBootDriftNotice(installedVersion: string, registry: RegistryFetchResult | RegistryFetchFailure, agent?: string): BootDriftNotice | null;
@@ -11,9 +11,11 @@
11
11
  * Both are designed to be silent on offline / network errors — we never want
12
12
  * to false-alarm a user just because their wifi is flaky.
13
13
  */
14
- import { existsSync, readFileSync, writeFileSync, statSync } from "node:fs";
14
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
15
15
  import { homedir, platform } from "node:os";
16
- import { join } from "node:path";
16
+ import { join, sep } from "node:path";
17
+ import { PACKAGE_ROOT } from "../core/package-root.js";
18
+ import { configureAgentMcp, parseAgent, SUMMER_MCP_SERVER_NAME, } from "./agent-config.js";
17
19
  const NPM_REGISTRY_LATEST_URL = "https://registry.npmjs.org/summer-engine/latest";
18
20
  const REGISTRY_FETCH_TIMEOUT_MS = 3000;
19
21
  export function parseSemver(version) {
@@ -224,7 +226,30 @@ export function defaultSkillMarkerCandidates() {
224
226
  }
225
227
  return candidates;
226
228
  }
227
- export function buildSkillsVersionCheck(input) {
229
+ /** The npm dist-tag a refresh command should name. A CLI that is AHEAD of
230
+ * npm `latest` was installed from `next` (a soaking release); telling that
231
+ * user to run `summer-engine@latest` would silently downgrade the MCP server
232
+ * while leaving the newer skills in place (release review P1-3). */
233
+ export function refreshChannel(installedVersion, latestVersion) {
234
+ const installed = parseSemver(installedVersion);
235
+ const latest = latestVersion ? parseSemver(latestVersion) : null;
236
+ if (!installed || !latest)
237
+ return "latest";
238
+ return classifyDrift(installed, latest).reason === "ahead" ? "next" : "latest";
239
+ }
240
+ /** Default `summer setup` channel when neither --channel nor SUMMER_CHANNEL is
241
+ * given: `next` while this CLI is ahead of npm latest, else `latest`. Network
242
+ * failure means `latest` (never blocks setup). */
243
+ export async function resolveDefaultChannel(installedVersion) {
244
+ const registry = await fetchLatestRegistryVersion();
245
+ if (!registry.ok)
246
+ return { channel: "latest" };
247
+ const channel = refreshChannel(installedVersion, registry.version);
248
+ return channel === "next"
249
+ ? { channel, note: `This CLI (${installedVersion}) is ahead of npm latest (${registry.version}); the MCP entry is pinned to summer-engine@next so the agent keeps running this release. Pass --channel latest to override.` }
250
+ : { channel };
251
+ }
252
+ export async function buildSkillsVersionCheck(input) {
228
253
  const cliParsed = parseSemver(input.installedCliVersion);
229
254
  if (!cliParsed) {
230
255
  return {
@@ -274,35 +299,153 @@ export function buildSkillsVersionCheck(input) {
274
299
  installedAt: worst.marker.installedAt,
275
300
  cliVersion: input.installedCliVersion,
276
301
  };
277
- switch (worst.drift.severity) {
278
- case "ok":
279
- return {
280
- status: "ok",
281
- message: `skills v${worst.marker.version} match CLI`,
282
- details: baseDetails,
283
- };
284
- case "warning":
285
- return {
286
- status: "warning",
287
- message: `skills v${worst.marker.version} are one minor version behind v${input.installedCliVersion}`,
288
- details: {
289
- ...baseDetails,
290
- recommendedAction: skillsRefreshCommand(worst.agent),
291
- },
292
- };
293
- case "fail":
294
- return {
295
- status: "fail",
296
- message: `skills v${worst.marker.version} are significantly behind v${input.installedCliVersion}`,
297
- details: {
298
- ...baseDetails,
299
- recommendedAction: skillsRefreshCommand(worst.agent),
300
- },
301
- };
302
+ if (worst.drift.severity === "ok") {
303
+ return {
304
+ status: "ok",
305
+ message: `skills v${worst.marker.version} match CLI`,
306
+ details: baseDetails,
307
+ };
302
308
  }
309
+ // Skills that lag the CLI still work — the toolkit is not broken, the
310
+ // library it installed is older than the one it ships. That is a warning
311
+ // with a refresh command, never an exit-1 failure; a "fail"-grade drift
312
+ // (two minors or a major behind) only changes the wording.
313
+ const install = await resolveRecordedInstall(input.recordedInstall, worst.agent);
314
+ return {
315
+ status: "warning",
316
+ message: worst.drift.severity === "fail"
317
+ ? `skills v${worst.marker.version} are significantly behind v${input.installedCliVersion}`
318
+ : `skills v${worst.marker.version} are one minor version behind v${input.installedCliVersion}`,
319
+ details: {
320
+ ...baseDetails,
321
+ drift: worst.drift.reason,
322
+ ...(install ? { install } : {}),
323
+ recommendedAction: skillsRefreshCommand(worst.agent, install, refreshChannel(input.installedCliVersion, input.latestRegistryVersion)),
324
+ },
325
+ };
303
326
  }
304
- function skillsRefreshCommand(agent) {
305
- return `npx clear-npx-cache && npx -y summer-engine@latest setup ${agent} --yes --force`;
327
+ async function resolveRecordedInstall(resolver, agent) {
328
+ try {
329
+ return (await (resolver ?? detectRecordedInstall)(agent)) ?? null;
330
+ }
331
+ catch {
332
+ // A detection failure must not break doctor; the npx form is the
333
+ // conservative default only when nothing says local-dev.
334
+ return null;
335
+ }
336
+ }
337
+ /**
338
+ * The command that refreshes an agent's skills without changing how its MCP
339
+ * entry was recorded: the local-dev form re-links the same checkout
340
+ * (`setup --local-dev --force` re-copies the checkout's skills); the npx form
341
+ * is for installs that already run the published package.
342
+ */
343
+ export function skillsRefreshCommand(agent, install, channel = "latest") {
344
+ if (install?.localDev && install.cliPath) {
345
+ return `node ${install.cliPath} setup ${agent} --local-dev --yes --force`;
346
+ }
347
+ const tag = channel === "next" ? "next" : "latest";
348
+ return `npx clear-npx-cache && npx -y summer-engine@${tag} setup ${agent} --yes --force${channel === "next" ? " --channel next" : ""}`;
349
+ }
350
+ /** The shape `summer setup --local-dev` writes: `node <…>/dist/bin/summer.js mcp`
351
+ * (createSummerMcpServerConfig(true)). */
352
+ export function isLocalDevServerConfig(server) {
353
+ const entry = server.args[0] ?? "";
354
+ return (server.command === "node" &&
355
+ /(^|[\\/])bin[\\/]summer\.js$/.test(entry) &&
356
+ server.args[1] === "mcp");
357
+ }
358
+ /**
359
+ * Read the Summer MCP entry an agent's config records, shape-tolerantly
360
+ * (this is the read side of agent-config.ts's per-format writers):
361
+ * json {"mcpServers": {"summer-engine": {command, args}}} Claude Code, Cursor, …
362
+ * json-copilot {"mcpServers": {"summer-engine": {type, command, args}}}
363
+ * json-vscode {"servers": {"summer-engine": {type, command, args}}}
364
+ * json-opencode {"mcp": {"summer-engine": {type, command: [cmd, ...args]}}}
365
+ * toml (codex) [mcp_servers.summer-engine]\ncommand = "…"\nargs = ["…", …]
366
+ * Returns null when the file is missing, unparsable, or has no Summer entry.
367
+ */
368
+ export function readRecordedMcpServer(text, format) {
369
+ if (!text.trim())
370
+ return null;
371
+ if (format === "toml") {
372
+ const table = text.match(new RegExp(`^\\[mcp_servers\\.${SUMMER_MCP_SERVER_NAME.replace(/[-.]/g, "\\$&")}\\]\\s*$([\\s\\S]*?)(?=^\\[|(?![\\s\\S]))`, "m"));
373
+ if (!table)
374
+ return null;
375
+ const command = table[1].match(/^command\s*=\s*"((?:[^"\\]|\\.)*)"/m)?.[1];
376
+ const argsText = table[1].match(/^args\s*=\s*\[([^\]]*)\]/m)?.[1] ?? "";
377
+ if (!command)
378
+ return null;
379
+ const args = [...argsText.matchAll(/"((?:[^"\\]|\\.)*)"/g)].map((m) => m[1].replace(/\\(.)/g, "$1"));
380
+ return { command: command.replace(/\\(.)/g, "$1"), args };
381
+ }
382
+ let parsed;
383
+ try {
384
+ parsed = JSON.parse(text);
385
+ }
386
+ catch {
387
+ return null;
388
+ }
389
+ if (!parsed || typeof parsed !== "object")
390
+ return null;
391
+ const root = parsed;
392
+ for (const container of ["mcpServers", "servers", "mcp"]) {
393
+ const servers = root[container];
394
+ if (!servers || typeof servers !== "object")
395
+ continue;
396
+ const entry = servers[SUMMER_MCP_SERVER_NAME];
397
+ if (!entry || typeof entry !== "object")
398
+ continue;
399
+ const record = entry;
400
+ if (Array.isArray(record.command)) {
401
+ const [command, ...args] = record.command.filter((part) => typeof part === "string");
402
+ return command ? { command, args } : null;
403
+ }
404
+ if (typeof record.command === "string") {
405
+ const args = Array.isArray(record.args)
406
+ ? record.args.filter((part) => typeof part === "string")
407
+ : [];
408
+ return { command: record.command, args };
409
+ }
410
+ }
411
+ return null;
412
+ }
413
+ /** Is the CLI running this check a source checkout rather than an installed
414
+ * package? npm/npx/global installs all live under a node_modules directory. */
415
+ export function runningCliIsCheckout(packageRoot = PACKAGE_ROOT) {
416
+ return !packageRoot.split(/[\\/]/).includes("node_modules");
417
+ }
418
+ /**
419
+ * How `summer setup` recorded the agent's Summer MCP entry. Resolves the
420
+ * agent's user-scope config path through agent-config's own target
421
+ * resolution (print mode: no file is written or read there), then reads the
422
+ * entry. Marker agents without an agent config ("summer") and agents whose
423
+ * config has no readable Summer entry fall back to the nature of the running
424
+ * CLI: a checkout recommends re-linking itself, an installed package the npx form.
425
+ */
426
+ export async function detectRecordedInstall(agent) {
427
+ const supported = parseAgent(agent);
428
+ if (supported) {
429
+ try {
430
+ const target = await configureAgentMcp({ agent: supported, scope: "user", print: true });
431
+ if (existsSync(target.path)) {
432
+ const recorded = readRecordedMcpServer(readFileSync(target.path, "utf-8"), target.format);
433
+ if (recorded) {
434
+ const localDev = isLocalDevServerConfig(recorded);
435
+ return { localDev, cliPath: localDev ? recorded.args[0] ?? null : null, source: "agent-config" };
436
+ }
437
+ }
438
+ }
439
+ catch {
440
+ // Unreadable config: fall through to the running-CLI answer.
441
+ }
442
+ }
443
+ const checkout = runningCliIsCheckout();
444
+ return {
445
+ localDev: checkout,
446
+ cliPath: checkout ? [PACKAGE_ROOT, "dist", "bin", "summer.js"].join(sep) : null,
447
+ source: "running-cli",
448
+ };
306
449
  }
307
450
  export function buildBootDriftNotice(installedVersion, registry, agent) {
308
451
  if (!registry.ok)
@@ -324,15 +467,3 @@ export function buildBootDriftNotice(installedVersion, registry, agent) {
324
467
  text,
325
468
  };
326
469
  }
327
- // Re-export for tests / callers that want to know the install marker's mtime.
328
- export function markerMtime(dir) {
329
- const path = join(dir, SKILL_VERSION_MARKER_FILENAME);
330
- if (!existsSync(path))
331
- return null;
332
- try {
333
- return statSync(path).mtimeMs;
334
- }
335
- catch {
336
- return null;
337
- }
338
- }
@@ -1,3 +1,3 @@
1
- import type { BootDriftNotice } from "./version-check.js";
1
+ import type { BootDriftNotice } from "../installer/version-check.js";
2
2
  export declare function getCachedBootDriftNotice(): BootDriftNotice | null;
3
3
  export declare function setCachedBootDriftNotice(notice: BootDriftNotice | null): void;
@@ -1,6 +1,6 @@
1
- import { Command } from "commander";
2
- import { configureAgentMcp, parseAgent, parseScope, supportedAgents, } from "../lib/agent-config.js";
3
- import { startMcpServer } from "../mcp/server.js";
1
+ import { Command, Option } from "commander";
2
+ import { configureAgentMcp, parseAgent, parseScope, supportedAgents, } from "../installer/agent-config.js";
3
+ import { startMcpServer } from "./server.js";
4
4
  export const mcpCommand = new Command("mcp")
5
5
  .description("Start the MCP server for AI tool integration (Cursor, Claude Code, etc.)")
6
6
  .option("--project <path>", "Bind local engine tools to the editor running this project")
@@ -11,13 +11,22 @@ export const mcpCommand = new Command("mcp")
11
11
  instanceId: opts.instance,
12
12
  });
13
13
  });
14
+ // Deprecated alias. `summer setup <agent>` (src/cli/commands/setup.ts) is the
15
+ // one setup path: the same configureAgentMcp() write plus skills + doctor.
16
+ // This stays for one release so existing docs/scripts keep working; it cannot
17
+ // delegate to the cli layer (contract §2: mcp never imports cli), so it calls
18
+ // the shared installer directly and says where to go.
14
19
  mcpCommand
15
20
  .command("setup <agent>")
16
- .description("Configure an AI agent to use the Summer Engine MCP server")
21
+ .description("Deprecated alias of `summer setup <agent>`: write only the MCP config for an agent")
17
22
  .option("--scope <scope>", "Configuration scope: user or project", "user")
18
23
  .option("--print", "Print the MCP config snippet instead of writing files")
19
24
  .option("--dry-run", "Show planned changes without writing files")
20
- .option("--local-dev", "Use the local built CLI instead of npx summer-engine")
25
+ .addOption(
26
+ // Contributor-only: point the config at this checkout's built CLI instead
27
+ // of npx summer-engine. Hidden from the public surface; also honoured
28
+ // when SUMMER_DEV=1 is set.
29
+ new Option("--local-dev", "Use the local built CLI instead of npx summer-engine").hideHelp())
21
30
  .option("--json", "Print the setup result as JSON")
22
31
  .action(async (agentValue, opts) => {
23
32
  const agent = parseAgent(agentValue);
@@ -33,12 +42,15 @@ mcpCommand
33
42
  scope,
34
43
  print: opts.print,
35
44
  dryRun: opts.dryRun,
36
- localDev: opts.localDev,
45
+ localDev: opts.localDev || process.env.SUMMER_DEV === "1",
37
46
  });
38
47
  if (opts.json) {
39
48
  console.log(JSON.stringify(result, null, 2));
40
49
  return;
41
50
  }
51
+ if (!opts.print) {
52
+ console.warn(`Note: 'summer mcp setup' is deprecated; use 'summer setup ${agent}' (same MCP config, plus skills and doctor).`);
53
+ }
42
54
  if (result.print) {
43
55
  console.log(result.snippet.trimEnd());
44
56
  }