| # 1) 若设置了 XDG_DATA_HOME:视为直接使用外部存储(挂载点),只启动 opencode,不做任何同步。 | |
| # 2) 若设置了 HF_TOKEN + OPENCODE_DATASET_REPO:从 Dataset 恢复,并用 inotify 在「有改动时」同步到 Dataset。 | |
| # 3) 否则:直接启动 opencode serve(与原先行为一致)。 | |
| set -e | |
| DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share/opencode}" | |
| OPENCODE_BIN="/home/user/.opencode/bin/opencode" | |
| SCRIPT_DIR="/home/user/app/scripts" | |
| DEBOUNCE=20 | |
| # 1) 直接使用外部存储:不恢复、不同步,只启动 | |
| if [ -n "$XDG_DATA_HOME" ]; then | |
| exec $OPENCODE_BIN serve --port 7860 --hostname 0.0.0.0 \ | |
| --cors https://tacits-candy-shop.vercel.app \ | |
| --cors https://opencode-web-pearl.vercel.app | |
| fi | |
| # 2) Dataset 模式:恢复 + 有改动就同步(inotify + 防抖) | |
| if [ -n "$HF_TOKEN" ] && [ -n "$OPENCODE_DATASET_REPO" ]; then | |
| python3 "$SCRIPT_DIR/restore_from_dataset.py" || true | |
| mkdir -p "$DATA_DIR" | |
| trap 'kill -TERM $OPENCODE_PID 2>/dev/null; kill $INOTIFY_PID 2>/dev/null' TERM INT | |
| $OPENCODE_BIN serve --port 7860 --hostname 0.0.0.0 \ | |
| --cors https://tacits-candy-shop.vercel.app \ | |
| --cors https://opencode-web-pearl.vercel.app & | |
| OPENCODE_PID=$! | |
| ( | |
| while kill -0 $OPENCODE_PID 2>/dev/null; do | |
| inotifywait -r -q -e modify,create,delete,move "$DATA_DIR" 2>/dev/null || sleep 60 | |
| sleep $DEBOUNCE | |
| python3 "$SCRIPT_DIR/save_to_dataset.py" || true | |
| done | |
| ) & | |
| INOTIFY_PID=$! | |
| wait $OPENCODE_PID | |
| exit $? | |
| fi | |
| # 3) 未配置:直接启动 | |
| exec $OPENCODE_BIN serve --port 7860 --hostname 0.0.0.0 \ | |
| --cors https://tacits-candy-shop.vercel.app \ | |
| --cors https://opencode-web-pearl.vercel.app | |