Files
luci-app-openclaw/CHANGELOG.md

233 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
# Changelog
本项目所有重大变更都将记录在此文件中。
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)。
## [1.0.9] - 2026-03-08
### 插件一键升级 & 百炼模型列表扩充
#### 新增
- **插件一键升级**: LuCI 界面"检测升级"发现新版后,可直接点击"⬆️ 升级插件"按钮完成在线升级
- 后台自动从 GitHub Releases 下载 `.run` 安装包并执行
- 实时升级日志显示,带容错处理 (安装过程替换 LuCI 文件导致 API 暂时不可用时自动判定成功)
- 同时保留"📥 手动下载"链接作为备选
- **百炼按量付费模型列表扩充**: 从 4 个模型扩充至 16 个,按类别分组显示
- 千问商业版: qwen-max、qwen-plus (Qwen3.5)、qwen-flash (Qwen3.5)、qwen-turbo、qwen-long (1000万Token上下文)
- 千问Coder: qwen3-coder-plus (100万上下文)、qwen3-coder-flash
- 推理模型: qwq-plus
- 千问开源版: qwen3-235b-a22b、qwen3-32b、qwen3-30b-a3b
- 第三方模型: deepseek-r1、deepseek-v3、kimi-k2.5、glm-5、MiniMax-M2.5
#### 修复
- **CBI 底部按钮未隐藏**: "保存并应用/保存/复位"按钮在基本设置页仍然显示
- 根因: `m.submit = false``m.reset = false` 不被 CBI 框架识别
- 修复: 改为 `m.pageaction = false` (dispatcher.lua 第 294 行检查的正确属性)
- **插件升级后配置管理无法连接**: 升级后 PTY WebSocket 一直转圈 "等待服务就绪"
- 根因: `.run` 安装器覆盖 `/etc/config/openclaw` 导致 `pty_token` 丢失PTY 认证失败
- 修复: 升级时保留用户 UCI 配置 (仅首次安装部署默认配置);安装后自动重启 PTY 服务
## [1.0.8] - 2026-03-07
### 修复第三方模型配置导致 Gateway 崩溃 & 新增 Coding Plan 套餐支持
#### 修复
- **EACCES 权限错误** (#8): Web PTY 以 root 运行,创建的目录 (`sessions/`, `auth-profiles.json` 等) 归 root 所有Gateway 以 `openclaw` 用户运行时无法写入,报 `EACCES: permission denied, mkdir`
- `oc-config.sh`: `auth_set_apikey``json_set`、备份目录创建后均执行 `chown openclaw:openclaw`
- `web-pty.js`: 子进程退出时自动 `chown -R openclaw:openclaw` 整个数据目录
- **第三方模型 404/405 错误** (#11, #13, #14, #15): DeepSeek、xAI Grok、Groq 等 OpenAI 兼容提供商配置后返回 404/405
- 根因: 这些提供商缺少 `register_custom_provider` 调用,未写入 `baseUrl` 导致 Gateway 请求发到错误地址
- 修复: 为 DeepSeek、xAI、Groq 快速配置补充 `register_custom_provider` 调用
- **API 类型错误导致 Gateway 崩溃**: `register_custom_provider``api` 值设为 `openai-chat-completions`,但该值在 OpenClaw v2026.3.2 中不存在
- 正确值为 `openai-completions`,错误值会导致 Gateway 启动时 JSON schema 校验失败,进入 crash loop
- 有效 api 类型: `openai-completions` | `openai-responses` | `openai-codex-responses` | `anthropic-messages` | `google-generative-ai` | `github-copilot` | `bedrock-converse-stream` | `ollama`
#### 新增
- **阿里云 Coding Plan 套餐快速配置**: 千问配置菜单新增 Coding Plan 选项 (选项 c默认推荐)
- Provider: `bailian`Base URL: `https://coding.dashscope.aliyuncs.com/v1`
- 一键注册套餐内全部模型: qwen3.5-plus、qwen3-coder-plus、qwen3-coder-next、qwen3-max、MiniMax-M2.5、glm-5、glm-4.7、kimi-k2.5
- contextWindow / maxTokens 按阿里云官方文档设定 (最大 100万上下文)
- 参考: [阿里云 Coding Plan 文档](https://help.aliyun.com/zh/model-studio/openclaw-coding-plan)
#### 变更
- **千问配置菜单重构**: 从 2 种模式扩展为 3 种
- `a)` Qwen Portal OAuth (官方向导)
- `b)` 百炼按量付费 API Key (`sk-xxx` + `dashscope.aliyuncs.com`)
- `c)` Coding Plan 套餐 (`sk-sp-xxx` + `coding.dashscope.aliyuncs.com`) ★ 默认推荐
- 明确提示两套 API Key / Base URL 不互通
- **`register_custom_provider` 增强**: 新增可选参数 `context_window` (默认 128000) 和 `max_tokens` (默认 32000)
## [1.0.7] - 2026-03-06
### 修复依赖包名错误 & 补充 GNU tar 依赖 (感谢 [@esir](https://github.com/esirplayground) 建议)
#### 修复
- **依赖包名修正**: `util-linux-script` 在 OpenWrt/iStoreOS 软件源中不存在,正确的包名是 `script-utils` (提供 `/usr/bin/script` 命令)。此错误会导致通过 iStore/opkg 安装插件时依赖解析失败
- **补充 GNU tar 依赖**: `openclaw-env` 安装脚本使用 `tar --strip-components=1` 解压 Node.js但 busybox 内置的 tar 不支持该参数。新增 `tar` (GNU tar) 为必需依赖,确保解压操作正常
#### 变更
- `Makefile`: `LUCI_DEPENDS``+util-linux-script``+script-utils +tar`
- `scripts/build_ipk.sh`: 同步更新 Depends 字段
- `scripts/build_run.sh`: 同步更新 Depends 字段
### 修复重启服务时 Gateway crash loop 端口冲突
#### 修复
- **端口冲突 crash loop**: OpenClaw gateway 的架构是主进程 (`openclaw`) fork 出子进程 (`openclaw-gateway`) 监听端口restart 时 procd 只杀主进程,子进程退出慢导致新实例端口冲突反复崩溃
- `stop_service()`: 从空函数改为主动清理 `openclaw-gateway` 子进程 + 等待端口释放 (最长 8 秒)
- `start_service()`: 启动前预检查端口,清理残留进程后再注册 procd 实例
- `reload_service()`: stop 和 start 之间增加等待确保内核回收端口
- LuCI controller: restart 改为先同步 stop 等端口释放,再后台 start
- procd respawn 间隔从 5s → 10s降低连续端口冲突概率
## [1.0.6] - 2026-03-06
### 修复 Docker 环境下安装失败 "mkdir: can't create directory: Directory not empty"
#### 修复
- **OverlayFS 兼容性**: iStoreOS/OpenWrt 安装 Docker 后Docker 的 bind mount (`/overlay/upper/opt/docker`) 导致 OverlayFS 合并视图中 `/opt` 目录完全不可写,所有 `mkdir`/`touch`/`ln` 操作均报 "Directory not empty"
- 新增 `_oc_fix_opt()` 检测函数,自动检测 `/opt` 是否可写
- 不可写时自动执行 `mount --bind /overlay/upper/opt /opt` 绕过 OverlayFS 冲突
- 三重保障: `uci-defaults` (首次安装)、`init.d` (每次开机)、`openclaw-env` (手动操作) 均包含修复逻辑
- 正常系统 (无 Docker) 不受影响,检测到可写后直接跳过
- **openclaw-env**: 新增 `ensure_mkdir()` 安全目录创建函数,替代所有裸 `mkdir -p` 调用
## [1.0.5] - 2026-03-05
### 修复配置管理页面 "spawn script ENOENT" 启动失败 (#3, #4)
#### 修复
- **Web PTY 启动失败**: `web-pty.js` 硬编码依赖 `script` 命令 (来自 `util-linux-script`),但部分 OpenWrt 固件默认不包含该命令,导致 `spawn script ENOENT` 错误并无限循环重启
- 新增 `script` 命令自动检测,不存在时回退到 `sh` 直接执行 `oc-config.sh`
- 新增连续失败计数器 (最多 5 次),防止启动失败时的无限重试循环
- 失败时向用户终端显示明确的错误提示和修复命令
- **Makefile 依赖补全**: `LUCI_DEPENDS` 新增 `+util-linux-script`,确保新安装自动拉取 `script` 命令
## [1.0.4] - 2026-03-05
### 适配 OpenClaw 2026.3.2
#### 破坏性变更修复
- **tools.profile 默认值变更**: 2026.3.2 将 `tools.profile` 默认从 `coding` 改为 `messaging`
- `sync_uci_to_json()` 每次启动强制写入 `tools.profile=coding`
- `openclaw-env init_openclaw()` onboard 命令添加 `--tools-profile coding`
- `openclaw-env do_factory_reset()` onboard 命令添加 `--tools-profile coding`
- `oc-config.sh` 工厂重置 onboard 命令添加 `--tools-profile coding`
- `oc-config.sh` 工厂重置配置写入新增 `tools.profile=coding`
- **ACP dispatch 默认启用**: 2026.3.2 默认开启 ACP dispatch路由器内存有限可能导致 OOM
- `sync_uci_to_json()` 每次启动强制写入 `acp.dispatch.enabled=false`
- `openclaw-env do_factory_reset()` 配置写入新增 `acp.dispatch.enabled=false`
- `oc-config.sh` 工厂重置配置写入新增 `acp.dispatch.enabled=false`
#### 新增
- 健康检查集成 `openclaw config validate --json` 官方配置验证命令
- 健康检查新增 `gateway health --json` CLI 深度检查 (v2026.3.2 HTTP `/health` 已被 SPA 接管)
#### 修复
- **Ollama 配置适配**: `api` 从废弃的 `openai-chat-completions` 改为原生 `ollama` API 类型
- **Ollama baseUrl 格式**: 去掉 `/v1` 后缀,使用官方原生地址格式 (`http://host:11434`)
- **Ollama apiKey 对齐**: 从 `ollama` 改为官方默认值 `ollama-local`
- **启动自动迁移**: `sync_uci_to_json` 自动将旧版 Ollama 配置迁移到 v2026.3.2 格式
#### 改进
- 配置管理页面移除「菜单功能说明」信息框,减少视觉干扰
- `OC_TESTED_VERSION` 更新至 `2026.3.2`
## [1.0.3] - 2026-03-05
### 修复
- **P0** 配置管理写入错误的 JSON 路径导致 Gateway 崩溃且无法恢复 (#1)
- `json_set models.openai.apiKey``openclaw.json` 创建了非法的顶层 `models`
- OpenClaw 2026.3.1 严格校验配置 schema拒绝启动并报 `Unknown config keys: models.openai`
- 修复: API Key 改写入 `auth-profiles.json`,模型注册到 `agents.defaults.models`
- 影响: 所有 11 个供应商的快速配置 (OpenAI/Anthropic/Gemini/OpenRouter/DeepSeek/GitHub Copilot/Qwen/xAI/Groq/SiliconFlow/自定义)
- **P0** 恢复默认配置 → "清除模型配置" 未清理 `auth-profiles.json` 认证信息
- **P1** 健康检查新增自动修复: 检测并移除旧版错误写入的顶层 `models` 无效键
- **P1** `set_active_model` 手动切换模型时未注册到 `agents.defaults.models`
### 新增
- **Ollama 本地模型支持**: 快速配置菜单新增 Ollama 选项 (12),支持 localhost/局域网连接、自动检测连通性、自动列出已安装模型、兼容 OpenAI chat completions 格式
- `openclaw-env factory-reset` 非交互式恢复出厂设置命令
- `auth_set_apikey` 函数: 正确写入 API Key 到 `auth-profiles.json`
- `register_and_set_model` 函数: 注册模型到 `agents.defaults.models` 并设为默认
- `register_custom_provider` 函数: 为需要 `baseUrl` 的 OpenAI 兼容供应商注册 `models.providers`
- 「检测升级」同时检查 OpenClaw 和**插件版本** (通过 GitHub API 获取最新 release)
- 页面加载时自动静默检查更新,有新版本时「检测升级」按钮显示橙色小红点提醒
- 状态面板显示当前安装的插件版本号
- 构建/安装流程部署 `VERSION` 文件到 `/usr/share/openclaw/VERSION`
- `openclaw-env setup` 安装环境时自动安装 Gemini CLI (Google OAuth 依赖)
### 改进
- 使用指南顺序调整: ② 配置管理 → ③ Web 控制台 (首次使用更合理的引导顺序)
- Gemini CLI 安装从配置向导选项 1 移至环境安装阶段,避免进入向导时临时等待
## [1.0.2] - 2026-03-02
### 修复
- **P0** ARM64 musl: Gateway 崩溃循环 — `process.execPath` 返回 musl 链接器路径导致 `child_process.fork()` 失败
- 使用 `patchelf` 直接修改 node ELF 二进制的 interpreter 和 rpath替代 ld-musl wrapper 方案
- 子进程通过 `process.execPath` fork 时可正确找到 node 二进制
- **P0** ARM64 musl: Unicode property escapes 正则失败 (`\p{Emoji_Presentation}`) — 缺少 `NODE_ICU_DATA` 环境变量
- init.d、openclaw-env、oc-config.sh 所有入口均添加 `NODE_ICU_DATA` 环境变量
### 改进
- `build-node-musl.sh` 构建验证阶段新增 `process.execPath` 输出检查
## [1.0.1] - 2026-03-02
### 修复
- **P0** web-pty.js `loadAuthToken` 读取错误的 UCI key `luci_token``pty_token`
- **P0** init.d `get_oc_entry()` 管道子 shell 导致返回值丢失,改用临时文件重定向
- **P1** Gateway procd respawn 无限重试 (`3600 5 0`) → 限制最多 5 次 (`3600 5 5`)
- **P1** Telegram 配对流程管道子 shell 变量丢失,改用临时文件避免子 shell
- **P1** `openclaw.lua` PID 提取 `sed` 正则不可靠,改用 `awk` + `split`
- **P2** init.d 和 uci-defaults 弱 token fallback (`echo "auto_$(date +%s)"`) → `dd if=/dev/urandom`
- **P2** `oc-config.sh` 恢复出厂 `timeout` 命令可能不存在,添加 `command -v` 检查和降级方案
- **P2** web-pty.js SIGTERM 不清理 HTTPS server统一 `shutdown()` 函数
### 新增
- GitHub Copilot 配置新增 OAuth 授权登录方式 (通过 `copilot-proxy` 插件)
- `uci-defaults` 首次安装时自动生成 `pty_token`
- Web 控制台和状态面板显示当前活跃模型名称
### 改进
- Qwen 使用 `models.dashscope` 键名、SiliconFlow 使用 `models.siliconflow`,避免 `models.custom` 键冲突
- `get_openclaw_version()``package.json` 读取版本号,不再每次启动 Node.js 进程
- PTY 终端 WebSocket 重连策略改为无限重连 (`MAX_RETRY=Infinity`)
- Makefile `PKG_VERSION``VERSION` 文件动态读取
## [1.0.0] - 2026-03-02
### 新增
- LuCI 管理界面基本设置、配置管理Web 终端、Web 控制台
- 一键安装 Node.js + OpenClaw 运行环境
- 支持 x86_64 和 aarch64 架构glibc / musl 自动检测
- 支持 12+ AI 模型提供商配置向导
- 支持 Telegram / Discord / 飞书 / Slack 消息渠道
- `.run` 自解压包和 `.ipk` 安装包两种分发方式
- OpenWrt SDK feeds 集成支持
- GitHub Actions 自动构建与发布
### 安全
- WebSocket PTY 服务添加 token 认证
- WebSocket 最大并发会话限制(默认 5
- PTY 服务默认绑定 127.0.0.1,不对外暴露
- Token 不再嵌入 HTML 源码,改为 AJAX 动态获取
- sync_uci_to_json 通过环境变量传递 token避免 ps 泄露
- 所有渠道 Token 输入统一 sanitize_input 清洗
### 修复
- Telegram Bot Token 粘贴时被 bracketed paste 转义序列污染
- Web PTY 终端粘贴包含 ANSI 转义序列问题
- 恢复出厂配置流程异常退出
- Gemini CLI OAuth 登录在 OpenWrt 上失败
- init.d status_service() 在无 netstat 的系统上报错
- Makefile 损坏导致 OpenWrt SDK 编译失败
### 改进
- 所有 AI 提供商模型列表更新到最新版本
- UID/GID 动态分配,避免与已有系统用户冲突
- 版本号统一由 VERSION 文件管理
- README.md 完善安装说明、FAQ 和项目结构