#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd)" ENV_FILE="$REPO_ROOT/openspace/.env" PRIMARY_CODEX_HOME="${PRIMARY_CODEX_HOME:-$HOME/.codex}" PROFILE_HOME="${CODEX_HOME:-$HOME/.codex-openspace}" if [[ "${1:-}" == "guard" ]]; then shift exec "$REPO_ROOT/.venv/bin/python" "$REPO_ROOT/scripts/codex_mcp_guard.py" "$@" fi if [[ ! -f "$ENV_FILE" ]]; then echo "Missing $ENV_FILE" >&2 exit 1 fi set -a source "$ENV_FILE" set +a if [[ -z "${OPENSPACE_LLM_API_KEY:-}" ]]; then echo "OPENSPACE_LLM_API_KEY is missing in $ENV_FILE" >&2 exit 1 fi OPENSPACE_MODEL="${OPENSPACE_MODEL:-gpt-5.4}" OPENSPACE_LLM_API_BASE="${OPENSPACE_LLM_API_BASE:-https://codexapi.space/v1}" OPENSPACE_LLM_OPENAI_STREAM_COMPAT="${OPENSPACE_LLM_OPENAI_STREAM_COMPAT:-true}" OPENSPACE_SKILL_EMBEDDING_BACKEND="${OPENSPACE_SKILL_EMBEDDING_BACKEND:-local}" OPENSPACE_SKILL_EMBEDDING_MODEL="${OPENSPACE_SKILL_EMBEDDING_MODEL:-BAAI/bge-small-en-v1.5}" sync_profile_dir() { local name="$1" local src="$PRIMARY_CODEX_HOME/$name" local dst="$PROFILE_HOME/$name" if [[ ! -d "$src" ]]; then return fi if [[ -L "$dst" ]]; then rm -f "$dst" fi mkdir -p "$dst" rsync -a --delete "$src/" "$dst/" } bootstrap_profile_home() { mkdir -p "$PROFILE_HOME" mkdir -p "$PROFILE_HOME/state/openspace" sync_profile_dir "plugins" sync_profile_dir "skills" sync_profile_dir "pua" cat > "$PROFILE_HOME/auth.json" < "$PROFILE_HOME/config.toml" <