Skip to content
FunCoding

Search

Search docs, Skills and MCP

Daemon 文件与附件边界

区分 HTTP 工作区读写、agent 主机访问、乐观锁和附件迁移。

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

HTTP 文件 API 和模型内置文件工具不具有相同边界。HTTP 路由保持工作区约束;agent 的文本读取遵循 CLI 权限,获准后可能读到注册工作区之外的主机文件。

HTTP 文件接口

接口用途
GET /file读取文本;完整快照返回原始字节 sha256 哈希
GET /file/bytes有界字节窗口,以 base64 返回
POST /file/write创建或替换文本
POST /file/edit一次精确文本替换

替换和编辑需使用最近完整快照的 expectedHash。超过 256 KiB 的大文本按有限行窗口读取时没有完整 hash,不能用局部内容充当全文件并发令牌;完整窗口的 /file/bytes 也可提供相应 hash。

create 不覆盖旧文件;显式写忽略路径可以允许,但记录审计。这组文本 API 不负责二进制写入、删除、移动、mkdir 或递归创建父目录。strict mutation 路由在可信 loopback 默认有 operator 权限,其他模式按 operator 凭据门禁处理。

agent 读取和最终写入

模型直接 read_file 以及编辑、Notebook、sed 等预读走 child 本地 CLI 权限。外部路径通常要求确认,但 allow rules 和审批模式可能自动允许;不能把 HTTP 文件服务的扫描上限、符号链接拒绝和审计假设套到这些读取。

确认 diff 可能在用户批准前就发给全部附着 SSE 客户端,因此共同 bearer 的客户端应被视为同一安全主体。

write_file、edit、notebook_edit 和 Shell 模拟 sed 在通过原权限流程后,可携带内部来源信息经 daemon 最终写入主机外部绝对路径,而不再次确认。外部 host writer 有 5 MiB 编码限制、叶符号链接拒绝、规范路径锁、原子 rename、mode 保留、generation guard 与审计。

普通 HTTP、任意 ACP 写、外部注入桥接和 Shell 重定向没有这项文本工具例外。该设计也不让 Shell 成为受工作区严格隔离的进程;实际隔离仍需系统层保障。

新文件权限

文本 writer 新建文件默认 0600,不受 daemon umask 放宽影响;已有文件保留权限,包括可执行位。需要按系统 umask 创建新文件时,在启动环境配置 QWEN_SERVE_NEW_FILE_MODE=system,新文件使用 0666 & ~umask。

owner 是默认值,0600 是它的唯一八进制别名,值大小写不敏感;其他值告警并保留 0600。作用于工作区文本、同机外部 writer 和 HTTP 文本写入;POST /file/upload 的二进制新文件始终 0600。改变后重启 daemon。

会话附件存储

Web Shell 通过 POST /session/:id/attachments 上传文件和图片。默认放在运行时临时目录下,按 projectHash 与 session- 分区;可用 QWEN_SERVE_SESSION_ATTACHMENTS_ROOT 指定可写根目录,支持绝对路径、相对 daemon cwd 的路径、~ 或 ~/ 展开。

设置新根后只向新位置写,读取和删除找不到时回退默认目录;旧目录不可写导致无法删除时会报错,不假装成功。反过来删除环境配置会让已写入自定义根的附件不可达,因此同工作区应保持配置稳定。

删除会话会清理两个根中的附件目录,归档则保留。环境在启动时读取,修改后需重启。主章旧的 text-only 限制不能覆盖这条已具体描述的附件存储接口;prompt 仍受默认 10 MB JSON body 上限约束,也没有流式大附件上传保证。

内部窗口、游标与 adapter 责任见WorkspaceFileSystem和错误类型。