服务对象与地域限制
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,而不是假设换包后行为不变。