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
|
Binary file
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A starting point for proving your game actually works — not that it compiles, that it *works*.
|
|
4
4
|
|
|
5
|
-
`autopilot.gd` boots your game in an invisible instance, presses your real input actions to walk
|
|
5
|
+
`autopilot.gd` boots your game in an invisible instance, finds the player, presses your real input actions to walk it through a list of waypoints, saves a rendered frame at each one, records what it found, and exits. It is ordinary GDScript against your real running game. There is no test framework here to learn.
|
|
6
6
|
|
|
7
7
|
## Run it
|
|
8
8
|
|
|
@@ -10,14 +10,20 @@ A starting point for proving your game actually works — not that it compiles,
|
|
|
10
10
|
bash tests/autopilot/run.sh
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
No editor needed.
|
|
13
|
+
No editor needed. Two things happen:
|
|
14
|
+
|
|
15
|
+
1. **First run only: asset import.** A never-opened checkout has no `.godot/` caches, so the engine's standard editor import runs once, headless, to build them (imported textures/fonts/audio/models, `uid_cache.bin`, `global_script_class_cache.cfg`). Without this the game boots into hundreds of `Unable to open file …ctex` / `invalid UID` / `Could not find type` errors that are not bugs in your game. Output goes to `tests/autopilot/out/import.log`; the pass is skipped once `.godot/global_script_class_cache.cfg` exists; `bash tests/autopilot/run.sh --reimport` forces it. Bounded by `IMPORT_MAX_SECONDS` (default 300).
|
|
16
|
+
2. **The verify run.** The probe runs in the engine's offscreen verify instance and `run.sh` reads `results.json`.
|
|
17
|
+
|
|
18
|
+
Exit code is 0 when the probe finished, every configured waypoint was reached, and the engine logged no `ERROR` / `SCRIPT ERROR`. Engine `WARNING`s are printed and counted but do not fail the run. The last line is the verdict: `PASSED: …` or `FAILED: …`.
|
|
14
19
|
|
|
15
20
|
Results land in `tests/autopilot/out/`:
|
|
16
21
|
|
|
17
22
|
```
|
|
18
23
|
results.json reports, frame list, errors_seen, duration_ms, finished
|
|
19
|
-
00_start.jpg a real rendered frame, one per
|
|
20
|
-
engine.log full engine output
|
|
24
|
+
00_start.jpg a real rendered frame, one per step
|
|
25
|
+
engine.log full engine output of the verify run
|
|
26
|
+
import.log the asset import, when it ran
|
|
21
27
|
```
|
|
22
28
|
|
|
23
29
|
An agent can also run the same probe through MCP without touching your editor:
|
|
@@ -28,9 +34,15 @@ summer_batch ops:[{"op": "RunVerification",
|
|
|
28
34
|
"max_seconds": 40}]
|
|
29
35
|
```
|
|
30
36
|
|
|
37
|
+
## What the shipped probe does
|
|
38
|
+
|
|
39
|
+
Out of the box `WAYPOINTS` is empty, so the run is a **smoke test**: boot, find the player, let the game run for a second, save two frames, pass when the engine logged no errors (`reports.smoke: true`). That already catches a project that does not boot, a main scene that fails to load, and every script that fails to parse.
|
|
40
|
+
|
|
41
|
+
The player is `PLAYER_PATH` when that path exists under the current scene; otherwise the probe auto-detects it — the first `CharacterBody2D`/`3D`, then the first `RigidBody2D`/`3D`, then any `Node2D`/`Node3D` whose name contains "player" — and reports `player_found_by` and the exact `player_path` it used, so the next edit to CONFIG is a paste. A workspace scene with no player still passes the smoke test (`player_found_by: "none"`); it only fails when waypoints are configured and there is nothing to drive.
|
|
42
|
+
|
|
31
43
|
## Make it yours
|
|
32
44
|
|
|
33
|
-
Open `autopilot.gd` and edit the `CONFIG` block at the top: the player's node path, your Input Map action names, and the waypoints to walk. Then put your real assertions in `_check_at_waypoint()` and `_check_at_end()` — the shipped version walks and looks, but asserts nothing about *your* game, and a test that asserts nothing always passes.
|
|
45
|
+
Open `autopilot.gd` and edit the `CONFIG` block at the top: the player's node path, your Input Map action names, and the waypoints to walk (2D in pixels, 3D in metres on x/z). Then put your real assertions in `_check_at_waypoint()` and `_check_at_end()` — the shipped version boots, walks and looks, but asserts nothing about *your* game, and a test that asserts nothing always passes.
|
|
34
46
|
|
|
35
47
|
Leave `ACT_UP` / `ACT_DOWN` empty for a side-on platformer. The autopilot then measures arrival on X alone, because in a side-scroller Y is gravity, not a destination.
|
|
36
48
|
|
|
@@ -44,7 +56,9 @@ Leave `ACT_UP` / `ACT_DOWN` empty for a side-on platformer. The autopilot then m
|
|
|
44
56
|
|
|
45
57
|
**`finished: false` is a failure.** It means the probe hit `--summer-verify-max` before calling `finish()`. `run.sh` exits non-zero on it; do not read the partial reports as a pass.
|
|
46
58
|
|
|
47
|
-
**
|
|
59
|
+
**Warnings are still worth reading.** An `invalid UID … using text path instead` warning means a scene's `uid://` does not match the resource's `.import`/`.uid` file; the load still works, and one day it will not.
|
|
60
|
+
|
|
61
|
+
**Never add `--headless` to the verify run.** Headless has no renderer: `save_frame()` gets a null image, and `draw_calls` reads 0.0 forever. The verify instance is windowed but positioned off-screen, which is why it can produce real frames and stay invisible. (The import pre-pass is headless on purpose: it needs no pixels.)
|
|
48
62
|
|
|
49
63
|
## Frames are the point
|
|
50
64
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
# Autopilot —
|
|
2
|
-
# asserts what it saw, and exits.
|
|
1
|
+
# Autopilot — boots your game offscreen, finds the player, optionally drives it through
|
|
2
|
+
# a list of waypoints, saves a frame at each step, asserts what it saw, and exits.
|
|
3
3
|
#
|
|
4
4
|
# This is a starting point, not a finished test. Edit CONFIG below to match your game,
|
|
5
|
-
# then add your own assertions in _check_at_waypoint(). Everything
|
|
6
|
-
# GDScript against your real running game — there is no test
|
|
5
|
+
# then add your own assertions in _check_at_waypoint() / _check_at_end(). Everything
|
|
6
|
+
# here is ordinary GDScript against your real running game — there is no test
|
|
7
|
+
# framework to learn.
|
|
7
8
|
#
|
|
8
9
|
# Run it:
|
|
9
10
|
# bash tests/autopilot/run.sh
|
|
@@ -13,7 +14,10 @@ extends "res://tests/autopilot/probe_base.gd"
|
|
|
13
14
|
|
|
14
15
|
# ── CONFIG — edit this ────────────────────────────────────────────────────────────
|
|
15
16
|
|
|
16
|
-
# Node path to the player, from the current scene root.
|
|
17
|
+
# Node path to the player, from the current scene root. If nothing is at this path the
|
|
18
|
+
# probe looks for the first CharacterBody2D/3D, then the first RigidBody2D/3D, then any
|
|
19
|
+
# Node2D/Node3D whose name contains "player", and reports what it picked and how in
|
|
20
|
+
# reports.player_found_by / reports.player_path. Paste that path here once you know it.
|
|
17
21
|
const PLAYER_PATH := "Player"
|
|
18
22
|
|
|
19
23
|
# Input action names from your project's Input Map. Leave an entry empty to skip it.
|
|
@@ -25,10 +29,13 @@ const ACT_JUMP := "jump"
|
|
|
25
29
|
|
|
26
30
|
# Where to walk. 2D games use x/y in pixels; 3D games use x/z in metres (y ignored).
|
|
27
31
|
# Positions are WORLD positions, not offsets.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
#
|
|
33
|
+
# EMPTY means a smoke test: boot the game, let it run, save frames, and pass when the
|
|
34
|
+
# engine logged no errors. Add waypoints once you know your level — they are what
|
|
35
|
+
# turns "it boots" into "the player can get from here to there":
|
|
36
|
+
# const WAYPOINTS: Array = [Vector3(300, 0, 0), Vector3(600, 0, 0)] # 2D, pixels
|
|
37
|
+
# const WAYPOINTS: Array = [Vector3(5, 0, 0), Vector3(5, 0, -8)] # 3D, metres
|
|
38
|
+
const WAYPOINTS: Array = []
|
|
32
39
|
|
|
33
40
|
# How close counts as arrived, and how long to allow per leg before giving up.
|
|
34
41
|
const ARRIVE_EPSILON := 40.0
|
|
@@ -48,17 +55,40 @@ func _ready() -> void:
|
|
|
48
55
|
for _i in 30:
|
|
49
56
|
await get_tree().physics_frame
|
|
50
57
|
|
|
51
|
-
|
|
58
|
+
var scene := get_tree().current_scene
|
|
59
|
+
if scene == null:
|
|
60
|
+
report("error", "no current scene — is run/main_scene set in project.godot?")
|
|
52
61
|
finish()
|
|
53
62
|
return
|
|
54
63
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
var bound := _bind_player(scene)
|
|
65
|
+
if bound:
|
|
66
|
+
report("player_path", str(scene.get_path_to(_player)))
|
|
67
|
+
report("player_class", _player.get_class())
|
|
68
|
+
report("mode", "3D" if _is_3d else "2D")
|
|
69
|
+
report("start_pos", str(_pos()))
|
|
70
|
+
else:
|
|
71
|
+
report("mode", "3D" if scene is Node3D else ("2D" if scene is Node2D else "unknown"))
|
|
59
72
|
dump_tree()
|
|
73
|
+
await settle()
|
|
60
74
|
save_frame("00_start")
|
|
61
75
|
|
|
76
|
+
if WAYPOINTS.is_empty():
|
|
77
|
+
# Smoke test: nothing configured to walk to. Let the game run for a second and
|
|
78
|
+
# take a second frame so the flipbook shows it running, not just booted.
|
|
79
|
+
report("smoke", true)
|
|
80
|
+
for _i in 60:
|
|
81
|
+
await get_tree().physics_frame
|
|
82
|
+
save_frame("01_running")
|
|
83
|
+
_check_at_end()
|
|
84
|
+
finish()
|
|
85
|
+
return
|
|
86
|
+
|
|
87
|
+
if not bound:
|
|
88
|
+
report("error", "waypoints are configured but no player was found at '%s' (or by auto-detect)" % PLAYER_PATH)
|
|
89
|
+
finish()
|
|
90
|
+
return
|
|
91
|
+
|
|
62
92
|
for i in WAYPOINTS.size():
|
|
63
93
|
var target: Vector3 = WAYPOINTS[i]
|
|
64
94
|
var arrived := await _walk_to(target)
|
|
@@ -87,32 +117,56 @@ func _check_at_waypoint(index: int) -> void:
|
|
|
87
117
|
pass
|
|
88
118
|
|
|
89
119
|
|
|
90
|
-
# Called once after the last waypoint.
|
|
120
|
+
# Called once at the end of the run (after the last waypoint, or after the smoke run).
|
|
91
121
|
func _check_at_end() -> void:
|
|
92
|
-
# report("player_alive", _player.has_method("is_alive") and _player.is_alive())
|
|
122
|
+
# report("player_alive", _player != null and _player.has_method("is_alive") and _player.is_alive())
|
|
93
123
|
pass
|
|
94
124
|
|
|
95
125
|
|
|
96
126
|
# ── Machinery — you should not need to edit below this line ───────────────────────
|
|
97
127
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return false
|
|
128
|
+
# Resolve the player: CONFIG path first, then auto-detect. Records how it was found
|
|
129
|
+
# (reports.player_found_by) so the next edit to CONFIG is a paste, not a guess.
|
|
130
|
+
func _bind_player(scene: Node) -> bool:
|
|
131
|
+
var found_by := "config PLAYER_PATH"
|
|
103
132
|
_player = scene.get_node_or_null(PLAYER_PATH)
|
|
133
|
+
if _player != null and not _is_spatial(_player):
|
|
134
|
+
report("player_config_note", "'%s' is a %s, not a Node2D/Node3D — ignored" % [PLAYER_PATH, _player.get_class()])
|
|
135
|
+
_player = null
|
|
136
|
+
if _player == null:
|
|
137
|
+
_player = _find_first(scene, func(n: Node) -> bool: return n is CharacterBody2D or n is CharacterBody3D)
|
|
138
|
+
found_by = "first CharacterBody2D/3D"
|
|
139
|
+
if _player == null:
|
|
140
|
+
_player = _find_first(scene, func(n: Node) -> bool: return n is RigidBody2D or n is RigidBody3D)
|
|
141
|
+
found_by = "first RigidBody2D/3D"
|
|
142
|
+
if _player == null:
|
|
143
|
+
_player = _find_first(scene, func(n: Node) -> bool: return _is_spatial(n) and n.name.to_lower().contains("player"))
|
|
144
|
+
found_by = "name contains 'player'"
|
|
104
145
|
if _player == null:
|
|
105
|
-
report("
|
|
146
|
+
report("player_found_by", "none")
|
|
106
147
|
report("scene_children", _child_names(scene))
|
|
107
|
-
dump_tree()
|
|
108
148
|
return false
|
|
149
|
+
report("player_found_by", found_by)
|
|
109
150
|
_is_3d = _player is Node3D
|
|
110
|
-
if not (_is_3d or _player is Node2D):
|
|
111
|
-
report("error", "player at '%s' is neither Node2D nor Node3D" % PLAYER_PATH)
|
|
112
|
-
return false
|
|
113
151
|
return true
|
|
114
152
|
|
|
115
153
|
|
|
154
|
+
func _is_spatial(n: Node) -> bool:
|
|
155
|
+
return n is Node2D or n is Node3D
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
# Depth-first search below `root` (root itself excluded) for the first node `pred`
|
|
159
|
+
# accepts. Returns null when nothing matches.
|
|
160
|
+
func _find_first(root: Node, pred: Callable) -> Node:
|
|
161
|
+
for c in root.get_children():
|
|
162
|
+
if pred.call(c):
|
|
163
|
+
return c
|
|
164
|
+
var deeper := _find_first(c, pred)
|
|
165
|
+
if deeper != null:
|
|
166
|
+
return deeper
|
|
167
|
+
return null
|
|
168
|
+
|
|
169
|
+
|
|
116
170
|
func _child_names(n: Node) -> Array:
|
|
117
171
|
var names := []
|
|
118
172
|
for c in n.get_children():
|
package/assets/autopilot/run.sh
CHANGED
|
@@ -3,15 +3,36 @@
|
|
|
3
3
|
#
|
|
4
4
|
# bash tests/autopilot/run.sh # runs autopilot.gd
|
|
5
5
|
# bash tests/autopilot/run.sh my_probe.gd # runs a different probe
|
|
6
|
+
# bash tests/autopilot/run.sh --reimport # rebuild the .godot/ caches first
|
|
6
7
|
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
8
|
+
# First run on a fresh checkout: the engine's standard editor import runs once,
|
|
9
|
+
# headless, to build the .godot/ caches a never-opened project does not have —
|
|
10
|
+
# imported textures/fonts/audio/models, uid_cache.bin, global_script_class_cache.cfg.
|
|
11
|
+
# Without them the game boots into "Unable to open file ...ctex", "invalid UID" and
|
|
12
|
+
# "Could not find type" errors that are not bugs in your game. The pass is skipped
|
|
13
|
+
# once .godot/global_script_class_cache.cfg exists; --reimport forces it.
|
|
14
|
+
#
|
|
15
|
+
# The verify run itself needs no editor. It spawns the engine's offscreen verify
|
|
16
|
+
# instance, which has a REAL renderer — unlike --headless, which produces no pixels
|
|
17
|
+
# at all (fine for importing, useless for frames).
|
|
18
|
+
#
|
|
19
|
+
# Exit code: 0 when the probe finished, every configured waypoint was reached and the
|
|
20
|
+
# engine logged no ERROR / SCRIPT ERROR. WARNINGs are printed and counted, not failed.
|
|
9
21
|
set -euo pipefail
|
|
10
22
|
|
|
11
23
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
12
|
-
PROBE="$
|
|
24
|
+
PROBE="$PROJECT_DIR/tests/autopilot/autopilot.gd"
|
|
25
|
+
REIMPORT=0
|
|
26
|
+
for arg in "$@"; do
|
|
27
|
+
case "$arg" in
|
|
28
|
+
--reimport) REIMPORT=1 ;;
|
|
29
|
+
-h|--help) sed -n '2,20p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
30
|
+
*) PROBE="$arg" ;;
|
|
31
|
+
esac
|
|
32
|
+
done
|
|
13
33
|
OUT="$PROJECT_DIR/tests/autopilot/out"
|
|
14
34
|
MAX_SECONDS="${MAX_SECONDS:-40}"
|
|
35
|
+
IMPORT_MAX_SECONDS="${IMPORT_MAX_SECONDS:-300}"
|
|
15
36
|
|
|
16
37
|
# Find the engine. Override with SUMMER_BIN=/path/to/engine if it lives elsewhere.
|
|
17
38
|
# There is no `godot` binary on a Summer install — do not substitute one.
|
|
@@ -30,6 +51,55 @@ fi
|
|
|
30
51
|
rm -rf "$OUT"
|
|
31
52
|
mkdir -p "$OUT"
|
|
32
53
|
|
|
54
|
+
# ── Import pre-pass ───────────────────────────────────────────────────────────────
|
|
55
|
+
# `--import` is Godot's own "start the editor, import everything, quit" mode; Summer
|
|
56
|
+
# is an editor build, so it is available. --headless keeps it off your screen. It
|
|
57
|
+
# reads and writes only this project (.godot/, and any missing *.import files),
|
|
58
|
+
# needs no network, and is bounded by IMPORT_MAX_SECONDS. While it runs, the engine
|
|
59
|
+
# registers itself in ~/.summer/instances/ like any instance (publishesGlobal:false,
|
|
60
|
+
# so it never hijacks a running editor) and removes that entry on exit. Only a
|
|
61
|
+
# watchdog kill can leave the entry behind; the next engine start reaps it.
|
|
62
|
+
CLASS_CACHE="$PROJECT_DIR/.godot/global_script_class_cache.cfg"
|
|
63
|
+
if [[ "$REIMPORT" == 1 || ! -f "$CLASS_CACHE" ]]; then
|
|
64
|
+
if [[ "$REIMPORT" == 1 ]]; then
|
|
65
|
+
echo "Importing assets (--reimport) ..."
|
|
66
|
+
else
|
|
67
|
+
echo "Importing assets (first run on this checkout: building .godot/ caches) ..."
|
|
68
|
+
fi
|
|
69
|
+
import_started=$SECONDS
|
|
70
|
+
"$ENGINE" --headless --import --disable-crash-handler --path "$PROJECT_DIR" \
|
|
71
|
+
>"$OUT/import.log" 2>&1 &
|
|
72
|
+
import_pid=$!
|
|
73
|
+
import_timed_out=0
|
|
74
|
+
while kill -0 "$import_pid" 2>/dev/null; do
|
|
75
|
+
if (( SECONDS - import_started >= IMPORT_MAX_SECONDS )); then
|
|
76
|
+
kill "$import_pid" 2>/dev/null || true
|
|
77
|
+
sleep 2
|
|
78
|
+
kill -9 "$import_pid" 2>/dev/null || true
|
|
79
|
+
import_timed_out=1
|
|
80
|
+
break
|
|
81
|
+
fi
|
|
82
|
+
sleep 1
|
|
83
|
+
done
|
|
84
|
+
import_rc=0
|
|
85
|
+
wait "$import_pid" || import_rc=$?
|
|
86
|
+
if [[ "$import_timed_out" == 1 ]]; then
|
|
87
|
+
echo "FAILED: asset import did not finish within ${IMPORT_MAX_SECONDS}s (raise IMPORT_MAX_SECONDS). Log: $OUT/import.log" >&2
|
|
88
|
+
tail -20 "$OUT/import.log" >&2
|
|
89
|
+
exit 1
|
|
90
|
+
fi
|
|
91
|
+
if [[ ! -f "$CLASS_CACHE" ]]; then
|
|
92
|
+
echo "FAILED: asset import exited $import_rc without writing .godot/global_script_class_cache.cfg. Log: $OUT/import.log" >&2
|
|
93
|
+
tail -20 "$OUT/import.log" >&2
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
imported_files=$(find "$PROJECT_DIR/.godot/imported" -type f 2>/dev/null | wc -l | tr -d ' ')
|
|
97
|
+
echo "Imported: ${imported_files} files under .godot/imported in $((SECONDS - import_started))s (exit ${import_rc}; log: tests/autopilot/out/import.log)"
|
|
98
|
+
else
|
|
99
|
+
echo "Import: skipped, .godot/ caches present (pass --reimport to rebuild them)"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# ── Verify run ────────────────────────────────────────────────────────────────────
|
|
33
103
|
# --disable-crash-handler: Summer's handler popen()s atos from inside a signal
|
|
34
104
|
# handler, which turns a clean failure into a hang. Never arm it on an
|
|
35
105
|
# agent-driven run. Note there is deliberately no --headless here: headless has
|
|
@@ -52,18 +122,43 @@ cat "$OUT/results.json"
|
|
|
52
122
|
echo
|
|
53
123
|
echo "Frames and full log: $OUT"
|
|
54
124
|
|
|
55
|
-
#
|
|
56
|
-
#
|
|
125
|
+
# ── Verdict ───────────────────────────────────────────────────────────────────────
|
|
126
|
+
# Every errors_seen entry is one line the engine's SummerVerifyLogger::log_error wrote
|
|
127
|
+
# (modules/1summer_engine/verify/summer_verify_logger.cpp), shaped exactly
|
|
128
|
+
#
|
|
129
|
+
# LEVEL|file:line|function|code|rationale
|
|
130
|
+
#
|
|
131
|
+
# where LEVEL is core/io/logger.h error_type_string(): ERROR, WARNING, SCRIPT ERROR
|
|
132
|
+
# or SHADER ERROR. The logger records every level, so a run can be "red" on nothing
|
|
133
|
+
# but warnings; only WARNING is downgraded here. Anything else — including a level
|
|
134
|
+
# this script has never seen — fails the run.
|
|
135
|
+
#
|
|
136
|
+
# finished:false means the probe hit its time ceiling before calling finish(). That
|
|
137
|
+
# is a failure, not a pass. So is any configured waypoint the autopilot missed.
|
|
57
138
|
if command -v python3 >/dev/null 2>&1; then
|
|
58
139
|
python3 - "$OUT/results.json" <<'PY'
|
|
59
140
|
import json, sys
|
|
60
141
|
d = json.load(open(sys.argv[1]))
|
|
61
142
|
reports = d.get("reports", {})
|
|
143
|
+
errors, warnings = [], []
|
|
144
|
+
for line in d.get("errors_seen", []):
|
|
145
|
+
(warnings if line.split("|", 1)[0] == "WARNING" else errors).append(line)
|
|
146
|
+
|
|
147
|
+
def show(lines, limit=10):
|
|
148
|
+
for l in lines[:limit]:
|
|
149
|
+
print(f" {l}", file=sys.stderr)
|
|
150
|
+
if len(lines) > limit:
|
|
151
|
+
print(f" ... {len(lines) - limit} more in results.json", file=sys.stderr)
|
|
152
|
+
|
|
153
|
+
if warnings:
|
|
154
|
+
print(f"WARNINGS: {len(warnings)} engine warning(s) during the run (not failures):", file=sys.stderr)
|
|
155
|
+
show(warnings)
|
|
62
156
|
if not d.get("finished", False):
|
|
63
157
|
print("FAILED: probe did not finish (hit --summer-verify-max)", file=sys.stderr)
|
|
64
158
|
sys.exit(1)
|
|
65
|
-
if
|
|
66
|
-
print(f"FAILED: {len(
|
|
159
|
+
if errors:
|
|
160
|
+
print(f"FAILED: {len(errors)} engine error(s) during the run:", file=sys.stderr)
|
|
161
|
+
show(errors)
|
|
67
162
|
sys.exit(1)
|
|
68
163
|
if reports.get("error"):
|
|
69
164
|
print(f"FAILED: {reports['error']}", file=sys.stderr)
|
|
@@ -74,5 +169,35 @@ missed = [k for k, v in reports.items() if k.endswith("_reached") and v is False
|
|
|
74
169
|
if missed:
|
|
75
170
|
print(f"FAILED: waypoints not reached: {', '.join(sorted(missed))}", file=sys.stderr)
|
|
76
171
|
sys.exit(1)
|
|
172
|
+
reached = sum(1 for k, v in reports.items() if k.endswith("_reached") and v is True)
|
|
173
|
+
what = "smoke test: booted and ran" if reports.get("smoke") else f"{reached} waypoint(s) reached"
|
|
174
|
+
print(f"PASSED: {what}, {len(d.get('frames', []))} frame(s), 0 errors, {len(warnings)} warning(s)")
|
|
77
175
|
PY
|
|
176
|
+
else
|
|
177
|
+
# No python3 (Git Bash on Windows, minimal containers). Coarse line-based reading
|
|
178
|
+
# of the same file: Godot pretty-prints results.json one array element / key per
|
|
179
|
+
# line, so the LEVEL prefix and the report keys are greppable. Fail closed.
|
|
180
|
+
echo "python3 not found: using a coarse shell reading of results.json"
|
|
181
|
+
n_err=$(grep -cE '^[[:space:]]*"(ERROR|SCRIPT ERROR|SHADER ERROR)\|' "$OUT/results.json" || true)
|
|
182
|
+
n_warn=$(grep -cE '^[[:space:]]*"WARNING\|' "$OUT/results.json" || true)
|
|
183
|
+
if (( n_warn > 0 )); then
|
|
184
|
+
echo "WARNINGS: ${n_warn} engine warning(s) during the run (not failures)" >&2
|
|
185
|
+
fi
|
|
186
|
+
if ! grep -qE '^[[:space:]]*"finished": true' "$OUT/results.json"; then
|
|
187
|
+
echo "FAILED: probe did not finish (hit --summer-verify-max)" >&2
|
|
188
|
+
exit 1
|
|
189
|
+
fi
|
|
190
|
+
if (( n_err > 0 )); then
|
|
191
|
+
echo "FAILED: ${n_err} engine error(s) during the run" >&2
|
|
192
|
+
exit 1
|
|
193
|
+
fi
|
|
194
|
+
if grep -qE '^[[:space:]]*"error": ' "$OUT/results.json"; then
|
|
195
|
+
echo "FAILED: probe reported an error (reports.error). Edit the CONFIG block at the top of tests/autopilot/autopilot.gd." >&2
|
|
196
|
+
exit 1
|
|
197
|
+
fi
|
|
198
|
+
if grep -qE '_reached": false' "$OUT/results.json"; then
|
|
199
|
+
echo "FAILED: waypoints not reached" >&2
|
|
200
|
+
exit 1
|
|
201
|
+
fi
|
|
202
|
+
echo "PASSED: 0 errors, ${n_warn} warning(s)"
|
|
78
203
|
fi
|