summer-engine 2.8.2 → 3.1.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 (790) 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 +149 -44
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +161 -393
  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/cli/commands/setup.js +158 -0
  49. package/dist/{commands → cli/commands}/skills.js +121 -251
  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 +55 -0
  167. package/dist/core/skills-registry.js +106 -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/installer/agent-config.d.ts +63 -0
  188. package/dist/installer/agent-config.js +540 -0
  189. package/dist/installer/agent-table.d.ts +103 -0
  190. package/dist/installer/agent-table.js +584 -0
  191. package/dist/installer/legacy-skills.d.ts +26 -0
  192. package/dist/installer/legacy-skills.js +53 -0
  193. package/dist/installer/setup.d.ts +76 -0
  194. package/dist/installer/setup.js +148 -0
  195. package/dist/installer/skill-locations.d.ts +36 -0
  196. package/dist/installer/skill-locations.js +91 -0
  197. package/dist/installer/version-check.d.ts +178 -0
  198. package/dist/installer/version-check.js +479 -0
  199. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  200. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  201. package/dist/mcp/server.d.ts +23 -3
  202. package/dist/mcp/server.js +122 -28
  203. package/dist/mcp/tools/asset-tools.js +62 -142
  204. package/dist/mcp/tools/creator-tools.js +5 -23
  205. package/dist/mcp/tools/debug-tools.js +61 -18
  206. package/dist/mcp/tools/event-tools.d.ts +14 -0
  207. package/dist/mcp/tools/event-tools.js +41 -0
  208. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  209. package/dist/mcp/tools/fabricate-tools.js +28 -0
  210. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  211. package/dist/mcp/tools/feedback-tools.js +88 -0
  212. package/dist/mcp/tools/file-tools.js +6 -53
  213. package/dist/mcp/tools/generate-tools.js +37 -63
  214. package/dist/mcp/tools/library-tools.d.ts +11 -0
  215. package/dist/mcp/tools/library-tools.js +42 -0
  216. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  217. package/dist/mcp/tools/navigation-tools.js +37 -0
  218. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  219. package/dist/mcp/tools/perception-tools.js +146 -0
  220. package/dist/mcp/tools/project-tools.d.ts +14 -0
  221. package/dist/mcp/tools/project-tools.js +72 -281
  222. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  223. package/dist/mcp/tools/runtime-tools.js +92 -0
  224. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  225. package/dist/mcp/tools/scene-tools.js +68 -119
  226. package/dist/mcp/tools/script-tools.d.ts +3 -0
  227. package/dist/mcp/tools/script-tools.js +118 -0
  228. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  229. package/dist/mcp/tools/spatial-tools.js +485 -0
  230. package/dist/mcp/tools/text-json.d.ts +8 -0
  231. package/dist/mcp/tools/text-json.js +12 -0
  232. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  233. package/dist/mcp/tools/ui-tools.js +82 -0
  234. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  235. package/dist/mcp/tools/visual-tools.js +383 -101
  236. package/dist/mcp/tools/with-engine.d.ts +9 -15
  237. package/dist/mcp/tools/with-engine.js +60 -96
  238. package/dist/project-memory/project-manifest.d.ts +36 -0
  239. package/dist/project-memory/project-manifest.js +50 -0
  240. package/dist/project-memory/project-memory.d.ts +57 -0
  241. package/dist/{lib → project-memory}/project-memory.js +46 -0
  242. package/gemini-extension.json +103 -2
  243. package/hooks/hooks-cursor.json +2 -2
  244. package/hooks/hooks.json +2 -1
  245. package/hooks/pre-commit-doctor.sh +45 -39
  246. package/hooks/run-hook.cmd +30 -23
  247. package/hooks/run-hook.sh +20 -0
  248. package/hooks/session-start.sh +18 -7
  249. package/integrations/README.md +99 -0
  250. package/integrations/amp/README.md +12 -0
  251. package/integrations/amp/manifest-target.json +3 -0
  252. package/integrations/antigravity/README.md +12 -0
  253. package/integrations/antigravity/manifest-target.json +3 -0
  254. package/integrations/claude/README.md +19 -0
  255. package/integrations/claude/manifest-target.json +16 -0
  256. package/integrations/claude-desktop/README.md +12 -0
  257. package/integrations/claude-desktop/manifest-target.json +3 -0
  258. package/integrations/cline/README.md +12 -0
  259. package/integrations/cline/manifest-target.json +3 -0
  260. package/integrations/cline-cli/README.md +12 -0
  261. package/integrations/cline-cli/manifest-target.json +3 -0
  262. package/integrations/codex/README.md +15 -0
  263. package/integrations/codex/manifest-target.json +5 -0
  264. package/integrations/copilot-jetbrains/README.md +12 -0
  265. package/integrations/copilot-jetbrains/manifest-target.json +3 -0
  266. package/integrations/crush/README.md +12 -0
  267. package/integrations/crush/manifest-target.json +3 -0
  268. package/integrations/cursor/README.md +16 -0
  269. package/integrations/cursor/manifest-target.json +5 -0
  270. package/integrations/factory/README.md +26 -0
  271. package/integrations/factory/manifest-target.json +5 -0
  272. package/integrations/gemini/README.md +26 -0
  273. package/integrations/gemini/manifest-target.json +5 -0
  274. package/integrations/github-copilot/README.md +12 -0
  275. package/integrations/github-copilot/manifest-target.json +3 -0
  276. package/integrations/goose/README.md +12 -0
  277. package/integrations/goose/manifest-target.json +3 -0
  278. package/integrations/grok-build/README.md +12 -0
  279. package/integrations/grok-build/manifest-target.json +3 -0
  280. package/integrations/hermes/README.md +12 -0
  281. package/integrations/hermes/manifest-target.json +3 -0
  282. package/integrations/junie/README.md +12 -0
  283. package/integrations/junie/manifest-target.json +3 -0
  284. package/integrations/kilo-code/README.md +12 -0
  285. package/integrations/kilo-code/manifest-target.json +3 -0
  286. package/integrations/kimi-code/README.md +12 -0
  287. package/integrations/kimi-code/manifest-target.json +3 -0
  288. package/integrations/kiro/README.md +12 -0
  289. package/integrations/kiro/manifest-target.json +3 -0
  290. package/integrations/lm-studio/README.md +12 -0
  291. package/integrations/lm-studio/manifest-target.json +3 -0
  292. package/integrations/mistral-vibe/README.md +12 -0
  293. package/integrations/mistral-vibe/manifest-target.json +3 -0
  294. package/integrations/opencode/README.md +12 -0
  295. package/integrations/opencode/manifest-target.json +3 -0
  296. package/integrations/qoder/README.md +12 -0
  297. package/integrations/qoder/manifest-target.json +3 -0
  298. package/integrations/qwen-code/README.md +12 -0
  299. package/integrations/qwen-code/manifest-target.json +3 -0
  300. package/integrations/roo-code/README.md +14 -0
  301. package/integrations/roo-code/manifest-target.json +3 -0
  302. package/integrations/rovo-dev/README.md +12 -0
  303. package/integrations/rovo-dev/manifest-target.json +3 -0
  304. package/integrations/trae/README.md +12 -0
  305. package/integrations/trae/manifest-target.json +3 -0
  306. package/integrations/visual-studio/README.md +12 -0
  307. package/integrations/visual-studio/manifest-target.json +3 -0
  308. package/integrations/vscode-copilot/README.md +12 -0
  309. package/integrations/vscode-copilot/manifest-target.json +3 -0
  310. package/integrations/warp/README.md +12 -0
  311. package/integrations/warp/manifest-target.json +3 -0
  312. package/integrations/windsurf/README.md +12 -0
  313. package/integrations/windsurf/manifest-target.json +3 -0
  314. package/integrations/zed/README.md +12 -0
  315. package/integrations/zed/manifest-target.json +3 -0
  316. package/library/references/collaborative-protocol/resource.yaml +24 -0
  317. package/library/references/gd-style/resource.yaml +24 -0
  318. package/{references → library/references/godot-version}/godot-version.md +6 -6
  319. package/library/references/godot-version/resource.yaml +22 -0
  320. package/library/references/headless-routing/headless-routing.md +46 -0
  321. package/library/references/headless-routing/resource.yaml +24 -0
  322. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  323. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  324. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  325. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  326. package/library/references/product-map/product-map.md +103 -0
  327. package/library/references/product-map/resource.yaml +33 -0
  328. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  329. package/library/references/public-surface-language/resource.yaml +17 -0
  330. package/library/references/summer-folder/resource.yaml +20 -0
  331. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  332. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  333. package/library/skills/3d-lighting/resource.yaml +27 -0
  334. package/library/skills/README.md +242 -0
  335. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  336. package/library/skills/adaptive-music/resource.yaml +28 -0
  337. package/library/skills/agent-playtesting/SKILL.md +148 -0
  338. package/library/skills/agent-playtesting/resource.yaml +52 -0
  339. package/library/skills/ambient-bed/resource.yaml +24 -0
  340. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  341. package/library/skills/animated-loop/resource.yaml +27 -0
  342. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  343. package/library/skills/animation-tree/resource.yaml +33 -0
  344. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  345. package/library/skills/art-direction/resource.yaml +29 -0
  346. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  347. package/library/skills/asset-strategy/resource.yaml +63 -0
  348. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  349. package/library/skills/audio-direction/resource.yaml +32 -0
  350. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  351. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  352. package/library/skills/brainstorm-game/resource.yaml +30 -0
  353. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  354. package/library/skills/brainstorming/resource.yaml +23 -0
  355. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  356. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  357. package/library/skills/browse-templates/resource.yaml +23 -0
  358. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  359. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  360. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  361. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  362. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  363. package/library/skills/character-model/resource.yaml +36 -0
  364. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  365. package/library/skills/character-portrait/resource.yaml +30 -0
  366. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  367. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  368. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  369. package/library/skills/concept-art/resource.yaml +34 -0
  370. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  371. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  372. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  373. package/library/skills/debug/resource.yaml +31 -0
  374. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  375. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  376. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  377. package/library/skills/design-level/resource.yaml +31 -0
  378. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  379. package/library/skills/design-mechanic/resource.yaml +31 -0
  380. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  381. package/library/skills/design-npc/resource.yaml +29 -0
  382. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  383. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  384. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  385. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  386. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  387. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  388. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  389. package/library/skills/environment-kit/resource.yaml +29 -0
  390. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  391. package/library/skills/export-and-ship/resource.yaml +32 -0
  392. package/library/skills/fabricating-assets/SKILL.md +195 -0
  393. package/library/skills/fabricating-assets/resource.yaml +52 -0
  394. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  395. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  396. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  397. package/library/skills/fps-controller/resource.yaml +29 -0
  398. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  399. package/library/skills/game-feel/resource.yaml +27 -0
  400. package/library/skills/gameskill/SKILL.md +64 -0
  401. package/library/skills/gameskill/resource.yaml +22 -0
  402. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  403. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  404. package/library/skills/generate-motion/resource.yaml +34 -0
  405. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  406. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  407. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  408. package/library/skills/headless-scripting/resource.yaml +26 -0
  409. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  410. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  411. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  412. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  413. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  414. package/library/skills/investigating-bugs/resource.yaml +24 -0
  415. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  416. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  417. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  418. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
  419. package/library/skills/make-game/resource.yaml +35 -0
  420. package/library/skills/music-track/resource.yaml +28 -0
  421. package/library/skills/navigate-summer/SKILL.md +61 -0
  422. package/library/skills/navigate-summer/resource.yaml +35 -0
  423. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  424. package/library/skills/new-project/resource.yaml +28 -0
  425. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  426. package/library/skills/organic-model/resource.yaml +32 -0
  427. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  428. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  429. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  430. package/library/skills/pixel-art/resource.yaml +31 -0
  431. package/library/skills/play/resource.yaml +26 -0
  432. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  433. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  434. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  435. package/library/skills/procedural-animation/resource.yaml +33 -0
  436. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  437. package/library/skills/prop-model/resource.yaml +33 -0
  438. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  439. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  440. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  441. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  442. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  443. package/library/skills/remote-deploy/resource.yaml +23 -0
  444. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  445. package/library/skills/retarget/resource.yaml +33 -0
  446. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  447. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  448. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
  449. package/library/skills/scene-composition/resource.yaml +27 -0
  450. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  451. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  452. package/library/skills/scene-scripting/SKILL.md +764 -0
  453. package/library/skills/scene-scripting/resource.yaml +58 -0
  454. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  455. package/library/skills/scene-to-level/resource.yaml +33 -0
  456. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  457. package/library/skills/skill-create/SKILL.md +138 -0
  458. package/library/skills/skill-create/resource.yaml +25 -0
  459. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  460. package/library/skills/skill-improve/resource.yaml +25 -0
  461. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  462. package/library/skills/skill-test/resource.yaml +26 -0
  463. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  464. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  465. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  466. package/library/skills/skybox-panorama/resource.yaml +28 -0
  467. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  468. package/library/skills/sound-effect/resource.yaml +27 -0
  469. package/library/skills/spatial-placement/SKILL.md +74 -0
  470. package/library/skills/spatial-placement/resource.yaml +42 -0
  471. package/library/skills/spatial-placement/tests/spec.md +65 -0
  472. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  473. package/library/skills/sprite-sheet/resource.yaml +32 -0
  474. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  475. package/library/skills/tileable-texture/resource.yaml +31 -0
  476. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  477. package/library/skills/trailer-shot/resource.yaml +27 -0
  478. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  479. package/library/skills/tune-performance/resource.yaml +31 -0
  480. package/library/skills/ui-basics/resource.yaml +25 -0
  481. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  482. package/library/skills/ui-graphics/resource.yaml +29 -0
  483. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  484. package/library/skills/use-widget-asset/resource.yaml +29 -0
  485. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  486. package/library/skills/using-summer/resource.yaml +41 -0
  487. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  488. package/library/skills/vehicle-model/resource.yaml +34 -0
  489. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  490. package/library/skills/verification-before-completion/resource.yaml +23 -0
  491. package/library/skills/verifying-scenes/SKILL.md +98 -0
  492. package/library/skills/verifying-scenes/resource.yaml +42 -0
  493. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  494. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  495. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  496. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  497. package/library/skills/vfx-fire/resource.yaml +35 -0
  498. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  499. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  500. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  501. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  502. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  503. package/library/skills/vfx-lightning/resource.yaml +33 -0
  504. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  505. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  506. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  507. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  508. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  509. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  510. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  511. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  512. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  513. package/library/skills/vfx-smoke/resource.yaml +32 -0
  514. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  515. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  516. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  517. package/library/skills/voice-line/resource.yaml +27 -0
  518. package/library/skills/world-building-3d/SKILL.md +105 -0
  519. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  520. package/library/skills/world-building-3d/resource.yaml +44 -0
  521. package/library/skills/world-building-3d/tests/spec.md +48 -0
  522. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  523. package/library/skills/writing-plans/resource.yaml +23 -0
  524. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  525. package/library/skills/writing-skills/resource.yaml +29 -0
  526. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  527. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  528. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  529. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  530. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  531. package/library/templates/2d-platformer/resource.yaml +24 -0
  532. package/library/templates/2d-rpg/resource.yaml +21 -0
  533. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  534. package/library/templates/3d-basic/resource.yaml +16 -0
  535. package/library/templates/3d-city-kit/resource.yaml +24 -0
  536. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  537. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  538. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  539. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  540. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  541. package/library/templates/3d-racing-game/resource.yaml +21 -0
  542. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  543. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  544. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  545. package/library/templates/README.md +94 -0
  546. package/library/templates/empty/resource.yaml +16 -0
  547. package/library/tools/add-node/resource.yaml +60 -0
  548. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  549. package/library/tools/api-docs/resource.yaml +57 -0
  550. package/library/tools/batch/resource.yaml +52 -0
  551. package/library/tools/camera-bookmark/resource.yaml +73 -0
  552. package/library/tools/check-job/resource.yaml +45 -0
  553. package/library/tools/clear-console/resource.yaml +40 -0
  554. package/library/tools/connect-signal/resource.yaml +63 -0
  555. package/library/tools/create-debug-report/resource.yaml +67 -0
  556. package/library/tools/create-scene/resource.yaml +59 -0
  557. package/library/tools/creator-config/resource.yaml +63 -0
  558. package/library/tools/creator-publish/resource.yaml +73 -0
  559. package/library/tools/creator-releases/resource.yaml +53 -0
  560. package/library/tools/fabricate-3d/resource.yaml +108 -0
  561. package/library/tools/game-control/resource.yaml +84 -0
  562. package/library/tools/game-input/resource.yaml +159 -0
  563. package/library/tools/game-probe/resource.yaml +90 -0
  564. package/library/tools/generate-3d/resource.yaml +112 -0
  565. package/library/tools/generate-audio/resource.yaml +80 -0
  566. package/library/tools/generate-image/resource.yaml +62 -0
  567. package/library/tools/generate-motion/resource.yaml +66 -0
  568. package/library/tools/generate-video/resource.yaml +66 -0
  569. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  570. package/library/tools/get-asset/resource.yaml +42 -0
  571. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  572. package/library/tools/get-console/resource.yaml +69 -0
  573. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  574. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  575. package/library/tools/get-diagnostics/resource.yaml +42 -0
  576. package/library/tools/get-project-context/resource.yaml +45 -0
  577. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  578. package/library/tools/get-scene-tree/resource.yaml +52 -0
  579. package/library/tools/get-script-errors/resource.yaml +45 -0
  580. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  581. package/library/tools/import-asset/resource.yaml +73 -0
  582. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  583. package/library/tools/import-from-url/resource.yaml +51 -0
  584. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  585. package/library/tools/import-hdri/resource.yaml +69 -0
  586. package/library/tools/input-map-bind/resource.yaml +52 -0
  587. package/library/tools/inspect-node/resource.yaml +46 -0
  588. package/library/tools/inspect-resource/resource.yaml +45 -0
  589. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  590. package/library/tools/instantiate-scene/resource.yaml +62 -0
  591. package/library/tools/is-running/resource.yaml +40 -0
  592. package/library/tools/library-feedback/resource.yaml +89 -0
  593. package/library/tools/list-my-assets/resource.yaml +56 -0
  594. package/library/tools/navigation-probe/resource.yaml +85 -0
  595. package/library/tools/open/resource.yaml +80 -0
  596. package/library/tools/open-main-scene/resource.yaml +40 -0
  597. package/library/tools/open-scene/resource.yaml +46 -0
  598. package/library/tools/play/resource.yaml +91 -0
  599. package/library/tools/project-setting/resource.yaml +53 -0
  600. package/library/tools/read-file/resource.yaml +47 -0
  601. package/library/tools/read-library/resource.yaml +67 -0
  602. package/library/tools/recent-events/resource.yaml +71 -0
  603. package/library/tools/remove-node/resource.yaml +51 -0
  604. package/library/tools/replace-node/resource.yaml +57 -0
  605. package/library/tools/replace-text/resource.yaml +61 -0
  606. package/library/tools/run-editor-script/resource.yaml +61 -0
  607. package/library/tools/run-script/resource.yaml +73 -0
  608. package/library/tools/runtime-animate/resource.yaml +140 -0
  609. package/library/tools/runtime-call/resource.yaml +74 -0
  610. package/library/tools/runtime-set/resource.yaml +80 -0
  611. package/library/tools/runtime-spawn/resource.yaml +95 -0
  612. package/library/tools/save-scene/resource.yaml +50 -0
  613. package/library/tools/screenshot/resource.yaml +112 -0
  614. package/library/tools/search-assets/resource.yaml +67 -0
  615. package/library/tools/search-library/resource.yaml +81 -0
  616. package/library/tools/select-node/resource.yaml +48 -0
  617. package/library/tools/set-prop/resource.yaml +64 -0
  618. package/library/tools/set-resource-property/resource.yaml +66 -0
  619. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  620. package/library/tools/snap-to-surface/resource.yaml +90 -0
  621. package/library/tools/snapshot-diff/resource.yaml +58 -0
  622. package/library/tools/starcast/resource.yaml +120 -0
  623. package/library/tools/start-game-task/resource.yaml +91 -0
  624. package/library/tools/stop/resource.yaml +51 -0
  625. package/library/tools/test-placement/resource.yaml +109 -0
  626. package/library/tools/ui-actions/resource.yaml +77 -0
  627. package/library/tools/ui-activate/resource.yaml +88 -0
  628. package/library/tools/ui-screenshot/resource.yaml +63 -0
  629. package/library/tools/ui-tree/resource.yaml +69 -0
  630. package/library/tools/wait-for-event/resource.yaml +84 -0
  631. package/library/tools/world-snapshot/resource.yaml +60 -0
  632. package/library/tools/write-file/resource.yaml +54 -0
  633. package/package.json +21 -15
  634. package/registry/generated/aliases.json +207 -0
  635. package/registry/generated/counts.json +12 -0
  636. package/registry/generated/gemini-extension.json +122 -0
  637. package/registry/generated/index.json +7709 -0
  638. package/registry/generated/marketplace.claude.json +44 -0
  639. package/registry/generated/mcp.json +13 -0
  640. package/registry/generated/plugin.claude.json +135 -0
  641. package/registry/generated/plugin.codex.json +144 -0
  642. package/registry/generated/plugin.cursor.json +134 -0
  643. package/registry/generated/plugin.factory.json +117 -0
  644. package/registry/generated/skills-index.md +242 -0
  645. package/registry/generated/skills-registry.json +1249 -0
  646. package/registry/generated/templates-registry.json +455 -0
  647. package/registry/schemas/allowed-hosts.json +19 -0
  648. package/registry/schemas/collection.schema.json +68 -0
  649. package/registry/schemas/domains.json +96 -0
  650. package/registry/schemas/example.schema.json +11 -0
  651. package/registry/schemas/reference.schema.json +10 -0
  652. package/registry/schemas/resource.schema.json +154 -0
  653. package/registry/schemas/skill.schema.json +14 -0
  654. package/registry/schemas/template.schema.json +46 -0
  655. package/registry/schemas/tool.schema.json +61 -0
  656. package/_persona/summer/SKILL.md +0 -113
  657. package/dist/bin/postinstall.d.ts +0 -2
  658. package/dist/bin/postinstall.js +0 -3
  659. package/dist/commands/cloud.d.ts +0 -2
  660. package/dist/commands/cloud.js +0 -80
  661. package/dist/commands/create.d.ts +0 -3
  662. package/dist/commands/create.js +0 -171
  663. package/dist/commands/install.d.ts +0 -19
  664. package/dist/commands/install.js +0 -194
  665. package/dist/commands/list.js +0 -67
  666. package/dist/commands/logout.js +0 -13
  667. package/dist/commands/logs.d.ts +0 -2
  668. package/dist/commands/logs.js +0 -19
  669. package/dist/commands/open.d.ts +0 -2
  670. package/dist/commands/open.js +0 -32
  671. package/dist/commands/orchestrator.d.ts +0 -8
  672. package/dist/commands/orchestrator.js +0 -143
  673. package/dist/commands/run.d.ts +0 -2
  674. package/dist/commands/run.js +0 -167
  675. package/dist/commands/setup.js +0 -217
  676. package/dist/commands/status.js +0 -46
  677. package/dist/lib/agent-config.d.ts +0 -39
  678. package/dist/lib/agent-config.js +0 -626
  679. package/dist/lib/banner.d.ts +0 -4
  680. package/dist/lib/banner.js +0 -122
  681. package/dist/lib/cloud/api.d.ts +0 -79
  682. package/dist/lib/cloud/api.js +0 -107
  683. package/dist/lib/cloud/apply.d.ts +0 -32
  684. package/dist/lib/cloud/apply.js +0 -294
  685. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  686. package/dist/lib/cloud/checkpoint.js +0 -142
  687. package/dist/lib/cloud/conflicts.d.ts +0 -55
  688. package/dist/lib/cloud/conflicts.js +0 -131
  689. package/dist/lib/cloud/containment.d.ts +0 -8
  690. package/dist/lib/cloud/containment.js +0 -52
  691. package/dist/lib/cloud/diff.d.ts +0 -39
  692. package/dist/lib/cloud/diff.js +0 -138
  693. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  694. package/dist/lib/cloud/engine-bridge.js +0 -139
  695. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  696. package/dist/lib/cloud/hash-cache.js +0 -44
  697. package/dist/lib/cloud/hash.d.ts +0 -10
  698. package/dist/lib/cloud/hash.js +0 -111
  699. package/dist/lib/cloud/http.d.ts +0 -17
  700. package/dist/lib/cloud/http.js +0 -47
  701. package/dist/lib/cloud/lock-path.d.ts +0 -1
  702. package/dist/lib/cloud/lock-path.js +0 -5
  703. package/dist/lib/cloud/lock.d.ts +0 -14
  704. package/dist/lib/cloud/lock.js +0 -143
  705. package/dist/lib/cloud/manifest.d.ts +0 -6
  706. package/dist/lib/cloud/manifest.js +0 -41
  707. package/dist/lib/cloud/paths.d.ts +0 -20
  708. package/dist/lib/cloud/paths.js +0 -90
  709. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  710. package/dist/lib/cloud/project-godot-merge.js +0 -185
  711. package/dist/lib/cloud/rules.d.ts +0 -39
  712. package/dist/lib/cloud/rules.js +0 -159
  713. package/dist/lib/cloud/sync.d.ts +0 -21
  714. package/dist/lib/cloud/sync.js +0 -518
  715. package/dist/lib/cloud/transfer.d.ts +0 -23
  716. package/dist/lib/cloud/transfer.js +0 -184
  717. package/dist/lib/cloud/types.d.ts +0 -62
  718. package/dist/lib/cloud/types.js +0 -1
  719. package/dist/lib/cloud/validate-path.d.ts +0 -23
  720. package/dist/lib/cloud/validate-path.js +0 -103
  721. package/dist/lib/engine.d.ts +0 -51
  722. package/dist/lib/game-task-plan.d.ts +0 -42
  723. package/dist/lib/project-memory.d.ts +0 -33
  724. package/dist/lib/public-surface-paths.d.ts +0 -13
  725. package/dist/lib/public-surface-paths.js +0 -42
  726. package/dist/lib/remote-templates.d.ts +0 -25
  727. package/dist/lib/remote-templates.js +0 -86
  728. package/dist/lib/skills-registry.d.ts +0 -572
  729. package/dist/lib/skills-registry.js +0 -1061
  730. package/dist/lib/version-check.d.ts +0 -106
  731. package/dist/lib/version-check.js +0 -338
  732. package/dist/mcp/tools/cloud-tools.js +0 -42
  733. package/references/mcp-tools-reference.md +0 -199
  734. package/references/template-registry.md +0 -73
  735. package/skills/README.md +0 -103
  736. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  737. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  738. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  739. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  740. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  741. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  742. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  743. package/skills/workflow/gameskill/SKILL.md +0 -120
  744. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  745. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  746. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  747. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  748. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  749. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  750. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  751. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  752. package/skills/workflow/skill-create/SKILL.md +0 -153
  753. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  754. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  755. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  756. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  757. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  758. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  759. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  760. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  761. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  762. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  763. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  764. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  765. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  766. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  767. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  768. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  769. /package/dist/{lib → core}/store.d.ts +0 -0
  770. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  771. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  772. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  773. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  774. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  775. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  776. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  777. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  778. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  779. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  780. /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
  781. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  782. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  783. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  784. /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
  785. /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
  786. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  787. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  788. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  789. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  790. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Editor launch posture — the ONE place that decides whether `summer run`
3
+ * brings the Summer window to the front or leaves it in the background.
4
+ *
5
+ * The problem: when an agent drives Summer, every editor launch activates the
6
+ * app and steals the user's screen, so they cannot keep working while their
7
+ * game is built. The engine grows a launch posture for this:
8
+ *
9
+ * focus today's launch — the window appears and takes focus.
10
+ * background `--summer-background` — the window exists but never activates
11
+ * or takes focus until the user clicks it.
12
+ * offscreen `--summer-offscreen` (also `--summer-verify`) — never
13
+ * activates, never frontmost; on shipped engines an unfocusable
14
+ * window pushed off-screen where a sliver may stay visible
15
+ * (main.cpp says so), on the background-posture engine a
16
+ * no-Dock-icon accessory process. Used by RunVerification /
17
+ * offscreen play instances, never by `summer run`.
18
+ *
19
+ * Default posture: BACKGROUND when stdout is not a TTY, FOCUS when it is. A
20
+ * human typing `summer run` in a terminal wants to see the editor come up —
21
+ * that is the whole point of the command for them. An agent (Claude Code's
22
+ * Bash tool, an MCP host, a CI shell) never has a TTY on stdout, and for it
23
+ * the launch is a means to an end: the user is doing something else on the
24
+ * same Mac and must not be interrupted. `--focus` / `--background` override
25
+ * the heuristic either way; pass one explicitly in scripts.
26
+ *
27
+ * Engine support: the flag ships in a future 0.5.x. Godot's argument parser
28
+ * passes an unknown `--x` through to main_args instead of rejecting it
29
+ * (main/main.cpp, final `else` of the parse loop), so an old engine would not
30
+ * fail — it would silently launch WITH focus while the toolkit claimed a
31
+ * background launch. That is the lie we refuse to tell: the flag is passed
32
+ * only when the installed engine is known to honour it, and otherwise the
33
+ * caller gets a one-line note. The engine is not running before `summer run`,
34
+ * so /api/health cannot be consulted. Two pre-launch sources, in order:
35
+ *
36
+ * 1. `<binary> --help` and look for the flag in the help text — the PRIMARY
37
+ * gate. `--help` is handled in Main::setup() before any display server
38
+ * exists (main.cpp `arg == "--help"` -> ERR_HELP), and on macOS it is in
39
+ * OS_MacOS::headless_args (os_macos.h; godot_main_macos.mm sets
40
+ * is_headless and instantiates OS_MacOS_Headless), so the bundle runs
41
+ * with no NSApp, no window, no activation, no Dock bounce. Definitive on
42
+ * every engine version; the only probe that never lies. The answer is
43
+ * cached per binary path + mtime + size in ~/.summer, so it runs once per
44
+ * install.
45
+ * 2. The installed version (macOS Info.plist, Windows Velopack sq.version)
46
+ * is ONLY the fallback when `--help` cannot run (spawn error, timeout).
47
+ * It is never a pre-check: pre-release and dev builds carry the flag
48
+ * while still stamped with the previous version (the first such build
49
+ * says 0.5.65), so a version gate would refuse exactly the builds being
50
+ * verified. Linux exposes no version file, so there it reads unknown.
51
+ *
52
+ * Once the engine is up, /api/health `capabilities.launchPostures`
53
+ * (["focus","background","offscreen"] on macOS builds, ["focus"] elsewhere,
54
+ * absent on older engines = ["focus"]) is the authoritative advert and is
55
+ * used for the post-launch note.
56
+ *
57
+ * `summer run` spawns the executable directly (Summer.app/Contents/MacOS/Summer
58
+ * on macOS), never through `open` — LaunchServices would activate the app and
59
+ * defeat the posture whatever flags were passed. The same holds for a
60
+ * `--bin` / SUMMER_BIN override: it must be the in-bundle executable, and the
61
+ * --help probe below runs against THAT binary (cache key: path + mtime + size).
62
+ */
63
+ import { spawn } from "node:child_process";
64
+ import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
65
+ import { basename, dirname, join } from "node:path";
66
+ import { platform } from "node:os";
67
+ import { getSummerDir } from "./auth.js";
68
+ /** Engine flag for the background posture (main/main.cpp). */
69
+ export const BACKGROUND_LAUNCH_FLAG = "--summer-background";
70
+ /** First RELEASED engine version expected to honour BACKGROUND_LAUNCH_FLAG.
71
+ * Used only when the --help probe cannot run; dev/pre-release builds carry
72
+ * the flag while still stamped 0.5.65, which is why the probe is the gate. */
73
+ export const BACKGROUND_LAUNCH_MIN_ENGINE_VERSION = "0.5.66";
74
+ /** BACKGROUND for agents (no TTY), FOCUS for a human at a terminal. */
75
+ export function defaultLaunchPosture(io) {
76
+ return io.stdoutIsTTY ? "focus" : "background";
77
+ }
78
+ /** Explicit flag wins; both flags together is a caller error. */
79
+ export function resolveLaunchPosture(flags, io) {
80
+ if (flags.focus && flags.background) {
81
+ throw new Error("Pass either --focus or --background, not both.");
82
+ }
83
+ if (flags.focus)
84
+ return "focus";
85
+ if (flags.background)
86
+ return "background";
87
+ return defaultLaunchPosture(io);
88
+ }
89
+ function parseVersion(version) {
90
+ const cleaned = version.trim().replace(/^v/i, "").split(/[-+]/)[0];
91
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(cleaned);
92
+ if (!match)
93
+ return null;
94
+ return { major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]) };
95
+ }
96
+ function compareVersions(a, b) {
97
+ if (a.major !== b.major)
98
+ return a.major - b.major;
99
+ if (a.minor !== b.minor)
100
+ return a.minor - b.minor;
101
+ return a.patch - b.patch;
102
+ }
103
+ /**
104
+ * Whether the installed engine honours the background flag. The `--help`
105
+ * probe answer (true/false) is definitive when it ran; a probe that could not
106
+ * run (null) falls back to the version gate, where an unreadable or
107
+ * unparseable version is "unknown", never "supported".
108
+ */
109
+ export function backgroundLaunchSupport(installedVersion, helpProbe = null) {
110
+ const version = installedVersion?.trim() || null;
111
+ if (helpProbe === true)
112
+ return { supported: true, source: "help_probe", version };
113
+ if (helpProbe === false)
114
+ return { supported: false, source: "help_probe", reason: "engine_too_old", version };
115
+ const parsed = version ? parseVersion(version) : null;
116
+ if (!parsed || !version)
117
+ return { supported: false, source: "version", reason: "version_unknown", version: null };
118
+ const min = parseVersion(BACKGROUND_LAUNCH_MIN_ENGINE_VERSION);
119
+ return compareVersions(parsed, min) >= 0
120
+ ? { supported: true, source: "version", version }
121
+ : { supported: false, source: "version", reason: "engine_too_old", version };
122
+ }
123
+ /** True when the help text of an engine binary lists the background flag. */
124
+ export function helpTextListsBackgroundFlag(helpText) {
125
+ return helpText.includes(BACKGROUND_LAUNCH_FLAG);
126
+ }
127
+ export const HELP_PROBE_TIMEOUT_MS = 5_000;
128
+ /**
129
+ * Run `<binary> --help` and report whether the flag is listed: true / false,
130
+ * or null when the probe could not answer (spawn error, timeout). Safe on
131
+ * every version: --help exits in Main::setup() before a display server exists,
132
+ * and the macOS bundle runs it headless (OS_MacOS::headless_args), so nothing
133
+ * appears on screen and nothing is activated.
134
+ */
135
+ export function probeBackgroundLaunchSupport(binary, timeoutMs = HELP_PROBE_TIMEOUT_MS, spawnImpl = spawn) {
136
+ return new Promise((resolve) => {
137
+ let output = "";
138
+ let settled = false;
139
+ const finish = (value) => {
140
+ if (settled)
141
+ return;
142
+ settled = true;
143
+ clearTimeout(timer);
144
+ resolve(value);
145
+ };
146
+ let child;
147
+ try {
148
+ child = spawnImpl(binary, ["--help"], { stdio: ["ignore", "pipe", "pipe"] });
149
+ }
150
+ catch {
151
+ resolve(null);
152
+ return;
153
+ }
154
+ const timer = setTimeout(() => {
155
+ try {
156
+ child.kill();
157
+ }
158
+ catch {
159
+ // already gone
160
+ }
161
+ finish(null);
162
+ }, timeoutMs);
163
+ child.stdout?.on("data", (chunk) => {
164
+ output += String(chunk);
165
+ });
166
+ child.stderr?.on("data", (chunk) => {
167
+ output += String(chunk);
168
+ });
169
+ child.on("error", () => finish(null));
170
+ child.on("close", () => finish(output.length > 0 ? helpTextListsBackgroundFlag(output) : null));
171
+ });
172
+ }
173
+ // ---------------------------------------------------------------------------
174
+ // Probe cache: one --help per install (binary path + mtime + size)
175
+ // ---------------------------------------------------------------------------
176
+ export const HELP_PROBE_CACHE_FILE = "launch-probe-cache.json";
177
+ function binaryStamp(binary) {
178
+ try {
179
+ const info = statSync(binary);
180
+ return { mtimeMs: info.mtimeMs, size: info.size };
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }
186
+ function readProbeCache(summerDir) {
187
+ try {
188
+ const parsed = JSON.parse(readFileSync(join(summerDir, HELP_PROBE_CACHE_FILE), "utf-8"));
189
+ if (parsed && parsed.version === 1 && parsed.binaries && typeof parsed.binaries === "object") {
190
+ return { version: 1, binaries: parsed.binaries };
191
+ }
192
+ }
193
+ catch {
194
+ // missing or corrupt cache: probe again
195
+ }
196
+ return { version: 1, binaries: {} };
197
+ }
198
+ function writeProbeCache(summerDir, binary, entry) {
199
+ try {
200
+ mkdirSync(summerDir, { recursive: true, mode: 0o700 });
201
+ const cache = readProbeCache(summerDir);
202
+ cache.binaries[binary] = entry;
203
+ writeFileSync(join(summerDir, HELP_PROBE_CACHE_FILE), JSON.stringify(cache, null, 2), { encoding: "utf-8", mode: 0o600 });
204
+ }
205
+ catch {
206
+ // best effort: a failed cache write only costs one more probe next time
207
+ }
208
+ }
209
+ /**
210
+ * The pre-launch decision for one binary, in the order the module header
211
+ * describes: cached `--help` answer, fresh `--help` probe (cached when it
212
+ * answers), and the version gate ONLY as the fallback when the probe cannot
213
+ * run. The probe is the sole positive gate — no version pre-check, so a dev
214
+ * build stamped 0.5.65 that lists the flag launches in the background.
215
+ */
216
+ export async function detectBackgroundLaunchSupport(binary, options = {}) {
217
+ const version = options.installedVersion !== undefined ? options.installedVersion : readInstalledEngineVersion(binary);
218
+ const summerDir = options.summerDir ?? getSummerDir();
219
+ const stamp = binaryStamp(binary);
220
+ if (stamp) {
221
+ const cached = readProbeCache(summerDir).binaries[binary];
222
+ if (cached && cached.mtimeMs === stamp.mtimeMs && cached.size === stamp.size) {
223
+ return backgroundLaunchSupport(version, cached.listsBackgroundFlag);
224
+ }
225
+ }
226
+ const probe = options.probe ?? ((path) => probeBackgroundLaunchSupport(path));
227
+ const answer = await probe(binary);
228
+ if (answer !== null && stamp) {
229
+ writeProbeCache(summerDir, binary, { ...stamp, listsBackgroundFlag: answer, probedAt: options.now ?? Date.now() });
230
+ }
231
+ return backgroundLaunchSupport(version, answer);
232
+ }
233
+ /**
234
+ * The running engine's own word, once it is up: /api/health
235
+ * `capabilities.launchPostures` (engine tool_net_thread.cpp, newer builds;
236
+ * "focus" always, "background" / "offscreen" only where enforced). true /
237
+ * false when advertised, null when the engine predates the advert.
238
+ */
239
+ export function advertisedBackgroundPosture(capabilities) {
240
+ const postures = capabilities?.launchPostures;
241
+ if (!postures)
242
+ return null;
243
+ return postures.includes("background");
244
+ }
245
+ /** The launch decision: which flags to pass and what to tell the caller. */
246
+ export function planLaunch(posture, support) {
247
+ if (posture === "focus") {
248
+ return { posture, extraArgs: [], background: false, note: null };
249
+ }
250
+ if (support.supported) {
251
+ return { posture, extraArgs: [BACKGROUND_LAUNCH_FLAG], background: true, note: null };
252
+ }
253
+ const which = support.version ? `Summer Engine ${support.version}` : "this Summer Engine build";
254
+ const note = support.reason === "engine_too_old"
255
+ ? support.source === "help_probe"
256
+ ? `Background launch requested, but ${which} cannot launch without taking focus (its --help does not list ${BACKGROUND_LAUNCH_FLAG}); launching with focus. Update Summer Engine (summer install) for background launches.`
257
+ : `Background launch requested, but ${which} could not be probed (--help) and its version predates ${BACKGROUND_LAUNCH_MIN_ENGINE_VERSION}, so it most likely cannot launch without taking focus; launching with focus. Update Summer Engine (summer install) for background launches.`
258
+ : `Background launch requested, but the installed Summer Engine could not be probed (--help) and its version could not be read before launch, so the toolkit cannot tell whether it supports ${BACKGROUND_LAUNCH_FLAG}; launching with focus.`;
259
+ return { posture, extraArgs: [], background: false, note };
260
+ }
261
+ // ---------------------------------------------------------------------------
262
+ // Installed engine version, read BEFORE launch (no engine to ask)
263
+ // ---------------------------------------------------------------------------
264
+ /** CFBundleShortVersionString out of a macOS Info.plist. */
265
+ export function parseMacBundleVersion(plistText) {
266
+ const match = plistText.match(/<key>CFBundleShortVersionString<\/key>\s*<string>([^<]+)<\/string>/);
267
+ return match ? match[1].trim() : null;
268
+ }
269
+ /** Version string of an installed macOS bundle, or null when unreadable. */
270
+ export function readMacBundleVersion(appPath) {
271
+ try {
272
+ return parseMacBundleVersion(readFileSync(join(appPath, "Contents", "Info.plist"), "utf-8"));
273
+ }
274
+ catch {
275
+ return null;
276
+ }
277
+ }
278
+ /** `<version>` out of a Velopack `sq.version` file (the nuspec Velopack drops
279
+ * next to the current binary on Windows). Best effort: any other shape reads
280
+ * as unknown. */
281
+ export function parseVelopackVersion(sqVersionText) {
282
+ const match = sqVersionText.match(/<version>\s*([^<\s]+)\s*<\/version>/i);
283
+ return match ? match[1].trim() : null;
284
+ }
285
+ /** Walk up from `.../Summer.app/Contents/MacOS/Summer` to the bundle. */
286
+ function macBundlePathFor(binary) {
287
+ let current = dirname(binary);
288
+ for (let depth = 0; depth < 4; depth++) {
289
+ if (basename(current).endsWith(".app"))
290
+ return current;
291
+ const parent = dirname(current);
292
+ if (parent === current)
293
+ break;
294
+ current = parent;
295
+ }
296
+ return null;
297
+ }
298
+ /**
299
+ * Installed engine version for a resolved engine binary, or null. macOS reads
300
+ * the bundle's Info.plist; Windows reads Velopack's sq.version beside the exe;
301
+ * Linux has no version source today and always reads null.
302
+ */
303
+ export function readInstalledEngineVersion(binary, os = platform()) {
304
+ if (os === "darwin") {
305
+ const bundle = macBundlePathFor(binary);
306
+ return bundle ? readMacBundleVersion(bundle) : null;
307
+ }
308
+ if (os === "win32") {
309
+ try {
310
+ return parseVelopackVersion(readFileSync(join(dirname(binary), "sq.version"), "utf-8"));
311
+ }
312
+ catch {
313
+ return null;
314
+ }
315
+ }
316
+ return null;
317
+ }
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import { type LibrarySearchDeps } from "./library-search.js";
3
+ import { type TemplateEntry } from "./templates.js";
4
+ export declare const READ_PARTS: readonly ["skill", "resource", "all"];
5
+ export type ReadPart = (typeof READ_PARTS)[number];
6
+ /** How many content_hash hex chars the footer's entry_id carries. */
7
+ export declare const FOOTER_HASH_LENGTH = 12;
8
+ export declare const FOOTER_SUFFIX = "If this entry is wrong, stale, or you deviate from it, report via summer_library_feedback.";
9
+ export declare const readLibraryInputShape: {
10
+ id: z.ZodString;
11
+ part: z.ZodOptional<z.ZodEnum<["skill", "resource", "all"]>>;
12
+ };
13
+ export declare const readLibraryInputSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ part: z.ZodOptional<z.ZodEnum<["skill", "resource", "all"]>>;
16
+ }, "strict", z.ZodTypeAny, {
17
+ id: string;
18
+ part?: "all" | "skill" | "resource" | undefined;
19
+ }, {
20
+ id: string;
21
+ part?: "all" | "skill" | "resource" | undefined;
22
+ }>;
23
+ export type ReadLibraryArgs = z.infer<typeof readLibraryInputSchema>;
24
+ export interface LibraryReadDeps extends LibrarySearchDeps {
25
+ /** Root holding library/ (default: the installed package). */
26
+ packageRoot?: string;
27
+ templates?: readonly TemplateEntry[];
28
+ }
29
+ export interface LibraryReadOk {
30
+ ok: true;
31
+ id: string;
32
+ kind: string;
33
+ slug: string;
34
+ version: string;
35
+ status: string;
36
+ content_hash: string;
37
+ summary: string;
38
+ use_when: string[];
39
+ related: Record<string, string[]>;
40
+ part: ReadPart;
41
+ /** Package-root-relative resource directory, e.g. "library/skills/<slug>". */
42
+ path: string;
43
+ /** Top-level files in the resource directory. */
44
+ files: string[];
45
+ /** The file the body came from, when the body is a file. */
46
+ body_file?: string;
47
+ /** Tool records: how to reach it. */
48
+ mcp_tool_name?: string;
49
+ cli_command?: string;
50
+ remote?: boolean;
51
+ authority?: Record<string, boolean>;
52
+ /** The id to report with (id@hash12); also the last line's subject. */
53
+ entry_id: string;
54
+ footer: string;
55
+ /** The full load as the agent should read it; `footer` is its last line. */
56
+ text: string;
57
+ }
58
+ export interface LibraryReadNotFound {
59
+ ok: false;
60
+ error: "not_found";
61
+ id: string;
62
+ nearest: string[];
63
+ hint: string;
64
+ }
65
+ export type LibraryReadResult = LibraryReadOk | LibraryReadNotFound;
66
+ /** The feedback footer for an entry; `hash` may be empty for a hash-less index. */
67
+ export declare function feedbackFooter(id: string, contentHash: string | undefined): string;
68
+ export declare function entryIdWithHash(id: string, contentHash: string | undefined): string;
69
+ /**
70
+ * Read one entry. `deps.entries`/`deps.packageRoot`/`deps.templates` let
71
+ * tests point at a fixture; production reads the installed package.
72
+ */
73
+ export declare function readLibraryEntry(requestedId: string, part?: ReadPart, deps?: LibraryReadDeps): Promise<LibraryReadResult>;
@@ -0,0 +1,279 @@
1
+ /**
2
+ * Library read — the runtime librarian's second half.
3
+ *
4
+ * `readLibraryEntry(id, part)` loads one entry from the library shipped under
5
+ * PACKAGE_ROOT and renders it for an agent:
6
+ *
7
+ * skill SKILL.md body + metadata (status, use_when, related) + how to
8
+ * invoke it in the host (bare slug)
9
+ * tool how to call it (MCP name, `summer tool <slug> --args`, engine
10
+ * requirement, authority) + the descriptor (resource.yaml)
11
+ * template the pin (repo @ commit, tree digest) or "built-in" + the
12
+ * `summer create <slug>` command
13
+ * reference the markdown body
14
+ * example / collection README.md / collection.yaml when present
15
+ *
16
+ * The LAST line of every load is the feedback footer
17
+ * (SELF_IMPROVING_LIBRARY.md §3.1 "trigger placement"):
18
+ * — entry_id: <id>@<content_hash first 12>. If this entry is wrong, stale,
19
+ * or you deviate from it, report via summer_library_feedback.
20
+ * The agent copies that entry_id verbatim into summer_library_feedback, so
21
+ * feedback attributes to the exact bytes it used (CONTRACT §4).
22
+ *
23
+ * Metadata comes from registry/generated/index.json (no YAML parser at
24
+ * runtime); resource.yaml is returned as text. Unknown id -> not_found with
25
+ * the three nearest ids from searchLibrary.
26
+ */
27
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
28
+ import { join } from "node:path";
29
+ import { z } from "zod";
30
+ import { LIBRARY_KIND_DIRS, loadLibraryIndex, searchLibrary, } from "./library-search.js";
31
+ import { PACKAGE_ROOT } from "./package-root.js";
32
+ import { getTemplateRegistry } from "./templates.js";
33
+ export const READ_PARTS = ["skill", "resource", "all"];
34
+ /** How many content_hash hex chars the footer's entry_id carries. */
35
+ export const FOOTER_HASH_LENGTH = 12;
36
+ export const FOOTER_SUFFIX = "If this entry is wrong, stale, or you deviate from it, report via summer_library_feedback.";
37
+ export const readLibraryInputShape = {
38
+ id: z
39
+ .string()
40
+ .min(1)
41
+ .max(200)
42
+ .describe("The entry id as returned by summer_search_library: <kind>/<slug>, e.g. skill/vfx-water-ripple or tool/screenshot."),
43
+ part: z
44
+ .enum(READ_PARTS)
45
+ .optional()
46
+ .describe("'skill' = the body only (SKILL.md for skills; the markdown body for references; how-to-call for tools; the pin for templates). 'resource' = the resource.yaml descriptor only. 'all' (default) = both."),
47
+ };
48
+ export const readLibraryInputSchema = z.object(readLibraryInputShape).strict();
49
+ /** The feedback footer for an entry; `hash` may be empty for a hash-less index. */
50
+ export function feedbackFooter(id, contentHash) {
51
+ return `— entry_id: ${entryIdWithHash(id, contentHash)}. ${FOOTER_SUFFIX}`;
52
+ }
53
+ export function entryIdWithHash(id, contentHash) {
54
+ const hash = typeof contentHash === "string" ? contentHash.slice(0, FOOTER_HASH_LENGTH) : "";
55
+ return hash ? `${id}@${hash}` : id;
56
+ }
57
+ // ── Resolution ─────────────────────────────────────────────────────────────
58
+ /** Exact id, an id with an @hash suffix (as the footer prints it), or a bare
59
+ * slug that names exactly one entry. */
60
+ function resolveEntry(requested, entries) {
61
+ const bare = requested.trim().replace(/@[a-f0-9]+$/i, "");
62
+ if (!bare)
63
+ return null;
64
+ const exact = entries.find((entry) => entry.id === bare);
65
+ if (exact)
66
+ return exact;
67
+ if (!bare.includes("/")) {
68
+ const bySlug = entries.filter((entry) => entry.id.split("/").pop() === bare);
69
+ if (bySlug.length === 1)
70
+ return bySlug[0];
71
+ }
72
+ return null;
73
+ }
74
+ // ── Rendering ──────────────────────────────────────────────────────────────
75
+ function readText(file) {
76
+ try {
77
+ return existsSync(file) && statSync(file).isFile() ? readFileSync(file, "utf-8") : null;
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ function listFiles(dir) {
84
+ try {
85
+ return readdirSync(dir).sort();
86
+ }
87
+ catch {
88
+ return [];
89
+ }
90
+ }
91
+ function pickBodyFile(kind, slug, dir) {
92
+ const files = listFiles(dir);
93
+ const has = (name) => files.includes(name);
94
+ switch (kind) {
95
+ case "skill":
96
+ return has("SKILL.md") ? "SKILL.md" : null;
97
+ case "reference": {
98
+ if (has(`${slug}.md`))
99
+ return `${slug}.md`;
100
+ return files.find((f) => f.toLowerCase().endsWith(".md")) ?? null;
101
+ }
102
+ case "example":
103
+ return has("README.md") ? "README.md" : null;
104
+ case "collection":
105
+ if (has("README.md"))
106
+ return "README.md";
107
+ return has("collection.yaml") ? "collection.yaml" : null;
108
+ default:
109
+ return null;
110
+ }
111
+ }
112
+ function toolBody(entry, slug) {
113
+ const lines = [];
114
+ const mcpName = entry.mcp_tool_name ?? `summer_${slug.replace(/-/g, "_")}`;
115
+ lines.push(`MCP: call \`${mcpName}\` with arguments matching input_schema (in resource.yaml below).`);
116
+ lines.push(`Shell: summer tool ${slug} --args '<json matching input_schema>'`);
117
+ if (entry.cli_command)
118
+ lines.push(`Dedicated command: ${entry.cli_command}`);
119
+ lines.push(entry.remote === true
120
+ ? "Engine: not required (remote: true — works without a running Summer Engine)."
121
+ : "Engine: required — Summer Engine must be running with the project open (start it with `summer run`).");
122
+ if (entry.authority) {
123
+ const granted = Object.entries(entry.authority)
124
+ .filter(([, on]) => on === true)
125
+ .map(([name]) => name);
126
+ lines.push(`Authority: ${granted.length > 0 ? granted.join(", ") : "none (read-only)"}.`);
127
+ }
128
+ return lines.join("\n");
129
+ }
130
+ function templateBody(slug, templates) {
131
+ const template = templates.find((t) => t.slug === slug);
132
+ const lines = [];
133
+ if (!template) {
134
+ lines.push("Pin: not present in registry/generated/templates-registry.json (regenerate the registry).");
135
+ }
136
+ else if (template.builtin) {
137
+ lines.push("Built-in template: generated locally by `summer create`, nothing is downloaded.");
138
+ }
139
+ else if (template.pin) {
140
+ lines.push(`Pinned to ${template.pin.repo} @ ${template.pin.commit}`);
141
+ lines.push(`tree_digest: ${template.pin.tree_digest} (verified after fetch; mismatch writes nothing)`);
142
+ }
143
+ if (template && template.systems.length > 0)
144
+ lines.push(`Systems: ${template.systems.join(", ")}`);
145
+ if (template && template.do_not_use_when.length > 0) {
146
+ lines.push("Do not use when:");
147
+ for (const line of template.do_not_use_when)
148
+ lines.push(` - ${line}`);
149
+ }
150
+ lines.push(`Create a project from it: summer create ${slug} [name] (records the pin into .summer/project.json)`);
151
+ return lines.join("\n");
152
+ }
153
+ function relatedMap(entry) {
154
+ const out = {};
155
+ for (const [group, ids] of Object.entries(entry.related ?? {})) {
156
+ if (Array.isArray(ids) && ids.length > 0)
157
+ out[group] = [...ids];
158
+ }
159
+ return out;
160
+ }
161
+ function header(entry, slug, related) {
162
+ const lines = [];
163
+ lines.push(`${entry.id} — ${entry.kind} v${entry.version ?? "?"} (${entry.status ?? "stable"})`);
164
+ if (entry.summary)
165
+ lines.push(entry.summary);
166
+ const useWhen = Array.isArray(entry.use_when) ? entry.use_when : [];
167
+ if (useWhen.length > 0) {
168
+ lines.push("use_when:");
169
+ for (const line of useWhen)
170
+ lines.push(` - ${line}`);
171
+ }
172
+ const relatedIds = Object.values(related).flat();
173
+ if (relatedIds.length > 0)
174
+ lines.push(`related: ${relatedIds.join(", ")}`);
175
+ if (entry.kind === "skill") {
176
+ lines.push(`Invoke: the \`${slug}\` skill in your host (Claude Code: /${slug}); installed under its bare slug by \`summer setup\`. The body follows — follow it, do not paraphrase it.`);
177
+ }
178
+ return lines.join("\n");
179
+ }
180
+ // ── Entry point ────────────────────────────────────────────────────────────
181
+ /**
182
+ * Read one entry. `deps.entries`/`deps.packageRoot`/`deps.templates` let
183
+ * tests point at a fixture; production reads the installed package.
184
+ */
185
+ export async function readLibraryEntry(requestedId, part = "all", deps = {}) {
186
+ const entries = deps.entries ?? loadLibraryIndex();
187
+ const root = deps.packageRoot ?? PACKAGE_ROOT;
188
+ const entry = resolveEntry(requestedId, entries);
189
+ if (!entry) {
190
+ const query = requestedId.replace(/[/@_-]+/g, " ").replace(/[a-f0-9]{8,}/gi, " ").trim() || requestedId;
191
+ const nearest = (await searchLibrary(query, { limit: 3 }, deps)).map((hit) => hit.id);
192
+ return {
193
+ ok: false,
194
+ error: "not_found",
195
+ id: requestedId,
196
+ nearest,
197
+ hint: nearest.length > 0
198
+ ? `No library entry has id "${requestedId}". Nearest by search: ${nearest.join(", ")}. Ids are <kind>/<slug>; use summer_search_library to find the right one.`
199
+ : `No library entry has id "${requestedId}" and nothing similar was found. Ids are <kind>/<slug>; use summer_search_library.`,
200
+ };
201
+ }
202
+ const kind = entry.kind;
203
+ const slug = entry.id.split("/").pop();
204
+ const kindDir = LIBRARY_KIND_DIRS[kind] ?? `${kind}s`;
205
+ const relPath = `library/${kindDir}/${slug}`;
206
+ const dir = join(root, "library", kindDir, slug);
207
+ const files = listFiles(dir);
208
+ const related = relatedMap(entry);
209
+ let bodyFile;
210
+ let bodyTitle;
211
+ let body;
212
+ if (kind === "tool") {
213
+ bodyTitle = "how to call";
214
+ body = toolBody(entry, slug);
215
+ }
216
+ else if (kind === "template") {
217
+ bodyTitle = "pin";
218
+ body = templateBody(slug, deps.templates ?? safeTemplates());
219
+ }
220
+ else {
221
+ const picked = pickBodyFile(kind, slug, dir);
222
+ const text = picked ? readText(join(dir, picked)) : null;
223
+ if (picked && text !== null) {
224
+ bodyFile = picked;
225
+ bodyTitle = `${relPath}/${picked}`;
226
+ body = text.replace(/\s+$/, "");
227
+ }
228
+ else {
229
+ bodyTitle = "body";
230
+ body = `(no body file shipped for this ${kind}; the descriptor below is all there is)`;
231
+ }
232
+ }
233
+ const resourceYaml = readText(join(dir, "resource.yaml"))?.replace(/\s+$/, "") ?? "(resource.yaml not found in this install)";
234
+ const footer = feedbackFooter(entry.id, entry.content_hash);
235
+ const sections = [header(entry, slug, related)];
236
+ if (part === "skill" || part === "all")
237
+ sections.push(`--- ${bodyTitle} ---\n${body}`);
238
+ if (part === "resource" || part === "all")
239
+ sections.push(`--- ${relPath}/resource.yaml ---\n${resourceYaml}`);
240
+ sections.push(footer);
241
+ const result = {
242
+ ok: true,
243
+ id: entry.id,
244
+ kind: entry.kind,
245
+ slug,
246
+ version: entry.version ?? "",
247
+ status: entry.status ?? "stable",
248
+ content_hash: entry.content_hash ?? "",
249
+ summary: entry.summary ?? "",
250
+ use_when: Array.isArray(entry.use_when) ? entry.use_when : [],
251
+ related,
252
+ part,
253
+ path: relPath,
254
+ files,
255
+ entry_id: entryIdWithHash(entry.id, entry.content_hash),
256
+ footer,
257
+ text: sections.join("\n\n"),
258
+ };
259
+ if (bodyFile)
260
+ result.body_file = bodyFile;
261
+ if (kind === "tool") {
262
+ if (entry.mcp_tool_name)
263
+ result.mcp_tool_name = entry.mcp_tool_name;
264
+ if (entry.cli_command)
265
+ result.cli_command = entry.cli_command;
266
+ result.remote = entry.remote === true;
267
+ if (entry.authority)
268
+ result.authority = entry.authority;
269
+ }
270
+ return result;
271
+ }
272
+ function safeTemplates() {
273
+ try {
274
+ return getTemplateRegistry();
275
+ }
276
+ catch {
277
+ return [];
278
+ }
279
+ }