跳到主要内容

WorkBuddy 会话与执行环境机制

范围:桌面端两种工作空间的执行模型 —— 远程空间(云端沙箱)与本地文件夹(本机执行)。

内容:执行环境位置、创建与回收、重开恢复路径、持久化边界、资源模型。


摘要​

  • 远程空间 = 按会话分配的隔离沙箱容器(官方术语 Runtime),随时间分级降级:运行 → 休眠 → 回收 → 冷归档。
  • 本地文件夹 = 你电脑上的一个会话进程,不存在沙箱生命周期。
  • 两种模式下对话历史与工作区文件都持久。差别在于:容器里临时安装的东西会不会丢、机器在不在。
  • 唯一不可恢复的操作是手动删除会话;归档不影响数据。

1. 概念模型​

概念定义类比
Session(会话)一次对话的完整上下文:消息历史、文件、产出物一次会议记录
Runtime(运行时)Session 背后真正运行的独立云端沙箱容器,含完整 Linux 文件系统与终端一间会议室
Workspace(工作空间)挂载进沙箱的目录,映射到容器内 /workspace/<名字>/会议室的资料柜

一个 Runtime 承载一个或多个 Session,通常一一对应;创建 Runtime 时自动创建初始 Session。


2. 两种执行环境对照​

维度远程空间本地文件夹
计算发生在腾讯云隔离容器你自己的电脑
环境形态容器实例本机会话进程
持久化载体/workspace 持久卷 + 对象存储你的磁盘
空闲处理10 分钟休眠,数天后回收进程常驻,心跳维持
重开耗时秒级 ~ 一分钟(取决于闲置时长)秒级(仅重启进程)
换设备✅ 可接上❌ 接不上
关机后✅ 任务继续跑❌ 中断
主要风险会话被回收、依赖丢失目录被移动、磁盘增长

3. 远程空间(云端沙箱)​

3.1 状态机​

flowchart LR
A["创建会话"] --> B["分配 Runtime<br/>独立容器 + /workspace"]
B --> C["运行中<br/>占 CPU 与内存"]
C -->|"空闲约 10 分钟"| D["休眠<br/>仅占磁盘卷"]
D -->|"访问"| C
D -->|"空闲数天"| E["已回收<br/>容器销毁"]
E -->|"长期空闲"| F["冷归档<br/>仅记录 + 文件对象"]
E -->|"访问"| G["重建容器<br/>挂回文件卷"]
F -->|"访问"| G
G --> C
C -->|"删除会话"| H["永久清除"]

执行链路:建会话 → 调度器拉起容器(冷启动:拉镜像、挂卷)→ 注入上下文(消息、文件、技能、连接器凭证)→ Agent 主循环(思考 → 调工具 → 读结果,工具真实运行在沙箱内)→ 产物写回 /workspace 并同步到结果区。

3.2 四阶段明细​

阶段触发条件容器保留内容资源成本
运行中正在执行存在内存态 + 磁盘全部高(CPU + 内存)
休眠空闲约 10 分钟暂停,内存换出磁盘卷完整保留中(磁盘)
已回收空闲数天以上已销毁快照 / 对象存储低
冷归档数月到一年不存在会话记录 + 文件对象极低

官方文档给出的沙箱状态有三种表述:运行中(正在活跃服务)、休眠(空闲超时自动暂停,再次访问自动唤醒)、失败(创建或启动异常)。

关键区分:一年未打开的会话不处于「休眠」状态。它的容器早已回收,平台侧只剩「一条数据库记录 + 对象存储里的文件」,访问时才重建容器。

3.3 持久化边界​

这是最容易被误判的一点:只有 /workspace 是持久卷,容器系统层不持久。

内容隔数天后隔数月后
/workspace 内的文件、产物、代码✅ 在✅ 在
对话历史(服务端数据库)✅ 在✅ 在
pip install / apt install 装的包❌ 丢失❌ 丢失
全局配置、临时环境变量❌ 丢失❌ 丢失

典型症状:文件都在,但脚本一跑就报 ModuleNotFoundError。

对策是把依赖清单纳入 workspace,重开后一条命令恢复:

pip install -r requirements.txt # 或 npm install / pnpm install

一定会中断的两类东西:

  1. 正在跑的长任务 —— 休眠时进程被中止,不会「醒来接着跑」。长任务应在单次会话内完成。
  2. 后台服务与定时任务 —— 会话沙箱是「跑完就睡」,不是常驻服务器。需要 7×24 在线的场景应用云服务(应用托管)。

3.4 隔离模型​

  • 每个 Session 一个独立 Runtime,独立对话历史 + 独立文件存储。
  • 会话之间看不到彼此的 /workspace;安装的包、临时文件、环境变量互不串扰。
  • 共用的是底层物理集群(容器编排),不是执行环境本身。一个集群跑十万个会话,就是十万个互不可见的容器。

