- server.listen was hardcoded to 127.0.0.1, causing ERR_CONNECTION_REFUSED on remote access - Default to 0.0.0.0, add --host flag to override (e.g. --host 127.0.0.1 for local-only) - Show LAN IP in startup log for easy remote access - Startup log and error messages switched to English - Bump version to v0.5.2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
27 KiB
OpenClaw Manager — 开发日志
最后更新:2026-02-25 当前版本:v0.5.2
v0.5.2 更新日志(2026-02-25)
修复
远程访问无法连接(ERR_CONNECTION_REFUSED)
server.listen原来绑定127.0.0.1(仅本机),远程通过http://<IP>:3333访问时被直接拒绝- 改为默认绑定
0.0.0.0(所有网卡),远程设备可通过局域网 IP 访问 - 新增
--host命令行参数:需要限制仅本机访问时可用--host 127.0.0.1覆盖 - 新增
getLanIP()工具函数,自动检测第一个非内部 IPv4 地址
改进
启动日志改为英文
- 终端启动信息(目录、地址、提示、错误)全部改为英文
- 绑定
0.0.0.0时自动显示局域网地址,方便远程复制:🌐 LAN: http://192.168.x.x:3333 - 端口占用、启动失败等错误提示同步改为英文
v0.5.1 更新日志(2026-02-25)
修复
Action 菜单英文模式残留中文
- 修复 Action 菜单下多处弹窗在 EN 模式仍显示中文的问题(日志、回滚、目录切换、命令输出)
- 统一接入 i18n:标题、按钮、说明文案、加载态、空态、确认框、toast 文案
- 菜单项触发后的交互文案现在与语言切换保持一致
工程改进
1) 嵌入脚本转义/语法防护
- 新增启动时预检:对前端嵌入脚本执行
node --check语法校验 - 若语法异常(常见为
MAIN_HTML内\n转义写错),启动阶段直接报错并给出修复提示,避免浏览器白屏后才发现问题
2) 单文件结构化重构(保持零依赖)
- 将主页面模板从单一超长
MAIN_HTML拆分为三段常量:MAIN_HTML_CSSMAIN_HTML_BODYMAIN_HTML_SCRIPT
- 最终由
MAIN_HTML组合输出,保持“单文件 + 零依赖”不变,同时降低维护复杂度 - 修复拆分过程中的脚本模板转义问题:
MAIN_HTML_SCRIPT使用普通模板字符串(非String.raw),确保前端脚本内的反引号模板语法可被正确还原
其他
- 程序头部版本与启动日志版本更新为
v0.5.1 start.sh/start.bat启动横幅版本号同步更新为v0.5.1README补充 Git 安装/更新流程(git clone/git pull --ff-only),并精简中英文功能介绍README首屏改版:增加「1 分钟上手」命令区(安装/更新/运行同屏),并将开场介绍改为精简版README去重:移除中部重复的安装/更新/运行段落,统一引用首屏快速上手README截图区改为首屏精简展示(3 张)+ 折叠更多截图(<details>)
v0.5 更新日志(2026-02-24)
新功能
认证页简化为引导模式
- 移除了不稳定的 API Key 提交表单(通过 stdin 管道传 CLI 的方案不可靠)
- 改为引导页:点击 Provider 显示清晰的操作步骤 + 一键复制 CLI 命令
- 已配置的 Provider 在网格中显示 ✅ 标记
- 每个 Provider 指引末尾都提示运行
openclaw onboard注册可用模型 - 删除了
runWithStdin()函数和POST /api/auth/run端点
模型页精简
- 移除「添加模型」和「删除模型」功能(模型应由
openclaw onboard管理) - 只保留 Primary Model 选择器和 Fallback Chain 编辑
- 删除了
POST /api/models和DELETE /api/models/:id端点
API 费用追踪(Token Cost Monitor)— 📊 Stats 标签页
- 新增
GET /api/stats端点,解析logs/gateway.log中的 token 用量 - 支持 JSON 日志和文本格式日志(
input_tokens: N, output_tokens: N) - 按模型和按天汇总统计,显示 Token 用量和估计成本
- 可视化:四张汇总卡片 + CSS 柱状图(按日) + 模型明细卡片
- 支持自定义模型定价(存
manager-config.json的modelPricing字段) - 时间范围过滤:7 / 30 / 90 天
- 点击标签页时懒加载,不影响首屏性能
Cron 任务管理 — ⏰ Cron 标签页
- 新增
GET/POST/PUT/DELETE /api/cron四个端点,操作系统 crontab - 只展示包含
openclaw或ocm关键词的 cron 条目 - 支持:查看、添加、启用/禁用(注释/取消注释)、手动触发、删除
- 与 NAS 备份的 cron 条目联动(同样显示)
- 添加任务支持自定义 Cron 表达式 + 命令 + 标签
Workspace 文件浏览器(全文件 + 可编辑)
- 重写
GET /api/workspace/:id:动态扫描 workspace 目录下所有文件(不再硬编码 4 个文件名) - 每个文件显示大小和最后修改时间
- 默认只读视图(
<pre>代码块),点击「编辑」按钮切换为<textarea>编辑模式 - 编辑后可保存或取消,保存调用已有的
PUT /api/workspace/:id/:file - 大文件(> 512KB)只显示 stat 不加载内容,防止页面卡顿
CLI Tab 补全
- 在 CLI 终端输入框按 Tab 键触发前缀匹配自动补全
- 补全源:OpenClaw 子命令词表 + 预设命令列表 + 历史命令
- 单一匹配时直接补全;多个匹配时先补全公共前缀,同时弹出候选列表
- 候选列表最多 12 项,点击即选中;按 Escape 关闭
- 支持多词命令的最后一个词补全
国际化(i18n)补全
- 新增 30+ 个 i18n key(zh + en)覆盖 Stats、Cron、Workspace、Auth 引导等所有新功能
- 删除了不再使用的
models.add、models.registered、auth.select等 key
移除
POST /api/auth/run— API Key 提交端点(不可靠)POST /api/models— 添加模型端点DELETE /api/models/:id— 删除模型端点runWithStdin()— stdin 管道传值工具函数- 前端:API Key 输入表单、添加模型弹窗、注册模型列表、删除模型按钮
技术说明
- Stats 日志解析:同时支持 JSON 格式(
{"input_tokens":N, "output_tokens":N})和文本格式(input_tokens: N),按时间戳过滤,按模型名和日期聚合 - Cron 管理:通过
crontab -l读取和crontab -管道写入,不依赖任何外部库。启用/禁用通过添加/移除行首#注释实现 - Tab 补全实现:纯前端 JS,不需要 PTY。维护子命令词表 + 预设列表 + 历史记录三层候选源,使用最长公共前缀算法
- Workspace 文件扫描:使用
fsp.readdir()+fsp.stat()动态列出,512KB 以上文件只返回 stat 不读内容
v0.4 更新日志(2026-02-21)
新功能
安全状态指示器
- Header 区域新增健康 badge(🔴/🟡),定期运行
openclaw doctor自动检测问题 - 鼠标悬停展开 tooltip,显示全部 warning/error 详情
- 每 60 秒自动轮询,若后台问题消失,badge 自动隐藏
- 新增服务端
GET /api/health端点,解析 doctor 输出中的 error / warn / missing / fail 关键词
CLI 终端面板改进
- 预设下拉菜单移至 header 区域(Clear 按钮左侧),符合操作习惯,自然向上展开
- 默认命令扩充至 15 条:新增
gateway start/stop/logs、models auth list、agents sync、backup create/list、config validate、update - 修正
openclaw version→openclaw --version
备份模块完全重设计
- 旧的 3 步向导替换为单页表单:主机/端口、用户名、认证方式、路径、一键操作
- 认证方式:密码(直接填,不存储)或 SSH Key(可一键生成)可切换
- 老设备兼容复选框:勾选后自动附加 Legacy CBC 加密参数,解决老款 Synology 等 NAS cipher 协商失败问题(
aes128-cbc、diffie-hellman-group14-sha1等) - 备份内容选择:全量(整个
.openclaw,约 55MB)或仅重要数据(配置+API Key+记忆,不含日志/对话历史,约 10MB) - 备份产物改为 tarball(
openclaw-full-TIMESTAMP.tar.gz),通过 rsync 传输,比直接 rsync 目录更安全、可校验 - 新增端口字段(默认 22),支持自定义 SSH 端口
- 定时备份支持自定义时间(时间选择器),不再写死 3:00
国际化(i18n)补全
renderAgents全面接入 i18n:主 Agent / subagent 标签、已绑群、保存模型、查看文件、删除,切换语言立即生效renderChannels全面接入 i18n:无绑定提示、匹配所有、绑定索引、删除绑定buildModelOpts接入 i18n:「使用全局默认」→「Use Global Default」;「自定义」→「custom」
修复
- Agents / Channels 页面切英文后按钮仍显示中文(根本原因:
renderAgents/renderChannels模板字符串内使用硬编码中文) - 备份旧流程 UX 混乱(步骤2填用户名,步骤1填密码)
技术说明
- 老 NAS 密文兼容:
-o Ciphers=aes128-cbc,aes256-cbc,aes192-cbc,3des-cbc -o KexAlgorithms=diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa,+ssh-dss - 重要数据定义:
openclaw.json+.env+credentials/+agents/*/agent/(含 API Key,排除 sessions)+memory/main.sqlite - 全量备份排除:
logs/(运行时重建)、ocm/*.bak.js(旧版本备份文件) - 服务端新增
GET /api/health端点,使用spawnSync同步运行openclaw doctor,3 秒超时,解析 error/warn 行返回结构化 JSON
v0.4.1 热修复(2026-02-21)
修复
SSH Key 生成界面崩溃(MAIN_HTML \n 转义错误)
- 症状:首页点击无响应,F12 报
Uncaught SyntaxError: Invalid or unexpected token at line 1785,随后enterApp is not defined - 根本原因:
nasGenKey()函数中box.textContent = '公钥...:\n' + r.pubKey的\n在 Node.js 评估 MAIN_HTML 模板字符串时被转为真实换行符,浏览器收到的 JS 里字符串字面量跨行 → SyntaxError → 整段脚本解析失败 - 修复:
'\n'→'\\n',源码里双反斜杠,Node 模板字符串评估后浏览器收到\n合法转义 - 规律:MAIN_HTML 模板字符串内所有 JS 字符串字面量里的
\n都必须写成\\n;每次新加代码后用node --check验证服务端,再提取 browser script 单独node --check验证浏览器端
v0.4.2 热修复(2026-02-22)
修复
NAS 备份失败:sshpass 位置错误(直接原因)
- 症状:SSH 连接测试通过,但"立即备份"返回
Permission denied, please try again+ rsyncunexpected end of file - 根本原因:旧代码把
sshpass -p "pwd"塞入 rsync 的-e参数内,双引号与外层引号互相冲突,导致 sshpass 无法正确读取密码# ❌ 旧:引号冲突,password 被 shell 当作单独的 token rsync -avz -e "sshpass -p "password" ssh -p 22 ..." ... # ✅ 新:sshpass 包裹整个 rsync 命令,-e 里只有干净的 ssh sshpass -p 'password' rsync -avz -e "ssh -p 22 ..." ... - 修复位置:
nas-now、nas-cron、nas-test三处均修正 - 附加:新增
mkdir -p REMOTE_PATH预建远端目录步骤(避免因目录不存在导致 rsync 失败);密码改用单引号包裹 +'\\''转义
NAS SSH 兼容模式完全重设计
- 旧问题:兼容模式只强制 CBC 加密(
aes128-cbc,3des-cbc等),而新款 NAS(Synology DSM 7.x 等)已默认禁用 CBC,导致勾选后反而无法连接 - 旧问题 2:
-o HostKeyAlgorithms=+ssh-rsa,+ssh-dss在新版 OpenSSH 上语法无效(+前缀不能用于逗号分隔的多值列表),报Bad key types - 新策略:兼容模式同时列出现代算法 + 旧算法,SSH 自动选双方都支持的最强项:
- Ciphers:
aes256-gcm, aes128-gcm, chacha20-poly1305, aes256-ctr, aes192-ctr, aes128-ctr(现代)+aes256-cbc, aes192-cbc, aes128-cbc, 3des-cbc(旧款) - KexAlgorithms:
curve25519-sha256, ecdh-sha2-nistp256, dh-group14-sha256(现代)+dh-group14-sha1, dh-group1-sha1(旧款) - HostKeyAlgorithms:
ssh-ed25519, ecdsa-sha2-nistp256, rsa-sha2-256, rsa-sha2-512, ssh-rsa(去掉+前缀)
- Ciphers:
- 结论:兼容模式现在对新旧服务器均有效;新服务器默认关闭即可(SSH 自动协商)
NAS 备份 Modal 全面 i18n
- 所有标签、按钮、提示文字接入
t()+data-i18n属性,切换语言立即生效 - 新增 21 个 i18n key(zh + en):
nas.title,nas.host,nas.user,nas.authLabel,nas.pwLabel,nas.pwHint,nas.keyLabel,nas.genKey,nas.pubkeyHint,nas.remotePath,nas.compat,nas.content,nas.full,nas.essential,nas.btnTest/Now/Cron/Close,nas.cronTime,nas.btnSaveCron,nas.testing/testOk/testFail,nas.backing/backupOk/backupFail,nas.keyGenOk/Fail,nas.cronOk/Toast,nas.backupToast,nas.errNoHost applyLang()新增data-i18n-placeholder属性支持,密码输入框提示也随语言切换- Checkbox 文字从「老设备兼容模式(Legacy CBC...)」改为「兼容模式(添加旧版 SSH 加密方案,适用于旧款 NAS / 旧服务器)」,更准确描述用途
技术说明
- sshpass 用法规范:密码认证时,
sshpass -p 'pwd' rsync -e "ssh ..."是正确形式;rsync -e "sshpass ... ssh ..."是错误形式(所有三处:test / now / cron 均已修正) - 密码安全转义:
password.replace(/'/g, "'\\''")处理密码中含单引号的情况 - PreferredAuthentications=password,PubkeyAuthentication=no:密码认证时明确禁用公钥,防止 SSH 在无 key 时尝试公钥认证导致不必要的交互提示
v0.5 规划(竞品分析后)
调研了 GitHub 上 7 个同类项目后,提炼出最值得借鉴、且与 OCM"零依赖+单文件"哲学兼容的三个方向。
优先级 1 — API 费用追踪(Token Cost Monitor)
来源:tugcantopaloglu/openclaw-dashboard、mudrii/openclaw-dashboard、adamevers/openclaw-dashboard 均有此功能,说明这是 power user 高频需求。
实现思路(零依赖):
- 解析
logs/gateway.log,提取各 session 的 token 用量行(OpenClaw 日志里已有 token 计数) - 在内存中汇总(按模型、按天)—— 无需 SQLite,用 JS 对象即可
- 新增「Stats」浮层或在 header 右侧加费用小数字,点击展开明细
- 可选:支持自定义各模型单价(存 manager-config.json)
预计新增代码量:约 100 行服务端(日志解析)+ 150 行前端(展示)
优先级 2 — Cron Job 管理页面
来源:actionagentai/openclaw-dashboard(12 页布局之一)、tugcantopaloglu/openclaw-dashboard 均有完整 cron 管理。
实现思路(零依赖):
- 在「操作」菜单或独立标签页列出系统 crontab(
crontab -l)里所有openclaw相关的条目 - 支持:查看 / 启用 / 禁用 / 手动触发(直接 spawn 命令)/ 修改时间
- 读写通过
crontab -l+crontab -管道实现,不依赖任何库 - 也可显示 OCM 自己设置的备份 cron,与 NAS 备份模块联动
预计新增代码量:约 80 行服务端(crontab CRUD)+ 120 行前端
优先级 3 — Memory 文件浏览器
来源:tugcantopaloglu/openclaw-dashboard 支持浏览和编辑 MEMORY.md / HEARTBEAT.md 等 Agent 记忆文件。
实现思路(零依赖):
- 在 Agents 卡片的「查看文件」按钮旁,或在文件浏览 modal 里增加编辑模式(
<textarea>) - 保存时直接写回文件(已有
writeFile工具函数) - 可选:显示文件大小和最后修改时间
预计新增代码量:约 20 行服务端(PUT /api/agent/:id/file)+ 60 行前端
竞品没有的 OCM 独特优势(保持并强化)
| OCM 特性 | 状态 |
|---|---|
| 真单文件 / 零 npm 依赖 | ✅ 保持 |
| 内置 CLI 终端(实时流、预设、收藏) | ✅ 独有 |
| NAS SFTP 备份(含老设备密文兼容) | ✅ 独有 |
| 中英文 i18n | ✅ 独有 |
| Windows + macOS 双平台一键启动 | ✅ 独有 |
| Health Badge(openclaw doctor 可视化) | ✅ 独有 |
一、项目概述
OpenClaw Manager 是一个零依赖本地 Web 管理界面,用于可视化管理 OpenClaw AI 助理的 Agent、模型、认证配置等,免去手动编辑 JSON 文件。
- 运行方式:
node openclaw-manager.js,浏览器访问http://localhost:3333 - 依赖:仅 Node.js >= 18 内置模块(
http、fs、path、os、child_process),零 npm 依赖 - 平台:macOS / Linux / Windows
零、v0.3 更新日志(2026-02-21)
新功能
Landing 页面 + 语言切换
- 首次进入显示模式选择页,两个入口:Sub-agent 模式(可用)和 Multi-agent 模式(占位,敬请期待)
- 语言切换(中文/English),存储在 localStorage,刷新记忆
- 每个模式卡片显示简介和所需条件
- 点击 Logo 可随时返回选择页
Channels 管理页面
- 新增「Channels」标签页,显示 openclaw.json 里所有 bindings
- 支持添加绑定(选 Agent、频道类型、Peer 类型、Peer ID)
- 支持删除绑定
- 创建/删除 Agent 后自动刷新 Channel 列表
主 Agent 模型选择
- main agent 卡片现在也显示模型选择器和「保存模型」按钮
- 可以为 main agent 独立设置模型,不再只能跟随全局默认
认证页面重做
- 修正了所有 Provider 的 CLI 命令(原命令
openclaw auth add是错误的) - 正确命令:
openclaw models auth paste-token --provider <provider> - 新增 Provider 选择网格,点击选中后显示操作区
- Token 类 Provider:可在界面直接输入 API Key,由后台通过 stdin 管道传给 CLI 执行(Key 不存储到配置文件)
- OAuth 类(Google):显示正确命令和复制按钮
- Device Flow 类(GitHub Copilot):显示分步操作指引
- 底部仍显示已配置认证列表
重启 GW 交互优化
- 横幅新增「稍后」按钮:点击后横幅消失,页面左下角出现常驻橙色「重启 Gateway」浮动按钮
- 执行重启后浮动按钮消失
- 「忽略」按钮:直接关闭横幅,不显示浮动按钮
NAS 备份设置
- 「操作」菜单新增「NAS 备份设置」入口
- 三步引导界面:SSH Key 生成 → NAS 连接配置 → 备份操作
- SSH Key:一键生成专用 Key,公钥可复制,支持一次性密码部署(密码不存储)
- 配置:NAS 主机 IP、用户名、SSH Key 路径、远端备份目录,保存到 manager-config.json
- 操作:测试连接、立即备份(rsync)、配置每日 3:00 Cron 任务
默认 SOUL.md 更新
- 新建 Subagent 时,留空性格关键词则使用新的默认成长型提示词,体现"你是我生活中的客人"理念
- 性格关键词有值时,仍使用关键词列表模式
修复
- AUTH_PROVIDERS 的所有
docCmd字段已修正为正确的openclaw models auth paste-token --provider X格式 - 新增
spawn到 require(用于 stdin 管道传入 API Key)
二、文件结构
~/ocm/ ← 项目目录(用户自选位置)
├── openclaw-manager.js ← 主程序(服务端 + 前端 HTML 全合一,~2360行)
├── start.sh ← macOS/Linux 启动脚本
├── start.bat ← Windows 启动脚本
├── openclaw-manager.command ← macOS Finder 双击启动
├── manager-config.json ← 本地路径配置(已 .gitignore,不上传)
├── package.json ← GitHub 项目元数据
├── .gitignore ← 排除 manager-config.json、*.bak* 等
├── README.md ← 中英双语说明文档
└── DEVLOG.md ← 本文件
OpenClaw 配置目录(独立,不在项目里):
~/.openclaw/
├── openclaw.json ← OpenClaw 主配置(程序读写的核心文件)
├── agents/ ← 各 Agent 的 config.json
├── workspaces/ ← Agent 工作区(SOUL.md、MEMORY.md 等)
├── logs/gateway.log ← 网关日志
└── openclaw.json.bak.* ← 自动备份文件
三、目录解析优先级
程序启动时按以下顺序确定 OpenClaw 配置目录:
--dir命令行参数OPENCLAW_DIR环境变量- 同目录下的
manager-config.json({ "dir": "~/.openclaw" }) - 默认值
~/.openclaw
~ 在所有平台会自动展开(os.homedir()),Windows 用户填 ~/.openclaw 即可。
四、已实现功能
🤖 Agents 标签页
- 列出所有 Agent(含 main)
- 每个 Agent 卡片显示:模型、群组绑定状态、Workspace 路径
- 内联模型切换:每个 Agent 有独立下拉菜单,直接保存不需要重建
- 4 步向导新建 Subagent:群组ID → 名称/描述 → 选模型 → 确认创建
- 自动创建 workspace 目录、SOUL.md、MEMORY.md
- 自动在 openclaw.json 添加 agent + binding(插入在 main 之前)
- 创建前自动备份 openclaw.json
- 删除 Agent(自动备份,可回滚)
- 查看 Workspace 文件(SOUL.md / MEMORY.md)
🧠 模型标签页
- 显示当前全局主模型,可下拉修改
- Fallback 链可视化编辑(增删 tag)
- 列出所有已配置模型,可添加自定义模型 ID
- 移除模型
🔑 认证标签页
支持的认证方式:
| Provider | 模式 |
|---|---|
| Anthropic | API Token |
| OpenAI | API Token |
| DeepSeek | API Token |
| Kimi (Moonshot) | API Token |
| Groq | API Token |
| Mistral | API Token |
| Together AI | API Token |
| Perplexity | API Token |
| OAuth | |
| GitHub Copilot | Device Flow |
| 自定义 | API Token |
⚡ 顶部工具栏(下拉菜单)
- 重启 Gateway(调用
openclaw gateway restart) - 实时日志(每 2 秒刷新,查看
logs/gateway.log) - 手动备份
- 备份回滚(列出最近 20 个备份,一键恢复,恢复前自动保存当前状态)
- 健康检查(
openclaw doctor) - 打开配置目录(调用系统文件管理器)
- 切换 OpenClaw 目录(运行时切换,写入 manager-config.json)
其他
- 配置修改后顶部显示橙色"建议重启 Gateway"横幅
- Toast 通知(成功/失败提示)
- 深色主题 UI(
#0f1117背景,#6c63ff强调色)
五、已修复的 Bug
Bug 1:浏览器 SyntaxError(启动即崩溃)
- 症状:页面打开后"加载中..."一直卡着,F12 控制台显示
Uncaught SyntaxError: Invalid or unexpected token - 根本原因:
MAIN_HTML是服务端的模板字符串(反引号),里面有一行:Node.js 在评估模板字符串时把document.getElementById('cmdOutput').textContent='❌ '+e.message+'\n\n请在终端手动运行:\nopenclaw gateway restart';\n变成了真实换行符,浏览器收到的 JS 里单引号字符串跨行,导致解析失败。 - 修复:将
'\n\n...\n...'改为'\\n\\n...\\n...',让浏览器收到正确的\n转义序列。 - 位置:
openclaw-manager.js约第 1473 行。
Bug 3:MAIN_HTML 模板字符串 \n 转义(反复出现)
- 症状:首页点击无响应,
Uncaught SyntaxError: Invalid or unexpected token+enterApp is not defined - 根本原因:在
const MAIN_HTML = \...`模板字符串内,JS 字符串字面量里的\n(如'msg\n'`)会被 Node.js 在求值模板字符串时转成真实换行符,导致浏览器 JS 解析失败 - 修复模式:MAIN_HTML 里所有字符串字面量中的
\n必须写成\\n - 已出现次数:v0.3(
cmdOutput错误文本)、v0.4 末尾(cliAppend命令行前后缀)、v0.4.1(nasGenKey公钥显示) - 预防:每次修改后运行
node --check+ 提取 browser script 再node --check;用扫描脚本检测 MAIN_HTML 内所有单反斜杠\n
Bug 2:Agent 模型下拉菜单只有"使用全局默认"
- 症状:Agents 页面每个 Agent 的模型选择器里只有一个选项
- 根本原因:
loadAgents()和loadModels()并行执行(Promise.all),renderAgents()先跑完时S.knownModels还是空数组,buildModelOpts()只能生成默认选项。buildModelDropdowns()函数本来用于在模型加载完后重填下拉菜单,但实现为空函数{}。 - 修复:补全
buildModelDropdowns()实现,遍历所有 Agent,用当时已填充的S.knownModels重建每个msel-{id}select 元素的选项。 - 位置:
openclaw-manager.js约第 1458 行。
六、重要技术细节
openclaw.json 结构要点
peer.id在 bindings 里必须是字符串("-1003893176648"),不是整数"main"是保留 agent ID,不能用作自定义 agent- 文件修改后 300ms 内自动热重载,大多数情况不需要重启 gateway
- 新 agent 的 binding 要插入在
main的 catch-all binding 之前
备份命名规则
openclaw.json.bak.{label}.{timestamp}
label 可以是:create / edit / delete / models / auth / manual / before-restore
跨平台注意
- 启动浏览器:
open(macOS)、start ""(Windows)、xdg-open(Linux) - 运行 openclaw 命令:Windows 用
openclaw.cmd,其他用openclaw manager-config.json路径支持~前缀,所有平台通用
KNOWN_MODELS 列表(代码内置)
GitHub Copilot、Anthropic、OpenAI、Google、DeepSeek、Kimi、Groq、Mistral、Together AI 共约 20 个模型。
七、待改进 / 已知问题
功能增强(用户提出过,暂未做)
- SOUL.md 可视化编辑器(当前只能查看,不能在界面里修改内容)
- 工作区文件内容在浏览器里直接编辑保存
- Agent 热切换模型(不重建,只改配置)
- 多 Bot 账号支持
- SSH 远程服务器管理
- 从零引导安装 OpenClaw 的向导
代码质量
- 前端代码目前全部内嵌在
MAIN_HTML模板字符串里,文件较长(~1650行),后续可考虑拆分或构建步骤 - 模型下拉菜单在
renderAgents之后才由buildModelDropdowns修复,可以改成串行加载(先loadModels再loadAgents)以更优雅地解决时序问题
部署体验
manager-config.json目前需要用户手动创建,可以考虑首次启动时通过 UI 向导引导创建(setup wizard 已有框架)- README 中加入截图
八、GitHub 上传准备清单
.gitignore已排除manager-config.json、*.bak*、.DS_Store等package.json的author字段为空(不含个人信息)README.md中英双语- 主程序无硬编码个人信息(API Key、路径、Token 等均运行时读取)
- 在
package.json的author填上你的名字/GitHub 用户名(可选) - GitHub 新建仓库,
git init → git add . → git commit → git push
九、启动方式快速参考
# 直接启动(自动读取 manager-config.json 或 ~/.openclaw)
bash ~/ocm/start.sh
# 指定目录
bash ~/ocm/start.sh --dir /path/to/.openclaw
# 指定端口(默认 3333)
bash ~/ocm/start.sh --port 8080
# macOS Finder 双击
openclaw-manager.command
# Windows
start.bat
访问 http://localhost:3333