fix(env): 默认数据目录改 XDG state,自动从 ~/.cache/cxs 迁移
之前用 ~/.cache/cxs/index.sqlite 不准确 — 索引是「可重建但重建有
成本」的状态(2867 session 全 sync 75s),不是 throwaway cache。XDG
state 是这种数据的标准位置:
- $XDG_STATE_HOME/cxs (尊重)
- ~/.local/state/cxs (fallback)
CXS_DATA_DIR 仍优先级最高。
迁移逻辑 (migrateLegacyCacheDir):
- legacy 不存在 → no-op
- dest 已有数据 → no-op (不 clobber,旧 cache 留原地)
- legacy === dest → no-op
- 其余 → renameSync(rename atomic);失败 swallow,重 sync 即可恢复
trigger 点 = cli.ts 入口,而非 env.ts 模块顶层 — 避免 vitest import
env.ts 时把用户 home 数据搬走 (test isolation)。
实测当前机器:240 MB 索引从 ~/.cache/cxs/ rename 到
~/.local/state/cxs/,lastSyncAt 与 sessionCount 保留,零丢失。
测试: env.test.ts 4 个 case 覆盖 mv / clean install / dest 已有 /
self === self 四种迁移分支。
Windows 注:这个改动跟前一个 platform reduction commit 一起,正式
把 cxs 限定到 macOS+Linux,Windows 用户走 WSL。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Entire-Checkpoint: 8f6309354104