输入框本地路径

用户在 Electron 桌面 App 中拖入或选择本地文件、图像或文件夹时,发出的消息必须标识原始绝对路径。现有附件卡片和字节上传行为保持不变。

已确认缺口

边界当前行为要求行为
Electron preload提供窗口和 Web 标签 API,但没有获准的文件路径访问器。通过现有桥接暴露 webUtils.getPathForFile。
输入框待提交状态仅保存来自以下字段的 basename:File.name.为图像与文档保存可选且不可变的 sourcePath。
提交文档仅在后端保存副本后获得路径;图像没有原始路径;无法读取的文件夹被描述为未发送。存在以下字段时,发送带有 JSON 编码原始绝对路径的附件标记:sourcePath。

数据流

用户拖入或选择
File
→
预加载
getPathForFile(file)
→
待提交状态与消息标记
[attachment: … @json "/abs/path"]

行为合同

项目与附加目录控件

环境标签行包含两种路径控件。项目标签选择草稿的主要工作目录;首次提交轮次后变为只读,因为 cwd、权限基线和会话仓库位置已经固定。文件夹加号控件管理附加工作目录,在活动会话中仍可编辑。

范围与拒绝的修改

涉及 Electron preload 桥接、桥接 TypeScript 合同、输入框附件状态、提交标记构建及现有后端标记改写。不涉及附件卡片样式、目录遍历、递归浏览器上传、任意文件系统扫描、新 IPC 处理器、上传大小修改、Programs UI 或依赖。

拒绝使用非标准旧字段 File.path;拒绝在渲染器启用 Node integration、对可读文件以仅路径消息替代上传、在普通浏览器中编造相对路径,或递归枚举拖入目录。

验收与验证

聚焦检查必须证明:preload 对同一个 File 对象返回精确原生路径;路径捕获处理桥接缺失、空结果和异常;文档、图像及不可读文件夹标记包含完整路径;带括号的文件名安全显示;包含 ]、引号及尾随空格的路径可通过两个解析器往返;无路径浏览器附件保留当前标记;同名浏览器附件及混合来源附件保持区分;后端持久化不重复添加已有路径标记的附件;TypeScript、桌面检查、Web 检查、后端附件测试、构建、文档链接及 diff 空白检查通过。

实现状态

已实现并通过审查。聚焦 RED 确认 preload 路径边界缺失、输入框缺少来源信息及后端标记重复。最终实现为文件、图像和文件夹保留 Electron 路径;普通浏览器上传保持不变;区分同名附件来源;使用 JSON 编码路径标记往返合法分隔符和尾随空格,并继续读取历史标记。聚焦 Web 与 Python 检查、TypeScript、完整 Web 与 Desktop 检查、生产构建、文档构建与链接检查、Ruff 和 diff 空白检查通过。独立规格与质量审查通过。preload 边界在 VM 中使用同一个 File 对象验证;本次验证不包含真实窗口手动拖拽。