SVG 附件输入
本页为中文说明;规范以英文源规格为准。
本文针对 issue #946 补充代理运行时和 按模型能力传输图片。 不改变模型能力判定、协议、存储结构或附件根目录权限。
传输约定
SVG 是文件附件,不是直接发送给模型的图片载荷。通过 MIME 主类型 image/svg+xml(忽略大小写及参数)或 .svg 文件名、路径(忽略大小写) 识别。SVG 元数据优先于旧的 kind: "image" 或冲突的位图 MIME 标记。 这不意味着其他图片格式被所有服务商普遍支持。
剪贴板中的 SVG 没有文件扩展名时,保存时补充 .svg。原生文件选择器、 项目路径附件、重试和历史恢复采用同一分类规则。保留 SVG 原始字节, 不引入栅格化、脚本执行或外部资源获取。
新提示词使用现有的安全 @path 文件引用,而不是内联 base64。 历史内容寻址 SVG 保留持久化引用,并在所属会话的 scratch replayed/ 目录中生成可读取副本。历史恢复还会清除旧的临时图片数据,引用无法解析 时也一样。不会改写已存储的会话或删除原始附件。缺失或越界的新附件仍然 通过现有路径边界报错,不得退化为未经校验的文件引用。
位图分类、视觉能力判断、内联大小上限和非视觉模型的文件回退保持不变。
E2E-ATTACHMENTS-svg-file-fallback
- 前置条件: 隔离的桌面配置和工作区;启用图片输入的本地模拟服务商; SVG、PNG 测试文件;不使用真实服务商凭据。
- 步骤: 粘贴 SVG,通过原生选择器导入 SVG,将项目 SVG 拖入输入框。 分别附带文字发送,再混合发送 SVG 和 PNG。重试旧 SVG 附件,重新打开 包含旧图片类型 SVG 的会话。关闭图片输入后重复,并尝试越界路径。
- 预期: SVG 保持为可读文件,不出现在服务商图片内容块中;启用视觉 输入时 PNG 仍使用原有图片传输。原始字节和无关提示词文字保留。 旧 SVG 通过所属会话 scratch 安全恢复。越界路径仍被拒绝。
- 规范: 本文;03-runtime/02-agent-runtime。
- 验收: 附件传输和会话根目录限制。
- 里程碑: 维护。
- 状态:
apps/desktop/test/svg-attachments.test.mjs提供服务层回归覆盖; 宣布桌面集成验证完成前,仍需完整 Electron/服务商边界端到端验证。
构建工作区依赖后运行服务层回归:
sh
node --test apps/desktop/test/svg-attachments.test.mjs1