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,58 @@
|
|
|
1
|
+
import type { EngineSnapshot } from "../api-client.js";
|
|
2
|
+
import type { WorkerConnection } from "./worker-connection.js";
|
|
3
|
+
import { type EngineCapabilities } from "../capability-skew.js";
|
|
4
|
+
type JsonRecord = Record<string, unknown>;
|
|
5
|
+
export declare class WorkerEngineClient {
|
|
6
|
+
private connection;
|
|
7
|
+
/** Last `status` answer, for the capability/version getters withEngine's
|
|
8
|
+
* pre-flight (missingEngineOpResult) and skew warning read synchronously. */
|
|
9
|
+
private lastStatus;
|
|
10
|
+
constructor(connection: WorkerConnection);
|
|
11
|
+
get projectPath(): string;
|
|
12
|
+
isAlive(): boolean;
|
|
13
|
+
close(): void;
|
|
14
|
+
health(): Promise<unknown>;
|
|
15
|
+
/** The worker's capability advert from the last `status` read (health()),
|
|
16
|
+
* or undefined before the first read / when the worker advertises none.
|
|
17
|
+
* Same contract as EngineApiClient.getEngineCapabilities: an absent
|
|
18
|
+
* advert proves nothing, so the pre-flight lets the call through. */
|
|
19
|
+
getEngineCapabilities(): EngineCapabilities | undefined;
|
|
20
|
+
/** Engine version string from the last `status` read, for skew messages. */
|
|
21
|
+
getEngineVersion(): string | undefined;
|
|
22
|
+
readFile(path: string, maxBytes?: number): Promise<unknown>;
|
|
23
|
+
readProjectFile(path: string, maxBytes?: number): Promise<unknown>;
|
|
24
|
+
getFsTree(root?: string, _limit?: number): Promise<unknown>;
|
|
25
|
+
getSceneState(scenePath?: string, _options?: {
|
|
26
|
+
depth?: number;
|
|
27
|
+
limit?: number;
|
|
28
|
+
}): Promise<unknown>;
|
|
29
|
+
play(scene?: string): Promise<unknown>;
|
|
30
|
+
stop(): Promise<unknown>;
|
|
31
|
+
gameSnapshot(): Promise<EngineSnapshot>;
|
|
32
|
+
/**
|
|
33
|
+
* The worker exposes a fixed op set, not the editor's generic ops queue.
|
|
34
|
+
* Batches made ONLY of ops with worker equivalents are translated
|
|
35
|
+
* (WriteFile -> fs.write, GetConsoleOutput -> game.logs {tail},
|
|
36
|
+
* IsGameRunning -> game.logs reading result.running); anything else fails
|
|
37
|
+
* loudly BEFORE any op in the batch is applied.
|
|
38
|
+
*/
|
|
39
|
+
executeOps(ops: JsonRecord[], _options?: JsonRecord): Promise<unknown>;
|
|
40
|
+
executeIdentityBoundOps(ops: JsonRecord[], options?: JsonRecord): Promise<unknown>;
|
|
41
|
+
getBoundProjectIdHash(): string | undefined;
|
|
42
|
+
rebind(): Promise<string | undefined>;
|
|
43
|
+
getPort(): number;
|
|
44
|
+
credentialsChanged(): Promise<boolean>;
|
|
45
|
+
getProjectState(_prefix?: string): Promise<unknown>;
|
|
46
|
+
getDiagnostics(): Promise<unknown>;
|
|
47
|
+
inspectNode(_path: string): Promise<unknown>;
|
|
48
|
+
inspectResource(_path: string): Promise<unknown>;
|
|
49
|
+
getScriptErrors(_path: string): Promise<unknown>;
|
|
50
|
+
getSelection(): Promise<unknown>;
|
|
51
|
+
viewportSnapshot(): Promise<EngineSnapshot>;
|
|
52
|
+
scenePreview(_input?: unknown): Promise<EngineSnapshot>;
|
|
53
|
+
/** The worker has no events channel (no /api/events); the events tools'
|
|
54
|
+
* pre-flight already refuses on a status without capabilities.events, so
|
|
55
|
+
* this is reached only with SUMMER_CAPABILITY_PREFLIGHT=off. */
|
|
56
|
+
pollEvents(_params?: unknown, _timeoutMs?: number): Promise<unknown>;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { parseEngineCapabilities, } from "../capability-skew.js";
|
|
2
|
+
import { UnsupportedOperationError } from "../tool-errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* EngineApiClient-shaped facade over a WorkerConnection, so the existing MCP
|
|
5
|
+
* tool handlers (which all call typed methods on the client withEngine hands
|
|
6
|
+
* them) can be served by a headless worker WITHOUT any tool-file changes.
|
|
7
|
+
*
|
|
8
|
+
* Implements the FULL public method surface of EngineApiClient:
|
|
9
|
+
* - methods with a worker equivalent delegate to the worker op
|
|
10
|
+
* - methods without one throw a clean, actionable error, which withEngine
|
|
11
|
+
* surfaces verbatim as an isError tool result — nothing is silently faked
|
|
12
|
+
*
|
|
13
|
+
* The MCP wiring (mcp-routing.ts) returns this cast to EngineApiClient; the
|
|
14
|
+
* cast is sound because every public method exists here. Only reachable when
|
|
15
|
+
* SUMMER_HEADLESS_ROUTING=1 and no live editor has the project open.
|
|
16
|
+
*/
|
|
17
|
+
/** Tagged so withEngine classifies it "unsupported" (nothing sent, keep the
|
|
18
|
+
* client, no transport recovery recipe) instead of "transport". */
|
|
19
|
+
function unsupported(method) {
|
|
20
|
+
throw new UnsupportedOperationError(`"${method}" is not supported by the headless worker serving this project. ` +
|
|
21
|
+
"Only file, import, scene-read, and game run/stop/log/screenshot operations work headless. " +
|
|
22
|
+
"Open the project in the Summer editor (npx -y summer-engine@latest run <path>) for full coverage.");
|
|
23
|
+
}
|
|
24
|
+
/** Worker ops take project-relative paths; the editor tool surface speaks
|
|
25
|
+
* res:// URIs. Strip the scheme before anything crosses the wire (the
|
|
26
|
+
* worker is also adding acceptance — both sides tolerate both forms). */
|
|
27
|
+
function stripRes(path) {
|
|
28
|
+
return path.startsWith("res://") ? path.slice("res://".length) : path;
|
|
29
|
+
}
|
|
30
|
+
export class WorkerEngineClient {
|
|
31
|
+
connection;
|
|
32
|
+
/** Last `status` answer, for the capability/version getters withEngine's
|
|
33
|
+
* pre-flight (missingEngineOpResult) and skew warning read synchronously. */
|
|
34
|
+
lastStatus;
|
|
35
|
+
constructor(connection) {
|
|
36
|
+
this.connection = connection;
|
|
37
|
+
}
|
|
38
|
+
get projectPath() {
|
|
39
|
+
return this.connection.projectPath;
|
|
40
|
+
}
|
|
41
|
+
isAlive() {
|
|
42
|
+
return this.connection.isAlive();
|
|
43
|
+
}
|
|
44
|
+
close() {
|
|
45
|
+
this.connection.close();
|
|
46
|
+
}
|
|
47
|
+
// ---- supported surface -------------------------------------------------
|
|
48
|
+
async health() {
|
|
49
|
+
const status = await this.connection.call("status");
|
|
50
|
+
this.lastStatus =
|
|
51
|
+
status && typeof status === "object" && !Array.isArray(status)
|
|
52
|
+
? status
|
|
53
|
+
: undefined;
|
|
54
|
+
return status;
|
|
55
|
+
}
|
|
56
|
+
/** The worker's capability advert from the last `status` read (health()),
|
|
57
|
+
* or undefined before the first read / when the worker advertises none.
|
|
58
|
+
* Same contract as EngineApiClient.getEngineCapabilities: an absent
|
|
59
|
+
* advert proves nothing, so the pre-flight lets the call through. */
|
|
60
|
+
getEngineCapabilities() {
|
|
61
|
+
return parseEngineCapabilities(this.lastStatus?.capabilities);
|
|
62
|
+
}
|
|
63
|
+
/** Engine version string from the last `status` read, for skew messages. */
|
|
64
|
+
getEngineVersion() {
|
|
65
|
+
const version = this.lastStatus?.version;
|
|
66
|
+
return typeof version === "string" && version.length > 0 ? version : undefined;
|
|
67
|
+
}
|
|
68
|
+
async readFile(path, maxBytes) {
|
|
69
|
+
// Worker supports maxBytes up to 8MiB — clamp client-side.
|
|
70
|
+
const clamped = maxBytes !== undefined
|
|
71
|
+
? Math.min(maxBytes, 8 * 1024 * 1024)
|
|
72
|
+
: undefined;
|
|
73
|
+
return this.connection.call("fs.read", {
|
|
74
|
+
path: stripRes(path),
|
|
75
|
+
...(clamped !== undefined ? { maxBytes: clamped } : {}),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async readProjectFile(path, maxBytes = 200_000) {
|
|
79
|
+
return this.readFile(path, maxBytes);
|
|
80
|
+
}
|
|
81
|
+
async getFsTree(root = "res://", _limit = 2000) {
|
|
82
|
+
// Worker contract: fs.list takes {dir}, project-relative — the default
|
|
83
|
+
// res:// root maps to "" (project root). `limit` is not implemented
|
|
84
|
+
// worker-side — dropped (results are project-file listings, bounded in
|
|
85
|
+
// practice by the project itself).
|
|
86
|
+
return this.connection.call("fs.list", { dir: stripRes(root) });
|
|
87
|
+
}
|
|
88
|
+
async getSceneState(scenePath, _options) {
|
|
89
|
+
// Worker contract: scene.read takes {path}. depth/limit are not part of
|
|
90
|
+
// the worker contract — dropped (the editor path still honors them).
|
|
91
|
+
return this.connection.call("scene.read", {
|
|
92
|
+
...(scenePath ? { path: stripRes(scenePath) } : {}),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async play(scene) {
|
|
96
|
+
return this.connection.call("game.run", scene ? { scene: stripRes(scene) } : {});
|
|
97
|
+
}
|
|
98
|
+
async stop() {
|
|
99
|
+
return this.connection.call("game.stop", {}, { timeoutMs: 15_000 });
|
|
100
|
+
}
|
|
101
|
+
async gameSnapshot() {
|
|
102
|
+
try {
|
|
103
|
+
const result = (await this.connection.call("game.screenshot"));
|
|
104
|
+
const base64 = typeof result?.base64 === "string"
|
|
105
|
+
? result.base64
|
|
106
|
+
: typeof result?.image_base64 === "string"
|
|
107
|
+
? result.image_base64
|
|
108
|
+
: undefined;
|
|
109
|
+
return { ok: true, ...(result ?? {}), base64 };
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
113
|
+
return {
|
|
114
|
+
ok: false,
|
|
115
|
+
error: message.includes("needs_display")
|
|
116
|
+
? "The headless worker has no display to capture. Open the project in the Summer editor to take game screenshots."
|
|
117
|
+
: message,
|
|
118
|
+
...(message.includes("needs_display")
|
|
119
|
+
? { failureReason: "needs_display" }
|
|
120
|
+
: {}),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* The worker exposes a fixed op set, not the editor's generic ops queue.
|
|
126
|
+
* Batches made ONLY of ops with worker equivalents are translated
|
|
127
|
+
* (WriteFile -> fs.write, GetConsoleOutput -> game.logs {tail},
|
|
128
|
+
* IsGameRunning -> game.logs reading result.running); anything else fails
|
|
129
|
+
* loudly BEFORE any op in the batch is applied.
|
|
130
|
+
*/
|
|
131
|
+
async executeOps(ops, _options) {
|
|
132
|
+
const supported = new Set(["WriteFile", "GetConsoleOutput", "IsGameRunning"]);
|
|
133
|
+
const rejected = ops.find((op) => !supported.has(String(op.op)));
|
|
134
|
+
if (rejected) {
|
|
135
|
+
unsupported(`executeOps op "${String(rejected.op)}"`);
|
|
136
|
+
}
|
|
137
|
+
const results = [];
|
|
138
|
+
for (const op of ops) {
|
|
139
|
+
const name = String(op.op);
|
|
140
|
+
if (name === "WriteFile") {
|
|
141
|
+
const result = await this.connection.call("fs.write", {
|
|
142
|
+
path: stripRes(String(op.path ?? "")),
|
|
143
|
+
content: op.content,
|
|
144
|
+
...(op.expectedSha256 !== undefined
|
|
145
|
+
? { expectedSha256: op.expectedSha256 }
|
|
146
|
+
: {}),
|
|
147
|
+
...(op.mustNotExist === true ? { mustNotExist: true } : {}),
|
|
148
|
+
});
|
|
149
|
+
results.push({ ok: true, op: name, ...result });
|
|
150
|
+
}
|
|
151
|
+
else if (name === "GetConsoleOutput") {
|
|
152
|
+
// Worker contract: game.logs takes {tail}; filter/type are not
|
|
153
|
+
// supported worker-side. `filter` is applied client-side on the
|
|
154
|
+
// returned lines; `type` is dropped (documented in
|
|
155
|
+
// docs/HEADLESS_ROUTING.md).
|
|
156
|
+
const result = (await this.connection.call("game.logs", {
|
|
157
|
+
...(op.max_lines !== undefined ? { tail: op.max_lines } : {}),
|
|
158
|
+
}));
|
|
159
|
+
let shaped = result;
|
|
160
|
+
const filter = typeof op.filter === "string" ? op.filter : null;
|
|
161
|
+
if (filter && result && Array.isArray(result.lines)) {
|
|
162
|
+
shaped = {
|
|
163
|
+
...result,
|
|
164
|
+
lines: result.lines.filter((line) => typeof line === "string" && line.includes(filter)),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
results.push({ ok: true, op: name, ...(shaped ?? {}) });
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
// IsGameRunning: the worker's status op has NO running field — the
|
|
171
|
+
// authoritative flag rides on game.logs as result.running. Before
|
|
172
|
+
// the first game.run, older workers ERROR on game.logs while newer
|
|
173
|
+
// ones answer {running:false}; both mean "not running" and must
|
|
174
|
+
// never throw. Transport failures (dead connection) still propagate.
|
|
175
|
+
let running = false;
|
|
176
|
+
try {
|
|
177
|
+
const result = (await this.connection.call("game.logs", {
|
|
178
|
+
tail: 0,
|
|
179
|
+
}));
|
|
180
|
+
running = result?.running === true;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
const isWorkerAnswer = error instanceof Error && error.name === "WorkerOpError";
|
|
184
|
+
if (!isWorkerAnswer)
|
|
185
|
+
throw error;
|
|
186
|
+
// The worker answered with an error — no game session exists.
|
|
187
|
+
running = false;
|
|
188
|
+
}
|
|
189
|
+
results.push({ ok: true, op: name, running });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { ok: true, results };
|
|
193
|
+
}
|
|
194
|
+
async executeIdentityBoundOps(ops, options) {
|
|
195
|
+
// A worker serves exactly one project by construction — the identity
|
|
196
|
+
// binding the editor needs (project switches under one HTTP port) has no
|
|
197
|
+
// headless analogue.
|
|
198
|
+
return this.executeOps(ops, options);
|
|
199
|
+
}
|
|
200
|
+
// ---- identity / cache plumbing getClient() relies on --------------------
|
|
201
|
+
getBoundProjectIdHash() {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
async rebind() {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
getPort() {
|
|
208
|
+
return -1;
|
|
209
|
+
}
|
|
210
|
+
async credentialsChanged() {
|
|
211
|
+
// A dropped worker socket = stale client; getClient's cache check drops
|
|
212
|
+
// it and the next call re-resolves (editor-beats-worker-beats-spawn).
|
|
213
|
+
return !this.connection.isAlive();
|
|
214
|
+
}
|
|
215
|
+
// ---- editor-only surface (fails loudly, never fakes) --------------------
|
|
216
|
+
async getProjectState(_prefix) {
|
|
217
|
+
unsupported("getProjectState");
|
|
218
|
+
}
|
|
219
|
+
async getDiagnostics() {
|
|
220
|
+
unsupported("getDiagnostics");
|
|
221
|
+
}
|
|
222
|
+
async inspectNode(_path) {
|
|
223
|
+
unsupported("inspectNode");
|
|
224
|
+
}
|
|
225
|
+
async inspectResource(_path) {
|
|
226
|
+
unsupported("inspectResource");
|
|
227
|
+
}
|
|
228
|
+
async getScriptErrors(_path) {
|
|
229
|
+
unsupported("getScriptErrors");
|
|
230
|
+
}
|
|
231
|
+
async getSelection() {
|
|
232
|
+
unsupported("getSelection");
|
|
233
|
+
}
|
|
234
|
+
async viewportSnapshot() {
|
|
235
|
+
unsupported("viewportSnapshot");
|
|
236
|
+
}
|
|
237
|
+
async scenePreview(_input) {
|
|
238
|
+
unsupported("scenePreview");
|
|
239
|
+
}
|
|
240
|
+
/** The worker has no events channel (no /api/events); the events tools'
|
|
241
|
+
* pre-flight already refuses on a status without capabilities.events, so
|
|
242
|
+
* this is reached only with SUMMER_CAPABILITY_PREFLIGHT=off. */
|
|
243
|
+
async pollEvents(_params, _timeoutMs) {
|
|
244
|
+
unsupported("pollEvents");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor launch posture — the ONE place that decides whether `summer run`
|
|
3
|
+
* brings the Summer window to the front or leaves it in the background.
|
|
4
|
+
*
|
|
5
|
+
* The problem: when an agent drives Summer, every editor launch activates the
|
|
6
|
+
* app and steals the user's screen, so they cannot keep working while their
|
|
7
|
+
* game is built. The engine grows a launch posture for this:
|
|
8
|
+
*
|
|
9
|
+
* focus today's launch — the window appears and takes focus.
|
|
10
|
+
* background `--summer-background` — the window exists but never activates
|
|
11
|
+
* or takes focus until the user clicks it.
|
|
12
|
+
* offscreen `--summer-offscreen` (also `--summer-verify`) — never
|
|
13
|
+
* activates, never frontmost; on shipped engines an unfocusable
|
|
14
|
+
* window pushed off-screen where a sliver may stay visible
|
|
15
|
+
* (main.cpp says so), on the background-posture engine a
|
|
16
|
+
* no-Dock-icon accessory process. Used by RunVerification /
|
|
17
|
+
* offscreen play instances, never by `summer run`.
|
|
18
|
+
*
|
|
19
|
+
* Default posture: BACKGROUND when stdout is not a TTY, FOCUS when it is. A
|
|
20
|
+
* human typing `summer run` in a terminal wants to see the editor come up —
|
|
21
|
+
* that is the whole point of the command for them. An agent (Claude Code's
|
|
22
|
+
* Bash tool, an MCP host, a CI shell) never has a TTY on stdout, and for it
|
|
23
|
+
* the launch is a means to an end: the user is doing something else on the
|
|
24
|
+
* same Mac and must not be interrupted. `--focus` / `--background` override
|
|
25
|
+
* the heuristic either way; pass one explicitly in scripts.
|
|
26
|
+
*
|
|
27
|
+
* Engine support: the flag ships in a future 0.5.x. Godot's argument parser
|
|
28
|
+
* passes an unknown `--x` through to main_args instead of rejecting it
|
|
29
|
+
* (main/main.cpp, final `else` of the parse loop), so an old engine would not
|
|
30
|
+
* fail — it would silently launch WITH focus while the toolkit claimed a
|
|
31
|
+
* background launch. That is the lie we refuse to tell: the flag is passed
|
|
32
|
+
* only when the installed engine is known to honour it, and otherwise the
|
|
33
|
+
* caller gets a one-line note. The engine is not running before `summer run`,
|
|
34
|
+
* so /api/health cannot be consulted. Two pre-launch sources, in order:
|
|
35
|
+
*
|
|
36
|
+
* 1. `<binary> --help` and look for the flag in the help text — the PRIMARY
|
|
37
|
+
* gate. `--help` is handled in Main::setup() before any display server
|
|
38
|
+
* exists (main.cpp `arg == "--help"` -> ERR_HELP), and on macOS it is in
|
|
39
|
+
* OS_MacOS::headless_args (os_macos.h; godot_main_macos.mm sets
|
|
40
|
+
* is_headless and instantiates OS_MacOS_Headless), so the bundle runs
|
|
41
|
+
* with no NSApp, no window, no activation, no Dock bounce. Definitive on
|
|
42
|
+
* every engine version; the only probe that never lies. The answer is
|
|
43
|
+
* cached per binary path + mtime + size in ~/.summer, so it runs once per
|
|
44
|
+
* install.
|
|
45
|
+
* 2. The installed version (macOS Info.plist, Windows Velopack sq.version)
|
|
46
|
+
* is ONLY the fallback when `--help` cannot run (spawn error, timeout).
|
|
47
|
+
* It is never a pre-check: pre-release and dev builds carry the flag
|
|
48
|
+
* while still stamped with the previous version (the first such build
|
|
49
|
+
* says 0.5.65), so a version gate would refuse exactly the builds being
|
|
50
|
+
* verified. Linux exposes no version file, so there it reads unknown.
|
|
51
|
+
*
|
|
52
|
+
* Once the engine is up, /api/health `capabilities.launchPostures`
|
|
53
|
+
* (["focus","background","offscreen"] on macOS builds, ["focus"] elsewhere,
|
|
54
|
+
* absent on older engines = ["focus"]) is the authoritative advert and is
|
|
55
|
+
* used for the post-launch note.
|
|
56
|
+
*
|
|
57
|
+
* `summer run` spawns the executable directly (Summer.app/Contents/MacOS/Summer
|
|
58
|
+
* on macOS), never through `open` — LaunchServices would activate the app and
|
|
59
|
+
* defeat the posture whatever flags were passed. The same holds for a
|
|
60
|
+
* `--bin` / SUMMER_BIN override: it must be the in-bundle executable, and the
|
|
61
|
+
* --help probe below runs against THAT binary (cache key: path + mtime + size).
|
|
62
|
+
*/
|
|
63
|
+
import { spawn } from "node:child_process";
|
|
64
|
+
import type { EngineCapabilities } from "./capability-skew.js";
|
|
65
|
+
export type LaunchPosture = "focus" | "background";
|
|
66
|
+
/** Engine flag for the background posture (main/main.cpp). */
|
|
67
|
+
export declare const BACKGROUND_LAUNCH_FLAG = "--summer-background";
|
|
68
|
+
/** First RELEASED engine version expected to honour BACKGROUND_LAUNCH_FLAG.
|
|
69
|
+
* Used only when the --help probe cannot run; dev/pre-release builds carry
|
|
70
|
+
* the flag while still stamped 0.5.65, which is why the probe is the gate. */
|
|
71
|
+
export declare const BACKGROUND_LAUNCH_MIN_ENGINE_VERSION = "0.5.66";
|
|
72
|
+
export interface LaunchPostureFlags {
|
|
73
|
+
focus?: boolean;
|
|
74
|
+
background?: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface LaunchIo {
|
|
77
|
+
/** `process.stdout.isTTY` — true only for a human at a terminal. */
|
|
78
|
+
stdoutIsTTY: boolean;
|
|
79
|
+
}
|
|
80
|
+
/** BACKGROUND for agents (no TTY), FOCUS for a human at a terminal. */
|
|
81
|
+
export declare function defaultLaunchPosture(io: LaunchIo): LaunchPosture;
|
|
82
|
+
/** Explicit flag wins; both flags together is a caller error. */
|
|
83
|
+
export declare function resolveLaunchPosture(flags: LaunchPostureFlags, io: LaunchIo): LaunchPosture;
|
|
84
|
+
export type BackgroundLaunchSupport = {
|
|
85
|
+
supported: true;
|
|
86
|
+
source: "help_probe" | "version";
|
|
87
|
+
version: string | null;
|
|
88
|
+
} | {
|
|
89
|
+
supported: false;
|
|
90
|
+
source: "help_probe" | "version";
|
|
91
|
+
reason: "engine_too_old";
|
|
92
|
+
version: string | null;
|
|
93
|
+
} | {
|
|
94
|
+
supported: false;
|
|
95
|
+
source: "version";
|
|
96
|
+
reason: "version_unknown";
|
|
97
|
+
version: null;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Whether the installed engine honours the background flag. The `--help`
|
|
101
|
+
* probe answer (true/false) is definitive when it ran; a probe that could not
|
|
102
|
+
* run (null) falls back to the version gate, where an unreadable or
|
|
103
|
+
* unparseable version is "unknown", never "supported".
|
|
104
|
+
*/
|
|
105
|
+
export declare function backgroundLaunchSupport(installedVersion: string | null | undefined, helpProbe?: boolean | null): BackgroundLaunchSupport;
|
|
106
|
+
/** True when the help text of an engine binary lists the background flag. */
|
|
107
|
+
export declare function helpTextListsBackgroundFlag(helpText: string): boolean;
|
|
108
|
+
export declare const HELP_PROBE_TIMEOUT_MS = 5000;
|
|
109
|
+
/** The bit of child_process.spawn the probe uses; injectable for tests. */
|
|
110
|
+
export type HelpProbeSpawn = (command: string, args: string[], options: {
|
|
111
|
+
stdio: ["ignore", "pipe", "pipe"];
|
|
112
|
+
}) => ReturnType<typeof spawn>;
|
|
113
|
+
/**
|
|
114
|
+
* Run `<binary> --help` and report whether the flag is listed: true / false,
|
|
115
|
+
* or null when the probe could not answer (spawn error, timeout). Safe on
|
|
116
|
+
* every version: --help exits in Main::setup() before a display server exists,
|
|
117
|
+
* and the macOS bundle runs it headless (OS_MacOS::headless_args), so nothing
|
|
118
|
+
* appears on screen and nothing is activated.
|
|
119
|
+
*/
|
|
120
|
+
export declare function probeBackgroundLaunchSupport(binary: string, timeoutMs?: number, spawnImpl?: HelpProbeSpawn): Promise<boolean | null>;
|
|
121
|
+
export declare const HELP_PROBE_CACHE_FILE = "launch-probe-cache.json";
|
|
122
|
+
export interface DetectBackgroundSupportOptions {
|
|
123
|
+
/** Installed version if already read; undefined = read it from the binary. */
|
|
124
|
+
installedVersion?: string | null;
|
|
125
|
+
summerDir?: string;
|
|
126
|
+
probe?: (binary: string) => Promise<boolean | null>;
|
|
127
|
+
now?: number;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* The pre-launch decision for one binary, in the order the module header
|
|
131
|
+
* describes: cached `--help` answer, fresh `--help` probe (cached when it
|
|
132
|
+
* answers), and the version gate ONLY as the fallback when the probe cannot
|
|
133
|
+
* run. The probe is the sole positive gate — no version pre-check, so a dev
|
|
134
|
+
* build stamped 0.5.65 that lists the flag launches in the background.
|
|
135
|
+
*/
|
|
136
|
+
export declare function detectBackgroundLaunchSupport(binary: string, options?: DetectBackgroundSupportOptions): Promise<BackgroundLaunchSupport>;
|
|
137
|
+
/**
|
|
138
|
+
* The running engine's own word, once it is up: /api/health
|
|
139
|
+
* `capabilities.launchPostures` (engine tool_net_thread.cpp, newer builds;
|
|
140
|
+
* "focus" always, "background" / "offscreen" only where enforced). true /
|
|
141
|
+
* false when advertised, null when the engine predates the advert.
|
|
142
|
+
*/
|
|
143
|
+
export declare function advertisedBackgroundPosture(capabilities: EngineCapabilities | undefined | null): boolean | null;
|
|
144
|
+
export interface LaunchPlan {
|
|
145
|
+
posture: LaunchPosture;
|
|
146
|
+
/** Extra engine argv (after --path/--editor). Empty for focus, or when the
|
|
147
|
+
* engine cannot honour background. */
|
|
148
|
+
extraArgs: string[];
|
|
149
|
+
/** True when the launch will actually stay in the background. */
|
|
150
|
+
background: boolean;
|
|
151
|
+
/** One line for the caller when background was requested but will not
|
|
152
|
+
* happen (or cannot be verified). Null when there is nothing to say. */
|
|
153
|
+
note: string | null;
|
|
154
|
+
}
|
|
155
|
+
/** The launch decision: which flags to pass and what to tell the caller. */
|
|
156
|
+
export declare function planLaunch(posture: LaunchPosture, support: BackgroundLaunchSupport): LaunchPlan;
|
|
157
|
+
/** CFBundleShortVersionString out of a macOS Info.plist. */
|
|
158
|
+
export declare function parseMacBundleVersion(plistText: string): string | null;
|
|
159
|
+
/** Version string of an installed macOS bundle, or null when unreadable. */
|
|
160
|
+
export declare function readMacBundleVersion(appPath: string): string | null;
|
|
161
|
+
/** `<version>` out of a Velopack `sq.version` file (the nuspec Velopack drops
|
|
162
|
+
* next to the current binary on Windows). Best effort: any other shape reads
|
|
163
|
+
* as unknown. */
|
|
164
|
+
export declare function parseVelopackVersion(sqVersionText: string): string | null;
|
|
165
|
+
/**
|
|
166
|
+
* Installed engine version for a resolved engine binary, or null. macOS reads
|
|
167
|
+
* the bundle's Info.plist; Windows reads Velopack's sq.version beside the exe;
|
|
168
|
+
* Linux has no version source today and always reads null.
|
|
169
|
+
*/
|
|
170
|
+
export declare function readInstalledEngineVersion(binary: string, os?: NodeJS.Platform): string | null;
|