summer-engine 2.8.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/.claude-plugin/marketplace.json +27 -7
  2. package/.claude-plugin/plugin.json +99 -83
  3. package/.codex-plugin/plugin.json +112 -82
  4. package/.cursor-plugin/plugin.json +119 -83
  5. package/.factory-plugin/plugin.json +100 -3
  6. package/.mcp.json +6 -1
  7. package/.opencode/INSTALL.md +7 -4
  8. package/.opencode/plugins/summer.js +31 -18
  9. package/AGENTS.md +107 -34
  10. package/CHANGELOG.md +134 -41
  11. package/CLAUDE.md +4 -2
  12. package/GEMINI.md +7 -53
  13. package/NOTICE +31 -0
  14. package/README.md +159 -391
  15. package/assets/api-docs.json.gz +0 -0
  16. package/assets/autopilot/README.md +20 -6
  17. package/assets/autopilot/autopilot.gd +80 -26
  18. package/assets/autopilot/run.sh +132 -7
  19. package/assets/navigation/web-routes.json +719 -0
  20. package/commands/gameskill.md +10 -108
  21. package/commands/summer.md +72 -4
  22. package/dist/bin/summer.js +6 -87
  23. package/dist/cli/banner.d.ts +1 -0
  24. package/dist/cli/banner.js +33 -0
  25. package/dist/{commands → cli/commands}/config.js +1 -1
  26. package/dist/cli/commands/create.d.ts +30 -0
  27. package/dist/cli/commands/create.js +212 -0
  28. package/dist/{commands → cli/commands}/debug.js +2 -2
  29. package/dist/cli/commands/doctor.d.ts +2 -0
  30. package/dist/cli/commands/doctor.js +18 -0
  31. package/dist/cli/commands/events.d.ts +57 -0
  32. package/dist/cli/commands/events.js +158 -0
  33. package/dist/cli/commands/install.d.ts +50 -0
  34. package/dist/cli/commands/install.js +447 -0
  35. package/dist/cli/commands/list.js +72 -0
  36. package/dist/{commands → cli/commands}/login.js +33 -17
  37. package/dist/{commands → cli/commands}/logout.d.ts +1 -0
  38. package/dist/cli/commands/logout.js +19 -0
  39. package/dist/{commands → cli/commands}/memory.d.ts +1 -8
  40. package/dist/{commands → cli/commands}/memory.js +20 -11
  41. package/dist/cli/commands/open.d.ts +45 -0
  42. package/dist/cli/commands/open.js +216 -0
  43. package/dist/{commands → cli/commands}/plan.js +2 -2
  44. package/dist/{commands → cli/commands}/publish.js +1 -1
  45. package/dist/{commands → cli/commands}/releases.js +1 -1
  46. package/dist/cli/commands/run.d.ts +19 -0
  47. package/dist/cli/commands/run.js +255 -0
  48. package/dist/{commands → cli/commands}/setup.js +43 -89
  49. package/dist/{commands → cli/commands}/skills.js +85 -222
  50. package/dist/{commands → cli/commands}/status.d.ts +1 -0
  51. package/dist/cli/commands/status.js +62 -0
  52. package/dist/cli/commands/tool.d.ts +11 -0
  53. package/dist/cli/commands/tool.js +121 -0
  54. package/dist/cli/index.d.ts +6 -0
  55. package/dist/cli/index.js +89 -0
  56. package/dist/cli/root-action.d.ts +7 -0
  57. package/dist/cli/root-action.js +15 -0
  58. package/dist/{lib → core}/api-client.d.ts +106 -15
  59. package/dist/{lib → core}/api-client.js +267 -75
  60. package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
  61. package/dist/{lib → core}/async-op-lifecycle.js +3 -4
  62. package/dist/{lib → core}/auth.d.ts +14 -6
  63. package/dist/{lib → core}/auth.js +56 -40
  64. package/dist/core/capabilities/agent-playbook.d.ts +20 -0
  65. package/dist/core/capabilities/agent-playbook.js +218 -0
  66. package/dist/core/capabilities/api-docs.d.ts +36 -0
  67. package/dist/core/capabilities/api-docs.js +118 -0
  68. package/dist/core/capabilities/asset-import.d.ts +49 -0
  69. package/dist/core/capabilities/asset-import.js +134 -0
  70. package/dist/core/capabilities/camera-view.d.ts +98 -0
  71. package/dist/core/capabilities/camera-view.js +222 -0
  72. package/dist/core/capabilities/capture.d.ts +63 -0
  73. package/dist/core/capabilities/capture.js +67 -0
  74. package/dist/core/capabilities/console-read.d.ts +17 -0
  75. package/dist/core/capabilities/console-read.js +21 -0
  76. package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
  77. package/dist/{lib → core/capabilities}/creator.js +14 -33
  78. package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
  79. package/dist/{lib → core/capabilities}/debug-report.js +12 -31
  80. package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
  81. package/dist/{commands → core/capabilities}/doctor.js +47 -73
  82. package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
  83. package/dist/core/capabilities/engine-fallbacks.js +36 -0
  84. package/dist/core/capabilities/engine-ops.d.ts +33 -0
  85. package/dist/core/capabilities/engine-ops.js +145 -0
  86. package/dist/core/capabilities/engine-receipt.d.ts +53 -0
  87. package/dist/core/capabilities/engine-receipt.js +134 -0
  88. package/dist/core/capabilities/events.d.ts +200 -0
  89. package/dist/core/capabilities/events.js +383 -0
  90. package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
  91. package/dist/core/capabilities/fabricate-mesh.js +165 -0
  92. package/dist/core/capabilities/frame-quality.d.ts +71 -0
  93. package/dist/core/capabilities/frame-quality.js +449 -0
  94. package/dist/core/capabilities/game-task-plan.d.ts +66 -0
  95. package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
  96. package/dist/core/capabilities/hdri-import.d.ts +90 -0
  97. package/dist/core/capabilities/hdri-import.js +250 -0
  98. package/dist/core/capabilities/image-generation.d.ts +24 -0
  99. package/dist/core/capabilities/image-generation.js +22 -0
  100. package/dist/core/capabilities/navigation/open.d.ts +156 -0
  101. package/dist/core/capabilities/navigation/open.js +567 -0
  102. package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
  103. package/dist/core/capabilities/navigation/render-product-map.js +84 -0
  104. package/dist/core/capabilities/navigation/targets.d.ts +87 -0
  105. package/dist/core/capabilities/navigation/targets.js +250 -0
  106. package/dist/core/capabilities/play-determinism.d.ts +35 -0
  107. package/dist/core/capabilities/play-determinism.js +86 -0
  108. package/dist/core/capabilities/project-context.d.ts +114 -0
  109. package/dist/core/capabilities/project-context.js +249 -0
  110. package/dist/core/capabilities/runtime-control.d.ts +540 -0
  111. package/dist/core/capabilities/runtime-control.js +1011 -0
  112. package/dist/core/capabilities/scene-kind.d.ts +19 -0
  113. package/dist/core/capabilities/scene-kind.js +137 -0
  114. package/dist/core/capabilities/scene-script.d.ts +38 -0
  115. package/dist/core/capabilities/scene-script.js +45 -0
  116. package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
  117. package/dist/core/capabilities/tool-dispatch.js +1490 -0
  118. package/dist/core/capabilities/ui-control.d.ts +179 -0
  119. package/dist/core/capabilities/ui-control.js +423 -0
  120. package/dist/core/capabilities/variant-types.d.ts +22 -0
  121. package/dist/core/capabilities/variant-types.js +101 -0
  122. package/dist/core/capability-skew.d.ts +205 -0
  123. package/dist/core/capability-skew.js +386 -0
  124. package/dist/{lib → core}/config.d.ts +11 -1
  125. package/dist/{lib → core}/config.js +13 -2
  126. package/dist/core/embeddings.d.ts +78 -0
  127. package/dist/core/embeddings.js +166 -0
  128. package/dist/core/engine-install.d.ts +105 -0
  129. package/dist/core/engine-install.js +190 -0
  130. package/dist/core/engine.d.ts +94 -0
  131. package/dist/{lib → core}/engine.js +74 -28
  132. package/dist/core/feedback/client.d.ts +88 -0
  133. package/dist/core/feedback/client.js +182 -0
  134. package/dist/{lib → core}/format.d.ts +0 -1
  135. package/dist/{lib → core}/format.js +1 -1
  136. package/dist/core/headless/connection.d.ts +86 -0
  137. package/dist/core/headless/connection.js +97 -0
  138. package/dist/core/headless/editor-connection.d.ts +26 -0
  139. package/dist/core/headless/editor-connection.js +81 -0
  140. package/dist/core/headless/mcp-routing.d.ts +38 -0
  141. package/dist/core/headless/mcp-routing.js +83 -0
  142. package/dist/core/headless/registry.d.ts +91 -0
  143. package/dist/core/headless/registry.js +226 -0
  144. package/dist/core/headless/resolve.d.ts +46 -0
  145. package/dist/core/headless/resolve.js +75 -0
  146. package/dist/core/headless/spawn.d.ts +46 -0
  147. package/dist/core/headless/spawn.js +205 -0
  148. package/dist/core/headless/worker-connection.d.ts +96 -0
  149. package/dist/core/headless/worker-connection.js +353 -0
  150. package/dist/core/headless/worker-engine-client.d.ts +58 -0
  151. package/dist/core/headless/worker-engine-client.js +246 -0
  152. package/dist/core/launch-posture.d.ts +170 -0
  153. package/dist/core/launch-posture.js +317 -0
  154. package/dist/core/library-read.d.ts +73 -0
  155. package/dist/core/library-read.js +279 -0
  156. package/dist/core/library-search.d.ts +143 -0
  157. package/dist/core/library-search.js +301 -0
  158. package/dist/{lib → core}/log-filters.js +4 -2
  159. package/dist/{lib → core}/mcp-log.js +2 -17
  160. package/dist/core/package-root.d.ts +9 -0
  161. package/dist/core/package-root.js +11 -0
  162. package/dist/core/redact.d.ts +20 -0
  163. package/dist/core/redact.js +64 -0
  164. package/dist/core/registry-search.d.ts +167 -0
  165. package/dist/core/registry-search.js +358 -0
  166. package/dist/core/skills-registry.d.ts +47 -0
  167. package/dist/core/skills-registry.js +83 -0
  168. package/dist/{lib → core}/store.js +11 -7
  169. package/dist/{lib → core}/summer-compatibility.js +3 -3
  170. package/dist/{lib → core}/telemetry.js +5 -2
  171. package/dist/core/templates.d.ts +98 -0
  172. package/dist/core/templates.js +241 -0
  173. package/dist/core/tool-errors.d.ts +30 -0
  174. package/dist/core/tool-errors.js +40 -0
  175. package/dist/core/trajectory.d.ts +80 -0
  176. package/dist/core/trajectory.js +307 -0
  177. package/dist/core/util/http.d.ts +13 -0
  178. package/dist/core/util/http.js +28 -0
  179. package/dist/core/util/json.d.ts +12 -0
  180. package/dist/core/util/json.js +21 -0
  181. package/dist/core/util/process.d.ts +3 -0
  182. package/dist/core/util/process.js +13 -0
  183. package/dist/core/util/sleep.d.ts +1 -0
  184. package/dist/core/util/sleep.js +3 -0
  185. package/dist/core/version.d.ts +3 -0
  186. package/dist/core/version.js +5 -0
  187. package/dist/{lib → installer}/agent-config.d.ts +20 -1
  188. package/dist/{lib → installer}/agent-config.js +148 -23
  189. package/dist/installer/legacy-skills.d.ts +26 -0
  190. package/dist/installer/legacy-skills.js +53 -0
  191. package/dist/installer/setup.d.ts +76 -0
  192. package/dist/installer/setup.js +146 -0
  193. package/dist/installer/skill-locations.d.ts +45 -0
  194. package/dist/installer/skill-locations.js +170 -0
  195. package/dist/installer/version-check.d.ts +174 -0
  196. package/dist/{lib → installer}/version-check.js +173 -42
  197. package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
  198. package/dist/{commands/mcp.js → mcp/command.js} +18 -6
  199. package/dist/mcp/server.d.ts +23 -3
  200. package/dist/mcp/server.js +122 -28
  201. package/dist/mcp/tools/asset-tools.js +62 -142
  202. package/dist/mcp/tools/creator-tools.js +5 -23
  203. package/dist/mcp/tools/debug-tools.js +61 -18
  204. package/dist/mcp/tools/event-tools.d.ts +14 -0
  205. package/dist/mcp/tools/event-tools.js +41 -0
  206. package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
  207. package/dist/mcp/tools/fabricate-tools.js +28 -0
  208. package/dist/mcp/tools/feedback-tools.d.ts +77 -0
  209. package/dist/mcp/tools/feedback-tools.js +88 -0
  210. package/dist/mcp/tools/file-tools.js +6 -53
  211. package/dist/mcp/tools/generate-tools.js +37 -63
  212. package/dist/mcp/tools/library-tools.d.ts +11 -0
  213. package/dist/mcp/tools/library-tools.js +42 -0
  214. package/dist/mcp/tools/navigation-tools.d.ts +7 -0
  215. package/dist/mcp/tools/navigation-tools.js +37 -0
  216. package/dist/mcp/tools/perception-tools.d.ts +20 -0
  217. package/dist/mcp/tools/perception-tools.js +146 -0
  218. package/dist/mcp/tools/project-tools.d.ts +14 -0
  219. package/dist/mcp/tools/project-tools.js +72 -281
  220. package/dist/mcp/tools/runtime-tools.d.ts +2 -0
  221. package/dist/mcp/tools/runtime-tools.js +92 -0
  222. package/dist/mcp/tools/scene-tools.d.ts +3 -0
  223. package/dist/mcp/tools/scene-tools.js +68 -119
  224. package/dist/mcp/tools/script-tools.d.ts +3 -0
  225. package/dist/mcp/tools/script-tools.js +118 -0
  226. package/dist/mcp/tools/spatial-tools.d.ts +2 -0
  227. package/dist/mcp/tools/spatial-tools.js +485 -0
  228. package/dist/mcp/tools/text-json.d.ts +8 -0
  229. package/dist/mcp/tools/text-json.js +12 -0
  230. package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
  231. package/dist/mcp/tools/ui-tools.js +82 -0
  232. package/dist/mcp/tools/visual-tools.d.ts +2 -7
  233. package/dist/mcp/tools/visual-tools.js +383 -101
  234. package/dist/mcp/tools/with-engine.d.ts +9 -15
  235. package/dist/mcp/tools/with-engine.js +60 -96
  236. package/dist/project-memory/project-manifest.d.ts +36 -0
  237. package/dist/project-memory/project-manifest.js +50 -0
  238. package/dist/project-memory/project-memory.d.ts +57 -0
  239. package/dist/{lib → project-memory}/project-memory.js +46 -0
  240. package/gemini-extension.json +103 -2
  241. package/hooks/hooks-cursor.json +2 -2
  242. package/hooks/hooks.json +2 -1
  243. package/hooks/pre-commit-doctor.sh +45 -39
  244. package/hooks/run-hook.cmd +30 -23
  245. package/hooks/run-hook.sh +20 -0
  246. package/hooks/session-start.sh +18 -7
  247. package/integrations/README.md +70 -0
  248. package/integrations/claude/README.md +19 -0
  249. package/integrations/claude/manifest-target.json +16 -0
  250. package/integrations/cline/README.md +13 -0
  251. package/integrations/cline/manifest-target.json +3 -0
  252. package/integrations/codex/README.md +15 -0
  253. package/integrations/codex/manifest-target.json +5 -0
  254. package/integrations/cursor/README.md +16 -0
  255. package/integrations/cursor/manifest-target.json +5 -0
  256. package/integrations/factory/README.md +26 -0
  257. package/integrations/factory/manifest-target.json +5 -0
  258. package/integrations/gemini/README.md +26 -0
  259. package/integrations/gemini/manifest-target.json +5 -0
  260. package/integrations/github-copilot/README.md +12 -0
  261. package/integrations/github-copilot/manifest-target.json +3 -0
  262. package/integrations/kilo-code/README.md +16 -0
  263. package/integrations/kilo-code/manifest-target.json +3 -0
  264. package/integrations/lm-studio/README.md +12 -0
  265. package/integrations/lm-studio/manifest-target.json +3 -0
  266. package/integrations/opencode/README.md +15 -0
  267. package/integrations/opencode/manifest-target.json +3 -0
  268. package/integrations/roo-code/README.md +13 -0
  269. package/integrations/roo-code/manifest-target.json +3 -0
  270. package/integrations/vscode-copilot/README.md +12 -0
  271. package/integrations/vscode-copilot/manifest-target.json +3 -0
  272. package/integrations/windsurf/README.md +13 -0
  273. package/integrations/windsurf/manifest-target.json +3 -0
  274. package/library/references/collaborative-protocol/resource.yaml +24 -0
  275. package/library/references/gd-style/resource.yaml +24 -0
  276. package/{references → library/references/godot-version}/godot-version.md +6 -6
  277. package/library/references/godot-version/resource.yaml +22 -0
  278. package/library/references/headless-routing/headless-routing.md +46 -0
  279. package/library/references/headless-routing/resource.yaml +24 -0
  280. package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
  281. package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
  282. package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
  283. package/library/references/mcp-tools-reference/resource.yaml +17 -0
  284. package/library/references/product-map/product-map.md +103 -0
  285. package/library/references/product-map/resource.yaml +33 -0
  286. package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
  287. package/library/references/public-surface-language/resource.yaml +17 -0
  288. package/library/references/summer-folder/resource.yaml +20 -0
  289. package/{references → library/references/summer-folder}/summer-folder.md +22 -21
  290. package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
  291. package/library/skills/3d-lighting/resource.yaml +27 -0
  292. package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
  293. package/library/skills/adaptive-music/resource.yaml +28 -0
  294. package/library/skills/agent-playtesting/SKILL.md +148 -0
  295. package/library/skills/agent-playtesting/resource.yaml +52 -0
  296. package/library/skills/ambient-bed/resource.yaml +24 -0
  297. package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
  298. package/library/skills/animated-loop/resource.yaml +27 -0
  299. package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
  300. package/library/skills/animation-tree/resource.yaml +33 -0
  301. package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
  302. package/library/skills/art-direction/resource.yaml +29 -0
  303. package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
  304. package/library/skills/asset-strategy/resource.yaml +63 -0
  305. package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
  306. package/library/skills/audio-direction/resource.yaml +32 -0
  307. package/library/skills/auto-fire-targeting/resource.yaml +22 -0
  308. package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
  309. package/library/skills/brainstorm-game/resource.yaml +30 -0
  310. package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
  311. package/library/skills/brainstorming/resource.yaml +23 -0
  312. package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
  313. package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
  314. package/library/skills/browse-templates/resource.yaml +23 -0
  315. package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
  316. package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
  317. package/library/skills/character-animation-wiring/SKILL.md +249 -0
  318. package/library/skills/character-animation-wiring/resource.yaml +39 -0
  319. package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
  320. package/library/skills/character-model/resource.yaml +36 -0
  321. package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
  322. package/library/skills/character-portrait/resource.yaml +30 -0
  323. package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
  324. package/library/skills/cinematic-cutscene/resource.yaml +29 -0
  325. package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
  326. package/library/skills/concept-art/resource.yaml +34 -0
  327. package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
  328. package/library/skills/create-asset-sheet/resource.yaml +33 -0
  329. package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
  330. package/library/skills/debug/resource.yaml +31 -0
  331. package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
  332. package/library/skills/debugging-game-feel/resource.yaml +25 -0
  333. package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
  334. package/library/skills/design-level/resource.yaml +31 -0
  335. package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
  336. package/library/skills/design-mechanic/resource.yaml +31 -0
  337. package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
  338. package/library/skills/design-npc/resource.yaml +29 -0
  339. package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
  340. package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
  341. package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
  342. package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
  343. package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
  344. package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
  345. package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
  346. package/library/skills/environment-kit/resource.yaml +29 -0
  347. package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
  348. package/library/skills/export-and-ship/resource.yaml +32 -0
  349. package/library/skills/fabricating-assets/SKILL.md +195 -0
  350. package/library/skills/fabricating-assets/resource.yaml +52 -0
  351. package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
  352. package/library/skills/facial-and-lipsync/resource.yaml +36 -0
  353. package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
  354. package/library/skills/fps-controller/resource.yaml +29 -0
  355. package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
  356. package/library/skills/game-feel/resource.yaml +27 -0
  357. package/library/skills/gameskill/SKILL.md +64 -0
  358. package/library/skills/gameskill/resource.yaml +22 -0
  359. package/library/skills/gdscript-patterns/resource.yaml +23 -0
  360. package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
  361. package/library/skills/generate-motion/resource.yaml +34 -0
  362. package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
  363. package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
  364. package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
  365. package/library/skills/headless-scripting/resource.yaml +26 -0
  366. package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +1 -1
  367. package/library/skills/host-authoritative-state/resource.yaml +28 -0
  368. package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
  369. package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
  370. package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
  371. package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
  372. package/library/skills/investigating-bugs/resource.yaml +24 -0
  373. package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
  374. package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
  375. package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
  376. package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +23 -23
  377. package/library/skills/make-game/resource.yaml +35 -0
  378. package/library/skills/music-track/resource.yaml +28 -0
  379. package/library/skills/navigate-summer/SKILL.md +61 -0
  380. package/library/skills/navigate-summer/resource.yaml +35 -0
  381. package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
  382. package/library/skills/new-project/resource.yaml +28 -0
  383. package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
  384. package/library/skills/organic-model/resource.yaml +32 -0
  385. package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
  386. package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
  387. package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
  388. package/library/skills/pixel-art/resource.yaml +31 -0
  389. package/library/skills/play/resource.yaml +26 -0
  390. package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
  391. package/library/skills/playtesting-a-feature/resource.yaml +31 -0
  392. package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
  393. package/library/skills/procedural-animation/resource.yaml +33 -0
  394. package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
  395. package/library/skills/prop-model/resource.yaml +33 -0
  396. package/library/skills/psx-retro-rendering/SKILL.md +416 -0
  397. package/library/skills/psx-retro-rendering/resource.yaml +36 -0
  398. package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
  399. package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
  400. package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
  401. package/library/skills/remote-deploy/resource.yaml +23 -0
  402. package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
  403. package/library/skills/retarget/resource.yaml +33 -0
  404. package/library/skills/running-in-the-cloud/SKILL.md +103 -0
  405. package/library/skills/running-in-the-cloud/resource.yaml +33 -0
  406. package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +9 -1
  407. package/library/skills/scene-composition/resource.yaml +27 -0
  408. package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
  409. package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
  410. package/library/skills/scene-scripting/SKILL.md +764 -0
  411. package/library/skills/scene-scripting/resource.yaml +58 -0
  412. package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
  413. package/library/skills/scene-to-level/resource.yaml +33 -0
  414. package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +1 -1
  415. package/library/skills/setup-multiplayer/resource.yaml +28 -0
  416. package/library/skills/skill-create/SKILL.md +138 -0
  417. package/library/skills/skill-create/resource.yaml +25 -0
  418. package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
  419. package/library/skills/skill-improve/resource.yaml +25 -0
  420. package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
  421. package/library/skills/skill-test/resource.yaml +26 -0
  422. package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
  423. package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
  424. package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
  425. package/library/skills/skybox-panorama/resource.yaml +28 -0
  426. package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
  427. package/library/skills/sound-effect/resource.yaml +27 -0
  428. package/library/skills/spatial-placement/SKILL.md +74 -0
  429. package/library/skills/spatial-placement/resource.yaml +42 -0
  430. package/library/skills/spatial-placement/tests/spec.md +65 -0
  431. package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
  432. package/library/skills/sprite-sheet/resource.yaml +32 -0
  433. package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
  434. package/library/skills/tileable-texture/resource.yaml +31 -0
  435. package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
  436. package/library/skills/trailer-shot/resource.yaml +27 -0
  437. package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
  438. package/library/skills/tune-performance/resource.yaml +31 -0
  439. package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +1 -1
  440. package/library/skills/ui-basics/resource.yaml +25 -0
  441. package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
  442. package/library/skills/ui-graphics/resource.yaml +29 -0
  443. package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
  444. package/library/skills/use-widget-asset/resource.yaml +29 -0
  445. package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
  446. package/library/skills/using-summer/resource.yaml +41 -0
  447. package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
  448. package/library/skills/vehicle-model/resource.yaml +34 -0
  449. package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
  450. package/library/skills/verification-before-completion/resource.yaml +23 -0
  451. package/library/skills/verifying-scenes/SKILL.md +98 -0
  452. package/library/skills/verifying-scenes/resource.yaml +42 -0
  453. package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
  454. package/library/skills/vfx-dissolve/resource.yaml +33 -0
  455. package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
  456. package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  457. package/library/skills/vfx-fire/resource.yaml +35 -0
  458. package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
  459. package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
  460. package/library/skills/vfx-hit-spark/resource.yaml +34 -0
  461. package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
  462. package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
  463. package/library/skills/vfx-lightning/resource.yaml +33 -0
  464. package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
  465. package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
  466. package/library/skills/vfx-magic-glow/resource.yaml +34 -0
  467. package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
  468. package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
  469. package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
  470. package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
  471. package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
  472. package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
  473. package/library/skills/vfx-smoke/resource.yaml +32 -0
  474. package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
  475. package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
  476. package/library/skills/vfx-water-ripple/resource.yaml +31 -0
  477. package/library/skills/voice-line/resource.yaml +27 -0
  478. package/library/skills/world-building-3d/SKILL.md +105 -0
  479. package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
  480. package/library/skills/world-building-3d/resource.yaml +44 -0
  481. package/library/skills/world-building-3d/tests/spec.md +48 -0
  482. package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
  483. package/library/skills/writing-plans/resource.yaml +23 -0
  484. package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
  485. package/library/skills/writing-skills/resource.yaml +29 -0
  486. package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
  487. package/library/templates/2d-brario-platformer/resource.yaml +21 -0
  488. package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
  489. package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
  490. package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
  491. package/library/templates/2d-platformer/resource.yaml +24 -0
  492. package/library/templates/2d-rpg/resource.yaml +21 -0
  493. package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
  494. package/library/templates/3d-basic/resource.yaml +16 -0
  495. package/library/templates/3d-city-kit/resource.yaml +24 -0
  496. package/library/templates/3d-fps-old-school/resource.yaml +21 -0
  497. package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
  498. package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
  499. package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
  500. package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
  501. package/library/templates/3d-racing-game/resource.yaml +21 -0
  502. package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
  503. package/library/templates/3d-third-person-controller/resource.yaml +21 -0
  504. package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
  505. package/library/templates/README.md +94 -0
  506. package/library/templates/empty/resource.yaml +16 -0
  507. package/library/tools/add-node/resource.yaml +60 -0
  508. package/library/tools/align-distribute-3d/resource.yaml +87 -0
  509. package/library/tools/api-docs/resource.yaml +57 -0
  510. package/library/tools/batch/resource.yaml +52 -0
  511. package/library/tools/camera-bookmark/resource.yaml +73 -0
  512. package/library/tools/check-job/resource.yaml +45 -0
  513. package/library/tools/clear-console/resource.yaml +40 -0
  514. package/library/tools/connect-signal/resource.yaml +63 -0
  515. package/library/tools/create-debug-report/resource.yaml +67 -0
  516. package/library/tools/create-scene/resource.yaml +59 -0
  517. package/library/tools/creator-config/resource.yaml +63 -0
  518. package/library/tools/creator-publish/resource.yaml +73 -0
  519. package/library/tools/creator-releases/resource.yaml +53 -0
  520. package/library/tools/fabricate-3d/resource.yaml +108 -0
  521. package/library/tools/game-control/resource.yaml +84 -0
  522. package/library/tools/game-input/resource.yaml +159 -0
  523. package/library/tools/game-probe/resource.yaml +90 -0
  524. package/library/tools/generate-3d/resource.yaml +112 -0
  525. package/library/tools/generate-audio/resource.yaml +80 -0
  526. package/library/tools/generate-image/resource.yaml +62 -0
  527. package/library/tools/generate-motion/resource.yaml +66 -0
  528. package/library/tools/generate-video/resource.yaml +66 -0
  529. package/library/tools/get-agent-playbook/resource.yaml +40 -0
  530. package/library/tools/get-asset/resource.yaml +42 -0
  531. package/library/tools/get-asset-download-url/resource.yaml +52 -0
  532. package/library/tools/get-console/resource.yaml +69 -0
  533. package/library/tools/get-debugger-errors/resource.yaml +56 -0
  534. package/library/tools/get-debugger-warnings/resource.yaml +52 -0
  535. package/library/tools/get-diagnostics/resource.yaml +42 -0
  536. package/library/tools/get-project-context/resource.yaml +45 -0
  537. package/library/tools/get-runtime-tree/resource.yaml +62 -0
  538. package/library/tools/get-scene-tree/resource.yaml +52 -0
  539. package/library/tools/get-script-errors/resource.yaml +45 -0
  540. package/library/tools/get-studio-workflow/resource.yaml +43 -0
  541. package/library/tools/import-asset/resource.yaml +73 -0
  542. package/library/tools/import-asset-by-id/resource.yaml +56 -0
  543. package/library/tools/import-from-url/resource.yaml +51 -0
  544. package/library/tools/import-from-url-batch/resource.yaml +60 -0
  545. package/library/tools/import-hdri/resource.yaml +69 -0
  546. package/library/tools/input-map-bind/resource.yaml +52 -0
  547. package/library/tools/inspect-node/resource.yaml +46 -0
  548. package/library/tools/inspect-resource/resource.yaml +45 -0
  549. package/library/tools/inspect-runtime-node/resource.yaml +54 -0
  550. package/library/tools/instantiate-scene/resource.yaml +62 -0
  551. package/library/tools/is-running/resource.yaml +40 -0
  552. package/library/tools/library-feedback/resource.yaml +89 -0
  553. package/library/tools/list-my-assets/resource.yaml +56 -0
  554. package/library/tools/navigation-probe/resource.yaml +85 -0
  555. package/library/tools/open/resource.yaml +80 -0
  556. package/library/tools/open-main-scene/resource.yaml +40 -0
  557. package/library/tools/open-scene/resource.yaml +46 -0
  558. package/library/tools/play/resource.yaml +91 -0
  559. package/library/tools/project-setting/resource.yaml +53 -0
  560. package/library/tools/read-file/resource.yaml +47 -0
  561. package/library/tools/read-library/resource.yaml +67 -0
  562. package/library/tools/recent-events/resource.yaml +71 -0
  563. package/library/tools/remove-node/resource.yaml +51 -0
  564. package/library/tools/replace-node/resource.yaml +57 -0
  565. package/library/tools/replace-text/resource.yaml +61 -0
  566. package/library/tools/run-editor-script/resource.yaml +61 -0
  567. package/library/tools/run-script/resource.yaml +73 -0
  568. package/library/tools/runtime-animate/resource.yaml +140 -0
  569. package/library/tools/runtime-call/resource.yaml +74 -0
  570. package/library/tools/runtime-set/resource.yaml +80 -0
  571. package/library/tools/runtime-spawn/resource.yaml +95 -0
  572. package/library/tools/save-scene/resource.yaml +50 -0
  573. package/library/tools/screenshot/resource.yaml +112 -0
  574. package/library/tools/search-assets/resource.yaml +67 -0
  575. package/library/tools/search-library/resource.yaml +81 -0
  576. package/library/tools/select-node/resource.yaml +48 -0
  577. package/library/tools/set-prop/resource.yaml +64 -0
  578. package/library/tools/set-resource-property/resource.yaml +66 -0
  579. package/library/tools/slice-asset-sheet/resource.yaml +47 -0
  580. package/library/tools/snap-to-surface/resource.yaml +90 -0
  581. package/library/tools/snapshot-diff/resource.yaml +58 -0
  582. package/library/tools/starcast/resource.yaml +120 -0
  583. package/library/tools/start-game-task/resource.yaml +91 -0
  584. package/library/tools/stop/resource.yaml +51 -0
  585. package/library/tools/test-placement/resource.yaml +109 -0
  586. package/library/tools/ui-actions/resource.yaml +77 -0
  587. package/library/tools/ui-activate/resource.yaml +88 -0
  588. package/library/tools/ui-screenshot/resource.yaml +63 -0
  589. package/library/tools/ui-tree/resource.yaml +69 -0
  590. package/library/tools/wait-for-event/resource.yaml +84 -0
  591. package/library/tools/world-snapshot/resource.yaml +60 -0
  592. package/library/tools/write-file/resource.yaml +54 -0
  593. package/package.json +22 -16
  594. package/registry/generated/aliases.json +207 -0
  595. package/registry/generated/counts.json +12 -0
  596. package/registry/generated/gemini-extension.json +122 -0
  597. package/registry/generated/index.json +7709 -0
  598. package/registry/generated/marketplace.claude.json +44 -0
  599. package/registry/generated/mcp.json +13 -0
  600. package/registry/generated/plugin.claude.json +135 -0
  601. package/registry/generated/plugin.codex.json +144 -0
  602. package/registry/generated/plugin.cursor.json +134 -0
  603. package/registry/generated/plugin.factory.json +117 -0
  604. package/registry/generated/skills-registry.json +851 -0
  605. package/registry/generated/templates-registry.json +455 -0
  606. package/registry/schemas/allowed-hosts.json +19 -0
  607. package/registry/schemas/collection.schema.json +68 -0
  608. package/registry/schemas/domains.json +96 -0
  609. package/registry/schemas/example.schema.json +11 -0
  610. package/registry/schemas/reference.schema.json +10 -0
  611. package/registry/schemas/resource.schema.json +154 -0
  612. package/registry/schemas/skill.schema.json +14 -0
  613. package/registry/schemas/template.schema.json +46 -0
  614. package/registry/schemas/tool.schema.json +61 -0
  615. package/_persona/summer/SKILL.md +0 -113
  616. package/dist/bin/postinstall.d.ts +0 -2
  617. package/dist/bin/postinstall.js +0 -3
  618. package/dist/commands/cloud.d.ts +0 -2
  619. package/dist/commands/cloud.js +0 -80
  620. package/dist/commands/create.d.ts +0 -3
  621. package/dist/commands/create.js +0 -171
  622. package/dist/commands/install.d.ts +0 -19
  623. package/dist/commands/install.js +0 -194
  624. package/dist/commands/list.js +0 -67
  625. package/dist/commands/logout.js +0 -13
  626. package/dist/commands/logs.d.ts +0 -2
  627. package/dist/commands/logs.js +0 -19
  628. package/dist/commands/open.d.ts +0 -2
  629. package/dist/commands/open.js +0 -32
  630. package/dist/commands/orchestrator.d.ts +0 -8
  631. package/dist/commands/orchestrator.js +0 -143
  632. package/dist/commands/run.d.ts +0 -2
  633. package/dist/commands/run.js +0 -167
  634. package/dist/commands/status.js +0 -46
  635. package/dist/lib/banner.d.ts +0 -4
  636. package/dist/lib/banner.js +0 -122
  637. package/dist/lib/cloud/api.d.ts +0 -79
  638. package/dist/lib/cloud/api.js +0 -107
  639. package/dist/lib/cloud/apply.d.ts +0 -32
  640. package/dist/lib/cloud/apply.js +0 -294
  641. package/dist/lib/cloud/checkpoint.d.ts +0 -26
  642. package/dist/lib/cloud/checkpoint.js +0 -142
  643. package/dist/lib/cloud/conflicts.d.ts +0 -55
  644. package/dist/lib/cloud/conflicts.js +0 -131
  645. package/dist/lib/cloud/containment.d.ts +0 -8
  646. package/dist/lib/cloud/containment.js +0 -52
  647. package/dist/lib/cloud/diff.d.ts +0 -39
  648. package/dist/lib/cloud/diff.js +0 -138
  649. package/dist/lib/cloud/engine-bridge.d.ts +0 -34
  650. package/dist/lib/cloud/engine-bridge.js +0 -139
  651. package/dist/lib/cloud/hash-cache.d.ts +0 -23
  652. package/dist/lib/cloud/hash-cache.js +0 -44
  653. package/dist/lib/cloud/hash.d.ts +0 -10
  654. package/dist/lib/cloud/hash.js +0 -111
  655. package/dist/lib/cloud/http.d.ts +0 -17
  656. package/dist/lib/cloud/http.js +0 -47
  657. package/dist/lib/cloud/lock-path.d.ts +0 -1
  658. package/dist/lib/cloud/lock-path.js +0 -5
  659. package/dist/lib/cloud/lock.d.ts +0 -14
  660. package/dist/lib/cloud/lock.js +0 -143
  661. package/dist/lib/cloud/manifest.d.ts +0 -6
  662. package/dist/lib/cloud/manifest.js +0 -41
  663. package/dist/lib/cloud/paths.d.ts +0 -20
  664. package/dist/lib/cloud/paths.js +0 -90
  665. package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
  666. package/dist/lib/cloud/project-godot-merge.js +0 -185
  667. package/dist/lib/cloud/rules.d.ts +0 -39
  668. package/dist/lib/cloud/rules.js +0 -159
  669. package/dist/lib/cloud/sync.d.ts +0 -21
  670. package/dist/lib/cloud/sync.js +0 -518
  671. package/dist/lib/cloud/transfer.d.ts +0 -23
  672. package/dist/lib/cloud/transfer.js +0 -184
  673. package/dist/lib/cloud/types.d.ts +0 -62
  674. package/dist/lib/cloud/types.js +0 -1
  675. package/dist/lib/cloud/validate-path.d.ts +0 -23
  676. package/dist/lib/cloud/validate-path.js +0 -103
  677. package/dist/lib/engine.d.ts +0 -51
  678. package/dist/lib/game-task-plan.d.ts +0 -42
  679. package/dist/lib/project-memory.d.ts +0 -33
  680. package/dist/lib/public-surface-paths.d.ts +0 -13
  681. package/dist/lib/public-surface-paths.js +0 -42
  682. package/dist/lib/remote-templates.d.ts +0 -25
  683. package/dist/lib/remote-templates.js +0 -86
  684. package/dist/lib/skills-registry.d.ts +0 -572
  685. package/dist/lib/skills-registry.js +0 -1061
  686. package/dist/lib/version-check.d.ts +0 -106
  687. package/dist/mcp/tools/cloud-tools.js +0 -42
  688. package/references/mcp-tools-reference.md +0 -199
  689. package/references/template-registry.md +0 -73
  690. package/skills/README.md +0 -103
  691. package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
  692. package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
  693. package/skills/workflow/brainstorming/scripts/helper.js +0 -88
  694. package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
  695. package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
  696. package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
  697. package/skills/workflow/brainstorming/visual-companion.md +0 -287
  698. package/skills/workflow/gameskill/SKILL.md +0 -120
  699. package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
  700. package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
  701. package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
  702. package/skills/workflow/investigating-bugs/test-academic.md +0 -14
  703. package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
  704. package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
  705. package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
  706. package/skills/workflow/mcpupdate/SKILL.md +0 -134
  707. package/skills/workflow/skill-create/SKILL.md +0 -153
  708. package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
  709. package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
  710. package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
  711. package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
  712. package/skills/workflow/writing-skills/render-graphs.js +0 -168
  713. /package/dist/{commands → cli/commands}/config.d.ts +0 -0
  714. /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
  715. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  716. /package/dist/{commands → cli/commands}/login.d.ts +0 -0
  717. /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
  718. /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
  719. /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
  720. /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
  721. /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
  722. /package/dist/{lib → core}/log-filters.d.ts +0 -0
  723. /package/dist/{lib → core}/mcp-log.d.ts +0 -0
  724. /package/dist/{lib → core}/store.d.ts +0 -0
  725. /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
  726. /package/dist/{lib → core}/telemetry.d.ts +0 -0
  727. /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
  728. /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
  729. /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
  730. /package/{references → library/references/gd-style}/gd-style.md +0 -0
  731. /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
  732. /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
  733. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
  734. /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
  735. /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
  736. /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
  737. /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
  738. /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
  739. /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
  740. /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
  741. /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
  742. /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
@@ -0,0 +1,143 @@
1
+ import { z } from "zod";
2
+ import { type EmbeddingsFile } from "./embeddings.js";
3
+ export declare const LIBRARY_KINDS: readonly ["tool", "skill", "example", "template", "collection", "reference"];
4
+ export type LibraryKind = (typeof LIBRARY_KINDS)[number];
5
+ /** library/<dir>/<slug> per kind (CONTRACT §2). */
6
+ export declare const LIBRARY_KIND_DIRS: Record<LibraryKind, string>;
7
+ export declare const LIBRARY_ID_PATTERN: RegExp;
8
+ export declare const DEFAULT_SEARCH_LIMIT = 8;
9
+ export declare const MAX_SEARCH_LIMIT = 20;
10
+ export declare const MAX_QUERY_LENGTH = 300;
11
+ /**
12
+ * Status factor applied to every candidate's score before ordering — the
13
+ * lexical score and the semantic cosine alike, so both sides of the fusion
14
+ * see the same order. A `preview` entry has not been exercised in-engine by
15
+ * the Summer team, so with comparable evidence the stable entry must win: a
16
+ * preview hit needs a lexical margin of more than 1/PREVIEW_SCORE_FACTOR
17
+ * (25%) over a stable one to outrank it. include_preview:false still removes
18
+ * preview entries entirely; this only orders them. Applied here, not in the
19
+ * index ranker (registry-search.ts), because status is a catalog attribute the
20
+ * routing eval corpus does not carry.
21
+ *
22
+ * Calibration (E2E 2026-09-03 F-18): "make the platformer jump feel better"
23
+ * ranked preview skill/celeste-momentum-platforming (44.6) above stable
24
+ * skill/debugging-game-feel (38.6); at 0.8 the stable entry leads (35.7 vs 38.6)
25
+ * while every preview entry the routing queries expect keeps its top-5 slot.
26
+ */
27
+ export declare const PREVIEW_SCORE_FACTOR = 0.8;
28
+ export declare function statusScoreFactor(status: string | undefined): number;
29
+ /** Hard cap on the query-embedding round trip: search must never feel slow. */
30
+ export declare const QUERY_EMBED_TIMEOUT_MS = 1500;
31
+ /** One record of registry/generated/index.json (the compiler's buildIndex). */
32
+ export interface LibraryIndexEntry {
33
+ id: string;
34
+ kind: string;
35
+ version?: string;
36
+ content_hash?: string;
37
+ summary?: string;
38
+ use_when?: string[];
39
+ facets?: {
40
+ lifecycle?: string[];
41
+ domains?: string[];
42
+ modalities?: string[];
43
+ };
44
+ compatibility?: Record<string, string>;
45
+ related?: Record<string, string[] | undefined>;
46
+ status?: string;
47
+ mcp_tool_name?: string;
48
+ remote?: boolean;
49
+ cli_command?: string;
50
+ authority?: Record<string, boolean>;
51
+ recommended?: boolean;
52
+ }
53
+ export type MatchedBy = "lexical" | "semantic";
54
+ export interface LibrarySearchHit {
55
+ id: string;
56
+ kind: string;
57
+ status: string;
58
+ summary: string;
59
+ use_when: string[];
60
+ /** Lexical: the ranker's score. Fused: the RRF score. Comparable only within one response. */
61
+ score: number;
62
+ matched_by: MatchedBy[];
63
+ /** Tool hits carry the MCP name so a hit can be turned into a call. */
64
+ mcp_tool_name?: string;
65
+ }
66
+ export interface LibrarySearchOptions {
67
+ kinds?: readonly string[];
68
+ limit?: number;
69
+ includePreview?: boolean;
70
+ }
71
+ /** Seams for tests and for callers that hold the data already. Every field
72
+ * optional; the defaults read the shipped package. */
73
+ export interface LibrarySearchDeps {
74
+ entries?: LibraryIndexEntry[];
75
+ /** `null` = no embeddings file. `undefined` = read the shipped one. */
76
+ embeddings?: EmbeddingsFile | null;
77
+ /** Query embedder. Return null to signal "unavailable" (never throw). */
78
+ embedQuery?: (query: string) => Promise<number[] | null>;
79
+ env?: NodeJS.ProcessEnv;
80
+ }
81
+ export interface LibrarySearchResult {
82
+ hits: LibrarySearchHit[];
83
+ /** True when a query vector was obtained and fused into the ranking. */
84
+ semantic: boolean;
85
+ }
86
+ export declare const searchLibraryInputShape: {
87
+ query: z.ZodString;
88
+ kinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["tool", "skill", "example", "template", "collection", "reference"]>, "many">>;
89
+ limit: z.ZodOptional<z.ZodNumber>;
90
+ include_preview: z.ZodOptional<z.ZodBoolean>;
91
+ };
92
+ export declare const searchLibraryInputSchema: z.ZodObject<{
93
+ query: z.ZodString;
94
+ kinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["tool", "skill", "example", "template", "collection", "reference"]>, "many">>;
95
+ limit: z.ZodOptional<z.ZodNumber>;
96
+ include_preview: z.ZodOptional<z.ZodBoolean>;
97
+ }, "strict", z.ZodTypeAny, {
98
+ query: string;
99
+ kinds?: ("template" | "tool" | "skill" | "reference" | "example" | "collection")[] | undefined;
100
+ limit?: number | undefined;
101
+ include_preview?: boolean | undefined;
102
+ }, {
103
+ query: string;
104
+ kinds?: ("template" | "tool" | "skill" | "reference" | "example" | "collection")[] | undefined;
105
+ limit?: number | undefined;
106
+ include_preview?: boolean | undefined;
107
+ }>;
108
+ export type SearchLibraryArgs = z.infer<typeof searchLibraryInputSchema>;
109
+ /** Test-only seam: forget the cached index and embeddings file. */
110
+ export declare function _resetLibrarySearchForTests(): void;
111
+ /**
112
+ * The shipped catalog. Throws when the generated file is missing or
113
+ * unparsable — the npm package always ships it, so that is a broken install,
114
+ * not a search miss.
115
+ */
116
+ export declare function loadLibraryIndex(): LibraryIndexEntry[];
117
+ /** The shipped embeddings sidecar, or null when absent/unusable. Cached. */
118
+ export declare function loadEmbeddingsFile(): EmbeddingsFile | null;
119
+ /**
120
+ * Embed the query with the configured provider. Returns null on ANY problem
121
+ * — offline, timeout, non-2xx, bad body, invalid gateway config — so search
122
+ * degrades to lexical instead of failing. `SUMMER_EMBED_URL=off` disables the
123
+ * network call entirely (the query text is otherwise sent to the provider).
124
+ */
125
+ export declare function embedQueryWithConfiguredProvider(query: string, env?: NodeJS.ProcessEnv): Promise<number[] | null>;
126
+ /**
127
+ * Rank the library for `query`. Deprecated entries never surface (they exist
128
+ * for alias continuity); preview entries surface unless includePreview is
129
+ * false. Never throws for provider/embeddings reasons.
130
+ */
131
+ export declare function searchLibraryDetailed(query: string, options?: LibrarySearchOptions, deps?: LibrarySearchDeps): Promise<LibrarySearchResult>;
132
+ /** The ranked hits for `query` (see searchLibraryDetailed). */
133
+ export declare function searchLibrary(query: string, options?: LibrarySearchOptions, deps?: LibrarySearchDeps): Promise<LibrarySearchHit[]>;
134
+ export interface SearchLibraryPayload {
135
+ query: string;
136
+ semantic: boolean;
137
+ count: number;
138
+ results: LibrarySearchHit[];
139
+ hint: string;
140
+ }
141
+ export declare function searchHint(hits: readonly LibrarySearchHit[]): string;
142
+ /** What summer_search_library and `summer tool search-library` return. */
143
+ export declare function runSearchLibrary(args: SearchLibraryArgs, deps?: LibrarySearchDeps): Promise<SearchLibraryPayload>;
@@ -0,0 +1,301 @@
1
+ /**
2
+ * Library search — the runtime librarian's first half (CONTRACT §6, §9).
3
+ *
4
+ * `searchLibrary(query, options)` ranks every entry of the shipped
5
+ * registry/generated/index.json for a plain-language task:
6
+ *
7
+ * 1. LEXICAL — `rankEntries` from ./registry-search.ts, the SAME kind-aware
8
+ * BM25 ranker the routing eval gates on, so runtime search and the eval
9
+ * measure one ranking.
10
+ * 2. SEMANTIC (optional) — when the install ships
11
+ * registry/generated/embeddings.json AND a query-embedding provider
12
+ * answers (SUMMER_EMBED_URL, or <gateway>/api/mcp/embed; 1.5s timeout;
13
+ * Summer account token attached when logged in), the query is embedded
14
+ * and scored by cosine over every stored vector (brute force — 10k x 384
15
+ * floats is well under a millisecond of arithmetic).
16
+ * 3. FUSION — lexical and semantic rankings merge by reciprocal rank fusion
17
+ * (k = 60). `matched_by` tells the agent which side found each hit.
18
+ *
19
+ * Offline, no embeddings file, provider error, dims mismatch, unparsable
20
+ * file: lexical only, `matched_by: ["lexical"]`, never a throw for that
21
+ * reason. Ties break on id so output is stable across runs.
22
+ *
23
+ * One behavior, two faces: `runSearchLibrary` is what both
24
+ * src/mcp/tools/library-tools.ts (summer_search_library) and
25
+ * src/core/capabilities/tool-dispatch.ts (`summer tool search-library`) call.
26
+ */
27
+ import { existsSync, readFileSync } from "node:fs";
28
+ import { join } from "node:path";
29
+ import { z } from "zod";
30
+ import { getAuthToken } from "./auth.js";
31
+ import { resolveGatewayUrl } from "./config.js";
32
+ import { EMBED_PATH, EMBEDDINGS_FILE, cosineSimilarity, createEmbedProvider, decodeVector, parseEmbeddingsFile, reciprocalRankFusion, } from "./embeddings.js";
33
+ import { PACKAGE_ROOT } from "./package-root.js";
34
+ import { buildSearchIndex, rankEntries } from "./registry-search.js";
35
+ export const LIBRARY_KINDS = ["tool", "skill", "example", "template", "collection", "reference"];
36
+ /** library/<dir>/<slug> per kind (CONTRACT §2). */
37
+ export const LIBRARY_KIND_DIRS = {
38
+ tool: "tools",
39
+ skill: "skills",
40
+ example: "examples",
41
+ template: "templates",
42
+ collection: "collections",
43
+ reference: "references",
44
+ };
45
+ export const LIBRARY_ID_PATTERN = /^(tool|skill|example|template|collection|reference)\/[a-z0-9]+(-[a-z0-9]+)*$/;
46
+ export const DEFAULT_SEARCH_LIMIT = 8;
47
+ export const MAX_SEARCH_LIMIT = 20;
48
+ export const MAX_QUERY_LENGTH = 300;
49
+ /**
50
+ * Status factor applied to every candidate's score before ordering — the
51
+ * lexical score and the semantic cosine alike, so both sides of the fusion
52
+ * see the same order. A `preview` entry has not been exercised in-engine by
53
+ * the Summer team, so with comparable evidence the stable entry must win: a
54
+ * preview hit needs a lexical margin of more than 1/PREVIEW_SCORE_FACTOR
55
+ * (25%) over a stable one to outrank it. include_preview:false still removes
56
+ * preview entries entirely; this only orders them. Applied here, not in the
57
+ * index ranker (registry-search.ts), because status is a catalog attribute the
58
+ * routing eval corpus does not carry.
59
+ *
60
+ * Calibration (E2E 2026-09-03 F-18): "make the platformer jump feel better"
61
+ * ranked preview skill/celeste-momentum-platforming (44.6) above stable
62
+ * skill/debugging-game-feel (38.6); at 0.8 the stable entry leads (35.7 vs 38.6)
63
+ * while every preview entry the routing queries expect keeps its top-5 slot.
64
+ */
65
+ export const PREVIEW_SCORE_FACTOR = 0.8;
66
+ export function statusScoreFactor(status) {
67
+ return (status ?? "stable") === "preview" ? PREVIEW_SCORE_FACTOR : 1;
68
+ }
69
+ /** Hard cap on the query-embedding round trip: search must never feel slow. */
70
+ export const QUERY_EMBED_TIMEOUT_MS = 1500;
71
+ /** How deep each ranking is read before fusion. */
72
+ const FUSION_CANDIDATES = 50;
73
+ // ── Input schema (mirrors library/tools/search-library/resource.yaml; parity-tested) ──
74
+ export const searchLibraryInputShape = {
75
+ query: z
76
+ .string()
77
+ .min(1)
78
+ .max(MAX_QUERY_LENGTH)
79
+ .describe("The task in plain words — what you are building, fixing, or looking for (e.g. 'make stylized water', 'the player falls through the floor', 'which tool reads script errors')."),
80
+ kinds: z
81
+ .array(z.enum(LIBRARY_KINDS))
82
+ .optional()
83
+ .describe("Restrict to these kinds (tool, skill, example, template, collection, reference). Omit for all kinds."),
84
+ limit: z
85
+ .number()
86
+ .int()
87
+ .min(1)
88
+ .max(MAX_SEARCH_LIMIT)
89
+ .optional()
90
+ .describe(`Maximum results, 1-${MAX_SEARCH_LIMIT} (default ${DEFAULT_SEARCH_LIMIT}).`),
91
+ include_preview: z
92
+ .boolean()
93
+ .optional()
94
+ .describe("Include status: preview entries — not yet exercised in-engine by the Summer team (default true). false = stable only."),
95
+ };
96
+ export const searchLibraryInputSchema = z.object(searchLibraryInputShape).strict();
97
+ // ── Index loading (cached per process) ─────────────────────────────────────
98
+ const INDEX_RELPATH = join("registry", "generated", "index.json");
99
+ const EMBEDDINGS_RELPATH = join("registry", "generated", EMBEDDINGS_FILE);
100
+ let indexCache = null;
101
+ let embeddingsCache;
102
+ const searchIndexCache = new WeakMap();
103
+ /** Test-only seam: forget the cached index and embeddings file. */
104
+ export function _resetLibrarySearchForTests() {
105
+ indexCache = null;
106
+ embeddingsCache = undefined;
107
+ }
108
+ /**
109
+ * The shipped catalog. Throws when the generated file is missing or
110
+ * unparsable — the npm package always ships it, so that is a broken install,
111
+ * not a search miss.
112
+ */
113
+ export function loadLibraryIndex() {
114
+ if (indexCache)
115
+ return indexCache;
116
+ const file = join(PACKAGE_ROOT, INDEX_RELPATH);
117
+ let parsed;
118
+ try {
119
+ parsed = JSON.parse(readFileSync(file, "utf-8"));
120
+ }
121
+ catch (error) {
122
+ const reason = error instanceof Error ? error.message : String(error);
123
+ throw new Error(`registry/generated/index.json is missing or unreadable in this install (${reason}). The summer-engine package always ships it — reinstall or update the package.`);
124
+ }
125
+ const resources = Array.isArray(parsed.resources) ? parsed.resources : [];
126
+ indexCache = resources.filter((entry) => !!entry && typeof entry === "object" && typeof entry.id === "string" && typeof entry.kind === "string");
127
+ return indexCache;
128
+ }
129
+ function searchIndexFor(entries) {
130
+ let index = searchIndexCache.get(entries);
131
+ if (!index) {
132
+ index = buildSearchIndex(entries);
133
+ searchIndexCache.set(entries, index);
134
+ }
135
+ return index;
136
+ }
137
+ /** The shipped embeddings sidecar, or null when absent/unusable. Cached. */
138
+ export function loadEmbeddingsFile() {
139
+ if (embeddingsCache !== undefined)
140
+ return embeddingsCache;
141
+ const file = join(PACKAGE_ROOT, EMBEDDINGS_RELPATH);
142
+ try {
143
+ embeddingsCache = existsSync(file) ? parseEmbeddingsFile(JSON.parse(readFileSync(file, "utf-8"))) : null;
144
+ }
145
+ catch {
146
+ embeddingsCache = null;
147
+ }
148
+ return embeddingsCache;
149
+ }
150
+ // ── Query embedding (default provider wiring) ──────────────────────────────
151
+ /**
152
+ * Embed the query with the configured provider. Returns null on ANY problem
153
+ * — offline, timeout, non-2xx, bad body, invalid gateway config — so search
154
+ * degrades to lexical instead of failing. `SUMMER_EMBED_URL=off` disables the
155
+ * network call entirely (the query text is otherwise sent to the provider).
156
+ */
157
+ export async function embedQueryWithConfiguredProvider(query, env = process.env) {
158
+ try {
159
+ const override = env.SUMMER_EMBED_URL?.trim();
160
+ if (override === "off")
161
+ return null;
162
+ const url = override || `${await resolveGatewayUrl()}${EMBED_PATH}`;
163
+ let token = null;
164
+ try {
165
+ token = await getAuthToken();
166
+ }
167
+ catch {
168
+ token = null;
169
+ }
170
+ const provider = createEmbedProvider({ url, token, timeoutMs: QUERY_EMBED_TIMEOUT_MS });
171
+ return (await provider(query)).vector;
172
+ }
173
+ catch {
174
+ return null;
175
+ }
176
+ }
177
+ // ── Search ─────────────────────────────────────────────────────────────────
178
+ function round4(n) {
179
+ return Math.round(n * 10000) / 10000;
180
+ }
181
+ function toHit(entry, score, matchedBy) {
182
+ const hit = {
183
+ id: entry.id,
184
+ kind: entry.kind,
185
+ status: entry.status ?? "stable",
186
+ summary: entry.summary ?? "",
187
+ use_when: Array.isArray(entry.use_when) ? entry.use_when : [],
188
+ score: round4(score),
189
+ matched_by: matchedBy,
190
+ };
191
+ if (entry.kind === "tool" && typeof entry.mcp_tool_name === "string")
192
+ hit.mcp_tool_name = entry.mcp_tool_name;
193
+ return hit;
194
+ }
195
+ /**
196
+ * Rank the library for `query`. Deprecated entries never surface (they exist
197
+ * for alias continuity); preview entries surface unless includePreview is
198
+ * false. Never throws for provider/embeddings reasons.
199
+ */
200
+ export async function searchLibraryDetailed(query, options = {}, deps = {}) {
201
+ const entries = deps.entries ?? loadLibraryIndex();
202
+ const env = deps.env ?? process.env;
203
+ const limit = Math.min(MAX_SEARCH_LIMIT, Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT)));
204
+ const kinds = options.kinds && options.kinds.length > 0 ? new Set(options.kinds) : null;
205
+ const includePreview = options.includePreview ?? true;
206
+ const byId = new Map(entries.map((entry) => [entry.id, entry]));
207
+ const eligible = (entry) => {
208
+ if (!entry)
209
+ return false;
210
+ if (kinds && !kinds.has(entry.kind))
211
+ return false;
212
+ const status = entry.status ?? "stable";
213
+ if (status === "deprecated")
214
+ return false;
215
+ if (!includePreview && status === "preview")
216
+ return false;
217
+ return true;
218
+ };
219
+ const factorFor = (id) => statusScoreFactor(byId.get(id)?.status);
220
+ const byScoreThenId = (a, b) => b.score - a.score || a.id.localeCompare(b.id);
221
+ const index = searchIndexFor(entries);
222
+ const lexical = rankEntries(index, query, { limit: index.docs.length })
223
+ .filter((hit) => hit.score > 0 && eligible(byId.get(hit.id)))
224
+ .map((hit) => ({ id: hit.id, score: hit.score * factorFor(hit.id) }))
225
+ .sort(byScoreThenId);
226
+ // Semantic side — every failure mode collapses to "not available".
227
+ let semanticRanked = [];
228
+ let semantic = false;
229
+ if (env.SUMMER_EMBED_URL?.trim() !== "off") {
230
+ const embeddings = deps.embeddings !== undefined ? deps.embeddings : loadEmbeddingsFile();
231
+ if (embeddings && Object.keys(embeddings.entries).length > 0) {
232
+ const embed = deps.embedQuery ?? ((q) => embedQueryWithConfiguredProvider(q, env));
233
+ let vector = null;
234
+ try {
235
+ vector = await embed(query);
236
+ }
237
+ catch {
238
+ vector = null;
239
+ }
240
+ if (vector && vector.length === embeddings.dims) {
241
+ semanticRanked = scoreSemantic(embeddings, vector, (id) => eligible(byId.get(id)), factorFor);
242
+ semantic = true;
243
+ }
244
+ }
245
+ }
246
+ if (!semantic) {
247
+ return { hits: lexical.slice(0, limit).map((hit) => toHit(byId.get(hit.id), hit.score, ["lexical"])), semantic };
248
+ }
249
+ const lexicalIds = lexical.slice(0, FUSION_CANDIDATES).map((hit) => hit.id);
250
+ const semanticIds = semanticRanked.slice(0, FUSION_CANDIDATES).map((hit) => hit.id);
251
+ const lexicalSet = new Set(lexicalIds);
252
+ const semanticSet = new Set(semanticIds);
253
+ const fused = reciprocalRankFusion([lexicalIds, semanticIds]);
254
+ const hits = fused.slice(0, limit).map((f) => {
255
+ const matchedBy = [];
256
+ if (lexicalSet.has(f.id))
257
+ matchedBy.push("lexical");
258
+ if (semanticSet.has(f.id))
259
+ matchedBy.push("semantic");
260
+ return toHit(byId.get(f.id), f.score, matchedBy);
261
+ });
262
+ return { hits, semantic };
263
+ }
264
+ /** Cosine over every stored vector for eligible ids, times the status
265
+ * factor; positive scores only, sorted desc then by id. */
266
+ function scoreSemantic(embeddings, queryVector, eligible, factorFor) {
267
+ const scored = [];
268
+ for (const [id, entry] of Object.entries(embeddings.entries)) {
269
+ if (!eligible(id))
270
+ continue;
271
+ let vector;
272
+ try {
273
+ vector = decodeVector(entry.vector);
274
+ }
275
+ catch {
276
+ continue;
277
+ }
278
+ if (vector.length !== queryVector.length)
279
+ continue;
280
+ const score = cosineSimilarity(queryVector, vector);
281
+ if (score > 0)
282
+ scored.push({ id, score: score * factorFor(id) });
283
+ }
284
+ return scored.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
285
+ }
286
+ /** The ranked hits for `query` (see searchLibraryDetailed). */
287
+ export async function searchLibrary(query, options = {}, deps = {}) {
288
+ return (await searchLibraryDetailed(query, options, deps)).hits;
289
+ }
290
+ export function searchHint(hits) {
291
+ if (hits.length === 0) {
292
+ return "No entry matched. Rephrase in task words (what you are building or fixing), or drop the kinds filter; if the library truly has nothing, say so instead of guessing.";
293
+ }
294
+ const top = hits[0].id;
295
+ return `Read one with summer_read_library {"id": "${top}"} before acting on it (shell: summer tool read-library --args '{"id":"${top}"}'). Scores compare only within this response.`;
296
+ }
297
+ /** What summer_search_library and `summer tool search-library` return. */
298
+ export async function runSearchLibrary(args, deps = {}) {
299
+ const { hits, semantic } = await searchLibraryDetailed(args.query, { kinds: args.kinds, limit: args.limit, includePreview: args.include_preview }, deps);
300
+ return { query: args.query, semantic, count: hits.length, results: hits, hint: searchHint(hits) };
301
+ }
@@ -71,10 +71,12 @@ export function filterAndDedupe(entries, opts = {}) {
71
71
  }
