File size: 3,770 Bytes
512f4fa
dac2247
d6be067
670c1d0
 
 
ba27334
d6be067
ba27334
512f4fa
670c1d0
 
ba27334
 
 
d6be067
ba27334
512f4fa
84dd831
ba27334
49290b8
670c1d0
84dd831
670c1d0
d6be067
dac2247
d6be067
 
 
 
ba27334
d6be067
ba27334
d6be067
ba27334
d6be067
670c1d0
d6be067
 
 
ba27334
670c1d0
d6be067
670c1d0
 
d6be067
 
670c1d0
87e3582
84dd831
ba27334
d6be067
 
dac2247
ba27334
 
dac2247
d6be067
670c1d0
d6be067
512f4fa
 
 
 
 
 
 
 
 
17a8a91
512f4fa
 
 
 
17a8a91
 
 
 
ba27334
17a8a91
 
512f4fa
 
17a8a91
ba27334
670c1d0
17a8a91
 
 
 
670c1d0
17a8a91
d6be067
512f4fa
 
 
17a8a91
 
 
 
 
 
 
 
 
3bc6f09
512f4fa
 
d6be067
512f4fa
84dd831
d6be067
a09f6f4
 
ba27334
dac2247
a09f6f4
d6be067
670c1d0
 
 
d6be067
 
670c1d0
 
 
 
84dd831
670c1d0
281eef6
87e3582
 
9392514
438d10a
ba27334
d6be067
 
 
 
 
ba27334
438d10a
 
281eef6
438d10a
 
 
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
141
142
143
144
145
146
147
#!/bin/bash
set -euo pipefail
echo "===== OpenClaw ๅฏๅŠจ่„šๆœฌ v2.3 (็ฎ€ๅŒ–็‰ˆ) ====="
echo "ๅฏๅŠจๆ—ถ้—ด: $(date)"

echo ""
echo "=== 1. ๅˆๅง‹ๅŒ–็ŽฏๅขƒไธŽ็›ฎๅฝ• ==="
mkdir -p /root/.openclaw/{agents/main/sessions,credentials,sessions,skills}
echo "็›ฎๅฝ•็ป“ๆž„ๅˆ›ๅปบๅฎŒๆˆใ€‚"

echo ""
echo "=== 2. ไปŽๅค‡ไปฝๆขๅคๆ•ฐๆฎ ==="
if python3 /app/sync.py restore; then
    echo "โœ“ ๆ•ฐๆฎๆขๅคๅฎŒๆˆใ€‚"
else
    echo "โš ๏ธ  ๆ•ฐๆฎๆขๅคๅคฑ่ดฅ๏ผŒ็ปง็ปญๅฏๅŠจใ€‚" >&2
fi

echo ""
echo "=== 3. ๆฃ€ๆŸฅไธŽๅฎ‰่ฃ…ๆŠ€่ƒฝ ==="
SKILLS=("openclaw-tavily-search")
INSTALLED_SKILLS=()

for skill in "${SKILLS[@]}"; do
    echo "ๅค„็†ๆŠ€่ƒฝ: $skill"
    is_installed=false
    
    # ๆฃ€ๆŸฅๆ˜ฏๅฆๅทฒๅฎ‰่ฃ…
    if clawhub list 2>/dev/null | grep -q "$skill"; then
        echo "  โœ“ ๅทฒๅฎ‰่ฃ…"
        is_installed=true
    # ๆฃ€ๆŸฅๆ˜ฏๅฆๅทฒๅญ˜ๅœจ็›ฎๅฝ•
    elif [ -d "/app/skills/$skill" ] || [ -d "/root/.openclaw/skills/$skill" ]; then
        echo "  โœ“ ็›ฎๅฝ•ๅทฒๅญ˜ๅœจ"
        is_installed=true
    # ๅฐ่ฏ•ๅฎ‰่ฃ…
    else
        echo "  ๐Ÿ”ง ๅฐ่ฏ•ๅฎ‰่ฃ…..."
        if clawhub install "$skill"; then
            echo "  โœ“ ๅฎ‰่ฃ…ๆˆๅŠŸ"
            is_installed=true
        else
            echo "  โš ๏ธ  ๅฎ‰่ฃ…ๅคฑ่ดฅ" >&2
        fi
    fi
    
    [ "$is_installed" = true ] && INSTALLED_SKILLS+=("$skill")
done


echo ""
echo "=== 4. ้…็ฝฎ API ๅœฐๅ€ไธŽ็”Ÿๆˆไธป้…็ฝฎ ==="
# ๆธ…็† API ๅœฐๅ€
CLEAN_BASE="${OPENAI_API_BASE%/}"
CLEAN_BASE="${CLEAN_BASE%/chat/completions}"
CLEAN_BASE="${CLEAN_BASE%/v1}"
CLEAN_BASE="${CLEAN_BASE}/v1"
echo "API ๅœฐๅ€: $CLEAN_BASE"

# ็”Ÿๆˆไธป้…็ฝฎ
cat > /root/.openclaw/openclaw.json <<EOF
{
  "models": {
    "providers": {
      "nvidia": {
        "baseUrl": "$CLEAN_BASE",
        "apiKey": "$OPENAI_API_KEY",
        "api": "openai-completions",
        "models": [
          { "id": "$MODEL", "name": "$MODEL", "contextWindow": 128000 }
        ]
      }
    }
  },
  "agents": { 
    "defaults": { 
      "model": { "primary": "nvidia/$MODEL" } 
    } 
  },
  "commands": { 
    "restart": true 
  },
  "gateway": {
    "mode": "local", 
    "bind": "lan",
    "port": $PORT,
    "trustedProxies": ["127.0.0.1/8", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
    "auth": { 
      "mode": "token", 
      "token": "$OPENCLAW_GATEWAY_PASSWORD" 
    },
    "controlUi": { 
      "allowedOrigins": ["*"],
      "dangerouslyAllowHostHeaderOriginFallback": true,
      "allowInsecureAuth": true,
      "dangerouslyDisableDeviceAuth": true
    }
  },
  "plugins": {
    "allow": ["openclaw-weixin"],
    "entries": {
      "openclaw-weixin": {
        "enabled": true
      }
    }
  },
}
EOF
echo "้…็ฝฎ็”ŸๆˆๅฎŒๆˆ"

echo ""
echo "=== 5. ่ฎพ็ฝฎๆƒ้™ไธŽๆŠ€่ƒฝ้“พๆŽฅ ==="
chmod 700 /root/.openclaw
chmod 600 /root/.openclaw/openclaw.json
chmod 700 /root/.openclaw/{agents,credentials,sessions}
chmod 750 /root/.openclaw/skills

# ๅˆ›ๅปบๆŠ€่ƒฝ้“พๆŽฅ
for skill in "${INSTALLED_SKILLS[@]}"; do
    for dir in "/app/skills/$skill" "/skills/$skill" "/root/.openclaw/skills/$skill"; do
        if [ -d "$dir" ]; then
            ln -sfn "$dir" "/root/.openclaw/skills/$(basename "$skill")"
            echo "โœ“ ้“พๆŽฅๅˆ›ๅปบ: $skill"
            break
        fi
    done
done

echo ""

npm install -g @tencent-weixin/openclaw-weixin
openclaw plugins install "@tencent-weixin/openclaw-weixin"
openclaw channels login --channel openclaw-weixin

echo ""
echo "=== 7. ็Žฏๅขƒๆ‘˜่ฆ ==="
echo "็ซฏๅฃ: $PORT | ๆจกๅž‹: $MODEL"
echo "API: ${CLEAN_BASE%/v1} (v1)"
echo "ไปค็‰Œ: ${OPENCLAW_GATEWAY_PASSWORD:0:3}***"
echo "Tavily: ${TAVILY_API_KEY:0:5}***"

# 5. ๅฏๅŠจๅฎšๆ—ถๅค‡ไปฝ (ๆฏ 1 ๅฐๆ—ถ)
(while true; do sleep 3600; python3 /app/sync.py backup; done) &

# 6. ่ฟ่กŒ
openclaw doctor --fix
exec openclaw gateway run --port $PORT