Skip to content

Commit daab13c

Browse files
committed
feat: 飞书官方插件迁移 + 配对审批 + Gateway防卡死 + 微信升级修复 + 更新检测修复
- 飞书渠道从 @openclaw/feishu 迁移到 @larksuite/openclaw-lark 官方插件 - 保存飞书配置时自动禁用旧 feishu 插件,防止新旧插件冲突 - 所有主要渠道(飞书/Telegram/Discord/Slack)启用配对审批UI - gateway_command 增加20s超时,超时后force-kill+fresh start - 全平台启动前端口占用检查,防止Guardian无限拉起 - Linux gateway_command 补齐 Duration 导入和 cleanup_zombie 实现 - Guardian自动守护在Tauri桌面端也启用,轮询间隔30s→15s - 微信渠道:升级操作不再弹出扫码二维码,按钮文案区分安装/升级 - 版本更新检测:CI不再将minAppVersion写死为当前版本 - 部署脚本增强OpenClaw检测,支持已安装的官方版 - API错误信息完整展示(429限流等),URL自动转可点击链接 - 第三方API接入引导优化:移除内置密钥,引导式流程 - 修复全平台 Clippy 警告(strip_prefix/dead_code/unnecessary_unwrap等) - Rust代码格式化修复(cargo fmt) - toast组件支持HTML内容渲染 - Rust后端test_model返回详细错误信息
1 parent dccb4b4 commit daab13c

47 files changed

