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