Files
edict/uninstall.sh
cft0808 66c7407d0f fix: kanban EDICT_HOME 环境变量支持 + 卸载脚本
- kanban_update.py: 优先读取 EDICT_HOME 定位中央仓库,
  解决脚本被复制到 workspace 后数据孤岛问题 (Fixes #90)
- run_loop.sh: 自动 export EDICT_HOME
- uninstall.sh: 一键卸载脚本 (Fixes #114, Refs #118)
  - 停止相关进程
  - 清理 openclaw.json 注册
  - 删除 workspace 目录
  - 可选删除 data 缓存
2026-03-26 21:29:09 +08:00

166 lines
5.9 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ══════════════════════════════════════════════════════════════
# 三省六部 · OpenClaw Multi-Agent System 一键卸载脚本
# ══════════════════════════════════════════════════════════════
set -e
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OC_HOME="$HOME/.openclaw"
OC_CFG="$OC_HOME/openclaw.json"
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
banner() {
echo ""
echo -e "${BLUE}╔══════════════════════════════════════════╗${NC}"
echo -e "${BLUE}║ 🏛️ 三省六部 · 卸载向导 ║${NC}"
echo -e "${BLUE}╚══════════════════════════════════════════╝${NC}"
echo ""
}
log() { echo -e "${GREEN}$1${NC}"; }
warn() { echo -e "${YELLOW}⚠️ $1${NC}"; }
info() { echo -e "${BLUE} $1${NC}"; }
# ── Step 0: 确认 ────────────────────────────────────────────
check_env() {
info "检查环境..."
if ! command -v python3 &>/dev/null; then
warn "未找到 python3跳过清理配置项"
fi
echo ""
echo -e "${YELLOW}确定要卸载「三省六部」系统并清理相关 Agent 数据吗?${NC}"
read -p "(y/N) " -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
info "已取消卸载"
exit 0
fi
}
# ── Step 1: 停止正在运行的服务 ────────────────────────────────
stop_services() {
info "尝试停止相关进程..."
if pgrep -f "scripts/run_loop.sh" > /dev/null 2>&1; then
pkill -f "scripts/run_loop.sh" || warn "无法自动停止 run_loop.sh"
log "已尝试停止 run_loop.sh"
fi
if pgrep -f "python.*dashboard/server.py" > /dev/null 2>&1; then
pkill -f "python.*dashboard/server.py" || warn "无法自动停止 dashboard/server.py"
log "已尝试停止 dashboard/server.py"
fi
}
# ── Step 2: 清理 OpenClaw 注册配置 ──────────────────────────────
unregister_agents() {
info "从 OpenClaw 移除三省六部 Agents 注册信息..."
if [ ! -f "$OC_CFG" ]; then
warn "未找到 openclaw.json跳过配置清理"
return
fi
cp "$OC_CFG" "$OC_CFG.bak.pre-uninstall-$(date +%Y%m%d-%H%M%S)"
log "已备份当前配置"
python3 << 'PYEOF'
import json, pathlib
cfg_path = pathlib.Path.home() / '.openclaw' / 'openclaw.json'
if not cfg_path.exists():
print(" openclaw.json 不存在。")
exit(0)
try:
cfg = json.loads(cfg_path.read_text(encoding='utf-8'))
except Exception as e:
print(f" 解析 openclaw.json 失败: {e}")
exit(1)
AGENTS_TO_REMOVE = {
"taizi", "zhongshu", "menxia", "shangshu",
"hubu", "libu", "bingbu", "xingbu", "gongbu",
"libu_hr", "zaochao"
}
agents_list = cfg.get('agents', {}).get('list', [])
new_list = [a for a in agents_list if a.get('id') not in AGENTS_TO_REMOVE]
removed_count = len(agents_list) - len(new_list)
if 'agents' in cfg:
cfg['agents']['list'] = new_list
cfg_path.write_text(json.dumps(cfg, ensure_ascii=False, indent=2), encoding='utf-8')
print(f" 成功移除了 {removed_count} 个 Agent 的注册信息")
PYEOF
log "注册信息清理完成"
}
# ── Step 3: 清除 Workspace 目录 ─────────────────────────────────
remove_workspaces() {
info "清除 Agent Workspace 目录..."
AGENTS=(taizi zhongshu menxia shangshu hubu libu bingbu xingbu gongbu libu_hr zaochao)
removed=0
for agent in "${AGENTS[@]}"; do
ws="$OC_HOME/workspace-$agent"
if [ -d "$ws" ]; then
rm -rf "$ws"
removed=$((removed+1))
fi
done
log "成功清理了 $removed 个 Workspace 目录"
}
# ── Step 4: 清除本地数据缓存 ────────────────────────────────────
remove_data() {
info "清除本地 data 缓存..."
echo -e "${YELLOW}是否需要删除项目内的 data 目录及已生成的数据?${NC}"
read -p "(y/N) " -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
if [ -d "$REPO_DIR/data" ]; then
rm -rf "$REPO_DIR/data"
log "已删除 $REPO_DIR/data"
else
warn "$REPO_DIR/data 不存在"
fi
else
info "保留原有 data 目录"
fi
}
# ── Step 5: 重启 Gateway ────────────────────────────────────────
restart_gateway() {
info "重启 OpenClaw Gateway 以应用配置..."
if command -v openclaw &>/dev/null; then
if openclaw gateway restart 2>/dev/null; then
log "Gateway 重启成功"
else
warn "Gateway 重启失败请手动重启openclaw gateway restart"
fi
else
warn "未找到 openclaw 命令行工具,跳过重启 Gateway"
fi
}
# ── Main ────────────────────────────────────────────────────
banner
check_env
stop_services
unregister_agents
remove_workspaces
remove_data
restart_gateway
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ ✅ 三省六部卸载完成! ║${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════════╝${NC}"
echo ""