Spaces:
Sleeping
Sleeping
| set -e | |
| BASE_DIR="/home/node/.openclaw" | |
| # โโโ ๆธ ็ๅฝๆฐ๏ผ้ๅบๆถๅผบๅถๆๆๆๆๅๅฐไปปๅก โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| cleanup() { | |
| echo "[cleanup] Received exit signal, cleaning up..." | |
| if [ -n "$BACKUP_PID" ]; then | |
| kill "$BACKUP_PID" 2>/dev/null || true | |
| echo "[cleanup] Backup process $BACKUP_PID stopped." | |
| fi | |
| echo "[cleanup] Done." | |
| } | |
| trap cleanup EXIT SIGTERM SIGINT | |
| # โโโ 1. ๅๅปบๅฟ ่ฆ็็ฎๅฝ็ปๆ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| mkdir -p $BASE_DIR/agents/main/sessions | |
| mkdir -p $BASE_DIR/credentials | |
| mkdir -p $BASE_DIR/sessions | |
| mkdir -p $BASE_DIR/workspace | |
| mkdir -p $BASE_DIR/extensions | |
| # โโโ 2. ๆง่กๆขๅค๏ผไป HF Dataset ๆขๅคๆง็ไผ่ฏๅ้ ็ฝฎ๏ผ โโโโโโโโโโโโโโโโโโโโโโโโโ | |
| python3 /app/sync.py restore || true | |
| # โโโ 3. ็ๆ openclaw.json๏ผไป ๅจๆไปถไธๅญๅจๆถ๏ผ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| if [ ! -f $BASE_DIR/openclaw.json ]; then | |
| echo "openclaw.json not found, generating..." | |
| cat > $BASE_DIR/openclaw.json <<EOF | |
| { | |
| "meta": { | |
| "lastTouchedVersion": "2026.3.13", | |
| "lastTouchedAt": "2026-03-22T14:56:52.442Z" | |
| }, | |
| "wizard": { | |
| "lastRunAt": "2026-03-22T14:56:52.442Z", | |
| "lastRunVersion": "2026.3.13", | |
| "lastRunCommand": "onboard", | |
| "lastRunMode": "local" | |
| }, | |
| "models": { | |
| "mode": "merge", | |
| "providers": { | |
| "custom-nvidia": { | |
| "baseUrl": "https://integrate.api.nvidia.com/v1", | |
| "apiKey": "${NVIDIA_API_KEY}", | |
| "api": "openai-completions", | |
| "models": [ | |
| { | |
| "id": "minimaxai/minimax-m2.5", | |
| "name": "minimaxai/minimax-m2.5 (Custom Provider)", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 8192 | |
| }, | |
| { | |
| "id": "nvidia/nemotron-3-super-120b-a12b", | |
| "name": "nvidia/nemotron-3-super-120b-a12b", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| }, | |
| { | |
| "id": "openai/gpt-oss-120b", | |
| "name": "openai/gpt-oss-120b", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| }, | |
| { | |
| "id": "qwen/qwen3.5-397b-a17b", | |
| "name": "qwen/qwen3.5-397b-a17b", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| } | |
| ] | |
| }, | |
| "gemini-auth": { | |
| "baseUrl": "http://107.173.211.130:3000/gemini-cli-oauth/v1", | |
| "apiKey": "${GEMINI_API_KEY}", | |
| "api": "openai-completions", | |
| "models": [ | |
| { | |
| "id": "gemini-3-flash-preview", | |
| "name": "gemini-3-flash-preview", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| }, | |
| { | |
| "id": "gemini-3.1-flash-lite-preview", | |
| "name": "gemini-3.1-flash-lite-preview", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| } | |
| ] | |
| }, | |
| "qwen-auth": { | |
| "baseUrl": "http://107.173.211.130:3000/openai-qwen-oauth/v1", | |
| "apiKey": "${QWEN_API_KEY}", | |
| "api": "openai-completions", | |
| "models": [ | |
| { | |
| "id": "qwen3-coder-flash", | |
| "name": "qwen3-coder-flash", | |
| "api": "openai-completions", | |
| "reasoning": false, | |
| "input": ["text", "image"], | |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, | |
| "contextWindow": 200000, | |
| "maxTokens": 16384 | |
| } | |
| ] | |
| } | |
| } | |
| }, | |
| "agents": { | |
| "defaults": { | |
| "model": { "primary": "gemini-auth/gemini-3.1-flash-lite-preview" }, | |
| "models": { | |
| "gemini-auth/gemini-3.1-flash-lite-preview": {}, | |
| "custom-nvidia/minimaxai/minimax-m2.5": {}, | |
| "custom-nvidia/nvidia/nemotron-3-super-120b-a12b": {}, | |
| "custom-nvidia/openai/gpt-oss-120b": {}, | |
| "custom-nvidia/qwen/qwen3.5-397b-a17b": {}, | |
| "gemini-auth/gemini-3-flash-preview": {}, | |
| "qwen-auth/qwen3-coder-flash": {} | |
| }, | |
| "workspace": "/home/node/.openclaw/workspace" | |
| }, | |
| "list": [ | |
| { | |
| "id": "main", | |
| "model": { | |
| "primary": "gemini-auth/gemini-3.1-flash-lite-preview", | |
| "fallbacks": [ | |
| "custom-nvidia/minimaxai/minimax-m2.5", | |
| "custom-nvidia/nvidia/nemotron-3-super-120b-a12b", | |
| "custom-nvidia/openai/gpt-oss-120b", | |
| "custom-nvidia/qwen/qwen3.5-397b-a17b", | |
| "gemini-auth/gemini-3-flash-preview", | |
| "qwen-auth/qwen3-coder-flash" | |
| ] | |
| } | |
| } | |
| ] | |
| }, | |
| "tools": { | |
| "profile": "full", | |
| "web": { | |
| "search": { "enabled": true, "provider": "duckduckgo" } | |
| } | |
| }, | |
| "commands": { | |
| "native": "auto", | |
| "nativeSkills": "auto", | |
| "restart": true, | |
| "ownerDisplay": "raw" | |
| }, | |
| "session": { "dmScope": "per-channel-peer" }, | |
| "hooks": { | |
| "internal": { | |
| "enabled": true, | |
| "entries": { | |
| "boot-md": { "enabled": true }, | |
| "bootstrap-extra-files": { "enabled": true }, | |
| "command-logger": { "enabled": true }, | |
| "session-memory": { "enabled": true } | |
| } | |
| } | |
| }, | |
| "gateway": { | |
| "port": 7860, | |
| "mode": "local", | |
| "bind": "lan", | |
| "auth": { "mode": "token", "token": "${OPENCLAW_TOKEN}" }, | |
| "tailscale": { "mode": "off", "resetOnExit": false }, | |
| "trustedProxies": ["10.16.0.0/16"], | |
| "controlUi": { | |
| "allowedOrigins": [ | |
| "http://localhost:7860", | |
| "http://127.0.0.1:7860", | |
| "https://wenyin-openclaw.hf.space" | |
| ] | |
| } | |
| }, | |
| "plugins": { | |
| "entries": { | |
| "duckduckgo": { "enabled": true } | |
| } | |
| } | |
| } | |
| EOF | |
| else | |
| echo "openclaw.json already exists (restored from backup), skipping." | |
| fi | |
| # โโโ 4. ๅฎ่ฃ ๅพฎไฟกๆไปถ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| echo "[setup] Installing WeChat plugin..." | |
| CI=true npx -y @tencent-weixin/openclaw-weixin-cli@latest install --force | |
| echo "[setup] WeChat plugin installed." | |
| # โโโ 5. ๅฏๅจๅฎๆถๅคไปฝ๏ผๆฏ 1 ๅฐๆถ๏ผ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| (while true; do sleep 3600; python3 /app/sync.py backup; done) & | |
| BACKUP_PID=$! | |
| echo "[setup] Backup loop started (PID: $BACKUP_PID)" | |
| # โโโ 6. ่ฟ่ก่ชๆฃๅนถๅฏๅจ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| openclaw doctor --fix | |
| exec openclaw gateway run --port 7860 --bind lan | |