Technical Guide
17. Sandbox 源码:执行环境和文件路径怎么管理
从 sandbox.py、provider、local_sandbox、middleware、security、tools 看 DeerFlow 如何组织执行环境。
这一篇看哪些文件
Sandbox 相关目录:
backend/packages/harness/deerflow/sandbox/
建议先看:
sandbox.py
sandbox_provider.py
local/local_sandbox.py
local/local_sandbox_provider.py
middleware.py
security.py
tools.py
sandbox.py:抽象边界
sandbox.py 通常定义 sandbox 的基础能力。
读的时候关注:
文件读写接口
命令执行接口
路径处理方式
错误类型
sandbox_provider.py:谁来创建环境
Provider 负责创建和管理 sandbox。
如果以后要换成本地、Docker 或远程执行环境,provider 是重要扩展点。
local_sandbox.py:本地实现
本地实现适合开发和调试。
但本地实现不等于安全隔离。读源码时要注意它如何限制路径,如何处理文件操作。
middleware.py:把 sandbox 注入执行链路
middleware 负责把 sandbox 放进 Agent 运行上下文。
如果工具调用时能拿到 sandbox,通常就是在这层完成连接。
security.py:安全检查
这里重点看路径、命令、文件访问相关检查。
不要只看 happy path。安全代码最重要的是异常路径和拒绝策略。
这一篇你要记住
Sandbox 源码主线是:
抽象接口 → provider 创建环境 → middleware 注入 → tools 使用 → security 兜底
后面做报告产物时,会用到这些文件边界。
路径处理是重点
读 sandbox 源码时,最应该关心路径。
包括:
相对路径如何转绝对路径
是否允许 ../
文件是否限制在工作目录内
并发写入怎么处理
项目里有 file_operation_lock.py,这说明文件操作并发也是需要处理的问题。
工具层怎么使用 sandbox
sandbox/tools.py 值得看。
它通常会把 sandbox 能力包装成 Agent 可调用工具。
也就是说,Agent 不应该直接操作文件系统,而是通过受控工具完成读写。
安全检查不要绕过
如果你后面新增文件工具,不要为了方便直接读写宿主机路径。
先看现有 security 和 provider 逻辑,保持同一套边界。