Skip to content

fix: macOS 剪贴板含图片和文件引用时,格式漏报导致无法粘贴 #55

Closed

Description

@Fartown

问题与确认根因

macOS 上剪贴板同时包含 PNG/TIFF 像素和文件引用时,Orca Native Chat / 终端无法粘贴图片。当前失败样本的真实 Electron 读取结果:

{
  "formats": ["text/uri-list"],
  "nativeFormats": {"public.png": true, "public.tiff": true},
  "imageEmpty": false,
  "size": {"width": 3022, "height": 1690},
  "textLength": 0
}

原生剪贴板的 PNG 为 725757 字节;Electron readImage 可读出像素。availableFormats() 却不列出 image MIME。Orca 的 readClipboardImageSource() 仅据 image MIME 判断,因而在 hasImage/saveImage 入口提前返回无图。已从安装的 1.4.214-preview.51 app.asar 确认同一判断逻辑。

修复方向

  • macOS 在 MIME 未命中时补 clipboard.has('public.png') / clipboard.has('public.tiff'),不为 presence 检查解码像素或读文件。
  • 保留既有 MIME 判断与 Windows 文件回退;复用本地、SSH、paired runtime 图片保存和大小限制。
  • 不改系统剪贴板,不需要恢复/重写剪贴板才能正常粘贴。

验证与状态

  • 新回归用例在修改前 3 项失败:PNG、TIFF、二者并存均被判断为无图。
  • 修复后定向 5 文件 62 项、composer 回归 6 文件 108 项、剪贴板域 14 文件 139 项通过(轮次有重叠),另有 1 个既有测试跳过。
  • 尚未合入或部署到用户的运行应用,不能将源码修复等同于安装版本已修复。

诊断修正

第一次读取的剪贴板曾仅有 HTML 私有 native-resource: 图片引用;那次没有保留完整 URI。当前用户明确确认的失败样本有标准 PNG/TIFF,真实实验已证明格式列表漏报,因此本 issue 聚焦这个已复现的根因。HTML-only 私有资源是另一项未确认的兼容问题,不宣称本次修复覆盖它。

私人图片、文件路径和剪贴板引用不上传。

本轮修复与真实应用验证

  • 修复位于独立分支 feat/clipboard-image-detection,补 macOS 原生 PNG/TIFF 格式检查,生产改动仅新增一个小模块和来源识别接线。
  • 本地隐藏 Electron 直接读取用户失败图片,不修改系统剪贴板:hasImage=true,保存 PNG 后读回成功,原生 paste 与菜单 paste 分别显示附件。
  • 真实 SSH 连接、relay/SFTP 保存和独立 SSH 读回成功;聊天附件预览成功。SSH 验证在隔离进程回放原生格式与合成位图,未改用户剪贴板,未 mock SSH 或保存/预览链路。
  • 完整类型检查、Electron/relay 构建、变更代码质量、提交前 lint、三项本地化检查通过。
  • 默认全仓架构门禁仍有 19 项既有 reference-drift(涉及文件本轮均未改动);增量门禁通过,未放宽检查。
  • 尚未提交、合入、发布或重启安装版本;issue 保持打开,不能将源码修复等同于用户当前应用已修复。

Activity

  1. changed the title [-]fix: Native Chat 无声忽略仅含 HTML 图片引用的剪贴板[/-] [+]fix: macOS 剪贴板含图片和文件引用时,格式漏报导致无法粘贴[/+] on Oct 21, 2026
  2. Fartown commented on Oct 21, 2026

    @Fartown
    OwnerAuthor

    已合入并推送 fork/integration,提交 3ddd3ad32bac459223670a34512cd7c73216aed5;上游同步到 2eae220b2ef51cce9da4f90fbaafcd79b9520f8c。

    本次复用上游 stablyai/orca#27346 的 PNG/TIFF 检查(0081ea09412c1d05a03f1fcd933abb657816de6d),没有再叠加本地重复补丁。旧 SSH relay 已由上游取消,fork 的 Goal、Issues、会话身份、远程文件和分享入口随同步迁移到执行主机的 orcad,并更新注册、接缝和测试。

    验证结果:

    • 四目标类型检查、三项本地化、16 组架构策略、15 项 fork 功能注册和全部注册功能回归通过。路由授权聚合测试两次超时后拆为逐路由用例,保留全部 9 个页面入口、全部断言及原单用例超时;12 项通过。
    • 隔离隐藏 Electron 回放已采集的 URI-only 枚举和原生 PNG/TIFF 形态,真实 IPC 保存图片,Native Chat 缩略图加载成功。
    • 实际 SSH 启动独立 orcad,图片保存及独立 SSH 读回成功;Goal、Issues、PTY 输入输出、路径授权、预览、文件夹/Git 工作区上传及分享 HTTP 读回均通过。未 mock 远程保存和预览通路。

    没有修改用户系统剪贴板,没有安装或重启用户应用,也没有升级现有远程服务。当前运行的旧安装版本尚未获得本次修复。远端集成构建结果仍在跟踪,完成后再更新此 issue。

  3. Fartown commented on Oct 21, 2026

    @Fartown
    OwnerAuthor

    已完成合入和发布,关闭此源码修复 issue。

    • 最终提交:ce4b4c54a3528394f7ff6cfd51ce878eeee2b9ef,已推送 fork/integration;main 保持上游镜像 2eae220b2ef51cce9da4f90fbaafcd79b9520f8c。
    • 最终集成流水线成功:5 项通过、2 个手动探针按条件跳过,macOS、Android 和发布任务均成功。
    • Orca 1.4.214-preview.52已发布 Apple Silicon DMG、更新 ZIP 和 Android APK;发布元数据与 build-info.json 均指向上述最终提交。
    • 首次远端 Android 构建暴露出上游移除 Zustand 后,fork 更新界面仍需该依赖的问题。已恢复 mobile 的独立声明和锁文件,加入依赖契约;原生 Android Metro 导出、移动端类型检查与 21 项更新功能回归通过,随后完整 CI 通过。首次失败未当作通过。

    图片修复复用上游 PNG/TIFF 识别实现。本次没有安装或重启用户正在运行的 Orca,也没有升级已有远程服务;当前旧版本需安装上述更新后才会获得修复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions