-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathsetup.sh
More file actions
247 lines (202 loc) · 6.66 KB
/
setup.sh
File metadata and controls
247 lines (202 loc) · 6.66 KB
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#!/bin/bash
# ==========================================
# AIStudioBuildProxy 一键管理脚本
# ==========================================
# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# 定义仓库地址
REPO_URL="https://github.com/starowo/AIStudioBuildProxy.git"
SERVER_BRANCH="server"
CLIENT_BRANCH="client"
# 定义插件路径
PLUGIN_DIR_NAME="AIStudioBuildProxy"
SERVER_PATH="plugins/$PLUGIN_DIR_NAME"
CLIENT_BASE="public/scripts/extensions/third-party"
CLIENT_PATH="$CLIENT_BASE/$PLUGIN_DIR_NAME"
# ------------------------------------------
# 工具函数
# ------------------------------------------
log_info() {
echo -e "${CYAN}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Git 是否安装
check_git() {
if ! command -v git &> /dev/null; then
log_error "未检测到 Git!请先安装 Git 后再运行此脚本。"
echo "Windows用户请下载: https://git-scm.com/download/win"
exit 1
fi
}
# ------------------------------------------
# 目录定位逻辑
# ------------------------------------------
find_root_dir() {
log_info "正在检测酒馆根目录..."
if [[ -f "config.yaml" && -d "plugins" ]]; then
log_success "当前即为酒馆根目录。"
return 0
fi
if [[ -f "../config.yaml" && -d "../plugins" ]]; then
cd ..
log_success "在上一级找到酒馆根目录,已切换。"
return 0
fi
log_info "当前目录未找到,正在扫描子目录..."
TARGET_ROOT=$(find . -maxdepth 2 -name "config.yaml" -type f -print -quit | xargs dirname 2>/dev/null)
if [[ -n "$TARGET_ROOT" && -d "$TARGET_ROOT/plugins" ]]; then
cd "$TARGET_ROOT"
log_success "在子目录 [$(pwd)] 找到酒馆根目录,已切换。"
return 0
fi
log_error "未找到酒馆根目录(必须包含 config.yaml 和 plugins 文件夹)。"
log_error "请将此脚本放在 SillyTavern 的根目录或其子文件夹内运行。"
return 1
}
# ------------------------------------------
# 核心功能
# ------------------------------------------
enable_server_plugins() {
if [ ! -f "config.yaml" ]; then
log_error "config.yaml 文件不存在!"
return
fi
log_info "正在检查 config.yaml 设置..."
if grep -q "enableServerPlugins: true" config.yaml; then
log_success "Server Plugins 已经开启,跳过修改。"
else
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' 's/enableServerPlugins: false/enableServerPlugins: true/g' config.yaml
else
sed -i 's/enableServerPlugins: false/enableServerPlugins: true/g' config.yaml
fi
if grep -q "enableServerPlugins: true" config.yaml; then
log_success "config.yaml 修改成功:已开启 Server Plugins。"
else
log_warn "config.yaml 修改失败,请手动检查。"
fi
fi
}
install_plugins() {
echo -e "\n------------------------------------------"
log_info "开始安装流程..."
enable_server_plugins
echo -e "\n>>> 处理服务端插件 (Server Side)..."
if [ -d "$SERVER_PATH" ]; then
log_warn "发现旧的服务端插件,正在删除..."
rm -rf "$SERVER_PATH"
fi
if [ -d "plugins" ]; then
cd plugins
log_info "正在克隆服务端仓库..."
if git clone -b "$SERVER_BRANCH" "$REPO_URL"; then
log_success "服务端插件安装成功。"
else
log_error "服务端插件下载失败,请检查网络或代理设置。"
cd ..
return 1
fi
cd ..
else
log_error "plugins 目录不存在,这是个正常的酒馆目录吗?"
return 1
fi
echo -e "\n>>> 处理客户端扩展 (Client Side)..."
if [ ! -d "$CLIENT_BASE" ]; then
log_warn "未找到第三方扩展目录 ($CLIENT_BASE)。"
log_info "尝试创建目录..."
mkdir -p "$CLIENT_BASE"
fi
if [ -d "$CLIENT_PATH" ]; then
log_warn "发现旧的客户端扩展,正在删除..."
rm -rf "$CLIENT_PATH"
fi
cd "$CLIENT_BASE"
log_info "正在克隆客户端仓库..."
if git clone -b "$CLIENT_BRANCH" "$REPO_URL"; then
log_success "客户端扩展安装成功。"
else
log_error "客户端扩展下载失败,请检查网络或代理设置。"
cd - > /dev/null
return 1
fi
cd - > /dev/null 2>&1
echo -e "\n------------------------------------------"
echo -e "${GREEN}✅ 所有操作已完成!请重启酒馆 (SillyTavern) 以生效。${NC}"
echo -e "------------------------------------------"
}
uninstall_plugins() {
echo -e "\n------------------------------------------"
log_info "开始卸载流程..."
if [ -d "$SERVER_PATH" ]; then
rm -rf "$SERVER_PATH"
log_success "服务端插件已删除。"
else
log_warn "未找到服务端插件,跳过。"
fi
if [ -d "$CLIENT_PATH" ]; then
rm -rf "$CLIENT_PATH"
log_success "客户端扩展已删除。"
else
log_warn "未找到客户端扩展,跳过。"
fi
echo -e "\n${GREEN}✅ 卸载完成。${NC}"
}
# ------------------------------------------
# 主程序
# ------------------------------------------
clear
echo -e "${CYAN}"
echo "#############################################"
echo "# AIStudioBuildProxy 自动安装脚本 #"
echo "# 专治各种不会用,一键搞定 #"
echo "#############################################"
echo -e "${NC}"
check_git
if ! find_root_dir; then
# 兼容管道模式的暂停
read -n 1 -s -r -p "按任意键退出..." < /dev/tty
exit 1
fi
while true; do
echo -e "\n当前工作目录: $(pwd)"
echo -e "${YELLOW}请选择操作:${NC}"
echo "1) 安装 / 重新安装 (推荐)"
echo "2) 卸载插件"
echo "0) 退出"
# 修复:显式从 /dev/tty 读取输入,解决管道模式下的死循环
read -p "请输入数字 [1/2/0]: " choice < /dev/tty
case $choice in
1)
install_plugins
break
;;
2)
uninstall_plugins
break
;;
0)
echo "再见!"
exit 0
;;
*)
log_error "输入错误,请输入 1, 2 或 0"
;;
esac
done
# 兼容管道模式的暂停
echo ""
read -n 1 -s -r -p "按任意键退出脚本..." < /dev/tty
echo ""