打开文档导航

Fresh Guest 的真实含义

一句话

Fresh Guest 表示一次执行不会继承上一次 Guest 的隐藏可变状态;它切断 Python heap、globals、module mutation、WASI handle 和 per-Run Broker context,但不承诺启动免费或执行完全确定。

先看一个例子

想象一门程序设计课共用实验机。仅仅清空终端屏幕或重新运行 main(),并不能保证上一位同学留下的全局变量、已导入模块、打开文件和后台连接都消失。

更可靠的做法是给每次实验建立一个新的受控环境。课程可以继续复用编译好的工具和只读教材,但学生拿不到上一轮程序留下的可变对象与句柄。

Pysolate 的 fresh execution 接近第二种做法。“新”指请求级可变执行状态重新建立,不是把整个软件栈从磁盘重新安装一次。

真实机制

一个 Guest 包含执行 Agent Program 所需的 Python/WASM 运行状态。上一轮可能修改或持有:

  • Python heap、globals 和 module state;
  • WASM linear memory、globals、tables 和当前 module instance;
  • WASI 文件或其他 resource handle;
  • 当前 Run 的 request、workspace temporary 和调用上下文;
  • 与本次 Plan、Broker、execution identity 绑定的 Host-call 路径。

Fresh Guest 不把这些对象作为下一次 Run 的起点。Runner 结束时关闭 module、temporary 和 request-scoped 资源;下一次执行重新建立 Guest 与 per-Run context。

Host 仍可跨 Run 保存不携带旧请求权限的对象,例如编译产物、不可变 artifact/image bytes、evidence record,或 Linux 上封存的 private-COW linear-memory baseline。新 consumer 必须重新绑定当前 Run 的 Plan、Broker 和 source identity,并拥有自己的可变 mapping。Fixed prepared-data lane 的 StagedObject 与 materialized body 仍是 Run-private,不能当作跨 Run dataset cache。

Prepared Family 正是这条边界的一个当前实例:family 可以保留同一份 immutable NumPy input/image,但每个 member 仍创建 fresh module、Host context 和私有 ndarray。需要 capability 的 member 重新绑定自己的 Plan/Broker;Invocation、workspace、cancellation、response 与 Python mutation 也逐 member 私有。共享 family 不是恢复旧 Guest。

可跨 Run:Host-owned immutable artifact / record / sealed baseline
不可继承:旧 Guest heap / module / handles / Broker context

只创建一个新 Python namespace 不够。如果底层 interpreter、WASM module、文件句柄或 Host context 仍是旧对象,隐藏状态仍可能泄漏;freshness 必须覆盖真实执行 owner,而不只是变量字典。

为什么重要

技术上: 失败或恶意执行留下的 module mutation、脏页和句柄不会自然流入下一次请求。复用可以针对明确的不可变对象,而不必保留整个长期运行的解释器。

产品和业务上: 多个 Agent 或用户可以共享计算基础设施,同时减少“前一个任务改变了后一个任务”的隐蔽问题。系统也更容易把一次事故限制在一份 Run 和 workspace attempt 内。

不能推出什么

  • Fresh execution 仍要支付实例化、materialization、验证和 cleanup 成本。
  • Guest 仍可能观察 clock、random 或外部服务,因此 fresh 不等于 deterministic。
  • 当前 private-COW 只封存受限的 WASM linear memory,不是完整 CPython heap snapshot。
  • Prepared Family 的多 consumer input 不是 durable cross-Run dataset cache,也不会让 runner 可重复使用。

术语卡

  • Fresh Guest:不继承上一轮隐藏可变执行状态的 Guest。
  • Hidden state:未在显式输入或 contract 中声明的 heap、module、handle 等状态。
  • WASI handle:Guest 访问受控文件或资源时使用的运行时句柄。
  • Prepared artifact:由 Host 准备并按明确 identity 复用的对象。
  • Consumer:从只读基线创建、服务一次执行的私有实例。

继续阅读