45 lines
1.5 KiB
Bash
45 lines
1.5 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# p2-67 Phase 3 — Launch wrapper for the Claude Player headless harness.
|
||
|
|
#
|
||
|
|
# Spawns flatpak Godot headless with the claude_player_main scene and
|
||
|
|
# stdin/stdout piped through. Designed to be exec'd by the Claude SDK
|
||
|
|
# adapter as a child process — `child = spawn("scripts/claude-player-server.sh")`.
|
||
|
|
#
|
||
|
|
# Env vars are forwarded into the sandbox (see CLAUDE_PLAYER_API.md):
|
||
|
|
# CP_SEED, CP_PLAYERS, CP_CLAUDE_SLOT, CP_MAP_SIZE, CP_MAP_TYPE,
|
||
|
|
# CP_OMNISCIENT, CP_TIMEOUT_SEC, CP_LOG_FILE.
|
||
|
|
#
|
||
|
|
# Exit code 0 on clean shutdown (shutdown request received or stdin EOF).
|
||
|
|
# Non-zero on protocol error or harness crash.
|
||
|
|
|
||
|
|
set -uo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||
|
|
|
||
|
|
# Defaults — adapter overrides via env.
|
||
|
|
: "${CP_SEED:=42}"
|
||
|
|
: "${CP_PLAYERS:=2}"
|
||
|
|
: "${CP_CLAUDE_SLOT:=0}"
|
||
|
|
: "${CP_MAP_SIZE:=duel}"
|
||
|
|
: "${CP_MAP_TYPE:=continents}"
|
||
|
|
: "${CP_OMNISCIENT:=0}"
|
||
|
|
: "${CP_TIMEOUT_SEC:=60}"
|
||
|
|
: "${CP_LOG_FILE:=}"
|
||
|
|
|
||
|
|
# Pure-headless mode — no Wayland needed. JSON-Lines speaks to stdout.
|
||
|
|
flatpak run --user \
|
||
|
|
--env=CP_SEED="$CP_SEED" \
|
||
|
|
--env=CP_PLAYERS="$CP_PLAYERS" \
|
||
|
|
--env=CP_CLAUDE_SLOT="$CP_CLAUDE_SLOT" \
|
||
|
|
--env=CP_MAP_SIZE="$CP_MAP_SIZE" \
|
||
|
|
--env=CP_MAP_TYPE="$CP_MAP_TYPE" \
|
||
|
|
--env=CP_OMNISCIENT="$CP_OMNISCIENT" \
|
||
|
|
--env=CP_TIMEOUT_SEC="$CP_TIMEOUT_SEC" \
|
||
|
|
--env=CP_LOG_FILE="$CP_LOG_FILE" \
|
||
|
|
org.godotengine.Godot \
|
||
|
|
--path "$PROJECT_DIR/src/game" \
|
||
|
|
--headless \
|
||
|
|
--rendering-method gl_compatibility \
|
||
|
|
res://engine/scenes/headless/claude_player_main.tscn
|