3.5 资源模型与成本​

三个杠杆:

  1. 休眠即让位(最大杠杆) —— 空闲 10 分钟自动休眠,同刻真正占内存的只是正在跑的一小批。这是「池化 + 挂起」,不是「一人一台」。
  2. 配额隔离 —— 每个沙箱有独立 CPU / 内存上限,单个会话跑爆是自己 OOM,不影响邻居。
  3. 弹性调度 + 排队 —— 按节点剩余资源分配,不足则扩容,满则排队;唤醒时先重建容器再挂回卷。

为什么必须回收:

假设换算成本量级
10 万容器 × 512 MB 内存51 TB 内存约 150 万/月(按 1 GB ≈ ¥30/月)
10 万会话 × 50 MB 文件5 TB 对象存储低两三个数量级

内存比磁盘贵两三个数量级,因此「让所有历史会话常驻内存」在架构上不可行 —— 这是物理约束,不是优化选项。


4. 本地文件夹(本机执行)​

4.1 执行栈​

层作用
WorkBuddy 客户端常驻,负责调度与界面
会话进程即执行环境,独立 pid + 心跳
本地文件夹Agent 真实读写,不经上传
workbuddy.db对话历史与状态落本地
云端只负责模型推理

执行链路:建会话(在 workbuddy.db 落记录,绑定目录路径为 cwd)→ 拉起或复用本机进程(含 prewarm 预热进程)→ 直接在目录内读写(无上传/下载环节)→ 起子进程执行(python / node / git / ffmpeg)→ 产物直接落盘。

4.2 实测数据​

来自一台运行中的 macOS 机器(Darwin arm64):

实测项结果
会话记录字段pid、cwd、startedAt、lastHeartbeat、kind
会话类型interactive(交互)与 prewarm(预热)
心跳秒级刷新
会话数据~/.workbuddy/sessions/*.json
对话历史~/.workbuddy/workbuddy.db(SQLite + WAL)
状态目录总占用~/.workbuddy 2.0 GB(logs 402 MB、projects 29 MB、traces 18 MB)

每个会话 = 一个本机进程(pid)+ 一个工作目录(cwd)+ 一条心跳。 这就是本地模式「执行环境」的真实形态。

4.3 持久化边界​

全持久。文件系统、Python / Node、venv、node_modules、系统工具都在磁盘上,不随时间丢失。重开只需「重启进程」,不涉及环境重建 —— 没有冷启动,也不需要重新装依赖。

4.4 四个真实代价​

  1. 路径依赖脆弱 —— 工作目录被改名或移动,会话即丢失路径。这是本地模式最常见的事故。
  2. 磁盘持续增长 —— 实测 2.0 GB,日志占大头。需定期清理 logs 与 traces。
  3. 关机即停 —— 系统休眠或合盖,正在跑的任务中断,没有云端接管。
  4. 无硬隔离 —— 本地的「沙箱」只是权限边界(限制在 workspace 内、高风险操作需确认),不是容器;安装的东西会留在你机器上。缓解:WorkBuddy 优先使用托管的 Python / Node 运行时(~/.workbuddy/binaries),不污染系统环境。

5. 操作语义(两种模式通用)​

操作远程空间本地文件夹
切换到别的会话原沙箱转休眠进程常驻,仅切换上下文
关闭再打开已休眠或已回收,首次需等待进程被终止,重开时重新拉起
换设备登录同一个沙箱,直接接上接不上(数据在本机)
删除会话永久清除文件仍在磁盘,会话记录清除
归档会话移出列表,数据保留移出列表,数据保留

无论哪种模式,文件与对话历史都不会因为「关了」而消失。 判断沙箱冷热的方式很简单:打开得越快,容器越热。


6. 事实分级​

内容依据
独立沙箱、完整 Linux 文件系统与终端✅ 官方文档原文
Session 与 Runtime 通常一一对应✅ 官方文档原文
空闲 10 分钟自动休眠、访问自动唤醒✅ 官方文档原文
每个 Session 独立对话历史与文件存储✅ 官方文档原文
删除 Session 永久清除对话记录和文件✅ 官方文档原文
本地模式:每会话一个本机进程 + 心跳✅ 本机实测(~/.workbuddy/sessions/*.json)
本地模式:对话历史存于 workbuddy.db✅ 本机实测
本地模式:依赖与文件不随时间丢失✅ 由「数据在本机磁盘」必然推出
数天后容器回收、转快照 / 冷存储⚠️ 官方未逐年写明,按云沙箱通行实现推断
只有 /workspace 持久、系统层不持久⚠️ 按容器存储通行约定推断,实际会遇到
单沙箱内存规格、扩容策略、调度算法⚠️ 内部实现未公开,方向可信,具体数字不作准

账号级保留期限以会员条款与页面最新提示为准。


参考​