#!/usr/bin/env bash set -euo pipefail PORT="${PORT:-7860}" if [[ -z "${PASSWORD:-}" && -z "${HASHED_PASSWORD:-}" ]]; then echo "[ERROR] Missing PASSWORD/HASHED_PASSWORD secret." exit 1 fi if [[ -d "/data" ]]; then WORKDIR="/data/workspace" EXT_DIR="/data/code-server/extensions" USER_DATA_DIR="/data/code-server/user-data" CODEX_DIR="/data/.codex" else WORKDIR="${HOME}/workspace" EXT_DIR="${HOME}/.local/share/code-server/extensions" USER_DATA_DIR="${HOME}/.local/share/code-server/user-data" CODEX_DIR="${HOME}/.codex" fi mkdir -p "$WORKDIR" "$EXT_DIR" "$USER_DATA_DIR" "${USER_DATA_DIR}/User" "${HOME}/.config/code-server" "$CODEX_DIR" cat > "${HOME}/.config/code-server/config.yaml" <> "${HOME}/.config/code-server/config.yaml" else echo "password: ${PASSWORD}" >> "${HOME}/.config/code-server/config.yaml" fi # Codex config.toml : "${CODEX_MODEL_PROVIDER:=sub2api}" : "${CODEX_MODEL:=gpt-5.3-codex}" : "${CODEX_REASONING_EFFORT:=high}" : "${CODEX_NETWORK_ACCESS:=enabled}" : "${CODEX_DISABLE_RESPONSE_STORAGE:=true}" : "${CODEX_WSL_ACK:=true}" : "${CODEX_VERBOSITY:=high}" : "${CODEX_PROVIDER_NAME:=sub2api}" : "${CODEX_BASE_URL:=https://cacode-sub2api-dev.hf.space}" : "${CODEX_WIRE_API:=responses}" : "${CODEX_REQUIRES_OPENAI_AUTH:=true}" cat > "${CODEX_DIR}/config.toml" < "${CODEX_DIR}/auth.json" elif [[ -n "${OPENAI_API_KEY:-}" ]]; then cat > "${CODEX_DIR}/auth.json" </dev/null || true chmod 600 "${CODEX_DIR}/auth.json" 2>/dev/null || true if [[ "${CODEX_DIR}" != "${HOME}/.codex" ]]; then rm -rf "${HOME}/.codex" ln -s "${CODEX_DIR}" "${HOME}/.codex" fi # 默认中文界面 cat > "${USER_DATA_DIR}/User/locale.json" <&1 | head -n1 || true)" echo "[INFO] Python: $(python --version || true)" echo "[INFO] Pip: $(pip --version || true)" echo "[INFO] Node: $(node --version || true)" echo "[INFO] g++: $(g++ --version | head -n1 || true)" exec code-server "$WORKDIR" \ --extensions-dir "$EXT_DIR" \ --user-data-dir "$USER_DATA_DIR" \ --disable-telemetry \ --disable-update-check \ --log warn