Skip to content
FunCoding

Search

Search docs, Skills and MCP

文件错误、审计与 ACP 传递

按 errorKind 区分路径、权限、并发、内容和系统 I/O 故障。

This page has not been translated into English yet. The original Chinese version is shown below.

WFS 的 FsError 把文件访问失败规范成类型与 HTTP 状态。客户端应按类型选择恢复动作,而不是用英文 message 文案匹配业务逻辑。

错误类别

errorKindHTTP判断方向
path_outside_workspace / symlink_escape400路径越界或目标 symlink
path_not_found404文件不存在
binary_file422文本路由不能处理该内容或编码
file_too_large413完整读取、扫描窗口或写入超过边界
hash_mismatch409并发校验失败,或稳定读期间发生不允许的变化
file_already_exists409create 不覆盖已有文件
text_not_found / ambiguous_text_match422精确编辑没有命中或多处命中
untrusted_workspace403未受信工作区写入
permission_denied403OS EACCES/EPERM
io_error503ENOSPC、EIO、EBUSY、EMFILE 等系统 I/O 问题
internal_error500非 errno 的内部程序异常
parse_error400 或 422请求解析或服务内部约束失败

磁盘满属于 io_error,不能与 permission_denied 合并成“权限不足”。hash_mismatch 后应重新读取和核对修改,不能直接换成无条件覆盖。

ACP 保留结构化信息

ACP 默认错误序列化可能只留下 message 和 -32603。BridgeClient 因此识别 Error.name 为 FsError 且具有字符串 kind 的错误,再包装成 RequestError。

JSON-RPC code 仍为 -32603,但 data 中保留 errorKind 及可选 hint、status。消费者应读取 data.errorKind,而不是看到 -32603 就把所有失败视为未知服务崩溃。

该识别使用结构检查,避免 acp-bridge 反向依赖 CLI 中的 FsError class。不是所有错误都因此被转换;普通非 FsError 原样继续传播。

Adapter 的责任

一旦注入 BridgeFileSystem,原 inline 文件代理路径就被绕过。自定义 adapter 仍需拒绝非 regular file,并保持有界读取;只调用 fs.readFile 全量读取后截出十行,不能满足大文件有限成本要求。

默认 inline fallback 的缓冲上限为 100 MiB;生产 WFS 的完整 snapshot 上限更小,为 256 KiB,大文件需要流式窗口。两种实现不能宣称具有同一边界。

审计记录

成功和拒绝分别产生 fs.access、fs.denied,携带请求 context、path、intent、outcome,以及可选 errorKind、bytesRead/bytesWritten、sha256。

记录进入与审批共用的 512-entry PermissionAuditRing。它是有限 FIFO,不能作为永久审计归档;外部监控 sink 在该章节中仍属后续方向,不应被描述为自动已接入。