问题描述
在 Linux 桌面版 Pi Agent v0.4.1 中,无法通过 Ctrl+V 将剪贴板里的图片粘贴到聊天输入框。
文本粘贴正常,剪贴板也明确提供了 image/png、image/jpeg 等格式。复现时 Agent 处于空闲状态,因此不是运行期间禁止添加图片附件的限制。
当前 main 分支中的 ChatInput.tsx 仍然只从 clipboardData.items 获取图片:
https://github.com/abcwyc/pi-agent-desktop/blob/main/components/ChatInput.tsx#L1228-L1235
复现步骤
- 在 Linux 桌面环境中复制一张截图或位图到剪贴板。
- 启动 Pi Agent Desktop v0.4.1。
- 新建会话并确认 Agent 处于空闲状态。
- 点击聊天输入框。
- 按 Ctrl+V。
实际结果
界面没有任何变化,也没有错误提示或图片预览。
X11 剪贴板能够提供图片格式:
image/png
image/jpeg
image/webp
image/bmp
使用最小 WebKitGTK 页面监听 paste 事件时,事件会触发,但其中的数据为空:
{
"types": [],
"items": [],
"files": []
}
因此现有的 handlePaste() 无法获得任何 image/* 条目。
预期结果
粘贴图片后,聊天输入框上方应显示图片附件预览,并允许随下一条消息发送。
环境
- Pi Agent Desktop: v0.4.1
- Linux: Arch Linux
- 桌面环境: KDE Plasma
- 会话类型: X11
- webkit2gtk-4.1: 2.52.5-2
- GTK3: 3.24.52
- 安装来源: AUR
pi-agent-desktop-bin
- 该包直接重新打包官方
.deb,没有修改前端粘贴逻辑
已完成的排查
- Agent 空闲时仍然可以稳定复现。
- 剪贴板确实包含
image/png 等图片目标。
- 在 Chromium 页面中注入标准
image/png ClipboardEvent 后,现有代码能够生成图片预览,说明附件处理逻辑本身可用。
- 独立 WebKitGTK 2.52.5 页面收到的
paste 事件中,types/items/files 全部为空。
WEBKIT_DISABLE_DMABUF_RENDERER 等渲染设置不会改变结果。
- WebKit 官方已有相同问题:
https://bugs.webkit.org/show_bug.cgi?id=320303
该问题同时在 WebKitGTK 2.52.5、Wayland、Epiphany 和 MiniBrowser 中复现,目前状态为 NEW。
建议修复方式
应用已经初始化了官方 Tauri clipboard-manager 插件:
https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/src/lib.rs
但当前 capability 只允许读取和写入文本,没有允许读取图片:
https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/capabilities/desktop-dialog.json
建议:
- 增加以下权限:
"clipboard-manager:allow-read-image"
- Linux 桌面端收到
paste 事件但 clipboardData.items 没有图片时,调用 @tauri-apps/plugin-clipboard-manager 的 readImage()。
- 读取图片的 RGBA 数据和尺寸,通过 Canvas/ImageData 转换成 PNG Blob/File。
- 将生成的 File 继续交给现有
processImageFiles(),复用大小、数量和预览处理。
- 只在桌面端且浏览器 ClipboardEvent 没有图片时启用回退,避免影响普通文本粘贴。
Tauri 官方 clipboard-manager 的 readImage() 支持 Linux,因此不需要等待 WebKitGTK 修复:
https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/clipboard-manager
是否可以接受这个修复方向?如果方向合适,我可以进一步准备 PR。
问题描述
在 Linux 桌面版 Pi Agent v0.4.1 中,无法通过 Ctrl+V 将剪贴板里的图片粘贴到聊天输入框。
文本粘贴正常,剪贴板也明确提供了
image/png、image/jpeg等格式。复现时 Agent 处于空闲状态,因此不是运行期间禁止添加图片附件的限制。当前
main分支中的ChatInput.tsx仍然只从clipboardData.items获取图片:https://github.com/abcwyc/pi-agent-desktop/blob/main/components/ChatInput.tsx#L1228-L1235
复现步骤
实际结果
界面没有任何变化,也没有错误提示或图片预览。
X11 剪贴板能够提供图片格式:
使用最小 WebKitGTK 页面监听
paste事件时,事件会触发,但其中的数据为空:{ "types": [], "items": [], "files": [] }因此现有的
handlePaste()无法获得任何image/*条目。预期结果
粘贴图片后,聊天输入框上方应显示图片附件预览,并允许随下一条消息发送。
环境
pi-agent-desktop-bin.deb,没有修改前端粘贴逻辑已完成的排查
image/png等图片目标。image/pngClipboardEvent 后,现有代码能够生成图片预览,说明附件处理逻辑本身可用。paste事件中,types/items/files全部为空。WEBKIT_DISABLE_DMABUF_RENDERER等渲染设置不会改变结果。https://bugs.webkit.org/show_bug.cgi?id=320303
该问题同时在 WebKitGTK 2.52.5、Wayland、Epiphany 和 MiniBrowser 中复现,目前状态为
NEW。建议修复方式
应用已经初始化了官方 Tauri clipboard-manager 插件:
https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/src/lib.rs
但当前 capability 只允许读取和写入文本,没有允许读取图片:
https://github.com/abcwyc/pi-agent-desktop/blob/main/src-tauri/capabilities/desktop-dialog.json
建议:
"clipboard-manager:allow-read-image"paste事件但clipboardData.items没有图片时,调用@tauri-apps/plugin-clipboard-manager的readImage()。processImageFiles(),复用大小、数量和预览处理。Tauri 官方 clipboard-manager 的
readImage()支持 Linux,因此不需要等待 WebKitGTK 修复:https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/clipboard-manager
是否可以接受这个修复方向?如果方向合适,我可以进一步准备 PR。