72
72
  }
73
73
  }
74
- // Pass 3: truncate
74
+ // Pass 3: truncate — keep the NEWEST entries. Engine logs are chronological
75
+ // and the failure being debugged is at the end; keeping the head returned
76
+ // startup noise and hid the current error.
75
77
  let final = deduped;
76
78
  if (deduped.length > maxEntries) {
77
- final = deduped.slice(0, maxEntries);
79
+ final = deduped.slice(-maxEntries);
78
80
  summary.truncated = deduped.length - maxEntries;
79
81
  }
80
82
  summary.totalOut = final.length;
@@ -2,27 +2,12 @@ import { appendFileSync, mkdirSync, readFileSync, statSync, writeFileSync } from
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import { getSummerDir } from "./auth.js";
5
+ import { redactSensitive } from "./redact.js";
5
6
  const MAX_LOG_BYTES = 512 * 1024;
6
7
  const RETAIN_LOG_BYTES = 256 * 1024;
7
8
  export function getMcpLogPath() {
8
9
  return join(getSummerDir(), "mcp.log");
9
10
  }
10
- function redact(value) {
11
- if (Array.isArray(value))
12
- return value.map((item) => redact(item));
13
- if (!value || typeof value !== "object")
14
- return value;
15
- const out = {};
16
- for (const [key, nested] of Object.entries(value)) {
17
- if (/token|secret|password|authorization|cookie|api[-_]?key/i.test(key)) {
18
- out[key] = "[REDACTED]";
19
- }
20
- else {
21
- out[key] = redact(nested);
22
- }
23
- }
24
- return out;
25
- }
26
11
  function rotateIfNeeded(path) {
27
12
  try {
28
13
  if (statSync(path).size < MAX_LOG_BYTES)
@@ -44,7 +29,7 @@ export function appendMcpLogEvent(event, details = {}) {
44
29
  mkdirSync(dir, { recursive: true, mode: 0o700 });
45
30
  const path = getMcpLogPath();
46
31
  rotateIfNeeded(path);
47
- const safeDetails = redact(details);
32
+ const safeDetails = redactSensitive(details, { strings: true });
48
33
  const payload = {
49
34
  ts: new Date().toISOString(),
50
35
  event,
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Absolute path of the installed package root.
3
+ *
4
+ * Resolved from this module's own location so it is correct both from the
5
+ * compiled tree (`dist/core/package-root.js`) and from source under vitest
6
+ * (`src/core/package-root.ts`), and independent of `process.cwd()` — the CLI
7
+ * runs from arbitrary project directories and from a global npm install.
8
+ */
9
+ export declare const PACKAGE_ROOT: string;
@@ -0,0 +1,11 @@
1
+ import { dirname, join } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ /**
4
+ * Absolute path of the installed package root.
5
+ *
6
+ * Resolved from this module's own location so it is correct both from the
7
+ * compiled tree (`dist/core/package-root.js`) and from source under vitest
8
+ * (`src/core/package-root.ts`), and independent of `process.cwd()` — the CLI
9
+ * runs from arbitrary project directories and from a global npm install.
10
+ */
11
+ export const PACKAGE_ROOT = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
@@ -0,0 +1,20 @@
1
+ /**
2
+ * One redaction implementation for every place local diagnostics leave the
3
+ * machine (the MCP lifecycle log, the debug report). Previously duplicated in
4
+ * mcp-log.ts and debug-report.ts, and neither touched free-text `error` /
5
+ * `message` strings that routinely embed a bearer token or an sc_ key.
6
+ */
7
+ export interface RedactOptions {
8
+ /** Additional key names to blank out entirely (e.g. /hostname/i). */
9
+ extraKeys?: RegExp;
10
+ /** Also scrub credential-shaped substrings out of string VALUES. */
11
+ strings?: boolean;
12
+ }
13
+ /** Scrub credential-shaped substrings out of free text. */
14
+ export declare function redactText(text: string): string;
15
+ /** Deep-copy `value`, blanking any property whose KEY looks sensitive and,
16
+ * with `strings: true`, scrubbing credential-shaped substrings from values. */
17
+ export declare function redactSensitive(value: unknown, options?: RedactOptions): unknown;
18
+ /** Redact one JSONL log line: structured keys AND free-text values. Non-JSON
19
+ * lines are scrubbed as text. */
20
+ export declare function redactLogLine(line: string): string;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * One redaction implementation for every place local diagnostics leave the
3
+ * machine (the MCP lifecycle log, the debug report). Previously duplicated in
4
+ * mcp-log.ts and debug-report.ts, and neither touched free-text `error` /
5
+ * `message` strings that routinely embed a bearer token or an sc_ key.
6
+ */
7
+ const SENSITIVE_KEY = /token|secret|password|passwd|authorization|cookie|api[-_]?key/i;
8
+ const TEXT_PATTERNS = [
9
+ // "Authorization: Bearer eyJ..." / "Basic dXNlcjpwdw==" inside an error string.
10
+ [/\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]{8,}/gi, "$1 [REDACTED]"],
11
+ // key=value / key: value / "key":"value" where the key is a secret name. The
12
+ // scheme word after "Authorization:" is left alone (its credential was
13
+ // already scrubbed above), so the output still says what kind of auth failed.
14
+ [
15
+ /\b(token|secret|password|passwd|authorization|cookie|api[-_]?key)(["']?\s*[:=]\s*["']?)(?!(?:bearer|basic)\b)([^"'\s,;&}]+)/gi,
16
+ "$1$2[REDACTED]",
17
+ ],
18
+ // Known credential shapes: Summer creator tokens, sk- style API keys, JWTs.
19
+ [/\bsc_[A-Za-z0-9]{20,}\b/g, "[REDACTED]"],
20
+ [/\bsk-[A-Za-z0-9_-]{16,}/g, "[REDACTED]"],
21
+ [/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}/g, "[REDACTED]"],
22
+ ];
23
+ /** Scrub credential-shaped substrings out of free text. */
24
+ export function redactText(text) {
25
+ let out = text;
26
+ for (const [pattern, replacement] of TEXT_PATTERNS) {
27
+ out = out.replace(pattern, replacement);
28
+ }
29
+ return out;
30
+ }
31
+ /** Deep-copy `value`, blanking any property whose KEY looks sensitive and,
32
+ * with `strings: true`, scrubbing credential-shaped substrings from values. */
33
+ export function redactSensitive(value, options = {}) {
34
+ if (Array.isArray(value))
35
+ return value.map((item) => redactSensitive(item, options));
36
+ if (typeof value === "string")
37
+ return options.strings ? redactText(value) : value;
38
+ if (!value || typeof value !== "object")
39
+ return value;
40
+ const out = {};
41
+ for (const [key, nested] of Object.entries(value)) {
42
+ if (SENSITIVE_KEY.test(key) || options.extraKeys?.test(key)) {
43
+ out[key] = "[REDACTED]";
44
+ }
45
+ else {
46
+ out[key] = redactSensitive(nested, options);
47
+ }
48
+ }
49
+ return out;
50
+ }
51
+ /** Redact one JSONL log line: structured keys AND free-text values. Non-JSON
52
+ * lines are scrubbed as text. */
53
+ export function redactLogLine(line) {
54
+ try {
55
+ const parsed = JSON.parse(line);
56
+ if (parsed && typeof parsed === "object") {
57
+ return JSON.stringify(redactSensitive(parsed, { strings: true }));
58
+ }
59
+ }
60
+ catch {
61
+ // not JSON — fall through
62
+ }
63
+ return redactText(line);
64
+ }