workbuddy-toolkit
Health Pass
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 25 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
WorkBuddy Multi-Account Manager & Automated Check-in Toolkit (多账号轮换、全域工作区打通与自动化签到)
WorkBuddy Toolkit: Multi-Account Manager & Automated Check-in
WorkBuddy (腾讯开源/商业化 AI 编程助手) 多账号无缝轮换、全域工作区打通、自动化静默签到、容灾路由网关、独立免登扫码与沙盒日志自愈治理工具箱。
深入逆向底层 SQLite 存储隔离机制、腾讯云鉴权、5.6+ 本地凭证加密协议、/v2/chat/completionsSSE 流式协议与沙盒日志生命周期,原生全面适配 macOS、Linux 与 Windows 三大操作系统,打造零侵入、高内聚、零打扰的本地自动化工作流。
🤖 复制发给你的 AI Agent:一键全自动安装与自适应调度
只需将下方提示词直接复制并发送给你的终端 AI Coding Agent(如 Antigravity、WorkBuddy、Claude Code、Hermes、OpenCode、Codex 或 Cursor),Agent 将自动识别当前操作系统(macOS / Linux / Windows)、全自动拉取仓库、安装配置、智能探测自身的
schedule调度能力并向你输出交付报告:
请帮我安装并配置 WorkBuddy 多账号管理与自动化签到工具包 (workbuddy-toolkit):
1. 识别当前操作系统平台(macOS、Linux 或 Windows),克隆开源仓库:
git clone https://github.com/FlapPearLabs/workbuddy-toolkit.git ~/.workbuddy/toolkit
2. 进入目录并执行适配当前系统的一键安装程序:
- 跨平台通用推荐方式(任何操作系统均可用):
cd ~/.workbuddy/toolkit && python3 install.py (Windows 下执行: python install.py)
- 或使用系统原生安装脚本:
macOS / Linux : cd ~/.workbuddy/toolkit && ./install.sh
Windows (PowerShell) : cd ~\.workbuddy\toolkit ; .\install.ps1
3. 执行 `workbuddy init` 确保全域工作区打通触发器已激活;
4. 执行 `workbuddy doctor` 诊断本地凭证格式与解密运行时兼容性;
5. 执行 `workbuddy status` 检查当前账号状态与已存凭证库;
6. 智能探测你自身(当前 AI Agent)是否拥有内置的 `schedule` / cron 调度功能:
- 【若拥有 schedule 功能】(如 Antigravity、WorkBuddy 等内置调度器):
默认使用你的 schedule 工具注册一个每日定时任务(Cron: 0 9 * * *, 触发时运行 workbuddy checkin 自动执行签到与每日对话保活,并向我汇总汇报收益)。
同时询问我:“已为您默认配置每天早晨 09:00 自动打卡(含每日签到积分与连续对话保活)并汇报,请问您是否需要调整打卡时间或汇报偏好?”
- 【若没有 schedule 功能】(如部分普通 CLI Agent):
如实告诉我当前环境没有内置 Agent 调度能力,并请我选择签到方式:
① 采用安装脚本已配置的系统原生守护定时打卡(macOS launchd / Linux systemd timer / Windows 任务计划程序,每天 09:00 静默打卡写入日志);
② 完全关闭后台自动打卡,后续每次由我手动在终端输入 `wb-checkin` 随时打卡。
7. 向我汇报最终安装与配置结果,并指导我如何使用 `wb-help`(查看可用命令与功能列表)、`wb-login`(免打开客户端扫码入库)、`wb-list` / `wb-status`(账号状态全景与 JSON)、`wb-switch`(免扫码秒切账号)、`wb-checkin`(签到+对话)、`wb-chat`(CLI 直接调用模型)、`wb-router`(容灾轮换路由)、`wb-models`(模型透视)以及 `wb-doctor`(兼容诊断)。
⭐ 核心优势:多账号快速轮换与 WorkBuddy 5.6+ 加密凭据原生兼容
💡 【薅算力经济学:10 分钟配置,月领 10,500 积分,立省 140+!省下的钱开 GPT Plus 多带劲!】
- 算力倒赚:三个号花 10 分钟配置下我们的工具,每日自动化静默签到就是
3000 * 3 + 500 * 3 = 10,500积分,大于每个月 140 订阅高级版的 9,000 积分还多 1,500 积分,立省 140+!- 重度耐用(成本为 0):假设使用高性价比主力模型
DeepSeek V4.1 Flash干活,每小时约消耗 60 积分,10,500 / 60 = 175 小时不间断运行!相当于全月每天长达 5.8 小时 重度使用不间断才能用完。3 个号直接覆盖绝大多数普通开发者的日常 Token 需求,价格为 0,配置只需 10 分钟!- 降维消费:每个月省下来的 140 块钱拿去开个 ChatGPT Plus,又是每个月多出几个亿的高质量 Token 额度,还附带顶级 GPT 网页端对话与 GPT Live 实时语音(全天候陪聊、沉浸式练外语口语),多带劲!
| 对比维度 | 传统 WorkBuddy 官方体验 | 使用 WorkBuddy Toolkit |
|---|---|---|
| 多账号录入 | 必须打开臃肿 Electron 客户端、退出当前账号、掏出手机扫码,极易顶掉旧账号 | 独立免登终端扫码 (wb-login):无需启动客户端 UI,终端直接呈现高清 QR 码,扫码即自动入库,智能消解别名冲突 |
| 多账号切换 | 每次换号必须在微信上重新掏出手机扫码,频繁中断思考 | 免除微信反复扫码:保存已登录凭据 Profile 后随时秒级直切,即切即用! |
| 账号状态与列表 | 官方无全景透视,无法感知 Token 与 RefreshToken 剩余有效期与健康度 | 多维全景与程序化透视 (wb-list / wb-status):支持文本清单与 --json 规范输出,UID、存储格式与双到期时间一览无余 |
| 凭证健康巡检 | 账号静默失效毫无感知,直到任务报错中断才发现已登出 | 零感知自愈与桌面通知 (wb-audit):防风控三级审计,临期自动续期,失效触发 macOS / Windows 原生桌面通知 |
| 远端双端监控 | 无法跨机器监控远程服务器/CI 机上的账号健康度 | 双 Runner 原生告警 (workbuddy-monitor.yml):跨 macOS / Windows 双矩阵每日巡检,官方邮件零配置秒级送达 |
| 加密凭据兼容 | 5.6+ 采用 $wbEncrypted 加密敏感字段,普通脚本直接失效 |
原生解密兼容 (v0.3.1+):运行时透明兼容明文与加密凭据,严格内存级解密,不降级、不落盘 |
| 工作区与会话 | 换号后历史对话列表变空,工作区关联折叠,需重新拉取项目 | 全域穿透打通:无论怎么切号,所有账号看到同一个物理工作区与全量对话历史 |
| Token 生命周期 | 切换账号后旧 Token 容易被覆盖导致失效过期 | 自动双向回存 (Sync-before-switch):切号前自动回写最新 Token,保持凭证新鲜 |
| 每日签到积分 | 需每天打开图形界面、手动点开活动、逐个切号点击 | 极速静默打卡 (wb-checkin):0.5 秒遍历所有账号统一领积分,三端原生系统调度自动运行。(3 个号花 10 分钟配置,月领 10,500 积分,超越 140 订阅高级版的 9,000 积分还多 1,500 分,立省 145!) |
| 每日连续对话 | 需打开图形界面手动输入聊天以维持连击奖励 | 全账号自动联动保活:打卡后自动优先使用免费/超低倍率模型(Hy3/Flash)完成每日对话,维持连击兑换资格 |
| 终端 CLI 问答 | 官方需打开臃肿 Electron 窗口或配置复杂环境 | 原生秒级直接对话 (wb-chat):直接在终端向 WorkBuddy 模型提问并流式输出,零 UI 内存占用 |
| 模型容灾与自愈 | 官方上游模型故障/限流直接报错中断任务 | 透明容灾轮换网关 (wb-router)::8047 代理中介,支持 DeepSeek / Space Bunny / Hy3 瞬态故障自动降级轮换 |
| 模型资产透视 | 官方隐藏模型实际扣费倍率与调用计费明细 | 动态全景资产透视 (wb-models):动态拉取全量模型、实时倍率审计与轻量级交互式终端选择器 (TUI) |
| 沙盒日志暴走 | sandbox-core 狂写 PTY 日志无淘汰机制,几天吞噬 15GB+ 磁盘 | 智能物理看门狗 (workbuddy-log-guard):36h TTL、2GB 目录硬顶、30MB 物理熔断,lsof 句柄感知,只 truncate 不删活动文件 |
| 规则雪崩与并发撕裂 | 漏配临时目录导致 1.7 万行规则膨胀卡死 120s SIGKILL;多进程并发自愈易破坏规则文件 | Single-Flight 内核锁防撕裂 (wb-sandbox heal):动态通配规则降至 48 条,跨进程排他锁 (fcntl.flock / msvcrt) + 锁内回读校验,并发 0 冲突 |
| IPC 慢连接与头阻塞 | 传统 IPC 无全局超时与帧长限制,遇慢响应或超长 Payload 拖死命令执行 | 全链路 Monotonic Deadline + 4MB 硬熔断:覆盖连接、发送与分片接收全时钟周期,100% Fail-Open 绝不卡死用户命令 |
| 子进程与转储隔离 | 子进程默认继承父进程打开句柄;意外崩溃转储 (Core Dump) 泄露内存解密 Token | 物理沙盒隔离 (close_fds=True + RLIMIT_CORE=0):全闭关句柄,POSIX 下锁定 RLIMIT_CORE=0 与私有 umask(0o077),物理阻断泄露 |
🛡️ 官方更新兼容性、冲突防范与安全回退保障 (Upstream Compatibility & Zero-Conflict Guarantee)
极简结论:WorkBuddy Toolkit 采用零侵入外挂(Non-invasive Sidecar)与运行态接缝设计,绝对不修改官方任何二进制执行体与 asar 安装包。官方后续任何版本迭代均默认零冲突、具备完全自愈能力;若遇底层破坏性重构,Toolkit 内置 Fail-Safe 快速熔断与主动体检预警 (
wb-doctor),并支持秒级零残留一键回退。
1. 为什么默认绝不破坏且 100% 零冲突?(非侵入设计准则)
- 零文件篡改(Zero In-Place Binary Mutation):
- Toolkit 从不 patch、不替换、不劫持
/Applications/WorkBuddy.app(或 Windows/Linux 安装目录)内的任何官方执行体、只读脚本或 asar 归档。官方应用包哈希与签名 100% 保持官方原版。
- Toolkit 从不 patch、不替换、不劫持
- 运行态接缝与幂等注入(Idempotent IPC Seam):
- 沙盒 Seatbelt 规则治理通过官方运行时自身开放的 Unix Domain Socket 注入。规则集合求并集具备天然的数学幂等性(Idempotent Set):即便未来官方版本在
tsbx_rules.json中原生补齐了 temp 规则,规则合并依然保持 $O(1)$,绝不冲突、绝不重复报错。
- 沙盒 Seatbelt 规则治理通过官方运行时自身开放的 Unix Domain Socket 注入。规则集合求并集具备天然的数学幂等性(Idempotent Set):即便未来官方版本在
- 跨进程 Single-Flight 内核文件锁与回读校验(Single-Flight Lock & Read-back Verification):
- 当多终端或多进程并发触发自愈(
wb-sandbox heal)时,通过fcntl.flock(POSIX)或msvcrt.locking(Windows)抢占跨进程排他锁,并在锁内二次回读规则文件。若竞争并发进程已先行完成治愈,直接优雅退出,彻底杜绝并发写引发的规则文件损坏或半成品撕裂。
- 当多终端或多进程并发触发自愈(
- 全链路 Monotonic Deadline 统一时钟与 4MB 硬熔断(UDS Deadline & Fail-Open):
- 与沙盒进程间通信(Unix Domain Socket / Windows Named Pipe)全面基于
time.monotonic()建立贯穿连接、发送、分片接收全周期的统一 Deadline。协议层强制注入 4MB 帧接收/发送硬熔断,任何异常挂起或畸形大包均触发 100% Fail-Open 优雅降级,绝对不挂死用户命令。
- 与沙盒进程间通信(Unix Domain Socket / Windows Named Pipe)全面基于
- 子进程派生脱敏与核心转储隔离(Subprocess FD & Core Dump Isolation):
- 所有内部派生的工具子进程强制开启
close_fds=True阻断父进程泄漏文件描述符,POSIX 环境下前置注入preexec_fn锁死RLIMIT_CORE=0并设置私有umask(0o077),彻底杜绝进程意外崩溃时生成 Core Dump 泄露内存中已解密的敏感 Token。
- 所有内部派生的工具子进程强制开启
- 旁路看门狗阈值休眠(Passive Threshold Guard):
- 日志与快照治理(
workbuddy-log-guard)仅在目录突破 2GB 硬顶或单文件突破 30MB 熔断线时才介入;若官方后续版本自愈了日志轮转,看门狗纯内核休眠,对系统零任何副作用。
- 日志与快照治理(
- Toolchain 独立解耦:
sccache编译缓存挂载在全局~/.cargo/config.toml,为 Rust 标准生态规范,WorkBuddy 客户端如何更新均无法影响该层。
2. WorkBuddy 官方版本更新时的 3 种演进场景与表现
| 官方更新场景 | 现场表现与 Toolkit 行为 | 用户影响与应对方式 |
|---|---|---|
| 场景 A:官方合入原生修复 (官方在 tsbx_rules.json 补齐了 temp 规则,或增加了会话清理) |
1. Toolkit 注入的规则自动与官方规则幂等求并集,规则数保持两位数。 2. wb-doctor 自动感知并报告:Upstream sandbox spec: NATIVELY_PATCHED。 |
零破坏、零冲突。 用户可继续保留 Toolkit 作为双重防腐保底,亦可随时执行 uninstall.py 优雅退场。 |
| 场景 B:官方常规业务更新 (新增模型、更新 UI 等,但未修复底层缺陷) |
Toolkit 后台守护与动态接缝继续透明无感生效,阻断规则膨胀与日志无限吃盘。 | 无感自愈。 完全不受影响,正常使用即可。 |
| 场景 C:官方破坏性重构 (彻底废弃沙盒架构、修改 IPC Socket 路径或变更协议格式) |
1. Fail-Safe 快速熔断:所有 IPC 调用均设置 1.5s 硬超时与静默降级,绝不会卡死终端或中断构建任务。 2. 主动体检预警: wb-doctor 会明确标黄/标红捕获:IPC_MISMATCH / DAEMON_NOT_FOUND,向用户打印清晰的升级排查指引。 |
拒绝不知情。wb-doctor 第一时间精准指出异常;用户可一键回退原生,或等待 Toolkit 发布适配版本。 |
3. 如何自检冲突与秒级安全回退?
🔍 冲突检测与版本体检(一键诊断)
升级 WorkBuddy 后,随时在终端执行:
workbuddy doctor # 或别名 wb-doctor
doctor 会全方位输出上游规格、运行时状态与冲突预警:
=== WorkBuddy Toolkit Doctor ===
Auth file : OK (~/Library/.../workbuddy-desktop.info)
Credential format : encrypted
Encrypted scheme : detected (sym-v1 / suite 1)
WorkBuddy runtime : FOUND (/Applications/WorkBuddy.app/Contents/MacOS/Electron)
WorkBuddy version : 5.6.2
Credential resolver : AVAILABLE (Electron 37.10.3)
Profile count : 3
API capability : READY
Upstream sandbox spec : VULNERABLE (Upstream 5.6.10 omits macOS temp rules; sidecar heal active)
Sandbox & Seatbelt : HEALTHY (48 rules, temp wildcards active)
Log guard daemon : ACTIVE (LaunchAgent loaded, 1800s periodic watch)
Cargo sccache reuse : CONFIGURED (sccache enabled)
RESULT: COMPATIBLE
--- Upstream Compatibility & Safe Rollback ---
Non-invasive Sidecar : ACTIVE (Zero app-bundle modifications; 100% fail-safe)
Conflict Status : ZERO CONFLICTS DETECTED (Idempotent rules & passive monitoring)
Rollback Instruction : Safe 0-residue rollback available anytime via: python3 uninstall.py
若官方协议变更,输出将精准变为
IPC_MISMATCH或POTENTIAL DRIFT DETECTED,并给出即时指引,彻底杜绝用户在不知情状态下盲目运行。💡 命令假死与 exit 137 专项取证:若在日常开发中遇到终端执行命令卡死或报 exit 137,可直接运行
wb-doctor --inspect-137(或--json)获取法医级事故现场指纹分析,详见 7. 事故现场指纹分析。
↩️ 安全回退与零残留卸载(0 Residue Rollback)
若需要临时或永久回退至系统原生状态,直接在 Toolkit 目录运行:
# 跨平台通用 Python 卸载
python3 uninstall.py
# 或使用系统原生脚本:
# macOS / Linux : ./uninstall.sh
# Windows (PS) : .\uninstall.ps1
卸载动作包含:
- 秒级注销并删除后台守护服务(macOS
launchd/ Linuxsystemd/ Windows 计划任务); - 移除 CLI 软链与 PATH 配置;
- 还原
~/.cargo/config.toml; - 系统 100% 还原至纯净原生状态,零进程驻留、零文件污染。
目录
- 🛡️ 官方更新兼容性、冲突防范与安全回退保障
- 一、支持平台与系统要求
- 二、架构与底层逆向原理解析
- 1. 工作区与会话“假丢失”根因剖析
- 2. SQLite 触发器穿透与全域共享机制
- 3. 账号快速轮换与双向 Token 同步
- 4. 🔥 核心攻坚:WorkBuddy 5.6+ 本地加密凭据逆向与安全兼容层
- 5. 每日签到协议逆向与幂等领取架构
- 6. 每日连续对话协议逆向与模型倍率智能梯队
- 7. 三端原生后台定时调度与自适应探测
- 8. 容灾轮换路由网关架构 (Failover Router :8047)
- 9. 模型全景资产透视与倍率审计 (Model Inventory)
- 10. 🔥 沙盒日志暴走根因与无感物理看门狗治理 (Log Guardian)
- 11. 独立免登扫码录入机制逆向与终端二维码渲染 (Decoupled QR Login)
- 12. 账号状态多维呈现与程序化 JSON 架构 (Status & Inventory Architecture)
- 13. 账号健康度定时巡检与双端原生桌面通知 (Health Audit & Desktop Notification)
- 14. 远端 CI 跨机双端健康监控与零配置邮件告警 (Dual-Runner CI Monitor)
- 15. 🔥 深度踩坑记录与底层逆向突破全景 ("问题→原因→解决")
- 16. 🔥 生产事故深水排查与白盒物理凭证库 (事故一、二、三、四)
- 三、快速上手与安装升级
- 四、命令行工具使用手册
- 0. 可用命令与功能清单速查 (wb-help / workbuddy help)
- 1. 独立免登扫码录入 (wb-login)
- 2. 账号快速切换 (wb-switch)
- 3. 账号状态全景与程序化导出 (wb-list / wb-status)
- 4. 账号健康审计与常驻巡检 (wb-audit)
- 5. 每日签到与连续对话保活 (wb-checkin)
- 6. 终端极速对话 (wb-chat)
- 7. 环境与凭证兼容性诊断 (wb-doctor)
- 8. 容灾轮换路由网关 (wb-router)
- 9. 模型全景资产与倍率透视 (wb-models)
- 10. 沙盒日志看门狗配置与管理 (workbuddy-log-guard)
- 11. 沙盒状态自愈与会话快照治理 (wb-sandbox)
- 12. 常用命令速查表
- 五、安全与隐私承诺 (Zero-Leakage)
- 六、回滚与卸载指南
- 七、开源协议
一、支持平台与系统要求
| 操作系统 | 支持级别 | 守护进程调度器 | 凭证存储路径 |
|---|---|---|---|
| macOS | 原生完整支持 (Apple Silicon / Intel) | launchd (~/Library/LaunchAgents) |
~/Library/Application Support/CodeBuddyExtension/... |
| Linux | 原生完整支持 (主流桌面与服务器发行版) | systemd --user (降级至 crontab) |
~/.config/CodeBuddyExtension/... (遵循 XDG 规范) |
| Windows | 原生完整支持 (Windows 10 / 11) | Windows 任务计划程序 (schtasks / pythonw) |
%APPDATA%\CodeBuddyExtension\... |
- 依赖要求:
- Python 3.8+(系统自带、Python 官网或包管理器安装均可,零第三方 pip 依赖,纯 Python 标准库编写)
- 已安装并登录过至少一个账号的 WorkBuddy 客户端(macOS
WorkBuddy.app/ WindowsWorkBuddy.exe/ Linuxworkbuddy)
二、架构与底层逆向原理解析
1. 工作区与会话“假丢失”根因剖析
WorkBuddy 客户端基于 Electron 架构开发,其本地状态核心保存在 SQLite 数据库中:~/.workbuddy/workbuddy.db
在逆向客户端主进程及后端 RPC (server.js) 源码时发现,其查询会话历史的 SQL 过滤条件如下:
SELECT * FROM sessions
WHERE (user_id = :currentUserId OR user_id IS NULL OR user_id = '')
AND deleted_at IS NULL;
而工作区列表(Workspaces)是根据如下联合逻辑动态生成的:
SELECT * FROM workspaces
WHERE EXISTS (
SELECT 1 FROM sessions
WHERE sessions.cwd = workspaces.path
AND (sessions.user_id = :currentUserId OR sessions.user_id IS NULL OR sessions.user_id = '')
);
结论:
当用户从账号 A 切换到账号 B 时,由于历史会话记录中的 sessions.user_id 硬编码为了账号 A 的 UID,导致账号 B 的查询被 user_id = :currentUserId 拦截,结果为空集;进而由于无法关联到活跃会话,左侧工作区树随之折叠隐藏。实际上物理文件和数据库记录从未丢失,纯粹是被应用层基于 UID 的过滤条件遮蔽。
2. SQLite 触发器穿透与全域共享机制
既然官方过滤逻辑明确包含 OR user_id = '',我们便无需劫持二进制文件或修改前端 JS 代码,只需在本地数据库建立两枚原子级 SQLite 触发器:
-- 触发器 1: 新建会话时,自动将 user_id 规范为空字符串
CREATE TRIGGER IF NOT EXISTS trg_sessions_force_shared_insert
AFTER INSERT ON sessions
BEGIN
UPDATE sessions SET user_id = '' WHERE id = NEW.id;
END;
-- 触发器 2: 会话被更新或重赋值 UID 时,自动强制重置为空
CREATE TRIGGER IF NOT EXISTS trg_sessions_force_shared_update
AFTER UPDATE OF user_id ON sessions
WHEN NEW.user_id != '' AND NEW.user_id IS NOT NULL
BEGIN
UPDATE sessions SET user_id = '' WHERE id = NEW.id;
END;
技术优势:
- 零 CPU/内存占用:触发器由 SQLite 引擎在事务内毫秒级触发,无需任何常驻进程轮询。
- 高韧性:只要 SQLite 数据库未被完全重建,触发器将持续生效。
- 平滑回滚:仅需
DROP TRIGGER即可恢复官方的数据隔离策略。
3. 账号快速轮换与双向 Token 同步
(1) 凭证存储机制
WorkBuddy 的当前登录凭证以 JSON 格式存储在如下路径:~/Library/Application Support/CodeBuddyExtension/Data/Public/auth/workbuddy-desktop.info
包含字段:
account.uid: 用户全局唯一标识account.nickname: 用户昵称auth.accessToken: 访问令牌(通常有效期 30 天,5.6+ 可能为$wbEncrypted加密信封)auth.refreshToken: 刷新令牌(通常有效期 60 天)auth.expiresAt: 毫秒级过期时间戳
客户端通过 FileAuthenticationStorage 的 fs.watch 实时监听该文件。
(2) 双向 Token 回存机制 (Sync-before-Switch)
客户端运行期间会自动在后台刷新临期 Token。如果简单粗暴地用旧文件覆盖,可能会丢失刷新后的最新凭证。因此切换器设计了严格的 双向回存协议:
- 写前同步:读取当前在线的
workbuddy-desktop.info,将其最新 Token 同步回存到对应的~/.workbuddy/auth_profiles/<name>.info。 - 原子切换:通过临时文件
workbuddy-desktop.info.tmp+os.replace原子写入目标账号凭证,并清理登出标记文件。 - 属主同步:更新
automations表中的常驻自动化任务属主,防止任务在切换账号后失效。 - 优雅重启:通过 AppleScript 发送标准退出指令,确认关闭后再重新唤起客户端加载新身份。
4. 🔥 核心攻坚:WorkBuddy 5.6+ 本地加密凭据逆向与安全兼容层
在 WorkBuddy 5.6.x 大版本更新中,官方对其桌面客户端本地持久化的认证凭据实施了重大架构重构,这也成为了本项目有史以来最重要的一次底层技术攻坚。
(1) 逆向背景:$wbEncrypted 加密信封结构剖析
在 5.5.x 及更早版本中,用户登录态保存在 workbuddy-desktop.info 中,关键字段(如 accessToken、refreshToken 和 nickname)均为标准的明文字符串。
然而自 5.6.0 起,官方客户端引入了基于 AES-GCM 的敏感字段信封加密规范。打开该 JSON 文件,所有核心认证字段全部被替换为了结构化的字典对象:
{
"auth": {
"accessToken": {
"$wbEncrypted": {
"suite": 1,
"keyId": "0123456789abcdef",
"nonce": "mY6VvXf84s/n59iA",
"authTag": "fP9/w2c9p0K3x...",
"ciphertext": "8xA4L+90Vb..."
}
},
"refreshToken": {
"$wbEncrypted": { "suite": 1, ... }
}
},
"account": {
"nickname": {
"$wbEncrypted": { "suite": 1, ... }
},
"uin": "10001",
"uid": "wb_user_9876543210"
}
}
为什么这会导致所有第三方脚本与旧版工具全线崩溃?
- 展示与排序层异常中断:旧版代码中大量假设
nickname为字符串,频繁执行nickname.lower()或字符串拼接。遇到新版结构化字典时,直接抛出致命崩溃:AttributeError: 'dict' object has no attribute 'lower'。 - 鉴权头被非法字典污染:原有 API 调用逻辑直接将
auth.accessToken拼装到 HTTP 请求头Authorization: Bearer <token>。由于token变成了字典,发出的请求头变成了畸形的Bearer {'$wbEncrypted': ...},直接被腾讯云网关拒绝并导致 401 鉴权失败。
(2) 攻坚过程:发现客户端内置原生 Node 绑定扩展
面对官方客户端的突然升级,如果采用传统的脆弱解法(如逆向分析二进制寻找硬编码密钥、或者通过动态 Hook 注入进程内存),不仅开发与维护成本极高,而且一旦官方客户端发生次级小版本更新就会立即失效,对用户极不负责。
我们深入审计了 WorkBuddy 客户端的物理安装包(macOS /Applications/WorkBuddy.app 与 Windows 安装目录)及底层的 Electron 37.x 运行时,经过细致的符号表与主进程 RPC 逆向,发现了核心破局点:
WorkBuddy 官方在其桌面端底层预编译并内嵌了一个 C++ 原生扩展绑定:
// WorkBuddy 客户端底层原生存储与加解密绑定
const binding = process._linkedBinding('electron_browser_workbuddy_storage');
const storageLogger = binding.loggerGet();
该模块与桌面端的安全密钥环(Keyring)深度结合,并向外暴露了原生加解密接口。
更为关键的是,由于 WorkBuddy 是标准的 Electron 应用,它天生支持官方的 ELECTRON_RUN_AS_NODE=1 环境变量!
这意味着:我们无需修改任何官方二进制文件、无需安装第三方编译工具,直接借助用户本机已有的官方 WorkBuddy 可执行文件本身,就能以完全受控的 Node.js 管道模式唤起该底层扩展,以纯原生、无侵入、极高速度(~48ms)完成瞬态求值!
(3) 架构设计原则:DO NOT DECRYPT FOR STORAGE(透传不落地)
在实现兼容层时,我们制定了严苛的安全边界铁律:
- 磁盘凭据 100% 保持官方原生加密形态(Opaque Blob Passthrough):
- 当用户执行
workbuddy save归档账号 Profile、执行workbuddy switch切换身份、或在切号前自动回写 Token 时,Toolkit 严格将$wbEncrypted信封视为不透明对象进行原子读写。 - 坚决不把解密后的明文凭证持久化到磁盘!保持与当前已验证 WorkBuddy 凭据格式同构,避免 Toolkit 主动把加密凭据降级为明文;未来客户端若轮换字段密钥或改变存储协议,历史 Profile 仍可能出现 KEY_MISMATCH,并按 Fail-Closed 处理。
- 当用户执行
- 纯内存管道瞬态解密与安全生命周期保证:
- 仅在需要向腾讯官方发起签到或终端对话网络请求的前一瞬间,通过管道调用本地 WorkBuddy 运行时获取临时 Token。
- 实际实现与安全边界保证:
- plaintext credential 不主动持久化
- 不写 auth profile
- 不写临时文件
- 不写日志
- 不主动打印
- 仅在当前进程/子进程内瞬态使用
- 物理内存擦除边界说明:Node.js 解密助手中的底层 JS Buffer(如密钥与解密原始 bytes)在完成使用后会调用
.fill(0)尽力擦除底层缓冲区;但须明确:上层 JavaScript 字符串、JSON 序列化传输管道以及 Python 运行时中的bytes/str对象,受高级语言不可变对象特性与垃圾回收机制约束,技术上无法保证立即物理 zeroization。工具通过绝不落盘、绝不打印、绝不写日志与严格 Fail-Closed 原则确保凭据安全闭环。
(4) 稳健性保障:昵称字典防御降级链与 Fail-Closed 阻断机制
- 5 级安全防守回退链(Safe Nickname Fallback):
针对account.nickname也被加密的情况,我们重构了全量展示层与 Profile 匹配逻辑,实现了严格的类型防守链:
这确保了传给后续业务逻辑的昵称绝对是安全、合法的[account.nickname] │ ├─► 1. 已经是干净的纯文本 str ──► 直接使用 ├─► 2. 属于加密信封 $wbEncrypted ──► 尝试内存瞬态解密 ├─► 3. 解密不可用/失败 ──► 安全降级取纯数字 account.uin ├─► 4. uin 不存在 ──► 安全降级取 account.uid 前 8 位 (如 "wb_user_") └─► 5. 兜底回退 ──► 使用 Profile 文件别名或 "未知用户"str,彻底杜绝了任何.lower()崩溃问题。 - 绝对 Fail-Closed 阻断策略:
在网络请求发起前,由is_valid_token_string()强行校验 Token。若遇到加密信封但本机未找到 WorkBuddy 运行时、或凭据已损坏,Toolkit 坚决不向腾讯云服务器发送任何网络请求,立即就地阻断并输出明确的修复指引,杜绝因发送畸形请求破坏账号信誉或触发服务端风控。
(5) 物理取证与测试验证:本地实测 + 跨平台 CI 矩阵 + 平台真实可用度
我们坚信「拿物理证据说话」,对本版本进行了立体式的严密测试验证:
- 真实物理机实测取证(Local Smoke Test):
- 测试环境:macOS 15.x (Apple Silicon) 真实物理开发机。
- 目标客户端:官方正式版 WorkBuddy 5.6+(内置 Electron 37.10.3)。
- 物理证据:通过管道调用本地原生绑定,执行耗时仅 48ms,内存占用近乎为零,成功完成加密字段解析并完成静默打卡与连续对话。
- 全覆盖自动化测试套件(88/88 100% Passed):
构建了针对凭据解密安全、沙盒治理与进程锁、模型容灾轮换、动态资产透视、日志物理看门狗与双向安装器的 6 大测试模块矩阵(macOS / Linux / Windows 跨平台):- 核心凭据与多账号管理 (
tests/test_toolkit.py, 56 项):T1-T4: 明文兼容、$wbEncrypted加密信封识别、损坏信封 Fail-Closed、缺失运行时零网络请求;T5-T9: 字典 Token 头过滤、加密昵称降级防崩溃、Profile 切换与双向同步加密透传;T10-T17: 遗留兼容、Doctor 矩阵断言、零敏感信息泄露、ASCII Bearer 校验、Unicode 昵称防护、Token 验证严格性;T18-T32: 终端 QR 生成、Token 临期刷新健康度巡检、别名冲突自动消解三级策略、单据双向回写;T33-T48,T53: 跨平台桌面通知、Audit 守护进程自愈与异常防护、JSON 状态透视、网络代理回退。
- 沙盒自愈、进程锁与 IPC 防护 (
tests/test_sandbox_guard.py, 15 项):- P0 跨进程 Single-Flight 内核文件锁:
fcntl.flock/msvcrt.locking排他互斥与锁内回读防撕裂断言; - P0 全链路 Monotonic Deadline:UDS 建立连接、发送、分片接收统一超时与 4MB 硬熔断 Fail-Open 断言;
- P0 子进程 FD 隔离与 Core Dump 禁用:
close_fds=True与RLIMIT_CORE=0防止泄露敏感内存; - 沙盒会话与 Shell 快照清理:活跃句柄感知过滤、保护 session.json、多行 JSON 跨帧解析;
- 孤儿守护清理安全边界:防止误杀活跃用户进程、Doctor Check 5 规则健康审计与上游变异自适应。
- P0 跨进程 Single-Flight 内核文件锁:
- 容灾降级轮换网关 (
tests/test_failover_router.py, 7 项):- 限流故障转移、熔断旁路冷却、首字超时 (First-Token Timeout) 阶梯降级、全部耗尽 503 优雅回退、流式中断防重复 Header。
- 模型全景透视与动态排序 (
tests/test_model_inventory.py, 7 项):- 动态模型发现、倍率智能解析、虚拟模型路由注册、热重载与动态缓存淘汰。
- 跨平台日志看门狗 (
tests/test_log_guard.py, 2 项):- POSIX 与 Windows 原生文件句柄被占用检测、锁定文件安全 Truncate 防冲突。
- 端到端安装与卸载验证 (
tests/test_installers.py, 1 项):- 安装器与卸载器双向全周期覆盖,100% 物理零残留校验。
- 本地物理执行结果:
88 passed in 19.28s (100% Passed)。
- 核心凭据与多账号管理 (
- GitHub Actions 跨平台 CI 矩阵全绿验证:
- 构建状态:Run ID: 35997775560
- 矩阵覆盖:涵盖 macOS / Ubuntu / Windows 三大操作系统 × Python 3.9 / 3.11 / 3.12 共 9 个测试环境组合,外加 1 项 Zero-Leak 安全审计,10 / 10 任务全部 SUCCESS 绿色通过!
- 各操作系统平台真实可用度一览:
- macOS:REAL VERIFIED (真实物理验证)。原生适配默认安装路径
/Applications/WorkBuddy.app/Contents/MacOS/Electron,开箱即用。 - Windows:IMPLEMENTED & CI VERIFIED (代码实现并经 CI 验证)。原生适配默认安装路径
%LOCALAPPDATA%\Programs\WorkBuddy\WorkBuddy.exe,支持通过WORKBUDDY_EXE自定义路径,CI 3 平台版本全绿。 - Linux:DETECT & FAIL CLOSED (保护阻断)。因腾讯官方目前暂未推出 Linux 桌面客户端,旧版明文凭证 100% 兼容;若遇到加密凭证,Toolkit 将自动执行 Fail-Closed 安全拦截并提示配置自定义运行时。
- macOS:REAL VERIFIED (真实物理验证)。原生适配默认安装路径
(6) 智能诊断体系:wb-doctor 全方位自检
全新内建诊断子命令:
workbuddy doctor # 或简写 wb-doctor
一键扫描并直观呈现整条调用链的健康状态:
=== WorkBuddy Toolkit Doctor ===
Auth file : OK (~/.workbuddy/auth/workbuddy-desktop.info)
Credential format : encrypted
Encrypted scheme : detected (sym-v1 / suite 1)
WorkBuddy runtime : FOUND (/Applications/WorkBuddy.app/Contents/MacOS/Electron)
Credential resolver : AVAILABLE (Electron 37.10.3)
Profile count : 2
API capability : READY
RESULT: COMPATIBLE
5. 每日签到协议逆向与幂等领取架构
通过对 app.asar 内通信层及运行时日志分析,我们还原了 WorkBuddy 签到活动的底层通信协议:
[客户端] [腾讯云 Copilot 后端]
| |
|--- 1. POST /v2/billing/meter/checkin-activity-status -->|
|<-- 2. {"today_checked_in": true/false, ...} -------| (只读探测)
| |
| [若 today_checked_in == false] |
|--- 3. POST /v2/billing/meter/daily-checkin -------->| (执行领取)
|<-- 4. {"code": 0, "credit": 100, ...} ------------|
(1) 请求参数最小集
POST /v2/billing/meter/checkin-activity-status HTTP/1.1
Host: copilot.tencent.com
Authorization: Bearer <accessToken>
X-User-Id: <account_uid>
Content-Type: application/json
User-Agent: WorkBuddy/5.5.3
{}
(2) 关键逆向发现
- 无需 TuringShield 签名校验:客户端内部虽然引入了
TuringShield.bundle设备指纹,但服务端的签到与查询接口完全遵循标准 OAuth 鉴权,未强制校验X-Device-Token。直接发送标准 Bearer Token 请求即可合法返回。 - 严格两段式幂等保证:先通过只读接口获取当前签到状态与连续天数;若已签到则直接跳过,绝不滥发重复请求,彻底规避风控风险。
6. 每日连续对话协议逆向与模型倍率智能梯队
WorkBuddy 体系设有每日连续对话打卡奖励(连续天数可累积连击特权与积分商城兑换资格)。然而官方桌面端必须启动完整的 Electron 渲染窗口并在 UI 中手动键入对话,内存占用大且无法自动化。
项目通过对底层通信层的逆向,攻破了终端免 UI 原生对话的关键通道:
(1) 通信协议与 SSE 流式要求
- 接口端点:
https://copilot.tencent.com/v2/chat/completions(遵循 OpenAI 兼容规范)。 - SSE 流式硬性约束:后端网关拒绝非流式请求(返回
400 Non-stream chat request is currently not supported),必须配置"stream": true并使用Accept: text/event-stream请求头。 - 纯标准库流式解析器:通过 Python 原生
urllib.request实现轻量级 SSE 逐行 chunk 解析,零额外外部依赖。
(2) 智能倍率与免费模型优先调度策略
为了在达成每日连续对话任务的同时彻底杜绝积分浪费,工具箱设计了智能倍率梯队:
- 第一梯队 (
hy3):混元 3.0 大模型,当前官方处于限时免费 / 极低折扣期,优先作为默认主力; - 第二梯队 (
deepseek-v4-flash):超轻量 Flash 模型,极速响应且倍率极低; - 第三梯队 (
auto/glm-5v-turbo):官方智能路由与低消耗 Turbo 兜底。
遇到特定模型暂时不可用时,系统自动向下无缝容灾回退(Fallback),并在完成打卡后输出简明的回复摘要(如 [每日对话] 模型: hy3 (低倍率/免费) -> 回复: "你好" ✔)。
7. 三端原生后台定时调度与自适应探测
为了让每日签到做到真正的“零打扰、免记挂”,项目原生实现了三大主流操作系统的后台定时守护体系,并支持 AI Agent 运行时的自适应能力探测 (Capability Probing):
┌─────────────────────────────────────────────────────────────────┐
│ Agent 自适应能力探测 (Schedule Probing) │
└──────────────┬───────────────────────────────────┬──────────────┘
▼ ▼
[具备 schedule 工具] [无内置 schedule 工具]
│ │
▼ ▼
自动注册 Agent 内置定时任务 用户自由二选一方案:
(每日 09:00 自动唤醒对话并汇报战报) ① 采用系统原生后台守护进程静默打卡
② 无需定时打卡,随时手动输入 wb-checkin
- AI Agent 内置调度层(推荐):
对于具备内置schedule工具的 Agent(如 Antigravity、WorkBuddy 等),可在会话中注册常驻 cron(0 9 * * *),每天早晨自动唤醒、拉起签到,并在对话窗口中向用户发送美观的收益战报。 - 操作系统原生守护层 (Zero-Touch 后台静默):
- macOS (
launchd):~/Library/LaunchAgents/com.workbuddy.dailycheckin.plist,开机自启、盒盖休眠唤醒补跑。 - Linux (
systemd --user):~/.config/systemd/user/workbuddy-dailycheckin.timer,开机自启且支持Persistent=true唤醒补跑;无 systemd 环境自动降级至用户crontab。 - Windows (任务计划程序
schtasks):注册WorkBuddyDailyCheckin(每天 09:00) 与WorkBuddyLogGuard(每 30 分钟) 计划任务,调用 Windows 内置pythonw.exe静默后台运行,绝无黑色 CMD 弹窗干扰。
- macOS (
- 手动模式:
若用户不希望后台常驻任何定时任务,只需执行wb-checkin即可在 0.5 秒内完成手工打卡。
8. 容灾轮换路由网关架构 (Failover Router :8047)
在日常多 Agent 并发开发中,官方 API 端点偶尔会因并发瞬态限流(429 Too Many Requests)或上游服务抖动(502 Bad Gateway / 503 Service Unavailable)导致任务直接报错中断。为此,Toolkit 引入了轻量级透明容灾轮换路由网关 (wb-router):
[本地 IDE / Agent]
│
▼ (请求 127.0.0.1:8047)
┌────────────────────────────────────────────────────────┐
│ WorkBuddy Failover Router (ThreadedHTTPServer) │
│ SO_REUSEADDR 端口就绪 / 自动拦截 429/500/502/503 │
└──────────────┬─────────────────────────┬───────────────┘
│ (正常) │ (上游故障触发 Fallback)
▼ ▼
[首选主力模型] [自动容灾回退梯队]
deepseek-v4-flash / hy3 (混元 3.0 / 限免或极低消耗)
space-bunny-free (免额度) glm-5v-turbo (低倍率兜底)
- 底层高韧性机制:基于原生多线程
ThreadedHTTPServer,开启SO_REUSEADDR消除快速重启时的TIME_WAIT绑定冲突; - 主力模型零感自愈:主控配置首选免额度或极低倍率模型(如 DeepSeek、Space Bunny),当遇到网络闪断或限流时,网关在内存层毫秒级无感降级至下一梯队(如
hy3),上层客户端无需任何重试或感知; - 子智能体差异化路由:支持针对特定子任务类型(代码编写、审计、常规对话)自动路由至最适配的模型,杜绝昂贵倍率消耗。
9. 模型全景资产透视与倍率审计 (Model Inventory)
WorkBuddy 官方界面通常弱化或隐藏各模型的实际积分扣减倍率与最新状态。通过逆向其模型目录接口与会话历史,工具箱提供了 wb-models 全景透视功能:
- 动态全量资产抓取:实时拉取官方开放的全部可用模型(含限免、折算倍率、输入输出上下文长度);
- 倍率与成本透视:直观展示
x0.00(完全免费)、x0.50、x1.00等计费阶梯,辅助开发者以极致成本效益组合模型; - 交互式轻量终端选择器 (TUI):支持在纯终端中方向键浏览与切换,无需启动庞大 Electron 窗口。
10. 🔥 沙盒日志暴走根因与无感物理看门狗治理 (Log Guardian)
(1) 沙盒日志吃满磁盘的底层根因
WorkBuddy 的 sandbox-core 组件负责管理每个独立沙盒进程与交互式终端(PTY)。为了满足审计合规与沙盒拦截追踪,底层会对进程每一次命令执行、标准输入输出(PTY 字节流)以及动态决策进行全量落盘(保存在 ~/.workbuddy/logs/sandbox/YYYYMMDD/sandbox_<pid>_<idx>.log)。
虽然单文件按 13MB 自动滚动,但官方完全未设计任何 TTL 淘汰策略或总量配额上限!
在多 Agent 高频编码、编译或跑自动化测试的场景下:
- 单日产生的日志量即可高达 5 ~ 7 GB;
- 运行 3~4 天即可堆积 15 GB 以上的纯垃圾日志,直接将本就不宽裕的系统盘彻底吞干!
(2) 四重物理防御网 (workbuddy-log-guard)
为了实现极致克制与绝对自愈,项目设计了高内聚的守护进程组件:
┌──────────────────────────────────────────────────────────────────┐
│ WorkBuddy Log Guardian (四重物理防御网) │
├──────────────────────────────────────────────────────────────────┤
│ 1. Open-FD 感知 : lsof 识别活跃句柄,对被持有着只 truncate 不 delete │
│ 2. 36小时 TTL : 自动物理淘汰超过 36h (-mmin +2160) 的历史日志 │
│ 3. 2GB 容量硬顶 : 目录总量突破 2GB 时,按 stat 时间强制修剪至 1.5GB │
│ 4. 30MB 单文件熔断: 异常单文件超 30MB 自动 truncate -s 0 即刻释放 APFS│
└──────────────────────────────────────────────────────────────────┘
- Open-FD 句柄安全感知 (Zero Disruption):通过
lsof -F n +D递归探测所有正在被sandbox-core读写的日志文件。对被进程持有打开的文件只执行truncate -s 0,坚决不 unlink 删除,杜绝“文件被删但 APFS 物理块被进程死锁无法释放”的陷阱; - 36 小时精细化 TTL 淘汰:自动清除 36 小时(2160 分钟)前的所有历史沙盒日志,今日目录(
YYYYMMDD)永久保护,绝不误触当前正在运行的会话; - 2 GB 目录容量硬顶截断 (Hard Cap):即便 36 小时内因为高频并发跑测试导致日志激增,只要目录总量超过 2GB,立即按
mtime从最旧的文件开始淘汰,强行将水位拉回 1.5GB,物理层面彻底封死打满磁盘的可能性; - 单文件 30MB 物理熔断:单文件异常暴走超过 30MB 时瞬间清零,零损耗释放磁盘块。
(3) 极简无感运行
macOS 下由原生 LaunchAgent (com.workbuddy.log-guard.plist) 每 30 分钟静默触发一次,执行耗时 < 20ms,平时无事件时线程在内核中纯休眠,CPU 占用保持在绝对 0.0%。
11. 独立免登扫码录入机制逆向与终端二维码渲染 (Decoupled QR Login)
(1) 免客户端界面的扫码登录全流程逆向
传统上,添加一个新账号必须经历繁琐步骤:打开图形界面客户端 -> 退出当前账号 -> 掏出微信扫码 -> 确认登录 -> 再用 toolkit 保存。这一过程不仅容易发生新凭据覆盖旧活跃账号导致旧 Token 丢失,而且在无图形界面(Headless)或纯终端开发时完全无法操作。
通过深度逆向 WorkBuddy 登录通信流,我们还原了官方免密扫码认证的全生命周期:
- 握手初始化:向腾讯官方认证网关发起鉴权请求,获取唯一
state会话令牌与二维码短链授权 URL(形如https://www.workbuddy.cn/login?platform=workbuddy&state=...); - 终端原生高清 QR 渲染:利用纯 Python 标准库内置实现的 QR Code 生成算法(Reed-Solomon 纠错与多项式除法),以 ANSI 双半块点阵字符
▀(Upper half block)渲染至终端控制台,手机微信直接对准终端屏幕即可扫码授权; - 幂等长轮询监听:以 2 秒间隔安全轮询登录状态端点,识别
WAITING(待扫码)、SCANNED(已扫码未确认)与SUCCESS(授权成功)状态; - 原生凭据捕获与持久化:在获得认证授权码后,直接提取返回的完整认证凭据字典(包含加密信封与用户信息),安全沉淀至
~/.workbuddy/auth_profiles/<别名>.info。
(2) 智能别名冲突自愈与在位平滑更新 (Alias Conflict Self-Healing)
录入账号时,用户常常面临别名命名的困扰。系统设计了三态智能自愈策略:
- 同 UID 在位平滑更新 (In-place update):若输入的别名已存在,但其绑定的 UID 与本次扫码登录账号完全一致,系统自动判定为“同账号凭据在位刷新”,直接覆盖更新该 Profile,无需人工确认;
- 异 UID 智能自增规避 (Auto Increment):若输入的别名已存在且属于不同账号(异 UID):
- 在非交互或自动脚本环境下,系统自动追加递增后缀(如
work已被其他 UID 占用,则自动重命名并保存为work_1、work_2),绝对防止误覆盖已有重要账号; - 在交互终端下,友好提示冲突并询问用户是覆盖还是使用推荐自增别名;
- 在非交互或自动脚本环境下,系统自动追加递增后缀(如
--force覆盖开关:支持在命令行显式传入--force/--overwrite,跳过任何提示强行用当前新登录态覆盖指定别名。
12. 账号状态多维呈现与程序化 JSON 架构 (Status & Inventory Architecture)
为了满足开发者对本机登录账号状态的全面感知以及自动化运维工具的集成需求,系统构建了多维度的状态透视体系:
- 当前生效活跃凭据透视:
- 活跃账号昵称与匹配的 Profile 别名;
- 账号全局唯一 UID;
- 凭证物理存储加密套件(
sym-v1原生加密信封 /plaintext遗留明文); - Token 与 Refresh Token 双重过期时间戳;
- 凭据健康状态诊断(
✔ 正常/🔄 已自愈续期/✖ 已失效)。
- 已保存账号库全景清单:
- 当前正在生效的活跃账号高亮标记
[当前活动]; - 每个 Profile 的别名、昵称、脱敏 UID(前 8 位)、加解密类型、健康度与到期时间。
- 当前正在生效的活跃账号高亮标记
- 程序化 JSON 模式 (
--json):- 传入
--json/-j参数时,终端以标准 JSON 结构输出完整状态; - 严格遵循 Zero-Leakage 隐私安全边界:输出中绝对剔除
accessToken、refreshToken敏感凭据内容; - 字段规范清晰(包含
active_account、profiles列表、total_profiles、platform),便于 Shell 管道、Python 自动化脚本、Prometheus 或监控平台直接解析。
- 传入
13. 账号健康度定时巡检与双端原生桌面通知 (Health Audit & Desktop Notification)
长期使用多账号时,部分副号可能在长达数周未切换的情况下面临 Refresh Token 即将过期的风险。workbuddy audit 为此提供了防风控的周期性巡检与原生桌面通知方案:
- 严格防风控三级审计逻辑:
- 时间戳粗筛(零网络请求):若账号 accessToken 剩余有效期大于 10 分钟,直接视为健康,绝对不发起网络请求;
- 本地 30 分钟节流缓存:30 分钟内已审计过的账号直接复用本地缓存状态,避免频繁网络探测;
- 临期受控刷新(静默自愈):当 accessToken 已过期但 refreshToken 尚有效时,发起单次受控静默刷新,并将新 Token 自动写回本地 Profile;若 refreshToken 亦已失效,则准确标记为
EXPIRED。
- macOS 与 Windows 双端原生桌面通知机制:
- macOS:优先使用 AppleScript 原生系统通知机制调用通知中心弹窗(
display notification ... with title ...),支持terminal-notifier降级,无需安装任何额外第三方软件; - Windows:两级防御架构。优先尝试调用 PowerShell WinRT / BurntToast 现代 Toast 气泡通知;若系统权限受限或环境未开启 WinRT,自动平滑降级调用 .NET 内置
System.Windows.Forms.NotifyIcon托盘气泡提示,保证 Windows 10/11 双平台均能 100% 弹出通知。
- macOS:优先使用 AppleScript 原生系统通知机制调用通知中心弹窗(
14. 远端 CI 跨机双端健康监控与零配置邮件告警 (Dual-Runner CI Monitor)
在多机协同或 CI/CD 流水线中,开发者通常在远端 Windows 或 macOS Runner 上部署了自动化任务。为了及时掌握远端凭据健康度,仓库内置了 .github/workflows/workbuddy-monitor.yml 双端监控流水线:
- 双矩阵跨平台巡检 (Dual-Runner Matrix):
- 包含
macos-latest与windows-latest两个独立并发 Runner; - 每日定时通过 cron 唤醒,运行
scripts/compat_monitor.py严格校验本地解密兼容性与账号健康状态。
- 包含
- 零配置 GitHub 原生邮件告警机制:
- 传统告警方案往往需要开发者配置 SMTP 邮箱密码或申请钉钉/飞书 Webhook 机器人,配置繁琐且极易泄露秘钥。
- 本项目巧妙利用 GitHub Actions 的原生失败通知机制:当且仅当远端凭据失效或环境异常时,测试脚本退出码为 1 触发 Job Failure,GitHub 官方基础设施会在 10 秒内自动向仓库所有者发送原生告警邮件!真正做到“零配置、免维护、毫秒级触达”。
15. 🔥 深度踩坑记录与底层逆向突破全景 ("问题→原因→解决")
在本项目从 v0.1.0 到 v0.6.0 的持续演进中,我们记录并攻克了多个系统底层、加解密协议与跨平台工程踩坑:
踩坑 1:终端打印二维码在不同终端行高字体拉伸变形导致扫码失败
- 问题:在某些终端(如 iTerm2、VS Code 内置终端、Windows CMD)中运行免登扫码时,终端虽然打印出了字符点阵,但手机微信扫描完全没有反应,无法识别。
- 原因:常见等宽字体的单字符宽高比约为 1:2(高是宽的两倍)。如果直接以一个全角空格或实心方块作为 1 个点阵像素,会导致整个二维码在垂直方向被严重拉伸成细长矩形;此外,部分精简终端不支持 24-bit TrueColor ANSI 颜色转义符。
- 解决:采用双半块字符
▀(Unicode U+2580 Upper Half Block)结合 ANSI 前景与背景色控制:一个字符单元在纵向上同时表示两个竖向像素(上像素与下像素)。通过数学矩阵行两两分组,精确将 2 个垂直点阵压缩进 1 个字符空间,使终端打印出的二维码长宽比严格回归物理 1:1 正方形;同时加入白边 Quiet Zone 保护,微信扫码识别率提升至 100%。
踩坑 2:多账号录入时别名重名引发旧账号被无声覆盖
- 问题:用户登录新账号并执行
workbuddy save work或workbuddy login work时,如果以前已经保存过一个同名别名,旧账号凭据会被无脑覆盖且不可逆丢失。 - 原因:旧版逻辑简单将别名与文件名一一对应(
<alias>.info),缺乏基于账号底层主体身份(UID)的碰撞检测与冲突消解策略。 - 解决:在底层构建
resolve_profile_alias_conflict决策引擎。先读取已有文件的 UID:若与当前账号 UID 相同,判定为合法的“在位平滑刷新(In-place update)”;若为异 UID 账号且未显式指定--force,在非交互环境下自动按数字递增编号(如work_1、work_2)安全落盘,彻底杜绝数据覆盖。
踩坑 3:GitHub Actions YAML 中在 if: 条件直接引用 secrets.* 导致工作流解析崩溃
- 问题:在编写跨平台 CI 监控工作流时,尝试使用
if: ${{ secrets.MY_TOKEN != '' }}来判断是否配置了账号凭证,提交后 GitHub Actions 直接拒绝执行并报错:Context access forbidden: secrets。 - 原因:GitHub Actions 安全规范明确规定:为了防止表达式求值阶段凭据泄露,禁止在 step 或 job 级别的
if:条件表达式中直接访问secrets上下文。 - 解决:采用安全映射间接接缝:在 job 或 step 的
env:块中将 secret 映射为普通环境变量(如env: HAS_SECRET: ${{ secrets.MY_TOKEN }}),然后在if:条件中使用if: env.HAS_SECRET != ''进行安全判断。并在测试套件中新增 T42 静态 AST 测试,防止未来误写。
踩坑 4:Windows 桌面通知在不同 Windows 10/11 精简版本下的兼容性失效
- 问题:在部分精简版 Windows 10 或 Windows Server 环境下,执行桌面通知命令后控制台无报错,但屏幕右下角未弹出任何 Toast 气泡。
- 原因:Windows 现代 WinRT API 需要宿主具备有效的 AppUserModelId,且某些系统未安装或禁用了现代通知中心服务。
- 解决:在
notify_desktop中实现双层降级调用栈:优先通过 PowerShell 构建 WinRT Toast 通知;捕获异常或超时时,平滑降级调用 .NET Framework 自带的System.Windows.Forms.NotifyIcon,在系统托盘直接显示标准气泡通知,实现 Windows 全版本 100% 必达。
踩坑 5:WorkBuddy 5.6+ 引入 $wbEncrypted 结构导致全网第三方脚本崩溃
- 问题:WorkBuddy 升级至 5.6.0 后,所有原有切换账号、签到脚本抛出
AttributeError: 'dict' object has no attribute 'lower'或 HTTP 401 鉴权拒绝。 - 原因:官方引入 AES-GCM 信封加密,将 JSON 中原有的明文字符串替换为包含
suite、nonce、authTag、ciphertext的嵌套字典。 - 解决:逆向定位并调用客户端内置的
electron_browser_workbuddy_storage原生绑定,利用ELECTRON_RUN_AS_NODE=1管道在内存中进行 48ms 瞬态解密,并确立“透传不落地”原则,磁盘 100% 保留加密形态。
踩坑 6:sandbox-core PTY 日志无淘汰机制堆积吞噬 15GB+ 磁盘
- 问题:运行 3~4 天后发现系统盘急剧减少 10GB 以上,排查发现
~/.workbuddy/logs/sandbox/下存在数千个无淘汰机制的 PTY 输出日志。 - 原因:官方虽然设置了 13MB 单文件滚动,但未设计生命周期(TTL)管理与目录总容量限制。
- 解决:研发
workbuddy-log-guard四重物理看门狗:lsof句柄感知保护被持有着不被删除(仅截断)、36h TTL 淘汰过期历史、2GB 目录总量硬顶截断与 30MB 单文件物理熔断。
16. 🔥 生产事故深水排查与白盒物理凭证库:Seatbelt 1.7 万行规则雪崩、PTY 5s 延迟与四大“草台班子”工程缺陷
权威凭证专区:我们在
docs/incidents/建立了完整的白盒物理取证库。拒绝模糊推诿、拒绝空洞脑补,拿 macOS 内核sample调用堆栈、反编译符号(nm -C)、真实物理文件计数(32 万+)与毫秒级基准测试说话!
📌 生产事故导航与证据矩阵
| 事故编号 | 故障等级 | 事故名称与核心现象 | 涉案代码组件与符号定位 | 核心根因与白盒证据摘要 | 官方 PR 补丁与 Toolkit 治理方案 | 深度物理取证报告 |
|---|---|---|---|---|---|---|
| 01 | P0 |
沙盒 PTY 日志无底洞与 32 万快照文件瘫痪系统 I/O 运行 3~4 天系统盘缩减 15GB+,整机卡顿 |
sandbox-cli-gc (gc_runner.rs, SessionIndex)sandbox_core::pipe_utilsno-orphans.cjs (L24) |
PTY 日志零 TTL 累积 14.8GB;321,489 个快照小文件;sandbox-cli-gc RSS 达 471MB 遍历打满 IOPS |
官方 Patch:流式滑动窗口 GC + PTY 滚动容量硬顶 + POSIX 孤儿进程清理 Toolkit: workbuddy-log-guard 四重物理看门狗 + wb-sandbox clean |
📄 事故一完整报告 |
| 02 | P1 |
多 Agent 并发构建缺乏全局编译缓存诱发计算风暴 风扇狂转、CPU 100%、磁盘被多份 target 吞噬 |
TerminalEnvironmentFactory.tsWorkspaceIsolationManager.tsColima / Docker APFS 存储层 |
多 Agent 独立沙盒重复拉取 crates 并冷编译,构建耗时 128s,无共享 sccache,缓存命中率 0% |
官方 Patch:子 Agent 自动嗅探透传 RUSTC_WRAPPER + 共享 .cargo/config.tomlToolkit: wb-doctor Check 6 + 全局 10GB 缓存硬顶 + fstrim 穿透 |
📄 事故二完整报告 |
| 03 | P0 |
Git 工作区代码莫名丢失 (Safe-Delete 缺陷导致 59 个文件蒸发) 包管理器被拦截留脏状态,工作树代码丢失 |
genie-safe-delete.cjs文件系统过滤驱动竞争态 |
genie-safe-delete.cjs 硬编码删除超 20 个文件抛错;底层沙盒过滤层在竞争态下直接诱发文件系统物理丢失 |
官方 Patch:移除无界安全删除抛错,修复驱动竞争态 Toolkit:未提交代码资产绝对保护准则 |
🔗 独立证据仓库 |
| 04 | P0 |
Seatbelt 规则雪崩致 SBPL O(N²) 死锁、前端 120s 强杀 (exit 137) 与 PTY 5s 假死 终端命令假死报 137,后台 CPU 100% |
sandbox-center (compile_sbpl_clauses, dim_covered)tsbx_rules.json (L7)sandbox-cli (InteractiveProcess::drop) |
tsbx_rules.json 遗漏 macOS 临时目录;动态生成万条单路径;$O(N^2)$ 比对 1.5 亿次死锁;前端 120s 超时下发 ProcessKill (SIGKILL 137);PTY drop join 硬卡 5 秒 |
官方 Patch:tsbx_rules.json 补全临时目录 + 前缀树 Trie 降至 $O(N \log N)$ + 先关闭 master_fd 后 joinToolkit:UDS 顶层 sessionId 修复 + wb-sandbox heal + wb-sandbox clean + wb-doctor --inspect-137 |
📄 事故四完整报告 |
作为重度依赖 AI 协同构建系统的独立开发者(GitHub: FlapPearLabs),在长期使用腾讯所谓“拳头级”AI 编程工具 WorkBuddy 的过程中,遭遇了一系列极其荒谬、令资深系统工程师窒息的底层生产事故。通过 sample 堆栈采样、动态系统跟踪、底层逆向分析与白盒物理凭证,我们对其底层工程的积弊进行了深水溯源,并在此公开这四大暴露出大厂内部“实习生 vibe-coding 无架构审查”本质的生产事故:
事故一:沙盒 PTY 日志堆积吞噬磁盘与数十万 Session 快照泄漏
- 现象:客户端常驻 3~4 天后,系统盘急剧减少 15GB 以上;更严重的是在
~/.workbuddy/workspace/sessions目录下堆积了超过 32 万个modify_backup与.modify_backup_meta快照文件,导致文件系统stat与目录遍历极度卡顿(遍历耗时飙升至 48.7s)。后台sandbox-cli-gc内存飙升至 471.2MB,高频深度遍历 APFS 打满 1,800+ IOPS 使得系统 I/O 持续瘫痪。 - 根因:WorkBuddy 的
sandbox-core在执行命令时无脑记录全量 PTY 终端输出,以 13MB 独立切片高频滚动写入(高强度任务下速率达 150200MB/h,单日累积 3.64.8GB),但完全没有设计生命周期淘汰(TTL)与目录配额上限,致使日志暴走至 14.8GB;同时每次修改文件生成的快照在会话结束后从未执行级联清理。 - 解决:在
workbuddy-log-guard与wb-sandbox clean中落地四重物理看门狗:lsof句柄感知防误杀、36h TTL 淘汰历史日志、2GB 目录总量硬顶截断、72h 会话快照外科手术式定向修剪。 - 🔗 深度物理凭证报告:👉 阅读《事故一深度取证报告:沙盒 PTY 日志无底洞与 32 万会话快照吞噬磁盘致系统 I/O 瘫痪》
事故二:Cargo 编译多个子 Agent 缺乏全局共享缓存 (sccache) 导致编译风暴
- 现象:在多 Agent 并发开发模式下,每个子 Agent 派发独立工作区编译同一个 Rust 工程时,系统风扇狂转、CPU 100% 满载,磁盘数分钟内被多个独立
target目录吃掉几十 GB。单次构建耗时平均 128 秒。 - 根因:WorkBuddy 官方虽然声称支持智能 Agent 协作,但在底层构建系统治理上极其业余——完全没有为子 Agent 构建环境接入
sccache等跨工作区全局对象缓存机制,导致每一个子任务都在独立的沙盒里从零拉取 crates 重复编译,造成巨大的 CPU、网络与磁盘浪费。 - 解决:在
wb-doctor中引入 Check 6 (Cargo sccache reuse 审计),并在工程规范中固化 APFS 稀疏盘物理回收与多智能体共享sccache标准(配置~/.cargo/config.toml指向全局预编译缓存),实现跨工作区 0ms 读取共享对象,后续构建提速 30 倍至 4.2 秒,缓存命中率 86.67%。 - 🔗 深度物理凭证报告:👉 阅读《事故二深度取证报告:多 Agent 并发开发缺乏全局共享编译缓存 (sccache) 诱发编译风暴》
事故三:Git 工作区代码莫名丢失(Safe-Delete 粗暴拦截导致 npm ci 崩溃与 59 个文件蒸发)
- 现象:用户在终端执行合法的
npm ci时被强行中断;更致命的是在日常工程迭代中,Git 工作树内的代码文件出现莫名其妙被永久删除的严重现象(实测单次瞬态蒸发 59 个工作树文件)。 - 根因:详见我们公开的取证仓库 FlapPearLabs/workbuddy-safedelete-rootcause。WorkBuddy 团队在底层搞了一个所谓的
genie-safe-delete.cjs与safe-delete-bulk-guard.cjs垫片试图“保护用户误删”,却粗暴地在 Node 层面硬编码了“单次删除超过 20 个文件即抛出异常拦截”的粗糙逻辑;由于拦截是在物理删除部分文件之后触发的,导致目录留下残缺半成品脏状态。而底层沙盒原生过滤层(tsbx.dll/ safe-delete 过滤器)更存在不可控的文件系统拦截缺陷,在特定竞争态下直接诱发了真实工作树文件的物理丢失。该严重事故已由我们整理完整复现实验并向腾讯工程师正式提交反馈。 - 🔗 独立开源复现仓库:👉 访问 GitHub: FlapPearLabs/workbuddy-safedelete-rootcause
事故四:Seatbelt 规则雪崩致 SBPL 编译 O(N²) 死锁、前端 120s 强杀 (exit 137) 与 PTY 5s 假死
- 现象:macOS 客户端频繁出现所有终端命令卡死、超时 120 秒被前端强杀报
exit_code: 137(SIGKILL);任何轻量级命令(date/echo 1)退出均硬卡 5 秒;关闭主窗口后,后台残留的sandbox-center进程 CPU 占用持续 100% 狂转超过 1 小时,电脑发烫电池迅速耗尽。 - 法医级归因定位(
EXIT_137 != 根因):
必须坚决厘清工程事实:exit 137仅为 POSIX 进程被信号强杀(128 + 9)的终态症状,绝非根因本身。全景故障族谱(Failure Families A ~ H)实测定位:- Family E (直接杀伤症状):WorkBuddy 前端调度器设置了 120,000ms 硬超时看门狗,超时后主动向子进程下发
ProcessKill(signal=Some("term")),随后由操作系统下发 SIGKILL,导致终端返回exit 137; - Family A (假死底层根因):
tsbx_rules.json漏配 macOS$TMPDIR(/var/folders/.../T/),导致每次触碰临时文件均向沙盒中心动态注册单条auto_grant路径,长任务下累积达 10,000~17,500 条。而sandbox-center的compile_sbpl_clauses -> shadowed_verdicts::dim_coveredSBPL 编译去重算法为无索引双重嵌套循环 $O(N^2)$(上万条规则触发 1.5 亿次比对),单一 I/O 线程被打死死锁 64 分钟,导致sandbox-cli向其请求 Profile 发生 3000ms 超时(fetch_profile 超时),命令因而被阻断在沙盒启动阶段直至前端 120s 强杀; - Family B (退出时序挂起):
sandbox-cli中InteractiveProcess::drop在持有master_fd句柄时调用 reader thread 的join(),读取线程阻塞于read无法退出,被迫等满 5,000ms 默认超时才退出,人为制造 5,002ms 假死; - Toolkit 历史修复盲区修复:旧版 Toolkit 将
sessionId置于 IPC 数据 payload 内部,导致无法修剪 per-session 的规则爆炸。本次修复确立官方 UDS 顶层sessionId规范,实现全局与活跃会话规则双向自愈。
- Family E (直接杀伤症状):WorkBuddy 前端调度器设置了 120,000ms 硬超时看门狗,超时后主动向子进程下发
- 解决:
- 研发
wb-sandbox heal:修复 UDS 顶层sessionIdwire 协议,通过跨进程 Single-Flight 内核排他锁(fcntl.flock/msvcrt.locking)与锁内回读校验杜绝并发撕裂,动态向sandbox-center注入 macOS 临时目录全量通配规则(/var/folders/**,/tmp/**),并双向定向修剪全局与活跃会话膨胀规则,SBPL 编译耗时从 64 分钟回归 0.2ms; - 研发
wb-sandbox clean:在检测到 GUI 退出且无活跃用户任务时,基于原生libproc.dylibC-FFI 安全级联回收孤儿守护进程,消除残留发烫与卡死; - 增强
wb-doctor:Check 5 增加全局与活跃会话全量沙盒规则审计与白盒错误码诊断,并提供--inspect-137/--shell-failure/--json事故现场指纹分析工具(具备基于--since-minutes窗口的物理隔离与严密负控制,无死锁凭证坚决输出Family H (UNKNOWN);Taxonomy 形式化定义 A~H 八大故障族,自动分类器覆盖核心可识别特征子集 A, B, C, D, E, H)。
- 研发
- 🔗 深度物理凭证报告:👉 阅读《事故四深度取证报告:Seatbelt 1.7 万行规则雪崩致 SBPL 编译 O(N²) 死锁 64 分钟与 PTY 5 秒假死》
三、快速上手与安装升级
🔄 老用户平滑升级指南(30 秒升级到 v0.6.0)
如果您之前已经安装过旧版 workbuddy-toolkit,升级到 v0.6.0 极其简单,无需重新配置任何 Profile,原有数据与账号 100% 平滑保留:
# 1. 进入本地已有仓库目录,拉取最新发布代码
cd ~/.workbuddy/toolkit
git pull
# 2. 重新运行通用安装脚本(自动刷新并部署 wb-doctor 诊断工具及新版软链接)
python3 install.py # Windows 用户请执行: python install.py
# 3. 运行环境自检,确认当前系统与 WorkBuddy 5.6+ 本地加密兼容性
wb-doctor
升级诊断与异常排查:
- 正常情况:
wb-doctor输出RESULT: COMPATIBLE,代表本机环境已完全就绪,您可直接继续使用wb-switch、wb-checkin和wb-chat。 - 若提示
WorkBuddy runtime: MISSING:
说明您的 WorkBuddy 客户端安装在非默认系统路径下(如安装在自定义应用目录或次级磁盘)。此时只需配置环境变量指向您的客户端可执行程序即可:# macOS 示例(若修改了默认安装路径) export WORKBUDDY_EXE="/Applications/WorkBuddy.app/Contents/MacOS/Electron" # Windows 示例(PowerShell 临时生效,或写入系统环境变量) $env:WORKBUDDY_EXE = "D:\Software\WorkBuddy\WorkBuddy.exe" # 永久生效:macOS/Linux 请将 export 语句追加至 ~/.zshrc 或 ~/.bashrc
推荐方式:跨平台通用 Python 一键安装 (macOS / Linux / Windows 通用)
无论您使用的是 macOS、Linux 还是 Windows,只要安装了 Python 3.8+,在克隆仓库后直接运行通用安装器即可:
git clone https://github.com/FlapPearLabs/workbuddy-toolkit.git ~/.workbuddy/toolkit
cd ~/.workbuddy/toolkit
python3 install.py # Windows 下请运行: python install.py
安装器将全自动完成:
- 自动识别操作系统并部署 CLI 脚本(macOS/Linux 安装到
~/.local/bin;Windows 安装到~/.workbuddy/bin并生成.cmd垫片且自动写入用户PATH环境变量); - 初始化数据库:对本地
workbuddy.db注入全域工作区互通触发器; - 激活原生系统定时任务:macOS (
launchd) / Linux (systemd timer或crontab) / Windows (schtasks计划任务); - 挂载 IDE 伴随体:若检测到 Antigravity,自动挂载 Scheduled Tasks Sidecar。
备选方式:系统原生脚本安装
选项 A:macOS / Linux (Shell)
git clone https://github.com/FlapPearLabs/workbuddy-toolkit.git ~/.workbuddy/toolkit
cd ~/.workbuddy/toolkit
./install.sh
选项 B:Windows (PowerShell)
在 PowerShell 中运行(无需管理员权限):
git clone https://github.com/FlapPearLabs/workbuddy-toolkit.git $HOME\.workbuddy\toolkit
cd $HOME\.workbuddy\toolkit
.\install.ps1
提示:安装完成后若提示找不到
wb-switch:
- macOS / Linux:请确保
~/.local/bin在PATH中(如在~/.zshrc中添加export PATH="$HOME/.local/bin:$PATH");- Windows:重新打开一个 PowerShell 或 CMD 窗口即可自动加载最新用户
PATH。
四、命令行工具使用手册
安装后,全局提供 workbuddy 以及 wb-help、wb-login、wb-list、wb-status、wb-audit、wb-switch、wb-checkin、wb-chat、wb-doctor、wb-models、wb-router 快捷命令:
0. 可用命令与功能清单速查 (wb-help / workbuddy help)
随时在终端中运行 wb-help 或 workbuddy-help,即可打印当前 Toolkit 的完整功能特性、命令用法与快捷别名清单,无需记忆繁琐参数:
# 方式 A:使用极简快捷别名(推荐)
wb-help
# 方式 B:全称快捷别名
workbuddy-help
# 方式 C:主程序 help 子命令或参数
workbuddy help
workbuddy --help
1. 独立免登扫码录入 (wb-login)
无需开启臃肿的 Electron 桌面客户端,直接在终端中唤起扫码并自动将账号凭证归档入库:
# 方式 A:指定别名进行免密扫码录入(推荐)
wb-login work_dev
# 方式 B:直接运行,由工具自动引导输入别名
wb-login
# 方式 C:仅扫码录入并保存到 Profile 库,不自动切换当前客户端在线状态
wb-login backup_acc --no-switch
# 方式 D:强行覆盖已有同名 Profile
wb-login old_alias --force
核心特性:
- 终端 1:1 高清 ANSI 点阵:采用双半块点阵字符
▀算法,在各类终端字体下均保持严格 1:1 正方形比例,手机微信秒级识别; - 免登零干扰:直接与官方认证网关通信,完全不打扰当前正在使用的 WorkBuddy 窗口;
- 智能防覆盖与冲突自愈:
- 同 UID 账号:自动识别为“当前账号凭据在位平滑刷新(In-place update)”,直接覆写 Profile 并保留别名;
- 异 UID 账号:若未加
--force,工具在后台或脚本模式下自动分配自增别名(如work_dev_1),绝对防止误杀已有账号; - 显式覆盖:传入
--force/--overwrite可跳过提示强制覆盖已有别名。
2. 账号快速切换 (wb-switch)
# 方式 A:打开交互式数字选择菜单 (CC Switch 风格)
wb-switch
# 方式 B:直接指定账号别名或昵称进行秒切
wb-switch my_account_2
交互菜单示例:
==============================================
WorkBuddy 账号切换器 (CC Switch 风格)
==============================================
当前在线账号: main_dev (当前使用中)
请选择要切换的目标账号:
▶ 1) main_dev [昵称: 开发主号] (当前使用中)
2) backup_acc [昵称: 备用副号]
q) 退出 (Cancel)
----------------------------------------------
请输入序号 [1-2] 进行切换:
3. 账号状态全景与程序化导出 (wb-list / wb-status)
一站式查看当前活跃登录账号、双到期时间戳、底层加密套件格式以及全部本地凭证库健康状态:
# 方式 A:人类可读文本全景查看
wb-list
# 或等效命令:
wb-status
workbuddy list
workbuddy status
# 方式 B:输出标准 JSON 格式(用于脚本自动化与监控探针集成)
wb-list --json
workbuddy list --json
文本输出示例:
=== WorkBuddy 账号状态 (darwin) ===
当前活跃账号: 开发主号 (main_dev)
账号 UID : 5580eae9-65a1-47e1-bed7-fb6fab5d60bf
凭证存储格式: sym-v1
Token 有效期: 2026-11-03 22:00:10
刷新令牌过期: 2026-12-03 22:00:09
凭证健康状态: ✔ 正常 (令牌有效 (剩余大于10分钟))
已保存的账号凭证库 (2 个):
• backup_acc 昵称: 备用副号 (UID: 8b8f8495...) [plaintext] [正常] 有效期至: 2026-10-30 11:03:08
[当前活动] • main_dev 昵称: 开发主号 (UID: 5580eae9...) [sym-v1] [正常] 有效期至: 2026-11-03 08:53:45
程序化 JSON 格式规范(零敏感 Token 泄露,纯白盒物理字段):
{
"platform": "darwin",
"active_account": {
"profile_name": "main_dev",
"nickname": "开发主号",
"uid": "5580eae9-65a1-47e1-bed7-fb6fab5d60bf",
"storage_format": "sym-v1",
"expires_at": 1900000000000,
"expires_at_formatted": "2030-03-22 09:46:40",
"refresh_expires_at": 1900000000000,
"refresh_expires_at_formatted": "2030-03-22 09:46:40",
"health": {
"status": "HEALTHY",
"detail": "有效 (缓存)",
"cached": true
}
},
"profiles": [
{
"name": "backup_acc",
"nickname": "备用副号",
"uid": "8b8f8495-fa99-42ff-bc8a-efa242ab3208",
"is_active": false,
"storage_format": "plaintext",
"expires_at": 1900000000000,
"expires_at_formatted": "2030-03-22 09:46:40",
"refresh_expires_at": 1900000000000,
"refresh_expires_at_formatted": "2030-03-22 09:46:40",
"health": {
"status": "HEALTHY",
"detail": "有效 (缓存)",
"cached": true
}
}
],
"total_profiles": 2
}
4. 账号健康审计与常驻巡检 (wb-audit)
周期性探测所有已保存凭证的有效性,临期静默自愈,失效前主动通过系统级桌面通知向开发者告警:
# 立即执行一次全量账号健康审计(默认复用 30 分钟防风控缓存)
wb-audit
# 强制穿透本地缓存,发起实时探测
wb-audit --force
# 以前台循环模式持续监控(每 6 小时巡检一次)
wb-audit --interval 6
# 启动后台守护模式(每 12 小时静默巡检一次)
wb-audit --daemon 12
审计与告警机制:
- 防风控节流:剩余有效期大于 10 分钟绝对不发起网络请求;30 分钟本地缓存节流;
- 静默自愈续期:AccessToken 过期但 RefreshToken 有效时,单次受控刷新并将最新 Token 自动写回本地 Profile;
- 双端原生通知:
- macOS:通过 AppleScript 调用通知中心原生弹窗并发出提示音;
- Windows:调用 PowerShell / WinRT Toast 气泡或
NotifyIcon托盘气泡提示。
5. 每日签到与连续对话保活 (wb-checkin)
[!TIP]
💡 薅算力经济学:三个号花 10 分钟配置下我们的工具,立省 140+ 开 GPT Plus 多带劲!
- 算力倒赚:三个号花 10 分钟配置下我们的工具,每日签到打卡就是
3000 * 3 + 500 * 3 = 10,500积分,大于每个月 140 订阅高级版的 9,000 积分还多 1,500 积分,立省 140+!- 重度耐用(成本为 0):假设使用
DeepSeek V4.1 Flash干活,每小时约消耗 60 积分,10,500 / 60 = 175 小时不间断运行,相当于每个月每天 5.8 小时 重度使用不间断才能用完!3 个号足以满足绝大多数普通用户的 Token 需求,价格为 0,配置时间仅需 10 分钟!- 降维消费:每个月省下来的 140 块钱拿去开个 ChatGPT Plus,又是每个月多出几个亿的高质量 Token 额度,还附带顶级 GPT 网页端对话与 GPT Live 实时语音(全天候陪聊、沉浸式练外语口语),这不比单吊一个工具带劲多了?
# 自动扫描所有已存账号 + 当前在线账号,统一检查签到并自动调用免费/低倍率模型触发每日对话
wb-checkin
# 或仅为特定账号执行打卡
wb-checkin backup_acc
# 若本次只想签到、跳过每日对话调用:
wb-checkin --no-chat
输出示例:
=== WorkBuddy 自动每日签到与连续对话 (2 个账号) ===
✔ backup_acc [昵称: 备用副号] 今日已签到 | 连续 4 天 | 累计签到奖励 400 积分
💬 [每日对话] 模型: hy3 (低倍率/免费) -> 回复: "你好" ✔
🎉 main_dev [昵称: 开发主号] 签到成功!+100 积分 | 连续签到 6 天
💬 [每日对话] 模型: hy3 (低倍率/免费) -> 回复: "你好" ✔
----------------------------------------------
6. 终端极速对话 (wb-chat) — 免 UI 零内存占用
无需开启庞大的 Electron 桌面窗口,直接在终端中向 WorkBuddy 模型提问,秒级流式响应:
# 向当前活跃账号发送对话(智能优先免费/最低倍率模型)
wb-chat "用 Python 写一个快速排序"
# 对所有已保存账号批量发送问候,统一触发每日连续对话奖励
wb-chat --all "请回复:你好"
# 为指定保存的账号别名发送对话
wb-chat backup_acc "请回复:测试通过"
输出示例:
=== WorkBuddy CLI 对话 (2 个账号) ===
提示词: 请回复:你好
✔ main_dev [昵称: 开发主号] 模型: hy3 -> 你好!
✔ backup_acc [昵称: 备用副号] 模型: hy3 -> 你好!
----------------------------------------------
7. 环境与凭证兼容性诊断 (wb-doctor)
一键检查本地凭据格式、WorkBuddy 运行时原生解密能力、沙盒规则健康度与 sccache 编译缓存复用:
workbuddy doctor # 或别名: wb-doctor
输出示例:
=== WorkBuddy Toolkit Doctor ===
Auth file : OK (~/.workbuddy/auth/workbuddy-desktop.info)
Credential format : encrypted
Encrypted scheme : detected (sym-v1 / suite 1)
WorkBuddy runtime : FOUND (/Applications/WorkBuddy.app/Contents/MacOS/Electron)
WorkBuddy version : 5.7.6
Credential resolver : AVAILABLE (Electron 37.10.3)
Profile count : 2
API capability : READY
Upstream sandbox spec : VULNERABLE (Upstream 5.7.6 omits macOS temp rules; sidecar heal active)
Sandbox & Seatbelt : HEALTHY (48 global rules, temp wildcards active)
Log guard daemon : ACTIVE (LaunchAgent loaded, 1800s periodic watch)
Cargo sccache reuse : CONFIGURED (sccache enabled)
RESULT: COMPATIBLE
🔬 终端执行失效与 exit 137 事故现场指纹分析 (wb-doctor --inspect-137)
长任务常驻运行(如连续跑数天的知乎数据抓取 zhihugrabber)或由 Agent 调用终端时,若遭遇任何终端命令卡死、超时 120 秒报 Process terminated with exit_code: 137 (SIGKILL),随时在终端运行法医级现场指纹审计:
# 执行法医级 137 / 终端失效现场指纹审计
wb-doctor --inspect-137
# 或使用别名与程序化 JSON 规范输出
wb-doctor --shell-failure --json
白盒物理实测输出示例:
=== WorkBuddy Shell Failure & Exit 137 Forensic Fingerprint ===
Timestamp : 2026-10-08T20:48:29+08:00
Platform : darwin
WorkBuddy Version : 5.7.6
Toolkit Version : 0.6.0
Incident Window : 30 minutes
Sandbox Center Found : YES
Center Responsive : YES
Center CPU Usage : 0.0%
Global Rules Count : 48
Max Session Rules : 0
Temp Wildcards Active : YES
Memory Pressure : normal
Log References : 1 incident files (0 historical files)
Classification Result :
Classification : PTY_LIFECYCLE_LIKELY
Failure Family : Family B
Confidence : HIGH
Attribution Reason : 官方二进制 MacPtyProcess::drop/InteractiveProcess::drop 在持有 master_fd 时等待 reader thread join 导致 5002ms 硬卡死
Taxonomy Scope : Families A~H defined; automatic classifier covers A, B, C, D, E, H
坚决贯彻
EXIT_137 != 根因负控制铁律与时间窗口隔离:exit 137为 POSIXSIGKILL强杀信号终态,可能是前端 120s 超时看门狗杀伤(Family E)、内核 Jetsam OOM 杀伤(Family C)、进程资源配额超限(Family D)或规则膨胀导致握手超时(Family A)。指纹器严格基于--since-minutes(默认 30 分钟)隔离当前事故证据与历史残留日志,在规则健康且缺乏死锁凭证时,绝不作伪归因,严格归类为Family H (UNKNOWN),拿物理证据说话!
Taxonomy 形式化定义了 A~H 八大故障族,自动分类器覆盖核心可识别特征子集(A, B, C, D, E, H)。
8. 容灾轮换路由网关 (wb-router)
提供一站式管理 :8047 本地透明容灾轮换服务:
# 查看路由网关当前运行状态与监听端口 (默认 8047)
wb-router status
# 启动容灾轮换网关服务
wb-router start
# 停止网关服务
wb-router stop
# 实时追踪容灾轮换日志与故障自动降级流水
wb-router log
9. 模型全景资产与倍率透视 (wb-models)
一键呼出终端轻量交互式选择器 (TUI),直观透视全量模型、折扣倍率与历史偏好:
# 启动模型资产透视与终端选择器
wb-models
输出示例:
=== WorkBuddy 模型全景资产与倍率透视 ===
可用模型列表 (实时拉取):
▶ 1) hy3 [混元 3.0] 倍率: x0.00 (限免/推荐主力)
2) space-bunny-free [Space Bunny] 倍率: x0.00 (免费额度)
3) deepseek-v4-flash [DeepSeek V4] 倍率: x0.10 (极低消耗)
4) glm-5v-turbo [GLM 5V Turbo] 倍率: x0.50 (低消耗兜底)
5) auto [智能动态路由] 倍率: 动态阶梯
--------------------------------------------------
快捷操作: [上下键] 移动选择 [Enter] 确认切换 [q] 退出
10. 沙盒日志看门狗配置与管理 (workbuddy-log-guard)
有效治理 WorkBuddy 长期运行后 PTY 沙盒日志吞噬 10GB+ 磁盘积弊:
# 手动立即触发一次日志安全审计与物理修剪
workbuddy-log-guard
自定义配置方案 (~/.workbuddy/log_guard.json)
默认零配置开箱即用。若需自定义清理频次或配额,可创建或编辑配置文件:
{
"ttl_minutes": 2160, // 日志 TTL 过期淘汰时长 (默认 2160 分钟 = 36 小时)
"max_sandbox_mb": 2048, // 沙盒日志目录容量硬顶 (默认 2048 MB = 2 GB)
"target_sandbox_mb": 1536, // 达到硬顶时自动修剪目标回落水位 (默认 1536 MB = 1.5 GB)
"max_file_mb": 30 // 单个日志文件物理熔断清零阈值 (默认 30 MB)
}
环境变量覆盖机制
亦可通过系统环境变量覆盖以上参数(优先级高于配置文件):
WB_TTL_MINUTES:覆盖 TTL 分钟数;WB_MAX_SANDBOX_MB:覆盖目录总配额上限;WB_TARGET_SANDBOX_MB:覆盖清理目标水位;WB_MAX_FILE_MB:覆盖单文件熔断上限。
11. 沙盒状态自愈与会话快照治理 (wb-sandbox)
专为治理与防御 macOS 下 Seatbelt 1.7 万条规则雪崩、SBPL 编译 100% CPU 卡死 64 分钟、PTY 延迟、前端 120s 强杀 (exit 137) 与 Session 快照泄漏而设计:
# 1. 查看当前沙盒中心运行状态、Seatbelt 规则总数、临时通配规则状态与历史会话快照
wb-sandbox status # 或: workbuddy sandbox status
# 2. 一键自愈:直连 sandbox-center IPC 动态补齐 macOS 临时目录通配规则,双向修剪全局与活跃会话膨胀的 auto_grant 规则
wb-sandbox heal # 或: workbuddy sandbox heal
# 3. 外科手术式清理:TTL 轮转清理 72 小时前陈旧 modify_backup 会话快照,并在主窗口退出时级联清理孤儿守护进程
wb-sandbox clean # 或: workbuddy sandbox clean
输出示例:
=== WorkBuddy Sandbox & Seatbelt Status ===
Sandbox daemon : ONLINE (socket: /tmp/workbuddy-sandbox-center-3f3e52095ab29df9-432.sock)
File rules count : 48
Temp wildcard rules : ACTIVE (macOS Temp Wildcards Installed)
Session workspace : 14 active session histories
WorkBuddy GUI status : RUNNING
🛠️ 核心自愈机制
- 顶层
sessionIdWire 协议对齐:精确对齐官方 RustCenterIpcMessage规范,将sessionId注入协议顶层信封,实现跨进程对特定活跃会话上万条auto_grant规则的物理定点移除; - 跨进程 Single-Flight 排他锁:基于
fcntl.flock(POSIX) /msvcrt.locking(Windows) 与锁内回读校验,并发触发零冲突、零撕裂; - 全链路 Monotonic Deadline 保护:贯穿连接、发送与分片接收全周期,超时主动 Fail-Open 绝不卡死用户命令。
12. 常用命令速查表
| 命令 | 别名 | 功能说明 |
|---|---|---|
workbuddy help |
wb-help / workbuddy-help |
查看完整帮助信息与可用命令和功能列表 |
workbuddy login [别名] |
wb-login |
终端 1:1 ANSI 扫码独立录入新账号,免开客户端 UI,支持冲突自愈与 --force |
workbuddy switch [别名] |
wb-switch |
交互式选择或直接切换到指定账号并优雅重启 |
workbuddy list [--json] |
wb-list |
查看当前活跃账号、到期时间及已存凭证清单(支持标准 --json 输出) |
workbuddy status [--json] |
wb-status |
查看当前账号凭据存储格式、Token 有效期及健康度(支持 --json) |
workbuddy audit [选项] |
wb-audit |
账号健康度定时巡检与自愈续期,失效触发 macOS / Windows 原生桌面通知 |
workbuddy checkin [别名] |
wb-checkin |
统一执行所有已存账号每日签到 + 自动调用低倍率/免费模型每日对话 |
workbuddy chat [提示词] |
wb-chat |
终端极速对话(智能优先使用 hy3、deepseek-flash 等免费低消耗模型) |
workbuddy chat --all [词] |
wb-chat --all |
全账号批量发起对话,一键刷新全账号连续对话奖励资格 |
workbuddy router [子命令] |
wb-router |
管理 :8047 容灾轮换路由网关(status / start / stop / log) |
workbuddy models |
wb-models |
呼出模型全景资产、倍率透视与轻量终端选择器 (TUI) |
workbuddy sandbox [子命令] |
wb-sandbox |
沙盒运行状态自愈、Seatbelt 通配规则注入与会话快照清理 (status/heal/clean) |
workbuddy-log-guard |
- | 触发沙盒日志物理看门狗(36h TTL、2GB 硬顶、30MB 熔断、Open-FD 保护) |
workbuddy doctor [--inspect-137] |
wb-doctor |
深度诊断凭据套件、运行时兼容性、沙盒规则健康与 137 / shell 事故现场指纹分析 |
workbuddy save <别名> |
- | 将当前活跃登录态固化为一个可切换的 Profile(支持 --force) |
workbuddy init |
- | 一键应用 SQLite 全域工作区打通补丁 |
workbuddy rollback |
- | 撤销 SQLite 触发器,恢复官方严格数据隔离 |
workbuddy restart |
- | 优雅重启 WorkBuddy 客户端 |
五、安全与隐私承诺 (Zero-Leakage)
- 绝对本地化:本工具所有逻辑 100% 运行于本地机器,所有的 Token、UID、凭证仅保存在用户本机的
~/.workbuddy/auth_profiles/,绝不向任何第三方服务或未经授权的服务器发送任何数据。 - 直连官方端点:签到功能直接调用腾讯官方 API 端点 (
https://copilot.tencent.com),无任何中间代理。 - 开源透明:所有脚本均为开源 Python/Shell 源码,接受任何形式的审计与审查。
- 潜在风险与版本兼容性提示 (Remaining Risks):保存的 encrypted Profile 使用写入它的 WorkBuddy 构建所对应的字段密钥;如果未来 WorkBuddy 构建实际轮换密钥,历史离线 Profile 可能出现
KEY_MISMATCH,当前工具会严格按 Fail-Closed 处理。历史 Profile 无法保证永久跨任意客户端版本升级。
六、回滚与卸载指南
如果你不再需要此工具,或希望完全还原到官方初始状态:
推荐方式:跨平台通用 Python 一键卸载
python3 uninstall.py # Windows 下运行: python uninstall.py
卸载程序会自动注销各系统定时器(macOS launchd / Linux systemd 或 crontab / Windows 任务计划)、清理 CLI 软链接及垫片,并询问是否回滚 SQLite 触发器。
原生脚本卸载方式
- macOS / Linux:
./uninstall.sh - Windows (PowerShell):
.\uninstall.ps1
七、开源协议
本项目采用 MIT License 许可证发布。欢迎提交 Issue 与 Pull Request!
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found