先说做完的

只要你定 1 件事:回「B」(或 A / C,或加意见)。

问题:在容器里删掉的文件,过一会儿又回来了 老问题

这是主线上本来就有的毛病,不是今天这几个 PR 带进来的。

1
模型在轻量层(不开容器、直接改文件的快速通道)把一个文件改了好几次。
2
然后在容器里把它删了(比如 rm,或者用 Python 删)。
3
下一次两边对齐文件(同步)时,这个「删除」被扔掉了,文件又出现在 /workspace 里。

影响整个 /workspace,不只是 memory(记忆文件)。我们已经能稳定复现:在轻量层把同一个文件写 12 次,再在容器里 rm,它就回来了。

图:为什么会这样(两个计数器对不上)

两边各有一个「改动计数器」,同步时拿删除的编号去比,小了就当「过期的旧操作」扔掉
12 轻量层计数 改 12 次,涨到 12 1 容器计数 只有容器自己改才涨 容器:rm 文件 删除编号 = 1 1 < 12
1
容器的删除带着编号 1,轻量层那边已经是 12。
2
同步时一比:1 < 12,就认定这个删除「过期了」(以为是比最新改动更早的旧操作)。
3
删除被忽略 → 文件又出现了。

毛病出在 Cloudflare 的 @cloudflare/computer 包里:它拿两个记的根本不是一回事的计数器去比。容器那个只有容器自己改东西才会涨,所以轻量层多改几次,容器的删除就显得「过期」。新版 0.4.0 这段代码一字不差,升级也修不好。

要你定:怎么处理

A报给 Cloudflare,等他们修,包不动

  • 好处:不花钱;守住「不改第三方包」(vendor 包,别人家的代码)这条规矩。
  • 代价:他们什么时候修不知道。修好之前,模型删掉的文件可能又冒出来,模型和用户都会看到「删了又回来」的文件,可能把模型搞糊涂,或者留着过时的内容。

B我们自己先给包打补丁,同时报给 Cloudflare 推荐

  • 好处:一个小补丁,包的版本号不变,装依赖时自动打上,马上修好。
  • 代价:
    • 这一次破了「不改第三方包」的规矩;
    • 以后每次升级这个包都要重新检查补丁,等官方修好再删掉补丁;
    • 补丁碰的是同步逻辑,所以要让 Opus(更强的模型)审一遍,再跑一次完整的预发冒烟测试,大约花 3–5% 的 Cursor 预算。
  • 为什么安全:原来那个检查,本意是防止「一个更早的删除,把一个更新的写入给冲掉」。但我们这边命令是严格一条接一条跑的(serialCommand,串行执行),这种「同时发生」的情况不会出现。所以把这个检查去掉或改对,对我们是安全的。

C不碰包,在我们自己代码里绕过去

  • 做法举例:每跑完一条容器命令,就把容器里的文件清单跟我们的对一遍,找出被删的。
  • 好处:不破规矩。
  • 代价:每条命令都变慢;要加很多代码;改名(mv)、git checkout 这类特殊情况很容易漏。不推荐。
在微信回「B」(或 A / C,或加意见)即可。