summer-engine 2.8.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -7
- package/.claude-plugin/plugin.json +99 -83
- package/.codex-plugin/plugin.json +112 -82
- package/.cursor-plugin/plugin.json +119 -83
- package/.factory-plugin/plugin.json +100 -3
- package/.mcp.json +6 -1
- package/.opencode/INSTALL.md +7 -4
- package/.opencode/plugins/summer.js +31 -18
- package/AGENTS.md +107 -34
- package/CHANGELOG.md +149 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +161 -393
- package/assets/api-docs.json.gz +0 -0
- package/assets/autopilot/README.md +20 -6
- package/assets/autopilot/autopilot.gd +80 -26
- package/assets/autopilot/run.sh +132 -7
- package/assets/navigation/web-routes.json +719 -0
- package/commands/gameskill.md +10 -108
- package/commands/summer.md +72 -4
- package/dist/bin/summer.js +6 -87
- package/dist/cli/banner.d.ts +1 -0
- package/dist/cli/banner.js +33 -0
- package/dist/{commands → cli/commands}/config.js +1 -1
- package/dist/cli/commands/create.d.ts +30 -0
- package/dist/cli/commands/create.js +212 -0
- package/dist/{commands → cli/commands}/debug.js +2 -2
- package/dist/cli/commands/doctor.d.ts +2 -0
- package/dist/cli/commands/doctor.js +18 -0
- package/dist/cli/commands/events.d.ts +57 -0
- package/dist/cli/commands/events.js +158 -0
- package/dist/cli/commands/install.d.ts +50 -0
- package/dist/cli/commands/install.js +447 -0
- package/dist/cli/commands/list.js +72 -0
- package/dist/{commands → cli/commands}/login.js +33 -17
- package/dist/{commands → cli/commands}/logout.d.ts +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/{commands → cli/commands}/memory.d.ts +1 -8
- package/dist/{commands → cli/commands}/memory.js +20 -11
- package/dist/cli/commands/open.d.ts +45 -0
- package/dist/cli/commands/open.js +216 -0
- package/dist/{commands → cli/commands}/plan.js +2 -2
- package/dist/{commands → cli/commands}/publish.js +1 -1
- package/dist/{commands → cli/commands}/releases.js +1 -1
- package/dist/cli/commands/run.d.ts +19 -0
- package/dist/cli/commands/run.js +255 -0
- package/dist/cli/commands/setup.js +158 -0
- package/dist/{commands → cli/commands}/skills.js +121 -251
- package/dist/{commands → cli/commands}/status.d.ts +1 -0
- package/dist/cli/commands/status.js +62 -0
- package/dist/cli/commands/tool.d.ts +11 -0
- package/dist/cli/commands/tool.js +121 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +89 -0
- package/dist/cli/root-action.d.ts +7 -0
- package/dist/cli/root-action.js +15 -0
- package/dist/{lib → core}/api-client.d.ts +106 -15
- package/dist/{lib → core}/api-client.js +267 -75
- package/dist/{lib → core}/async-op-lifecycle.d.ts +3 -4
- package/dist/{lib → core}/async-op-lifecycle.js +3 -4
- package/dist/{lib → core}/auth.d.ts +14 -6
- package/dist/{lib → core}/auth.js +56 -40
- package/dist/core/capabilities/agent-playbook.d.ts +20 -0
- package/dist/core/capabilities/agent-playbook.js +218 -0
- package/dist/core/capabilities/api-docs.d.ts +36 -0
- package/dist/core/capabilities/api-docs.js +118 -0
- package/dist/core/capabilities/asset-import.d.ts +49 -0
- package/dist/core/capabilities/asset-import.js +134 -0
- package/dist/core/capabilities/camera-view.d.ts +98 -0
- package/dist/core/capabilities/camera-view.js +222 -0
- package/dist/core/capabilities/capture.d.ts +63 -0
- package/dist/core/capabilities/capture.js +67 -0
- package/dist/core/capabilities/console-read.d.ts +17 -0
- package/dist/core/capabilities/console-read.js +21 -0
- package/dist/{lib → core/capabilities}/creator.d.ts +1 -29
- package/dist/{lib → core/capabilities}/creator.js +14 -33
- package/dist/{lib → core/capabilities}/debug-report.d.ts +1 -1
- package/dist/{lib → core/capabilities}/debug-report.js +12 -31
- package/dist/{commands → core/capabilities}/doctor.d.ts +7 -2
- package/dist/{commands → core/capabilities}/doctor.js +47 -73
- package/dist/core/capabilities/engine-fallbacks.d.ts +26 -0
- package/dist/core/capabilities/engine-fallbacks.js +36 -0
- package/dist/core/capabilities/engine-ops.d.ts +33 -0
- package/dist/core/capabilities/engine-ops.js +145 -0
- package/dist/core/capabilities/engine-receipt.d.ts +53 -0
- package/dist/core/capabilities/engine-receipt.js +134 -0
- package/dist/core/capabilities/events.d.ts +200 -0
- package/dist/core/capabilities/events.js +383 -0
- package/dist/core/capabilities/fabricate-mesh.d.ts +111 -0
- package/dist/core/capabilities/fabricate-mesh.js +165 -0
- package/dist/core/capabilities/frame-quality.d.ts +71 -0
- package/dist/core/capabilities/frame-quality.js +449 -0
- package/dist/core/capabilities/game-task-plan.d.ts +66 -0
- package/dist/{lib → core/capabilities}/game-task-plan.js +59 -8
- package/dist/core/capabilities/hdri-import.d.ts +90 -0
- package/dist/core/capabilities/hdri-import.js +250 -0
- package/dist/core/capabilities/image-generation.d.ts +24 -0
- package/dist/core/capabilities/image-generation.js +22 -0
- package/dist/core/capabilities/navigation/open.d.ts +156 -0
- package/dist/core/capabilities/navigation/open.js +567 -0
- package/dist/core/capabilities/navigation/render-product-map.d.ts +1 -0
- package/dist/core/capabilities/navigation/render-product-map.js +84 -0
- package/dist/core/capabilities/navigation/targets.d.ts +87 -0
- package/dist/core/capabilities/navigation/targets.js +250 -0
- package/dist/core/capabilities/play-determinism.d.ts +35 -0
- package/dist/core/capabilities/play-determinism.js +86 -0
- package/dist/core/capabilities/project-context.d.ts +114 -0
- package/dist/core/capabilities/project-context.js +249 -0
- package/dist/core/capabilities/runtime-control.d.ts +540 -0
- package/dist/core/capabilities/runtime-control.js +1011 -0
- package/dist/core/capabilities/scene-kind.d.ts +19 -0
- package/dist/core/capabilities/scene-kind.js +137 -0
- package/dist/core/capabilities/scene-script.d.ts +38 -0
- package/dist/core/capabilities/scene-script.js +45 -0
- package/dist/core/capabilities/tool-dispatch.d.ts +42 -0
- package/dist/core/capabilities/tool-dispatch.js +1490 -0
- package/dist/core/capabilities/ui-control.d.ts +179 -0
- package/dist/core/capabilities/ui-control.js +423 -0
- package/dist/core/capabilities/variant-types.d.ts +22 -0
- package/dist/core/capabilities/variant-types.js +101 -0
- package/dist/core/capability-skew.d.ts +205 -0
- package/dist/core/capability-skew.js +386 -0
- package/dist/{lib → core}/config.d.ts +11 -1
- package/dist/{lib → core}/config.js +13 -2
- package/dist/core/embeddings.d.ts +78 -0
- package/dist/core/embeddings.js +166 -0
- package/dist/core/engine-install.d.ts +105 -0
- package/dist/core/engine-install.js +190 -0
- package/dist/core/engine.d.ts +94 -0
- package/dist/{lib → core}/engine.js +74 -28
- package/dist/core/feedback/client.d.ts +88 -0
- package/dist/core/feedback/client.js +182 -0
- package/dist/{lib → core}/format.d.ts +0 -1
- package/dist/{lib → core}/format.js +1 -1
- package/dist/core/headless/connection.d.ts +86 -0
- package/dist/core/headless/connection.js +97 -0
- package/dist/core/headless/editor-connection.d.ts +26 -0
- package/dist/core/headless/editor-connection.js +81 -0
- package/dist/core/headless/mcp-routing.d.ts +38 -0
- package/dist/core/headless/mcp-routing.js +83 -0
- package/dist/core/headless/registry.d.ts +91 -0
- package/dist/core/headless/registry.js +226 -0
- package/dist/core/headless/resolve.d.ts +46 -0
- package/dist/core/headless/resolve.js +75 -0
- package/dist/core/headless/spawn.d.ts +46 -0
- package/dist/core/headless/spawn.js +205 -0
- package/dist/core/headless/worker-connection.d.ts +96 -0
- package/dist/core/headless/worker-connection.js +353 -0
- package/dist/core/headless/worker-engine-client.d.ts +58 -0
- package/dist/core/headless/worker-engine-client.js +246 -0
- package/dist/core/launch-posture.d.ts +170 -0
- package/dist/core/launch-posture.js +317 -0
- package/dist/core/library-read.d.ts +73 -0
- package/dist/core/library-read.js +279 -0
- package/dist/core/library-search.d.ts +143 -0
- package/dist/core/library-search.js +301 -0
- package/dist/{lib → core}/log-filters.js +4 -2
- package/dist/{lib → core}/mcp-log.js +2 -17
- package/dist/core/package-root.d.ts +9 -0
- package/dist/core/package-root.js +11 -0
- package/dist/core/redact.d.ts +20 -0
- package/dist/core/redact.js +64 -0
- package/dist/core/registry-search.d.ts +167 -0
- package/dist/core/registry-search.js +358 -0
- package/dist/core/skills-registry.d.ts +55 -0
- package/dist/core/skills-registry.js +106 -0
- package/dist/{lib → core}/store.js +11 -7
- package/dist/{lib → core}/summer-compatibility.js +3 -3
- package/dist/{lib → core}/telemetry.js +5 -2
- package/dist/core/templates.d.ts +98 -0
- package/dist/core/templates.js +241 -0
- package/dist/core/tool-errors.d.ts +30 -0
- package/dist/core/tool-errors.js +40 -0
- package/dist/core/trajectory.d.ts +80 -0
- package/dist/core/trajectory.js +307 -0
- package/dist/core/util/http.d.ts +13 -0
- package/dist/core/util/http.js +28 -0
- package/dist/core/util/json.d.ts +12 -0
- package/dist/core/util/json.js +21 -0
- package/dist/core/util/process.d.ts +3 -0
- package/dist/core/util/process.js +13 -0
- package/dist/core/util/sleep.d.ts +1 -0
- package/dist/core/util/sleep.js +3 -0
- package/dist/core/version.d.ts +3 -0
- package/dist/core/version.js +5 -0
- package/dist/installer/agent-config.d.ts +63 -0
- package/dist/installer/agent-config.js +540 -0
- package/dist/installer/agent-table.d.ts +103 -0
- package/dist/installer/agent-table.js +584 -0
- package/dist/installer/legacy-skills.d.ts +26 -0
- package/dist/installer/legacy-skills.js +53 -0
- package/dist/installer/setup.d.ts +76 -0
- package/dist/installer/setup.js +148 -0
- package/dist/installer/skill-locations.d.ts +36 -0
- package/dist/installer/skill-locations.js +91 -0
- package/dist/installer/version-check.d.ts +178 -0
- package/dist/installer/version-check.js +479 -0
- package/dist/{lib/mcp-boot-notice.d.ts → mcp/boot-notice.d.ts} +1 -1
- package/dist/{commands/mcp.js → mcp/command.js} +18 -6
- package/dist/mcp/server.d.ts +23 -3
- package/dist/mcp/server.js +122 -28
- package/dist/mcp/tools/asset-tools.js +62 -142
- package/dist/mcp/tools/creator-tools.js +5 -23
- package/dist/mcp/tools/debug-tools.js +61 -18
- package/dist/mcp/tools/event-tools.d.ts +14 -0
- package/dist/mcp/tools/event-tools.js +41 -0
- package/dist/mcp/tools/fabricate-tools.d.ts +2 -0
- package/dist/mcp/tools/fabricate-tools.js +28 -0
- package/dist/mcp/tools/feedback-tools.d.ts +77 -0
- package/dist/mcp/tools/feedback-tools.js +88 -0
- package/dist/mcp/tools/file-tools.js +6 -53
- package/dist/mcp/tools/generate-tools.js +37 -63
- package/dist/mcp/tools/library-tools.d.ts +11 -0
- package/dist/mcp/tools/library-tools.js +42 -0
- package/dist/mcp/tools/navigation-tools.d.ts +7 -0
- package/dist/mcp/tools/navigation-tools.js +37 -0
- package/dist/mcp/tools/perception-tools.d.ts +20 -0
- package/dist/mcp/tools/perception-tools.js +146 -0
- package/dist/mcp/tools/project-tools.d.ts +14 -0
- package/dist/mcp/tools/project-tools.js +72 -281
- package/dist/mcp/tools/runtime-tools.d.ts +2 -0
- package/dist/mcp/tools/runtime-tools.js +92 -0
- package/dist/mcp/tools/scene-tools.d.ts +3 -0
- package/dist/mcp/tools/scene-tools.js +68 -119
- package/dist/mcp/tools/script-tools.d.ts +3 -0
- package/dist/mcp/tools/script-tools.js +118 -0
- package/dist/mcp/tools/spatial-tools.d.ts +2 -0
- package/dist/mcp/tools/spatial-tools.js +485 -0
- package/dist/mcp/tools/text-json.d.ts +8 -0
- package/dist/mcp/tools/text-json.js +12 -0
- package/dist/mcp/tools/{cloud-tools.d.ts → ui-tools.d.ts} +1 -1
- package/dist/mcp/tools/ui-tools.js +82 -0
- package/dist/mcp/tools/visual-tools.d.ts +2 -7
- package/dist/mcp/tools/visual-tools.js +383 -101
- package/dist/mcp/tools/with-engine.d.ts +9 -15
- package/dist/mcp/tools/with-engine.js +60 -96
- package/dist/project-memory/project-manifest.d.ts +36 -0
- package/dist/project-memory/project-manifest.js +50 -0
- package/dist/project-memory/project-memory.d.ts +57 -0
- package/dist/{lib → project-memory}/project-memory.js +46 -0
- package/gemini-extension.json +103 -2
- package/hooks/hooks-cursor.json +2 -2
- package/hooks/hooks.json +2 -1
- package/hooks/pre-commit-doctor.sh +45 -39
- package/hooks/run-hook.cmd +30 -23
- package/hooks/run-hook.sh +20 -0
- package/hooks/session-start.sh +18 -7
- package/integrations/README.md +99 -0
- package/integrations/amp/README.md +12 -0
- package/integrations/amp/manifest-target.json +3 -0
- package/integrations/antigravity/README.md +12 -0
- package/integrations/antigravity/manifest-target.json +3 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/claude-desktop/README.md +12 -0
- package/integrations/claude-desktop/manifest-target.json +3 -0
- package/integrations/cline/README.md +12 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/cline-cli/README.md +12 -0
- package/integrations/cline-cli/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -0
- package/integrations/copilot-jetbrains/README.md +12 -0
- package/integrations/copilot-jetbrains/manifest-target.json +3 -0
- package/integrations/crush/README.md +12 -0
- package/integrations/crush/manifest-target.json +3 -0
- package/integrations/cursor/README.md +16 -0
- package/integrations/cursor/manifest-target.json +5 -0
- package/integrations/factory/README.md +26 -0
- package/integrations/factory/manifest-target.json +5 -0
- package/integrations/gemini/README.md +26 -0
- package/integrations/gemini/manifest-target.json +5 -0
- package/integrations/github-copilot/README.md +12 -0
- package/integrations/github-copilot/manifest-target.json +3 -0
- package/integrations/goose/README.md +12 -0
- package/integrations/goose/manifest-target.json +3 -0
- package/integrations/grok-build/README.md +12 -0
- package/integrations/grok-build/manifest-target.json +3 -0
- package/integrations/hermes/README.md +12 -0
- package/integrations/hermes/manifest-target.json +3 -0
- package/integrations/junie/README.md +12 -0
- package/integrations/junie/manifest-target.json +3 -0
- package/integrations/kilo-code/README.md +12 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/kimi-code/README.md +12 -0
- package/integrations/kimi-code/manifest-target.json +3 -0
- package/integrations/kiro/README.md +12 -0
- package/integrations/kiro/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/mistral-vibe/README.md +12 -0
- package/integrations/mistral-vibe/manifest-target.json +3 -0
- package/integrations/opencode/README.md +12 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/qoder/README.md +12 -0
- package/integrations/qoder/manifest-target.json +3 -0
- package/integrations/qwen-code/README.md +12 -0
- package/integrations/qwen-code/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +14 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/rovo-dev/README.md +12 -0
- package/integrations/rovo-dev/manifest-target.json +3 -0
- package/integrations/trae/README.md +12 -0
- package/integrations/trae/manifest-target.json +3 -0
- package/integrations/visual-studio/README.md +12 -0
- package/integrations/visual-studio/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/warp/README.md +12 -0
- package/integrations/warp/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +12 -0
- package/integrations/windsurf/manifest-target.json +3 -0
- package/integrations/zed/README.md +12 -0
- package/integrations/zed/manifest-target.json +3 -0
- package/library/references/collaborative-protocol/resource.yaml +24 -0
- package/library/references/gd-style/resource.yaml +24 -0
- package/{references → library/references/godot-version}/godot-version.md +6 -6
- package/library/references/godot-version/resource.yaml +22 -0
- package/library/references/headless-routing/headless-routing.md +46 -0
- package/library/references/headless-routing/resource.yaml +24 -0
- package/library/references/mcp-fresh-chat-playbook/mcp-fresh-chat-playbook.md +49 -0
- package/library/references/mcp-fresh-chat-playbook/resource.yaml +23 -0
- package/library/references/mcp-tools-reference/mcp-tools-reference.md +271 -0
- package/library/references/mcp-tools-reference/resource.yaml +17 -0
- package/library/references/product-map/product-map.md +103 -0
- package/library/references/product-map/resource.yaml +33 -0
- package/{references → library/references/public-surface-language}/public-surface-language.md +5 -7
- package/library/references/public-surface-language/resource.yaml +17 -0
- package/library/references/summer-folder/resource.yaml +20 -0
- package/{references → library/references/summer-folder}/summer-folder.md +22 -21
- package/{skills/rendering-and-lighting → library/skills}/3d-lighting/SKILL.md +15 -11
- package/library/skills/3d-lighting/resource.yaml +27 -0
- package/library/skills/README.md +242 -0
- package/{skills/audio → library/skills}/adaptive-music/SKILL.md +1 -1
- package/library/skills/adaptive-music/resource.yaml +28 -0
- package/library/skills/agent-playtesting/SKILL.md +148 -0
- package/library/skills/agent-playtesting/resource.yaml +52 -0
- package/library/skills/ambient-bed/resource.yaml +24 -0
- package/{skills/video → library/skills}/animated-loop/SKILL.md +1 -1
- package/library/skills/animated-loop/resource.yaml +27 -0
- package/{skills/animation → library/skills}/animation-tree/SKILL.md +29 -14
- package/library/skills/animation-tree/resource.yaml +33 -0
- package/{skills/rendering-and-lighting → library/skills}/art-direction/SKILL.md +3 -3
- package/library/skills/art-direction/resource.yaml +29 -0
- package/{skills/asset-pipeline → library/skills}/asset-strategy/SKILL.md +44 -44
- package/library/skills/asset-strategy/resource.yaml +63 -0
- package/{skills/audio → library/skills}/audio-direction/SKILL.md +7 -7
- package/library/skills/audio-direction/resource.yaml +32 -0
- package/library/skills/auto-fire-targeting/resource.yaml +22 -0
- package/{skills/scene-and-project → library/skills}/brainstorm-game/SKILL.md +8 -8
- package/library/skills/brainstorm-game/resource.yaml +30 -0
- package/{skills/workflow → library/skills}/brainstorming/SKILL.md +2 -22
- package/library/skills/brainstorming/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/brainstorming/spec-document-reviewer-prompt.md +1 -1
- package/{skills/scene-and-project → library/skills}/browse-templates/SKILL.md +18 -18
- package/library/skills/browse-templates/resource.yaml +23 -0
- package/library/skills/celeste-momentum-platforming/SKILL.md +366 -0
- package/library/skills/celeste-momentum-platforming/resource.yaml +33 -0
- package/library/skills/character-animation-wiring/SKILL.md +249 -0
- package/library/skills/character-animation-wiring/resource.yaml +39 -0
- package/{skills/3d-assets → library/skills}/character-model/SKILL.md +25 -25
- package/library/skills/character-model/resource.yaml +36 -0
- package/{skills/2d-assets → library/skills}/character-portrait/SKILL.md +14 -14
- package/library/skills/character-portrait/resource.yaml +30 -0
- package/{skills/video → library/skills}/cinematic-cutscene/SKILL.md +2 -2
- package/library/skills/cinematic-cutscene/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/concept-art/SKILL.md +15 -15
- package/library/skills/concept-art/resource.yaml +34 -0
- package/{skills/2d-assets → library/skills}/create-asset-sheet/SKILL.md +8 -8
- package/library/skills/create-asset-sheet/resource.yaml +33 -0
- package/{skills/debugging → library/skills}/debug/SKILL.md +3 -3
- package/library/skills/debug/resource.yaml +31 -0
- package/{skills/workflow → library/skills}/debugging-game-feel/SKILL.md +11 -11
- package/library/skills/debugging-game-feel/resource.yaml +25 -0
- package/{skills/level-design → library/skills}/design-level/SKILL.md +6 -6
- package/library/skills/design-level/resource.yaml +31 -0
- package/{skills/gameplay-mechanics → library/skills}/design-mechanic/SKILL.md +3 -3
- package/library/skills/design-mechanic/resource.yaml +31 -0
- package/{skills/ai-and-npcs → library/skills}/design-npc/SKILL.md +7 -3
- package/library/skills/design-npc/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/diagnosing-perf-regressions/SKILL.md +10 -10
- package/library/skills/diagnosing-perf-regressions/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/dispatching-parallel-agents/SKILL.md +8 -8
- package/library/skills/dispatching-parallel-agents/resource.yaml +23 -0
- package/library/skills/driving-the-editor-ui/SKILL.md +85 -0
- package/library/skills/driving-the-editor-ui/resource.yaml +46 -0
- package/{skills/3d-assets → library/skills}/environment-kit/SKILL.md +11 -11
- package/library/skills/environment-kit/resource.yaml +29 -0
- package/{skills/deployment → library/skills}/export-and-ship/SKILL.md +5 -5
- package/library/skills/export-and-ship/resource.yaml +32 -0
- package/library/skills/fabricating-assets/SKILL.md +195 -0
- package/library/skills/fabricating-assets/resource.yaml +52 -0
- package/{skills/animation → library/skills}/facial-and-lipsync/SKILL.md +23 -11
- package/library/skills/facial-and-lipsync/resource.yaml +36 -0
- package/{skills/character-controllers → library/skills}/fps-controller/SKILL.md +8 -4
- package/library/skills/fps-controller/resource.yaml +29 -0
- package/{skills/visual-effects → library/skills}/game-feel/SKILL.md +7 -7
- package/library/skills/game-feel/resource.yaml +27 -0
- package/library/skills/gameskill/SKILL.md +64 -0
- package/library/skills/gameskill/resource.yaml +22 -0
- package/library/skills/gdscript-patterns/resource.yaml +23 -0
- package/{skills/animation → library/skills}/generate-motion/SKILL.md +16 -16
- package/library/skills/generate-motion/resource.yaml +34 -0
- package/library/skills/godogen-visual-proof-game-generation/SKILL.md +223 -0
- package/library/skills/godogen-visual-proof-game-generation/resource.yaml +33 -0
- package/{skills/workflow → library/skills}/headless-scripting/SKILL.md +14 -7
- package/library/skills/headless-scripting/resource.yaml +26 -0
- package/library/skills/host-authoritative-state/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/instantiate-asset-pack/SKILL.md +10 -12
- package/library/skills/instantiate-asset-pack/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/investigating-bugs/SKILL.md +4 -4
- package/{skills/workflow → library/skills}/investigating-bugs/condition-based-waiting.md +8 -8
- package/library/skills/investigating-bugs/resource.yaml +24 -0
- package/{skills/workflow → library/skills}/investigating-bugs/root-cause-tracing.md +1 -7
- package/library/skills/lumera-single-image-scene-reconstruction/SKILL.md +164 -0
- package/library/skills/lumera-single-image-scene-reconstruction/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/make-game/SKILL.md +22 -22
- package/library/skills/make-game/resource.yaml +35 -0
- package/library/skills/music-track/resource.yaml +28 -0
- package/library/skills/navigate-summer/SKILL.md +61 -0
- package/library/skills/navigate-summer/resource.yaml +35 -0
- package/{skills/scene-and-project → library/skills}/new-project/SKILL.md +10 -10
- package/library/skills/new-project/resource.yaml +28 -0
- package/{skills/3d-assets → library/skills}/organic-model/SKILL.md +16 -16
- package/library/skills/organic-model/resource.yaml +32 -0
- package/{skills/multiplayer-and-networking → library/skills}/peer-to-peer-multiplayer/SKILL.md +2 -2
- package/library/skills/peer-to-peer-multiplayer/resource.yaml +28 -0
- package/{skills/2d-assets → library/skills}/pixel-art/SKILL.md +13 -13
- package/library/skills/pixel-art/resource.yaml +31 -0
- package/library/skills/play/resource.yaml +26 -0
- package/{skills/workflow → library/skills}/playtesting-a-feature/SKILL.md +41 -22
- package/library/skills/playtesting-a-feature/resource.yaml +31 -0
- package/{skills/animation → library/skills}/procedural-animation/SKILL.md +25 -10
- package/library/skills/procedural-animation/resource.yaml +33 -0
- package/{skills/3d-assets → library/skills}/prop-model/SKILL.md +13 -13
- package/library/skills/prop-model/resource.yaml +33 -0
- package/library/skills/psx-retro-rendering/SKILL.md +416 -0
- package/library/skills/psx-retro-rendering/resource.yaml +36 -0
- package/library/skills/realtime-wet-surfaces/SKILL.md +189 -0
- package/library/skills/realtime-wet-surfaces/resource.yaml +31 -0
- package/{skills/deployment → library/skills}/remote-deploy/SKILL.md +3 -3
- package/library/skills/remote-deploy/resource.yaml +23 -0
- package/{skills/animation → library/skills}/retarget/SKILL.md +15 -14
- package/library/skills/retarget/resource.yaml +33 -0
- package/library/skills/running-in-the-cloud/SKILL.md +103 -0
- package/library/skills/running-in-the-cloud/resource.yaml +33 -0
- package/{skills/scene-and-project → library/skills}/scene-composition/SKILL.md +8 -0
- package/library/skills/scene-composition/resource.yaml +27 -0
- package/library/skills/scene-hierarchy-design/SKILL.md +102 -0
- package/library/skills/scene-hierarchy-design/resource.yaml +31 -0
- package/library/skills/scene-scripting/SKILL.md +764 -0
- package/library/skills/scene-scripting/resource.yaml +58 -0
- package/{skills/level-design → library/skills}/scene-to-level/SKILL.md +16 -17
- package/library/skills/scene-to-level/resource.yaml +33 -0
- package/library/skills/setup-multiplayer/resource.yaml +28 -0
- package/library/skills/skill-create/SKILL.md +138 -0
- package/library/skills/skill-create/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-improve/SKILL.md +2 -2
- package/library/skills/skill-improve/resource.yaml +25 -0
- package/{skills/workflow → library/skills}/skill-test/SKILL.md +4 -4
- package/library/skills/skill-test/resource.yaml +26 -0
- package/library/skills/skintokens-auto-rigging/SKILL.md +200 -0
- package/library/skills/skintokens-auto-rigging/resource.yaml +38 -0
- package/{skills/2d-assets → library/skills}/skybox-panorama/SKILL.md +8 -8
- package/library/skills/skybox-panorama/resource.yaml +28 -0
- package/{skills/audio → library/skills}/sound-effect/SKILL.md +2 -2
- package/library/skills/sound-effect/resource.yaml +27 -0
- package/library/skills/spatial-placement/SKILL.md +74 -0
- package/library/skills/spatial-placement/resource.yaml +42 -0
- package/library/skills/spatial-placement/tests/spec.md +65 -0
- package/{skills/2d-assets → library/skills}/sprite-sheet/SKILL.md +12 -12
- package/library/skills/sprite-sheet/resource.yaml +32 -0
- package/{skills/2d-assets → library/skills}/tileable-texture/SKILL.md +9 -9
- package/library/skills/tileable-texture/resource.yaml +31 -0
- package/{skills/video → library/skills}/trailer-shot/SKILL.md +1 -1
- package/library/skills/trailer-shot/resource.yaml +27 -0
- package/{skills/performance → library/skills}/tune-performance/SKILL.md +6 -6
- package/library/skills/tune-performance/resource.yaml +31 -0
- package/library/skills/ui-basics/resource.yaml +25 -0
- package/{skills/2d-assets → library/skills}/ui-graphics/SKILL.md +11 -11
- package/library/skills/ui-graphics/resource.yaml +29 -0
- package/{skills/2d-assets → library/skills}/use-widget-asset/SKILL.md +4 -4
- package/library/skills/use-widget-asset/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/using-summer/SKILL.md +12 -9
- package/library/skills/using-summer/resource.yaml +41 -0
- package/{skills/3d-assets → library/skills}/vehicle-model/SKILL.md +18 -18
- package/library/skills/vehicle-model/resource.yaml +34 -0
- package/{skills/workflow → library/skills}/verification-before-completion/SKILL.md +10 -10
- package/library/skills/verification-before-completion/resource.yaml +23 -0
- package/library/skills/verifying-scenes/SKILL.md +98 -0
- package/library/skills/verifying-scenes/resource.yaml +42 -0
- package/{skills/visual-effects/recipes/dissolve → library/skills/vfx-dissolve}/SKILL.md +31 -11
- package/library/skills/vfx-dissolve/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/fire → library/skills/vfx-fire}/SKILL.md +43 -12
- package/library/skills/vfx-fire/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-fire/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/hit-spark → library/skills/vfx-hit-spark}/SKILL.md +16 -10
- package/library/skills/vfx-hit-spark/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-hit-spark/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/lightning → library/skills/vfx-lightning}/SKILL.md +24 -11
- package/library/skills/vfx-lightning/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-lightning/resource.yaml +33 -0
- package/{skills/visual-effects/recipes/magic-glow → library/skills/vfx-magic-glow}/SKILL.md +31 -11
- package/library/skills/vfx-magic-glow/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-magic-glow/resource.yaml +34 -0
- package/{skills/visual-effects/recipes/muzzle-flash → library/skills/vfx-muzzle-flash}/SKILL.md +29 -9
- package/library/skills/vfx-muzzle-flash/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-muzzle-flash/_building-blocks/trauma-shake-snippet.md +53 -0
- package/library/skills/vfx-muzzle-flash/resource.yaml +35 -0
- package/{skills/visual-effects/recipes/smoke → library/skills/vfx-smoke}/SKILL.md +35 -9
- package/library/skills/vfx-smoke/_building-blocks/noise-3d-fbm.gdshaderinc +45 -0
- package/library/skills/vfx-smoke/resource.yaml +32 -0
- package/{skills/visual-effects/recipes/water-ripple → library/skills/vfx-water-ripple}/SKILL.md +31 -9
- package/library/skills/vfx-water-ripple/_building-blocks/additive-billboard-particles.md +37 -0
- package/library/skills/vfx-water-ripple/resource.yaml +31 -0
- package/library/skills/voice-line/resource.yaml +27 -0
- package/library/skills/world-building-3d/SKILL.md +105 -0
- package/library/skills/world-building-3d/references/spatial-tools.md +50 -0
- package/library/skills/world-building-3d/resource.yaml +44 -0
- package/library/skills/world-building-3d/tests/spec.md +48 -0
- package/{skills/workflow → library/skills}/writing-plans/SKILL.md +19 -14
- package/library/skills/writing-plans/resource.yaml +23 -0
- package/{skills/workflow → library/skills}/writing-skills/SKILL.md +38 -44
- package/library/skills/writing-skills/resource.yaml +29 -0
- package/{skills/workflow → library/skills}/writing-skills/testing-skills-with-subagents.md +13 -14
- package/library/templates/2d-brario-platformer/resource.yaml +21 -0
- package/library/templates/2d-dungeon-roguelike/resource.yaml +23 -0
- package/library/templates/2d-grid-puzzle/resource.yaml +21 -0
- package/library/templates/2d-plants-and-zombies-tower-defense/resource.yaml +21 -0
- package/library/templates/2d-platformer/resource.yaml +24 -0
- package/library/templates/2d-rpg/resource.yaml +21 -0
- package/library/templates/2d-vampire-survivor-roguelike/resource.yaml +21 -0
- package/library/templates/3d-basic/resource.yaml +16 -0
- package/library/templates/3d-city-kit/resource.yaml +24 -0
- package/library/templates/3d-fps-old-school/resource.yaml +21 -0
- package/library/templates/3d-fps-simple-animated-npc/resource.yaml +21 -0
- package/library/templates/3d-lan-multiplayer-starter/resource.yaml +22 -0
- package/library/templates/3d-open-world-explore-tps/resource.yaml +21 -0
- package/library/templates/3d-procedural-road-world/resource.yaml +21 -0
- package/library/templates/3d-racing-game/resource.yaml +21 -0
- package/library/templates/3d-royale-clash-type/resource.yaml +21 -0
- package/library/templates/3d-third-person-controller/resource.yaml +21 -0
- package/library/templates/3d-voxel-sandbox/resource.yaml +24 -0
- package/library/templates/README.md +94 -0
- package/library/templates/empty/resource.yaml +16 -0
- package/library/tools/add-node/resource.yaml +60 -0
- package/library/tools/align-distribute-3d/resource.yaml +87 -0
- package/library/tools/api-docs/resource.yaml +57 -0
- package/library/tools/batch/resource.yaml +52 -0
- package/library/tools/camera-bookmark/resource.yaml +73 -0
- package/library/tools/check-job/resource.yaml +45 -0
- package/library/tools/clear-console/resource.yaml +40 -0
- package/library/tools/connect-signal/resource.yaml +63 -0
- package/library/tools/create-debug-report/resource.yaml +67 -0
- package/library/tools/create-scene/resource.yaml +59 -0
- package/library/tools/creator-config/resource.yaml +63 -0
- package/library/tools/creator-publish/resource.yaml +73 -0
- package/library/tools/creator-releases/resource.yaml +53 -0
- package/library/tools/fabricate-3d/resource.yaml +108 -0
- package/library/tools/game-control/resource.yaml +84 -0
- package/library/tools/game-input/resource.yaml +159 -0
- package/library/tools/game-probe/resource.yaml +90 -0
- package/library/tools/generate-3d/resource.yaml +112 -0
- package/library/tools/generate-audio/resource.yaml +80 -0
- package/library/tools/generate-image/resource.yaml +62 -0
- package/library/tools/generate-motion/resource.yaml +66 -0
- package/library/tools/generate-video/resource.yaml +66 -0
- package/library/tools/get-agent-playbook/resource.yaml +40 -0
- package/library/tools/get-asset/resource.yaml +42 -0
- package/library/tools/get-asset-download-url/resource.yaml +52 -0
- package/library/tools/get-console/resource.yaml +69 -0
- package/library/tools/get-debugger-errors/resource.yaml +56 -0
- package/library/tools/get-debugger-warnings/resource.yaml +52 -0
- package/library/tools/get-diagnostics/resource.yaml +42 -0
- package/library/tools/get-project-context/resource.yaml +45 -0
- package/library/tools/get-runtime-tree/resource.yaml +62 -0
- package/library/tools/get-scene-tree/resource.yaml +52 -0
- package/library/tools/get-script-errors/resource.yaml +45 -0
- package/library/tools/get-studio-workflow/resource.yaml +43 -0
- package/library/tools/import-asset/resource.yaml +73 -0
- package/library/tools/import-asset-by-id/resource.yaml +56 -0
- package/library/tools/import-from-url/resource.yaml +51 -0
- package/library/tools/import-from-url-batch/resource.yaml +60 -0
- package/library/tools/import-hdri/resource.yaml +69 -0
- package/library/tools/input-map-bind/resource.yaml +52 -0
- package/library/tools/inspect-node/resource.yaml +46 -0
- package/library/tools/inspect-resource/resource.yaml +45 -0
- package/library/tools/inspect-runtime-node/resource.yaml +54 -0
- package/library/tools/instantiate-scene/resource.yaml +62 -0
- package/library/tools/is-running/resource.yaml +40 -0
- package/library/tools/library-feedback/resource.yaml +89 -0
- package/library/tools/list-my-assets/resource.yaml +56 -0
- package/library/tools/navigation-probe/resource.yaml +85 -0
- package/library/tools/open/resource.yaml +80 -0
- package/library/tools/open-main-scene/resource.yaml +40 -0
- package/library/tools/open-scene/resource.yaml +46 -0
- package/library/tools/play/resource.yaml +91 -0
- package/library/tools/project-setting/resource.yaml +53 -0
- package/library/tools/read-file/resource.yaml +47 -0
- package/library/tools/read-library/resource.yaml +67 -0
- package/library/tools/recent-events/resource.yaml +71 -0
- package/library/tools/remove-node/resource.yaml +51 -0
- package/library/tools/replace-node/resource.yaml +57 -0
- package/library/tools/replace-text/resource.yaml +61 -0
- package/library/tools/run-editor-script/resource.yaml +61 -0
- package/library/tools/run-script/resource.yaml +73 -0
- package/library/tools/runtime-animate/resource.yaml +140 -0
- package/library/tools/runtime-call/resource.yaml +74 -0
- package/library/tools/runtime-set/resource.yaml +80 -0
- package/library/tools/runtime-spawn/resource.yaml +95 -0
- package/library/tools/save-scene/resource.yaml +50 -0
- package/library/tools/screenshot/resource.yaml +112 -0
- package/library/tools/search-assets/resource.yaml +67 -0
- package/library/tools/search-library/resource.yaml +81 -0
- package/library/tools/select-node/resource.yaml +48 -0
- package/library/tools/set-prop/resource.yaml +64 -0
- package/library/tools/set-resource-property/resource.yaml +66 -0
- package/library/tools/slice-asset-sheet/resource.yaml +47 -0
- package/library/tools/snap-to-surface/resource.yaml +90 -0
- package/library/tools/snapshot-diff/resource.yaml +58 -0
- package/library/tools/starcast/resource.yaml +120 -0
- package/library/tools/start-game-task/resource.yaml +91 -0
- package/library/tools/stop/resource.yaml +51 -0
- package/library/tools/test-placement/resource.yaml +109 -0
- package/library/tools/ui-actions/resource.yaml +77 -0
- package/library/tools/ui-activate/resource.yaml +88 -0
- package/library/tools/ui-screenshot/resource.yaml +63 -0
- package/library/tools/ui-tree/resource.yaml +69 -0
- package/library/tools/wait-for-event/resource.yaml +84 -0
- package/library/tools/world-snapshot/resource.yaml +60 -0
- package/library/tools/write-file/resource.yaml +54 -0
- package/package.json +21 -15
- package/registry/generated/aliases.json +207 -0
- package/registry/generated/counts.json +12 -0
- package/registry/generated/gemini-extension.json +122 -0
- package/registry/generated/index.json +7709 -0
- package/registry/generated/marketplace.claude.json +44 -0
- package/registry/generated/mcp.json +13 -0
- package/registry/generated/plugin.claude.json +135 -0
- package/registry/generated/plugin.codex.json +144 -0
- package/registry/generated/plugin.cursor.json +134 -0
- package/registry/generated/plugin.factory.json +117 -0
- package/registry/generated/skills-index.md +242 -0
- package/registry/generated/skills-registry.json +1249 -0
- package/registry/generated/templates-registry.json +455 -0
- package/registry/schemas/allowed-hosts.json +19 -0
- package/registry/schemas/collection.schema.json +68 -0
- package/registry/schemas/domains.json +96 -0
- package/registry/schemas/example.schema.json +11 -0
- package/registry/schemas/reference.schema.json +10 -0
- package/registry/schemas/resource.schema.json +154 -0
- package/registry/schemas/skill.schema.json +14 -0
- package/registry/schemas/template.schema.json +46 -0
- package/registry/schemas/tool.schema.json +61 -0
- package/_persona/summer/SKILL.md +0 -113
- package/dist/bin/postinstall.d.ts +0 -2
- package/dist/bin/postinstall.js +0 -3
- package/dist/commands/cloud.d.ts +0 -2
- package/dist/commands/cloud.js +0 -80
- package/dist/commands/create.d.ts +0 -3
- package/dist/commands/create.js +0 -171
- package/dist/commands/install.d.ts +0 -19
- package/dist/commands/install.js +0 -194
- package/dist/commands/list.js +0 -67
- package/dist/commands/logout.js +0 -13
- package/dist/commands/logs.d.ts +0 -2
- package/dist/commands/logs.js +0 -19
- package/dist/commands/open.d.ts +0 -2
- package/dist/commands/open.js +0 -32
- package/dist/commands/orchestrator.d.ts +0 -8
- package/dist/commands/orchestrator.js +0 -143
- package/dist/commands/run.d.ts +0 -2
- package/dist/commands/run.js +0 -167
- package/dist/commands/setup.js +0 -217
- package/dist/commands/status.js +0 -46
- package/dist/lib/agent-config.d.ts +0 -39
- package/dist/lib/agent-config.js +0 -626
- package/dist/lib/banner.d.ts +0 -4
- package/dist/lib/banner.js +0 -122
- package/dist/lib/cloud/api.d.ts +0 -79
- package/dist/lib/cloud/api.js +0 -107
- package/dist/lib/cloud/apply.d.ts +0 -32
- package/dist/lib/cloud/apply.js +0 -294
- package/dist/lib/cloud/checkpoint.d.ts +0 -26
- package/dist/lib/cloud/checkpoint.js +0 -142
- package/dist/lib/cloud/conflicts.d.ts +0 -55
- package/dist/lib/cloud/conflicts.js +0 -131
- package/dist/lib/cloud/containment.d.ts +0 -8
- package/dist/lib/cloud/containment.js +0 -52
- package/dist/lib/cloud/diff.d.ts +0 -39
- package/dist/lib/cloud/diff.js +0 -138
- package/dist/lib/cloud/engine-bridge.d.ts +0 -34
- package/dist/lib/cloud/engine-bridge.js +0 -139
- package/dist/lib/cloud/hash-cache.d.ts +0 -23
- package/dist/lib/cloud/hash-cache.js +0 -44
- package/dist/lib/cloud/hash.d.ts +0 -10
- package/dist/lib/cloud/hash.js +0 -111
- package/dist/lib/cloud/http.d.ts +0 -17
- package/dist/lib/cloud/http.js +0 -47
- package/dist/lib/cloud/lock-path.d.ts +0 -1
- package/dist/lib/cloud/lock-path.js +0 -5
- package/dist/lib/cloud/lock.d.ts +0 -14
- package/dist/lib/cloud/lock.js +0 -143
- package/dist/lib/cloud/manifest.d.ts +0 -6
- package/dist/lib/cloud/manifest.js +0 -41
- package/dist/lib/cloud/paths.d.ts +0 -20
- package/dist/lib/cloud/paths.js +0 -90
- package/dist/lib/cloud/project-godot-merge.d.ts +0 -32
- package/dist/lib/cloud/project-godot-merge.js +0 -185
- package/dist/lib/cloud/rules.d.ts +0 -39
- package/dist/lib/cloud/rules.js +0 -159
- package/dist/lib/cloud/sync.d.ts +0 -21
- package/dist/lib/cloud/sync.js +0 -518
- package/dist/lib/cloud/transfer.d.ts +0 -23
- package/dist/lib/cloud/transfer.js +0 -184
- package/dist/lib/cloud/types.d.ts +0 -62
- package/dist/lib/cloud/types.js +0 -1
- package/dist/lib/cloud/validate-path.d.ts +0 -23
- package/dist/lib/cloud/validate-path.js +0 -103
- package/dist/lib/engine.d.ts +0 -51
- package/dist/lib/game-task-plan.d.ts +0 -42
- package/dist/lib/project-memory.d.ts +0 -33
- package/dist/lib/public-surface-paths.d.ts +0 -13
- package/dist/lib/public-surface-paths.js +0 -42
- package/dist/lib/remote-templates.d.ts +0 -25
- package/dist/lib/remote-templates.js +0 -86
- package/dist/lib/skills-registry.d.ts +0 -572
- package/dist/lib/skills-registry.js +0 -1061
- package/dist/lib/version-check.d.ts +0 -106
- package/dist/lib/version-check.js +0 -338
- package/dist/mcp/tools/cloud-tools.js +0 -42
- package/references/mcp-tools-reference.md +0 -199
- package/references/template-registry.md +0 -73
- package/skills/README.md +0 -103
- package/skills/scene-and-project/summer-cloud/SKILL.md +0 -92
- package/skills/workflow/brainstorming/scripts/frame-template.html +0 -214
- package/skills/workflow/brainstorming/scripts/helper.js +0 -88
- package/skills/workflow/brainstorming/scripts/server.cjs +0 -354
- package/skills/workflow/brainstorming/scripts/start-server.sh +0 -148
- package/skills/workflow/brainstorming/scripts/stop-server.sh +0 -56
- package/skills/workflow/brainstorming/visual-companion.md +0 -287
- package/skills/workflow/gameskill/SKILL.md +0 -120
- package/skills/workflow/investigating-bugs/CREATION-LOG.md +0 -119
- package/skills/workflow/investigating-bugs/condition-based-waiting-example.ts +0 -158
- package/skills/workflow/investigating-bugs/find-polluter.sh +0 -63
- package/skills/workflow/investigating-bugs/test-academic.md +0 -14
- package/skills/workflow/investigating-bugs/test-pressure-1.md +0 -58
- package/skills/workflow/investigating-bugs/test-pressure-2.md +0 -68
- package/skills/workflow/investigating-bugs/test-pressure-3.md +0 -69
- package/skills/workflow/mcpupdate/SKILL.md +0 -134
- package/skills/workflow/skill-create/SKILL.md +0 -153
- package/skills/workflow/writing-skills/anthropic-best-practices.md +0 -1150
- package/skills/workflow/writing-skills/examples/CLAUDE_MD_TESTING.md +0 -189
- package/skills/workflow/writing-skills/graphviz-conventions.dot +0 -172
- package/skills/workflow/writing-skills/persuasion-principles.md +0 -187
- package/skills/workflow/writing-skills/render-graphs.js +0 -168
- /package/dist/{commands → cli/commands}/config.d.ts +0 -0
- /package/dist/{commands → cli/commands}/debug.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/login.d.ts +0 -0
- /package/dist/{commands → cli/commands}/plan.d.ts +0 -0
- /package/dist/{commands → cli/commands}/publish.d.ts +0 -0
- /package/dist/{commands → cli/commands}/releases.d.ts +0 -0
- /package/dist/{commands → cli/commands}/setup.d.ts +0 -0
- /package/dist/{commands → cli/commands}/skills.d.ts +0 -0
- /package/dist/{lib → core}/log-filters.d.ts +0 -0
- /package/dist/{lib → core}/mcp-log.d.ts +0 -0
- /package/dist/{lib → core}/store.d.ts +0 -0
- /package/dist/{lib → core}/summer-compatibility.d.ts +0 -0
- /package/dist/{lib → core}/telemetry.d.ts +0 -0
- /package/dist/{lib/mcp-boot-notice.js → mcp/boot-notice.js} +0 -0
- /package/dist/{commands/mcp.d.ts → mcp/command.d.ts} +0 -0
- /package/{references → library/references/collaborative-protocol}/collaborative-protocol.md +0 -0
- /package/{references → library/references/gd-style}/gd-style.md +0 -0
- /package/{skills/audio → library/skills}/ambient-bed/SKILL.md +0 -0
- /package/{skills/gameplay-mechanics → library/skills}/auto-fire-targeting/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/SKILL.md +0 -0
- /package/{skills/scripting-patterns → library/skills}/gdscript-patterns/reference.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/host-authoritative-state/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/investigating-bugs/defense-in-depth.md +0 -0
- /package/{skills/audio → library/skills}/music-track/SKILL.md +0 -0
- /package/{skills/scene-and-project → library/skills}/play/SKILL.md +0 -0
- /package/{skills/multiplayer-and-networking → library/skills}/setup-multiplayer/SKILL.md +0 -0
- /package/{skills/ui-and-ux → library/skills}/ui-basics/SKILL.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-dissolve}/_building-blocks/noise-3d-fbm.gdshaderinc +0 -0
- /package/{skills/visual-effects → library/skills/vfx-fire}/_building-blocks/additive-billboard-particles.md +0 -0
- /package/{skills/visual-effects → library/skills/vfx-lightning}/_building-blocks/trauma-shake-snippet.md +0 -0
- /package/{skills/audio → library/skills}/voice-line/SKILL.md +0 -0
- /package/{skills/workflow → library/skills}/writing-plans/plan-document-reviewer-prompt.md +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where each platform's engine binary lives, shared by `summer install`,
|
|
3
|
+
* `summer run`, and `summer doctor` so they can never disagree about what
|
|
4
|
+
* "installed" means.
|
|
5
|
+
*
|
|
6
|
+
* Mac and Windows are installed by their platform installers into well-known
|
|
7
|
+
* locations. Linux has no installer: `summer install` places (or symlinks) the
|
|
8
|
+
* binary into ~/.summer/engine/, and SUMMER_ENGINE_BINARY points at a prebuilt
|
|
9
|
+
* binary directly — the path cloud containers that ship their own build use.
|
|
10
|
+
*
|
|
11
|
+
* The Linux install *resolution* logic (which source to install from, which
|
|
12
|
+
* release asset to pick, how to unpack it) also lives here so the CLI command
|
|
13
|
+
* stays commander wiring + process I/O only.
|
|
14
|
+
*/
|
|
15
|
+
/** Env var naming the engine executable to launch and probe (absolute path).
|
|
16
|
+
* The ONE name shared with the autopilot scaffold (assets/autopilot/run.sh)
|
|
17
|
+
* and evals/mitl; `summer run --bin <path>` is its flag form. On macOS it is
|
|
18
|
+
* the executable inside the bundle (.../Summer.app/Contents/MacOS/Summer). */
|
|
19
|
+
export declare const ENGINE_BIN_ENV = "SUMMER_BIN";
|
|
20
|
+
/** Older name for the same override, documented for Linux cloud containers
|
|
21
|
+
* (`running-in-the-cloud`, CHANGELOG 3.0.0) and still honoured after
|
|
22
|
+
* ENGINE_BIN_ENV. `summer install` on Linux registers the binary it names. */
|
|
23
|
+
export declare const ENGINE_BINARY_ENV = "SUMMER_ENGINE_BINARY";
|
|
24
|
+
/** The explicit engine override in force — ENGINE_BIN_ENV first, then
|
|
25
|
+
* ENGINE_BINARY_ENV — or null when neither is set (blank counts as unset). */
|
|
26
|
+
export declare function engineBinaryOverride(env?: NodeJS.ProcessEnv): {
|
|
27
|
+
name: string;
|
|
28
|
+
path: string;
|
|
29
|
+
} | null;
|
|
30
|
+
/**
|
|
31
|
+
* Why an explicitly named engine path cannot be launched, or null when it can.
|
|
32
|
+
* A `.app` bundle is refused even when it exists: `summer run` spawns the
|
|
33
|
+
* executable directly, because `open` (the only way to launch a bundle)
|
|
34
|
+
* activates the app and defeats background launches, and a binary copied OUT
|
|
35
|
+
* of the bundle dies on its Sparkle @rpath — so the value has to be the
|
|
36
|
+
* executable inside the bundle.
|
|
37
|
+
*/
|
|
38
|
+
export declare function describeEngineExecutableProblem(path: string, source: string): string | null;
|
|
39
|
+
/** Env var naming a direct artifact URL (tar.gz, zip, or raw binary) to install
|
|
40
|
+
* on Linux instead of the published release. */
|
|
41
|
+
export declare const ENGINE_URL_ENV = "SUMMER_ENGINE_URL";
|
|
42
|
+
/** The single executable name Linux release artifacts contain and installs
|
|
43
|
+
* register. Matches the release asset contents (.github/workflows/release.yml
|
|
44
|
+
* in the engine repository). */
|
|
45
|
+
export declare const LINUX_ENGINE_BINARY_NAME = "summer-linux-x86_64";
|
|
46
|
+
/**
|
|
47
|
+
* Where Linux release artifacts are published today: GitHub Releases on the
|
|
48
|
+
* engine repository (engine tags are v0.*; see .github/workflows/release.yml).
|
|
49
|
+
* This is the ONE place to change when Linux artifacts move to the desktop
|
|
50
|
+
* releases CDN — point it at an endpoint returning the same GitHub-style
|
|
51
|
+
* releases JSON (an array of { tag_name, draft, prerelease, assets:[{ name,
|
|
52
|
+
* browser_download_url }] }).
|
|
53
|
+
*/
|
|
54
|
+
export declare const LINUX_RELEASES_API_URL = "https://api.github.com/repos/SummerEngine/SummerEngine/releases?per_page=30";
|
|
55
|
+
/** Release asset naming contract with .github/workflows/release.yml. */
|
|
56
|
+
export declare const LINUX_ASSET_PATTERN: RegExp;
|
|
57
|
+
export declare function linuxEngineInstallDir(): string;
|
|
58
|
+
export declare function macEnginePaths(env?: NodeJS.ProcessEnv): string[];
|
|
59
|
+
export declare function windowsEnginePaths(env?: NodeJS.ProcessEnv): string[];
|
|
60
|
+
export declare function linuxEnginePaths(): string[];
|
|
61
|
+
export declare function engineBinaryCandidates(os?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string[];
|
|
62
|
+
/** First existing engine binary for this machine, or null. SUMMER_BIN /
|
|
63
|
+
* SUMMER_ENGINE_BINARY wins when set and present; a set-but-missing override
|
|
64
|
+
* falls through to the platform locations rather than reporting a phantom
|
|
65
|
+
* install (`summer run` is stricter: see resolveRunBinary). */
|
|
66
|
+
export declare function findEngineBinary(os?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string | null;
|
|
67
|
+
export type LinuxInstallSource = {
|
|
68
|
+
kind: "binary";
|
|
69
|
+
path: string;
|
|
70
|
+
} | {
|
|
71
|
+
kind: "url";
|
|
72
|
+
url: string;
|
|
73
|
+
} | {
|
|
74
|
+
kind: "release";
|
|
75
|
+
apiUrl: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Resolution order for `summer install` on Linux:
|
|
79
|
+
* 1. SUMMER_ENGINE_BINARY — an existing engine binary on disk (the path cloud
|
|
80
|
+
* containers with a prebuilt engine use). Registered, nothing downloaded.
|
|
81
|
+
* 2. SUMMER_ENGINE_URL — any artifact URL: .tar.gz, .zip, or a raw executable.
|
|
82
|
+
* 3. The published Linux release artifact (LINUX_RELEASES_API_URL).
|
|
83
|
+
*/
|
|
84
|
+
export declare function resolveLinuxInstallSource(env?: NodeJS.ProcessEnv): LinuxInstallSource;
|
|
85
|
+
export interface LinuxReleaseAsset {
|
|
86
|
+
version: string;
|
|
87
|
+
url: string;
|
|
88
|
+
/** Sibling "<asset>.sha256" download URL when the release published one. */
|
|
89
|
+
sha256Url?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Newest published (non-draft, non-prerelease) release that actually carries a
|
|
93
|
+
* Linux artifact. Releases are shared between engine tags (v0.x) and CLI tags
|
|
94
|
+
* (v1.x, v2.x), and CLI releases have no engine binaries — so "latest release"
|
|
95
|
+
* is the wrong query and this scans instead.
|
|
96
|
+
*/
|
|
97
|
+
export declare function pickLinuxReleaseAsset(releases: unknown): LinuxReleaseAsset;
|
|
98
|
+
/** How to unpack a downloaded Linux artifact, judged by its file name
|
|
99
|
+
* (query string ignored). Anything that is not a known archive is treated as
|
|
100
|
+
* the raw executable itself. */
|
|
101
|
+
export declare function linuxArchiveKind(nameOrUrl: string): "tar.gz" | "zip" | "binary";
|
|
102
|
+
/** Locate the engine executable inside an extracted artifact: the canonical
|
|
103
|
+
* name first, then the only file, then anything that looks like an engine
|
|
104
|
+
* build (covers artifacts packed straight from bin/). */
|
|
105
|
+
export declare function findExtractedEngineBinary(files: string[]): string | null;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { existsSync, statSync } from "fs";
|
|
2
|
+
import { homedir, platform } from "os";
|
|
3
|
+
import { basename, join } from "path";
|
|
4
|
+
/**
|
|
5
|
+
* Where each platform's engine binary lives, shared by `summer install`,
|
|
6
|
+
* `summer run`, and `summer doctor` so they can never disagree about what
|
|
7
|
+
* "installed" means.
|
|
8
|
+
*
|
|
9
|
+
* Mac and Windows are installed by their platform installers into well-known
|
|
10
|
+
* locations. Linux has no installer: `summer install` places (or symlinks) the
|
|
11
|
+
* binary into ~/.summer/engine/, and SUMMER_ENGINE_BINARY points at a prebuilt
|
|
12
|
+
* binary directly — the path cloud containers that ship their own build use.
|
|
13
|
+
*
|
|
14
|
+
* The Linux install *resolution* logic (which source to install from, which
|
|
15
|
+
* release asset to pick, how to unpack it) also lives here so the CLI command
|
|
16
|
+
* stays commander wiring + process I/O only.
|
|
17
|
+
*/
|
|
18
|
+
/** Env var naming the engine executable to launch and probe (absolute path).
|
|
19
|
+
* The ONE name shared with the autopilot scaffold (assets/autopilot/run.sh)
|
|
20
|
+
* and evals/mitl; `summer run --bin <path>` is its flag form. On macOS it is
|
|
21
|
+
* the executable inside the bundle (.../Summer.app/Contents/MacOS/Summer). */
|
|
22
|
+
export const ENGINE_BIN_ENV = "SUMMER_BIN";
|
|
23
|
+
/** Older name for the same override, documented for Linux cloud containers
|
|
24
|
+
* (`running-in-the-cloud`, CHANGELOG 3.0.0) and still honoured after
|
|
25
|
+
* ENGINE_BIN_ENV. `summer install` on Linux registers the binary it names. */
|
|
26
|
+
export const ENGINE_BINARY_ENV = "SUMMER_ENGINE_BINARY";
|
|
27
|
+
/** The explicit engine override in force — ENGINE_BIN_ENV first, then
|
|
28
|
+
* ENGINE_BINARY_ENV — or null when neither is set (blank counts as unset). */
|
|
29
|
+
export function engineBinaryOverride(env = process.env) {
|
|
30
|
+
for (const name of [ENGINE_BIN_ENV, ENGINE_BINARY_ENV]) {
|
|
31
|
+
const path = env[name]?.trim();
|
|
32
|
+
if (path)
|
|
33
|
+
return { name, path };
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Why an explicitly named engine path cannot be launched, or null when it can.
|
|
39
|
+
* A `.app` bundle is refused even when it exists: `summer run` spawns the
|
|
40
|
+
* executable directly, because `open` (the only way to launch a bundle)
|
|
41
|
+
* activates the app and defeats background launches, and a binary copied OUT
|
|
42
|
+
* of the bundle dies on its Sparkle @rpath — so the value has to be the
|
|
43
|
+
* executable inside the bundle.
|
|
44
|
+
*/
|
|
45
|
+
export function describeEngineExecutableProblem(path, source) {
|
|
46
|
+
const trimmed = path.replace(/[\\/]+$/, "");
|
|
47
|
+
if (/\.app$/i.test(basename(trimmed))) {
|
|
48
|
+
return (`${source} names the bundle ${trimmed}, not the engine executable. Pass the executable inside it: ` +
|
|
49
|
+
`${join(trimmed, "Contents", "MacOS", "Summer")}\n` +
|
|
50
|
+
"summer run spawns that executable directly: launching the .app would go through `open`, which activates " +
|
|
51
|
+
"the app and defeats background launches, and a binary copied out of the bundle dies on its Sparkle @rpath.");
|
|
52
|
+
}
|
|
53
|
+
if (!existsSync(trimmed)) {
|
|
54
|
+
return `${source} names ${trimmed}, but nothing exists there.`;
|
|
55
|
+
}
|
|
56
|
+
if (statSync(trimmed).isDirectory()) {
|
|
57
|
+
return `${source} names ${trimmed}, which is a directory, not the engine executable.`;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/** Env var naming a direct artifact URL (tar.gz, zip, or raw binary) to install
|
|
62
|
+
* on Linux instead of the published release. */
|
|
63
|
+
export const ENGINE_URL_ENV = "SUMMER_ENGINE_URL";
|
|
64
|
+
/** The single executable name Linux release artifacts contain and installs
|
|
65
|
+
* register. Matches the release asset contents (.github/workflows/release.yml
|
|
66
|
+
* in the engine repository). */
|
|
67
|
+
export const LINUX_ENGINE_BINARY_NAME = "summer-linux-x86_64";
|
|
68
|
+
/**
|
|
69
|
+
* Where Linux release artifacts are published today: GitHub Releases on the
|
|
70
|
+
* engine repository (engine tags are v0.*; see .github/workflows/release.yml).
|
|
71
|
+
* This is the ONE place to change when Linux artifacts move to the desktop
|
|
72
|
+
* releases CDN — point it at an endpoint returning the same GitHub-style
|
|
73
|
+
* releases JSON (an array of { tag_name, draft, prerelease, assets:[{ name,
|
|
74
|
+
* browser_download_url }] }).
|
|
75
|
+
*/
|
|
76
|
+
export const LINUX_RELEASES_API_URL = "https://api.github.com/repos/SummerEngine/SummerEngine/releases?per_page=30";
|
|
77
|
+
/** Release asset naming contract with .github/workflows/release.yml. */
|
|
78
|
+
export const LINUX_ASSET_PATTERN = /^Summer-linux-x86_64.*\.tar\.gz$/;
|
|
79
|
+
export function linuxEngineInstallDir() {
|
|
80
|
+
return join(homedir(), ".summer", "engine");
|
|
81
|
+
}
|
|
82
|
+
export function macEnginePaths(env = process.env) {
|
|
83
|
+
return [
|
|
84
|
+
"/Applications/Summer.app/Contents/MacOS/Summer",
|
|
85
|
+
`${env.HOME}/Applications/Summer.app/Contents/MacOS/Summer`,
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
export function windowsEnginePaths(env = process.env) {
|
|
89
|
+
return [
|
|
90
|
+
`${env.LOCALAPPDATA}\\SummerEngine\\current\\Summer.exe`,
|
|
91
|
+
`${env.LOCALAPPDATA}\\Programs\\Summer Engine\\Summer.exe`,
|
|
92
|
+
`${env.PROGRAMFILES}\\Summer Engine\\Summer.exe`,
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
export function linuxEnginePaths() {
|
|
96
|
+
return [join(linuxEngineInstallDir(), LINUX_ENGINE_BINARY_NAME)];
|
|
97
|
+
}
|
|
98
|
+
export function engineBinaryCandidates(os = platform(), env = process.env) {
|
|
99
|
+
const override = engineBinaryOverride(env)?.path;
|
|
100
|
+
const platformPaths = os === "darwin"
|
|
101
|
+
? macEnginePaths(env)
|
|
102
|
+
: os === "linux"
|
|
103
|
+
? linuxEnginePaths()
|
|
104
|
+
: windowsEnginePaths(env);
|
|
105
|
+
return override ? [override, ...platformPaths] : platformPaths;
|
|
106
|
+
}
|
|
107
|
+
/** First existing engine binary for this machine, or null. SUMMER_BIN /
|
|
108
|
+
* SUMMER_ENGINE_BINARY wins when set and present; a set-but-missing override
|
|
109
|
+
* falls through to the platform locations rather than reporting a phantom
|
|
110
|
+
* install (`summer run` is stricter: see resolveRunBinary). */
|
|
111
|
+
export function findEngineBinary(os = platform(), env = process.env) {
|
|
112
|
+
for (const path of engineBinaryCandidates(os, env)) {
|
|
113
|
+
if (path && existsSync(path))
|
|
114
|
+
return path;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolution order for `summer install` on Linux:
|
|
120
|
+
* 1. SUMMER_ENGINE_BINARY — an existing engine binary on disk (the path cloud
|
|
121
|
+
* containers with a prebuilt engine use). Registered, nothing downloaded.
|
|
122
|
+
* 2. SUMMER_ENGINE_URL — any artifact URL: .tar.gz, .zip, or a raw executable.
|
|
123
|
+
* 3. The published Linux release artifact (LINUX_RELEASES_API_URL).
|
|
124
|
+
*/
|
|
125
|
+
export function resolveLinuxInstallSource(env = process.env) {
|
|
126
|
+
const binary = env[ENGINE_BINARY_ENV]?.trim();
|
|
127
|
+
if (binary)
|
|
128
|
+
return { kind: "binary", path: binary };
|
|
129
|
+
const url = env[ENGINE_URL_ENV]?.trim();
|
|
130
|
+
if (url)
|
|
131
|
+
return { kind: "url", url };
|
|
132
|
+
return { kind: "release", apiUrl: LINUX_RELEASES_API_URL };
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Newest published (non-draft, non-prerelease) release that actually carries a
|
|
136
|
+
* Linux artifact. Releases are shared between engine tags (v0.x) and CLI tags
|
|
137
|
+
* (v1.x, v2.x), and CLI releases have no engine binaries — so "latest release"
|
|
138
|
+
* is the wrong query and this scans instead.
|
|
139
|
+
*/
|
|
140
|
+
export function pickLinuxReleaseAsset(releases) {
|
|
141
|
+
const list = Array.isArray(releases) ? releases : [];
|
|
142
|
+
for (const entry of list) {
|
|
143
|
+
if (!entry || typeof entry !== "object")
|
|
144
|
+
continue;
|
|
145
|
+
const release = entry;
|
|
146
|
+
if (release.draft === true || release.prerelease === true)
|
|
147
|
+
continue;
|
|
148
|
+
const assets = Array.isArray(release.assets) ? release.assets : [];
|
|
149
|
+
const named = assets.filter((asset) => Boolean(asset &&
|
|
150
|
+
typeof asset === "object" &&
|
|
151
|
+
typeof asset.name === "string" &&
|
|
152
|
+
typeof asset
|
|
153
|
+
.browser_download_url === "string"));
|
|
154
|
+
const artifact = named.find((asset) => LINUX_ASSET_PATTERN.test(asset.name));
|
|
155
|
+
if (!artifact)
|
|
156
|
+
continue;
|
|
157
|
+
const checksum = named.find((asset) => asset.name === `${artifact.name}.sha256`);
|
|
158
|
+
return {
|
|
159
|
+
version: typeof release.tag_name === "string" ? release.tag_name : "unknown",
|
|
160
|
+
url: artifact.browser_download_url,
|
|
161
|
+
...(checksum ? { sha256Url: checksum.browser_download_url } : {}),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
throw new Error("No published release carries a Linux engine artifact yet " +
|
|
165
|
+
`(looked for ${String(LINUX_ASSET_PATTERN)}). ` +
|
|
166
|
+
`Set ${ENGINE_URL_ENV} to a build artifact URL, or ${ENGINE_BINARY_ENV} to an existing binary, and re-run \`summer install\`.`);
|
|
167
|
+
}
|
|
168
|
+
/** How to unpack a downloaded Linux artifact, judged by its file name
|
|
169
|
+
* (query string ignored). Anything that is not a known archive is treated as
|
|
170
|
+
* the raw executable itself. */
|
|
171
|
+
export function linuxArchiveKind(nameOrUrl) {
|
|
172
|
+
const path = nameOrUrl.split(/[?#]/, 1)[0].toLowerCase();
|
|
173
|
+
if (path.endsWith(".tar.gz") || path.endsWith(".tgz"))
|
|
174
|
+
return "tar.gz";
|
|
175
|
+
if (path.endsWith(".zip"))
|
|
176
|
+
return "zip";
|
|
177
|
+
return "binary";
|
|
178
|
+
}
|
|
179
|
+
/** Locate the engine executable inside an extracted artifact: the canonical
|
|
180
|
+
* name first, then the only file, then anything that looks like an engine
|
|
181
|
+
* build (covers artifacts packed straight from bin/). */
|
|
182
|
+
export function findExtractedEngineBinary(files) {
|
|
183
|
+
const canonical = files.find((f) => basename(f) === LINUX_ENGINE_BINARY_NAME);
|
|
184
|
+
if (canonical)
|
|
185
|
+
return canonical;
|
|
186
|
+
if (files.length === 1)
|
|
187
|
+
return files[0];
|
|
188
|
+
return (files.find((f) => /godot\.linuxbsd\..*editor|summer.*linux/i.test(basename(f))) ??
|
|
189
|
+
null);
|
|
190
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type EngineCapabilities } from "./capability-skew.js";
|
|
2
|
+
export interface EngineSelection {
|
|
3
|
+
instanceId?: string;
|
|
4
|
+
projectPath?: string;
|
|
5
|
+
cwd?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface EngineDiscoveryOptions {
|
|
8
|
+
summerDir?: string;
|
|
9
|
+
nowMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface DiscoverEngineOptions extends EngineDiscoveryOptions {
|
|
12
|
+
/** Working directory whose enclosing project (walk up to project.godot)
|
|
13
|
+
* breaks a tie between several live editors. Default: process.cwd(). */
|
|
14
|
+
cwd?: string;
|
|
15
|
+
/** Environment to read SUMMER_ENGINE_PROJECT / SUMMER_ENGINE_INSTANCE_ID
|
|
16
|
+
* from. Default: process.env. */
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
}
|
|
19
|
+
/** Env names the MCP server already honours for an explicit selection
|
|
20
|
+
* (src/mcp/server.ts startMcpServer). The CLI face reads the same two so a
|
|
21
|
+
* script can pin the editor without a per-command flag. */
|
|
22
|
+
export declare const ENGINE_PROJECT_ENV = "SUMMER_ENGINE_PROJECT";
|
|
23
|
+
export declare const ENGINE_INSTANCE_ENV = "SUMMER_ENGINE_INSTANCE_ID";
|
|
24
|
+
/** An explicit editor selection from the environment, or null when neither
|
|
25
|
+
* variable is set. */
|
|
26
|
+
export declare function engineSelectionFromEnv(env?: NodeJS.ProcessEnv): EngineSelection | null;
|
|
27
|
+
export interface EngineInstance {
|
|
28
|
+
schemaVersion: 1;
|
|
29
|
+
instanceId: string;
|
|
30
|
+
pid: number;
|
|
31
|
+
port: number;
|
|
32
|
+
token: string;
|
|
33
|
+
projectId?: string;
|
|
34
|
+
projectIdHash?: string;
|
|
35
|
+
resourceRoot: string;
|
|
36
|
+
projectName?: string;
|
|
37
|
+
heartbeatAt: number;
|
|
38
|
+
engineVersion?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface EngineConnection {
|
|
41
|
+
port: number;
|
|
42
|
+
token: string;
|
|
43
|
+
health: EngineHealth;
|
|
44
|
+
instance?: EngineInstance;
|
|
45
|
+
selection: EngineSelection | null;
|
|
46
|
+
source: "registry" | "legacy";
|
|
47
|
+
}
|
|
48
|
+
export declare function getApiToken(summerDir?: string): Promise<string | null>;
|
|
49
|
+
export declare function getApiPort(summerDir?: string): Promise<number>;
|
|
50
|
+
export declare function findProjectRoot(startPath: string): Promise<string | null>;
|
|
51
|
+
export declare function listEngineInstances(nowMs?: number, summerDir?: string): Promise<EngineInstance[]>;
|
|
52
|
+
export declare function resolveEngineConnection(selection?: EngineSelection, options?: EngineDiscoveryOptions): Promise<EngineConnection>;
|
|
53
|
+
/**
|
|
54
|
+
* The registry half of no-selection discovery (the CLI face; see
|
|
55
|
+
* EngineApiClient.connect, which reads the global pointer first). Editors
|
|
56
|
+
* launched `--summer-no-publish`, or a second editor that never owned the
|
|
57
|
+
* pointer, exist only here. "Live" = pid alive + heartbeat fresh
|
|
58
|
+
* (listEngineInstances) + /api/health answers with the registered instanceId.
|
|
59
|
+
*
|
|
60
|
+
* exactly one live editor -> that connection
|
|
61
|
+
* several -> the one whose project encloses `cwd`, else an
|
|
62
|
+
* error listing them and how to pick one
|
|
63
|
+
* none -> null (the caller words the "not running" error,
|
|
64
|
+
* since only it knows whether a pointer existed)
|
|
65
|
+
*
|
|
66
|
+
* Reads only `summerDir` (default ~/.summer); never the pointer files.
|
|
67
|
+
*/
|
|
68
|
+
export declare function discoverRegistryConnection(options?: DiscoverEngineOptions): Promise<EngineConnection | null>;
|
|
69
|
+
/** The no-selection "nothing reachable" error, worded by whether a pointer
|
|
70
|
+
* existed. Kept here so the CLI face and its tests share one text; the
|
|
71
|
+
* "no api-token found" phrase is what headless/resolve.ts keys on. */
|
|
72
|
+
export declare function engineNotRunningError(pointer: {
|
|
73
|
+
port: number;
|
|
74
|
+
token: string | null;
|
|
75
|
+
}, summerDir?: string): Error;
|
|
76
|
+
export interface EngineHealth {
|
|
77
|
+
ok: boolean;
|
|
78
|
+
engine: string;
|
|
79
|
+
version: string;
|
|
80
|
+
port: number;
|
|
81
|
+
pid?: number;
|
|
82
|
+
instanceId?: string;
|
|
83
|
+
projectId?: string;
|
|
84
|
+
projectIdHash?: string;
|
|
85
|
+
mainAliveMs?: number;
|
|
86
|
+
queueDepth?: number;
|
|
87
|
+
/** Advertised by newer engines only: dispatchable op kinds, single-only ops,
|
|
88
|
+
* protocol version. Absent on older builds — absence proves nothing. */
|
|
89
|
+
capabilities?: EngineCapabilities;
|
|
90
|
+
project_name?: string;
|
|
91
|
+
project_path?: string;
|
|
92
|
+
scene?: string;
|
|
93
|
+
}
|
|
94
|
+
export declare function checkEngineHealth(port: number): Promise<EngineHealth | null>;
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { lstat, readFile, readdir, realpath, stat } from "fs/promises";
|
|
2
2
|
import { dirname, join, resolve } from "path";
|
|
3
3
|
import { getSummerDir } from "./auth.js";
|
|
4
|
+
import { asRecord, numberFrom, stringFrom } from "./util/json.js";
|
|
5
|
+
import { processIsAlive } from "./util/process.js";
|
|
6
|
+
import { parseEngineCapabilities, } from "./capability-skew.js";
|
|
4
7
|
const DEFAULT_PORT = 6550;
|
|
5
8
|
const INSTANCE_SCHEMA_VERSION = 1;
|
|
6
9
|
const INSTANCE_STALE_MS = 180_000;
|
|
7
10
|
const MAX_INSTANCE_FILE_BYTES = 64 * 1024;
|
|
11
|
+
/** Env names the MCP server already honours for an explicit selection
|
|
12
|
+
* (src/mcp/server.ts startMcpServer). The CLI face reads the same two so a
|
|
13
|
+
* script can pin the editor without a per-command flag. */
|
|
14
|
+
export const ENGINE_PROJECT_ENV = "SUMMER_ENGINE_PROJECT";
|
|
15
|
+
export const ENGINE_INSTANCE_ENV = "SUMMER_ENGINE_INSTANCE_ID";
|
|
16
|
+
/** An explicit editor selection from the environment, or null when neither
|
|
17
|
+
* variable is set. */
|
|
18
|
+
export function engineSelectionFromEnv(env = process.env) {
|
|
19
|
+
const instanceId = stringFromUnknown(env[ENGINE_INSTANCE_ENV]);
|
|
20
|
+
const projectPath = stringFromUnknown(env[ENGINE_PROJECT_ENV]);
|
|
21
|
+
if (!instanceId && !projectPath)
|
|
22
|
+
return null;
|
|
23
|
+
return { instanceId, projectPath };
|
|
24
|
+
}
|
|
8
25
|
export async function getApiToken(summerDir = getSummerDir()) {
|
|
9
26
|
try {
|
|
10
27
|
const token = await readFile(join(summerDir, "api-token"), "utf-8");
|
|
@@ -29,22 +46,6 @@ function stringFromUnknown(value) {
|
|
|
29
46
|
? value.trim()
|
|
30
47
|
: undefined;
|
|
31
48
|
}
|
|
32
|
-
function numberFromUnknown(value) {
|
|
33
|
-
return typeof value === "number" && Number.isFinite(value)
|
|
34
|
-
? value
|
|
35
|
-
: undefined;
|
|
36
|
-
}
|
|
37
|
-
function processIsAlive(pid) {
|
|
38
|
-
if (!Number.isInteger(pid) || pid <= 0)
|
|
39
|
-
return false;
|
|
40
|
-
try {
|
|
41
|
-
process.kill(pid, 0);
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
return error.code === "EPERM";
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
49
|
async function canonicalPath(path) {
|
|
49
50
|
const absolute = resolve(path);
|
|
50
51
|
try {
|
|
@@ -84,11 +85,11 @@ function parseEngineInstance(value) {
|
|
|
84
85
|
if (!record || record.schemaVersion !== INSTANCE_SCHEMA_VERSION)
|
|
85
86
|
return null;
|
|
86
87
|
const instanceId = stringFromUnknown(record.instanceId);
|
|
87
|
-
const pid =
|
|
88
|
-
const port =
|
|
88
|
+
const pid = numberFrom(record.pid);
|
|
89
|
+
const port = numberFrom(record.port);
|
|
89
90
|
const token = stringFromUnknown(record.token);
|
|
90
91
|
const resourceRoot = stringFromUnknown(record.resourceRoot);
|
|
91
|
-
const heartbeatAt =
|
|
92
|
+
const heartbeatAt = numberFrom(record.heartbeatAt);
|
|
92
93
|
if (!instanceId ||
|
|
93
94
|
!pid ||
|
|
94
95
|
!Number.isInteger(pid) ||
|
|
@@ -255,16 +256,60 @@ export async function resolveEngineConnection(selection = {}, options = {}) {
|
|
|
255
256
|
source: "legacy",
|
|
256
257
|
};
|
|
257
258
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
259
|
+
/**
|
|
260
|
+
* The registry half of no-selection discovery (the CLI face; see
|
|
261
|
+
* EngineApiClient.connect, which reads the global pointer first). Editors
|
|
262
|
+
* launched `--summer-no-publish`, or a second editor that never owned the
|
|
263
|
+
* pointer, exist only here. "Live" = pid alive + heartbeat fresh
|
|
264
|
+
* (listEngineInstances) + /api/health answers with the registered instanceId.
|
|
265
|
+
*
|
|
266
|
+
* exactly one live editor -> that connection
|
|
267
|
+
* several -> the one whose project encloses `cwd`, else an
|
|
268
|
+
* error listing them and how to pick one
|
|
269
|
+
* none -> null (the caller words the "not running" error,
|
|
270
|
+
* since only it knows whether a pointer existed)
|
|
271
|
+
*
|
|
272
|
+
* Reads only `summerDir` (default ~/.summer); never the pointer files.
|
|
273
|
+
*/
|
|
274
|
+
export async function discoverRegistryConnection(options = {}) {
|
|
275
|
+
const summerDir = options.summerDir ?? getSummerDir();
|
|
276
|
+
const registered = await listEngineInstances(options.nowMs ?? Date.now(), summerDir);
|
|
277
|
+
const live = [];
|
|
278
|
+
for (const instance of registered) {
|
|
279
|
+
try {
|
|
280
|
+
live.push(await connectionForInstance(instance, {}));
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
// Not answering, or a different editor now owns that port: not live.
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (live.length === 0)
|
|
287
|
+
return null;
|
|
288
|
+
if (live.length === 1)
|
|
289
|
+
return live[0];
|
|
290
|
+
const projectRoot = await findProjectRoot(options.cwd ?? process.cwd());
|
|
291
|
+
if (projectRoot) {
|
|
292
|
+
const canonicalRoot = await canonicalPath(projectRoot);
|
|
293
|
+
const matching = live.filter((connection) => connection.instance?.resourceRoot === canonicalRoot);
|
|
294
|
+
if (matching.length === 1)
|
|
295
|
+
return matching[0];
|
|
296
|
+
}
|
|
297
|
+
const instances = live.map((connection) => connection.instance);
|
|
298
|
+
throw new Error("Multiple Summer editors are running and none of them has the project for the current directory open. " +
|
|
299
|
+
"Run this from inside the project directory, or pick one: " +
|
|
300
|
+
`set ${ENGINE_PROJECT_ENV}=<project path> (or ${ENGINE_INSTANCE_ENV}=<id>); ` +
|
|
301
|
+
"for the MCP server pass `summer mcp --project <path>` (or `--instance <id>`).\n" +
|
|
302
|
+
formatInstances(instances));
|
|
265
303
|
}
|
|
266
|
-
|
|
267
|
-
|
|
304
|
+
/** The no-selection "nothing reachable" error, worded by whether a pointer
|
|
305
|
+
* existed. Kept here so the CLI face and its tests share one text; the
|
|
306
|
+
* "no api-token found" phrase is what headless/resolve.ts keys on. */
|
|
307
|
+
export function engineNotRunningError(pointer, summerDir = getSummerDir()) {
|
|
308
|
+
const instancesDir = join(summerDir, "instances");
|
|
309
|
+
if (pointer.token) {
|
|
310
|
+
return new Error(`Summer Engine is not responding on port ${pointer.port} (stale api-token pointer) and no live editor is registered in ${instancesDir}. Make sure it's open.`);
|
|
311
|
+
}
|
|
312
|
+
return new Error(`Summer Engine is not running (no api-token found, no live editor registered in ${instancesDir}). Open Summer Engine first.`);
|
|
268
313
|
}
|
|
269
314
|
export async function checkEngineHealth(port) {
|
|
270
315
|
try {
|
|
@@ -294,6 +339,7 @@ export async function checkEngineHealth(port) {
|
|
|
294
339
|
projectIdHash: stringFrom(data.projectIdHash),
|
|
295
340
|
mainAliveMs: numberFrom(data.mainAliveMs),
|
|
296
341
|
queueDepth: numberFrom(data.queueDepth),
|
|
342
|
+
capabilities: parseEngineCapabilities(data.capabilities),
|
|
297
343
|
project_name: stringFrom(data.project_name),
|
|
298
344
|
project_path: stringFrom(data.project_path),
|
|
299
345
|
scene: stringFrom(data.scene),
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export declare function getFeedbackSessionId(): string;
|
|
2
|
+
/** Test-only seam. */
|
|
3
|
+
export declare function _resetFeedbackSessionForTests(): void;
|
|
4
|
+
/** Kill switches: send NOTHING when either is set to "1". */
|
|
5
|
+
export declare function isFeedbackDisabled(): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Anonymous install id: a random uuid persisted once in ~/.summer/.
|
|
8
|
+
* Falls back to an ephemeral uuid if the store is unreadable/unwritable —
|
|
9
|
+
* feedback must never fail because the store does.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getInstallId(): Promise<string>;
|
|
12
|
+
/**
|
|
13
|
+
* First-run notice gate: returns true exactly once per machine — the first
|
|
14
|
+
* time the feedback tool is ever called — and writes the marker so every
|
|
15
|
+
* later call returns false. That first call sends nothing (the notice must
|
|
16
|
+
* precede the first event). Errors → false (no notice beats a crash, and
|
|
17
|
+
* the disclosure also lives in the tool description).
|
|
18
|
+
*/
|
|
19
|
+
export declare function consumeFirstRunNotice(): Promise<boolean>;
|
|
20
|
+
/** Every field a report POST carries, in one place so the tool description,
|
|
21
|
+
* the first-run notice and the tests cannot disagree about what is sent. */
|
|
22
|
+
export declare const FEEDBACK_FIELDS_SENT: string;
|
|
23
|
+
export declare const FIRST_RUN_NOTICE: string;
|
|
24
|
+
export interface LibraryFeedbackReport {
|
|
25
|
+
entry_id: string;
|
|
26
|
+
outcome: "worked" | "worked_with_fixes" | "wrong" | "outdated" | "incomplete" | "did_not_apply" | "misrouted";
|
|
27
|
+
note?: string;
|
|
28
|
+
deviation?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SendLibraryFeedbackInput {
|
|
31
|
+
reports: LibraryFeedbackReport[];
|
|
32
|
+
engine_version: string;
|
|
33
|
+
/** Self-reported model id of the reporting agent ("unknown" allowed). */
|
|
34
|
+
agent_model: string;
|
|
35
|
+
/**
|
|
36
|
+
* Host app identity ("name version", e.g. "claude-code 2.1.0") captured
|
|
37
|
+
* from the MCP initialize handshake by the server adapter — never
|
|
38
|
+
* self-reported by the agent. Omitted when the handshake carried none.
|
|
39
|
+
*/
|
|
40
|
+
client?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Why a batch was dropped — so an agent can tell a missing endpoint from a
|
|
44
|
+
* network blip (E2E 2026-09-03 F-03: production answered 404 and the tool
|
|
45
|
+
* said only `dropped: true`). Describes the RESPONSE only; nothing about it
|
|
46
|
+
* is sent anywhere.
|
|
47
|
+
*/
|
|
48
|
+
export type FeedbackDropReason =
|
|
49
|
+
/** HTTP 404 — the gateway has no library-feedback route (deploy order). */
|
|
50
|
+
"endpoint_missing"
|
|
51
|
+
/** Any other 4xx — the gateway refused this batch (auth, schema, rate). */
|
|
52
|
+
| "rejected"
|
|
53
|
+
/** 5xx — the gateway failed; the route exists. */
|
|
54
|
+
| "server_error"
|
|
55
|
+
/** fetch threw: offline, DNS, TLS, or the 1s timeout. No response at all. */
|
|
56
|
+
| "network";
|
|
57
|
+
export interface SendLibraryFeedbackResult {
|
|
58
|
+
/** true ONLY when the gateway accepted the report (2xx) within the timeout. */
|
|
59
|
+
recorded: boolean;
|
|
60
|
+
/** present (true) only when disabled by env — nothing sent. */
|
|
61
|
+
disabled?: boolean;
|
|
62
|
+
/** present (true) only on the very first call ever made on this machine —
|
|
63
|
+
* nothing sent; `notice` explains and asks for a re-send. */
|
|
64
|
+
first_run?: boolean;
|
|
65
|
+
/** present (true) when the POST failed / timed out / was refused. There is
|
|
66
|
+
* no queue and no retry: the batch is gone. Honest, non-fatal. */
|
|
67
|
+
dropped?: boolean;
|
|
68
|
+
/** present alongside dropped — the HTTP status the gateway answered with;
|
|
69
|
+
* absent when the request never got a response (reason "network"). */
|
|
70
|
+
status?: number;
|
|
71
|
+
/** present alongside dropped — see FeedbackDropReason. */
|
|
72
|
+
reason?: FeedbackDropReason;
|
|
73
|
+
/** present only alongside first_run. */
|
|
74
|
+
notice?: string;
|
|
75
|
+
}
|
|
76
|
+
/** Classify a non-2xx response. Exported for tests. */
|
|
77
|
+
export declare function dropReasonForStatus(status: number): FeedbackDropReason;
|
|
78
|
+
/**
|
|
79
|
+
* Send one batched feedback report. Never throws. Blocks at most TIMEOUT_MS.
|
|
80
|
+
*
|
|
81
|
+
* Result matrix:
|
|
82
|
+
* - env kill switch → { recorded: false, disabled: true } (nothing sent)
|
|
83
|
+
* - first call on machine → { recorded: false, first_run: true, notice } (nothing sent)
|
|
84
|
+
* - gateway accepted (2xx) → { recorded: true }
|
|
85
|
+
* - non-2xx → { recorded: false, dropped: true, status, reason } (no retry exists)
|
|
86
|
+
* - fetch threw / timed out → { recorded: false, dropped: true, reason: "network" }
|
|
87
|
+
*/
|
|
88
|
+
export declare function sendLibraryFeedback(input: SendLibraryFeedbackInput): Promise<SendLibraryFeedbackResult>;
|