PuppyIP 资源中心
开发与云工具 8 分钟 发布于 2026-10-21

Cloudflare Think 迁移到 @cloudflare/computer:旧工作区不会自动搬

Cloudflare 于 10 月 20 日宣布 Think 和 Agent Skills 改用 @cloudflare/computer;新旧工作区使用不同存储表,不会自动搬文件。迁移前先盘点旧 workspace 与 R2 文件,再在隔离环境复制和验收。

Cloudflare Think Cloudflare Agents @cloudflare/computer @cloudflare/shell 工作区迁移 Durable Objects

服务对象与地域限制

PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。

代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。

本文要点

  • Think 与 Agent Skills 现在使用 @cloudflare/computer 的 workspace;需要 JavaScript 执行时还要配置对应 backend 和 Worker Loader。
  • @cloudflare/shell 与 Think 的 createExecuteTool 从 2026 年 10 月 20 日起不再开发或支持。
  • Computer 和 Shell 把文件写入不同表。切换后新 workspace 可能为空,但旧数据仍留在原表,除非你另行清理。
  • 官方迁移示例通过旧 Workspace 读取目录,再用新 workspace.fs 写入;Think 默认在 /workspace 下工作。
  • Computer 目前只运行在 Durable Object storage,一个 DO storage 只有一个 workspace;R2 大文件写入和部分旧 backend 没有对应迁移能力。

这次切换影响哪些 Think 项目?

Cloudflare 的 2026 年 10 月 20 日公告称,Think 和 Agent Skills 现在改用 @cloudflare/computer 提供的 workspace 与文件系统工具。需要在 JavaScript backend 中执行代码的项目,还要配置 Worker Loader 与相应 backend;单独创建 Workspace 并不会自动提供 exec。

同一公告表示 @cloudflare/shell 和 Think 的 createExecuteTool 自该日起弃用,不再继续开发或提供支持。若项目仍导入这些包或调用这个工具,应该先盘点调用路径,再按当前 Think 工具文档迁移。

为什么新 workspace 看不到旧文件?

两个包使用不同的 Durable Object SQLite 表。默认 namespace 的旧 Shell workspace 数据位于 cf_workspace_default;Computer 使用 vfs_ 和 _vfs_ 前缀的另一组表。换包不会把旧文件复制过去。

因此,新 Think workspace 第一次启动时可能显示为空,不过旧 Shell 数据仍在原表中。只有应用或操作者另行删除旧表或关联的 R2 对象,才会产生后续数据删除;“新 workspace 为空”本身不等于旧文件已丢失。

切换前先核对存储与工具差异

Computer 需要运行在 Durable Object 内并使用 ctx.storage;官方迁移说明没有为 D1、Shell 的自定义 SqlBackend 或 InMemoryFs 列出等价替代项。一个 Durable Object storage 目前只能承载一个 Computer workspace,旧版 Shell 的 namespace 选项也没有对应项。

Computer 将文件内容保存在 SQLite,尚不能把大文件写入 R2;R2 mount 是只读的。Think 工具也有变化:list 改为 ls,进程内 bash 不再提供;只有为 Workspace 配置 backend 后才有 exec。旧版 workspaceBash、createWorkspaceTools 和 Think workspace 工具模块被移除,没有直接替代项。

按官方思路复制文件,而不是搬数据库表

先备份 Durable Object 数据,并确认旧 workspace 的 namespace、目录、符号链接和 R2 对象范围。官方示例在同一 storage 上构造新旧 Workspace,遍历旧目录,再通过新 workspace.fs 创建目录、链接并写入文件;不要直接向 vfs_ 表插入行,因为块哈希、修订计数和变更日志必须保持一致。

Think 及 Computer 的工具通常在 /workspace 下工作,所以官方示例默认把旧 /notes.md 复制到 /workspace/notes.md;如果需要原路径,可以将复制根目录设为 /。若旧 Shell 文件存放在 R2,复制时还要使用匹配的 R2 与 name 或 r2Prefix 选项,才能读取对象字节。

完成复制后怎样验收和保留回退?

把复制逻辑放在一次性迁移步骤中,并使用 Durable Object storage 中的标记避免每次启动都重跑。若迁移中断,先检查新 workspace 已经写入哪些文件,再决定如何恢复;不要盲目重复写入或覆盖新版本内容。

在隔离环境检查文件列表、文件内容、符号链接目标、R2 大文件处理和实际配置的 backend。旧数据至少保留到这些检查完成并确认应用读取新 workspace;如之后清理,先核对每一个精确 R2 key 和 namespace,避免删除其他 workspace 共用前缀下的对象。创建时间、修改时间与 MIME 类型不会原样保留,Computer 会按复制时点记录时间且不保存每文件 MIME 类型。

费用、地区与验证边界

Cloudflare 的这几份迁移与 Think 文档没有给出适用于所有账户的费用、套餐资格或地区可用性清单。按自己的 Cloudflare 账户、产品计划及当前价格说明核对,不要从代码示例推断免费额度或普遍可用。

本文仅依据 Cloudflare 公告和文档整理迁移步骤;没有安装依赖、连接 Durable Object、运行复制代码或验证任何账户的实际部署结果。

资料来源

常见问题

切换到 @cloudflare/computer 后,旧文件会被自动删除吗?

不会。官方说明新旧包使用不同的表,切换不会迁移文件;没有手动删除时,旧 Shell 数据仍在原表。新 workspace 看起来为空,不代表旧表数据已经删除。

只把 @cloudflare/shell 改成 @cloudflare/computer 就完成迁移了吗?

没有。除了 API 和工具变化外,文件还需要从旧 workspace 复制到新 workspace。也要核对 Durable Object storage、workspace 数量、R2 大文件和旧 backend 的兼容性。

Think 默认就能执行 JavaScript 或 shell 命令吗?

不能。Cloudflare 文档说明默认 Workspace 没有 execution backend,因此没有 exec。需要时配置 Worker Loader 和适用 backend;不要把旧 Think 的 bash 或 execute 工具当成仍然可用。

复制完成后可以马上删除旧表和 R2 文件吗?

先验证新 workspace 中的文件、链接和应用读取,再决定是否清理。若要删除 R2 对象,逐个核对精确 key 与 namespace;Cloudflare 明确提醒,不要按共享前缀批量删除。

Computer 是否可以继续使用 D1、自定义 SqlBackend 或 InMemoryFs?

当前迁移文档没有为这些旧配置列出替代项。Computer 运行在 Durable Object storage 中;迁移前应核实项目是否依赖这些 backend,而不是假设换包后行为不变。