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,167 @@
1
+ /**
2
+ * Registry search — deterministic, kind-aware ranking over library index entries.
3
+ *
4
+ * Shared by the routing eval (evals/routing/runner.ts) and any runtime registry
5
+ * search so both rank the same way. No ML, no network, no randomness: the same
6
+ * (index, query) always yields the same ordering.
7
+ *
8
+ * Pipeline, in order:
9
+ *
10
+ * 1. LEXICAL — BM25 over one document per entry built from the id slug
11
+ * (repeated SLUG_BOOST times: the slug is the strongest routing signal),
12
+ * summary, use_when lines, and facets.domains tokens. Tokens are lightly
13
+ * stemmed (plural / -ing / -ed) so "animations" meets "animation".
14
+ * Compound fallback: a query token that appears in NO document (e.g.
15
+ * "fireball") is matched against its longest vocabulary prefix of at
16
+ * least COMPOUND_MIN_PREFIX chars ("fire") at COMPOUND_WEIGHT of a full
17
+ * match. Users compound words; metadata rarely does.
18
+ *
19
+ * 1b. TRIGGER PHRASES — the library quotes literal triggers inside use_when
20
+ * ('run it', 'make me a game', "engine not running"). When the query
21
+ * contains one as whole words, the entry earns TRIGGER_BONUS x the best
22
+ * lexical score of the query. Stopword-only triggers like 'run it' are
23
+ * otherwise invisible to BM25, and authors wrote them for exactly this.
24
+ *
25
+ * 2. KIND PRIOR — a per-kind multiplier derived from how the query is phrased
26
+ * (see `inferKindPrior`). Multiplicative, so an entry with zero lexical
27
+ * overlap is never promoted; the prior only re-orders entries that already
28
+ * matched something. Rules are documented on the function, are applied to
29
+ * every query identically, and are the ONLY place kind enters the score.
30
+ *
31
+ * 3. RELATED BOOST — after lexical x prior, each of the top RELATED_FROM_TOP
32
+ * hits lends RELATED_BOOST of its own score to the ids listed in its
33
+ * `related` map (skill <-> example / template / tool). Sized to break
34
+ * ties toward the neighbourhood of a confident hit, not to outrank a
35
+ * direct match (see the sweep note on DEFAULT_TUNING.relatedBoost).
36
+ *
37
+ * Final ties break on id (localeCompare) so output is stable across runs.
38
+ */
39
+ export type RegistryKind = "skill" | "tool" | "template" | "reference" | "example";
40
+ export interface SearchEntry {
41
+ id: string;
42
+ kind: RegistryKind | string;
43
+ summary?: string;
44
+ use_when?: string[];
45
+ facets?: {
46
+ domains?: string[];
47
+ [k: string]: unknown;
48
+ };
49
+ related?: Record<string, string[] | undefined>;
50
+ }
51
+ export interface RankedHit {
52
+ id: string;
53
+ kind: string;
54
+ /** final score = (lexical + triggerBonus) * prior + relatedBoost */
55
+ score: number;
56
+ lexical: number;
57
+ triggerBonus: number;
58
+ prior: number;
59
+ relatedBoost: number;
60
+ }
61
+ export interface KindPrior {
62
+ skill: number;
63
+ tool: number;
64
+ template: number;
65
+ reference: number;
66
+ example: number;
67
+ /** Which rules fired, for transparency in eval output. */
68
+ rules: string[];
69
+ }
70
+ export interface SearchIndex {
71
+ docs: IndexedDoc[];
72
+ df: Map<string, number>;
73
+ avgLen: number;
74
+ byId: Map<string, IndexedDoc>;
75
+ }
76
+ interface IndexedDoc {
77
+ id: string;
78
+ kind: string;
79
+ tf: Map<string, number>;
80
+ len: number;
81
+ related: string[];
82
+ /** normalized quoted trigger phrases from use_when */
83
+ triggers: string[];
84
+ }
85
+ /** Slug tokens are repeated this many times in the document. */
86
+ export declare const SLUG_BOOST = 3;
87
+ /** Compound fallback: shortest vocabulary prefix that may stand in for an unknown token. */
88
+ export declare const COMPOUND_MIN_PREFIX = 4;
89
+ export interface Tuning {
90
+ /** Kind prior: multiplier for the kind(s) a rule points at. */
91
+ favor: number;
92
+ /** Kind prior: multiplier for the kind(s) a rule argues against. */
93
+ demote: number;
94
+ /** Fraction of a top hit's score lent to each of its `related` ids. */
95
+ relatedBoost: number;
96
+ /** How many top hits lend related boosts. */
97
+ relatedFromTop: number;
98
+ /** Compound fallback: weight of a prefix match relative to an exact match. */
99
+ compoundWeight: number;
100
+ /** Trigger phrase match: bonus as a fraction of the query's best lexical score. */
101
+ triggerBonus: number;
102
+ }
103
+ export declare const DEFAULT_TUNING: Tuning;
104
+ /**
105
+ * Light suffix stemmer. Deliberately conservative: only the endings that show
106
+ * up as noise between user phrasing and metadata (plurals, -ing, -ed).
107
+ */
108
+ export declare function stem(t: string): string;
109
+ export declare function tokenize(s: string): string[];
110
+ export declare function buildSearchIndex(entries: SearchEntry[]): SearchIndex;
111
+ /**
112
+ * Pull quoted trigger phrases out of use_when lines. Only straight quotes
113
+ * count, the phrase must be at least 3 chars, and bracketed placeholders
114
+ * ('I want to make a [genre] game') are dropped — a placeholder is not a
115
+ * literal trigger.
116
+ */
117
+ export declare function extractTriggers(useWhen: string[]): string[];
118
+ interface QueryTerm {
119
+ token: string;
120
+ weight: number;
121
+ }
122
+ /**
123
+ * Map raw query tokens to index terms. Known tokens pass through at weight 1;
124
+ * unknown tokens fall back to their longest vocabulary prefix (compound
125
+ * splitting) at COMPOUND_WEIGHT, or are dropped when no prefix exists.
126
+ */
127
+ export declare function queryTerms(index: SearchIndex, qTokens: string[], compoundWeight?: number): QueryTerm[];
128
+ /**
129
+ * Derive a kind prior from the query alone.
130
+ *
131
+ * Rules (each may fire; effects multiply):
132
+ * R0 default — a user-phrased request with no engine-action vocabulary
133
+ * is a skill ask: skills are the entry point that names
134
+ * tools. skill x FAVOR, tool x DEMOTE. Skipped when R1
135
+ * fires.
136
+ * R1 tool-action — the query names a concrete engine/editor action
137
+ * (screenshot, add node, set property, import, console,
138
+ * stop the game ...). tool x FAVOR; R0 is suppressed. Skills
139
+ * stay neutral: the wrapping skill (e.g. skill/play) may
140
+ * still rank on lexical merit.
141
+ * R2 imperative — the query opens with a creative/design imperative
142
+ * ("make/build/design/add a ..."). skill x FAVOR again
143
+ * unless R1 fired (then only a mild skill lift so
144
+ * "add a Camera3D node" stays a tool ask).
145
+ * R3 symptom — the query describes a problem ("the character falls
146
+ * through the floor", "fps drops"). skill x FAVOR; template
147
+ * x DEMOTE (a starter never fixes a symptom).
148
+ * R4 template — asks for a template/starter/"start from". template x FAVOR.
149
+ * R5 reference — conceptual "what is / how does X work / convention".
150
+ * reference x FAVOR. Not triggered by "how do I ..." (R6).
151
+ * R6 how-to — "how do I / how should I": a skill answers. skill x FAVOR,
152
+ * reference x DEMOTE.
153
+ */
154
+ export declare function inferKindPrior(query: string, tuning?: Pick<Tuning, "favor" | "demote">): KindPrior;
155
+ export interface RankOptions {
156
+ limit?: number;
157
+ /** Disable the kind prior (pure lexical). Used by tests and A/B in the eval. */
158
+ kindPrior?: boolean;
159
+ /** Disable the related boost. */
160
+ relatedBoost?: boolean;
161
+ /** Disable the trigger-phrase bonus. */
162
+ triggerBonus?: boolean;
163
+ /** Override tunables (sweeps, tests). Production callers leave this unset. */
164
+ tuning?: Partial<Tuning>;
165
+ }
166
+ export declare function rankEntries(index: SearchIndex, query: string, opts?: RankOptions): RankedHit[];
167
+ export {};
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Registry search — deterministic, kind-aware ranking over library index entries.
3
+ *
4
+ * Shared by the routing eval (evals/routing/runner.ts) and any runtime registry
5
+ * search so both rank the same way. No ML, no network, no randomness: the same
6
+ * (index, query) always yields the same ordering.
7
+ *
8
+ * Pipeline, in order:
9
+ *
10
+ * 1. LEXICAL — BM25 over one document per entry built from the id slug
11
+ * (repeated SLUG_BOOST times: the slug is the strongest routing signal),
12
+ * summary, use_when lines, and facets.domains tokens. Tokens are lightly
13
+ * stemmed (plural / -ing / -ed) so "animations" meets "animation".
14
+ * Compound fallback: a query token that appears in NO document (e.g.
15
+ * "fireball") is matched against its longest vocabulary prefix of at
16
+ * least COMPOUND_MIN_PREFIX chars ("fire") at COMPOUND_WEIGHT of a full
17
+ * match. Users compound words; metadata rarely does.
18
+ *
19
+ * 1b. TRIGGER PHRASES — the library quotes literal triggers inside use_when
20
+ * ('run it', 'make me a game', "engine not running"). When the query
21
+ * contains one as whole words, the entry earns TRIGGER_BONUS x the best
22
+ * lexical score of the query. Stopword-only triggers like 'run it' are
23
+ * otherwise invisible to BM25, and authors wrote them for exactly this.
24
+ *
25
+ * 2. KIND PRIOR — a per-kind multiplier derived from how the query is phrased
26
+ * (see `inferKindPrior`). Multiplicative, so an entry with zero lexical
27
+ * overlap is never promoted; the prior only re-orders entries that already
28
+ * matched something. Rules are documented on the function, are applied to
29
+ * every query identically, and are the ONLY place kind enters the score.
30
+ *
31
+ * 3. RELATED BOOST — after lexical x prior, each of the top RELATED_FROM_TOP
32
+ * hits lends RELATED_BOOST of its own score to the ids listed in its
33
+ * `related` map (skill <-> example / template / tool). Sized to break
34
+ * ties toward the neighbourhood of a confident hit, not to outrank a
35
+ * direct match (see the sweep note on DEFAULT_TUNING.relatedBoost).
36
+ *
37
+ * Final ties break on id (localeCompare) so output is stable across runs.
38
+ */
39
+ // ── Tunables (documented; change here, nowhere else) ───────────────────────
40
+ const K1 = 1.5;
41
+ const B = 0.75;
42
+ /** Slug tokens are repeated this many times in the document. */
43
+ export const SLUG_BOOST = 3;
44
+ /** Compound fallback: shortest vocabulary prefix that may stand in for an unknown token. */
45
+ export const COMPOUND_MIN_PREFIX = 4;
46
+ export const DEFAULT_TUNING = {
47
+ favor: 1.35,
48
+ demote: 0.7,
49
+ // Swept 2026-09-02 on evals/routing: plateau 0.25-0.30; at >=0.35 related
50
+ // neighbours begin outranking direct matches (retarget lost to its siblings).
51
+ relatedBoost: 0.25,
52
+ relatedFromTop: 3,
53
+ compoundWeight: 0.6,
54
+ triggerBonus: 0.6,
55
+ };
56
+ // ── Tokenization ───────────────────────────────────────────────────────────
57
+ const STOPWORDS = new Set([
58
+ "a", "an", "the", "of", "to", "in", "on", "for", "and", "or", "is", "are",
59
+ "it", "my", "me", "i", "with", "when", "use", "this", "that", "via", "into",
60
+ "from", "as", "at", "be", "by", "not", "no", "so", "do", "how", "what",
61
+ "should", "want", "wants", "user", "trigger", "covers", "like", "its", "s",
62
+ ]);
63
+ /**
64
+ * Light suffix stemmer. Deliberately conservative: only the endings that show
65
+ * up as noise between user phrasing and metadata (plurals, -ing, -ed).
66
+ */
67
+ export function stem(t) {
68
+ if (t.length <= 3)
69
+ return t;
70
+ // plurals
71
+ if (t.endsWith("ies") && t.length > 4)
72
+ t = t.slice(0, -3) + "y";
73
+ else if (t.endsWith("sses"))
74
+ t = t.slice(0, -2);
75
+ else if (/(sh|ch|x|z)es$/.test(t))
76
+ t = t.slice(0, -2);
77
+ else if (t.endsWith("s") && !t.endsWith("ss") && !t.endsWith("us"))
78
+ t = t.slice(0, -1);
79
+ // verb forms; undo consonant doubling (running -> runn -> run) but keep ll/ss/ff/zz
80
+ if (t.endsWith("ing") && t.length > 5)
81
+ t = undouble(t.slice(0, -3));
82
+ else if (t.endsWith("ed") && t.length > 4 && !t.endsWith("eed"))
83
+ t = undouble(t.slice(0, -2));
84
+ return t;
85
+ }
86
+ function undouble(t) {
87
+ const n = t.length;
88
+ if (n < 3)
89
+ return t;
90
+ const a = t[n - 1];
91
+ const b = t[n - 2];
92
+ if (a === b && !"aeiou".includes(a) && !["l", "s", "f", "z"].includes(a))
93
+ return t.slice(0, -1);
94
+ return t;
95
+ }
96
+ export function tokenize(s) {
97
+ return s
98
+ .toLowerCase()
99
+ .replace(/[^a-z0-9]+/g, " ")
100
+ .split(/\s+/)
101
+ .filter((t) => t.length > 1 && !STOPWORDS.has(t))
102
+ .map(stem);
103
+ }
104
+ // ── Index ──────────────────────────────────────────────────────────────────
105
+ export function buildSearchIndex(entries) {
106
+ const docs = [];
107
+ const df = new Map();
108
+ let totalLen = 0;
109
+ for (const e of entries) {
110
+ const slug = e.id.split("/").pop() ?? "";
111
+ const text = [e.summary ?? "", ...(e.use_when ?? []), ...(e.facets?.domains ?? [])].join(" ");
112
+ const tokens = tokenize(text);
113
+ for (const st of tokenize(slug))
114
+ for (let i = 0; i < SLUG_BOOST; i++)
115
+ tokens.push(st);
116
+ const tf = new Map();
117
+ for (const t of tokens)
118
+ tf.set(t, (tf.get(t) ?? 0) + 1);
119
+ for (const t of tf.keys())
120
+ df.set(t, (df.get(t) ?? 0) + 1);
121
+ const related = [];
122
+ for (const list of Object.values(e.related ?? {}))
123
+ if (Array.isArray(list))
124
+ related.push(...list);
125
+ docs.push({ id: e.id, kind: e.kind, tf, len: tokens.length, related, triggers: extractTriggers(e.use_when ?? []) });
126
+ totalLen += tokens.length;
127
+ }
128
+ return {
129
+ docs,
130
+ df,
131
+ avgLen: totalLen / Math.max(docs.length, 1),
132
+ byId: new Map(docs.map((d) => [d.id, d])),
133
+ };
134
+ }
135
+ /** Normalize free text for whole-phrase comparison: lowercase, letters/digits only, single spaces. */
136
+ function normalizePhrase(s) {
137
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
138
+ }
139
+ /**
140
+ * Pull quoted trigger phrases out of use_when lines. Only straight quotes
141
+ * count, the phrase must be at least 3 chars, and bracketed placeholders
142
+ * ('I want to make a [genre] game') are dropped — a placeholder is not a
143
+ * literal trigger.
144
+ */
145
+ export function extractTriggers(useWhen) {
146
+ const out = [];
147
+ for (const line of useWhen) {
148
+ for (const m of line.matchAll(/'([^']{3,}?)'|"([^"]{3,}?)"/g)) {
149
+ const raw = m[1] ?? m[2] ?? "";
150
+ if (/[\[\]]/.test(raw))
151
+ continue;
152
+ const norm = normalizePhrase(raw);
153
+ if (norm.length >= 3)
154
+ out.push(norm);
155
+ }
156
+ }
157
+ return out;
158
+ }
159
+ function matchesTrigger(normQuery, trigger) {
160
+ return (" " + normQuery + " ").includes(" " + trigger + " ");
161
+ }
162
+ /**
163
+ * Map raw query tokens to index terms. Known tokens pass through at weight 1;
164
+ * unknown tokens fall back to their longest vocabulary prefix (compound
165
+ * splitting) at COMPOUND_WEIGHT, or are dropped when no prefix exists.
166
+ */
167
+ export function queryTerms(index, qTokens, compoundWeight = DEFAULT_TUNING.compoundWeight) {
168
+ const out = [];
169
+ for (const t of qTokens) {
170
+ if (index.df.has(t)) {
171
+ out.push({ token: t, weight: 1 });
172
+ continue;
173
+ }
174
+ for (let len = t.length - 1; len >= COMPOUND_MIN_PREFIX; len--) {
175
+ const prefix = t.slice(0, len);
176
+ if (index.df.has(prefix)) {
177
+ out.push({ token: prefix, weight: compoundWeight });
178
+ break;
179
+ }
180
+ }
181
+ }
182
+ return out;
183
+ }
184
+ function bm25(index, terms, d) {
185
+ const N = index.docs.length;
186
+ let score = 0;
187
+ for (const { token: t, weight } of terms) {
188
+ const f = d.tf.get(t) ?? 0;
189
+ if (f === 0)
190
+ continue;
191
+ const n = index.df.get(t) ?? 0;
192
+ const idf = Math.log(1 + (N - n + 0.5) / (n + 0.5));
193
+ score += weight * idf * ((f * (K1 + 1)) / (f + K1 * (1 - B + B * (d.len / index.avgLen))));
194
+ }
195
+ return score;
196
+ }
197
+ // ── Kind prior ─────────────────────────────────────────────────────────────
198
+ /**
199
+ * Phrases that name a concrete engine/editor action a single tool performs.
200
+ * Matched as whole words / word sequences against the lowercased raw query
201
+ * (NOT stemmed tokens) so multi-word actions stay intact.
202
+ */
203
+ const TOOL_ACTION_PHRASES = [
204
+ /\bscreenshot\b/, /\bscreen ?shot\b/, /\bcapture (a |the )?(frame|screen)\b/,
205
+ /\b(stop|pause|kill) (the )?(game|it)\b/, /\bis (the game|it) (currently )?running\b/,
206
+ /\b(add|create|insert|remove|delete|replace|select|inspect) (a |an |the |this |that )?(\w+ )?node\b/,
207
+ /\bset (the |a |its )?(\w+('s)? )?(property|prop|position|rotation|scale|size|color|value)\b/,
208
+ /\bproject setting/, /\bmain scene\b/, /\bsave (the |this )?scene\b/, /\bopen (the |a )?scene\b/,
209
+ /\bscene tree\b/, /\bnode tree\b/, /\bconnect (the |a )?(\w+('s)? )?signal\b/, /\bsignal to\b/,
210
+ /\b(bind|map) (the |a )?(\w+ )?(key|button|action|input)\b/, /\binput (map|action)\b/,
211
+ /\bconsole\b/, /\bdebugger\b/, /\bstack trace\b/, /\boutput panel\b/,
212
+ /\b(compile|parse|script) errors?\b/, /\bsyntax error/,
213
+ /\bimport (this |the |a |an )?(\w+ )?(from (a |the )?url|url|file|glb|gltf|fbx|png|wav|asset)\b/,
214
+ /\bdownload (the |an |this )?asset\b/, /\basset (id|by id)\b/, /\bjob (id|status)\b/,
215
+ /\b(read|write|overwrite) (the |a |this )?file\b/, /\breplace text\b/, /\bfind and replace\b/,
216
+ /\bsnapshot\b/, /\bdiff\b/, /\bapi docs?\b/, /\bclass reference\b/, /\blook up (the )?(\w+ )?(api|class|method|property|signal)\b/,
217
+ /\bpublish (the |my )?\.?pck\b/, /\bcreator (api|release|log|config)\b/,
218
+ /\bcollision shape\b/, /\bmaterial (color|colour|property)\b/, /\bresource property\b/,
219
+ /\bclear (the )?console\b/, /\brun (a |an |this |the )?(editor ?script|gdscript|script) (in|against|on)\b/,
220
+ ];
221
+ /** Imperative creative/design verbs that open a "build me a gameplay thing" ask. */
222
+ const SKILL_IMPERATIVE_OPENERS = /^(please |can you |could you |i want to |i need to |let's |lets |help me |i'd like to )?(make|build|design|create|give|put|turn|generate|draw|add|write|implement|animate|compose|render|blend|bake|pick|clean up|polish|tune|set up|setup|export|publish|ship|test|deploy)\b/;
223
+ /** "the X is broken" / symptom descriptions — the user is describing, not commanding. */
224
+ const SYMPTOM_PHRASES = /\b(crash(es|ed|ing)?|bug|broken|doesn't work|does not work|not working|stuck|glitch|lag|flat|floaty|mushy|too dark|too bright|blocky|drops?|falls? through|floats? above|clip(s|ping)? through|keeps? \w+ing|used to|feels?)\b/;
225
+ /** Asking for a starting point. */
226
+ const TEMPLATE_PHRASES = /\b(templates?|starters?|boilerplate|start(ing)? from|what can i start|example project|sample project|scaffold from|base(d)? on a)\b/;
227
+ /** Conceptual "what is / how does" questions — a reference answers, a skill acts. */
228
+ const REFERENCE_PHRASES = /^(what is|what's|what are|what does|how does|how do (the|these|those)|why does|why do|which (version|engine|godot)|when should i (say|use|call)|is it (safe|ok|okay) to)\b|\b(convention|style guide|protocol|reference for|difference between|terminology|which tool should)\b/;
229
+ /** "how do I / how should I" is a how-to ask, which a skill answers — not a reference. */
230
+ const HOWTO_PHRASES = /^(how (do|can|should|would) (i|we|you)\b|how to\b)/;
231
+ /**
232
+ * Derive a kind prior from the query alone.
233
+ *
234
+ * Rules (each may fire; effects multiply):
235
+ * R0 default — a user-phrased request with no engine-action vocabulary
236
+ * is a skill ask: skills are the entry point that names
237
+ * tools. skill x FAVOR, tool x DEMOTE. Skipped when R1
238
+ * fires.
239
+ * R1 tool-action — the query names a concrete engine/editor action
240
+ * (screenshot, add node, set property, import, console,
241
+ * stop the game ...). tool x FAVOR; R0 is suppressed. Skills
242
+ * stay neutral: the wrapping skill (e.g. skill/play) may
243
+ * still rank on lexical merit.
244
+ * R2 imperative — the query opens with a creative/design imperative
245
+ * ("make/build/design/add a ..."). skill x FAVOR again
246
+ * unless R1 fired (then only a mild skill lift so
247
+ * "add a Camera3D node" stays a tool ask).
248
+ * R3 symptom — the query describes a problem ("the character falls
249
+ * through the floor", "fps drops"). skill x FAVOR; template
250
+ * x DEMOTE (a starter never fixes a symptom).
251
+ * R4 template — asks for a template/starter/"start from". template x FAVOR.
252
+ * R5 reference — conceptual "what is / how does X work / convention".
253
+ * reference x FAVOR. Not triggered by "how do I ..." (R6).
254
+ * R6 how-to — "how do I / how should I": a skill answers. skill x FAVOR,
255
+ * reference x DEMOTE.
256
+ */
257
+ export function inferKindPrior(query, tuning = DEFAULT_TUNING) {
258
+ const FAVOR = tuning.favor;
259
+ const DEMOTE = tuning.demote;
260
+ const q = query.toLowerCase().trim();
261
+ const prior = { skill: 1, tool: 1, template: 1, reference: 1, example: 1, rules: [] };
262
+ const toolAction = TOOL_ACTION_PHRASES.some((re) => re.test(q));
263
+ if (toolAction) {
264
+ prior.tool *= FAVOR;
265
+ prior.rules.push("R1:tool-action");
266
+ }
267
+ else {
268
+ prior.skill *= FAVOR;
269
+ prior.tool *= DEMOTE;
270
+ prior.rules.push("R0:default-skill");
271
+ }
272
+ if (SKILL_IMPERATIVE_OPENERS.test(q)) {
273
+ prior.skill *= toolAction ? 1.1 : FAVOR;
274
+ prior.rules.push("R2:imperative");
275
+ }
276
+ if (SYMPTOM_PHRASES.test(q)) {
277
+ prior.skill *= FAVOR;
278
+ prior.template *= DEMOTE;
279
+ prior.rules.push("R3:symptom");
280
+ }
281
+ if (TEMPLATE_PHRASES.test(q)) {
282
+ prior.template *= FAVOR;
283
+ prior.rules.push("R4:template");
284
+ }
285
+ if (HOWTO_PHRASES.test(q)) {
286
+ prior.skill *= FAVOR;
287
+ prior.reference *= DEMOTE;
288
+ prior.rules.push("R6:how-to");
289
+ }
290
+ else if (REFERENCE_PHRASES.test(q)) {
291
+ prior.reference *= FAVOR;
292
+ prior.rules.push("R5:reference");
293
+ }
294
+ return prior;
295
+ }
296
+ function priorFor(prior, kind) {
297
+ switch (kind) {
298
+ case "skill": return prior.skill;
299
+ case "tool": return prior.tool;
300
+ case "template": return prior.template;
301
+ case "reference": return prior.reference;
302
+ case "example": return prior.example;
303
+ default: return 1;
304
+ }
305
+ }
306
+ export function rankEntries(index, query, opts = {}) {
307
+ const limit = opts.limit ?? 5;
308
+ const useKindPrior = opts.kindPrior ?? true;
309
+ const useRelated = opts.relatedBoost ?? true;
310
+ const useTriggers = opts.triggerBonus ?? true;
311
+ const tuning = { ...DEFAULT_TUNING, ...(opts.tuning ?? {}) };
312
+ const terms = queryTerms(index, tokenize(query), tuning.compoundWeight);
313
+ const prior = useKindPrior ? inferKindPrior(query, tuning) : null;
314
+ const normQuery = normalizePhrase(query);
315
+ const hits = index.docs.map((d) => ({
316
+ id: d.id,
317
+ kind: d.kind,
318
+ lexical: bm25(index, terms, d),
319
+ triggerBonus: 0,
320
+ prior: prior ? priorFor(prior, d.kind) : 1,
321
+ relatedBoost: 0,
322
+ score: 0,
323
+ }));
324
+ if (useTriggers) {
325
+ const best = Math.max(0, ...hits.map((h) => h.lexical));
326
+ for (const h of hits) {
327
+ const doc = index.byId.get(h.id);
328
+ if (doc && doc.triggers.some((t) => matchesTrigger(normQuery, t)))
329
+ h.triggerBonus = tuning.triggerBonus * best;
330
+ }
331
+ }
332
+ const combine = (h) => (h.lexical + h.triggerBonus) * h.prior + h.relatedBoost;
333
+ for (const h of hits)
334
+ h.score = combine(h);
335
+ const byId = new Map(hits.map((h) => [h.id, h]));
336
+ sortHits(hits);
337
+ if (useRelated) {
338
+ const lenders = hits.slice(0, tuning.relatedFromTop).filter((h) => h.score > 0);
339
+ for (const lender of lenders) {
340
+ const doc = index.byId.get(lender.id);
341
+ if (!doc)
342
+ continue;
343
+ for (const rid of doc.related) {
344
+ const target = byId.get(rid);
345
+ if (!target || target.id === lender.id)
346
+ continue;
347
+ target.relatedBoost += tuning.relatedBoost * lender.score;
348
+ }
349
+ }
350
+ for (const h of hits)
351
+ h.score = combine(h);
352
+ sortHits(hits);
353
+ }
354
+ return hits.slice(0, limit);
355
+ }
356
+ function sortHits(hits) {
357
+ hits.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
358
+ }
@@ -0,0 +1,47 @@
1
+ export declare const AGENT_CLIENTS: readonly ["summer", "codex", "claude-code", "cursor", "windsurf", "cline", "roo-code", "kilo-code", "gemini", "github-copilot", "vscode-copilot", "opencode"];
2
+ export type AgentClient = (typeof AGENT_CLIENTS)[number];
3
+ /** resource.yaml `status` (registry/schemas/skill.schema.json). */
4
+ export type SkillStatus = "stable" | "preview" | "deprecated";
5
+ export interface SkillRegistryEntry {
6
+ /** Library resource id, e.g. "skill/3d-lighting". */
7
+ id: string;
8
+ /** Skill name (SKILL.md frontmatter name; equals the library slug). */
9
+ name: string;
10
+ description: string;
11
+ /** Installed by `summer skills install --recommended` (used by `summer setup`). */
12
+ recommended: boolean;
13
+ /** Bulk installs take `stable` and `preview` (preview is a label — "not yet
14
+ * exercised in-engine by the Summer team" — carried in the skill's guidance;
15
+ * --stable-only skips it); `deprecated` installs only by explicit name. A
16
+ * registry generated before this field existed reads as `stable`. */
17
+ status: SkillStatus;
18
+ /** Package-root-relative skill dir, e.g. "library/skills/3d-lighting/". */
19
+ path: string;
20
+ }
21
+ /**
22
+ * Load the generated skill registry (cached after first read).
23
+ * Throws if the generated file is missing or unparsable — the npm package
24
+ * always ships it, so a failure here means a broken build, not user error.
25
+ */
26
+ export declare function getSkillRegistry(): readonly SkillRegistryEntry[];
27
+ /** Shape-tolerant parse of skills-registry.json. Exported for unit tests. */
28
+ export declare function parseSkillRegistry(json: unknown): SkillRegistryEntry[];
29
+ /**
30
+ * The one bulk-install rule (`skills install --all/--recommended` and
31
+ * `summer setup` both use it): `stable` and `preview` skills install —
32
+ * preview is a label ("not yet exercised in-engine by the Summer team"),
33
+ * carried in each skill's own guidance, not a reason to hide contributed work;
34
+ * `deprecated` never installs in bulk. `stableOnly` opts out of preview.
35
+ * The counts let the caller say how many preview skills it installed (or, with
36
+ * stableOnly, left out) instead of printing a bare total.
37
+ */
38
+ export declare function selectSkillsForBulkInstall(skills: readonly SkillRegistryEntry[], options: {
39
+ recommended?: boolean;
40
+ stableOnly?: boolean;
41
+ }): {
42
+ selected: SkillRegistryEntry[];
43
+ previewIncluded: number;
44
+ previewSkipped: number;
45
+ };
46
+ /** Absolute directory of a skill's library files (contains SKILL.md). */
47
+ export declare function resolveSkillDir(entry: SkillRegistryEntry): string;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Skill registry — loaded from the generated registry (CONTRACT.md §6, §12).
3
+ *
4
+ * The single source of truth for installable skills is the library:
5
+ * `library/skills/<slug>/` (resource.yaml + SKILL.md), compiled by
6
+ * `npm run generate:registry` into `registry/generated/skills-registry.json`.
7
+ * This module reads that generated file at runtime; nothing here is
8
+ * hand-maintained per skill anymore. The old hand-written SKILL_REGISTRY
9
+ * (skills/<category>/<name> paths) was deleted at the v3 cutover.
10
+ */
11
+ import { readFileSync } from "node:fs";
12
+ import { join } from "node:path";
13
+ import { PACKAGE_ROOT } from "./package-root.js";
14
+ export const AGENT_CLIENTS = [
15
+ "summer",
16
+ "codex",
17
+ "claude-code",
18
+ "cursor",
19
+ "windsurf",
20
+ "cline",
21
+ "roo-code",
22
+ "kilo-code",
23
+ "gemini",
24
+ "github-copilot",
25
+ "vscode-copilot",
26
+ "opencode",
27
+ ];
28
+ const packageRoot = PACKAGE_ROOT;
29
+ const REGISTRY_RELPATH = join("registry", "generated", "skills-registry.json");
30
+ let cache = null;
31
+ /**
32
+ * Load the generated skill registry (cached after first read).
33
+ * Throws if the generated file is missing or unparsable — the npm package
34
+ * always ships it, so a failure here means a broken build, not user error.
35
+ */
36
+ export function getSkillRegistry() {
37
+ if (cache)
38
+ return cache;
39
+ const file = join(packageRoot, REGISTRY_RELPATH);
40
+ cache = parseSkillRegistry(JSON.parse(readFileSync(file, "utf-8")));
41
+ return cache;
42
+ }
43
+ /** Shape-tolerant parse of skills-registry.json. Exported for unit tests. */
44
+ export function parseSkillRegistry(json) {
45
+ const raw = (json ?? {});
46
+ const skills = Array.isArray(raw.skills) ? raw.skills : [];
47
+ return skills
48
+ .filter((s) => typeof s.id === "string" &&
49
+ typeof s.name === "string" &&
50
+ typeof s.path === "string")
51
+ .map((s) => ({
52
+ id: s.id,
53
+ name: s.name,
54
+ description: typeof s.description === "string" ? s.description : "",
55
+ recommended: s.recommended === true,
56
+ status: s.status === "preview" || s.status === "deprecated" ? s.status : "stable",
57
+ path: s.path,
58
+ }));
59
+ }
60
+ /**
61
+ * The one bulk-install rule (`skills install --all/--recommended` and
62
+ * `summer setup` both use it): `stable` and `preview` skills install —
63
+ * preview is a label ("not yet exercised in-engine by the Summer team"),
64
+ * carried in each skill's own guidance, not a reason to hide contributed work;
65
+ * `deprecated` never installs in bulk. `stableOnly` opts out of preview.
66
+ * The counts let the caller say how many preview skills it installed (or, with
67
+ * stableOnly, left out) instead of printing a bare total.
68
+ */
69
+ export function selectSkillsForBulkInstall(skills, options) {
70
+ const candidates = options.recommended ? skills.filter((skill) => skill.recommended) : [...skills];
71
+ const stableOnly = options.stableOnly === true;
72
+ const selected = candidates.filter((skill) => skill.status === "stable" || (!stableOnly && skill.status === "preview"));
73
+ const preview = candidates.filter((skill) => skill.status === "preview").length;
74
+ return {
75
+ selected,
76
+ previewIncluded: stableOnly ? 0 : preview,
77
+ previewSkipped: stableOnly ? preview : 0,
78
+ };
79
+ }
80
+ /** Absolute directory of a skill's library files (contains SKILL.md). */
81
+ export function resolveSkillDir(entry) {
82
+ return join(packageRoot, entry.path);
83
+ }