summer-engine 2.8.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +131 -44
- package/CLAUDE.md +4 -2
- package/GEMINI.md +7 -53
- package/NOTICE +31 -0
- package/README.md +159 -391
- 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/{commands → cli/commands}/setup.js +43 -89
- package/dist/{commands → cli/commands}/skills.js +85 -222
- 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 +47 -0
- package/dist/core/skills-registry.js +83 -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/{lib → installer}/agent-config.d.ts +20 -1
- package/dist/{lib → installer}/agent-config.js +138 -24
- 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 +146 -0
- package/dist/installer/skill-locations.d.ts +45 -0
- package/dist/installer/skill-locations.js +170 -0
- package/dist/installer/version-check.d.ts +174 -0
- package/dist/{lib → installer}/version-check.js +173 -42
- 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 +70 -0
- package/integrations/claude/README.md +19 -0
- package/integrations/claude/manifest-target.json +16 -0
- package/integrations/cline/README.md +13 -0
- package/integrations/cline/manifest-target.json +3 -0
- package/integrations/codex/README.md +15 -0
- package/integrations/codex/manifest-target.json +5 -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/kilo-code/README.md +16 -0
- package/integrations/kilo-code/manifest-target.json +3 -0
- package/integrations/lm-studio/README.md +12 -0
- package/integrations/lm-studio/manifest-target.json +3 -0
- package/integrations/opencode/README.md +15 -0
- package/integrations/opencode/manifest-target.json +3 -0
- package/integrations/roo-code/README.md +13 -0
- package/integrations/roo-code/manifest-target.json +3 -0
- package/integrations/vscode-copilot/README.md +12 -0
- package/integrations/vscode-copilot/manifest-target.json +3 -0
- package/integrations/windsurf/README.md +13 -0
- package/integrations/windsurf/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/{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 +22 -16
- 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-registry.json +851 -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/status.js +0 -46
- 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/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
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
/** Guard a download URL from the releases endpoint. A missing/empty URL (an
|
|
3
|
-
* outdated or misconfigured endpoint) otherwise becomes a cryptic
|
|
4
|
-
* fetch(undefined) failure — surface it clearly with a manual fallback. */
|
|
5
|
-
export declare function requireDownloadUrl(value: string | undefined, label: string): string;
|
|
6
|
-
/** Verify a downloaded file's sha256 against the expected hash from the releases
|
|
7
|
-
* endpoint. Skipped when no expected hash is published. Catches a truncated or
|
|
8
|
-
* corrupted download (a ~1GB install over a flaky network) before it becomes a
|
|
9
|
-
* confusing DMG-mount / installer failure downstream. */
|
|
10
|
-
export declare function verifyChecksum(actual: string, expected: string | undefined, label: string): void;
|
|
11
|
-
/** Velopack Setup.exe install args. Velopack is NOT NSIS: silent install is
|
|
12
|
-
* `--silent` and a custom directory is `--installto <dir>` (per Velopack's
|
|
13
|
-
* setup.exe CLI). The old NSIS flags (/S, /D=) are rejected by the Velopack
|
|
14
|
-
* installer with "unexpected argument '/S' found" — this is the wizard bug. */
|
|
15
|
-
export declare function windowsInstallerArgs(customPath?: string): string;
|
|
16
|
-
export declare const installCommand: Command;
|
|
17
|
-
export declare function downloadFile(url: string, dest: string): Promise<{
|
|
18
|
-
sha256: string;
|
|
19
|
-
}>;
|
package/dist/commands/install.js
DELETED
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { execSync } from "child_process";
|
|
3
|
-
import { createHash } from "crypto";
|
|
4
|
-
import { createWriteStream, existsSync, mkdirSync } from "fs";
|
|
5
|
-
import { pipeline } from "stream/promises";
|
|
6
|
-
import { Readable } from "stream";
|
|
7
|
-
import { tmpdir, platform } from "os";
|
|
8
|
-
import { join } from "path";
|
|
9
|
-
const RELEASES_URL = "https://www.summerengine.com/api/desktop/releases";
|
|
10
|
-
/** Guard a download URL from the releases endpoint. A missing/empty URL (an
|
|
11
|
-
* outdated or misconfigured endpoint) otherwise becomes a cryptic
|
|
12
|
-
* fetch(undefined) failure — surface it clearly with a manual fallback. */
|
|
13
|
-
export function requireDownloadUrl(value, label) {
|
|
14
|
-
if (!value || value.trim().length === 0) {
|
|
15
|
-
throw new Error(`Release info is missing the ${label} download URL — the releases endpoint may be ` +
|
|
16
|
-
`outdated. Download manually from https://summerengine.com/download`);
|
|
17
|
-
}
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
/** Verify a downloaded file's sha256 against the expected hash from the releases
|
|
21
|
-
* endpoint. Skipped when no expected hash is published. Catches a truncated or
|
|
22
|
-
* corrupted download (a ~1GB install over a flaky network) before it becomes a
|
|
23
|
-
* confusing DMG-mount / installer failure downstream. */
|
|
24
|
-
export function verifyChecksum(actual, expected, label) {
|
|
25
|
-
if (!expected || expected.trim().length === 0)
|
|
26
|
-
return; // nothing published to verify against
|
|
27
|
-
if (actual.toLowerCase() !== expected.toLowerCase()) {
|
|
28
|
-
throw new Error(`${label} checksum mismatch — the download was corrupted or incomplete ` +
|
|
29
|
-
`(expected ${expected.slice(0, 12)}…, got ${actual.slice(0, 12)}…). Re-run \`summer install\`.`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/** Velopack Setup.exe install args. Velopack is NOT NSIS: silent install is
|
|
33
|
-
* `--silent` and a custom directory is `--installto <dir>` (per Velopack's
|
|
34
|
-
* setup.exe CLI). The old NSIS flags (/S, /D=) are rejected by the Velopack
|
|
35
|
-
* installer with "unexpected argument '/S' found" — this is the wizard bug. */
|
|
36
|
-
export function windowsInstallerArgs(customPath) {
|
|
37
|
-
return customPath ? `--silent --installto "${customPath}"` : "--silent";
|
|
38
|
-
}
|
|
39
|
-
export const installCommand = new Command("install")
|
|
40
|
-
.description("Download and install Summer Engine")
|
|
41
|
-
.option("--path <dir>", "Custom install directory")
|
|
42
|
-
.action(async (opts) => {
|
|
43
|
-
const os = platform();
|
|
44
|
-
if (os !== "darwin" && os !== "win32") {
|
|
45
|
-
console.error("Linux support is coming soon.\n" +
|
|
46
|
-
"For now, download from: https://summerengine.com/download");
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
console.log("Fetching latest release info...");
|
|
50
|
-
let releases;
|
|
51
|
-
try {
|
|
52
|
-
const res = await fetch(RELEASES_URL, { signal: AbortSignal.timeout(10000) });
|
|
53
|
-
if (!res.ok)
|
|
54
|
-
throw new Error(`HTTP ${res.status}`);
|
|
55
|
-
releases = (await res.json());
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
console.error("Could not fetch release info. Download manually from:\n" +
|
|
59
|
-
" https://summerengine.com/download");
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
if (os === "darwin") {
|
|
63
|
-
await installMac(releases, opts.path);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
await installWindows(releases, opts.path);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
async function installMac(releases, customPath) {
|
|
70
|
-
const info = releases.latest.macos;
|
|
71
|
-
if (!info) {
|
|
72
|
-
console.error("No macOS release found.");
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
const dmgUrl = requireDownloadUrl(info.dmg_url, "macOS DMG");
|
|
76
|
-
console.log(`Latest version: ${info.version}`);
|
|
77
|
-
const destApp = customPath || "/Applications/Summer.app";
|
|
78
|
-
if (existsSync(destApp)) {
|
|
79
|
-
console.log(`Summer Engine already installed at ${destApp}`);
|
|
80
|
-
console.log("Updating to latest version...");
|
|
81
|
-
}
|
|
82
|
-
const dmgPath = join(tmpdir(), `Summer-v${info.version}.dmg`);
|
|
83
|
-
console.log(`Downloading Summer Engine v${info.version} (~1 GB, includes bundled Git + runtime)...`);
|
|
84
|
-
try {
|
|
85
|
-
const { sha256 } = await downloadFile(dmgUrl, dmgPath);
|
|
86
|
-
verifyChecksum(sha256, info.dmg_sha256, "DMG");
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
try {
|
|
90
|
-
execSync(`rm -f "${dmgPath}"`, { stdio: "ignore" });
|
|
91
|
-
}
|
|
92
|
-
catch { /* best effort */ }
|
|
93
|
-
console.error(err instanceof Error ? err.message : String(err));
|
|
94
|
-
process.exit(1);
|
|
95
|
-
}
|
|
96
|
-
console.log("Mounting DMG...");
|
|
97
|
-
const mountOutput = execSync(`hdiutil attach "${dmgPath}" -nobrowse -noverify -noautoopen`, {
|
|
98
|
-
encoding: "utf-8",
|
|
99
|
-
});
|
|
100
|
-
const mountPoint = mountOutput
|
|
101
|
-
.split("\n")
|
|
102
|
-
.filter((line) => line.includes("/Volumes/"))
|
|
103
|
-
.map((line) => line.trim().split("\t").pop()?.trim())
|
|
104
|
-
.find(Boolean);
|
|
105
|
-
if (!mountPoint) {
|
|
106
|
-
console.error("Failed to find mount point. Install manually from the DMG.");
|
|
107
|
-
process.exit(1);
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
console.log("Installing to " + destApp + "...");
|
|
111
|
-
execSync(`rm -rf "${destApp}"`, { stdio: "ignore" });
|
|
112
|
-
execSync(`cp -R "${mountPoint}/Summer.app" "${destApp}"`);
|
|
113
|
-
console.log("Done!");
|
|
114
|
-
}
|
|
115
|
-
finally {
|
|
116
|
-
execSync(`hdiutil detach "${mountPoint}" -quiet`, { stdio: "ignore" });
|
|
117
|
-
try {
|
|
118
|
-
execSync(`rm "${dmgPath}"`, { stdio: "ignore" });
|
|
119
|
-
}
|
|
120
|
-
catch { }
|
|
121
|
-
}
|
|
122
|
-
console.log(`\nSummer Engine v${info.version} installed to ${destApp}`);
|
|
123
|
-
console.log("\nNext steps:");
|
|
124
|
-
console.log(" summer login # Sign in to your account");
|
|
125
|
-
console.log(" summer run # Launch the engine");
|
|
126
|
-
}
|
|
127
|
-
async function installWindows(releases, customPath) {
|
|
128
|
-
const info = releases.latest.windows;
|
|
129
|
-
if (!info) {
|
|
130
|
-
console.error("No Windows release found.");
|
|
131
|
-
process.exit(1);
|
|
132
|
-
}
|
|
133
|
-
const exeUrl = requireDownloadUrl(info.url, "Windows installer");
|
|
134
|
-
console.log(`Latest version: ${info.version}`);
|
|
135
|
-
const exePath = join(tmpdir(), `Summer-v${info.version}.exe`);
|
|
136
|
-
console.log(`Downloading Summer Engine v${info.version} (~1 GB, includes bundled Git + runtime)...`);
|
|
137
|
-
try {
|
|
138
|
-
const { sha256 } = await downloadFile(exeUrl, exePath);
|
|
139
|
-
verifyChecksum(sha256, info.sha256, "installer");
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
try {
|
|
143
|
-
execSync(`del "${exePath}"`, { stdio: "ignore" });
|
|
144
|
-
}
|
|
145
|
-
catch { /* best effort */ }
|
|
146
|
-
console.error(err instanceof Error ? err.message : String(err));
|
|
147
|
-
process.exit(1);
|
|
148
|
-
}
|
|
149
|
-
console.log("Running installer...");
|
|
150
|
-
try {
|
|
151
|
-
execSync(`"${exePath}" ${windowsInstallerArgs(customPath)}`, {
|
|
152
|
-
stdio: "inherit",
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
console.error("Installer failed. Try running it manually:\n " + exePath);
|
|
157
|
-
process.exit(1);
|
|
158
|
-
}
|
|
159
|
-
try {
|
|
160
|
-
execSync(`del "${exePath}"`, { stdio: "ignore" });
|
|
161
|
-
}
|
|
162
|
-
catch { }
|
|
163
|
-
console.log(`\nSummer Engine v${info.version} installed!`);
|
|
164
|
-
console.log("\nNext steps:");
|
|
165
|
-
console.log(" summer login # Sign in to your account");
|
|
166
|
-
console.log(" summer run # Launch the engine");
|
|
167
|
-
}
|
|
168
|
-
export async function downloadFile(url, dest) {
|
|
169
|
-
const res = await fetch(url);
|
|
170
|
-
if (!res.ok || !res.body) {
|
|
171
|
-
throw new Error(`Download failed: HTTP ${res.status}`);
|
|
172
|
-
}
|
|
173
|
-
const dir = join(dest, "..");
|
|
174
|
-
if (!existsSync(dir))
|
|
175
|
-
mkdirSync(dir, { recursive: true });
|
|
176
|
-
const fileStream = createWriteStream(dest);
|
|
177
|
-
const readable = Readable.fromWeb(res.body);
|
|
178
|
-
// Hash while streaming (the 'data' listener and the pipe both see every chunk
|
|
179
|
-
// in flowing mode), so we get integrity for free without a second read pass.
|
|
180
|
-
const hash = createHash("sha256");
|
|
181
|
-
let downloaded = 0;
|
|
182
|
-
const total = parseInt(res.headers.get("content-length") || "0", 10);
|
|
183
|
-
readable.on("data", (chunk) => {
|
|
184
|
-
hash.update(chunk);
|
|
185
|
-
downloaded += chunk.length;
|
|
186
|
-
if (total > 0) {
|
|
187
|
-
const pct = Math.round((downloaded / total) * 100);
|
|
188
|
-
process.stdout.write(`\r ${pct}% (${(downloaded / 1024 / 1024).toFixed(1)}MB)`);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
await pipeline(readable, fileStream);
|
|
192
|
-
process.stdout.write("\n");
|
|
193
|
-
return { sha256: hash.digest("hex") };
|
|
194
|
-
}
|
package/dist/commands/list.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { readdirSync, existsSync } from "fs";
|
|
3
|
-
import { join } from "path";
|
|
4
|
-
import { fetchRemoteTemplates } from "../lib/remote-templates.js";
|
|
5
|
-
export const listCommand = new Command("list")
|
|
6
|
-
.description("List available templates or local projects")
|
|
7
|
-
.argument("<what>", "'templates' or 'projects'")
|
|
8
|
-
.action(async (what) => {
|
|
9
|
-
if (what === "templates") {
|
|
10
|
-
await listTemplates();
|
|
11
|
-
}
|
|
12
|
-
else if (what === "projects") {
|
|
13
|
-
listProjects();
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
console.error(`Unknown: '${what}'. Use 'templates' or 'projects'.`);
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
async function listTemplates() {
|
|
21
|
-
console.log("Built-in templates (no download required):\n");
|
|
22
|
-
console.log(" empty Empty 3D project with just a root node");
|
|
23
|
-
console.log(" 3d-basic 3D scene with camera, light, and floor");
|
|
24
|
-
console.log("\nCommunity templates from github.com/SummerEngine:\n");
|
|
25
|
-
try {
|
|
26
|
-
const remote = await fetchRemoteTemplates();
|
|
27
|
-
if (remote.length === 0) {
|
|
28
|
-
console.log(" (none yet)");
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const padTo = Math.max(...remote.map((t) => t.slug.length), 16);
|
|
32
|
-
for (const t of remote) {
|
|
33
|
-
const desc = t.description || `(no description) ${t.url}`;
|
|
34
|
-
console.log(` ${t.slug.padEnd(padTo)} ${desc}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
console.log(` (could not reach GitHub: ${err.message})`);
|
|
40
|
-
console.log(" Built-ins above still work offline.");
|
|
41
|
-
}
|
|
42
|
-
console.log("\nCreate a project: summer create <name> [project-dir]");
|
|
43
|
-
console.log("Example: summer create 3d-third-person-controller my-game");
|
|
44
|
-
}
|
|
45
|
-
function listProjects() {
|
|
46
|
-
const cwd = process.cwd();
|
|
47
|
-
const entries = readdirSync(cwd, { withFileTypes: true });
|
|
48
|
-
const projects = [];
|
|
49
|
-
for (const entry of entries) {
|
|
50
|
-
if (entry.isDirectory()) {
|
|
51
|
-
const projectFile = join(cwd, entry.name, "project.godot");
|
|
52
|
-
if (existsSync(projectFile)) {
|
|
53
|
-
projects.push(entry.name);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (projects.length === 0) {
|
|
58
|
-
console.log("No Summer Engine projects found in current directory.");
|
|
59
|
-
console.log("\nCreate one: summer create 3d-basic my-game");
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
console.log(`Projects in ${cwd}:\n`);
|
|
63
|
-
for (const p of projects) {
|
|
64
|
-
console.log(` ${p}/`);
|
|
65
|
-
}
|
|
66
|
-
console.log(`\nOpen a project: summer run <name>`);
|
|
67
|
-
}
|
package/dist/commands/logout.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { clearAuthCredentials } from "../lib/auth.js";
|
|
3
|
-
export const logoutCommand = new Command("logout")
|
|
4
|
-
.description("Sign out and clear stored auth tokens")
|
|
5
|
-
.action(async () => {
|
|
6
|
-
const removed = await clearAuthCredentials();
|
|
7
|
-
if (removed > 0) {
|
|
8
|
-
console.log("Logged out. Auth tokens cleared.");
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
console.log("Already logged out (no tokens found).");
|
|
12
|
-
}
|
|
13
|
-
});
|
package/dist/commands/logs.d.ts
DELETED
package/dist/commands/logs.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { readCreatorLogs } from "../lib/creator.js";
|
|
3
|
-
export const logsCommand = new Command("logs")
|
|
4
|
-
.description("Read creator runtime logs")
|
|
5
|
-
.option("--project-id <id>", "Creator project ID")
|
|
6
|
-
.option("--release <id>", "Restrict logs to one release")
|
|
7
|
-
.option("--limit <count>", "Maximum log entries to return", "100")
|
|
8
|
-
.action(async (opts) => {
|
|
9
|
-
const limit = Number.parseInt(opts.limit, 10);
|
|
10
|
-
if (!Number.isInteger(limit) || limit < 1 || limit > 1000) {
|
|
11
|
-
throw new Error("--limit must be between 1 and 1000. Recovery: pass a whole number in that range.");
|
|
12
|
-
}
|
|
13
|
-
await readCreatorLogs({
|
|
14
|
-
projectId: opts.projectId,
|
|
15
|
-
releaseId: opts.release,
|
|
16
|
-
limit,
|
|
17
|
-
face: "cli",
|
|
18
|
-
});
|
|
19
|
-
});
|
package/dist/commands/open.d.ts
DELETED
package/dist/commands/open.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { existsSync } from "fs";
|
|
3
|
-
import { resolve } from "path";
|
|
4
|
-
import { getApiPort, checkEngineHealth } from "../lib/engine.js";
|
|
5
|
-
export const openCommand = new Command("open")
|
|
6
|
-
.description("Open a project in Summer Engine")
|
|
7
|
-
.argument("<path>", "Path to project directory (must contain project.godot)")
|
|
8
|
-
.action(async (projectPath) => {
|
|
9
|
-
const fullPath = resolve(projectPath);
|
|
10
|
-
if (!existsSync(fullPath)) {
|
|
11
|
-
console.error(`Directory not found: ${fullPath}`);
|
|
12
|
-
process.exit(1);
|
|
13
|
-
}
|
|
14
|
-
if (!existsSync(`${fullPath}/project.godot`)) {
|
|
15
|
-
console.error(`No project.godot found in ${fullPath}\n` +
|
|
16
|
-
"This doesn't look like a Summer Engine project.\n" +
|
|
17
|
-
"Create one with: summer create 3d-basic my-game");
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
const port = await getApiPort();
|
|
21
|
-
const health = await checkEngineHealth(port);
|
|
22
|
-
if (!health) {
|
|
23
|
-
console.log("Engine not running. Launching with this project...");
|
|
24
|
-
// Import dynamically to avoid circular deps
|
|
25
|
-
const { runCommand } = await import("./run.js");
|
|
26
|
-
await runCommand.parseAsync(["node", "summer", fullPath], { from: "user" });
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
console.log(`Opening project: ${fullPath}`);
|
|
30
|
-
console.log("Note: To switch projects, close the current one in Summer Engine first,\n" +
|
|
31
|
-
"then run: summer run " + fullPath);
|
|
32
|
-
});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI command: summer agent
|
|
3
|
-
* Launches the web app locally with direct engine execution enabled.
|
|
4
|
-
* The web app handles all AI logic (prompts, tools, RAG, billing).
|
|
5
|
-
* This command just starts it with LOCAL_ENGINE_PORT set.
|
|
6
|
-
*/
|
|
7
|
-
import { Command } from "commander";
|
|
8
|
-
export declare const orchestratorCommand: Command;
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI command: summer agent
|
|
3
|
-
* Launches the web app locally with direct engine execution enabled.
|
|
4
|
-
* The web app handles all AI logic (prompts, tools, RAG, billing).
|
|
5
|
-
* This command just starts it with LOCAL_ENGINE_PORT set.
|
|
6
|
-
*/
|
|
7
|
-
import { Command } from "commander";
|
|
8
|
-
import { spawn } from "node:child_process";
|
|
9
|
-
import { readFile, access, writeFile } from "node:fs/promises";
|
|
10
|
-
import { join, resolve, dirname } from "node:path";
|
|
11
|
-
import { homedir } from "node:os";
|
|
12
|
-
import { getApiToken, getApiPort, checkEngineHealth } from "../lib/engine.js";
|
|
13
|
-
import { getSummerDir } from "../lib/auth.js";
|
|
14
|
-
async function findWebAppPath() {
|
|
15
|
-
// 1. Check env var
|
|
16
|
-
if (process.env.SUMMER_WEB_APP_PATH) {
|
|
17
|
-
return process.env.SUMMER_WEB_APP_PATH;
|
|
18
|
-
}
|
|
19
|
-
// 2. Check ~/.summer/web-app-path
|
|
20
|
-
try {
|
|
21
|
-
const stored = (await readFile(join(getSummerDir(), "web-app-path"), "utf-8")).trim();
|
|
22
|
-
if (stored) {
|
|
23
|
-
await access(join(stored, "package.json"));
|
|
24
|
-
return stored;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
// Not stored yet
|
|
29
|
-
}
|
|
30
|
-
// 3. Search common sibling locations
|
|
31
|
-
const cliDir = dirname(dirname(dirname(new URL(import.meta.url).pathname)));
|
|
32
|
-
const searchPaths = [
|
|
33
|
-
resolve(cliDir, "../../publicsummerengine"), // sibling in development/
|
|
34
|
-
resolve(cliDir, "../../../publicsummerengine"), // one level up
|
|
35
|
-
resolve(homedir(), "development/publicsummerengine"),
|
|
36
|
-
];
|
|
37
|
-
for (const candidate of searchPaths) {
|
|
38
|
-
try {
|
|
39
|
-
await access(join(candidate, "package.json"));
|
|
40
|
-
const pkg = JSON.parse(await readFile(join(candidate, "package.json"), "utf-8"));
|
|
41
|
-
if (pkg.name && pkg.name.includes("summer")) {
|
|
42
|
-
// Store for future use
|
|
43
|
-
try {
|
|
44
|
-
await writeFile(join(getSummerDir(), "web-app-path"), candidate, "utf-8");
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// Non-critical
|
|
48
|
-
}
|
|
49
|
-
return candidate;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
async function loadEnvFile() {
|
|
59
|
-
const envVars = {};
|
|
60
|
-
try {
|
|
61
|
-
const envPath = join(getSummerDir(), "env");
|
|
62
|
-
const content = await readFile(envPath, "utf-8");
|
|
63
|
-
for (const line of content.split("\n")) {
|
|
64
|
-
const trimmed = line.trim();
|
|
65
|
-
if (!trimmed || trimmed.startsWith("#"))
|
|
66
|
-
continue;
|
|
67
|
-
const eqIdx = trimmed.indexOf("=");
|
|
68
|
-
if (eqIdx > 0) {
|
|
69
|
-
envVars[trimmed.slice(0, eqIdx)] = trimmed.slice(eqIdx + 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// No env file — user will need to have env vars set
|
|
75
|
-
}
|
|
76
|
-
return envVars;
|
|
77
|
-
}
|
|
78
|
-
export const orchestratorCommand = new Command("agent")
|
|
79
|
-
.description("Start the web app locally with direct engine execution. " +
|
|
80
|
-
"Tools call localhost:6550 instead of the Redis bridge.")
|
|
81
|
-
.option("-p, --port <number>", "Web app port", "3000")
|
|
82
|
-
.option("--web-path <path>", "Path to publicsummerengine (auto-detected if not set)")
|
|
83
|
-
.option("--dev", "Run in dev mode (pnpm dev) instead of production")
|
|
84
|
-
.action(async (opts) => {
|
|
85
|
-
const port = parseInt(opts.port, 10);
|
|
86
|
-
// 1. Verify engine is running
|
|
87
|
-
const enginePort = await getApiPort();
|
|
88
|
-
const engineToken = await getApiToken();
|
|
89
|
-
const health = await checkEngineHealth(enginePort);
|
|
90
|
-
if (!health) {
|
|
91
|
-
console.error("Summer Engine is not running. Open Summer Engine first.");
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
console.log(`Engine running on port ${enginePort} | project: ${health.project_name ?? "unknown"}`);
|
|
95
|
-
// 2. Find web app
|
|
96
|
-
const webAppPath = opts.webPath ?? (await findWebAppPath());
|
|
97
|
-
if (!webAppPath) {
|
|
98
|
-
console.error("Could not find publicsummerengine. Set --web-path or SUMMER_WEB_APP_PATH.");
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
console.log(`Web app: ${webAppPath}`);
|
|
102
|
-
// 3. Load env vars from ~/.summer/env
|
|
103
|
-
const storedEnv = await loadEnvFile();
|
|
104
|
-
// 4. Build env for the web app
|
|
105
|
-
const childEnv = {
|
|
106
|
-
...process.env,
|
|
107
|
-
...storedEnv,
|
|
108
|
-
LOCAL_ENGINE_PORT: String(enginePort),
|
|
109
|
-
LOCAL_ENGINE_TOKEN: engineToken ?? "",
|
|
110
|
-
PORT: String(port),
|
|
111
|
-
};
|
|
112
|
-
// 5. Start the web app
|
|
113
|
-
const cmd = opts.dev ? "pnpm" : "pnpm";
|
|
114
|
-
const args = opts.dev ? ["dev", "--port", String(port)] : ["start", "--port", String(port)];
|
|
115
|
-
console.log(`\nStarting web app (${opts.dev ? "dev" : "production"} mode) on port ${port}...`);
|
|
116
|
-
console.log(` LOCAL_ENGINE_PORT=${enginePort}`);
|
|
117
|
-
console.log(` Tools will execute via localhost:${enginePort} (direct, no bridge)\n`);
|
|
118
|
-
const child = spawn(cmd, args, {
|
|
119
|
-
cwd: webAppPath,
|
|
120
|
-
env: childEnv,
|
|
121
|
-
stdio: "inherit",
|
|
122
|
-
});
|
|
123
|
-
// Write agent port for engine to discover
|
|
124
|
-
try {
|
|
125
|
-
await writeFile(join(getSummerDir(), "agent-port"), String(port), "utf-8");
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
// Non-critical
|
|
129
|
-
}
|
|
130
|
-
child.on("error", (err) => {
|
|
131
|
-
console.error("Failed to start web app:", err.message);
|
|
132
|
-
process.exit(1);
|
|
133
|
-
});
|
|
134
|
-
child.on("exit", (code) => {
|
|
135
|
-
process.exit(code ?? 0);
|
|
136
|
-
});
|
|
137
|
-
// Graceful shutdown
|
|
138
|
-
const shutdown = () => {
|
|
139
|
-
child.kill("SIGTERM");
|
|
140
|
-
};
|
|
141
|
-
process.on("SIGINT", shutdown);
|
|
142
|
-
process.on("SIGTERM", shutdown);
|
|
143
|
-
});
|
package/dist/commands/run.d.ts
DELETED
package/dist/commands/run.js
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { spawn } from "child_process";
|
|
3
|
-
import { existsSync } from "fs";
|
|
4
|
-
import { mkdir, readFile, rm, writeFile } from "fs/promises";
|
|
5
|
-
import { platform } from "os";
|
|
6
|
-
import { join, resolve } from "path";
|
|
7
|
-
import { getSummerDir } from "../lib/auth.js";
|
|
8
|
-
import { getApiPort, checkEngineHealth } from "../lib/engine.js";
|
|
9
|
-
const MAC_PATHS = [
|
|
10
|
-
"/Applications/Summer.app/Contents/MacOS/Summer",
|
|
11
|
-
`${process.env.HOME}/Applications/Summer.app/Contents/MacOS/Summer`,
|
|
12
|
-
];
|
|
13
|
-
const WIN_PATHS = [
|
|
14
|
-
`${process.env.LOCALAPPDATA}\\SummerEngine\\current\\Summer.exe`,
|
|
15
|
-
`${process.env.LOCALAPPDATA}\\Programs\\Summer Engine\\Summer.exe`,
|
|
16
|
-
`${process.env.PROGRAMFILES}\\Summer Engine\\Summer.exe`,
|
|
17
|
-
];
|
|
18
|
-
const LAUNCH_LOCK_STALE_MS = 60_000;
|
|
19
|
-
const LAUNCH_LOCK_WAIT_MS = 15_000;
|
|
20
|
-
function findEngineBinary() {
|
|
21
|
-
const paths = platform() === "darwin" ? MAC_PATHS : WIN_PATHS;
|
|
22
|
-
for (const p of paths) {
|
|
23
|
-
if (existsSync(p))
|
|
24
|
-
return p;
|
|
25
|
-
}
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
function isProcessAlive(pid) {
|
|
29
|
-
if (!Number.isInteger(pid) || pid <= 0)
|
|
30
|
-
return false;
|
|
31
|
-
try {
|
|
32
|
-
process.kill(pid, 0);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
const code = error.code;
|
|
37
|
-
return code === "EPERM";
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async function removeStaleLaunchLock(lockDir) {
|
|
41
|
-
const ownerPath = join(lockDir, "owner.json");
|
|
42
|
-
try {
|
|
43
|
-
const raw = await readFile(ownerPath, "utf-8");
|
|
44
|
-
const owner = JSON.parse(raw);
|
|
45
|
-
const pid = typeof owner.pid === "number" ? owner.pid : 0;
|
|
46
|
-
const createdAt = typeof owner.createdAt === "number" ? owner.createdAt : 0;
|
|
47
|
-
const staleByTime = Date.now() - createdAt > LAUNCH_LOCK_STALE_MS;
|
|
48
|
-
const staleByPid = !isProcessAlive(pid);
|
|
49
|
-
if (!staleByTime && !staleByPid) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// Broken owner metadata should not permanently block launches.
|
|
55
|
-
}
|
|
56
|
-
await rm(lockDir, { recursive: true, force: true });
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
async function withLaunchLock(fn) {
|
|
60
|
-
const summerDir = getSummerDir();
|
|
61
|
-
await mkdir(summerDir, { recursive: true, mode: 0o700 });
|
|
62
|
-
const lockDir = join(summerDir, "launch.lock");
|
|
63
|
-
const ownerPath = join(lockDir, "owner.json");
|
|
64
|
-
const startedAt = Date.now();
|
|
65
|
-
while (true) {
|
|
66
|
-
try {
|
|
67
|
-
await mkdir(lockDir, { mode: 0o700 });
|
|
68
|
-
try {
|
|
69
|
-
await writeFile(ownerPath, JSON.stringify({ pid: process.pid, createdAt: Date.now() }, null, 2), { encoding: "utf-8", mode: 0o600 });
|
|
70
|
-
return await fn();
|
|
71
|
-
}
|
|
72
|
-
finally {
|
|
73
|
-
await rm(lockDir, { recursive: true, force: true });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
const code = error.code;
|
|
78
|
-
if (code !== "EEXIST") {
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
if (await removeStaleLaunchLock(lockDir)) {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (Date.now() - startedAt > LAUNCH_LOCK_WAIT_MS) {
|
|
85
|
-
throw new Error("Another `summer run` launch is still in progress. Try again in a few seconds.");
|
|
86
|
-
}
|
|
87
|
-
await sleep(100);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
export const runCommand = new Command("run")
|
|
92
|
-
.description("Launch Summer Engine, optionally opening a project")
|
|
93
|
-
.argument("[path]", "Path to a project directory (must contain project.godot)")
|
|
94
|
-
.action(async (projectPath) => {
|
|
95
|
-
const fullProjectPath = projectPath ? resolve(projectPath) : null;
|
|
96
|
-
if (fullProjectPath) {
|
|
97
|
-
if (!existsSync(fullProjectPath)) {
|
|
98
|
-
console.error(`Directory not found: ${fullProjectPath}`);
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
if (!existsSync(join(fullProjectPath, "project.godot"))) {
|
|
102
|
-
console.error(`No project.godot found in ${fullProjectPath}\n` +
|
|
103
|
-
"This doesn't look like a Summer Engine project.");
|
|
104
|
-
process.exit(1);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
await withLaunchLock(async () => {
|
|
108
|
-
const port = await getApiPort();
|
|
109
|
-
const health = await checkEngineHealth(port);
|
|
110
|
-
if (health) {
|
|
111
|
-
const runningProjectPath = health.project_path
|
|
112
|
-
? resolve(health.project_path)
|
|
113
|
-
: null;
|
|
114
|
-
if (!fullProjectPath || runningProjectPath === fullProjectPath) {
|
|
115
|
-
console.log(`Summer Engine is already running (v${health.version}) on port ${port}`);
|
|
116
|
-
if (health.project_name) {
|
|
117
|
-
console.log(` Project: ${health.project_name}`);
|
|
118
|
-
}
|
|
119
|
-
if (health.project_path) {
|
|
120
|
-
console.log(` Path: ${health.project_path}`);
|
|
121
|
-
}
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
console.log(`Summer Engine is already running (v${health.version}) on port ${port}`);
|
|
125
|
-
console.log(` Current project: ${health.project_path ?? health.project_name ?? "unknown"}`);
|
|
126
|
-
console.error(`Refusing to launch a second editor for: ${fullProjectPath}\n` +
|
|
127
|
-
"Close or switch the current Summer Engine project first, then run this command again.");
|
|
128
|
-
process.exitCode = 1;
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const binary = findEngineBinary();
|
|
132
|
-
if (!binary) {
|
|
133
|
-
console.error("Summer Engine not found. Install it first:\n" +
|
|
134
|
-
" summer install\n" +
|
|
135
|
-
" or download from https://summerengine.com/download");
|
|
136
|
-
process.exitCode = 1;
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const args = ["--editor"];
|
|
140
|
-
if (fullProjectPath) {
|
|
141
|
-
args.unshift("--path", fullProjectPath);
|
|
142
|
-
}
|
|
143
|
-
console.log("Launching Summer Engine...");
|
|
144
|
-
const child = spawn(binary, args, { detached: true, stdio: "ignore" });
|
|
145
|
-
child.unref();
|
|
146
|
-
// Wait for engine to start responding
|
|
147
|
-
const startTime = Date.now();
|
|
148
|
-
const timeout = 20000;
|
|
149
|
-
while (Date.now() - startTime < timeout) {
|
|
150
|
-
await sleep(500);
|
|
151
|
-
const newPort = await getApiPort();
|
|
152
|
-
const h = await checkEngineHealth(newPort);
|
|
153
|
-
if (h) {
|
|
154
|
-
console.log(`Summer Engine running (v${h.version}) on port ${newPort}`);
|
|
155
|
-
if (h.project_name) {
|
|
156
|
-
console.log(` Project: ${h.project_name}`);
|
|
157
|
-
}
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
console.log("Summer Engine launched but API not responding yet.\n" +
|
|
162
|
-
"It may still be loading. Run 'summer status' to check.");
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
function sleep(ms) {
|
|
166
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
167
|
-
}
|