🐳 第七章 从Tool Call到Agent Runtime
📄 一句话概括

实测沙箱是三处接缝+一条策略:bash-sandbox/pwsh-sandbox/fs-sandbox 各管一类动作,sandbox-policy 一句话划定范围。

📝 本节和前面几节的关系

PTC 与 Subagent 讲完,第三个大件是执行环境——能力在哪儿跑,由 Runtime 说了算。

一、三处接缝

沙箱不是一个大开关,而是按动作类别挂的三处接缝——命令归命令、文件归文件,各管一段。

二、一个提供者

sandbox → dsh-sandbox-local。

沙箱本身也是一种可替换的能力(回扣 7.3.1):本地实现是 -local,将来换容器或远端实现,能力名不动。

三、一条策略

sandbox-policy 的两个真实取值:

也就是说,2.2 那个【工作区】正是从这里被接进权限系统的;不选工作区就发不出消息,因为沙箱不知道圈哪里。

四、三档枚举,配好对给出

每一档都是【沙箱+审批】成对给出的,不给自由组合——这就是 4.5.1 讲的单调。

五、动手 Demo:Sandbox 的三处接缝与一条策略

实测沙箱相关条目:

items = [("sandbox", "dsh-sandbox-local", "本地实现"),
         ("sandbox-policy", "dsh-sandbox-policy", "mode + workspaceRoot"),
         ("bash-sandbox", "dsh-bash-sandbox", "非 win32"),
         ("pwsh-sandbox", "dsh-pwsh-sandbox", "win32"),
         ("fs-sandbox", "dsh-fs-sandbox", "全平台")]
for a, b, c in items:
    print("  %-16s %-20s %s" % (a, b, c))

实跑输出:

--------------------------------------------------------------------
Sandbox 的三处接缝与一条策略
--------------------------------------------------------------------
  实测沙箱相关条目:

  条目                  包                     条件或取值
  --------------------------------------------------------------------
  sandbox(提供者)     dsh-sandbox-local      本地实现
  sandbox-policy        dsh-sandbox-policy     mode + workspaceRoot
  bash-sandbox          dsh-bash-sandbox       非 win32;超时 60000ms
  pwsh-sandbox          dsh-pwsh-sandbox       win32
  fs-sandbox            dsh-fs-sandbox         全平台
  --------------------------------------------------------------------

  策略里的两个真实取值:
    mode          = DSH_PERMISSION_MODE ?? 'workspace-write'
    workspaceRoot = process.cwd()

  三档枚举把【沙箱 + 审批】配好对:read-only、workspace-write、
  danger-full-access。**能力在哪个环境里跑,由这条策略说**。

三处接缝一策提供者——沙箱不是一个大开关。 workspaceRoot = process.cwd() 把工作区接进了权限系统。 三档枚举每档都是【沙箱+审批】成对给出——不给自由组合。

30 秒实验

  1. 在配置树里找出三处沙箱接缝与那个提供者。
  2. 读一遍 sandbox-policy 的两个取值,说出各自管什么。
  3. 想想为什么审批与沙箱要成对给出,而不是分开配。

常见误区

  1. 错误:沙箱就是关了网络或者禁了写。——纠正:它是按动作类别挂的三处接缝——命令与文件各管一段。
  2. 错误:沙箱范围由模型决定。——纠正:由策略定——mode 与 workspaceRoot 都在配置里。
  3. 错误:沙箱与审批可以随意组合。——纠正:三档枚举成对给出——每档内部的配法是定好的。
自测三问(点开对答案) 1. 沙箱有哪三处接缝? —— `bash-sandbox`、`pwsh-sandbox`(按平台二选一)、`fs-sandbox`(全平台)。 2. sandbox-policy 的两个取值? —— `mode`(环境变量,默认 workspace-write)与 `workspaceRoot`(process.cwd())。 3. 三档枚举为什么成对给出? —— 因为**沙箱与审批是两件必须配合的事**——分开配会出现自相矛盾的组合。

相关笔记