Skip to content

feat: 清理旧会话——本地软删 + 云端同删 + 对账 - #62

Open
wh-1 wants to merge 1 commit into
changexbc:mainfrom
wh-1:pr/session-cleanup
Open

wh-1 wants to merge 1 commit into
changexbc:mainfrom
wh-1:pr/session-cleanup

Conversation

@wh-1

@wh-1 wh-1 commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

功能

长期用下来云端和本地的旧会话只增不减,官方没有批量清理入口。账号卡片菜单新增「清理旧会话」:每个项目按 updated_at 保留最新 N 条(N 可配),其余软删;已上云的会话用该账号的 token 同步删云端,最后跑一次对账。

设计要点

  • 只删自己的:云端判据是映射行 msg_channel = convmsg:<uid>;归属别的账号、或没有映射行的一律只做本地软删(拿错 token 会 403)。对账阶段清「本机已软删、云端还在」的残留,其他设备上的活会话(Unknown)只计数
  • 先备份,再先看后动:真删前备份 workbuddy.db(含 -wal/-shm),拷不动就不给回滚点并如实报告;前端先 dry_run 报「本地清 N 条 / 云端删 N 条」,确认才执行
  • 失败可见:云端删除 200/404/403/网络失败逐条计数并写审计日志,不静默吞错

与 #43「历史重复清理」的区别

看到你在 #43 的回复(重复清理先放一放,怕误删同名不同内容)。这条判据不一样:

  • 不按标题/目录判重,也不识别重复——就是同一账号同一项目按时间留最新 N 条(N 可配,默认 3),淘汰理由与内容无关
  • 不物理删:只写 deleted_at,数据库行和 jsonl 正文都不动
  • 保留条数默认 3,对话框里可以改

改动

  • core 新增 session_slim / cloud_conv / cloud_reconcile(含单测);reqwest 补 blocking feature;backup_workbuddy_db 改 pub(crate)
  • 桌面端:账号卡片菜单入口 + 清理对话框(预览 → 确认)

顺带修 9 个 Windows 上必然失败的用例

上游 main 在 Windows 11 实机跑 core 测试是 334 passed / 9 failed,都是平台差异(路径归一化、is_absolute() 不认 Unix 风格根路径、SetFileTime 权限、脚本名断言写死)。修的是产品代码而不是屏蔽测试,逐条见 commit。

验证

  • core:Windows 11 实机 369 passed / 0 failed;cargo check -p wb-switch-rust -p wb-switch-server 与 tsc --noEmit 均通过
  • 桌面端交互未逐项人工点验(命令行 dryRun 与接口层已实测并核对)

新增「清理旧会话」:每账号每项目保留 updated_at 最新 keep 条,其余软删;
已上云的会话用该账号 token 同步删除云端,并追加对账与云端全貌两阶段。

- core 新增三个模块:session_slim(清理主流程)/ cloud_conv(云端删除,
  含映射库代次探测与全账枚举)/ cloud_reconcile(残留清理 + 清单)
- 归属判据 = edge-sync-mapping 库的 msg_channel,只删目标账号自己的云端会话,
  删不掉(403/404/网络)如实记进报告,绝不静默吞错
- 真跑前自动备份 workbuddy.db(含 -wal/-shm),拷不动就不给回滚点并如实上报
- 桌面端:账号卡片菜单新增「清理旧会话」,预览(dry_run)确认后再执行
- 顺带修掉 9 个 Windows 上必然失败的用例(上游 main 同样失败):
  · 路径断言按 `/` 归一化后再比较(variant / session)
  · token_stats 三处 fixture 改用 write(true) 句柄 pin mtime
    (Windows 的 SetFileTime 需要 FILE_WRITE_ATTRIBUTES,只读句柄 Access Denied)
  · codebuddy_cli::node_path_from_shell_output 接受 Unix 风格根路径、
    export_import 的路径校验同口径 —— 修产品代码,不用 cfg 屏蔽绕开
  · rate_limit_hook 的断言改用 script_name(),不再写死 hook.sh
@wh-1
wh-1 force-pushed the pr/session-cleanup branch from 48b0606 to e0b74fe Compare September 19, 2026 12:48

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant