文件 I/O 模型
wesgine 的文件 I/O 分为三个域:ArtifactDir(持久产出)、ScratchDir(临时计算)和 HostPaths(宿主路径)。
三域模型
| 域 | 路径 | 特点 |
|---|---|---|
| ArtifactDir | {CellDataDir}/workspace/{actor}/ | 持久产出,Cell 内 |
| ScratchDir | .scratch/{runID}/ | 临时计算,Run 结束后 GC |
| HostPaths | 宿主文件系统路径 | 引擎只验证边界 |
ArtifactDir(INV-IO-01, INV-IO-04)
- 由引擎从
(CellDataDir, Actor, AgentID)推算 - 不从 AppRunRequest 外部传入
- 物理在 Cell 目录下,满足 AX-1 隔离 + Export 可移植
- 不出现在系统提示词的"项目"列表中
ScratchDir(INV-IO-06)
- Run 结束后由引擎 GC(
os.RemoveAll(scratchDir)) - 用于临时计算、中间文件
HostPaths(INV-IO-07)
- 引擎只验证边界
- 不 MkdirAll、不 Chmod、不 GC、不 Export
- 消费方通过
CellSpec声明
PrimaryRoot(INV-IO-09)
Agent 认知的"主工作上下文"——出现在系统提示词标为 active project。
Fallback 链:
- 显式声明
CellSpec.AgentDefaults.Workspace.PrimaryRoot AllowPaths[0]- ArtifactDir
必须在 AllowPaths ∪ {ArtifactDir} 内。
Exec CWD 优先级(INV-IO-03)
显式 cwd 参数 > PrimaryRoot > ScratchDir > ArtifactDir
编程场景下 PrimaryRoot = VS Code 项目根。
写入边界(INV-IO-02)
write/edit/apply_patch 输出必须落入:
- ArtifactDir
- HostPaths
禁止:/tmp、Scratch、任何 Cell 外路径。
Export 行为(INV-IO-08)
- Cell Export 默认包含
workspace/ ExportOpts{SkipWorkspace: true}可排除.scratch/永不包含
Workspace Handle(INV-IO-05)
cell.Workspace() → WorkspaceHandle
.List(actor, path, depth)
.Download(actor, path)
.Upload(actor, path, body)
.Delete(actor, path)
.Stats(actor)
.GC()
.DeleteByPrefix(actor, prefix)
反模式
| 禁止 | 正确做法 |
|---|---|
| 从 AppRunRequest 传入 ArtifactDir | 引擎自动推算 |
| 写入 /tmp 或 Cell 外路径 | ArtifactDir 或 HostPaths |
| HostPaths 做 MkdirAll/Chmod | 引擎只验证边界 |
| Export 包含 .scratch/ | 永不包含 |