Spaces:
Running
Running
File size: 4,145 Bytes
297ee59 7d40004 297ee59 7b8d6d3 297ee59 2953ba2 297ee59 978ebb1 e46d26e ab5dfaa e46d26e ab5dfaa e5e0694 e46d26e 978ebb1 e46d26e 297ee59 7b8d6d3 f635d3e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #!/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" <<EOF
bind-addr: 0.0.0.0:${PORT}
auth: password
cert: false
EOF
if [[ -n "${HASHED_PASSWORD:-}" ]]; then
echo "hashed-password: ${HASHED_PASSWORD}" >> "${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.hf.space}"
: "${CODEX_WIRE_API:=responses}"
: "${CODEX_REQUIRES_OPENAI_AUTH:=true}"
cat > "${CODEX_DIR}/config.toml" <<EOF
model_provider = "${CODEX_MODEL_PROVIDER}"
model = "${CODEX_MODEL}"
model_reasoning_effort = "${CODEX_REASONING_EFFORT}"
network_access = "${CODEX_NETWORK_ACCESS}"
disable_response_storage = ${CODEX_DISABLE_RESPONSE_STORAGE}
windows_wsl_setup_acknowledged = ${CODEX_WSL_ACK}
model_verbosity = "${CODEX_VERBOSITY}"
[model_providers.${CODEX_PROVIDER_NAME}]
name = "${CODEX_PROVIDER_NAME}"
base_url = "${CODEX_BASE_URL}"
wire_api = "${CODEX_WIRE_API}"
requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH}
EOF
if [[ -n "${CODEX_AUTH_JSON:-}" ]]; then
printf '%s\n' "${CODEX_AUTH_JSON}" > "${CODEX_DIR}/auth.json"
elif [[ -n "${OPENAI_API_KEY:-}" ]]; then
cat > "${CODEX_DIR}/auth.json" <<EOF
{
"OPENAI_API_KEY": "${OPENAI_API_KEY}"
}
EOF
fi
chmod 600 "${CODEX_DIR}/config.toml" 2>/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" <<EOF
{
"locale": "zh-cn"
}
EOF
# 首次启动安装扩展(幂等)
EXT_MARKER="${USER_DATA_DIR}/.extensions_installed"
if [[ ! -f "${EXT_MARKER}" ]]; then
echo "[INFO] Installing extensions on first boot..."
install_ext() {
code-server --extensions-dir "${EXT_DIR}" --install-extension "$1" || true
}
# 你指定的 3 个(尽量装)
install_ext ms-vscode.cpptools
install_ext ms-vscode.cpptools-themes
install_ext ms-vscode.cpp-devtools
install_ext ms-vscode.cmake-tools
install_ext danielpinto8zz6.c-cpp-compile-run
install_ext redhat.java
install_ext vscjava.vscode-java-debug
install_ext vscjava.vscode-java-test
install_ext vscjava.vscode-maven
install_ext vscjava.vscode-gradle
install_ext vscjava.vscode-java-dependency
install_ext ms-python.vscode-pylance
install_ext ms-python.python
install_ext ms-python.debugpy
install_ext ms-python.vscode-python-envs
# Codex
install_ext openai.chatgpt
# 若微软扩展不可用,装稳定替代
install_ext MS-CEINTL.vscode-language-pack-zh-hans
install_ext llvm-vs-code-extensions.vscode-clangd
install_ext ms-vscode.makefile-tools
install_ext vadimcn.vscode-lldb
touch "${EXT_MARKER}"
fi
echo "[INFO] Java: $(java -version 2>&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 |