Repository navigation
v0.0.41
v0.0.41 发版说明(Codex Harness Desktop)
本版主题:语音播报收干净(停止真停 + 每回合限长 + 状态条重做),外加工具链在线更新与自动化通道修正。
版本号说明(请先看这条):本版是 0.0.41 而不是 0.0.40。
0.0.40 的构建流程曾被取消,GitHub 上那个 Release 没有上传任何安装包(下载链接全部 404),
因此没有任何人拿到过 0.0.40。为避免「同名 Release 退回草稿、应用内更新器永远收不到这一版」,
本版顺延为 0.0.41 直接发布。上一版实际可用的是 0.0.39。
一、修了什么
1. 语音播报:点「停止」现在真的停
现象:按了「停止」之后播报还在继续;模型越是勤快插播,越按不住。
根因:stopPlayback() 过去只掐断了「此刻正在响的音频」和「队列里已排好的」,但三条入口仍然活着:
| # | 漏掉的东西 | 后果 |
|---|---|---|
| ① | speakLiveRef 没清 |
下一句正文 delta 到达,照常合成照常念 |
| ② | 自动播报计数器没重置 | 「单回合工具调用 > 10 次 / 同一处返工 ≥2 次」硬规则下一帧又命中,把本回合重新标成「念正文」 |
| ③ | 模型的插播工具不受管 | 模型再调一次 voice_announce,toolSpeak 分支无条件入链 |
修法:引入静音闩锁。按停时同时掐掉上面三条,之后所有播报(正文实时 / 工具插播 / 结束播报稿)在唯一入口被拦下。闩锁只在两个地方解除:
- 状态条上的「恢复」按钮(按停后状态条常驻,不再 1.6 秒自动消失);
- 用户把「语音播报」总开关重新打开。
⛔ 刻意不跟回合结束自动解除——用户按停的语义是「我现在不想听」,下一回合又自动开口等于白按。
2. 语音播报:每回合限长(不再一直播下去)
现象:播报动辄一两分钟。
根因:原先只有「队列长度」上限,而正文朗读是一条无界流——只要触发一次全文朗读(模型主动要求,或命中上面那条硬规则),正文吐多少念多少,队列永远不满,背压形同虚设。
修法:
- 新增每回合 160 字总预算(三种播报共用),超出不再念,并顺手关掉本回合的正文朗读;
- 播报稿上限 240 → 120 字(硬顶 600 → 220);
- 插播工具上限 120 → 80 字;
- 引擎侧指令同步收紧(~80 → ~50 字),并写明「超出的部分根本不念」——从源头把长度收住。
3. 语音播报状态条视觉重做
用户反馈「这个语音播报真的有点丑」,逐条整改(其中两条是真 bug):
- ⛔ 停止按钮漏了
appearance: none—— 全站没有color-scheme声明,暗色下原生<button>由浏览器按浅色 UA 绘制,在深色胶囊上就是一块突兀的白疙瘩; - ⛔ 条子宽度被写死至少 280px —— 没有正文时就是一条空胶囊 ⇒ 改为贴合内容;
- 点击区 22 → 32px(原先偏难点中);字号 11.5 → 12px;
- 底色
--bg→--panel(输入框本身就是--bg,同色会与输入框糊成一块); - 文案去掉重复的「正在」二字(呼吸圆点 + 喇叭图标已表达),补键盘焦点环与「减弱动效」支持。
4. 技能 / 插件 / 自动化工具在线更新
设置页新增检查更新与更新按钮:
- nuphus(桌面自动化)与 browser-skill(浏览器自动化):走「用户配置的 registry → 国内镜像 → 官方源」依次尝试;
- 技能:按内容指纹逐文件比对(SHA256),只提示真正有变化的部分;
- 插件:按版本号比较。
5. 浏览器 / 桌面自动化改走命令行通道
现象:任务跑到一半自己断了,且伴随 unsupported call 报错。
根因:当前引擎版本(0.157 起)把内置 MCP 工具延迟暴露给模型——工具列表里看得到,一调用就报不支持。此前指令却把 browser_* 写成「首选」、命令行写成「兜底」,弱模型(deepseek 系)不会去核对工具列表,直接照首选调 ⇒ 失败 ⇒ 换招重试 ⇒ 整个回合耗死在工具选择上。
修法:主线改为命令行通道(playwright-cli / nuphus-call),并明确要求失败立即切换、不要重试、不要反复换通道。
6. 更新源按产品线隔离
同一个仓库里有两条产品线的发布,而 GitHub 的「最新发布」是按发布时间算的:
| 产品线 | 版本标签 | 安装包名前缀 |
|---|---|---|
| Codex Harness Desktop(本产品) | v* |
Codex.Harness.Desktop-* |
| Codex Harness Assistant(云助手) | cloud-v* |
CodexHarnessAssistant-* |
本版起桌面版只认自己的产品线(版本标签 + 安装包前缀都过滤),云助手的版本再新也不会被当成本产品的更新提示(此前会误报「有新版本 0.0.3」,装上去的却是云助手)。
7. 引擎升级到 0.162.1
npm 声明与实际二进制版本对齐,防止重装时被回退到旧引擎。
8. 移除了「回合没干完就收工」的宿主自动接手
上一轮加过这个自动接手(判定回合结尾像是要收工时,宿主自动续发一轮)。实测它会把正常完成的长报告误判成「宣布下一步」,于是任务跑完后宿主又多发一轮,用户看到凭空多出来的消息。误判的代价大于漏判,已整条删除,只保留提示词层的回合连续性规则。
二、mac 适配审计结论
审计脚本:node scripts/mac-audit.mjs v0.0.39,范围为本版新增行(历史实证:真缺口都在新增行里)。
命中 7 条,逐条判读后真缺口 0 条。
| 命中类别 | 条数 | 判读 |
|---|---|---|
exe |
3 | automation-policy.ts:21 是注释里说明实测枚举用的 nuphus-mcp.exe,非可执行路径;updates.ts 两条位于平台分支内——mac 走 darwin 分支(取 *-mac-<arch>.zip),.exe 那条在 else 里,mac 走不到。 |
backslash |
2 | skills-market.ts 的两处是归一化写法:一处用 [\\/] 正则同时吃两种分隔符,另一处显式 replace(/\\/g, "/") 把展示路径转成正斜杠 —— 正是为跨平台写的。 |
powershell |
1 | developer-instructions.ts 的提示词文本,且原文就限定 on Windows PowerShell,未对 mac 承诺任何行为。 |
ctrl-key |
1 | 同为提示词文本,且同一句里已写明跨平台写法:Ctrl+V on Windows, Cmd+V on macOS — never hardcode one platform。 |
win32 / darwin / winpath / appdata |
0 | 平台门控、Windows 绝对路径硬编码、环境变量直读均无命中。 |
⛔ 脚本自带正则自证(0 命中与「正则写坏了」输出完全相同),本次逐条读过命中行原文,不是只看计数。
三、安装
Windows:下载 Codex.Harness.Desktop-0.0.41-win-x64.exe → 双击安装(覆盖安装无需先卸载,安装器会自动关闭旧版)。
macOS:下载对应芯片的 zip(Apple 芯片 arm64、Intel x64)→ 解压 → 把 Codex Harness.app 拖进「应用程序」。
首次打开若提示无法验证开发者:
- 打开终端,输入
xattr -cr(末尾有空格); - 把 app 图标拖进终端——会自动补全路径(用户往往不知道自己的路径,写死的老文案会再次被带出来);
- 回车执行,再双击 app 即可。
错误码 640 = 「无法验证开发者」,是 Gatekeeper 拦的,不是包损坏。
注意:electron-builder 在 mac x64 上产出的资产名不带
x64(形如…-mac.zip),CI 会强制规范化为带架构名的形式,否则 Intel 用户永远匹配不到资产(症状是静默「已是最新」)。
四、已知问题
- 工具链(Node / Python / rg)按需下载的服务端分发目录仍在准备中:MCP / 脚本类能力可能降级(引擎与对话不受影响)。
- 语音播报在通话中仍由通话链路负责朗读(电话里必须把回复念出来),与本次的播报开关、静音闩锁互不干扰。