Skip to content

v2026.09.13.2

Choose a tag to compare

@westsource westsource released this 13 Sep 06:59
· 50 commits to main since this release

v2026.09.13.2 — workbuddy 项目清单接入共享项目池 + 根目录不入池

客户端发布:CLIENT_VERSION 2026.09.13.1 → 2026.09.13.2(客户端包有改动,各端经 /api/client/manifest 自动更新,Agent 重启后生效)。服务端:仅 client_update.py 的版本常量,无 schema 变更、无数据迁移。

Added(workbuddy 项目清单接入共享项目池:本机项目列表与服务端项目卡片对齐)

  • 背景:项目是工作空间级共享池(/api/projects/pull 返回全部可见项目,与 agent 无关),此前只有 hermes 在推。WorkBuddy 桌面端的项目清单(workbuddy.db 的 workspaces 表:path + last_opened_at)完全没有上行——服务端 10 个项目全是 hermes 的;网站项目卡片按 cwd 前缀关联会话,因此本机 286 条 WorkBuddy 会话里 191 条落在项目之外。
  • 实现(mcp/adapters/workbuddy.py,supports_projects = True):read_projects 每条 workspace 路径一个项目——服务端已知路径原样使用服务端的 id/slug/name/folders(身份存于 .workbuddy-sync-projects.json 侧车;改用目录名派生会被判"本地脏"并每轮覆盖对端项目名),未知路径铸确定性 wb_<sha1(_path_key)> + 整路径压平的 slug(逐路径唯一,不会触发服务端同名合并)。write_projects 按本次 pull 全量重建侧车,并为每个项目路径补 workspaces 行(建目录);已有行只保留、不再定日期,本地行永不删除。
  • 能力位:新增 supports_projects(默认 False)——无本地项目库的适配器在周期同步里跳过项目阶段,工具面返回 Agent X has no local project store …,此前每轮记一条 AttributeError 日志。
  • 线上验证:pull 落地 8 条 workspace、采纳 9 个服务端项目身份;push 服务端 10 → 13 且既有 10 个项目零字段改动(imported:3, updated:9, merged:0);二次 push 幂等。

Added(根目录不入共享项目池:识别根形状路径并排除,退役已上行的根卡)

  • 背景:D:\、C:\Users\rong 这类"根"条目会让项目卡变成兜底桶(实测 rong 吞 99 条、D: 吞 27 条 = 110/286,其中 62 条是 ~/hermes-sync-foreign 合成目录);而服务端 project_folders 只并集、无删除 API,项目也没有 Web 隐藏/删除入口 ⇒ 一旦上行即永久。故"各 agent 拉到本机后把本机 home 并进根项目"的方案被否决(四条理由与被保留的"服务端可回退 alias"备选见 ARCHITECTURE 决策记录 2026.09.13.2)。
  • 实现:base.is_root_project_path / strip_root_project_paths(盘符/filesystem 根、/root、/home·C:/Users 及其子项);push/pull 边界统一过滤——纯根项目整条不上行/不落地,根 primary_path 只置 None、绝不改写(它是 per-field LWW 字段,改写会与对端逐周期互推覆盖);workbuddy 适配器另清理身份侧车。本地路径全保留(D:\ 仍是 WorkBuddy 的 workspace,hermes projects.db 不动)。
  • 退役:scripts/hide-root-projects.py(dry-run 默认 / --apply / --undo)置 hidden=1——/api/projects/pull 与 Web 项目列表都过滤 hidden,且 push 的 UPDATE 分支从不写 hidden ⇒ 客户端推不活(已用旧客户端语义复推实测)。
  • 实测影响:服务端项目卡 13 → 11;本机参与同步的 workspace 键 15 → 13;本机会话归组 207/286 → 97/286(诚实结论:项目同步对本机会话分组的净收益≈0,真实收益是"项目清单对齐 + 其他机器/agent 的会话能归入这些项目")。

生产状态:236 已部署 2026.09.13.2(6 文件 sha256 与工作区一致、systemctl restart 后 health 200),线上 /api/client/manifest 实测 served 2026.09.13.2,发货 zip 逐文件 sha256 校验通过;两张根卡已在生产退役(hidden=1,dry-run 幂等、复推不复活)。测试:mcp 套件 185 项(仅 3 项改动前既有的环境失败:zstandard 未装 ×2、SyncLockAndRoleTest ×1)。