diff --git a/CHANGELOG.md b/CHANGELOG.md index ca649203..5255d505 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,53 @@ +# v5.6.3 (2026-08-07) + +### 数据闭环彻底打通,为自我进化奠基 + +- **`content-calibrator` 盍打分+预测机制完善**:内容产出 → 发布 → 数据回流 → 下一轮策略调优的闭环不再有断点。calibrator 拿 published-track 回流的实际数据(阅读/点赞/转发/转化)对照预测打分,自动校准后续选题与打法的权重,为小贝自主迭代提供燃料。 +- **`published-track` 数据复盘机制完善**:18 平台文本/媒体限制规则表与内容校验、twitter 互动操作模式补齐;发布结果数据回流进 calibrator,闭环生效。 +- **`content-producer` crew 正式发布**(此前为预发布):端到端承担内容生产线重活,脚本→素材→TTS→渲染→合成全程贯通,网页/落地页/APP 视觉设计一站搞定。`video-producer` 端到端主技能 17 子脚本覆盖 Stage 0–14 全链 + 两道闸门 GATE A/B;视频分发新增微信视频号发布(`wechat-channels-publish`,处理 wujie shadow DOM),结合既有小红书/抖音/Twitter/X/B站/快手等平台,实现短视频制作→多平台分发的闭环。 +- **公共底座换火山**:`skills/siliconflow-tts` → `skills/awk-tts`(火山方舟豆包语音合成 2.0 / seed-tts-2.0 字符版,NDJSON 流式响应 + X-Api-* 鉴权 + speaker 路由 + 火山 ASR 自检复用 viral-chaser 凭据池)。 +- **新建 `design-full`**:整合 design-system-picker + init-workspace + AGENTS.md 工作模式 2,含 14 套设计系统库 + 三条子工作流 A/B/C。 +- 两个剪辑辅助技能:`de-mouth`(口播视频去口误,自动识别并删除静音/语气词/卡顿词/重复句/残句,输出干净视频+字幕+剪辑草稿)、`talking-head-cut`(口播轻剪辑,高光剪辑算法与工作流借鉴 AutoClip)。 + +### wx-mp-hunter 接口重写 + +- 原微信公众号素材接口方案因官方接口调整已不可用,本轮按新版接口重写 `crews/main/skills/wx-mp-hunter`(cheerio 解析新响应结构)。 + +### 5.6.2 bug 修复(本轮实测踩坑) + +- **install.ps1 / install-atomgit.ps1**: + - Bug1 `.env`/`daemon.env` 不换行:新增 `Write-EnvFile` 辅助函数(UTF8 no BOM + 显式 CRLF),`@(...)` 强制数组。 + - Bug2 技能 wrapper 在 Windows 用 `.cmd` shim 替代软链(Windows 软链需管理员/开发者模式,不靠谱):新增 `Expose-SkillWrappers` 函数。 + - Bug3 `$Force`/`$SkipBind`/`$SkipBrowser`/`$NoPrompt` 改为 `$script:` 前缀(PowerShell 函数内默认看不到顶层 bare 变量,读局部 `$null`,是 `XIAOBEI_FORCE=1` 不生效的根因)。 + - Bug4 `OPENCLAW_HOME` warning 3 行 `ui_warn` 降级为 1 行 `ui_info`(实际安装结构正确,warning 纯噪音吓人)。 +- **install.sh / install-atomgit.sh**: + - Bug4 `unset OPENCLAW_HOME` 误伤内部变量:删除 unset,保留 warning→降级为 info。 + - tarball 下载原子写优化(`.part` → rename)。 + - pip install 无条件加 `--break-system-packages`(PEP 668,不做探测简化小白体验)。 + - Bug5 `OPENCLAW_HOME` 在 `set -u` 下报 unbound:`cd "${OPENCLAW_HOME}"` 裸引用补 `${OPENCLAW_HOME:-}` 兜底。 + - Bug6 atomgit 国内线路默认跳过 gum spinner bootstrap:`GUM_VERSION` 默认置空,`bootstrap_gum_temp` 加空判定短路,避免连 GitHub 超时 75 秒拖慢安装(系统已装 gum 仍会用;想强制走 GitHub 可 `export OPENCLAW_GUM_VERSION=0.17.0`)。 +- **install.ps1 / install-atomgit.ps1 Windows 软链**: + - Bug7 `workspace-/skills` 落真文件夹而非软链:根因是 Git Bash 的 MSYS2 默认把 `ln -s` 当 `cp -r`。`Run-SetupCrew` 调 bash 前导出 `MSYS=winsymlinks:nativestrict` 让 `ln -s` 走真 NTFS 软链。 + - Bug8 `~/.openclaw/skills` 缺失/真文件夹:根因是 Windows 路线没调 `apply-addons.sh`。新增 `Sync-GlobalSkills` 函数把仓根 `skills/` 软链到 `~/.openclaw/skills`,幂等 + 失败回退 copy。README 安装段补「Windows 建议打开开发者模式」说明。 +- 四脚本语法校验通过(`bash -n` + Python PS1 括号平衡校验)。 + +### 推荐大模型切到阿里云百炼 + +- **`config-templates/openclaw.json`**:新增 `bailian-token-plan` provider(baseUrl 走百炼 token-plan 端点,anthropic-messages api,三模型:`deepseek-v4-flash-0731` / `glm-5.2` / `qwen3.6-flash`),主力 `deepseek-v4-flash-0731` / fallback `glm-5.2` / 视觉 `qwen3.6-flash`;删火山 `awk` provider。 +- **新建 `config-templates/openclaw-awk.json`**:火山方舟 Coding Plan 备选模板(主力 `awk/glm-latest` + fallback + 视觉 `awk/doubao-seed-2.0-lite`),结构与百炼版一致。 +- **删 `config-templates/openclaw-aihubmix.json`**:AihubMix 合作到期,不再推。 +- **README**:「准备 API Key」段推荐百炼(附 Lite 39 元/月、Standard 139 元/月);「模型费用说明」段火山改手动切换说明;友情链接去 AihubMix logo;目录树注释换 `openclaw-awk.json`,完全不出现 AihubMix 字样。 +- **install.ps1 / install-atomgit.ps1**:交互提示文案从 "Volces ARK API key" 改为 "Aliyun Bailian API key"。 +- 环境变量名 `AWK_API_KEY` 不改(跟旧版兼容),百炼 provider 的 `apiKey` 仍引用 `${AWK_API_KEY}`。 +- 切换理由:阿里云百炼无月限额、不限购,比火山方舟 Coding Plan(限量发售、每天 10 点前抢)体验更好。 + +### 底座升级到 OpenClaw 七(v2026.7.1) + +- 从 v2026.6.11 升级到 v2026.7.1(7.1 是 2026-07 最新稳定版,7.2 仍 beta)。6 个 browser-camoufox-pivot per-file patch 按 7.1 上游漂移重新生成。 +- `overrides.sh` 已与版本无关(浏览器转向后去掉 patchright 注入,仅注入 `OPENCLAW_DISABLE_WEB_SEARCH`),7.1 `package.json` 无 `pnpm.overrides`,兼容。 + +--- + # v5.6.1 (2026-07-31) ### content-producer 视频能力四方向重构 diff --git a/README.md b/README.md index 55039b01..24aaeee2 100755 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ xiaobei 由Wiseflow (原AI首席情报官)作者 bigbrother666sh 开发。 --- -## 🚀 **v5.6.0 更新** +## 🚀 **v5.6.3 更新** - 产品重大重构,更简洁、更易上手、更精炼! - **重新认识你的 main agent——小贝**:这一版的小贝不再是单一职能的运营助手,而是把此前分散的几个 agent 融合成了一个—— @@ -46,8 +46,12 @@ xiaobei 由Wiseflow (原AI首席情报官)作者 bigbrother666sh 开发。 - **线 1(日常主力)**:forked [camoufox-cli](https://github.com/daijro/camoufox)(vendor 进 `patches/camoufox-cli/`,基于上游 `camoufox-cli@0.6.2` + 三个新功能:`upload` 命令 / fail-first 队列 / `identity export`)走旁路,反指纹 Firefox + JSON-over-unix-socket,绕开 routes/、pw-session、chrome-mcp。无头胜有头,资源占用更少,速度更快,反侦测能力依然在线。 - **线 2**:保留openclaw原版 `target=host`(existing-session 真机 Chrome + chrome-mcp relay)+ `target=node`(remote-cdp 远端 Chrome)。 - **profile 丢失 / 损坏 / 指纹错配 → 重建 + 重登录 -- 适配 openclaw 2026-6-11 版本(近两个月最稳定版本)、openclaw-weixin 2.4.6 版本。 -- 新增一键安装脚本,无需提前配置环境,脚本会搞定一切。 +- **🎬 Content Producer 正式发布,视频制作能力全面进化**:全新 `content-producer` crew 正式上线(此前为预发布),端到端承担内容生产线重活——脚本→素材→TTS→渲染→合成全程贯通,网页/落地页/APP 视觉设计一站搞定。底座换火山方舟豆包语音合成 2.0 / seed-tts-2.0,NDJSON 流式响应 + speaker 路由;`video-producer` 端到端主技能 17 子脚本覆盖 Stage 0–14 全链 + 两道闸门 GATE A/B;视频分发新增微信视频号发布,结合既有小红书/抖音/Twitter/X/B站/快手等平台,实现短视频制作→多平台分发的闭环。 +- **🔄 数据闭环彻底打通,为自我进化奠基**:`content-calibrator`(盍打分+预测)与 `published-track`(数据复盘)机制全面完善,内容产出→发布→数据回流→下一轮策略调优的闭环不再有断点,为后续小贝自主迭代选题与打法提供燃料。 +- **底座升级到 OpenClaw 七(v2026.7.1)**——近两个月最稳定版本,6 个 browser-camoufox-pivot per-file patch 按 7.1 上游漂移重新生成;openclaw-weixin 2.4.6。 +- **安装脚本大幅优化,全面测试 bug 排除**:对比 5.6.0,install.sh / install-atomgit.sh / install.ps1 / install-atomgit.ps1 四脚本修了若干实测踩坑——tarball 下载原子写、Windows `.env`/`daemon.env` 换行与 BOM、技能 wrapper 在 Windows 用 `.cmd` shim 替代软链、`OPENCLAW_HOME` 在 `set -u` 下报 unbound、atomgit 国内线路默认跳过 gum spinner bootstrap 避免连 GitHub 超时、Windows 软链需要开发者模式等,产品稳定性显著提高。 +- **wx-mp-hunter 更新**:原微信公众号素材接口方案因官方接口调整已不可用,本轮按新版接口重写。 +- 推荐大模型切到**阿里云百炼**「AI Superstar」套餐(无月限额、不限购),默认主力 DeepSeek-V4-Flash / fallback GLM-5.2 / 视觉 Qwen3.6-Flash;仍想用火山方舟 Coding Plan 的用户可手动切 `config-templates/openclaw-awk.json`。 详见 [CHANGELOG.md](CHANGELOG.md) @@ -57,17 +61,15 @@ xiaobei 由Wiseflow (原AI首席情报官)作者 bigbrother666sh 开发。 ### 0. 准备 API Key -推荐注册 [火山引擎方舟 Coding Plan](https://volcengine.com/L/dx-wt80li-I/)(🎁 欢迎使用 xiaobei 邀请链接 / 邀请码 `5Y5A6L86`,订阅叠加 9.5 折,首月尝鲜低至 9.4 元),开通后获得 `AWK_API_KEY`——主力模型 GLM-5.2、视觉与替补模型全部走此通道,**一个 key 即可**。 +推荐开通 [阿里云百炼「AI Superstar」套餐](https://www.aliyun.com/benefit/ai/aistar?clubBiz=subTask..12766005..10274..)——一个套餐覆盖 DeepSeek-V4-Flash、GLM-5.2、Qwen3.6-Flash 等主流模型,**无月限额、不限购**,xiaobei 默认主力模型 DeepSeek-V4-Flash 即走此通道。开通后获得 `AWK_API_KEY`,主力模型、视觉模型、替补模型**一个 key 全覆盖**。 -> ⚠️ **火山方舟 Coding Plan 目前限量发售**,额度通常在每天上午放量,**建议在每天 10 点前购买**更容易抢到。 - -> 如果习惯使用 ChatGPT / Gemini / Claude 等海外模型见下方[模型费用说明](#-模型费用说明)中的 AiHubMix 备选方案。 +> 💡 **套餐选择**:前期熟悉安装可选 **Lite 版 39 元/月**;正常使用建议 **Standard 版 139 元/月**。 > 🎬 **想用视频生成能力?** 需额外开通火山方舟 `doubao-seedance-2.0` 系列或阿里云百炼 `happyhorse-1.1` 系列模型,并把对应 key(`AWK_GEN_KEY` 或 `MODELSTUDIO_API_KEY`)配置到 `daemon.env`。详见下方[视频生成模型配置](#-视频生成模型配置)。 ### 推荐:一键脚本安装(预构建 tarball 路线) -一行命令,全程无需预装 Node / pnpm / git(tarball 自带 portable Node + pnpm)。脚本完成后**唯一人工输入**是填 `AWK_API_KEY`(火山方舟 Coding Plan 的 key)。 +一行命令,全程无需预装 Node / pnpm / git(tarball 自带 portable Node + pnpm)。脚本完成后**唯一人工输入**是填 `AWK_API_KEY`(阿里云百炼「AI Superstar」套餐的 key)。 **macOS / Linux(bash,一行命令):** @@ -89,7 +91,7 @@ irm https://raw.atomgit.com/wiseflow/xiaobei/raw/master/scripts/install-atomgit. > 按网络环境选一条命令即可:能正常访问 GitHub 走 GitHub 线路(脚本 `install.sh` / `install.ps1`);国内网络走 atomgit 线路(脚本 `install-atomgit.sh` / `install-atomgit.ps1`,全程不经 GitHub)。两条线路安装产物完全一致,只是下载源不同。 -> install 脚本默认拉最新 release tag + 下载 tarball。指定版本:`export XIAOBEI_TAG=v5.6.0`(PowerShell:`$env:XIAOBEI_TAG="v5.6.0"`)。 +> install 脚本默认拉最新 release tag + 下载 tarball。指定版本:`export XIAOBEI_TAG=v5.6.3`(PowerShell:`$env:XIAOBEI_TAG="v5.6.3"`)。 > 💡 **下载中断 / 安装失败?多试几次就好。** tarball 体积较大(~140MB),首装还要下 Firefox 反指纹浏览器(~557MB),网络偶发中断属正常。脚本幂等,重跑会续上已下的部分。 @@ -97,6 +99,8 @@ irm https://raw.atomgit.com/wiseflow/xiaobei/raw/master/scripts/install-atomgit. > 完整步骤:先装 Git Bash(安装时勾选 "Add to PATH",让 bash 进 PowerShell 的 PATH)→ 再在 PowerShell 跑上面那条 `irm | iex`。 +> 💡 **Windows 建议打开「开发者模式」**(设置 → 隐私和安全 → 开发者选项 → 开启开发人员模式,Win10 1703+ 支持)。安装脚本会创建两条软链:仓内 `skills/` → `~/.openclaw/skills`、各 crew 的 `skills/` → `~/.openclaw/workspace-/skills/`,让 openclaw 的 skill loader 拾取技能、且仓内改完即生效无需重跑安装。软链在 Windows 上需要开发者模式(或管理员 PowerShell);两者都没打开时脚本会自动回退为拷贝——功能正常但技能不会随仓更新自动同步,重跑安装才会刷新。 + 脚本自动完成(约 5-15 分钟,CI 已预构建引擎,用户侧只 `pnpm install --prod` 拉依赖 + 下 Firefox): 1. 检测 OS + arch → 选 tarball asset(linux-x64 / mac-arm64 / mac-x64 / win-x64) @@ -182,11 +186,9 @@ irm https://raw.atomgit.com/wiseflow/xiaobei/raw/master/scripts/install-atomgit. > > xiaobei 底层基于 openclaw,建议先准备好大模型 API: > -> - **主力模型(强烈推荐)**:[火山引擎方舟 Coding Plan](https://volcengine.com/L/dx-wt80li-I/) — 一个套餐覆盖 GLM-5.2、Kimi-K2.7、MiniMax-M3、DeepSeek-V4 系列、Doubao-Seed-2.0 系列等主流模型,**工具不限**,xiaobei 默认主力模型 GLM-5.2 即走此通道。需要注册并开通 Coding Plan 获得 `AWK_API_KEY`。 -> > 🎁 **通过 xiaobei 邀请链接** [https://volcengine.com/L/dx-wt80li-I/](https://volcengine.com/L/dx-wt80li-I/) **订阅**(邀请码 `5Y5A6L86`),可叠加 **9.5 折**优惠,首月尝鲜低至 **9.4 元**,订得越多折扣越大。 -> > ⚠️ Coding Plan 目前限量发售,建议每天 10 点前购买。 +> - **主力模型(强烈推荐)**:[阿里云百炼「AI Superstar」套餐](https://www.aliyun.com/benefit/ai/aistar?clubBiz=subTask..12766005..10274..) — 一个套餐覆盖 DeepSeek-V4-Flash、GLM-5.2、Qwen3.6-Flash 等主流模型,**无月限额、不限购**。前期熟悉安装可选 Lite 版 39 元/月,正常使用建议 Standard 版 139 元/月。开通后获得 `AWK_API_KEY`,xiaobei 默认主力模型 DeepSeek-V4-Flash 即走此通道。 > -> - **海外模型用户**:如果想使用 ChatGPT / Gemini / Claude 等海外模型,可通过 [AiHubMix](https://aihubmix.com/?aff=Gp54) 统一接入(全兼容 OpenAI 接口,国内直连)。欢迎通过此[邀请链接](https://aihubmix.com/?aff=Gp54)注册。备选配置模板见 `config-templates/openclaw-aihubmix.json`。 +> - **仍想用火山方舟 Coding Plan 的用户**:默认配置模板已切到百炼,但火山 provider 仍保留在 `config-templates/openclaw.json` 的 `models.providers.awk`。如需切回火山,手动把 `agents.defaults.model.primary` 改成 `awk/glm-latest`、fallbacks 改成 `awk/deepseek-v4-pro` 等,然后重新跑 `setup-crew.sh` 即可。 > > 配置模板已预置以上最佳实践,`install.sh` 会自动检测所需环境变量并引导你输入。安装后重启 openclaw gateway 即可生效。 @@ -280,7 +282,7 @@ Crew 遇到自己不能解决的问题: ## 🔧 全新的浏览器栈 -v5.6.0中,我们几乎重构了OpenClaw原版的浏览器自动化方案(详见 `docs/browser-stack-replacement-spec-2026-07.md`): +v5.6.0 中我们几乎重构了 OpenClaw 原版的浏览器自动化方案(详见 `docs/browser-stack-replacement-spec-2026-07.md`),v5.6.3 沿用此双线栈并按 OpenClaw v2026.7.1 重新对齐 patch: | 项 | 说明 | |----|------| @@ -318,8 +320,8 @@ wiseflow/ │ ├── *.patch # git 补丁(按序号顺序应用到 openclaw/) │ └── overrides.sh # pnpm 依赖覆盖(如替换 playwright → patchright) ├── config-templates/ # 配置模板(开箱即用的最佳实践) -│ ├── openclaw.json # 默认配置模板(AWK 主力 + fts-only 记忆 + dream 关) -│ └── openclaw-aihubmix.json # AiHubMix 海外模型备选模板 +│ ├── openclaw.json # 默认配置模板(阿里云百炼主力 + fts-only 记忆 + dream 关) +│ └── openclaw-awk.json # 火山引擎方舟 Coding Plan 备选模板(主力 GLM-5.2) ├── scripts/ # 工具脚本(详见 scripts/README.md) │ ├── lib/ # 脚本共享工具(agent-skills.sh 等) │ ├── install.sh # 一键安装 + 升级(预构建 tarball 路线,macOS + Linux,GitHub 线路;重跑即升级,保留 ~/.openclaw) @@ -379,4 +381,4 @@ https://github.com/TeamWiseFlow/xiaobei ## 友情链接 -[atomgit](https://gitcode.com/atomgit_atomcode)      [aihubmix](https://aihubmix.com/?aff=Gp54)      [siliconflow](https://cloud.siliconflow.cn/i/WNLYbBpi) +[atomgit](https://gitcode.com/atomgit_atomcode)      [siliconflow](https://cloud.siliconflow.cn/i/WNLYbBpi) diff --git a/config-templates/openclaw-aihubmix.json b/config-templates/openclaw-awk.json similarity index 65% rename from config-templates/openclaw-aihubmix.json rename to config-templates/openclaw-awk.json index 0eea20db..d852e200 100644 --- a/config-templates/openclaw-aihubmix.json +++ b/config-templates/openclaw-awk.json @@ -9,44 +9,68 @@ "models": { "mode": "merge", "providers": { - "aihubmix": { + "awk": { + "baseUrl": "https://ark.cn-beijing.volces.com/api/coding/v3", "api": "openai-completions", - "baseUrl": "https://aihubmix.com/v1", - "apiKey": "", + "apiKey": "${AWK_API_KEY}", "models": [ { - "id": "gpt-5.5", - "name": "GPT-5.5", + "id": "glm-latest", + "name": "GLM-5.2", "reasoning": true, "input": [ - "text", - "image" + "text" ], - "cost": { - "input": 10, - "output": 30, - "cacheRead": 2.5, - "cacheWrite": 0 + "contextWindow": 1024000, + "maxTokens": 65536, + "compat": { + "supportsReasoningEffort": true, + "supportsUsageInStreaming": true, + "maxTokensField": "max_tokens" }, - "contextWindow": 1000000, - "maxTokens": 32768 + "api": "openai-completions" }, { - "id": "qwen3.6-flash", - "name": "Qwen3.6 Flash", + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", "reasoning": true, + "input": [ + "text" + ], + "contextWindow": 1024000, + "maxTokens": 65536, + "compat": { + "supportsReasoningEffort": true, + "supportsUsageInStreaming": true, + "maxTokensField": "max_tokens" + }, + "api": "openai-completions" + }, + { + "id": "deepseek-v4-pro", + "name": "deepseek-v4-pro", + "input": [ + "text" + ], + "contextWindow": 1024000, + "maxTokens": 65536, + "compat": { + "supportsReasoningEffort": true, + "supportsUsageInStreaming": true, + "maxTokensField": "max_tokens" + }, + "api": "openai-completions" + }, + { + "id": "doubao-seed-2.0-lite", + "name": "doubao-seed-2.0-lite", + "contextWindow": 256000, + "maxTokens": 65536, "input": [ "text", "image" ], - "cost": { - "input": 0.05, - "output": 0.25, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 128000, - "maxTokens": 8192 + "api": "openai-completions" } ] } @@ -55,23 +79,30 @@ "agents": { "defaults": { "model": { - "primary": "aihubmix/gpt-5.5", + "primary": "awk/glm-latest", "fallbacks": [ - "aihubmix/qwen3.6-flash" + "awk/deepseek-v4-pro", + "awk/deepseek-v4-flash" ] }, "imageModel": { - "primary": "aihubmix/gpt-5.5" + "primary": "awk/doubao-seed-2.0-lite" }, "memorySearch": { "provider": "none" }, "models": { - "aihubmix/gpt-5.5": { - "alias": "default" + "awk/glm-latest": { + "alias": "awk/glm-5.2" + }, + "awk/deepseek-v4-flash": { + "alias": "awk/ds-v4-flash" }, - "aihubmix/qwen3.6-flash": { - "alias": "fast" + "awk/deepseek-v4-pro": { + "alias": "awk/ds-v4-pro" + }, + "awk/doubao-seed-2.0-lite": { + "alias": "awk/seed-2-lite" } }, "compaction": { @@ -92,17 +123,17 @@ "name": "小贝", "workspace": "~/.openclaw/workspace-main", "skills": [ - "nano-pdf", - "skill-creator", + "smart-search", + "browser-guide", + "email-ops", + "council", "session-logs", - "tmux", - "weather", - "summarize", - "gifgrep" + "tmux" ], "subagents": { "allowAgents": [ - "it-engineer" + "it-engineer", + "content-producer" ] }, "tools": { @@ -117,27 +148,26 @@ "target": "none", "isolatedSession": true }, - "thinkingDefault": "high", "reasoningDefault": "off" }, { - "id": "hrbp", - "name": "HRBP", - "workspace": "~/.openclaw/workspace-hrbp", + "id": "it-engineer", + "name": "IT Engineer", + "workspace": "~/.openclaw/workspace-it-engineer", "skills": [ - "model-usage", + "healthcheck", "nano-pdf", "skill-creator", "session-logs", "tmux", "weather", - "summarize" + "summarize", + "gifgrep", + "node-connect", + "github", + "gh-issues", + "coding-agent" ], - "subagents": { - "allowAgents": [ - "it-engineer" - ] - }, "tools": { "exec": { "host": "gateway", @@ -149,27 +179,24 @@ "reasoningDefault": "off" }, { - "id": "it-engineer", - "name": "IT Engineer", - "workspace": "~/.openclaw/workspace-it-engineer", + "id": "content-producer", + "name": "producer", + "workspace": "~/.openclaw/workspace-content-producer", "skills": [ - "healthcheck", - "nano-pdf", - "skill-creator", + "smart-search", + "browser-guide", "session-logs", - "tmux", - "weather", - "summarize", - "gifgrep", - "node-connect", - "github", - "gh-issues", - "coding-agent" + "tmux" ], + "subagents": { + "allowAgents": [ + "it-engineer" + ] + }, "tools": { "exec": { "host": "gateway", - "security": "full", + "security": "allowlist", "ask": "off" } }, @@ -181,26 +208,9 @@ "bindings": [ { "agentId": "main", - "comment": "main-bot -> Main Agent", - "match": { - "channel": "feishu", - "accountId": "main-bot" - } - }, - { - "agentId": "hrbp", - "comment": "hrbp-bot -> HRBP Agent", - "match": { - "channel": "feishu", - "accountId": "hrbp-bot" - } - }, - { - "agentId": "it-engineer", - "comment": "it-engineer-bot -> IT Engineer Agent", + "comment": "openclaw-weixin -> Main Agent onboarding entry", "match": { - "channel": "feishu", - "accountId": "it-engineer-bot" + "channel": "openclaw-weixin" } } ], @@ -240,54 +250,8 @@ } }, "channels": { - "feishu": { - "enabled": true, - "domain": "feishu", - "connectionMode": "websocket", - "requireMention": true, - "streaming": true, - "tools": { - "doc": true, - "chat": true, - "wiki": true, - "drive": true, - "perm": true - }, - "accounts": { - "main-bot": { - "name": "Main Bot", - "appId": "", - "appSecret": "", - "dmPolicy": "open", - "allowFrom": [ - "*" - ], - "groupPolicy": "allowlist" - }, - "hrbp-bot": { - "name": "HRBP Bot", - "appId": "", - "appSecret": "", - "dmPolicy": "open", - "allowFrom": [ - "*" - ], - "groupPolicy": "allowlist" - }, - "it-engineer-bot": { - "name": "IT Engineer Bot", - "appId": "", - "appSecret": "", - "dmPolicy": "open", - "allowFrom": [ - "*" - ], - "groupPolicy": "allowlist" - } - }, - "reactionNotifications": "own", - "typingIndicator": true, - "resolveSenderNames": true + "openclaw-weixin": { + "enabled": true } }, "gateway": { @@ -382,12 +346,9 @@ }, "plugins": { "load": { - "paths": [] + "paths": ["${XIAOBEI_HOME}/awada"] }, "entries": { - "feishu": { - "enabled": true - }, "awada": { "enabled": false }, @@ -411,7 +372,7 @@ } } }, - "deepseek": { + "openclaw-weixin": { "enabled": true } } diff --git a/config-templates/openclaw.json b/config-templates/openclaw.json index d852e200..8cc6cdf4 100644 --- a/config-templates/openclaw.json +++ b/config-templates/openclaw.json @@ -9,68 +9,40 @@ "models": { "mode": "merge", "providers": { - "awk": { - "baseUrl": "https://ark.cn-beijing.volces.com/api/coding/v3", - "api": "openai-completions", + "bailian-token-plan": { + "baseUrl": "https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic", "apiKey": "${AWK_API_KEY}", + "api": "anthropic-messages", "models": [ { - "id": "glm-latest", - "name": "GLM-5.2", - "reasoning": true, - "input": [ - "text" - ], - "contextWindow": 1024000, - "maxTokens": 65536, - "compat": { - "supportsReasoningEffort": true, - "supportsUsageInStreaming": true, - "maxTokensField": "max_tokens" - }, - "api": "openai-completions" + "id": "deepseek-v4-flash-0731", + "name": "deepseek-v4-flash-0731", + "reasoning": false, + "input": ["text"], + "contextWindow": 1000000, + "maxTokens": 393216, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "compat": { "thinkingFormat": "openai" } }, { - "id": "deepseek-v4-flash", - "name": "DeepSeek V4 Flash", - "reasoning": true, - "input": [ - "text" - ], - "contextWindow": 1024000, - "maxTokens": 65536, - "compat": { - "supportsReasoningEffort": true, - "supportsUsageInStreaming": true, - "maxTokensField": "max_tokens" - }, - "api": "openai-completions" + "id": "glm-5.2", + "name": "glm-5.2", + "reasoning": false, + "input": ["text"], + "contextWindow": 1000000, + "maxTokens": 16384, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "compat": { "thinkingFormat": "openai" } }, { - "id": "deepseek-v4-pro", - "name": "deepseek-v4-pro", - "input": [ - "text" - ], - "contextWindow": 1024000, - "maxTokens": 65536, - "compat": { - "supportsReasoningEffort": true, - "supportsUsageInStreaming": true, - "maxTokensField": "max_tokens" - }, - "api": "openai-completions" - }, - { - "id": "doubao-seed-2.0-lite", - "name": "doubao-seed-2.0-lite", - "contextWindow": 256000, - "maxTokens": 65536, - "input": [ - "text", - "image" - ], - "api": "openai-completions" + "id": "qwen3.6-flash", + "name": "qwen3.6-flash", + "reasoning": false, + "input": ["text", "image"], + "contextWindow": 1000000, + "maxTokens": 32768, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "compat": { "thinkingFormat": "openai" } } ] } @@ -79,31 +51,21 @@ "agents": { "defaults": { "model": { - "primary": "awk/glm-latest", + "primary": "bailian-token-plan/deepseek-v4-flash-0731", "fallbacks": [ - "awk/deepseek-v4-pro", - "awk/deepseek-v4-flash" + "bailian-token-plan/glm-5.2" ] }, "imageModel": { - "primary": "awk/doubao-seed-2.0-lite" + "primary": "bailian-token-plan/qwen3.6-flash" }, "memorySearch": { "provider": "none" }, "models": { - "awk/glm-latest": { - "alias": "awk/glm-5.2" - }, - "awk/deepseek-v4-flash": { - "alias": "awk/ds-v4-flash" - }, - "awk/deepseek-v4-pro": { - "alias": "awk/ds-v4-pro" - }, - "awk/doubao-seed-2.0-lite": { - "alias": "awk/seed-2-lite" - } + "bailian-token-plan/deepseek-v4-flash-0731": {}, + "bailian-token-plan/glm-5.2": {}, + "bailian-token-plan/qwen3.6-flash": {} }, "compaction": { "mode": "safeguard" diff --git a/scripts/install-atomgit.ps1 b/scripts/install-atomgit.ps1 index f48ec04c..fa8978a6 100755 --- a/scripts/install-atomgit.ps1 +++ b/scripts/install-atomgit.ps1 @@ -313,15 +313,65 @@ function Run-SetupCrew { # to $HOME/.openclaw, and under Git Bash's MSYS path conversion + a Chinese username this yields a # bogus path like C:\c\Users\\.openclaw (ENOENT). $env:OPENCLAW_HOME = ($OpenclawHome -replace '\\', '/') + # Git Bash's MSYS2 layer defaults `ln -s` to `cp -r` (real copy), not a true symlink. setup-crew.sh + # uses `ln -s` to symlink crew skills into ~/.openclaw/workspace-/skills/, so without this flag + # Windows users end up with real folders instead of links (edits in the repo don't propagate, and + # re-runs copy over stale copies). MSYS=winsymlinks:nativestrict makes `ln -s` create real NTFS + # symlinks (requires Developer Mode on Win10+, or admin). Falls back to copies if neither is + # available, which is the previous behavior (no regression). + $env:MSYS = "winsymlinks:nativestrict" Invoke-Streamed { & $bashExe ($sh -replace '\\', '/') } # After setup-crew.sh finishes, clear OPENCLAW_HOME so subsequent install phases (gateway/daemon) # do not inherit this value - the engine would treat OPENCLAW_HOME as a homedir and append # /.openclaw, producing a nested layer. Remove-Item Env:OPENCLAW_HOME -ErrorAction SilentlyContinue + Remove-Item Env:MSYS -ErrorAction SilentlyContinue if ($LASTEXITCODE -ne 0) { Write-Warn "setup-crew.sh exited non-zero (you can manually re-run with --force later to fix)" } else { Write-Ok "crew templates set up" } } +# --- 7c. Sync global skills -> ~/.openclaw/skills --- +# On linux/macOS this is done by apply-addons.sh (which symlinks the repo's skills/ into +# ~/.openclaw/skills so the openclaw skill loader picks them up). The Windows route does not run +# apply-addons.sh, so we mirror that logic here: create a true NTFS symlink ~/.openclaw/skills -> +# /skills. Idempotent: if the target is already a symlink pointing to the right repo path, +# this is a no-op; if it's a stale real directory (from an old copy-based install), we warn and +# leave it untouched rather than risk deleting user edits. +function Sync-GlobalSkills { + Write-Stage "Syncing global skills -> ~/.openclaw/skills" + $src = Join-Path $Root "skills" + if (-not (Test-Path $src)) { Write-Ok "no global skills dir in repo, skipping"; return } + $dest = Join-Path $OpenclawHome "skills" + $srcFwd = ($src -replace '\\', '/') + + if (Test-Path $dest) { + $item = Get-Item $dest -Force + if ($item.LinkType -eq 'SymbolicLink' -and $item.Target -and (($item.Target -replace '\\', '/') -ieq $srcFwd)) { + Write-Ok "global skills symlink already correct" + return + } + if ($item.LinkType -eq 'SymbolicLink') { + Remove-Item $dest -Force -Recurse + } else { + Write-Warn "$dest already exists as a real directory (likely from an old install); leaving untouched to avoid overwriting user edits" + Write-Host " To switch to a symlink: delete $dest, then re-run install" -ForegroundColor Yellow + return + } + } + + try { + New-Item -ItemType SymbolicLink -Path $dest -Target $src -ErrorAction Stop | Out-Null + Write-Ok "global skills symlinked -> $src" + } catch { + Write-Warn "failed to create symlink $dest -> $src ($_)" + Write-Host " This usually means Developer Mode is off and the shell is not elevated." -ForegroundColor Yellow + Write-Host " Either enable Windows Developer Mode, or run this shell as Administrator." -ForegroundColor Yellow + Write-Host " Falling back to a copy (skills will not auto-update from the repo until you re-run install)." -ForegroundColor Yellow + Copy-Item -Path $src -Destination $dest -Recurse -Force + Write-Ok "global skills copied (fallback) -> $dest" + } +} + # --- 7b. Expose skill wrappers as .cmd shims into ~\.openclaw\bin --- # Mirrors the .sh route's expose_skill_wrappers + ensure_openclaw_bin_in_path # (scripts/lib/skill-wrappers.sh). On Windows we cannot rely on symlinks @@ -537,7 +587,7 @@ function Install-GatewayAndEnv { # --- Interactive AWK_API_KEY prompt --- $awkKey = $env:AWK_API_KEY if (-not $script:NoPrompt -and -not $awkKey) { - $awkKey = Read-Host "Enter AWK_API_KEY (Volces ARK API key)" + $awkKey = Read-Host "Enter AWK_API_KEY (Aliyun Bailian API key)" } # --- Write .env (business vars, export format for bash/sh source, read by the bare CLI) --- @@ -685,6 +735,7 @@ function Main { } else { Place-Config Run-SetupCrew + Sync-GlobalSkills Expose-SkillWrappers Install-GatewayAndEnv Bind-WeixinChannel diff --git a/scripts/install-atomgit.sh b/scripts/install-atomgit.sh index 599b0484..926367b3 100755 --- a/scripts/install-atomgit.sh +++ b/scripts/install-atomgit.sh @@ -87,7 +87,10 @@ mktempfile() { # ═══════════════════════════════════════════════════════════════════ # gum UI(TTY 才 bootstrap,非 TTY 静默跳过) # ═══════════════════════════════════════════════════════════════════ -GUM_VERSION="${OPENCLAW_GUM_VERSION:-0.17.0}" +# atomgit 国内线路默认不拉 gum bootstrap(charmbracelet/gum 的 release 只在 GitHub, +# 国内连 GitHub 常超 75s 拖慢安装)。若机器已装 gum(brew install gum)仍会被检测使用; +# 想强制 bootstrap 走 GitHub 可 export OPENCLAW_GUM_VERSION=0.17.0。 +GUM_VERSION="${OPENCLAW_GUM_VERSION:-}" GUM="" GUM_STATUS="skipped" GUM_REASON="" @@ -182,6 +185,14 @@ bootstrap_gum_temp() { return 0 fi + # atomgit 国内线路默认不 bootstrap gum(GUM_VERSION 置空时跳下载,避免连 GitHub + # 超时拖慢安装)。系统已装 gum 在上面 command -v 已命中。用户想强制 bootstrap 可 + # export OPENCLAW_GUM_VERSION=0.17.0。 + if [ -z "$GUM_VERSION" ]; then + GUM_REASON="gum bootstrap disabled on atomgit route (export OPENCLAW_GUM_VERSION to enable)" + return 1 + fi + if ! command -v tar >/dev/null 2>&1; then GUM_REASON="tar not found" return 1 @@ -1375,8 +1386,8 @@ install_gateway_and_env() { # 会产出嵌套路径。本脚本顶部已把 OPENCLAW_HOME 设成内部变量且未 export,不会传给引擎子进程, # 所以这里只打 info 提示用户清理 shell 环境变量,不能 unset——unset 会误伤脚本内部变量, # 导致后续 ${OPENCLAW_HOME//...} 在 set -u 下报 unbound variable。 - if [ -n "${OPENCLAW_HOME:-}" ] && [ "$(cd "${OPENCLAW_HOME}" && pwd)" = "$(cd "$HOME/.openclaw" && pwd)" ]; then - ui_info "检测到 shell 里 export OPENCLAW_HOME=$OPENCLAW_HOME(不影响本次安装,但建议清掉避免引擎嵌套)" + if [ -n "${OPENCLAW_HOME:-}" ] && [ "$(cd "${OPENCLAW_HOME:-}" && pwd)" = "$(cd "$HOME/.openclaw" && pwd)" ]; then + ui_info "检测到 shell 里 export OPENCLAW_HOME=${OPENCLAW_HOME:-}(不影响本次安装,但建议清掉避免引擎嵌套)" fi # redirect stdin from /dev/tty so interactive read 工作于 curl|bash diff --git a/scripts/install.ps1 b/scripts/install.ps1 index a2a1c347..e0108ba8 100755 --- a/scripts/install.ps1 +++ b/scripts/install.ps1 @@ -330,15 +330,65 @@ function Run-SetupCrew { # to $HOME/.openclaw, and under Git Bash's MSYS path conversion + a Chinese username this yields a # bogus path like C:\c\Users\\.openclaw (ENOENT). $env:OPENCLAW_HOME = ($OpenclawHome -replace '\\', '/') + # Git Bash's MSYS2 layer defaults `ln -s` to `cp -r` (real copy), not a true symlink. setup-crew.sh + # uses `ln -s` to symlink crew skills into ~/.openclaw/workspace-/skills/, so without this flag + # Windows users end up with real folders instead of links (edits in the repo don't propagate, and + # re-runs copy over stale copies). MSYS=winsymlinks:nativestrict makes `ln -s` create real NTFS + # symlinks (requires Developer Mode on Win10+, or admin). Falls back to copies if neither is + # available, which is the previous behavior (no regression). + $env:MSYS = "winsymlinks:nativestrict" Invoke-Streamed { & $bashExe ($sh -replace '\\', '/') } # After setup-crew.sh finishes, clear OPENCLAW_HOME so subsequent install phases (gateway/daemon) # do not inherit this value - the engine would treat OPENCLAW_HOME as a homedir and append # /.openclaw, producing a nested layer. Remove-Item Env:OPENCLAW_HOME -ErrorAction SilentlyContinue + Remove-Item Env:MSYS -ErrorAction SilentlyContinue if ($LASTEXITCODE -ne 0) { Write-Warn "setup-crew.sh exited non-zero (you can manually re-run with --force later to fix)" } else { Write-Ok "crew templates set up" } } +# --- 7c. Sync global skills -> ~/.openclaw/skills --- +# On Linux/macOS this is done by apply-addons.sh (which symlinks the repo's skills/ into +# ~/.openclaw/skills so the openclaw skill loader picks them up). The Windows route does not run +# apply-addons.sh, so we mirror that logic here: create a true NTFS symlink ~/.openclaw/skills -> +# /skills. Idempotent: if the target is already a symlink pointing to the right repo path, +# this is a no-op; if it's a stale real directory (from an old copy-based install), we warn and +# leave it untouched rather than risk deleting user edits. +function Sync-GlobalSkills { + Write-Stage "Syncing global skills -> ~/.openclaw/skills" + $src = Join-Path $Root "skills" + if (-not (Test-Path $src)) { Write-Ok "no global skills dir in repo, skipping"; return } + $dest = Join-Path $OpenclawHome "skills" + $srcFwd = ($src -replace '\\', '/') + + if (Test-Path $dest) { + $item = Get-Item $dest -Force + if ($item.LinkType -eq 'SymbolicLink' -and $item.Target -and (($item.Target -replace '\\', '/') -ieq $srcFwd)) { + Write-Ok "global skills symlink already correct" + return + } + if ($item.LinkType -eq 'SymbolicLink') { + Remove-Item $dest -Force -Recurse + } else { + Write-Warn "$dest already exists as a real directory (likely from an old install); leaving untouched to avoid overwriting user edits" + Write-Host " To switch to a symlink: delete $dest, then re-run install" -ForegroundColor Yellow + return + } + } + + try { + New-Item -ItemType SymbolicLink -Path $dest -Target $src -ErrorAction Stop | Out-Null + Write-Ok "global skills symlinked -> $src" + } catch { + Write-Warn "failed to create symlink $dest -> $src ($_)" + Write-Host " This usually means Developer Mode is off and the shell is not elevated." -ForegroundColor Yellow + Write-Host " Either enable Windows Developer Mode, or run this shell as Administrator." -ForegroundColor Yellow + Write-Host " Falling back to a copy (skills will not auto-update from the repo until you re-run install)." -ForegroundColor Yellow + Copy-Item -Path $src -Destination $dest -Recurse -Force + Write-Ok "global skills copied (fallback) -> $dest" + } +} + # --- 7b. Expose skill wrappers as .cmd shims into ~\.openclaw\bin --- # Mirrors the .sh route's expose_skill_wrappers + ensure_openclaw_bin_in_path # (scripts/lib/skill-wrappers.sh). On Windows we cannot rely on symlinks @@ -554,7 +604,7 @@ function Install-GatewayAndEnv { # --- Interactive AWK_API_KEY prompt --- $awkKey = $env:AWK_API_KEY if (-not $script:NoPrompt -and -not $awkKey) { - $awkKey = Read-Host "Enter AWK_API_KEY (Volces ARK API key)" + $awkKey = Read-Host "Enter AWK_API_KEY (Aliyun Bailian API key)" } # --- Write .env (business vars, export format for bash/sh source, read by the bare CLI) --- @@ -705,6 +755,7 @@ function Main { } else { Place-Config Run-SetupCrew + Sync-GlobalSkills Expose-SkillWrappers Install-GatewayAndEnv Bind-WeixinChannel diff --git a/scripts/install.sh b/scripts/install.sh index 6bc6ee4a..30745ee1 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1699,8 +1699,8 @@ install_gateway_and_env() { # 会产出嵌套路径。本脚本顶部已把 OPENCLAW_HOME 设成内部变量且未 export,不会传给引擎子进程, # 所以这里只打 info 提示用户清理 shell 环境变量,不能 unset——unset 会误伤脚本内部变量, # 导致后续 ${OPENCLAW_HOME//...} 在 set -u 下报 unbound variable。 - if [ -n "${OPENCLAW_HOME:-}" ] && [ "$(cd "${OPENCLAW_HOME}" && pwd)" = "$(cd "$HOME/.openclaw" && pwd)" ]; then - ui_info "检测到 shell 里 export OPENCLAW_HOME=$OPENCLAW_HOME(不影响本次安装,但建议清掉避免引擎嵌套)" + if [ -n "${OPENCLAW_HOME:-}" ] && [ "$(cd "${OPENCLAW_HOME:-}" && pwd)" = "$(cd "$HOME/.openclaw" && pwd)" ]; then + ui_info "检测到 shell 里 export OPENCLAW_HOME=${OPENCLAW_HOME:-}(不影响本次安装,但建议清掉避免引擎嵌套)" fi # redirect stdin from /dev/tty so interactive read 工作于 curl|bash