Lines changed: 8010 additions & 2710 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# =============================================================================
2+
# ClawPanel .dockerignore
3+
# 避免不必要的文件进入镜像,减小镜像大小
4+
# =============================================================================
5+
6+
# -----------------------------------------------------------------------------
7+
# 版本控制和元数据
8+
# -----------------------------------------------------------------------------
9+
.git
10+
.gitignore
11+
.gitattributes
12+
LICENSE
13+
CHANGELOG.md
14+
15+
# -----------------------------------------------------------------------------
16+
# 开发文件和配置
17+
# -----------------------------------------------------------------------------
18+
.env
19+
.env.*
20+
!.env.example
21+
.vscode/
22+
.idea/
23+
*.swp
24+
*.swo
25+
*~
26+
.DS_Store
27+
Thumbs.db
28+
29+
# -----------------------------------------------------------------------------
30+
# Rust/Tauri 构建产物(桌面版相关)
31+
# -----------------------------------------------------------------------------
32+
src-tauri/target/
33+
src-tauri/Cargo.lock
34+
src-tauri/*.rs.bak
35+
src-tauri/gen/
36+
37+
# -----------------------------------------------------------------------------
38+
# 文档和静态资源(不参与构建)
39+
# -----------------------------------------------------------------------------
40+
docs/
41+
*.png
42+
!src-tauri/icons/*.png
43+
*.ico
44+
!src-tauri/icons/*.ico
45+
*.icns
46+
!src-tauri/icons/*.icns
47+
48+
# -----------------------------------------------------------------------------
49+
# 测试文件
50+
# -----------------------------------------------------------------------------
51+
**/*.test.js
52+
**/*.test.ts
53+
**/*.spec.js
54+
**/*.spec.ts
55+
**/coverage/
56+
57+
# -----------------------------------------------------------------------------
58+
# 临时文件和缓存
59+
# -----------------------------------------------------------------------------
60+
*.log
61+
*.tmp
62+
*.temp
63+
.cache/
64+
.npm/
65+
.yarn/
66+
.vite/
67+
68+
# 但保留必要的配置文件
69+
!vite.config.js
70+
!package.json
71+
!package-lock.json
72+
73+
# -----------------------------------------------------------------------------
74+
# 脚本文件
75+
# -----------------------------------------------------------------------------
76+
scripts/*.js
77+
scripts/*.sh
78+
!scripts/serve.js
79+
80+
# -----------------------------------------------------------------------------
81+
# CI/CD 配置
82+
# -----------------------------------------------------------------------------
83+
.github/
84+
.gitlab-ci.yml
85+
Jenkinsfile
86+
azure-pipelines.yml
87+
88+
# -----------------------------------------------------------------------------
89+
# 本地开发和调试文件
90+
# -----------------------------------------------------------------------------
91+
*.local
92+
*.debug
93+
dev.ps1
94+
dev.sh
95+
build.ps1
96+
build.sh
97+
deploy.sh
98+
linux-deploy.sh
99+
*.bak
100+
101+
# -----------------------------------------------------------------------------
102+
# 其他不需要的文件
103+
# -----------------------------------------------------------------------------
104+
*.zip
105+
*.tar.gz
106+
*.tar
107+
108+
# -----------------------------------------------------------------------------
109+
# 隐藏文件
110+
# -----------------------------------------------------------------------------
111+
.dockerignore
112+
.windsurf/
113+
.tmp/
114+
.context.md
115+
BLOCKING_ISSUES_REPORT.md
116+
LOBSTER-LEGION-ARCHIVE.md
117+
SECURITY.md
118+
CONTRIBUTING.md
119+
openclaw-version-policy.json
120+
__clawapp-chat-ref.js

.github/workflows/release.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,15 @@ jobs:
166166
# 上传为 Release Asset
167167
gh release upload "$TAG_NAME" "web-${VERSION}.zip" --clobber
168168
169+
# 读取现有 minAppVersion(前端热更新通常不需要更新 Rust 后端,保留旧值)
170+
MIN_APP_VER=$(cat docs/update/latest.json 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin).get('minAppVersion','0.9.0'))" 2>/dev/null || echo "0.9.0")
171+
169172
# 更新 docs/update/latest.json
170173
DL_URL="https://github.com/${{ github.repository }}/releases/download/${TAG_NAME}/web-${VERSION}.zip"
171174
cat > docs/update/latest.json << EOF
172175
{
173176
"version": "${VERSION}",
174-
"minAppVersion": "${VERSION}",
177+
"minAppVersion": "${MIN_APP_VER}",
175178
"hash": "sha256:${HASH}",
176179
"url": "${DL_URL}",
177180
"size": ${SIZE},

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# 依赖
22
node_modules/
33

4+
.cursor
5+
docs/issue-solutions.md
46
# 构建产物
57
dist/
68
src-tauri/target/
@@ -52,4 +54,9 @@ docs/promo-video.mp4
5254

5355
# Rust 开发工具
5456
src-tauri/.cargo/
55-
.codex/
57+
.codex/
58+
# AI 上下文记忆
59+
.context.md
60+
CONTEXT_STATE.md
61+
PROJECT_CONTRACT.md
62+
project.yaml

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,64 @@
55
格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)
66
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)
77

8+
## [0.9.8] - 2026-03-23
9+
10+
### 新功能 (Features)
11+
12+
- **渠道管理全面增强** — 新增渠道列表 + Agent 绑定双面板布局,支持渠道卡片批量管理
13+
- **10 大消息渠道全覆盖** — QQBot、Telegram、Discord、Slack、飞书、钉钉、微信、Signal、Matrix、MS Teams 全部支持面板内配置、保存、校验
14+
- **Signal 在线校验** — 新增 signal-cli HTTP daemon 连通性检测(/v1/about 端点),返回 API 版本信息
15+
- **MS Teams 在线校验** — 新增 Azure AD OAuth2 client_credentials 流程校验 App ID / App Password / Tenant ID
16+
- **微信 ClawBot 集成** — 腾讯微信官方 `@tencent-weixin/openclaw-weixin` 插件一键安装 + 扫码登录,QR 码 Canvas 渲染(手机可扫描)、插件版本检测与升级提示、登录后自动写入渠道配置并刷新列表
17+
- **QQ 渠道诊断** — QQBot 渠道增加专属诊断工具,检测插件安装、配置状态
18+
- **Agent 绑定 CRUD** — 支持在面板内直接创建/编辑/删除 Agent 路由绑定
19+
- **渠道标签映射** — 新增 channel-labels.js,统一中文渠道名称(如 telegram→Telegram, discord→Discord)
20+
- **Docker 部署支持** — 新增 Dockerfile 多阶段构建 + docker-compose.yml + 一键部署脚本
21+
- **Skills 管理增强** — Skill 验证、扫描、安装功能全面增强,支持 fullPath 检测
22+
- **Messaging 插件迁移** — QQBot 插件自动迁移到 @tencent-connect/openclaw-qqbot
23+
24+
### 修复 (Fixes)
25+
26+
- **WhatsApp 渠道移除** — 上游 WhatsApp 插件运行时未加载(Gateway `web.login.start` 返回 `not available`),暂时移除;改用微信官方渠道替代
27+
- **messaging.rs 编译错误修复** — 修复 `insert_array_as_csv` 缺少引用、Matrix/MS Teams 保存时 `cfg` 双重可变借用导致编译失败
28+
- **Gateway PID 检测逻辑修复** — Windows `is_process_alive` 从错误的前缀匹配改为精确 PID 字段解析
29+
- **JSON 配置修复重写**`fix_common_json_errors` 单引号修复和注释剥离完全重写,避免截断 URL 中的 `//`
30+
- **Linux 异步阻塞修复**`check_service_status``start_service_impl` 中的同步 TCP 连接改用 `spawn_blocking`
31+
- **XSS 安全修复** — channels.js `showWarning`、main.js `errMsg`、agents.js `renderBindingBadges` 和错误加载均添加 HTML 转义
32+
- **渠道卡片编辑按钮修复** — 已接入渠道卡片的「编辑」按钮缺失 click handler,点击无响应;现已补全事件绑定
33+
- **微信渠道检测修复** — 微信登录后自动写入 `channels.openclaw-weixin` 配置,修复 `platform_list_id` / `platform_storage_key` 双向映射,登录后立即刷新列表
34+
- **Vite 代理修复** — 移除重复 `ws: true`、无效 `econnreset` 事件监听,修复 WebSocket socket 错误处理
35+
- **Docker 部署修复** — .dockerignore 不再排除 src/,volume 挂载路径与 Dockerfile USER 一致
36+
- **心跳检测修复** — WebSocket 首次连接时 `_lastMessageAt` 初始化为 `Date.now()`,避免心跳永远不触发
37+
- **PID 安全假设修复**`get_gateway_pid_by_port` 读不到命令行时不再假定为 Gateway
38+
39+
### 改进 (Improvements)
40+
41+
- **Win11 wmic 兼容**`read_process_command_line` 优先使用 PowerShell `Get-CimInstance`,fallback 到 wmic
42+
- **macOS Intel 路径兼容** — 版本检测和来源检测同时查找 `/opt/homebrew`(ARM)和 `/usr/local`(Intel)
43+
- **macOS PID 检测** — 服务状态检测新增 `lsof` 获取 PID,不再始终返回 None
44+
- **Windows 路径兼容** — Skills fullPath 验证支持 Windows 盘符路径(如 `C:\`
45+
- **gateway_listen_port 缓存** — 新增 5 秒缓存,避免服务检测时频繁读文件解析 JSON
46+
- **第三方 API 接入引导优化** — 移除内置密钥,改为引导式流程(注册→填密钥→选模型),新增助手↔OpenClaw 双向同步按钮(带确认框)
47+
- **API 错误信息完整展示** — 模型测试和助手测试的 API 错误(如 429 限流)完整显示 error.message,URL 自动转为可点击链接,方便排查和引流
48+
- **飞书渠道升级** — 从 `@openclaw/feishu` 迁移到飞书官方插件 `@larksuite/openclaw-lark`,支持文档读写、多维表格、日程等高级能力,一键扫码创建机器人
49+
- **Gateway 重启防卡死**`gateway_command` 增加 20s 超时,超时后自动 force-kill 残留进程并 fresh start;全平台启动前端口占用检查防止重复拉起;Guardian 自动守护在 Tauri 桌面端也启用;状态轮询间隔从 30s 缩短至 15s
50+
- **Regex 编译优化** — 多行注释正则改用 LazyLock 静态编译
51+
- **Agent 配置注释修正**`agents.profiles` 注释修正为上游实际的 `agents.list`
52+
- **Linux cmd 候选清理** — 移除 Unix 平台上无意义的 `openclaw.cmd` 候选路径
53+
54+
### 待规划 (Planned)
55+
56+
> 以下为已归档的规划方案摘要,原独立文档已清理。
57+
58+
- **Gateway 运行检测重构** — 用统一的「端口 + HTTP 探针」方案替换当前各平台复杂的进程/netstat/launchctl 检测逻辑,跨 Windows/macOS/Linux 统一实现。核心思路:先查端口占用确认进程存在,再发 HTTP 请求确认是 Gateway(`GET /v1/health``/v1/version`)。详见原 `docs/gateway-detection-plan.md`
59+
- **AI 助手功能扩展** — 五大模块:① Docker/WSL 管理(容器操作、镜像管理)② Web 搜索(搜索引擎集成、结果注入上下文)③ SSH 远程管理(连接/命令/文件传输)④ 知识库/灵魂迁移(导入导出 Agent 灵魂与知识)⑤ 模型配置自动导入(从服务商 API 自动发现模型)。详见原 `docs/assistant-features-plan.md`
60+
- **Docker 多实例管理** — API 代理 + 实例切换架构,支持一台机器部署多个 OpenClaw Docker 实例并在面板内统一调度。涉及 dev-api.js 代理层、前端实例选择器、数据隔离。详见原 `docs/docker-multi-instance-plan.md`
61+
- **国际化 (i18n)** — 基于 i18n.js 核心模块实现中英双语,语言包 JSON 结构,按页面逐步迁移硬编码中文字符串。包含语言检测、降级策略、参数插值。详见原 `docs/i18n-plan.md`
62+
- **命令执行权限管理** — AI 助手执行终端命令时支持白名单/黑名单规则,四种模式(确认/白名单/黑名单/无限),glob 通配符匹配,存储于 `clawpanel.json`。详见原 `docs/ROADMAP-v0.9.md`
63+
- **安装体验优化** — 默认安装原版包、保存自定义 Node.js 路径后实时生效验证、Linux Web 版后台一键更新机制
64+
- **其他** — 渠道级消息统计、更多国内模型服务商预设、Rust 原生 Docker API(bollard)、前端热更新增量包
65+
866
## [0.9.7] - 2026-03-21
967

1068
### 新功能 (Features)

Dockerfile

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# =============================================================================
2+
# ClawPanel Dockerfile - 多阶段构建
3+
# 支持 Docker BuildKit,提供优化的生产镜像
4+
# =============================================================================
5+
#
6+
# 构建命令:
7+
# docker build -t clawpanel .
8+
# docker build -t clawpanel --build-arg NPM_REGISTRY=https://registry.npmmirror.com .
9+
#
10+
# 或使用 Docker Compose:
11+
# docker compose up -d
12+
#
13+
# 访问地址: http://localhost:1420
14+
# =============================================================================
15+
16+
# -----------------------------------------------------------------------------
17+
# 阶段 1: 构建阶段 (builder)
18+
# -----------------------------------------------------------------------------
19+
FROM node:22-alpine AS builder
20+
21+
# 安装构建依赖
22+
RUN apk add --no-cache \
23+
git \
24+
python3 \
25+
make \
26+
g++
27+
28+
WORKDIR /build
29+
30+
# 复制项目文件
31+
COPY package*.json ./
32+
COPY vite.config.js ./
33+
COPY index.html ./
34+
COPY scripts/ ./scripts/
35+
COPY src/ ./src/
36+
37+
# 安装依赖并构建
38+
RUN npm ci --prefer-offline --registry https://registry.npmmirror.com && \
39+
npm run build
40+
41+
# -----------------------------------------------------------------------------
42+
# 阶段 2: 生产阶段 (production)
43+
# -----------------------------------------------------------------------------
44+
FROM node:22-alpine AS production
45+
46+
# 安装运行时依赖
47+
RUN apk add --no-cache \
48+
git \
49+
curl \
50+
bash \
51+
tzdata
52+
53+
# 设置时区
54+
ENV TZ=Asia/Shanghai
55+
ENV NODE_ENV=production
56+
ENV HOME=/root
57+
58+
# 创建非 root 用户 (可选,主要用于日志查看)
59+
RUN addgroup -g 1000 appgroup && \
60+
adduser -u 1000 -G appgroup -s /bin/sh -D appuser
61+
62+
WORKDIR /app
63+
64+
# 复制构建产物
65+
COPY --from=builder --chown=appuser:appgroup /build/dist ./dist
66+
COPY --from=builder --chown=appuser:appgroup /build/scripts ./scripts
67+
COPY --from=builder --chown=appuser:appgroup /build/package*.json ./
68+
COPY --from=builder --chown=appuser:appgroup /build/node_modules ./node_modules
69+
70+
# 安装 OpenClaw CLI(用于读写配置)
71+
# 使用国内镜像源加速
72+
RUN npm install -g @qingchencloud/openclaw-zh --registry https://registry.npmmirror.com || \
73+
npm install -g @qingchencloud/openclaw-zh --registry https://registry.npmjs.org
74+
75+
# 创建数据目录
76+
RUN mkdir -p /app/data && \
77+
chown -R appuser:appgroup /app
78+
79+
# 暴露端口
80+
EXPOSE 1420
81+
82+
# 使用 root 用户运行(确保能管理 Gateway 等)
83+
# 如需安全性,可切换到 appuser,但需确保卷挂载权限正确
84+
USER root
85+
86+
# 健康检查
87+
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
88+
CMD curl -f http://localhost:1420/ || exit 1
89+
90+
# 启动命令
91+
CMD ["node", "scripts/serve.js"]

0 commit comments

Comments
 (0)